♪ [MUSIC] ♪ I love this music,
I didn't want to start. But it's time to start. [CHEMA] Hey, everyone.
[CIRO] Hello, everyone. [AMEL] Hey, everyone.
[CIRO] Welcome to the stream. Sorry, I love that song too much,
it was like the best vibe to start. [CIRO] Welcome, everyone.
[CHEMA] Yeah, it did. Welcome to the second episode
of Open Projects: The Journey. I was going to say the wrong title. My name is Ciro and with me
is Amel and Chema. [CHEMA] Hi.
[AMEL] Hi, everyone. Thanks for joining us again
on this live stream. This is the second episode,
so we're at the beginning of the journey on the creation
of this Open Project, this game that we are creating
with your help. It's going to be a long journey,
it's going to be roughly six months we predicted, so as I said,
we are at the beginning of it. But you know, we made some progress
and today, we're going to take a look
at this progress. But first, I want to introduce
the team again. And I want to start
with Chema and Amel, Chema, you want to start? Okay, hi, everyone, my name is
Chema, I'm a Creator Advocate. I don't know if some of you saw me
in the forums on the threads, I was taking care of the UI...
sorry, the wireframe and many other things, so, hi. [CIRO] Hello, Chema.
And Amel? Hi, everyone, I'm Amel,
I'm also a Creator Advocate. Today, I will talk about
Scene loading, so you probably saw me on GitHub
doing some commits there. And I was also replying
a little bit on the level design and the greyboxing threads. [CHEMA] Ciro, do you want
to present yourself? Yeah, so my name is Ciro, as usual. I'm Head of Creator Advocacy
and I work with Chema and Amel on the Unity Open Projects,
we all work from out of Copenhagen,
so here right now, it's 6 PM. Actually, fun fact,
shall we tell the fact? [CHEMA, AMEL] Yeah, yeah, yeah!
[CIRO] You go, please. [ALL LAUGH] [CHEMA] Actually I think we changed
hours, I think it's Sunday or Saturday night
or something like that and actually we thought that
we still had one hour. Right now it's one hour. It's a funny fact because,
how do you call it, the Daylight Savings.
[AMEL, CHEMA] Yeah. [CIRO] It changed in Europe
but not in the U.S. We have this stream
scheduled in U.S. time, and we thought we still had
one hour and a half when we started setting up
and then we realized, "Oh, no! We have to be quick!" And we were frantically
setting up the stream. But here we are, seems like
everything is working. So, let's start with it. The first thing I wanted to do,
because this is the second episode but maybe there're some people
that for them it's the first time that they joined the stream,
I wanted to recap what we're doing and basically,
what are we talking about, right? I have this thing
I want to show you. First this video here. Who wants to present
the project? [CHEMA LAUGHS] You can do it, Ciro.
[CIRO] I can do it? Okay. During this live stream,
we're going to cover the first project of Open Projects,
so we call it, "Project #1" very simply, because
it doesn't have a title yet. And we're choosing
the title, don't worry. It's not going to be called
like this forever. But Project #1 is basically
an action adventure game and you're seeing the concept art
on screen right now. The concept art for the characters,
the concept art for some like environmental enemies,
you would call them. And for some friends and NPCs. And basically, we built like
a very, very short story and now we're making the game.
We're making the game with the help of the community. What to say?
What else to say? As I said, it's called
action adventure, the protagonist is this
character here. He's a pig chef traveling the world and basically, looking
for like the ultimate flavors and recipes, cooking ingredients,
and he travels the world with the help of this
little phoenix chick that he has in his lantern,
which is his traveling companion. And then we have, again,
other characters, NPCs. He gets on this island
and he's basically joining this cooking festival,
where this chef on the right is kind of like the resident
legendary chef and so he's joining the cooking
festival to impress this chef. And to impress the chef,
he has to produce like an incredible recipe
that he doesn't know about so he's going to try and research
into what to create with the help of the locals,
which you can see here on the left. We call them,
"the townsfolk" for now. They don't have a name yet. Did I say everything? [CHEMA] I think so,
it's the new story, Ciro because last time we had the live,
we knew that we needed to change the story,
so if I understand correctly, this is the new story that
we thought about with the community.
[CIRO] Yes, we received a lot input and we changed the story
quite substantially. These two characters that you see
on screen right now, they're... they didn't exist two weeks ago
when we made the last live stream. And obviously, that created
some change in the plans, we got behind a little bit
with art production. But we're catching up and
I'm going to show you some art during the course
of this live stream. [CHEMA] I think we have
one of the questions that we can answer to... inform more about the game,
so one of the questions is, "Will it be a third-person player
or a first-person player?" It will be a... third person game, basically, so we will see
the character from... the outside, not through his eyes,
but we'll see the character through a camera that
can orbit around the player. Just one second because somebody
is saying that they hear an echo. [CHEMA] Yeah, I see that as well. [CIRO] Let's see
if it's a strong echo. I'm just checking the... [CIRO] the settings.
[CHEMA] Yeah. [CIRO] You want to say
something else about the game? [CHEMA] Actually, no, I think
you said the whole story. And the story behind
the concept, in general, is that we wanted in this time that we couldn't travel
to see the community, we wanted to interact
with them more by making this game with them, looking at what they do,
what are their challenges and help them and at the same time deliver to them later
with some tutorials and some... I mean presentations
about the subjects that they already created,
I don't know if I made myself [CHEMA] clear here.
[CIRO] Basically, you're saying the whole purpose
of the Open Projects is to connect with
the community and... Yeah, that's the plan, it's like
creating this project with people not just us making it, which is obviously
a challenge in itself, right. We're experimenting
this process of... We have the forums
which we're using as a collaboration tool and... there're so many threads,
and in each thread, we discuss one part of the project
and then people join different features and I saw
a couple of threads and I want to show them later where
people are actually collaborating with each other on one feature and working... on each other's code and it's super
fascinating and really nice. [CHEMA] Yeah.
[CIRO] Okay, where are we with the game? I want to show you
just a couple of things we have. Basically, the character
in the game right now, we have defined,
it still works like this. Unfortunately, we don't have
any animation. We have defined the look
a little bit, as you can see, this is the toon shader on the
character and on the environment. We have a Character Controller,
fully working Character Controller and we're going to talk about
the State Machine that powers the character during
this live stream. And then on the art side, we have this thing here, which is another Scene
on another branch of the game and in here, we're developing
the look of the game, the final look, so as you can see,
we have the pig chef, as a 3D character.
The toon shader supports extra lighting, so you see here
I was creating a light to show you the effect. We have one of the critters,
the rock character to the right. It's one of the characters
populating this island. And then as you can see, we have
a few pieces of environment in the background. And I'm going
to show you in the Editor later on this stuff. This is where we are. Again, the progress is still
a bit early, right. As I said, we still have
just the moving character and some art on the side
and we're at the point where we're going to merge
these two things. But I also wanted to show
where to find the project. If I go, if I remove this video, you will see on screen right now what we call, "the Public Roadmap."
[AMEL] Yeah. [CIRO] Chema, you want
to mention what this is? I don't talk all the time. [CHEMA] Oh, yeah, actually,
I wanted to show it... just one second, I don't know if...
yeah, are you seeing me now? [CIRO] You want me
to share your screen? [CHEMA] Just one second, I think,
yeah, I will share my screen and then continue talking
from there but... I'll just need one small second [CHEMA] and now we can share it.
[CIRO] Okay. Let's go to the roadmap. As Ciro told you, we can see the advancement
of our game in the roadmap. You can go check the Readme,
if you want to read some documents or if you want, for example,
to have the game flow or anything that you want to see
that is happening. These are some cards
that you can click on and they contain tasks
that you can have, let me just click on one task. For example, this task
is assigned to the community and that's why it has
the blue icon here and it says that some people
of the community are taking care of this task
and you can go to the link in the thread and then
discuss with people for later maybe propose a pull request
or a solution to it. So yeah, this is how you can find information about the game. I don't know if you... if someone
wants to add something about this. [CIRO] No, I think it's good.
[AMEL] Yeah. [CHEMA] Okay, awesome.
[CIRO] Move back to the... [CIRO] to our cameras.
[CHEMA] Yeah. [CIRO] Whoops, sorry. There we go, so, yeah,
so this is the roadmap. Other locations where
you'll find the game is, as I was saying on the forums.
On the forums is where the main discussion happens. And as I said, there's plenty,
plenty of threads. Right now, I think
we have 108 threads. [CIRO] So there's a lot of them.
[AMEL] Yeah, wow. [CIRO] And basically, the ones
marked Official, for example, let's take a look at this one. They are the ones where
we're discussing one feature, just one feature and then
people are basically hypothesizing how to make
that feature and posting like bits of code, as you can see,
and giving feedback to each other. And obviously, we are responding
to this feedback here. And basically, we're making
the game as we go. Like some things, honestly,
we haven't imagined yet how they work and we're
coming up with them as we go. And that's the challenge
and that's why sometimes it can feel like we're a bit slow
in this process because the process is actually
happening right now. And then the third part,
which is very important to this project,
is the GitHub repository. The GitHub repository
is basically the beating heart. It's where the project lives and it's hosted on our, what do you call it, organization. The link is obviously available
on the forums, on the roadmap and I think Carol,
our Community Manager, she's sharing it
in the chat right now. And the GitHub
is where the project lives and it's where basically,
you would make your contributions. If you want to contribute
some new feature, you would make what is called
a PR, a pull request and that will go here and then
we are in charge of reviewing that pull request and making sure
that it works, that it makes sense, and that if it does,
then we pull it into the game. Here you can see that
we have 20 pull requests open, 64 have already been closed. And yeah, it's a big number. And all of these pull requests
as you can see, some of them have a conversation attached. You can also see the history
of what happened on this pull request,
so it's a really interesting... it's a really interesting process. [AMEL] And if you don't make
the pull request, you can still discuss that pull request
or give suggestions, or review it with comments, right? [CIRO] Yeah.
[CHEMA] Yeah, so you don't only participate with code,
you also participate with ideas. [CIRO] Yeah, definitely,
or you can also review code. [AMEL] Yeah, review code.
[CIRO] For instance, in this mega pull request, you can see
the discussion that's going on and people are basically commenting on each other's code
and making suggestions on how to solve something,
so there's 27 more comments here, so it's a really long conversation. [CHEMA] Exactly.
[AMEL] Yes. [CIRO] Okay, that's the... That's more or less the thing
that we're working on. Anything to add?
I think we covered everything. Yeah, I think we covered everything
and if you have any additional questions,
I think you can find the answers either on the roadmap, on the Readme part
or in the threads, we have also detailed threads
that explain how to contribute and how to start
contributing to this game. We actually have also
a Discord channel, right. Like on the official Unity Discord,
we have a channel dedicated to Open Projects, so if anybody
wants to have a quick reply, you can go there and ask that to just the community and
we will reply and some other people will reply as well. [CHEMA] Exactly.
[CIRO] Shall we show new stuff? Chema, do you want to start? Oh, yeah, okay, I will start.
I will share again my screen. [CIRO] Tell me when you're ready,
and what are you going to show us? [CHEMA] I'm ready.
Actually today I'm going... Yes, I'm ready. Like I said earlier,
you can find in the roadmap what you need to do and... participate with opening
new threads or new discussions
and these past two weeks, we took care of the wireframing,
the UI wireframing, and it's not only to create UI
and just UI screens, but it's also to understand
how your game interacts, how your user
interacts with your game. And while we were doing that,
we understood that we had missing information
either about the inventory or how the game uses
the items that we collect and things like that,
but we will see that later. For now, this is the Miro board that we are using
to create the UI. It's not public yet. Right now I'm just putting together
some of the diagrams that we've seen in the threads. Sorry, let me close this.
In the thread about the wireframing, so if you can see
these are discussions about how the UI will be displayed
and some of them propose diagrams
and when we see that, we discuss it and then
the final result, we take it and we put it in
the Miro board for now. So, this is the Miro board.
[CIRO] There's a lot of words in the thread, Chema.
[CHEMA] Oh, yeah. [CIRO] It's crazy now.
[CHEMA] Actually this is not the only thread that takes care
of the UI because also, we need to take care
of the dialogue. The inventory system thread,
the story, the cooking, the story and etc., etc.,
because it's very intricate and that's why we need something
that shows us what we need to see like it's a diagram that... I mean, it's easier to understand
than words, I guess, I don't know. [AMEL] Yeah.
[CHEMA] But as you can see, we also need comments about it,
so let me start by showing where we are at right now. If I go to Presentation mode, I'll put it like this, and as you can see,
this is the first screen which is the main menu. These buttons and this frame
for the image or this frame for the title, are not
the final position, we just need to see that
this information will be in this Scene, so right now, we have buttons
for New Game, Settings, Credits,
and Close button. We also have the main Scene that is animated that
will be in the background and we also have the title
and this is the main screen. If we go to the other screen,
we will see that once we have a saved game,
a new button will appear and it will show us
the last saved game. If we go to the settings,
we will see that we have four parts in the settings,
the Audio, the Language, the Input, and the Graphics
because we know that we will have a language
for the subtitles. And also a Back button
because it's normal. And a Save or a Reset
button to reset the information about the Master
Sound and Music and the Sound FX volumes to reset them at default. This is for the audio. This one is for the languages,
we want to change the Game Language from English to any other language
and I think that later, we will be using
the localization package. Also, here we have the Save,
the Reset, and the Back button. Then we have the input
and here, while developing, actually while thinking
about this screen, I had a comment from Ciro
that asked me about the clicks because we are actually going
to use not only the keyboard, but also the joypad. We were thinking
how to edit the key binding using the joypad
and whether we needed the mouse to use
in these menus or not, so I think... this will be a discussion
to have later on. [CIRO] Yeah,
that's a very good point. [CHEMA] Yeah, do you want
to discuss it now, Ciro, or later? [CIRO] No, I just wanted
to mention it in more detail but you said,
basically almost everything. No, no, the point is this game is supposed to be
a desktop game or, if you want, a console game. My idea was always
to use a game pad but I'm also very much aware
that not many people have a gamepad
when they're using a PC. Do you have a gamepad?
[AMEL & CHEMA] No. [CIRO] Do anybody in the chat
have a game pad? I'm curious to hear. But please, please put
Yes or No in the chat so the point is like
we want to make sure that people can test
the game even if they... maybe they're in a train or
something and they want to quickly check out something in the game,
and it needs to feel good to play. Some people requested
to have the camera movement through the mouse,
and we're going to do that because it's very logical.
For the menus, my personal opinion is that we should stick to a menu
which is meant to be for a gamepad and keyboard and not the mouse. [CIRO] What do you think?
[CHEMA] Yeah, my idea is to have the mouse just because
it's simpler to just hover over something and move it
than just looking at your keyboard just because when
you are using a mouse... when you are, sorry, using
the computer, you just reach for the mouse automatically
when you need to go somewhere in the screen, so it's better
I think, to have the mouse and use it to interact
with the menus. Okay, I vote for no mouse. [CIRO] Chema, you vote for? [CHEMA] Mouse.
[CIRO] Amel? You decide. [inaudible] I'm going to ask people
on the chat, "What do you think?" No, what I think like,
now Chema gave her arguments why she wants the mouse,
why you don't want the mouse, Ciro? [CIRO] Me?
[AMEL] Yeah. [CIRO] Because I think
when you make a UI for the mouse, you make it
for the mouse, right? And if you want to make a UI
for the controller or for the keyboard,
you need to think it in a different way and when
you want to support both, not always works, like we need
to do double the work. And... my thought is that if we make it
for the keyboard and the gamepad, we can always make it work
with/for the mouse as well. Even later, right because the mouse
is a more powerful device, you can just hover on things
and click on them like you would.
Why are you smiling, Amel? [CIRO] You don't trust me?
[AMEL] No, no. [LAUGHS] And I think both arguments
are valid, right but, yeah, let us know in the chat
what do you think and tell us why, like
do you prefer with or without... Actually, let us know
in the forums. We have a controls thread
where somebody already launched the discussion,
I'm looking at it... now. I want to say
the name of the person if I can find the thread. There we go.
He was... Gordon Arbor. He launched
this dilemma and now we're like, okay, maybe we need to
do that. Chema, back to you.
[CHEMA] Yeah. Yeah, thank you. That was one of the issues
and as I said, this wireframe is not to decide where each... Component, where each UI element
needs to be in the screen because this will maybe
be modified later by another artist's vision
but it's to understand how to interact with your game
without having to develop, it is just to see, okay,
now I will click on this, I will just decrease
the outline thickness. For example, this one,
it's for the graphics, it will decrease the outline
thickness of the shader that we are using
for our characters and in our game, in general. We also have, oh, sorry, I didn't
change this, so this is not the Game Language, oh, okay. This is the resolution. As always, Save,
Reset and Back button. The next one actually
would be the In Game screens but for the In Game
and because we don't have like a clear vision to... the gameplay we can think about
something in the In Game Scene. But we can guess what
will be in the inventory and this actually... fired a big discussion about how the inventory system will be. In here, we decided
that for the inventory, we will have either
the customization item, these are items that
the character will wear but they will not be like
special custom or something. They will be either a bracelet
that we can add to the arm, to the bone... to the arm bone,
or a hat for the head, or maybe changing the color
of the texture for the apron, etc., something
like that, simple. Also, for the ingredients,
the ingredients that we collect from the world, or we collect
when we interact with a character these ingredients, we will use
them to create a dish to maybe eat later. So... the ingredients and the utensils
would be in the inventory system and as you can see here,
an item will be characterized by its name,
by a preview image in here, by the information about it
that you will see in here in this part of the UI. And by an action button,
actually the action button here depends on what is the element
that we are selecting exactly. We can either equip it, create the dish, or eat the dish. [CHEMA] So this... Yeah?
[CIRO] Sorry to interrupt you one sec. [CIRO] Everybody in the chat
is asking what's this software that we're using
to do the wireframing. [CHEMA] Okay, we are using
Miro, which is a website that you can... it's a web app
that you can find just by clicking <i>miro.com</i>,
I think, I'm not sure [CHEMA] about the link for now...
[CIRO] Anyways, M-I-R-O. [CIRO] It's easy...
[CHEMA] Yeah, <i>miro.com</i> and you can find... you can use it to create
your own diagrams. [CIRO] It's not part of Unity, it's
not something that's connected to us. [CHEMA] Yeah, exactly. So... yeah, this is the inventory
and just to show you how it looks when you are selecting
multiple items. Let us go to the next one,
and we will see here that when you have
multiple items selected you will see them in Preview
and you will see the result dish in the Preview as well. As well as the item
descriptions in here. For now, this is what we have
for the inventory, we are still having
a discussion about the... dish creation, the cooking, about
the inventory system and I think that we have
some cool PRs about it. And also, we are still discussing
the UI wireframing, so if you want to join in
the discussion, please do. Also this is the last part,
this is a generic popup with a title, a close button
that can be there or that can be removed
if we don't need it in the popup, also
a description, an icon for the popup and either one,
two, or no buttons. So as you can see here,
there is a note that explains everything about it. So yeah,
also we still have the credits but it's not populated yet
because we don't know yet how we will have the credits. For now, this is
the wireframe, sorry, Amel. [CHUCKLES] [AMEL] Yeah, go on.
[CHEMA] For now, this is the... wireframing of the UI and how
to interact with the game. And yeah, to you, Amel. [AMEL] Yeah, this looks great. I'm checking if Ciro, do you have
any questions in the chat? I'm keeping an eye
on the chat, yes. [AMEL] I was looking at it. I mean some people
are commenting to do both control styles, so both mouse and keyboard and gamepad for the menus. Of course, everybody wants more.
[AMEL LAUGHS] Okay, fine. Then I guess
they decided for us. Yeah, nice, and they
decided for me, I win. [LAUGHS] Somebody also mentioned using
Rewired but we're not going to use external Assets because
this is an open-source project, we couldn't use external Assets. If we did, we would be sharing some
paid Assets, which we can't do. We will either code everything
from scratch, or luckily, Unity finally released
a new input system which is going to help
in the adventure. [AMEL] Yeah.
[CHEMA] Yeah, exactly. Cool. Thanks, Chema for the update
on the wireframing on the UI. That's in progress,
we're making some progress and when is it going to be ready,
I want it on my desk [LAUGHS]
[CIRO] tomorrow. [AMEL] Today.
[CHEMA] No, it's ready for now. I want it on my desk at 6 PM today, which is in an hour
or half an hour ago, depending on how you see it. Exactly. So yeah,
if people from the chat, sorry, if people from
the community help me, I will be able to do it tomorrow.
[CIRO] Tomorrow. [LAUGHS] [CHEMA] Awesome.
[CIRO] Somebody's asking are we using the new input system,
yes we are, that's what we're going to be using for
both the menus and the gameplay. Any other questions? Shall we also take a small break
to ask some questions, sorry, answer some
questions from before? [AMEL] Yeah.
[CHEMA] Yeah, we can do that. Yeah, I'm going to pick
some questions from... that Carol selected for us. Somebody was asking who's
the artist behind the concept art, and I'm going to put
the concept art on screen for a second. The artist is called,
Jesse Turner. He collaborated with us
at the beginning of the project, we commissioned some
concept art from him. He's on the internet, on Instragram
you'll find him as @drawbarian. Not "barbarian" but @drawbarian. Yeah, and he made
all these concepts that you're seeing right now. [CHEMA] These are very
beautiful, actually. [CIRO] Yeah, actually there's
a character here which we haven't mentioned,
the one with the sitar. [CHEMA] The bard, yeah.
[CIRO] Yeah. [CIRO] Do you want to explain
what the bard does? [CHEMA] I don't. [LAUGHS] Actually, I'm not sure
in the latest story [CHEMA] what it does exactly.
[CIRO] It's the same as before, [CIRO] he's just like...
[CHEMA] A companion. [CIRO] Yeah, and also,
like he acts as... the story progression, like he
explains the story at the beginning and then gives you hints if you're stuck or stuff like that
and you will find him in different locations and
he will sing these poems about the island and the folklore
of the island and give you hints on how to proceed. Another questions, sorry? [AMEL] Yeah, I was saying
he's a friend, not an enemy. Yeah, he's a friendly character
and NPC, I guess. Other questions, somebody says, "Are you the only three
who work on the project I mean, except who follows you?" I guess they mean the community. Yes and no, we have collaboration
with other people at Unity, especially two people,
Richard Fine and Miley Hollenberg, which has done a lot of work,
right until now. You will see them on GitHub a lot.
They review code and approve PRs, so they've been super,
super helpful. And other people at Unity
sometimes they jump into the project, like somebody
from URP jumped to help me, Andre McGrail, to help
with the shaders, so we're going to get
some collaborations, some spot collaborations
here and there. Other questions. Will there be any form of
procedural generation? No. No, I don't think so, we'll make
[CHEMA] I don't think so. everything by hand, yeah. "I do art and I was wondering
will we able to contribute to creature design,
maybe not the main character but maybe the other NPCs
and enemies." It's really welcomed, I mean, the only challenge we'd introduce
in new creatures is that somebody then has to model them
animate them, and stuff like that. But you're very welcome
to create concept art, actually we have some
concept art tasks coming up that I wanted to reveal later
so you kind of spoiled it but never mind, spoil it. [LAUGHS]
[CIRO] Yeah. Okay, let's move on. Amel, are you
ready to show us something else? Yes, you can see my screen
and I guess now we'll talk about events and the loading
systems, right? [CIRO] Yeah, of course. [AMEL] Yes, I wanted to start
actually from Miro as well by showing you this
diagram that we have for the different environments. And we can see here that
we have this beach environment, glade, forest, you can see
that we have those different locations and of course,
to be able to move from one location to another,
we need to create some solid system
to load those Scenes. One thing is probably
people will think of an obvious solution,
which is using singleton pattern, so I want to start by mentioning
why we're not using this. First, because this solution
using singleton allows rigid connections
between the systems that you have in your game,
so it's not modular. And those systems
cannot exist separately, so they will always depend
on each other's. And this is of course,
hard to maintain and hard to reuse,
so that's why we decided to do something based
on ScriptableObjects and Events. If you are not familiar
with these ScriptableObjects or Events or both, we're going to
quickly give an overview of this, so I'm going to jump
into the Editor already, and I'm going to go to my Scene. This is a Scene called, "Beach".
And I go to the main character that is the pig and you can see
that we have different Components, these different scripts and all
these are MonoBehaviors. There are Components
attached to the GameObject. What we are talking about today
are ScriptableObjects, which are not attached
to any GameObject, so they don't live in the Scene
or in the Inspector here, you see them in the Assets folder,
so you would see them as any other Assets, if I go
to ScriptableObject folder we have created, you can see
that we have locations, for instance, and we can create
them from here and this, you could enable it from the script. For instance, I can create
a new location, which is a ScriptableObject
and this new location will store data so we usually use
ScriptableObjects to store data. And you can, I mean, this is an
example that I will explain later. But you can see that we can,
here, for instance, have a ScriptableObject
for each location. The forest, you can put
a short description, the name of the Scene
and specify all the data related to that. These
are the ScriptableObjects. And now we are going
to use these with Events, so I thought that I would show you
these diagrams to make it easier to get started, I would say,
and understand. You can see that the Event
that we were talking about is here, the ScriptableObject,
and we can see that we have here an Action or a Trigger
that will raise this Event. To make it easier to understand
let's use as an example. If I want to exit the game
and I'm going to press the button to exit the game,
so this is my action. It's a button, I will press it,
it's a MonoBehavior and this will raise an Event. What do we mean by raise,
raise is like broadcasting this Event in the whole game,
so you would say, "Okay, now the game should exit",
like we raise this Event. And we have in the other hand,
this other MonoBehavior, which is the Event Listener
that is listening to the Event. Basically, the Event Listener
doesn't know about this Action or button or Trigger. And this Action and Trigger
doesn't also know about the Event Listener, they are
two independent systems and there is this event
that is a ScriptableObject that acts as an anchor
between them. We easily just raise the Event,
we listen to it from another side and I wanted to mention
that you can do this, of course from different Scenes,
so this is an example Scene and this could be the same
or another Scene. And once you heard that Event,
as an Event Listener you're going to call the different
responses that you have. I'm going to show an example
of this in the Editor to make it make more sense for it, I'm going to remove
this, we don't need it. If I go to my main menu, and you can see that
I have in my canvas here the Exit button. Of course
this is not the final UI. If you're look into the
Exit button, you can see that when we press it, OnClick,
we have this ScriptableObject. And as I said, these are Assets, so you can drag and drop
them from any Scene without any problem
and then I would choose my function here, my method,
which is the Raise method. Here, I am in
the main menu Scene doing something,
which is raising this Event and I will actually show you
where I'm listening to this Event. In this example, we are doing this
in a Scene called, "Scene Loader." Here, the GameExitListener
is basically listening to that same Event,
so we just drag and drop it. And then we call the methods
that we want to call when we hear that Event. You can see that they
are in two totally different Scenes and we are able
to exit the game easily. [CIRO] Amel, just for context, what is the role of this
ScenesLoader Scene? [AMEL] That's a good question,
actually, the ScenesLoader Scene is the Scene that we put here
to all this location loader that I will talk about,
that is mainly managing the loading and unloading process,
and this will be always open. Every time we load new Scenes,
like the forest, for instance, it's going to be loaded additively,
and this Scene, basically, doesn't contain any 3D models
or Assets that we are going to actually see, it's just here
to make sure that all the Scenes are loaded
and somehow supervise all these. [CIRO] Basically,
when we launch the game this is the first Scene
that we see? [AMEL] Yeah, when we start off,
actually we can do it if I press Play. Yeah, here we can see our main
menu and I can actually press Start and I can move to my first Scene. And you can see that
I have here a Trigger. And when I enter it,
I'm moving to the next Scene. Here we are like just testing the Scene loading system
that we are talking about. [AMEL] Now before...
[CHEMA] Sorry, can you [CHEMA] can you repeat it again
and I wanted to check if the Scene in the Hierarchy changes, if you click on Play another time.
[AMEL] Yeah, of course. [AMEL] I'm going to show this. If we click on Start,
we can see that we have the Beach Scene loaded. Now
[CHEMA] Oh, okay. we go for instance, to...
The Forest Scene, we can see the Beach is unloaded
and Forest is loaded. And this is the loading system
and it's all based on ScriptableObjects and Events and
I'm going to explain more in detail. Now, I just wanted to show
a simple example of the Exit. I'm going to go back
to the diagram just to give you more other examples,
so we can understand. If I move here
to the Events example, it's not complicated,
it's just like too much examples but there are three
different simple examples. The first one is the one
we just talked about, which is like pressing
the Exit button, we raise the Event we listen to it and we call
the response. Okay, but then what if
I want to pass a parameter in my Raise method? I mean I might need this.
This is a good example of using an int, if I want to
unlock an achievement in my game, I would say maybe I will give
the index of that achievement for instance, which is an int. I need to have this other method
Raise(int) that takes the parameter that I raise from my MonoBehavior. I have also a ScriptableObject
listening to this, sorry, Listener listening
to this Event raise and then I call the response. And I wanted to show the example
that is a slightly more complex and it's the one that we're going
to focus on today because it talks about
Scene management. It's the one that we use
when we enter the Triggers. When we show another Scene,
we move from Beach to Forest location,
we enter that Trigger. This is our Action, I would say,
and this, will raise an Event by taking two parameters. The first parameter
is the game Scenes that we want to load,
so if I am in the Forest and I want to load another location
I would pass it as parameter, and I created a boolean to say
if we want to actually see a loading screen or not. Maybe
if I'm going from the main menu to the game, I want to show
a loading screen. But maybe between the two different
locations, I don't want to, so this is totally flexible, and as well, I wanted to mention
that the game Scene is an array so it's possible to have
multiple Scenes loaded at once. For now, we are only using
one Scene but in case we want to change this later
and put multiple Scenes, the current system
actually supports that. Once we raise that and we have
this Event raised about load location, we have this location
loader script that is listening and you can see that here.
I'm not calling any responses for a reason, just because
we decided to put the location loader
to act as a listener but at the same time,
contain the different methods that we want to call,
and the reason why we did this is because
we are only using this once. We don't really need
to use it anywhere else, so we thought it's better to put
everything together in one script. But those two, for example,
that I mentioned, as Exit Game or Unlock,
they could be used in any other way,
like you could only... you don't only need
to use them with Exit or when you have an achievement,
you can use them no matter if you have any Int you want
to pass a parameter or if you want to use a void Event, which means an Event
with no parameter. [CIRO] These are basically
generic listeners that you can attach to any object. [AMEL] And then I want
to focus on this example, which is the last one,
the one about the Scene. If I move here, we can see that
I'm going from an example Scene. I could either press a button
to start the game, or I can reach the end of the Scene
by going into a Trigger. Again, we raise, the Event
is called, "Load Location" and then we listen to it from any
other Scene which I already explained. But what I wanted explain here
is what this game Scene is because it's not something
by default you need to write. This is a ScriptableObject
that we have created. And from those ScriptableObjects,
we are creating two instances or two children, I would say, that
inherit from that parent class. A GameScene is a parent class that
contains the general information we have about any Scene. Like the name, the description,
so everything that is common between any Scene, no matter
if it's a location or the menu. And then we have
those ScriptableObjects that inherit from that one,
and Location, for instance, will contain information
that are specific to Locations. Like enemy count, for instance
if you have a number of enemies in a certain location,
we can also have those that are specific to menus
like the menu type and here I can just give examples. These are what we use as parameters
here for our Raise methods. [CIRO] So, Amel, basically here
you're using ScriptableObjects for two different use cases, right? [AMEL] Yes.
[CIRO] Like one is holding data the ones at the bottom, they're
holding data about the Scene and the ones at the top are,
did you mention before, an Anchor? [AMEL] It acts as an Anchor
between those two elements like those two MonoBehaviors
that we have. Yeah, we can store that
or we can also use them as Anchors. And this is, the power,
[CIRO] Cool, cool. I would say, our ScriptableObjects
and that's why we love them. I'll show the Editor
because this look too... I mean I usually love to show
diagrams because it makes things more simple to understand,
but I also believe like it's time to dive
and see that in action. We are in the ScenesLoader Scene and you can see that we have
this Location Loader that I said acts as a Listener,
so you can see that we have the Load Event here,
that we are listening to in the Inspector and this is
super flexible because, even if you are an artist
or a level designer, and you want to load
and unload Scenes, you don't have to code things
manually or open the scripts, you can just drag and drop
those Events and you only need to somehow understand
a little bit of the architecture that I was explaining
in the diagrams. Here, I'm going to double-click
in this Location Loader. I'm not going to go line by line
on the scripts, but it's good to dive into this
and see like an overview. Here, we can see that
when we have the methods to load, we have the methods also
to set an active Scene. This actually,
I mentioned it here in the Start, I can see that we are using this
for Lighting and Skybox because if you don't set
the Scene as active, you will see that it looks
a little bit darker. This is important
to take into consideration. We have also a method
to unload the Scenes, so if we move to a new location
we want to probably unload the previous Scenes
that we had loaded. I also check the load state
because every time, I want to make sure that
I don't load the Scene twice. I always do this check
before loading any Scene. And this one is an enumerator
that we use, a coroutine to keep track of the progress
of the loading bar. And this is just to exit
the game simply. This is what
our Location Loader does and of course, again,
it's an Open Project, so you can see this on GitHub
and have a closer look on how everything is working here. Also, I wanted to show
the different Events. This is the LoadEvent
we were talking about. As you can see, it takes
these two parameters that we mentioned. But we can also
talk about the VoidGameEvent, which is the one
that we use for the Exit so it has no parameters
and all of these are, of course, ScriptableObjects. And we have also an IntGameEvent. So we add this... parameter, if we want
to have an int passed here. [CIRO] These are the Anchors that
we mentioned before, right? [AMEL] Yeah, these are Anchors
that we mentioned basically, if I go back here, this Event that we mentioned, that
what we see here... [CIRO] Maybe Anchor
is an unofficial term. Sorry, nobody uses it but... [AMEL] Yeah, but I think it's like
an accurate description of like the purpose, I'd say, of using it.
[CIRO] Yeah, especially when they're connecting to Scenes, right
It's something that connects as maybe a link, you could call it,
I don't know. [AMEL] Yeah. We also... I just showed
those Scriptable Events, ScriptableObject Events. I just wanted
to show the listeners. As I said, for the Location Loader,
we use the same script but for int, for instance, we are using
a different script to listen. And this is quite flexible
because if you look into it, as I mentioned... actually,
I want to show it in the Editor. If we look at it in the Editor,
the GameExitListener, you can see
that it's quite general. Like you can just add
this Component, this MonoBehavior and then drag and drop the Event
that you want to listen to. That's why the name
is not very specific, like it's not Game Exit
Event Listener, no. It's Void Event Listener
and this is a particular example that we have here,
which is the Game Event Exit. If I go back to my scripts,
we have also the one for the Void, it's more or less
the same, just this one. Of course, we added
this UnityEvent int to be able to pass the parameter. In the documentation, you can see
more examples of this. You can also pass two or even three
or more parameters if you want. For now, we just stick to this
because that's what we need in the project and we will, of
course, add more if we need them. And I guess that's it,
I just wanted to show also the GameScene,
ScriptableObject. So, as I said, this contain
everything that is common between menu or locations. If I go to menu, for instance,
you can see that we have the type that is specific to the menu,
or the location that is the enemiesCount
that are specific to the location. And now if I open this again
in my Scene and we just press Play, so we just see
the whole flow again. Here again, we have
the main menu loaded, we start and now we have
the Beach loaded. We enter the Trigger,
this is raising an Event that another GameObject
is listening to and it takes care to load the forest. And this is the whole scenario
I would say. Yes, one thing that
I wanted to point and I think it's pretty important,
since this is an Open Unity Project we didn't do this alone,
of course the community is helping us a lot
and I want to show in particular an example
of something the community helped us with when it comes
to the Scene loading. You can see that I have those
ScriptableObjects that I created, which represent the different
Scenes the way we used to have it before,
we used to have a Scene name as String. And now what we have
from a new contribution is, we are able to use the ones
that we have in our... Build Settings, you can see
all the ones that are in the Build Settings, you have
the another option here and you can select it directly.
This is super powerful because now we have less risks,
I would say, of making a mistake by misspelling or mistyping
a character or something. And I want to show this in GitHub. If I go here, I want to thank
@CharlExMachina for this amazing contribution. If you look here,
he put screenshot, he explained what he added,
and then I really love like it's always up for discussion,
so here, I want to thank as well <i>@HyagoOliveira</i> for...
he put the comment, he's trying to help review here,
Miley from Unity is also helping. And you can see that we have
this discussion and then in the end everyone is okay with this solution
and we decide that it's good to add in the project and here
you can see that it's merged. This has been merged
and as you can see today in the solution that I showed,
it's super useful and thank you, guys,
for those contributions. And I think, Ciro,
you will soon talk about a huge contribution that we have
from the community, right? [CIRO] Yeah, yeah, yeah. But I also
wanted to mention, Amel, it's great that you actually have shown
the PR directly on GitHub because what I want to say is that
we got this contribution from <i>@CharlExMachina</i>, his real name,
Carlos Eduardo Perez Villanueva. It's great because
it's such a tiny thing and it's basically
a great entry point for whoever looks at this project
and sees this huge thing and maybe is a bit scared
of contributing a whole system, but maybe they know
how to do Editor scripting and that what Carlos did, right
and he just made this very tiny PR, three files changed,
I think one of which is like a metafile, basically,
it's just like one file. And that's in the game now
and he's going to be under the eyes of everybody
who's going to be working with Scenes in this game, so
it's a great contribution, I think even if it's very tiny.
[AMEL] I really think it's great because it helps to avoid mistakes
when it comes to Scene naming etc., it's really good
and again, I really love to see people contributing
and discussing this, it's really so exciting. And yeah, do we have any
questions maybe about the Scene loading system
or Events in general? Is there anyone in the chat
also that has some questions? Let us know. [AMEL] And I guess...
[CIRO] Let's see, let's see, questions about the... I don't think I've seen
some questions. [CIRO] I've seen a few, somebody
is saying, "I'm a bit confused about ScriptableObjects
and I don't really know anyone to ask about,
I'm making this game..." Yeah, we can't help right now
with the third-party game. In any case, don't forget
that if any of this might sound confusing,
you know and obviously this was a very short description
but don't forget you can find this code on GitHub. You can just go to GitHub
and grab it and inspect it. The whole project is available for download, the code is visible on GitHub. It's browse-able
and you can actually use it in your projects as well, right. And we have a thread,
the Scene loading, so, feel free, guys, if you have
any suggestions or any improvements
or this might actually change, maybe the system, we want
to make it, to change a few things in the future because, of course,
the game is not final yet, so feel free if you want to add
any contribution or PRs and maybe discuss this first
in the threads. And also ask questions,
like if you watch this again, or you are watching this
and you're not watching it live, feel free to leave a comment
or a question in the threads and I will be happy to answer this. Actually, one thing
that we wanted to introduce, which we haven't done yet, Amel,
you were taking about this... I want to show the roadmap
for a second. One thing that we want to introduce
is that whenever we pull something in, let's say, for example,
we have here some tasks, right and we have the audio system. Let me think, yeah,
inventory system. Right now we have a link
to the forum thread where people
are discussing the thing. Sometimes when we have a PR,
which ends up making it into the game, what we want
to start doing is to implement here a link to that PR, so that
whoever is looking at the project, can also look at things
that have been done and then directly look
at the contribution because sometimes,
once the code is merged, it's a bit hard to find
but if you see the PR, then you'll have a photograph
of what was done and what was discussed
and you can actually look inside the files and see the code. We want to start doing that. [AMEL] Yeah, I think someone
mentioned this in the threads and we thank them also
for giving ideas on how to organize better.
[CIRO] You're right, it's a community suggestion,
this one as well, you're right. [AMEL] That's great.
[CIRO] So yeah, thanks for that, I'll remember the name,
we'll find it on the forums in a second. I think it's my turn. Yeah, I think it's your turn,
Ciro, I'm really excited to... learn more about...
I don't want to spoil it. [AMEL] Do you want to say it?
[CIRO] Yeah, okay. It's something that is using
ScriptableObjects. [CIRO] Wow, what a surprise.
[AMEL] Ooh. Yeah, I want to start talking
about another contribution, super cool one, which is called
a State Machine. A State Machine is basically, we actually went on
quite a while on this topic it took us almost three weeks
to choose one because we got so many
contributions for State Machine. What is a State Machine?
A State Machine is basically a construct that you use
a lot in games where something, an object,
or a character, or a situation can have different states and can
have only one state at a time. Usually the object is in one state
and then something happens and the object moves
to another state. And this is very typical
of characters when you have, for example, the Idle state,
where the character is not moving and then you press the controls
and the character starts advancing and now they're in
the walking state. You have this machine
that can move between different states that
are connected with each other and they are connected
to what is called, transitions. And State Machines, you have
plenty of ways to make State Machines, you have... You actually have one
State Machine in the Unity Editor, which is at the Animator, right. Mecanim is a State Machine
for animation. But we wanted a State Machine that
works specifically for gameplay. We'd examined a few solutions,
I actually proposed Bolt, right, which now we have in Unity
as an easy way to make a very generic State Machine
but then we decided to go with something that
was actually simpler, in some way and that was community made
and we got a lot of... contributions, we got, I think,
seven PRs that were valid. I was browsing this sea of code
and I was like, "Okay, this looks super cool," there was one
by a user called, <i>@neon-age</i>, he had a super cool Inspector,
another user <i>@kcastagnini</i>, he's created a very interesting
transition table, so all of the State Machines
that I was analyzing, each one of them
had something cool. In the end, I ended up choosing one
from a user called, <i>@DeivSky</i> And I'm going to show you
that one right now. Let me go into Unity. If I go to the Character
Controller Scene and I press Play, you will see how the State Machine
in action, works. This is the character,
I'm moving around. But the thing right now
is not just one script, it's a State Machine
and if I select the character, you will see here to the right,
I have a script called, "State Machine" and right now,
the script is telling me that I'm the state called, "Idle". if I start moving, he moves
between different states, so he's like Jump Ascending
Descending, and then he's going to be walking
and stuff like that. and if you analyze the... way the State Machine works,
basically you have this Component and then if you click here,
you have, again, ScriptableObjects and the ScriptableObjects in here
are both data and behavior and I'm going to show you
how they're organized. Let me go to Miro again actually and show you how
the State Machine is organized. Basically, as I said, you have,
at the start, the GameObject for the character which has
a few Components attached, it has the Character Component,
the CharacterController, which is the one that comes
with Unity, the built-in one which we're using. And then it has
a Component called State Machine, which our user
from the community made. The State Machine,
as I've shown you here in Unity, here, it's connected
to an initial state. This State Machine is connected,
as you can see, to a default state which is a ScriptableObject. And then from here,
these are all ScriptableObjects. All of the structure
of the State Machine and the way the State Machine
moves around between states is all built on ScriptableObjects. For instance,
we have the Idle state, which is a ScriptableObject
connected to a transition, which is called, "StartWalking,"
which is connected to a condition and the condition checks
some stuff, like, in this case it checks if you're moving or not.. If the condition is true, then the transition sends you
to another state, which is the Walking state. And that's basically
the main structure and then from the Walking,
you have another transition, which can move you back
to the Idle state. As you can see,
we have two states and two conditions that
connect them with each other. And these conditions,
they both analyze, sorry, these transitions,
they both analyze one condition. And then for each state,
you can also have something else, which is the Actions. Obviously,
Idle is not doing much. But the Walking state
has two actions. It has one called,
"Calculate the movement vector" and one to "Move
the character" itself. The actions
are executed in a list. First, you calculate
the movement vector and if you see in my diagram
what this is doing is it's going to take
the movement vector from one of the Components. And then the other action
here is going to read that resulting movement vector
and once it has read that vector, it applies it
to the CharacterController. Basically, the idea is that
the State Machine is here and it's made of ScriptableObjects,
so they are kind of like objects that lives separate
from the character. And the character, itself, is here,
it's a GameObject with its own Components and what
these ScriptableObjects do is that they operate
on the Components and the Components
hold unique data. Why is that?
Because obviously, if you are storing the data
in the ScriptableObjects, like for example,
the position of the character, then every character will move... they will be positioned
in the same place, right? If we have three, for example,
townsfolk, they will be in exactly the same spot,
so we can't do that. The position has to be
on the GameObject, itself. For instance, the Character
Component will hold a reference to the input of that frame
where the character is moving or how much health does he have
and stuff like that. This a holder of data. And then the ScriptableObjects
produce the behavior. And that's the solution that<i>
@DeivSky</i> created for us. And now if I go to Unity,
I can show it to you in the context of the Editor,
like what Amel did before. Again, this is the GameObject
you have the CharacterController here, Character (Script),
State Machine (Script) and the State Machine (Script)
has a reference to this ScriptableObjects
called Idle. If I click on Idle, I select
the ScriptableObject and now I see here that I have
the actions and the transitions, remember, I showed you
before the Actions and the transition, sorry,
the transition is this one. Idle does a couple of things
and then it can transition to two different states. It can transition to StartWalking,
if I start moving, or it can transition to BeginJump
if I press the Jump button. If I go to BeginJump,
again, you can see how this transition is organized. BeginJump is a transition
that wants to go to another state called, JumpAscending and it is... it happens as long
as I press the button. If the button is... No, this is BeginJump, sorry,
if I press the button, I go to Ascending and then
so forth, so if I go to Ascending, then I have Descending
which relies on when I stop pressing
the button and so forth. All of these ScriptableObjects
are connecting with each other in a network of them
and you can follow the trail by clicking on them and analyzing
what they're doing and clicking on another one
and analyzing the new one, which conditions is evaluating. And you can basically rewire
and reconnect these things, just like I would do in Miro
by doing this, if I were to take the arrow
and rewire it to this one. You can do exactly the same thing
in the State Machine just by rewiring a Scriptable
Object to another slot. I'm not going to do it right now
because I might break it. But the idea is that
like we're using it for the character,
we could use it for, for example, an NPC. Or we could use it for other uses,
the implementation that <i>@DeivSky</i> made
is pretty generic so it's really easy to make
new types of transitions of conditions and states
and actions. I hope the explanation was clear.
I haven't shown the code. You will find the code, as usual,
inside the project, it's actually in a folder
called, "State Machine". If you want, you can go inside
here and you can analyze how the code was constructed. And you know, if you have questions
just come on the forums and ask <i>@DeivSky</i> directly, he might
answer in the forum thread. The other thing
I want to mention is, I think this is important
to remember. We chose this solution
for the State Machine, but it doesn't mean that
this solution is set in stone. Anyone can go in
and improve this solution and make changes to it. If you look at the solution
and you think like, "You know what,
in this particular spot in the code, he could have made
a different decision," then you can just create a new PR
and suggest that decision and if it makes a lot sense,
we will implement it, why not. [CIRO] Okay?
[CHEMA] Yeah and actually it's the same for every solution that we have, like,
even for the Event, for the loading system,
or even for the wireframing, so until now, we are still
taking into consideration the suggestions of the community. [CIRO] Yeah, yeah, for sure.
[AMEL] Yeah. That was, again,
a great contribution, I really loved it,
took a while to integrate because, again,
there were so many good... alternate solutions and actually,
as I said many times, even though I'm quoting this person
who made the final contribution, we want to recognize also
the people who created the alternate solutions,
so we're going to like put them in the credits of the game
as well because we want to recognize the effort that these people
made in making these PRs. Yeah, totally, I think
sometimes also, it's good that people get inspired
from each other's solutions and somehow try to improve it
by seeing the other... what other people suggested. And I love also how you started
by explaining why you picked up that solution, because,
even in the chat we got questions about
how do you decide which PR to take for the inventory system
or any system in the game. I think it's a good way
to show people it's not like... it's hard
to decide sometimes and I think especially
with State Machine, it is. These are like
big decisions, right? They're very fundamental decisions,
that's why we wanted to take some time to make them
because they will stay with us for a while and we...
sorry, it would be tough to change them because
they're very fundamental. But as we go forward,
the decisions will be like slightly smaller. Yeah, and as you said,
we can always improve and adjust if needed throughout.
[CIRO] For sure, for sure. I was taking a look
at the questions. I don't think we have much stuff,
actually, there's a question from Oded Sharon, he says, "What happens when there are two
PRs for the same system?" Like for example,
it's happening with Inventory and I already answered this,
if you want to, Amel, you want to say it.
[AMEL] Yeah, totally. That's what I mentioned
when you explained that when you started, like
what was your approach to decide which pull request
to take for the State Machine and I think it's the same
for the different systems that we have in the game. So yeah. I think the key point there is, for me and for you,
when you choose a PR, and Chema, the bigger the PR is,
the harder the decision is, right so what we're always suggesting
is please make small PRs even though they might seem simple
like somebody actually was... another question in the chat was,
the inventory system is too simple. I'm like nothing is too simple
because we can expand it later, like there's no functionality
that is set in stone by just one PR,
we will keep improving it, but if you make it simple
at the beginning, then for me and for you
it's easier to choose between two alternate ones. To answer directly that question,
the key point is we will choose the one that we think is best. If the PRs are huge, then
it will take us longer to choose. Obviously explaining PRs is also
a big part of the factor, I think. If you just like drop the code
into the PR, then we're like, "Okay, now I need
to look at the code." But if you explain it very well
with examples, and some people made even like a video,
that was insane. That was super cool.
[AMEL] Yeah. [CHEMA] So super nice, yeah. Do we have other questions
while I prepare the next steps? I don't think that
we have another question. I don't think for this part... Yeah, what are we going
to talk about now? We've seen the Event
and loading the State Machine, and the UIs, so...
[CIRO] We saw the wireframing on the UI from you. I think there's not much else to
talk about in terms of new stuff. I also think we can start wrapping
up unless we have some more questions in the chat. I actually just saw one
from the same person from before, they ask,
"Can you merge PRs faster, so that the PRs
don't get big over time?" We can, we will do
what we can, like we... We're going as fast as we can. And as you said, Ciro,
the smaller the PR is, the easier for us to integrate that
with, I would say, less risk. It takes time to analyze it
and test it and make sure that doesn't break other parts. Yeah, also we were busy
on these past two weeks with the whole story situation and following the creation
of the Assets, the 3D Assets,
which I've shown before. I want to show them again. Where is it? Yeah?
[CHEMA] Oh! [CHEMA] Yeah, I think after this,
we should talk about the title because if we talk about the story,
we know that the story is now [CIRO] Finalized.
[CHEMA] not set in stone but finalized a bit,
so we changed it a bit and now we will start
the title choosing process. [CIRO] Yeah, actually
we have started it, right so... [AMEL] That's my favorite,
I would say. [AMEL] My favorite...
[CHEMA] So please vote, vote, vote. [CIRO] Should I show
the results of the forum? [CHEMA] I think not because you
might influence people. I don't know. [AMEL] I mean I think people
will see anyway, like the top... go to the next step, right
so maybe we could, I don't know. We'll let you decide, Ciro,
you have a yes and a no, we have faith in you,
the community. [CIRO] No, I think it's fun to see the responses. Why not.
[AMEL] Yeah, I think so. Like we are transparent
I would say, like we show them what happens.
[CIRO] Also like we're moving to the next stage, right,
with the voting. Let me show you the screen. Basically,
what we're referring to is the fact that
we're choosing the title, right, and we wanted to make this
a community decision. In this thread here,
which is called, "Choose the game title:
Voting Now!!" We have opened a survey,
which is to choose the game title and what we've done is,
we've collected all of the suggestions from the thread
through these past three weeks, put them in the form
and then people have been voting through this link
for the last three or four days and we actually have,
so this is the form, and we actually have 79 responses. As you can see,
the form was asking would you prefer a long
or short title and then which one would you prefer
as the title of the game? And you could express
as many preferences as you want. And now we're going
to compact these into a smaller list
and we're going to vote for the final round.
Just so you know, we want to see some responses. Let's see the ones that
have been voted the most. The first one is "Chop Chop,"
which has 18 votes. Then we have "Gastronaut,"
which has 15 votes. And I think the third one for now
is "Gourmet Quest" with 14. And then we have
a couple of, no, we have "A Taste for Adventure" with 12 and "A Pig's Tale",
"Swine and Dine" and yeah, with 11
and then "Chef's Fable." Basically, we have
a few candidates, let's say. Now the, how do you say? The first ones here
in this classification, we will put them into a new survey
and then you will be able to vote and then we will choose
the first one. It's like rounds of voting. Now we're doing the first round and soon after this live stream,
I will put a new form here to vote. Actually, should I close
this one now? Shall I close the voting? [CHEMA] No, we should let
people from today just participate to it.
[AMEL] Yeah, maybe... [CIRO] If you want to vote
right now just go to the forums, click on the thread called, "Choose the game title",
vote for the first round and then in a couple
or maybe in one hour, I will put the new one on
and you will be able to vote for the actual title
and that's the one that is going to be
the title of this game. Open Projects Action Adventure
will become that title. [AMEL] Really excited to see...
[CIRO] Fingers crossed, it's a good title because
otherwise, I quit. I'll leave Amel and Chema
on their own and I quit. No, I believe in the community,
they will make the good choice. And I think it's good now
during the stream, more people are actually watching
and thank you all, by the way, for joining and watching. People who didn't see the thread
that we actually opened the vote as Ciro said, we are leaving this
for at least one hour for people who didn't see it yet
to do it now and vote before we go to the last round.
[CIRO] Yeah. You can also, I think
find the link in the chat. Yeah, Carol just posted that so
you can find the link on the chat. You can participate in it
directly from there. [AMEL] Great.
[CIRO] Nice. We're getting towards
the end, right? We have shown the UI wireframing
thanks to Chema. We have shown an Event system
based on ScriptableObjects thanks to Amel. I've shown
the State Machine contributed by our community.
[AMEL] Thanks to Ciro. [CIRO] These were like
the main pieces of the advances that
we've done, we have seen the 3D art, which you're seeing
on screen again. And actually, I wanted to mention
something about the 3D art. Now that we have a few
3D model Scene, you can actually create yours. I was holding, asked on the forums there's a thread called,
"Regarding art, Assets and music" and I asked people to wait
because we wanted to define the art style a little bit. We wanted to define
the specifications for the characters. And some people,
they were pretty angry they were like, "I want
to make something now." And I'm sorry for that. We had to hold you
for a little while. There's a user called <i>
@Andre</i> he was very annoyed. Andre, if you're listening,
forgive me, forgive us. But you can make something now. If you want to come back
and contribute to this project, we will be super happy. Sorry for the wait.
You will find the Assets in a branch on the repo
which is called, Art Assets. Download those Assets,
take a look at how they're made and make more, like
anything you have on your mind. Cool?
[CHEMA] Yeah. And with this, I think
we can move to the final part where we show the next steps. [CHEMA] Yes.
[AMEL] Yes. [CIRO] So we have... go back to the roadmap...
[AMEL] Are we revealing new cards? [CIRO] Yes.
[CHEMA] Ah, nice. [AMEL] Yes.
[CIRO] Back to the roadmap, the roadmap as usual
is the place where you can see what's happening, what's coming
and actually somebody, I forgot about this question,
I saw this question before, somebody was asking about
the game design of the game, the game design is here. It's also on the roadmap,
so you'll find it in here, the story, you can consult
the story here, description of the chracters. And then obviously, here
you have a bunch of tasks, which we're working on and
the ones with the little blue icon is the community's working on them. We have a bunch of PRs open
for all of these things. We have some tasks
which we are reserving to ourselves the ones with the black Unity icon. As you can see, it says, Team. These ones are reserved to us,
again, like the main character some things we want to
keep them for ourselves. And then there's gray cards,
which are the ones that nobody has volunteered to make yet. So yeah, I want to add
the few new tasks and I want to do that by going to the... Open Projects... I would never find it,
no, this is the public one. [CHEMA] Come on.
[LAUGHS] One second, one second. [AMEL] Sounds like suspense,
I would say, to make you feel the wait... We are there, I'm getting there.
[CIRO] Yeah, yeah, yeah. [CIRO] This is the private section
of the roadmap, right, so you have the public one
which looks like this and the private one
is basically the same. But here I have another
deck of cards. And I wanted to pull in a few new items, basically and actually want to comment them
as I put them in the roadmap. One thing we wanted
to unlock and we need is imagining some things
which are not included in the concept art we made. For example,
since the story changed, now we have a town,
and we have a festival of cooking. How does that look like?
I don't know. And the concept artist
we hired before hasn't made concepts,
so we need to imagine this new thing that
happens in the game, these new locations.
One of the tasks that I would love people's help is concept art of the town
and the festival. And associated with this
concept art of the cooking utensils because now the cooking aspect
is so big in the game that we need some kind
of visualization of these cooking utensils. I don't expect people to make... What we're saying,
we're not asking you to make super complex concept art anything is fine,
even like line drawings. Super okay and I'm actually
going to want to make some of them, myself,
especially in the cooking utensils, so I want to make
an Italian moka pot. which doesn't need much
concept art, to be fair. But yeah, the idea here is,
and I can actually link some stuff. It's to produce something
like these, even like simpler but this is the concept art
by this artist, Stephanie Carey. And this is already like
some kind of quality, but if you see this technical
drawing that's super simple. I mean this is good quality,
don't get me wrong. But this is the stuff that
we're looking for. Don't be scared
if you're not super good at drawing, you can still jump in
and just make something. And associated with this card,
so we also have some new forum threads,
which are going to be open soon where you can drop your ideas. Concept art goes
into the 2D, right. I'll put it in, or do we put it
in Design? [CIRO] 2D, Design?
[CHEMA] I think 2D. [CIRO] 2D, Amel? 50, 50.
[CHEMA] 3D. [AMEL] Let's split the card in two.
[CIRO] Oh, come on. [AMEL] Yeah, let's put it in 2D,
maybe, okay, it's fine. [CIRO] 2D, okay. I'll put
these ones in 2D. Then we also need, again,
because the story changed, some help with naming
characters and places. So for instance, the... legendary chef of the town,
I call it, "Fry King," but it's not necessarily
called like that. It's not fixed in stone.
So what is this character called? Up to you. Does the Bard
Hare have a name? Up to you, and then
the new characters, the townfolk, the ones
that now populate this town, do they have a name?
I think so. I'm also thinking
of individual names for the individual characters. And I reserved one for myself,
don't try to suggest this but one of them has to be called,
"Gourmando". [LAUGHS] My decision. But please suggest more. Chema, can I put
this one in Design? [CHEMA] Yeah, of course.
[CIRO] Okay, I put this one in Design & Narrative. And then we have a few tasks for graphic artists
and technical artists. We have effects in the game
and I think many of these effects should be shaders. We have, for example,
very simple one, transparency support
for the main shader, we need some transparency
for the lantern of the character, of the pig
because the lantern will incorporate the phoenix chick,
so we need some transparency on the shader.
So that's one thing. And I'm going to put that into
Effects & Particles, maybe. [AMEL] Yeah.
[CIRO] Or maybe not, sorry, 3D & Shading. And then we need
also emission support for the shader, so for instance,
the same phoenix chick has to glow or the eyes of the critters
have to glow, so we also need this one. I'm using the card,
I'll put it into... 3D & Shading as well, I guess,
I don't know, I'll sort them later. We need a water shader because the island
is surrounded by water, so we need some kind
of shader for the water and I'm imagining a shader
that has like a water movement, like this and maybe the water
moves up and down, it doesn't need to be
too complicated. But that's another task
that we need to tackle and I'll put this
into Shading as well. I'll put it in here. [CHEMA] Actually someone asked
if the threads for these cards will be open today? [CIRO] Yeah, yeah, yeah,
some of them actually link to the same, for example,
for the transparency support to the thread links
to the same Toon Shader thread that's already in progress
because I didn't think it was worth to split
the conversation. But for others, we will make
new threads which are actually just hidden for now,
so they've already been created. And then... more effects, we need
one effect which is Burn Disappear because
the phoenix chick is able to burn plants and canes and
bamboo canes and stuff like that. The idea is to have an effect
to which you have an object and then when the effect kicks in, the object disintegrates
and burns away. And that can be done in a shader. I have a vague idea
of how to make it but I think it would be nice
to see also contributions on this. I'll put this in
Effects & Particles, yes. And another shader which allows
us to have the classic-like sway effect with the wind
for plants and leaves and I'll put this one also
in Effects & Particles. And that's it, this is another card
that was left there. So, we have a bunch of new tasks. We have some tasks
which are still open, we're going to go over some PRs
soon like the inventory system is pretty much good to go. There's a couple of very good
audio systems as well. You've seen them? And then I will need to take a look
at this PRs that are pretty old and sorry for that, but sometimes, some things we don't want
to integrate them before we have other things
so that's like an order... and actually that's why,
if you see these cards, they're under the No Rush category. Cards are ordered by priority. When you see that it has no rush
it means that there is no rush. Yeah, that's it. We have releases decks,
so we have like the one where we unveiled the project,
this was last live stream, this is this live stream,
what we have today. You can track what we've done
and soon, we're going to create a new one for the next live stream,
which is in two weeks. Yes, and actually
talking about artists, technical artists' tasks,
we have a question if we are using URP and GRP
and we want to remind that we're using URP
in this project. [CIRO] Yup. Also I think another question is,
is it mandatory to use Shader Graph and I think that, yeah. [CIRO] Yes, because I'm
the dictator on this... no. [LAUGHS) I mean... I think... [CIRO] Amel, sorry. I was going to say that
the fact that we are using URP, which is an SRP, it allows us
to use Shader Graph. So why not, I'm like,
we could use Shader Graph and I really think it's
powerful and it's easy to understand for everyone. So yeah, and you can still
inject some HLSL code if you want to do that
inside Shader Graph, sorry. Which you're doing already,
right, in the Toon Shader. But actually, if I'm reading
into this question, I think what they're
to saying is they love to write shaders with code. If you want to write, for example,
the water shader, right, if you want to write water shader
with code, please do. The key point of Shader Graph
was that now that we have the Toon Shader made
with Shader Graph, we can create this alternate effects with Shader Graphs, so all of
the effects that I've shown before that are here like burn
or the wind shader, we can now add them on top
of the original toon shading just because it's shader graph
so that's a really nice opportunity but if somebody
is super used to code and you want to
go ahead, I mean try. Yeah. [CIRO] Other questions. Can you cook
with the phoenix chick? That's actually one
of the ideas, right? Yeah, the phoenix
would be used as fire to burn something, so yeah,
we will be using the phoenix as something to use to cook. I think in the original story,
the phoenix chick was the thing that allowed you to create
like the final recipe and maybe that's still
going to be the case. Why not? But it will fun, actually,
to use it for every cooking... activity. "It will just rise from the ashes,"
yeah, of course. Okay. I think we don't have
any other questions for now. [CIRO] Not for now, no. So we're... getting towards the end, yeah,
somebody was asking also like, what's the tool that
we're using for the roadmap? It's called, Codecks. It's also a free tool and it's like
a project management tool and it gives you this super cool
interface with decks and cards you have like... actually
you also have like a milestone view,
which you will never see because it's not in the public one
but I have it here, which shows me all the live streams
that we're going to do. And you can assign cards
to those milestones, you can have a Hand,
which means like I'm holding these cards in my hand which means that
I'm keeping an eye on them. And as you can see, it reminds me
of the last milestone, the closest milestone,
which is today, which is the live stream
that we're doing right now. [AMEL] Yeah. [CIRO] And then it has a public
face so you can make this roadmaps, sorry, these projects public
and we're using it to show the roadmap to everyone. This is what you can use
to take a look at the tasks on the project. Pretty cool. [CHEMA] Yeah, awesome. Questions, questions. Will the pig be able to cook pork? [LAUGHS] No, that's forbidden.
[LAUGHS] He's vegetarian. [LAUGHS]
[AMEL] Yes! [LAUGHS] We've got a question,
are there small tiny tasks we can tackle?
Probably other than the tasks that we revealed in the Codex,
now in the roadmap, we can still adjust
maybe the previous ones or like reviewing
the current pull request or proposing small suggestions. Could be as well like
a small task to contribute? [CIRO] Totally. You showed one with the PR
from <i>@CharlExMachina</i>. The one where he customized
the inspector of the Scene, right or the GameScene
ScriptableObject. There was this one that
I wanted to show actually, let me show you this very quickly. It's a PR from a user called,<i>
@RunninIVlan</i>, I guess... and they basically saw
a mistake in the code, which was like a pretty,
pretty good suggestion. Change the file
and this is the change. They just started like
a bunch of Event keywords to a bunch of Unity Action
variables, that's it. As you can see, like
there's really like all the range of scope for changes,
as long as they're useful. Please don't just like add spaces
or new lines to the files. Then we will reject them. But this was like a good suggestion
and it totally took them maybe 15 minutes to make, right? Pretty good contribution
from <i>@RunningIVlan</i>. That looks great. We have a question,
another question, "Can I help as
an environmental artist?" And I think we are, actually,
getting more and more active, I would say, in the Greyboxing
thread and we also wanted to work on some concept art
for the different environments, including the beach,
the forest, etc. So, totally you can help on these, and feel free to go
to the Level Design and Greyboxing threads
in the Unity forum. There's actually,
I want to show you the contribution from
the user <i>@ItsLeviosa</i>. [CHEMA] Yeah.
[AMEL] Yeah. [CIRO] And it's this one,
so they made this video to show the Whiteboxing of a level. They started from
the Miro map, the diagram and then they explain
the reasoning behind it, right. And then they did the Whiteboxing
basically from the beginning when the character leaves the boat that they used to get
to the island. And then they recreated,
like they imagined the beginning of the game
and how the beach is laid out. [CHEMA] Can you... actually, Ciro,
can you remove the music. I think that they are hearing it.
[CIRO] Yeah, sorry. [CIRO] They put some very...
how to say? [CIRO] Trolling music.
[CHEMA] Cool music. [CIRO] That's quite fun. But you can see how they visualized
the beach environment and I think it's super cool,
it's like super rough but it gives you an idea
of the scale that's something very useful for me as well to
imagine the scale of the elements. When I was making
the Character Controller, I was like how high
does the character have to jump? I don't know, you know,
and now I can have a better understanding,
thanks to the Whiteboxing that this user has made,<i>
@ItsLeviosa.</i> Super active user, by the way,
so thank you for the tons of contributions
in the story thread. It's super cool to see people
coming back to the forums over and over again
through the weeks. As you can see, they use
placeholders for characters, placeholder text, and then
they imagine this ramp which goes up to the town. It's quite an epic start
of the game. And then the super cool thing
is that they also shot the video from the other point of view,
so they go back down. That also gives you an overview
of the island from afar, I think it's super cool,
super cool contribution, thanks. [AMEL] I really like that as well,
it's really super nice to see things put together
and that's something we start in the Greyboxing
thread as well. So yeah, this is really...
[CIRO] I see some sketches as well, super cool. Okay, I need to catch up with this
thread. This happens a lot. Maybe an hour ago
or something, okay, cool. [CHEMA] When we just figured out
that we had a live. [CIRO] Yes, yes. Another question is whether
we can use animation rigging in the project?
I think we could, yes. We haven't introduced
it yet in the... we haven't introduced
the package in the project because I want to remind that please don't add
new packages, we will do it. But we will, I think we will. I was reading the comment
about the music of the video. Yes it's "Shooting Stars"
from Bag Raiders, classic meme song. Yeah. I love memes. Yeah, Brian says I can sketch
this will be easy for me. Anything really, when it comes
to visualizing environments and concept art, just don't think
that we are expecting some kind of grandiose concept with colors and stuff,
it can be just a sketch. Okay, cool. I think we're getting
towards the end. Somebody's actually asking,
I think they joined just now, "What are we doing here?"
[LAUGHS] "Are we reviewing something
or making a game?" Yes, we are, just as a small recap,
we are looking at something called, "The Open Projects",
it's an initiative by Unity where Unity makes a game together
with the community and we're working
on the first project. Which looks like this,
this is the art and this is the... concept art for the game. And we don't have a title
for this game yet, as we said,
but we're working on it. [CHEMA] Come to the forums
and vote for the title, you have one hour
until the second round. [CIRO] Okay, so in one hour
I close the form, okay. [LAUGHS] I think also
to frame the time, right, we started a month ago. Did we? It was
the 30th of September, so the 30th of September, we
unveiled the project and initiative people flooded in
and then two weeks ago, we did the first live stream. And then another
two weeks, so we're here. Still a long way to go, right. [AMEL & CHEMA] Yeah.
[CIRO] What's the estimated date. [CHEMA] Tomorow?
[CIRO] No chance. With the Whiteboxing. [CIRO] What's the estimated date
when we'll finish this project? Actually there's a question
right now in the chat. Probably by the end
of March, maybe. [CIRO] Yeah, that's more
or less what we hope. I think it's deceiving,
some people would say that looks like a very
long time from now, but that's what it takes to make,
I won't say, full games but a relatively chunky experience like the one we're trying to create.
We want to produce something which will last like maybe,
15, 20 minutes of gameplay. And we want to make it look nice
and play nice and sound nice as well. We're working with
the art sound designer as well, to bring some super nice music. So it takes time. [AMEL] Animations as well too.
[CIRO] Animation, there's so many parts to it and then
the integration of it all it's going to be something. It's going to take some time
we're still at the beginning of this journey and that's why
this show is called, Open Projects: The Journey, right. Any final words,
any final questions? I think I saw a question about... ProBuilder and asking
maybe about the video that we showed from <i>@ItsLeviosa</i>
if it was made using ProBuilder? I guess so, he was using ProBuilder
I think in the post, he or she mentioned that so, yeah. You can use ProBuilder
and Polybrush if you want to try some Greyboxing,
those are the tools to start with. [CIRO] Looks like ProBuilder to me. [AMEL] Yes, it is Probuilder. [CIRO] I think so.
ProBuilder is in the project, so you're totally allowed
to use it. [AMEL] We have the package included
so feel free to use it. [CIRO] Just a small note,
why we're using some packages instead of other packages. Sorry, I mean what packages
are we going to use? I want to remind everyone
that for this project, we're staying on 2019.4 LTS, so it's the long-term
support version of Unity, which means that it's super solid
and we can focus on making the game
and we don't have to deal with any beta functionality,
which is cool, but we don't need it right now, so
we're going to restrict ourselves to just the packages that
are compatible with 19.4. Totally. Any last questions? I think we don't have some
but let's remind them that if they have any questions,
they can do it on the forums. There are many threads,
they can open a new thread if they have a new proposition
and they can see everything that we have
in the roadmap on Codecks. [CIRO] Yup.
[AMEL] Great. So just to show... the, oh, this is the video
from <i>@ItsLeviosa</i> but to show the three locations of the project, I lost it.
Oh, yes, it's here, sorry. The three locations of the project
are the repository where the project lives, the roadmap, which is on Codecks and the forum, which is here. this is the roadmap
to see the progress and to see the tasks
that you can work on and then the forum
is to discuss and talk with the other users and
contributors about the different... tasks and you can also
propose new things, of course. I think we're pretty much
at the end of today's live stream. What we're going to do now
is we're going to stop the microphones and the cameras
but we're going to hang out in the chat on YouTube
for another maybe 10 minutes. Feel free to chat with us. If there's no final questions. [CHEMA] Going once, going twice.
[CIRO] There's one question from Rick McMichael, he says,
well, it's not really a question, is, "We love to see a more
dynamic voting system for new features of different
categories, so Unity users can vote on them and those that get more votes
to be implemented could be a good Dev guide." Yes. The thing is, this is, you can argue about this, but here we're also acting
a bit as referees, in some way. We need to give
this project a direction. It's a community project, for sure,
but we need to make sure that we also get to the end
and sometimes, if you leave the votes
to too many people, they will come up with many ideas. Because everybody has
a different idea, right, and then integrating all these ideas
can prove very challenging. We're trying to restrict
and, as I said before, the length of game projects
is deceiving. You think you'll take three months
and it takes you six months. You think it's going to take you
a year and it takes you four years. And some indie developers
made very small games in six years or more. Here we want to really, really
keep it as small as possible. That's why we don't call it
a full game, we call it a "vertical slice" and that's why...
[CHEMA] Show us how you say it, [CHEMA] Ciro, "vertical slice".
[CIRO] Vertical slice. [LAUGHS] [CIRO] And that's why
we don't want to just open up for voting on any feature. But we have a set of features
that we identified and then we accept suggestions
on how to make those features. But of course, you can always
suggest a new effect or a new area in the game
or something like that but we're not going to accept
suggestions like, "Let's put machine learning
in the game," or, "Let's now make the game with
physics" or something like that. There're some things
which we cannot accept because otherwise,
the project would just derail and become like a huge thing. Another question
which was interesting by Eli Coliniati, she asks,
"Would you encourage side initiatives to help people
create something, even if it's not on the main cards
or would it distract you, for example, music,
can people write music even if it's not in the roadmap?" Yeah, totally, the only thing
with music and art, as I said before is,
we want to give it a direction. We're working with some musician
to come up with some theme song and then what we want to do is,
we want to open up the theme song to the community,
sorry, not only the theme song but a couple of songs
that she's going to write, open it to the community
and people can make like remixing or remixes
or a battle theme or variations on it
and new themes as well and then we can put them
all in the game. Again, it's like giving a direction
and then letting people join on that train, if you want. Yeah, like we did for the 3D. Exactly, like we did
for the 3D art. It's not like we don't want
people to make art, it's just that we don't want
to start by crowd sourcing. We want to give a direction
and then crowd source. And then we think that
that's going to give a bit more of a cohesive style
to the visual style and the music,
audio style, sound style, auditory style...
[CHEMA] The same style. Genre maybe, yeah, I don't know. "Will URP be used instead
of the default RP?," yes, we are using URP. Can we suggest a direction
in the forums? Of course you can suggest,
I'm not saying that you can't. It's just like some macro decisions
are already set in stone. [CHEMA] Yup.
[CIRO] And never forget that this project is open source,
so it means that all the Assets are available to you to use,
to take, to manipulate, so this is our repo, right
and then you can spin off like your version, if you wanted. I mean I think if I was you,
I would spin off the version like once we're finished,
not now because otherwise, you have to construct
the game yourself. But in five, six months,
we're going to have something very nice, I think and then
you can put your spin on it. If you want to add physics, if you
want to add machine learning, it's yours to take and use. Yeah, exactly. I love this song. Can I put
this song a bit louder? [LAUGHS] Ciro always forgets that
we're not hearing them. [LAUGHS] Yeah but the viewers can hear them. Yeah. [LAUGHS] I think that we can now
turn off our cameras and our microphones
and just chill in the chat for 10, 15 minutes. Yes and we're going to keep
replying to your questions, so please feel free
to keep typing questions, we're going to be there,
we're just not going to be there on voice, or on camera. [CHEMA] Yeah.
[CIRO] Cool and we'll see you in another two weeks.
We're going to be here with some more progress,
some more art, some more codes,
some more PRs, some more issues,
GitHub issues, not like... [LAUGHS] And thank you so much
for following this second episode. [CIRO] See you in two weeks.
[CHEMA] Thanks, everyone. Bye. Thanks, everyone,
thanks for joining, bye. [CIRO] Bye-bye.
[CHEMA] Bye. ♪ [MUSIC] ♪ ♪ [MUSIC] ♪