♪ [MUSIC] ♪ [CIRO] Alright, here we go.
We're live. [CHEMA] Hi.
[CIRO] Can you hear us? Can you hear us fine? I hope so. [AMEL] Yes. [CHEMA] Hey, everyone. Hello.
[AMEL] Hello. Welcome again to the third episode
of Open Projects: The Journey. The journey because
it's a long journey. We're making something special
and this livestream is supposed to give you an update
on what we're making. And with the third episode,
we're now basically one month and a half in,
right, girls? [CHEMA] Yeah, I think so, yeah.
[CIRO] Almost two months. Wow, it's been that much? Yeah, time flies and even then,
we're still at the beginning of the journey, as you know. So, I'm here with Chema and Amel,
my name is Ciro. And with us we have Carol, actually
from our Community team, Carol, do you want to say hello? <i>[CAROL] Hello, I'm Unity in Chat,
you can talk to me as Unity.</i> <i>Please refer to me
as "Unity," please.</i> Yes, whenever you get a reply
from the official Unity account, it's Carol, our shadow
teammate, I guess. [AMEL] Yes.
[CHEMA] Yeah. [CIRO] Alright, cool,
let's get started. So first things first, some people here,
maybe it's the first time you see this show and maybe
you're wondering, what is actually Open Projects? And so we wanted to give you
a small update or I guess, a recap. [CHEMA] So Ciro, what is... What is Open Project? Well, I guess I'll give
with this camera here. What is Open Project?
Open Project is an initiative which we conceived, I guess,
six months ago. And the idea was basically,
when we stopped traveling because of the current situation,
we wanted to connect more with the community of creators.
And we came up with this idea with Open Projects. And Open Projects is
an ongoing initiative. For now, it's going to last
like six months, where we make a small
vertical slice of a game together with the community,
and this game is open source, that's why it's called,
"Open Projects." How's it going so far,
Chema and Amel? [CIRO] What do you think?
[CHEMA] I think you said it all. It's really exciting, I would say,
to see all these updates coming and I really like how we do
this refresher every time to bring more people and say,
"Hello, you're not late. You can still join,"
so we always try to do this recap, I would say, every time we start. And then I think those people
who just joined might ask as well, "How can we contribute to the project?
How can we really get started?" and maybe Chema
has the answer, I would say. [CHEMA] Yeah, so to contribute
to this project, first you have to download the project
because we have this project. I don't know
if we can see it, Ciro. You can see it in the repo. I guess I need to, one second. [CHEMA] Yeah. yeah, so...
[CIRO] I'll give you this one. Okay, thank you very much. So I'll have to open the... [CIRO] Sorry, you wanted
me to show it. [CHEMA] Yeah.
[CIRO] Sorry, my bad, my bad. Okay, no problem, I think
that the community will understand. Okay, first you have to go
to the Git, you have to download the project and see where we are right now. Also you might need to go
to the forums to discuss whatever you want to do
in this project. And you might also want to go
through the Roadmap in Codecks, which is... I think it's a game design... [CIRO] A project management tool... A project management tool, yes, exactly.
[CIRO] specific to game development. Exactly, yeah. So as you can see
here, we have a lot of decks, each deck contains cards
and each card can be an action that you can own,
discuss in the forums try to achieve, so for example,
here we have... the game settings system which is attributed to the community
and if you want to discuss it, you can go to the forum thread
by clicking this link here, and you can discuss it
and you can see that people already started
talking about it and started having pull requests
and other things. So yes, that's how you can
participate to this project. If you want to find the link,
I think Carol is putting the link in the Chat? Anyway, otherwise,
[CHEMA] Yeah. you can just google Open Projects and then you can find
the repository. And these three items that Chema
just highlighted are basically the beating heart of this project. So just to recap, on the repo,
you'll find the project, the literal assets
that you can download. On the forums, you will find
discussions and you can see that there's plenty of discussions
that have just been updated. This is just like the last
two hours, I think. Yeah, it's crazy. And then you see New Alert,
this is a new discussion. It's relentless. It's relentless. And then the Roadmap,
where you'll find all the items that we need to work on. And actually, there's also
a game design wiki, which details like
how the game works and we are obviously
updating it all the time, so in here you'll find
how the game works and where we're going, basically. The Roadmap, right,
that's the name? Yeah, and I don't know if we can
open the "Up for discussion" deck? We will see here that
we have the game title because we are discussing
the game title. I think that on this point, I'd say
that I have a big announcement for you guys today.
Today is the day where we're going
to reveal the title. [LAUGHS] So I hope you all
are excited about this because I'm really excited,
and I don't know if it's going to be like a shock
or not because I don't know what people are expecting
as a title to win. But I would say that we have
a surprise, so stick around and we're going to announce this
very, very soon in this livestream in this episode today. And then I wanted to maybe,
let's all start by giving a recap of what we have shown previously
in the last episodes. So previously in the Unity
Open Projects' journey, we have shown a few systems
we introduced and we have a lot of updates
we started to share. Of course we are not going into
details, but we want to point more in which episodes you can find
which part so you can easily find this again. And also
we added time stamps for the different previous videos,
so you can go straight to the point to the one that you want. And I think we can get started
with the Toon shader. That was like the first big step.
I would say in the project with Ciro. Yes, the Toon shader
is the first thing that we shown on the very first episode.
It was basically one of the very few things
that we had to show two weeks into the project. So, we dedicated a big section
in the first episode and as Amel said, we added,
how do you call them again? Chapters.
[AMEL] Chapters, yes. Time stamps to the...
[AMEL] Video. to the video,
so now you can basically go back to the video
and quickly jump to the point where we talked
about these systems. The Toon shader, I'm just going
to give a very, very, quick back look at what we shown,
but I don't want to go into too much detail. But if you watch the video,
you'll understand the logic, but I want to show you
where you can find it. If you open the project, you'll see
a folder called, "Shaders" and in here, you will see a Shader
called, "Toon." And then you can open it. I should've opened it beforehand. And as you can see,
it's a pretty elaborate Shader that actually has a bunch of parts. It calculates the lighting
and then it creates also an outline, a toon outline, to recreate the style of the illustrations
that we have in the game. Just to give you can example
of how this looks, if I take the character, just here, that's what the Shader
looks like, right. So, it's a full Toon Shader
that has two bands of lighting, solid and shadow. And then it has this Toon effect,
which is pretty cute on the characters,
and it doesn't have it on the backgrounds. This is a very simple Scene,
I don't want to spoil but we have more stuff. We'll show it to you later.
But yeah, again, first episode, if you go there, you'll find
the Toon Shader. And then what else we talked about?
We talked about the State Machine, which is inside the game
and actually, if I bring back the character. In the game, we introduced
a State Machine solution, which is actually made
by the community. If you remember
in the second episode, I talked about it and I've shown the structure of the State Machine. And again, going very, very fast,
this is just a very quick recap. The State Machine is a way
to have this flow that goes between states,
so you have characters, for example, that can be
in the Idle State and as you press the controls, they're going to
the Start Walking State, sorry, the Start Walking transition
and they transition to another state called, Walking. And again, this is something
we've shown in Episode 2, I think. [CHEMA] Yep.
[CIRO] Correct me if I'm wrong. If you want to recap on this,
jump back to that. And again, this is
a very interesting one because it's a contribution
that comes from our community, specifically it's from
a user called Deivsky. But then other people jumped
on the contribution and added to it, so the State Machine is actually
now changing a lot. Which is, I think is the
interesting thing of this project. We've shown something,
for example in Episode 2, and now we're in the position
where it's evolving. And maybe in a couple of episodes,
we'll show it again, right and we'll show you
how it's evolved. And one big thing, one big point
for me, for this project, is to do this retrospection
and look back and see how a system or something
has evolved in the development of this game. The things that, for example,
the community is working on with the State Machine
specifically is two things: one is improvements on the UX. Because if you go
to Unity, actually, and I'll show you how this looks for now, the State Machine
right now looks like a component that you see here in the Inspector
which links to one of the States. And then this state links
to a bunch of actions, so these are the actions that
the character is performing in that state. And then it links
to a bunch of Transitions. So the Transition, sorry,
the Idle State can transition to these other states and so forth. So as you can see,
there is a lot to do with the UX. Like this tool is fantastic
but creating one and especially tweaking
the State Machine is not super fast, so some members
of the community again, they still have that work
on improving it. And that's something we're going
to see in the coming weeks. So again, if you're curious,
you can actually go right now on the repo and find
some pull requests regarding the State Machine,
which are looking to improve on that. And they're going to be pulled
and merged into the repo in maybe the next week. That's one more interesting thing
that is evolving. Yeah, I think it's interesting
because it's an open project, we see how it really happens, and not only the final project,
but more like the iteration and the steps we go through
and I think this is really interesting to see
and to learn from as well. [CHEMA] Yeah. I think so too. Talking about updates on Episode 2,
I have another update that I want to remind about,
which is the Event system that we have worked on
along with Scriptable Objects, so we have made this example,
as you can see the different Events. And we have shown examples
where we raise Events with no parameters.
So, it's called, Void Event. An example of this was
the Exit Game button pressed, we'd shown an example
if we want to use an integer as a parameter
and we also showed an example for the Scene loading
that takes two parameters, the array of the game scenes
that we want to show and a Boolean to say, if we want
to show the loading screen or not. And again, to remind why we use
this approach of Scriptable Objects combined with Events,
it's because we wanted to use, to avoid using Singletons
and then this system is much more stable
and much more avoids having those rigid connections
that break things easily. So, I want to go quickly
to the Unity Editor and I want to show what
the updates are that we have got.
And it was interesting to show actually how we went through
these updates. After releasing these,
of course, some people went to the repository and one
of the users pulled the project and he put a message on the thread,
"Oh, so I pulled the project, the latest version,
but I can't press Play from the main menu Scene." The problem was because
we always go through the Initialization Scene
with the previous system that we had the last week.
So, we thought maybe at some point, we want to just test some Scene
and we don't want to play the whole game again.
That's really an interesting point that he raised and we were like,
"Oh, let's add the possibility to press Play from any button,"
so we added that task in Codecks in case you have noticed that
and we have implemented that and pushed it to the repository.
So now, if I go to my main menu, we can see that it has this
EditorInitializer Prefab. And this contains the script
that we'll basically check if I press Play from this Scene and I don't have the
Initialization Scene loaded, then I will load it because
it's the one that contains the listener to open or start
the different locations. So now, even though I'm not
in the Initialization Scene, I'm in main menu, if I press Play, we will see that when the menu
appears in the GameView, we can press Start. And now we can have
the game loaded normally and we can do this
from any Scene basically. Now we don't need to go through
the Initialization Scene anymore. We can press Play from any Scene,
all we need to do is just drag and drop this Prefab
which is called, EditorInitializer. And this is...
[CIRO] That's a good point, sorry to interrupt, Amel.
I think creating these small tools seems like such a small thing for now
because what does it take you to just drag another scene
and press Play every single time, it seems like a small thing.
But as we move on and we need to test
different scenes individually, more and more, like imagine
when we have 20 locations and now you want to edit
a cutscene in Scene 1, but also a cutscene in Scene 2, then
you need to jump back and forth, so it's really important to create
these small tools. In this case, you might
almost call it a hack, right, because this tool doesn't go
into the game. Into the game, you will always
start from the beginning. But for us, as we develop,
it's really important to have a way to start
from any scene [CIRO] at any point.
[AMEL] Yeah, yeah. And we actually saw a lot
of contributions for some Editor tools
and we have a section later to talk about
the community contributions, so stay tuned for that one too, we have some solid contributions,
I would say. And other than these updates,
I think in the last episode, Chema talked about the wireframe
and may it's nice to have some refresher on that
as well, right. [CHEMA] Yeah. Actually, yeah,
we talked about UI wireframing, and as you can see,
it didn't change much because we started
the discussion after this. Actually, let me remind you
what the wireframing is. So here, we have the user interface
and how it will look like to help us see how the user
will interact with the game. For example, if we go to Menu,
we will have buttons, we will have the title
and the main focus animated Scene. The thing is,
it will not be in this order or it will not look like this.
It's just to help us see how to interact, how to go
from one Scene to another and also to raise some concerns,
for example, for the mouse or the joy pad
or some things like that. And while doing that,
the discussion that ensued is actually around the inventory
and how to use it to cook and what is the cooking system and how the In Game
would look like. So, this actually was a discussion
that we had with the team and with the community,
and we decided to have something like this.
So, this will not be a game flow. This is a new thing, actually.
Now that the update is finished, I'm going to update you
on the cooking system and the game design. This actually is something like
a flow, a diagram, to help me explain to you
what is the new game design. We will start with
the Start game here, this is a Start button. Sorry, not Start button,
this is the start of the game. Then after the start of the game,
you will go to discover the first location, so here,
we will understand the cooking mechanic,
this is to discover the first location
and the cooking mechanic. So first, we are going to find
an ingredient and then we are going to find a cauldron
to cook in and then we are going to cook a recipe
with the ingredient that we have and the recipes
that we already have in our recipe book. Then we are going to go
to the next location to have a character interaction,
so we are going to interact with another character.
We are going to get a mission and this mission
will not be clearly stated, so they will not tell us,
"Well, look, your mission is to go check something
and get back to me." The mission that they will give us
will be in the form of dialogue so they, for example, will say,
"Oh, I love antiquities, I have a collection of spoons,"
and if you find a spoon as a player, if you find a spoon
somewhere in the world, you can go back
to the first character because you know they like spoons
and you can give it to them or show it to them.
And, for example, here, the answer will be,
"Oh, this is awesome. You're on the right path to have
your own utensil collection. Here's a fork to help you."
So, this actually will not change the way to cook. You still need to have
ingredients and utensils. But the thing is, it's not always
just droppable. You can interact with a character
and get a mission, and then once you achieve a mission
and you go back to the character, you win a prize. This prize
could be an ingredient, a recipe, or a utensil. The mission could be,
"Oh, go look for this," or, "Go give me this dish
or this ingredient," or something. Once you have the prize,
you can go find a cauldron again and cook in it,
and that's the tutorial phase. Then it will be a loop between
interaction with characters, mission and prizes. Also, once you go
to another location, you can find a critter
and fight it. So, this is not clearly
in the tutorial, but it's still a new thing
to understand, but then once you know it,
you can do it again during the game, so you find
a critter, you fight the critter, and then you pick a droppable,
this can be either an ingredient, a recipe, or a utensil. And actually, somewhere in this loop here,
you will find a character, which is the key character
that you need to interact with. This character is very close
to the legendary chef, and they can give you
the last recipe. But the thing is, they give you,
at first, a long-term mission. So, the thing is it can be,
for example, an old lady that knows a lot
but has memory issues and that needs refreshment,
so you need to find something to refresh their memory
to give you the last recipe. Once you achieved
the long-time mission, you interact with
the important character again and you win the prize
to prepare the winning recipe and to end the game, well,
the vertical slice of the game. This is the new-ish game design. It's up for discussion, but for now
this is what we landed on by reading from the threads
and seeing what people are looking at in
the cooking system, etc. I think, Chema, I really like
how you used the notes, specifically in your diagram
because that's exactly what, it's like a suggestion, right. So, these little yellow notes
that you left close to the nodes, it's like the nodes are the flow. Sorry, the nodes,
the blue nodes are the flow. The notes, the yellow notes
are your suggestions. [CHEMA] Yeah, exactly.
[CIRO] It's like what we think will be some example Events,
we will call them. Yeah, we can call them that,
yes, exactly. So, as I said, these are some
propositions to improve the game design. I will write them in writing
and we will add them to one of the cards,
the wiki cards. We are still discussing with people how they see the cooking system and what is the reason
to have a dish. So, the reason for now
to have a dish is to... win a mission, to achieve
a mission, so for example, creating a dish could be a mission, or it could be to heal the player
once they fight a critter. So, this is the reason
to have dishes, and this is the reason
to have the cooking mechanic. And just to clarify,
so you just mentioned mission, heal the player,
and then obviously, creating or cooking something
is the way to win [CIRO] our game then, right?
[CHEMA] Oh, yeah, of course. And what I wanted to specify
because there was a discussion that was going on the forums,
is that we can make something more, we can make the cooking system
do more, but if we plan that it does more from now, then we're widening the spectrum
of the gameplay a bit too much. So, for now, we're just keeping it
a bit tighter in some way and we're seeing, it makes you
win the game, it makes you progress through the game
and it just heals the character, for example, the dishes
that you create. Later on, if we have time, fine, let's give it more uses. But as usual, I'm like
the gatekeeper and I'm always trying to keep
the project small, I'm like the... [CHEMA] It's a vertical slice.
[CIRO] Yes, exactly, it's a vertical slice. Again, we have six months. What did we say,
one and a half month in, right? [AMEL & CHEMA] Yeah.
[CIRO] It sounds like a lot of time but time is going fast
and there's still so much to do. So, let's keep it narrow for now
and then if we see that we have so much time still
to go at the end, we'll expand the functionality
and the gameplay as Chema detailed it on the... graph, I guess, this diagram, yes.
[CHEMA] On the Miro board, yeah. I don't know
if we have questions in the chat that we can...
[CIRO] That is a good question. I saw somebody asking if the story
is going to be linear. Chema, I think you're the
best person to answer. I don't think it will be linear,
but we will have some, how do you say it?
For example, to go from character to character,
you need to have a mission, and you can go back
to the first character or the second character,
it will not be linear but at the same time
you would have... how do you say it,
you would have... sorry, a progress that
will not be visible in the game. You will not have a UI
for the progress, but we know that we have a progress
for the player to go from one part to another to get a utensil,
to get an ingredient, to go back to the first character
or the second character to win the prize
or something like that. So yeah, I don't know
if it's kind of semi... I guess. [CIRO] It's kind of what? [CHEMA] Semi-linear.
[CIRO] Yeah, exactly. So, you have a progress
that you need to follow but at the same time,
you don't have to interact with the first then the second. It's not just one choice at a time,
you have maybe three options, but you do need to go through
those three options and then you have
another step, let's say. And then obviously, they converge
towards the end, which is, do you want
to show it again, sorry, the end of your diagram. [CHEMA] Yeah, the end.
[CIRO] So, there's a unique ending. Do you want to zoom in
a bit more, maybe. Yeah, exactly, so you interact
with the key character, well, this can happen wherever
in the game loop and then once you achieve
the longtime mission, you have to interact with
the important character again, you win a prize and this prize
is actually the recipe that, or the ingredient or anything
that will help you to prepare the winning recipe. This is the end part,
would be linear, I guess. [CIRO] Yeah, cool. Do we have other questions
in the chat that we want to highlight right now? Let's see. Do we have any other questions
about the game design for now? I reminded that we will put this,
I think in the other Miro board that we already shared,
the one with the game flow that contains already the locations,
I don't know if we can show it here. [CIRO] The other Miro board?
[CHEMA] So this one? [CIRO] Yes, yes, yes.
[CHEMA] Yes. This one. So, I will add it here. And as you can see here
it's just the location, so for example, beach, glade,
forest, the town, etc. And this will not be a problem with the new diagram that we will add
because it contains almost the same things, so you go
from one location to the other. These two are the tutorial,
this one is to fight a critter and then here to interact
with various people. Okay, there's actually a question, somebody was mentioning
the addressables in the chat. They were basically asking,
"Why don't you load things from using addressables
or from resources?" And somebody else replied
the best way to do it would be through addressables,
and on addressables, Chema, is going to talk about it
later, so if you want to hear how we're going to integrate
addressables and why, just stick with us
for another little while. Amel, you were saying?
You were about to say something. I was about to read
one other question. Someone was asking
if there is any other types than MonoBehaviour,
Scriptable Object or Editor Window type of scripts,
I would say. So, this is also something
that we will mention today about the playable asset, I think
the one from timeline library, so that's also something
we can show an example of today, but there is many more,
so we have to answer the question. [CIRO] There's plenty
of types, yes. Obviously, the ones mentioned
are like the most common, I guess, and they all have their own use. We're using Scriptable Objects
a lot in this project, you will see. [AMEL] That's a good thing.
[CIRO] Yeah. Yeah. Let's see. Okay, shall we move on? Yes, I don't think
we have any questions but still continue asking us
and we will try to answer everything later on. We want to remind maybe again
that we are going to announce the game title today.
[CIRO] You're obsessed. For the people who just joined, stick around for
the game title announcement. I'm really excited about
the title of the game. But because a lot of people voted
and it's really interesting to see how it went in the end. And also, I think now it's time
to introduce this system, Ciro. It's not like a system,
it's also a package that we are using
since the start of the project. But we didn't highlight it yet
in any of the streams, and I think it's the time
to talk about it, which is the input system.
So, do you want to tell us more about this, Ciro?
[CIRO] Yes, definitely. So, the input system,
as you mentioned, is a package that we introduced
basically since the beginning. But the way we're using it,
of course, it's more advanced, and it's going to become more
and more advanced as we progress through the game. So, the way we use
the input system here is actually this way.
So, obviously we have the input mapping that
the input system comes with, and that's basically an object
which allows you to define... Sorry, this is called
the "Input Actions." It allows you to define
a series of mappings. We have a series of inputs that the player can produce
like, for example, moving, jumping, and attacking,
interacting. And then through this window
of the input system, we can mark them
onto different controls. For example, the move is mapped
onto the Gamepad Left Stick but also on the WASD
of the Keyboard, on the Arrows and so forth.
So, as you can see, we have multiple controls. On this note, I want to remind
that for this game, we're basically going to go
for both controls through a gamepad.
So, I have it here. And we're also going to enable
keyboard controls and the other option will be
to rotate the camera with the mouse. Once we map the inputs like this, the way we implemented them
in the game is, if you check the character,
it actually has a Script, which is called, "Input Reader,"
sorry, "Protagonist," that's the name of the Script. And this Protagonist Script
MonoBehaviour points to a Scriptable Object,
which is called the Input Reader. And this Scriptable Obejct,
as you can see, it doesn't really provide
any options here, so I'm not configuring the input
here, but this Scriptable Object is an asset that reads the input. And if you check the script
that is behind this Scriptable Object,
which is quite like a long script, you can see that it has
a bunch of Unity actions at the beginning. And they match
exactly all the inputs that I've shown before
in the Input Actions window. So, jumping and jump canceled,
attacking, interacting, extraction, move, of course,
and so these actions when an object, like for example,
the character, has a reference to the Scriptable Object here,
it can basically hook into these actions and when
the action is performed, the character will react.
So, in this case, this GameObject is able
to read the input because it's watching
this Scriptable Object which receives the Events,
sorry, receives the Input from the Input System,
invokes some Events, which are these actions here
and then this Script reacts to it. And I can show you actually.
We actually started implementing... let's see if this works. No, I messed up with the project. And as you can see, yeah,
so we started implementing the animations. We have a few animations
in the project already. For now, we just implemented
the Idle and the Walking and we're going to soon start
implementing Jump and Attack and all the rest. As you can see
here, I can rotate the camera, and I'm actually playing
with the gamepad right now. Then I can move around. [CHEMA] This animation
looks so good. The jump is still
obviously very rough. [AMEL] Actually someone
was asking in the Chat about the animation,
so you showed it on time. Yes, it's really new.
Like it's not actually pushed yet, but you'll see it soon on the repo. We plan to push all
of these assets today. And actually this is also interfacing
with the State Machine, of course, so as I'm walking around,
the character is moving between the States. As I said before, if I actually
select the character, you will notice here,
in the State Machine here, you see Current State,
as I move around, then it moves
into the Walking State. And then at the Jump,
Jump Ascending, Descending, so the State Machine is moving
between all the different States, evaluating the transitions and
it's calling the animations as well. In fact, if I go, if I dive
into the State Machine, which is here, so for example,
States, Idle, Idle has... this action here, which sets
its working parameter on the animation State Machine, which is going to make
the character stand still. The animation State Machine
looks like this for now. So, pretty simple. As you can see,
Idle, if you start moving, it goes into Walking. If you press the Jump button,
it goes into Jump. And then it goes back
to Idle or Walking, depending if you're moving or not. And then we're going to implement
the attack, the Surprised animation and animation to Talk,
which is going to be triggered by the cutscenes and dialogues. Actually, I want to call
the community for something and I'm going
to scold you for this. This character is still,
if you see the character moving around, right
and then if I jump, you see that he jumps forward,
but if I release the input when I'm jumping,
he will likely fall on the spot. I don't how to say,
like I would expect him to keep going like this. But if I release the input,
he falls vertically and I think it looks
pretty bad, right. [LAUGHTER] You're laughing
but I was not seeing this and the funny thing, the thing
that makes me think is that nobody corrected it.
We made a lot of progress on other things, the camera field,
the fact that now we can actually move the camera
with the mouse, right. I can right-click
and move the camera, but nobody changed this thing,
which I think looks horrible. And if nobody wants to fix it,
I'll fix it myself. Just to be clear, it's like
I move and if I jump and release the input,
he falls, you see, vertically. You get what I mean?
Am I explaining it correctly? It's like he has no inertia, right,
he doesn't keep going. He just falls like a stone
because as soon as you release the controls, the movement vector
goes to 0, so he falls down like a stone, you see.
[AMEL] Yeah. I think it's really bad
and we need to fix it as soon as possible.
If anyone makes a PR about this, you'll make me happy.
[CHUCKLES] [AMEL] Talking about Input System,
Ciro, can you show us more about, I saw that we have the Action Maps
in the Input System, so we have different profiles,
depending if we are in Gameplay, Menus or Dialogues,
like I'm not sure to... [CIRO] Yes, so if I open,
again, the Action Map that I was showing before,
so I purposely focused on the Gameplay Action Map,
which is the one I was using just now so Move, and Jump, and Attack,
Interact, and of course, some of these actions
don't produce an effect yet like Interact or Attack. But these are all active.
You see Rotate Camera, Mouse Control Camera,
so these are all actions that are being pulled
by the Input System and the Input System is saying
this action is happening or not. But then, you have the Action Maps
as Amel mentioned, which are basically
alternate controls, I guess. A set of controls
and as you can see, we have menus
and we have dialogues. And what this means is that
we have the ability to create three parallel ways
of controlling the game, and we can turn them on
and off as we want. So, as I'm playing the game,
I will be using the Gameplay one. If I'm in a Menu, for example,
if I press Pause, I will go to this one,
which as you can see is just like Move Selection,
Confirm or Cancel. It's pretty simple and we will add
something more to this, but that's what it is for now.
And then we have a third mode which is for Dialogues
and this one allows us to select options in a dialogue
or to confirm. It's a simplified one,
it doesn't have Back because you don't go back
in a dialogue. Again, it's a pretty
linear narration. And so by enabling and disabling
these three action maps, we can move between
different gameplay modes if you want.
[AMEL] Yeah, that's actually good because we don't need to somehow
listen to all the different inputs if we don't need them,
for instance, in the menu, maybe we don't need
to listen to everything. We only need some buttons,
so we're just going to stick to that input that we need for that specific situation,
I would say. Yeah and also like
if you think about it, if we had just one map
for everything, then we would have to give
very generic names to the actions,
like Jump and Confirm, or this kind of weird stuff
because the A button, for example, on the gamepad
would be Jump during gameplay but Confirm during cutscenes. So this way, we can, instead, have... we can have a mapping
that really makes sense. So, for example,
if the character listens to the Jump button,
a menu would listen to the Confirm action
and not the Jump one, right. So, everything is super clean
and then we can switch, and we always show
that characters cannot, for example, the player cannot
open the inventory while he's in a dialogue,
for instance, because the button
is completely disabled, and it's not even being pulled, so the Input System
is not even listening to whatever button is mapped
to, for example, this action here, which in this case,
would be the Button North, which is the white button
on the gamepad. [AMEL] Yeah, it's pretty visual
as well, it's really easy to put things in place
with the Input System. I really like it so far. Yeah, it's been pretty solid
and comprehensive, I will say. It allows us to mix the mouse,
keyboard and gamepad together, so it's a good choice. It's out of preview, so why not. Yes. [LAUGHS] And actually this gives me
the ability to remind everyone that with this project,
with this first Unity Open Project, we want to stay on 19.4, right, so we're making it with 19.4 LTS. And we're trying to stick
with the packages that are out of preview,
so we want a stable product which will allow us to move forward
without having to worry about beta functionality. [CHEMA] Yes.
[AMEL] Totally. And I think now we mentioned
in the Action Maps, Ciro, one of them was the Dialogue,
so maybe it's the time to actually show some new updates,
I would say, regarding the dialogue and the cutscene system. [CIRO] Yeah, sure.
Do you want to jump on it? [AMEL] I would love to. So, I wanted to start with the PR,
it's like the meme, this is how it started,
this is how it's going. This is how it started,
we have this very good and I would say amazing
contribution from Rainaldi Satria, who opened this good PR,
so we can see it applies to the template that we are using
like a link to the forum he gave, the different changes he made,
how to see that in the demo. He also made this YouTube link. And then we have different notes
with screenshots to visualize different elements
that he added and scripts. And I really like this.
I like those contributions where we have images, text,
and everything explained. And then we can see that we have
a discussion going on. And you, Ciro, replied
to a lot of these and you made a lot of refactoring,
I would say, to this method. So, it started from a contribution,
we improved that and now, I wanted to show
in the Editor maybe before I actually show
in the diagram how it looks. Now if you go
to the Editor, you can see that I'm in this Cutscene Example, which you can find
under Scenes > Examples. And here I can select the Timeline
and lock it here, so if I select another GameObject, I can still
see it in the Timeline window. As a reminder you can see
the Timeline window from here, Sequencing > Timeline. Great. And then this is
the small cutscene that we have, so I'm going to disable
Maximize On Play and just play this. We have these two box colliders that
are going to trigger the cutscene, so I'm going to get in
one of these, which is this one, and now we can see in the timeline
that we have the first line, you can see it in the Debug.Log
on the bottom, saying, "Welcome to town!"
[CHEMA] Can you open it? Yeah, we can.
Here we can see it better, so we can see the first line
and we can see the actor who said this, and now
if I go back to the timeline, I'm going to press Space
in my Scene, in my Game View and then you can see we have
this new dialogue line that has been spoken
by the character, so we can easily see this.
And this is just, as I said, like a first version
of the timeline using the dialogue system and
the cutscene system that we made. Also, Chema, I think later
you will show an example with the UI so we can
visualize this better. But this is just the first version,
I would say, to get started, so before diving technically
into all this, let's go to the diagram quickly,
which we made with Ciro, to explain how it is working here. I wanted to start by mentioning
actually that we have two parts. We have the cutscene part
and the dialogue part and explain what's the difference
between these two. So, a dialogue is basically
when we have the player talking to a character
and we don't have any animation going on
or any camera movement, so it's just a dialogue, right. And then, at some other parts,
we would like to have some camera effects or animations, and this time we would call
this "cutscene" and it's not a dialogue anymore. And the way how this is working,
let's start from here, we have a GameObject called,
CutsceneTrigger. The ones that we've shown
in this example as this green box. You enter that trigger
but it could be a button, it could be any other action
like anything you want, the trigger is just an example. The Cutscene Trigger GameObject
has a trigger collider, of course as a component. But it also has a Cutscene Trigger script
MonoBehaviour component, and this has reference
to the Cutscene Object which is the PlayableDirector. And from here, we also request to start the Cutscene
when we enter that trigger. So, we have a reference
to the Cutscene Manager as well. Now once we are in
the Cutscene Manager, we are doing these two things,
here you can see that we are listening to the input.
So, as you remember, when we showed the timeline,
we print the first line, we show it, and then it stops,
it waits for the input of the player to press the Spacebar,
for instance or A button on the gamepad.
So, this is why we need to listen to the Input Reader here. And we are also requesting
to display that line, so we are calling this method
called, PlayDialogueFromClip, which calls the Dialogue Manager. And this Dialogue Manager
is going to request to display the line
to the UIController. So, what I wanted to point to here
is, as I said, we could have a dialogue system. This means that
all this could be skipped, so we only have a Dialogue Manager
listening to the input, itself and then just requesting
to display that line. But in case we have a cutscene,
then we need to go through the Dialogue Manager to be able to
talk to the UIController, so the only way to talk
to the UIController is by going through
the Dialogue Manager. Now, I just wanted to mention
the Dialogue Manager has this dialogue data,
which is a Scriptable Object that contains the different
Scriptable Objects of the dialogue line.
So, here we can see this note that says that this data actually
represents a conversation between two characters
and it can contain choice, which is really interesting,
so we can have maybe at some point we need to choose between
pressing this button or this other button,
for instance, and this will have a branching system in the dialogue and we could really create
cool stuff with that. For now, the dialogue system
supports choices. But the cutscene system
doesn't support it yet because it's linear for now
and we don't have these branches, but we also don't need it for now. In case we decide that
we want that at some point, we will, of course,
introduce this system. Now, imagine that this timeline
that you can see here is the timeline that we saw
in the Editor, so the Timeline Asset. We can see that we have
two different tracks. I'm going to start
with an easy one, which is the one
we don't care much about today but just to show as an example
is the Cinemachine track. So, this one has a reference,
or I would say, binding, the right word, to the main camera,
which is the one that contains the Cinemachine brain.
And then we have the virtual cameras that
are using the Cinemachine, that are having the Cinemachine clip
that we need to use to go from one camera to another. And then we have this dialogue track
that contains these different clips. And as you can see, like this clip
contains the dialogue line. And this is interesting
because this dialogue line we are talking about here
are the same that we are talking about here.
That means that we can use the same dialogue line
in the cutscene system but also in the dialogue system,
it can be shared if we have, let's say, one sentence
that we want to say in a dialogue and then
we want to say that again in another cutscene
that could be shared between the two. And all these systems
that we've just presented, feel free to leave questions
in that Chat if you have questions about this diagram
or about this system. This is based on custom tracks. and this is something, I think,
Ciro can show us more about in the Editor on how to, like,
really get started with somehow, I would say, an advanced use case
of timeline, right. Yeah, for sure. As you said, so basically,
I have the timeline here as well, obviously the Scene is different,
the Timeline is quite similar. But what you said is correct,
the cutscene system that we want to use
is going to be able to use this custom track
for dialogues. And as you can see, in fact,
when I press plus here, you get to see it here,
Dialogue Track. It's a custom track that we have
only in this project. Fun fact, actually Cinemachine
is also considered a custom track. If you press Play, you will know
notice that it's here at the bottom and it's just coming as part
of the Cinemachine package, which provides a track...
[CHEMA] Actually Ciro, we're not seeing it here
because of the title of this... Okay. I got to remove the label.
There we go. Cinemachine Track
and Dialogue Track. They are two custom tracks
for Timeline. And the way it works,
the way you make a custom track is that basically, you need
to define all of its parts, if you want, so one part
is the track, itself. Then you have the clips,
one and two clips, and then you can have
a special thing, which is called, a mixer and a mixer
is not something you see visually but it's something
that mixes two different clips. So, for example,
Cinemachine has a mixer. You see here, when I'm blending
these two clips, the mixer is taking care of blending
the two positions in space. We don't have a mixer
because if I blend, even if I tried, as you can see,
I cannot blend these two clips because it doesn't make sense
for us to blend two lines. What does it even mean?
So, we don't have a mixer. If we go back to the assets,
you will find the track here in Scripts > Cutscenes >
Dialogue Control Track. And you will notice
it has four scripts. One is the track, as I mentioned,
the track, if I were to open it, the track, it defines...
Don't even know if I can zoom in a little bit but... The track defines...
Oh, no, it's here, sorry. [CIRO] 200, too much? Maybe it's okay.
[CHEMA] No, it's good. So, the track defines a few things
including, for example, which binding type this track takes,
which the binding type, as you can see here, is this object
that you can connect here at the head of the track.
So, in this case, we're plucking this track
directly into the Cutscene Manager. And the Dialogue Track... this is like code that you need to,
I won't explain it now, it's pretty complicated. If you want to learn more
about this, you can go to either the documentation
or actually I published a blog post a couple of years ago specifically
on customizing timelines. This is the Dialogue Track. Then we have the Dialogue Clip,
which is basically the asset that contains the settings
for this clip, which is contained within the asset
that contains the timeline. And the Dialogue Clip,
as you can see, is a Playable Asset and it contains
an instance of what is called a template of something else,
which is called a Dialogue Behaviour. The Dialogue Behaviour
is nothing else than... you could see it more or less
as a MonoBehaviour for Timeline. If I were to open the class,
you will notice that in here, we actually have these functions
like OnBehaviourPlay, OnBehaviourPause,
and you can have functions like process frame, which is a bit
like the update of the timeline. The behaviour, as I said before,
it's like a MonoBehaviour, it's the one that produces
the functioning of the custom track.
The clip, instead, is the one that has the data inside. And so when the track starts,
it creates, it takes all the clips, and it creates all
the behaviours out of it and the behaviours are the ones
that play at runtime. If I select one of the clips,
what I'm seeing here is the Inspector of the clip. But then Inspector of the clip
is showing me the properties of the behaviour,
so you can see here I have a Dialogue Line
and Pause When Clip Ends and you see them here as options. Here I'm able to basically create
as many clips as I want and each one can have
its own options because they are stored
into these assets. What else, what else? And actually the fourth script
that I've mentioned briefly before is called Mixer Behaviour.
Remember when I mentioned the mixer of Cinemachine? We have a script, I just left it in
but as you can see, it's empty because right now, we don't need
to mix anything but I just left it there, in case, later,
we want to produce some weird behaviour
on mixing the two clips. But for now, again, it's actually
unused by the track. That's how you customize Timeline,
you need to provide the scripts specifically, the track one,
the clip and the behaviour are fundamental. Optionally,
you can provide a mixer behaviour, and all together, it creates
the functionality of this track, they define the data that it stores
and they define the object that it can bind to. And in this case, basically,
what the clips are doing, they're calling
the Cutscene Manager. Amel, you want to show
the diagram again? Sorry. Surprise, surprise switch. So, the clips are calling
from the Dialogue Track, they are calling
the Cutscene Manager, right, which is there at the top. And they're requesting the line
to the Dialogue Manager, so this is like passing
these Events forward between managers,
starting from the clip. That's is, that's basically
the usage of the custom track. It's not really how to create one,
but it's the usage that we're going to do
for our game. And as Amel mentioned before, the advantage of this is that
now we can plug a dialogue line directly into Timeline, right.
So, you can have cameras and animations and audio,
and then you can have dialogue lines. And dialogue lines
are not just text that you output. I mean for now,
Amel showed how we output in a Debug.Log
but it's going to be much more, it's going to be showing on screen, maybe animated,
if we fancy doing that. And the cool thing is that
by using this system, the Timeline is going
to be plugging inside the, how do you call it,
the Dialogue Manager. And so if we have any upgrade
to the dialogues, then the Timeline is automatically
going to receive those updates because it's not just duplicating
the work and redoing the same thing on its own side. Yes, exactly and the cutscenes
will contain dialogue as well, so we might just put them together. But the difference is,
with the cutscenes is that the dialogue won't be
branching, right, because, it wouldn't make sense.
[CHEMA] Yeah. [CIRO] If you look at the timeline,
obviously you can have a situation where you have a choice and then
if you make a certain choice, you jump to another point
in the timeline. But it's complicated and it becomes
a bit weird to edit because you need to remember
where the choices are. I think what
we're going for here is a linear dialogue
on the Timeline, which obviously matches the action
that you have in the other tracks. And then we're going to have
a more dynamic system for the dialogues
where you can branch and have different choices. Yeah. Exactly, and the thing
with dialogues is that, and because we are doing a game
for international people and we are many people that
are from many other countries, we need to have
a localized content. And that's when we are going to add
the localization package and the day is today. [LAUGHS] Actually, I want to ask, so before
we go into that, Chema, I'm curious, like,
where are people from? People that are watching us,
where are you from? And actually, what language
do you speak? [CHEMA] Yes, especially the languages.
[CIRO] Please tell us in the chat. I'm very curious. So I'm Italian and I speak Italian, [AMEL] German.
[CIRO] Spanish and English. [LAUGHS] [AMEL] We have to find it
in the chat, Ciro. So, I will continue like Ciro,
I'm Tunisian, I speak Arabic, English, French
and a little bit of Danish. [AMEL] Welcome to the Danish.
[CIRO] Chema's learning Danish. [CHEMA] Yes, I'm learning Danish.
[CIRO] Say something in Danish, Chema. No. <i>Nej.</i> [LAUGHS] [CIRO] Come on, you have the floor. No, no, sorry. I will not do that.
I will butcher this language. So, I'm reading the chat
and very, very quickly, I read, "Germany, Morocco, Spain,
Israel Hebrew, Finland, though I speak Dutch, Brazil,
Argentina, Spanish, Germany, Spanish, USA, English,
Italy, Italian, FR," I guess is France, "French, London,
Scottish, Italy, Canada, Brazil, Switzerland, German, Turkish,
California, English, UK, English, Brazil, Portugese,
Romania, Indonesia, Bahasa Indonesia Cat Cat speaks,
Euskara, Arabic, Greece, Italy, Italian, English, French,
Pakistan, Finnish, Brazil, Polish, Brazil, bla, bla, bla,
Pakistan, Urdu, Canada, French." I regret it now because now
I have to get to the end. "French, Pakistan, France,
Sweden, India, Canada." [CHEMA] I don't think
it will end, Ciro. If they keep typing,
I will never end. "Polish, Taiwan, Indiana," very exotic.
[CHEMA] I think it's better if we say they're from everywhere. Yes, somebody said something
in Arabic, I don't know what they're saying, sorry.
[AMEL] Well, I didn't see it. And they are not stopping typing.
[CHUCKLES] So, two years later. [LAUGHS] But the point is...
[AMEL] Yes, I also want to be like I am also Tunisian. Yeah, because I think
I was the only one who didn't mention that yet.
I'm also Tunisian, I speak Arabic, French, English
not yet for Danish but I try to learn
a little bit of Japanese and Italian, but I'm really a total beginner,
so I would say I'm more fluent in just Arabic,
French, English, that's all. [CHEMA] Yes...
CIRO] The point we wanted to, oh, sorry, Chema, go.
[CHEMA] Yeah, sorry, I think that people will help us to translate
in the other languages. [AMEL] Yeah. Yes, so the point we wanted to make
is that since like the team here and people here on the stream
but also people on the repo in the forums are so international,
it would be super cool to translate the game
in different languages. So, we're making a small exception
here, right, Chema, with this package? Yeah. Sorry, I didn't hear,
I was reading the Chat. [CIRO] I said we're making
a small exception here because we're basically
allowing this package which is not out of preview yet.
It's pretty solid, right? It's pretty robust and I think
that we can use it and you can use it since you have
2018.3, I think, I'm not sure about the version. But it's actually
a very cool package that can help you
by providing you tools that you can add support
from multiple languages. Not only English, but for example, USA English or England English, or I don't know, Canadian French
or France French, etc. So, it's not only languages
but also regional variants. And the thing is,
it will not only allow you to translate the text
but it will also allow you to have multiple assets that can be
in these different languages. So, for example, if you have
an audio for a language, you can translate it,
and you can put the other audio, or if you have
a texture or anything. So, it's very robust
and I like it so much, I'm so excited to show it today. So yes, let's start.
[CIRO] Do you want to give us a demo? [CHEMA] Yes, okay, I think
I have the demo here in this scene, just one second. Not that scene. I remember what I called it there. This is the one,
so if I click on Play here, yeah, as you can see,
I have this Sprite here that if I change it to French,
it will change to the other flag, to the French flag. I'm not sure why the title
doesn't display anything. But we can see it
maybe later on together. [AMEL] I can say
this is the French language. [CHEMA] Yeah. [AMEL] This is the game,
we need to guess the language... [CHUCKLES] [CHEMA] Yes, I don't know
why exactly it doesn't show. Oh, yeah, so okay. I think it's a problem
with the aspect, wow. This shouldn't have happened.
[LAUGHS] [AMEL] But I can see it, <i>la plage</i>. [CHEMA] Yeah, exactly. Come on, let's put it here
and let's click on Play again and let's try it again. As you can see
and because I'm translating the word, "the beach,"
it's "the beach" in English and then if I change it to French,
it will be "la plage." That's a small demo
and I'm going to show you how we are going
to use it in our... project right now.
I think after today we will be merging
this branch here. It contains the... It will contain the package. I downloaded it from
the Package Manager, and also, it will contain
some localization files, for example,
the localization settings. If we go to Project Settings
and we go to Localization, we will see that
this is the same information that we will look at.
For example, here, this is the localization and
If I click on the localization asset, I will see it in
the Inspector as well. This will contain
different locales. The locale is actually,
it represents the region. It determines the language
you're localizing your application to, and for this, I'm only doing
right now, currently, it's only the English
and the French. But if you want to add something,
you can Add All to add what you have in your Scene
or you can go to Locale Generator and you can choose whatever
you want to add. [CIRO] Is there dialects? I'm not sure, I don't think so.
[CIRO] Very interesting dialects. [AMEL] I know why you want that, Ciro.
[CHEMA] Oh, yeah, yeah. There are. There's Arabic Tunisian. See.
[CIRO] That's cool. But you don't consider
that a dialect, right? Or do you? Okay.
[CHEMA] I do. I do actually. So okay. Yes, let's move... actually
I'm going to implement the localization today
on the dialogue system that we were talking about.
So to do that, let's go to our scene,
the scene that you were using. Was it a cutscene, I think? [AMEL] Yeah, a cutscene example. Yeah, so in here in the cutscene,
as you can see, I have the same as Amel
but the thing is I added the UI part, the UI Manager here.
So, if I click on Play and I do the same action,
let's put our Timeline here and I do the same action as Amel, we will see that we have
the cutscene and we have our dialogue
that will be written in the UI. Here we have the townsfolk,
"Welcome to town!" and then if I skip to the other one,
I'll see, "Now head to the town center where the legendary chef
is waiting for you." So, these are the two lines
that we have in our dialogue. And now, if we go to the Canvas,
we will see that we have here the Dialogue Panel that contains,
let's put it, Dialogue Panel contains the background,
the Dialogue Line in here, it's a TextMeshPro.
And then the actor name in here. So yeah, it's a pretty forward UI
and the only thing that I'm doing is that I am listening
to the Dialogue Manager that will just tell me
what line to show. So here, there's the sentence
and here, there's the actor name that I'm just going to put on the line
and the actor name text. Until now,
is it understandable, Ciro? [CIRO] Yeah, yeah, of course. Okay, good. So let's move
to how we are going to put those two lines
in a different language. What we are going to do
is that we are going to go to our Localization File,
the Asset Table here. For our other example,
we have the Flag Table and the Scene Names Table.
So for example, to show you how the flags
are changing, I'm going to open in Table Editor,
so I just click on the Flags and then I open in the Table Editor
and I will see that I have the image for the flag
and it's simply selecting the asset that I'm going
to show in that locale. What I'm going to do is that
I'm going to create a new Table Collection,
so I'm going to go here and the new Table Collection
will actually be called, let's say, Dialogue. And then I have the choice
either to create an Asset Table, so for example, if I have an asset,
either a sprite, an audio, etc., anything,
or a Sprite Table, and for this we are going
to create a Sprite Table so let's create this one. And then we're going
to choose where to put it, so let's say
the Asset Table folder. Now I will see that I have
this new table here and I will add a new entry
that I will call "1st Line." Oh, nice. "1st Line," so this is the first line
and the first line will be, I think "Welcome to town!" in English and
what will it be in French? So, Amel?
[AMEL] Yeah? "<i>Bienvenue au village!</i>" [AMEL] Yes. <i>Merci. Oui.</i>
[CHEMA] Does this work? [LAUGHS] [CIRO] Chema, why do you check
with Amel for the French? Do you speak French? Yeah, I speak French
but I want to check with her. [AMEL] I am the girl who lived
three years and a half in France. So, the second line would be,
I think it's, "Now head..." let's put it here. So it's,
"Now head to the town center where the legendary chef
is waiting for you," and in French, it will be, "<i>Maintenant dirigez vous
vers le centre</i> <i>où le chef légendaire...</i>"
[CIRO] Is that real French? [LAUGHS] [CHEMA] <i>Oui, oui.</i> [LAUGHS]
[AMEL] Yes, I confirm it too. [AMEl] I hope you're going
to live dub the stream. [LAUGHING] So this is the first line and this
will be the second line here, and these are the keys
that we will be checking to have the text that we will be displaying in the UI. So now that we have
our Localization Table for the dialogue,
let's go and use it. Where can we use it exactly? We're going to check the lines,
the line of dialogue so we're going to check
the Scriptable Object that we have for the lines here. And instead of having
a sentence directly, we are going to change this text
to another thing, so let's open the Dialogue Line.
We are going to change the string here that we are using
for the sentence to Localize... I think
it's Localized String, if I'm not mistaken,
so now it doesn't know it because we are not using
the UnityEngine.Localized but we are going to add it
and now it recognized it. We need to also change it
for this local sentence here, the private one and we need
to remove the text area because it will not be
a text area anymore. It will become a localized string,
and let's see what that means exactly. So if we go back to
"head to center" here... Oh, wow. yeah.
Because we are using it here so let's just remove it for now. And let's continue. If we go back to lines and we go back
to "head to town," here, we're going to see that,
"head to center," sorry. So we are going to see
that this line here, the sentence is becoming
a localized string and what that means is that
if we click on the string here, we can choose between... we can choose what entry
we are going to do to display on the screen
but what entry will be the localized string
that we are going to use. So I think that "head to center"
is the second line, so let's choose the second line. So if we open Sentence here,
we see that we are using a Table Collection Dialogue.
The entry name is the second line and in English, it's this,
in French, it's this, and if we need to change it
even from the Scriptable Object that we are working on,
this change will reflect on the table that we are working on
and we can add either another table or another
table entry, etc. So yes, it's very awesome, I think. [AMEL] Yeah, yeah, I really like it.
[CIRO] That's pretty cool. Let's do this also
for the "Welcome," and we are going to choose
the first line. And what that means is that
for now, we are not going to pass a string directly,
we are going to pass a localized string. Let's check how we are going
to treat that string here. So if you go back, actually,
I think I'm going to go back to the test that I did
with the localized string, if we check our text here,
we will see that in addition to the TextMeshPro, we have a localized
string event here and this localized string actually takes, so for example,
if we choose Beach, takes the string reference
and adds it, sorry, changes the text here, changes
the text that we have in TextMeshPro.
So let's go back to our dialogue, the cutscene. And to have this component,
it's pretty simple actually. We don't even need
to add it directly, so let's go to the dialogue line
and we just click on these three buttons here,
and you will see that there's Localize,
and if we click on Localize, [CHEMA] we will add. [LAUGHS]
[CIRO] That's cool, I didn't know. Yeah, we will add
the localized string event, and this is actually, this will be
the component that will listen to when we change the language
or when we change the region or when we change
the locale exactly. And it will change the text
that we have here. So yeah, it's kind of cool, actually.
[CHUCKLES] We're not going to use
the Scene name. For now, we are going to say
this is none because the string here that we are going to display
will be changed through the code, through the Dialogue UIController, so let's go back
to the Dialogue UIController, and we're not going to change
the TextMeshProUGUI. We are going actually to change. To do that, we are going
to be using UnityEngine... .Localize and we are going
to be using a Component. This component is the one
that we have in the Scene, which is
the Localized String Event. So this is the component
that we will be using. We are going to... actually change
the String Reference. So let's go back to our Scene,
and I will show you directly here. We are going to be changing
the String Reference here. So if we open... We're going to get it
from the Dialogue Line, and in this Dialogue Line,
we will have the sentence with the Scene.
[CIRO] So these are properties of the Scriptable Object, right? Exactly, but now this sentence
is not a Text anymore, it will be a String Reference.
Sorry, a Localized String that we will assign
to the String Reference that we have in the Line Text. [CIRO] And that will allow
this localization system to pick the right entry
in the table? Exactly, and we can test it
directly from, let me just open,
again, the Editor. [CIRO] It's probably compiling
at this point. Yeah. [LAUGHS] If we test it again now,
if we click on Play, you will see that
we have a GUI here that we can change
from English to French from the locales that we have
and if we enter here... oh, it's not working
because we didn't assign it through the Inspector,
so we just drag and drop it here. Play again. We have this first line here
that we can change to French even when we are in Play mode. And it will continue
to the other one. So this is the second line
and we can change to English. [CIRO] That's quite cool. That's pretty cool because then,
basically, this allows us to not need to, for example,
reload the game if the language is switched, right,
like that's a typical case sometimes [CHEMA] Yup.
[CIRO] with some other localization systems, especially
when you build one from scratch, it can be really hard to actually
refresh the whole UI. So sometimes games require you
to restart the game or to at least exit the main menu
and reenter the menu. And with this system you just showed,
we could basically potentially switch the language
midway through a cutscene and even with the text on screen,
it will jump to the other language which is quite cool. Nice, nice. The other thing that
I wanted to say here is that the localization package and
that's what you said earlier, Ciro, that I'm going to talk about,
addressables. So the localization package
is actually built on top of the addressable asset packages.
So it actually means that by default, Unity Store's
localized asset bundles. Yeah, so we're using
the addressables here. [CIRO] That's cool.
It means that basically you're never loading all the assets
for one specific language at the same time but
they are loaded and unloaded as you need them, right?
[CHEMA] I think that you can do both. It depends on what you choose.
I'm not sure. [CIRO] And so, just to recap,
so basically we have this Scriptable Object,
which are the lines of dialogues, right? They contain a reference
to a localized string, is it called? [CHEMA] Yes. Exactly.
[CIRO] Okay. Then the timeline has a custom track,
which takes the Scriptable Object and passes it
to the Cutscene Manager together with the localized string,
right, and the localized string goes all the way
to the Dialogue Manager, which displays it on screen
by finding the right reference in the table of localization. Did I get it correctly? I think that what you are passing
is a localized string and the localized string
is actually the string reference that the component, the localized
string component will use. And uses that to find the right string
[CHEMA] The right text. Exactly. [CIRO] which is the final text
inside the table. And then you can always switch that
and it will update it in real time. That's cool. That's cool. Shall we look at some questions
in the meantime because we have a lot of questions
in the chat actually that I wanted to recognize. So let's see, did you see
any question that was interesting? Somebody was asking
if we want to translate the names of the characters
as well. It's a possibility. Yeah, I think it's possible,
it's very possible. Like we do the same
for the actor name that we did with the dialogue line. Yeah, okay. Because obviously
one of the characters is called "Townsfolk,"
so that's a possibility. How would you translate
it in French? I'm actually asking the chat
because somebody was mentioning how would you translate
"Townsfolk" in French. Actually, I think it's<i>
villageois</i> or <i>citadins</i> or something, I'm not sure. And then let's see. And this is the right answer. Yup, somebody replied,<i>
villageois</i>, okay. Somebody says what about
node-based dialogues? As in if we're going to have them
or how do you make them? Because we will have some kind
of dialogue branching. The Scriptable Objects that contain
a dialogue will have an exit option and it will have more than one,
so you will be able to create branching, which means
that when you see the dialogue on screen, you will then be able
to select an option and that will take you
to another branch. But this is not connected
to the translation. The translation is just going to be
like the final string that gets displayed on screen. And somebody is asking,
Jason Storey is asking if you're going to be populating
the Scriptable Objects manually? Good question. That's a good question. And he says, "It seems you will have
an easier time crowdsourcing populating a shared Google docs,
Google Sheets docs, for lines and creating
an importer." I think, what's the name?
[AMEL] Localization package. [CIRO] The localization package
supports importing Google Sheets. So we're going to look
into implementing that as a next step. For now,
we just wanted to bring the package in to allow people
to start playing with it. Obviously, we are probably
going to do the translations as a shared Google doc that everybody
is going to be able to vandalize. [CHEMA] Yeah.
[CIRO] Hopefully not. And then we're going to look
into the importing and bring in these strings
into Unity and putting them into a table. And then from there,
we're going to link those table entries to the Scriptable Object that
Chema just demonstrated. There's a bit of stuff, we can see
if we can automate that, but obviously there's
a little bit of... composition of all the table entries
into like dialogues and lines and everything, which is more
of a design decision rather than just like importing
strings in mass. Yeah, so now, I think that
when anything, any system is using, sorry, strings, they need
to take into consideration that they could use
the localized string and then we are going
to create a table for it. Yeah, definitely. David Rodriguez asks, "Would you
not give the characters names rather than just name
them all "Townsfolk"? Yeah, of course. They're not going
to be named "Townsfolk." Don't worry. That's just
a temporary name to refer to the character
because all the townspeople are going to be a variation
on that 3D model and they're going to be
dressed differently with differently accessories.
But right now, we only have one avatar, if you want
but they're going to have names and a role in the story,
if you want. And somebody else was asking also
Chema, this is for you, if the Localization System supports
parameters, variables, plurals, and other localization stuff?
[CHEMA] Yeah, it does, it does. I think you can check it
on the documentation because it's a very long document that you can read about,
but yeah, it does. It has a smart, I think it's called
"smart strings," I'm not sure. Yeah, it does support
variables, for sure, so you can inject variables
inside localized strings and place them differently,
depending on the language. Miley is also asking
a similarly related question where she asks, how would you
enter pluralization in different languages
and when certain languages have genders assigned?
So the localization package is ready to support all of these. It's a very, very smart
system, actually. They did a lot of research.
It's not just done from the perspective
of one language because obviously then
you don't account for the specifics of other languages
and every language works in a different way. The only thing that
I'm going to say that maybe it's going to be challenging
is non-Roman alphabets. We're going to look into that
because that requires a little bit of more investigation. We have different fonts that we need to import
and we need to find the right font and then obviously
there's the question, Chema and Amel speak Arabic
so you know, Arabic works right to left,
it's not left to right. Like the ligatures between
the letters, so yes. Yes, the ligatures, yes.
So letters have to be connected, otherwise the language
doesn't make sense, right. So we're going to... look into that but for now,
we put, as Chema has shown, we've put only English and French
just as a reference, just to show you
how the system works so you can get familiarized with it
and then we're going to start introducing the other languages.
So please, don't make PRs for new languages.
They're going to come but not yet. Yeah, we will create
a Google document shared. Yeah, this is really exciting.
I really love this package. I would say this is on my top three
favorite packages in the project. Alright, come on.
Now it's your top tier package. I didn't even know you had
a leaderboard of packages. My top three is now,
localization just made it in, so thank you
for this overview, Chema, I really enjoyed this. I'm happy to do that. So yes, I guess, maybe, again,
we can remind people about the title that is coming
very, very, very soon. And I would say,
really, really soon. [LAUGHS] Checking if people have
more questions in the chat. "Do we need to specify
all the sentences in the localization package
or it will translate everything automatically?" No, no,
we need to specify them all. It won't translate anything. Yes, I was copying and pasting
from an Excel sheet, just so you know. [CIRO] You were copying
and pasting? Yeah, I was copying and pasting
the two dialogues, the two lines. [CIRO] Ah, you mean now,
for the demo, yeah, of course. [CHEMA] Just explaining because...
[CIRO] Maybe that was confusing. Yes, exactly, that's why. [CIRO] David Rodriguez says
that his personal leaderboard is Input System, Cinemachine,
and Localization. Okay, fine. [AMEL] It's almost the same,
I would say. [CIRO] We have more packages
coming in actually. Sorry? Do we have other questions
for the dialogue system maybe earlier? Because
I don't think we answered those. Do we have them? Actually I wanted to reply
to a question from somebody before called, "Lion," I hope he
or she's still connected. They were asking
if they have to learn all the systems
before trying to contribute to understand the process. I mean, you need to understand
obviously what's going on in the game. You don't need to learn
all of the systems, you need to learn the ones that
you're going to be touching, right, the one that's going to be
contributing to and we're trying to keep
the systems separated. But obviously, that's impossible.
As we progress into the game, the systems are going to be
interconnected and speak with each other, for instance,
Amel just demonstrated how the cutscene system
that relies on timeline can speak with the dialogue system.
That is something that concerns the UI so we're going
to connect them together. But what I want to say
is that for now, if you open this project,
the project is still, I would say, simple enough,
right now. But it's getting more complicated
and so we're starting ways to provide entry points
to the project and what should they be? What do you think they should be?
If you want to voice your opinion in the chat, let's say,
you're downloading the project right now
and where would you want to find a guide on how the project works? Yes, that's a good question.
I think it's interesting to get feedback from
the community about this and how they want it to be,
so we can consider the different alternatives,
I would say, or solutions that will make it easier also for you
to get started with the project, no matter at which step,
I would say, you join. So yes.
[CIRO] Wagner Ferreira, he's one of the contributors
of the State Machine, he's saying that he's touching
the State Machine while having no idea
what the Dialogue System is doing. That's possible for now, yeah.
[AMEL] Sometimes you don't need to know everything about the project
but sometimes just like during the stream,
even if you are a level designer, you would want maybe to know
more about the Scene-loading system, like out of curiosity
or more to understand the overall architecture
of the project without necessarily
knowing the details or the technical heavy stuff,
the code, for instance. You don't really need
to know about that. But it's always good
to have an overview of how things are working together,
so you can somehow do those easy drag and drop
or call the Events even though you don't need
to code that with script. [CIRO] Somebody suggests
a README that links to a website. Okay. [CHEMA] Okay. GitHub Wiki, says David Rodriguez. [CHEMA] I think it's the best thing
[CIRO] What I would say... [CIRO] Sorry?
[CHEMA] I think it's the best thing to have a Wiki on Git.
[CIRO] I think we will have both. One idea is to have
the Wiki on GitHub to be the documentation
of the project. And maybe we will have
something within the project, so that if you download it
and you don't even see the Wiki, then it will direct you
to the right spot. So yes, that's something
we are looking into. Somebody in the Chat
just called me "Circo." Thank you. You know that "circo"
means circus in Italian. That's not my name.
[LAUGHS] Jason Storey says,
"I'm a big fan of GitHub pages as a knowledge base" Okay, noted. [AMEL] Interesting.
[CIRO] The challenge with this thing and the reason why
we didn't do it yet is because obviously... [mics are muted] Do you still hear us? Chema and Amel, I don't hear you. One second. [CHEMA LAUGHS] All good, everyone is hearing us. [CHEMA] Great.
[CIRO] Nice. For some reason,
you muted automatically but I think we're back.
[CHEMA] Yeah, I think everyone is hearing us.
[AMEL] Yeah. Okay, nice. Okay,
I panicked for a second. [LAUGHS] Okay, do you hear me
because I think someone said I'm muted in the chat,
just to make sure. You were for a second,
both of you were muted. So I guess we're all back. We should all be back. Great, good news.
[CHEMA] Great. So we were saying, I think,
we don't have any other questions in the chat so maybe we can... Maybe I can talk about
the community contributions actually [CHEMA] Oh, yeah.
[CIRO] Of course. Because it's my favorite part,
I would say, I'm happy to do it. So I wanted to talk about
the community contributions that we have so we actually
merged a lot of PRs in these last two weeks
since the last stream. I can show all of them, of course
but you can see that in the PR list, you can see which ones
are closed in the GitHub but I'm going to highlight
a few of them today and show that.
So now if I share my screen, you should be able to see
my GitHub and here we can see that we have opened
a new whiteboxing branch and the reason why
we wanted to do this is, to allow you guys
to add your contributions that are related
for different locations by doing the whiteboxing here
on this branch and we can see that we have this first PR
and this PR was made by @itsLevi0sa on the forum
and has all helped to put this here in the GitHub
so thanks a lot to both of you. So this has been merged,
I would show it in a moment in the Editor. I also wanted
to show another contribution for the whiteboxing from @Smurjo So thank you both for this
and let's see this in action. This is the first contribution
for the whiteboxing that we can see. Of course, as a reminder,
you guys can use ProBuilder and Polybrush and in case
you don't know what they are... [CIRO] And not Terrain, right?
[AMEL] And not Terrain, yeah. And I just wanted to show
this in the thread just how to get started
with ProBuilder and PolyBrush. So Gregory, our friend from Unity
left those things for you in case you want to see
how to get started But Ciro, yeah, you raise
a very good point of the fact that we are not
using the Terrain. And I would say we have
too many reasons for that. First is because we don't have
really a way to make the Toon Shader work in the Terrain,
and the second reason is because Terrain
is a little bit heavier and because we want
to optimize the game and even from
a performance point of view, it's better to avoid
using Terrain for now. So that's why we decided to go
for ProBuilder and PolyBrush as two tools and I would say
solid tools actually to create the greyboxing
or the whiteboxing for the different locations
in the game. So this one is for the beach scene. If I'm going to press Play,
and let's see that. So now we can see that
we have the new character here and I can move around
with the camera. Maybe to the left... And... the good thing is,
with the greyboxing, of course, it's nice to try
the feeling of the game and see how it is
and if we really want this to be this way or not afterwards. So this is just a small example
to show you how it is and @itsLevi0sa actually made
a video that we have shown in the previous episode. And I wanted to show
the other contributions that we have also here. It's in another scene. So this is the second contribution.
Let me press Play. And now we can see
our character here and let's move
and we're going to see. And then again, you can test that
to see how it looks like. Both of them are available
in the Git Repository. What I would recommend
is to create a new scene every time you want to create
a new whiteboxing version because if you edit another one,
then we would probably have some merge conflicts,
and this is something we want to avoid. So please,
always try to duplicate the Scene if you want to get started
from this one or this other Scene that we have.
So feel free to do Ctrl + D or right click and copy paste this
to duplicate it and get started from that
and iterate on it. So this is for the first,
I would say, level design greyboxing, whiteboxing
contributions. We also...
[CHEMA] It looks very nice. People say that
we should ship it already. [LAUGHS] Not yet, I would say, but yeah.
[CIRO] Hold your horses. Another contribution
that I wanted to highlight is the spawn location,
this is also from @jamercer. So this tool will allow you
to place the spawn location at the place where you click. And this was the first contribution and then we can find that
we have another PR that builds on the top
of this other PR. I'm going to just show
the files changed to make it easier. You can see that
it's a really small improvement, but this makes the Editor tool
much more smooth and we are going to see
this one and test it. But I just wanted to point that
sometimes these small contributions can be really nice and important
so feel free to open those PRs if you feel that
they are right to do. So if I go to my spawn system,
and I go to my location, a spawner, you can see that I can place
a mouse cursor and now you can see this preview,
this cube, and I do right-click and now this is my new location
for the spawn. And as you can see,
it's super responsive wherever I go thanks to the improvement
that we also got from both users.
And we also notice that the location only appears
if you have the gizmos enabled so please make sure it's enabled
to be able to preview this. So this is a small improvement. And another last one that
I want to show today is the simple mouse-based
camera controls and you might have noticed that
for now we are using the keyboard to change
the camera view so let me just press Play
and show this new update. [CIRO] This was a request
from the community actually, I never considered using the mouse
at the beginning because the game was supposed to be gamepad-based
but they said no. [CHEMA] Yeah, Ciro. Fine, fine. Fine. So now if I press the right button
of the mouse, you can see that I can zoom in and zoom out
by moving forward and backward. And we can also move around
the character this way and this is really full,
so now we can do this. We can easily move around
like a real game, I would say. [CHEMA] The graphics are so beautiful.
You are spoiling us today. [CIRO] Do you hear the sound?
Do you hear the sound? No. It's the sound of my joystick
on the gamepad. No, I'm joking, I know that... not everyone has a joy pad
connected to a PC so it doesn't make sense
to make a game that people can't enjoy. So I'm bowing to the will
of the community. [CHUCKLES] I think also we can test this
in different platforms, and yes, that was
the camera contribution that was added in
the Camera Manager here if we just do a double-click
to quickly show the Script. So we basically have
the different methods that will allow us to see, I would say, disable, for instance
and enable the cursor when we are looking around
the character, etc. So these are the new updates,
I would say, that we have when it comes to the mouse control.
And of course this was also added in the Input System,
so the mouse is also supported. [CIRO] And actually, with this,
this means that we have a lot of discussion going on
regarding the menus, right because we want to control the menus
with mouse and, sorry, with keyboard and gamepad,
but we also need to support mouse because people expect the cursor,
so we're going to have some kind of the latest news
because that's what's been discussed on the forums right now,
is that we're going to have a hybrid menu system
where you move the selection, for example, with your gamepad
or with your keyboard but as soon as you move the mouse,
then you have a pointer and you can click on things. So it's going to be a hybrid menu
which is going to be challenging somehow, but yeah. We're going to make it.
[CHEMA] Yeah. We are going to make it,
we have the community with us. We have a few people
really dedicated. They're putting out
a lot of stuff actually, a lot of... super cool improvements
with the speed that we can't keep up approving them. [LAUGHS] Now let's look again
at the Scene, Ciro but I would say we have
seen this a lot of times, like this prototype Scene
and as you can say, there's a lot of very good quality and the comments,
they all appreciate how amazing these assets are. So maybe it's time to give
a refresher and updates on the graphics and I think you have something
for us today, Ciro. Yeah, so. Yes, so basically... I actually titled this section
of the livestream, "The Big Merge" because
that's what we're going to do. We have kept the art assets
on another branch for awhile but now it's time
to put them together, we want to start at least have some graphics,
something to play with visually, nothing too big.
But as you can see, we have a lot of assets being made
by some contractors that we're working it with. These are going to be defining
the graphic style of the game, as we said many things,
sorry, many times. So obviously we have the character
which is a bunch of animations already being made and I think
I can show you some of them. So you've seen me control
the character before, he has an Idle animation. He has a Jump animation, He has a cane attack,
obviously he's not using the stick right now
but there's this cane attack. He has a Surprised animation
where he actually opens his eyes, and there's a little bug right now. [CHEMA] Of course,
because it's live. [CIRO] No, I knew about the bug. The artists are fixing it right now. So he loses his eyes. And there is one where he talks, so he's doing this. So this is going to be used
in cutscenes and dialogues. And then there's obviously
the Walk animation, the Walk cycle, right. So many of these
animations are like... These are actually block outs,
they're not even the final quality, but they're progressing. So we're going to be building
the full State Machine with this. Then we have his trusty pouch
that he's going to wearing on his back. He has a knife to collect things,
to collect ingredients. And then he has the walking cane
which is here, which he uses to... how do you say? Support himself while walking
and also to attack. And then he has the lantern, which is
the one that's going to contain the little phoenix chick,
which is here, which is being rigged right now. And then we have,
this is the sitar of the bard hare. Without the bard hare yet. Then we have the townsfolk. We have a masculine version,
let's say, and a feminine version and basically, the idea with them
is that we're going to dress them up with accessories so that
they look different from each other and then
we can create characters. And the accessories are mostly
going to be made by the community. So we need the help
of the community to make them hats, or small decorations
around the neck, or anything you can imagine,
like bracelets and so forth. And obviously, we can do
texture swaps so they can wear different... [CHEMA] Different clothes.
[CIRO] Yes, different clothes. We have a rock critter,
which is here and it also has a bunch,
a couple of animations. He has... oops, into the camera.
He has an Attack animation. And then he has a Walk cycle
but they haven't been connected into a State Machine yet
but we're almost there. This is what we have in terms
of characters for now, and then we have a bunch of objects
as you can see like the fern plants, bushes, we have torches and bamboo-made stumps
and fallen trees. We have a bunch of different
small decorations for the ground and we have bamboo canes. We have a bunch of rocks here to construct the scenery,
obviously trees and palms. And this is actually the campfire.
[CHEMA] The cauldron. Yeah, where the pig chef
will be able to cook. And then we have
smashable pottery vases and we have a chest
coming in as well. So there's a lot of graphic assets
that are being made, and then on the side, actually,
we also have some effects being made. So this is a water shader
made by @Dickmendra one of the members of the community
which actually has been announced. So this is also a collaboration. If you go on the forums,
you will notice that a user called, @treivize
has made improvements to this water shader
so we're getting this water shader with foam and depth effect
or something, [AMEL] This is great.
[CIRO] which now looks like this. But it's really, really cool,
and we're going to be merging it soon enough in this, all part of this,
what I call The Big Merge. And actually, in terms of effects,
before I switch away from it, we also have another effect
from another user called, @recklol, on the forums. And this is an effect to create
like a disappear effect when you burn something away. So he tested it on the cane, of course,
you're not going to burn the cane but that's the idea.
[AMEL] Wow. And also @treivize from before
[AMEL] I love it. he's working on a fire system. I shouldn't call it a system,
it's more of an effect, particles and shader to simulate fire.
So we're going to be merging all of these and we're going
to put it into The Big Merge. And as part of The Big Merge,
I actually... remade a couple of Scenes so one of them is called
"TestingGround_Small" and it's the one you saw before. And basically, if you jump
on this version of the game and your computer
is not that powerful you can use this scene to just test
the Character Controller, if I press Play here,
the character gets spawned. "Null Reference Exception,"
I don't what that is. Ah, it's the Timeline that I put
during the livestream. Yeah, ignore the Timeline,
but you can use this Scene to test the character
if your computer is not super powerful
and you want to keep it light. Also obviously Play mode
is going to be entered faster. Or you can go to this other scene
which is called "Testing Ground," which is a bit more
of an elaborate scenario where you can see
a little bit of the assets interact with each other,
if you want. Of course it's still very crude.
I just used PolyBrush to scatter a few assets,
on the ground and create a small forest
but this is, again, a testing ground that you can use if your game runs decently well. If your computer runs
decently well. [CHEMA] I have a question, Ciro,
[CIRO] Yeah? [CHEMA] about this actually
because I see that the pig is animated,
but are we going to use another package for the animation? You're talking about
Animation Rigging? [CHEMA] Yes.
[CIRO] Yes, that's a very good question, Chema, thank you for that. Actually one request
that I asked the artist, if you notice the character,
for example, when now he plays the Idle animation,
and this is a block out so it's going to improve,
but I asked them to make these animations
without the walking cane. So he's basically able
to perform all of the actions like Walking and Idle and Jumping
and Talking without the cane. And then we're going to be using
the Animation Rigging to add the cane to the character
so that his right arm, the arm that you see here
in the front, is going to be holding the cane.
So with the Animation Rigging, it will be modifying the position
of this hand to hold the cane so that we would modify
the animation, for example, for walking and he's going to be
holding the cane and using it to walk. And this basically allows us
to have two versions of the animations for
the price of one, if you want, where he could basically,
for example, have the cane during regular gameplay.
But then in some cutscenes, maybe he puts the cane down
and he speaks with both hands or when he cooks,
for example, right. So I'm thinking of an animation
where he plants the cane into the ground and then
he takes the ingredients with two hands and cooks. And we're going to be using, yes,
Animation Rigging for that. So we're going to introduce
the package inside the project soon. [CHEMA] Awesome. And that's it, that's The Big Merge
it's coming to your GitHub repos very, very soon, probably tonight,
I just need to literally push it to main and double check
that everything works because obviously the bug
is always behind the corner. So yeah.
[AMEL] So it's supposed to be on the main branch indeed
because someone asked the question in the chat
if The Big Merge is going to be in another branch. No, it's in another branch
on my machine for now, but I want to put it in main
because I want everybody to be able to quickly grab
the assets and not having to do tests with the State Machine,
for example, in the ugly environment, prototyping environment
that we had. Yes, please. We are done
with the prototyping environment. So now maybe let's have an overview of the different tasks
that we have made so far and maybe reveal new tasks,
I would say, alright. Definitely. So... we're going to basically go back
to the Roadmap that Chema showed at
the very beginning of the stream. And actually, this episode, we really got to this episode...
how can I say? We were preparing things
until today basically, the things to show because
there's so many contributions, and you will notice because
if you go to the Roadmap, No. 1, the Codeck is almost empty, like there's a few things
I need to refresh some tasks, but there's very little planned for now
because everything has been done. We merged so many PRs. And then, No. 2,
if you go to this deck here, to the livestream one,
which is the one we have today and you open it, you will see
that we've done a lot of things. And many, many things,
the ones with the blue icon are done by the community. Among them, you see that
we have the water shader, as I mentioned before,
collaboration between @Dickmendra and @treivize. We have the audio system
has been merged in, the timeline track in dialogues
that Amel showed. We have an object pulling mechanism
by Dave Rodriguez. We have a bunch of bug fixes,
the little ones with the ladybug icon are bug fixes, you can see
how many bugs have been found and fixed by the community,
which is super cool. We have a few Editor tools
like the one that Amel showed to place objects
by Jonathan Mercer. And so many, many things
in this release if you want. And now we need to basically
create new tasks. So live. That's enabled a hidden deck
that I have here, and I have a few new tasks here. Again, this is going
to be finalized... soon, like some of these tasks
have very little information inside but that's why I wanted
to show them live, starting with this one,
accessories for townsfolk. As I said, we need to basically
dress up these characters here, which I have in the art showcase. So townsfolk, we're not going
to have many models. We're going to have
just like a couple of models, and then we need
to accessorize them, we need to customize them
to make them unique. Obviously, we have
other unique characters but if we want to populate the town
we need to make this model a bit more special.
And so one thing we need to do is to start
modeling literally some accessories for the townsfolk
and I'm really curious to see where this is going, hopefully,
in a good direction. So I'm going to put this one
into the 3D modeling, and I'm going to assign
some priorities later. Then we need, one thing
we should do is branching dialogues so right now the dialogues,
they don't allow branching yet, but we want to make sure that
the data type supports branching that the Dialogue Manager
can pick up and then produce these choices on screen
that the player cannot then select. So I'm going to put
branching in dialogues also in the coding pile in here. And then we have two different
very interesting tasks. So I've shown you that
we have the rock critter, the stone critter, which is one
of the enemies in the game and we're making animations for it. But we decided to outsource, if you want, slime critter
and plant critter. So we're not going
to make them ourselves because we had many requests from people they want to start
doing something more involved. Slime critter is super simple
if you go to the game design wiki you will see the designs in here. Slime critter is this one,
it's basically a bowl of slime that attacks the player
and the plant is this one. So they're two relatively
simple models and at the same time,
with the right animations, they can be infused
with a lot of character. So this is the concept art
that we have and I think there's another file
linked here with a little bit more ideas, but basically
that's the concept art which you can find
in the game design wiki. So I'm going to take
these two cards, one and two, and I'm going to put them
into the 3D deck. And again, I'm going to provide
more information on that because obviously they're
pretty empty right now, but yeah. And when I talk about these models,
I mean modeling, texturing, rigging and animation. That's what we need. [CHEMA] Yeah, and I know that
there were many people that wanted to participate
in the modeling and in the 3D so now that we have
the basic graphic, we know where we are going.
So yes, these are cool new... cards to add to our deck.
[CIRO & AMEL] Yeah. Then I have a personal request. It would be nice to have,
and this should be really like an editor script or something,
but it would be nice to have a tool to replace GameObjects with Prefab,
this is a classic need when you, for example,
have placed, I don't know 50 trees or you have placed
50 bushes and you want to replace them with trees,
that you want to just select them and replace with another Prefab. So this is a very low priority task
actually I'm going to assign the priority, it's No Rush. But if anybody wants
to measure themselves with a very simple editor tool,
I'll just put it here inside the Codeck just, you know, in case you... [AMEL] Plus one for the other one too.
[CIRO] Yeah. We need whiteboxing, I guess, also.
That's something we come across, I would say, quite often
and as you said, it's really no rush
but it's super useful. [CIRO] Yeah, definitely. Actually
always keep in mind the priority of cards.
I'm paying a lot of attention in putting the cards organized
by priority, so this is Medium, these are No Rush.
So please keep that in mind. There's a reason why
I ordered them like that, I don't just drop into the deck. Sorry, and then finally,
there's a couple of shader tasks. So one is adding the ability
to do random tinting based on position. The idea here is that, for example,
we have vegetation, right, and the vegetation right now
looks all the same. So every bush looks like
every other bush. But it would be super nice
to be able to tint the bushes a little bit based on where
they are in the scene randomly. So add a slight variation of hue
and saturation maybe to the color of the bushes
and to the color of the trees, but not the trunk,
just the leaves, right. So that's one interesting thing
that you can do through shader but it needs to be made
so I'm going to put this into, I'm going to put it into... [CHEMA] The effect?
[CIRO] Effects and Particles, I'll think about it later
but you'll find it there. And then masking ability
because if we need to apply, for example, that effect
only to the leaves of the tree, then we need to be able
to mask the shader. So this is also another thing
and here I provided a little bit of information
that you can read later on. And that's it for now,
that's the new tasks that we have, we're going
to be adding more as we go. Public Roadmap as usual,
you will find it basically linked here on the repo,
in the forums or wherever you find the projects,
you will find the links here, there's the link for
the Public Roadmap, for instance. So from here, you can always reach
the Roadmap and find the new tasks that I just showed. [AMEL] Yeah. So Ciro,
when you show Codecks, you show the tasks
that we have done. But don't you think
that we forgot one task? [CHUCKLES] [CIRO] What is it? [AMEL] It's on the Up
For Discussion for now. [CIRO] Up For Discussion,
this one, the game title? [AMEL] Yes. So I guess it's time
to reveal the game title finally. [CIRO] So I'll mark it as done. [AMEL] Yes.
[CIRO] And I'll put it inside the livestream deck.
We just completed it basically. [CHEMA] Yeah, we completed it
but I think that people don't know it. [AMEL] Yes. [CIRO] Time to reveal the title.
[AMEL] And now, [AMEL] time to reveal the title.
[CIRO] Okay. [CHEMA] Drum roll, please.
[CIRO] Just so you know, we were thinking we should
make some kind of graphics, some kind of tech presentation,
we didn't do any of that. So we're just going
to reveal the title, just drop it on you
in the most, like, less, how do you say,
impressive way possible. We hope you like it
because you chose it. You chose as part of the community.
[CIRO] You chose it and you proposed it. This is not
a proposal that comes from me, although I loved it.
[LAUGHS] No spoilers. So what's the title,
what's the title? And this was the form
that we gave to people ten days ago, I think now. And the options, the finalists
were <i>Chop Chop</i>, <i>Gastronaut</i>, <i>Gourmet Quest</i>,<i>
A Pig's Tale</i>, <i>Swine and Dine</i>, <i>Pig Chef: Island of the Lost Flavor</i>
these were the options and I think people could vote
a maximum of three options, and then they accumulated. Somebody says in the chat
the name is <i>Open Projects</i>. [LAUGHS] Actually I'll add the option now
and then I'll give it a million votes. What do you think?
Which one did you think won? I'm curious. Put your guesses in the chat,
I'm curious to see as well. True story. So that's the options
and as you can see here, 168 people voted, and I think a similar number
of people voted in the first round, which produced these options. But now there's no turning back,
now you voted, I closed the survey so you can't vote anymore,
so don't try. Reveal the votes in reverse order. [CHEMA] Can you?
[CIRO] Okay, fine, I'll do that. But I need to hide
the form to do that. Yeah, you can show us like... So what was in the third place? Third place? No, I'll start
from the bottom. [CHEMA] Okay.
[CIRO] I'll start from the bottom. So the very last one is <i>Gastronaut</i> with 32 votes. The second worst, if you want,
the second least voted is <i>Gourmet Quest</i> with 41 votes. And then at the same level
on the third spot, there's <i>A Pig's Tale</i>
and <i>Swine and Dine</i>. And then I'll just jump
to the winner. Yes. And the winner is <i>Chop Chop</i> with 72 votes.
[AMEL] Yay! And then the second one is<i>
Pig Chef: Island of the Lost Flavor</i> which is a very long title. [CHEMA] I voted for that one.
[CIRO] Yes, that's the... [CIRO] Which one? <i>Pig Chef,</i> Chema?
[CHEMA] I voted for the second one. Yeah, the <i>Lost Flavor</i>, I like it. [CIRO] You voted for that?
[CHEMA] Yeah. [AMEL] Ciro is like,
"We need to talk." [LAUGHS] Well, I voted for <i>Chop Chop</i>, so [AMEL] I'm pretty happy that it won.
[CIRO] I also voted for <i>Chop Chop</i>. [AMEL] No surprise for me.
[CIRO] And actually, just because maybe there's people
that are not native English speakers, I'm not a native English speaker,
myself, but "Chop, chop" is a joke on, chop obviously means like to cut,
right, to chop something into little slices
or pieces, I guess. It's frequently used with... you can call a piece of pork,
pork chop, so it's a slice of pork. So it ties into the whole fact
that he's a pig. But also, "Chop, chop"
is used to say, "Hurry up", Like, "Go faster," like "Move faster"
and "Walk Faster." And I thought it was, immediately,
when I saw it from the first time I thought it was a nice option
because one of the ideas is that this Pig Chef in the game,
they go around the world. So actually another option
that I really liked was <i>Globetrotter</i>. And fun fact, the trotter
is the foot of the pig. So the foot of the pig is a trotter
and it was just mind-blowing. But then people said like, no,
it was one of the options and it wasn't voted.
But then <i>Chop Chop</i> came on top, so that was nice. [AMEL] Yes. Wow.
[CHEMA] Ah. [CIRO] Fun fact. Fun fact. And let me see if I can find
the first forum. So we had the round one of titles, and you will see... Yes, you will see how many
options we had for the first round. We had 124 responses, and these were the titles,
plenty of them. So we did the first round
with a lot of titles and as you can see, <i>Pork Chop</i>
was super winning with 37 votes. The second one was <i>Gastronaut.</i>
[CHEMA] 72, I think. [CIRO] <i>Gastronaut</i> was doing well
on the first round. <i>Gourmet Quest</i>, all the ones
that went into the final. And I think <i>Globetrotter</i>
was here somewhere. But it didn't receive
many, many votes. [AMEL] Yeah.
[CIRO] Yeah, it's here somewhere, I don't know. But it wasn't chosen and then <i>Chop Chop</i>
went into the finals and it won. So the game is going
to be called <i>Chop Chop</i>. There's one guy commented,
"Ciro = culture." [CHUCKLES] [AMEL] True, true, I can confirm. Anyway, so the title of the game
is <i>Chop, Chop</i>. Of course it still remains
Open Project #1. So the repo, we're not going
to rename the repo and break all the links.
But we're going to put the title here and there.
[CHUCKLES] Yeah, so now we can start creating
a Title Sprite for it. Yeah, a title screen. Yup, that's a good point,
we can start thinking of the graphics for the title. And maybe other things like
which font we want to use in the game, like
there's so many graphic decisions that we can definitely start
[CHEMA] Yes. thinking about.
Again, time is ticking. [CHUCKLES] Somebody says more votes
coming in by name. No, let's not go there. [LAUGHS] "Now you have to say,
'Chop, chop, guys' at the end of every stream." Yes we will.
[LAUGHS] Looks like the new curse we have. Do you like the title? You do?
[CHEMA] I do. [CIRO] Does the chat like the title?
[AMEL] I voted for it. I also like <i>Politics Melancholic</i>
but maybe not now. [LAUGHS] Chop, chop with
the decision, come on. Is it going to have subtitle,
like "Chop, Chop, something, something," oof,
then we need to vote again. [LAUGHS] Please. "It's satisfactory." "I like it now after
the explanation." "Yes, it's a funny one."
I think when it comes to titles, you also need
to get used to it a little bit. Whenever you hear a title
for the first time, whenever you hear even like,
you hear of an app, right and at the beginning,
the name is weird, and you become more used to it. Like how many things
that we use daily these days are actually named
in a very weird way but then we just got used to it. [CHEMA] Exactly.
[CIRO] Like Twitter, Facebook, right all these names are really strange,
if you think about it. But anyway, <i>Chop Chop</i> it is,
we need to move on. Can't think of the title forever.
[AMEL] Yeah, but it sounds like there's no surprise in
the community, I would say. They voted, I mean
that's 168 votes. So I think people are satisfied so that's great.
Everyone is happy about it. [CIRO] Nice, nice. Cool. I think we're there. We're actually super late
like we went on for such a long time. Okay, shall we wrap up, girls?
[CHEMA] Yes. If nobody has like very final
comments, questions that they want to put in the chat. Will there be blood
on each "Chop"? No. Maybe ketchup.
[LAUGHS] [AMEL] Oh, my God.
[CIRO] Yeah, if you don't have any final questions,
I think we can go because we also went on
for quite a long time. You can still ask us in the chat,
I think we will stay for 10 minutes or 15 minutes in the chat.
And then if you have any other additional questions,
you can ask us on the forums and we can answer you there. [AMEL] Great.
[CIRO] Yep. So just to recap, Open Projects #1,
you'll find it here on the repository. Just google Open Projects
or find a blog post or the trailer,
everything links to here. Here is where you can download the project, itself. Here is where you will collaborate
by opening Pull Requests and then from here,
you can jump on the forums and have a discussion
with the other users and as you can see,
the forums are quite active with currently 126 threads open
and thousands and thousands of comments.
And then from the forums and from the repo, you can jump on
the Public Roadmap, which is this thing here,
where you can read about the design of the game,
about the items that we're discussing.
You can check, take a look at bugs
that are ready to be fixed and all the tasks
that we need to complete to make this game demo, I guess. And also all the things
that we've done until now. Actually, one thing I wanted
to mention about the Roadmap, we are starting to note down all of the PRs, so every item has,
not this one but this one, has the PRs that basically made it. So from here,
you can basically open and you need to sign in
to the Unity. No, I need to sign in, you don't,
but you can open the PRs and see how people
made everything, item by item, who made it.
[AMEL] And I think... Yeah, I was going to say,
I think this was a request from the community, right?
Someone said this in another thread. [CIRO] Yup. That makes sense
because then you can see the whole history
of how things have been done, you can trace back who made it,
potentially like message them and bother them,
"Hey, why did you put this?" [LAUGHS]
Stuff like that. Somebody is asking in the chat,
how many hours will the full game be?
Very little. It's not going to be hours long.
It's going to be, what do you think? [CHEMA] 45 minutes, I don't know.
[CIRO] 45 minutes, this long? No, I would say
a little bit less, maybe 15. I think if you know the game,
if you know how to finish it, it will take you 10
to 15 minutes to complete. And if you don't know it,
then it will take you maybe 40 minutes,
that's what I think. I want to remind everyone
that this is not a full game that we're making.
This is a... [CHEMA] Vertical slice.
[CIRO] Vertical slice, yes. Yes. So we're not aiming
to make it a complete game like a tight game play loop,
we're just trying to make it work and to make it pretty
and to make it nice. But we're not... we're not going to be... I don't know why,
somebody sent an emoji to the chat and it was moderated.
Interesting. Cool. They ask, "I mean the full game,
not the vertical slice." We're not going to make
the full game. If you want to make full game,
up to you. We will stop at the vertical slice because
that's the goal of this project and then if everything goes well,
if we finish on time, if we see that
it's a pleasant process, and if you like the process,
then we're going to make a new one. But we're not going
to make a full game. Yeah. Okay. Any final comments? [CIRO] Chema and Amel?
[CHEMA] Thanks, everyone. [CIRO] So as usual,
[AMEL] Yeah. we're going to be in the chat
for another while and we're going to reply
to these final questions in text, I guess. And for the rest,
we'll see you next time either on the forums
or the repo, of course. But if you just want
to watch us chat for hours, we'll see you next time
in two weeks. Same channel, same place.
[AMEL & CHEMA] Yeah. same time. Yeah.
[AMEL] Same time. [AMEL] Great.
[CHEMA] See you, everyone. Thanks, everyone for joining us.
[CIRO] Bye, everyone. [AMEL] See you soon. Bye.
[CIRO] Bye, thanks for joining. [CHEMA] Bye. ♪ [MUSIC] ♪ ♪ [MUSIC] ♪ ♪ [MUSIC] ♪ ♪ [MUSIC] ♪