Sunday 7 May 2023

Home sweet home.

The last four weeks did not go how I wanted. One simple thought of using https://www.mixamo.com/ as a source of test animations started a chain of decisions that lead to my downfall or maybe something greater in the long run (Spoiler alert: I'm still not able to use the animation from the database). It got even worse, I did not even spend any time o the animation which did not move the gameplay a lot.

So probably you are curious about what I was working on this time. The answer is pretty simple:


I created a lot of content which led me to tinker around with Twinsen House: 



This like always did not when smoothly at first. The whole idea of using https://www.mixamo.com/ for animations lead me to a bigger change in the way how I interact with content. Small impact on the content creation itself but more than two weeks of iterating on code. In the longer perspective best decision ever.

After that, I got annoyed by the long loading times in the tool. So I looked into it, improved it, and broke a lot of my content. The majority of the locations look like that:


Missing materials on all the objects. Which is once again fine as I finally cleaned up some code that I wanted to touch long ago. With improvement in other content tools recreating this data is only a question of time. 

There is also this weekend which I could spend on the animation system but decided that I really need to do something about my icon generation. A small thing where while icons generating editor sometimes freezes. Already been resolved, still not part of the main codebase but getting there.  

Generally against all the odds pretty nice few weeks. But the goodies do not end here. 

2.21

This week we got from 2.21:

Which is an interesting dive into the process of creating the original game. I was specifically entertained by the large nose Quetches :) they look funny. I also would love the idea of giants being used in further games. This is a pretty cool idea even if the technical part of it would be a nightmare.  

For this who missed it, there is also a previous one: 

I mentioned this because while doing content I finally had time to think a little bit: 

Who Twinsen really is?

This a simple question, which bothered me a lot. Think about it, what do we really know about Twinsen? 
  • He is a guy who was put in prison for having weird dreams. 
  • He has a girlfriend Zoe.
  • In the second game, we learned that they have a kid. 
  • Their house in the first game has a freaking secret cave full of ancient stuff. 
  • In his wardrobe, he has a magical robe.
These past weeks allow me to explore this topic a little bit more and I think that I finally have an answer: 

For now, I will stop here as I still want you to have fun exploring the universe of Tribute. Leaving some mystery. 

But to make it more interesting I would like to hear your theories: 

Who do you think Twinsen really is?








Sunday 9 April 2023

Easter update

As a small easter gift let's do a small review of the project. I know that some of you were interested in the story, others more in the status of the game so I will try to cover all of them.

Tribute

The idea behind the whole project was evolving over time. When I started I wanted just to recreate game 1-1 with a small twist. Full 3D. Simple, straightforward, and not something that I was really happy about. My decision to modernize the models did not help for long. While I was playing the Uncharted game long after its release it strokes me: the game I was making was not something that I wanted to do, LBA deserved more.

I scratched everything and started again, unrestrained by old design and using the original game as a guide to tell the same story with the same character in the same universe just everything more mature and presented in the way that I believed it deserves. This took a long time to figure out and it still evolves over time. Now that the 2.21 team makes an official remake I will try to share some insight into my vision for the game (story spoiler alert).  

When I played the original game as a kid I saw it as a fairy tale and never put too much thought into the details of the world. Years of development made me lead to the conclusion that there is a lot more to it than just the tale of a guy who tries to save his fiance and as a result of this saves the world. There is a lot of darkness in this universe. There is Prison from which people do not return back, did you ever ask why nobody approaches as if they are afraid of death. Everywhere there is fear, military, and surveillance. Yet the majority of people just live their life like nothing happening. When you realize this is somehow terrifying.

The thing is that I never wanted to change this part of the game. I love it and wanted to build on it. That is why the tribute would not start inside the prison. It would start with a dream. Where you can explore the ancient temple of the Sendel. This place is where you will learn controls and at the same time explore a back story that before was written on the panels when starting the game. You would walk thru this time capsule and find your way to the place where you will experience a vision of the end of the world.

When you woke up you are at home in your own bed. Zoe looks at you worried. You are one of the people who live a normal life, if not for this reoccurring dream. Zoe is dressed to work as the ferry broke, again. She is a mechanic. While leaving Zoe tells you that you should maybe get some pills for better sleep and reminds you to not forget about today's dinner. She is preparing something special. You later learn that this is your anniversary and you have more plans than just dinner. You plan to propose to her on this occasion you just need to pick up an engagement ring.

This small setup adds so much to the original game. You first have a proper introduction to the dream. You can get used to controls, learn the story of the universe feel that you are the part of dreams we hear about so much. Then we have time to learn about Citadel Island before landing in Citadel Prison. Finally, you can better understand the connection between Twinsen and Zoe. 

There is even more to it. The broken ferry blocks you from leaving Citadel Island before finishing the prolog, and why in the 2nd game we see a newer model of the boat. Zoe being a mechanic explains her fixing the car in the 2nd game and adds extra depth to her character. Finally, dinner explains why when we meet her after escaping the prison she is nicely dressed.

This is just a small portion of the changes I planned to do. I'm able to talk for hours about all the details of different characters, places, and how I planned to do but because of the limited scope of the project, you will ever only see the Citadel Island part of it. But I try to create it in a way that the deeper you will look into it the more different aspects of the game will be revealed.

The Game 

"yeah, no point rushing it, especially after you've been working on it for 50 years already"

Friend 

There is a little bit of truth in the above sentence. It really feels like I doing it forever. The fact that I do this in my spare time, alone and with custom tech does not really helps with the velocity of the production. 

You probably thinking why then I do not use some existing engines: Unity, Unreal, or Godot? I openly acknowledge that having full creative control over tech direction, getting lost, making wrong choices, and correcting them is part of the fun and the experience for me. After all of these years, I do not think that this is a really bad thing. 

And don't understand me wrong I believe that everyone should make choices for themselves. If you think that you want to use ready tech do it, if not do it too. In the end, it is up to you. My choice is to continue with the direction that I choose even if some people think that what I do is stupid. 

The reality is that in some way, my decision may be stupid maybe even impossible. But who cares, while I do what I do I learn new skills, polish old ones, and grow as a developer and in the fact a person. This is very important because, without all of that, my vision of the project would not be what I present to you. Great things just need time.

And oh boy this project consumes a lot of time and effort. Still, I think that this is justified by looking at its scope. To give you some overview of how big it is, I'm right now maintaining ~ 450 000 lines of code. There is on top of that everything that is needed for the game like 3D models, textures, and animations. 

I still have a few things that do not really work how they should, lack some functionality or just do not exist. Still, to move the game forward I need to finish my current work on the animation system. I did it because I decided to create a new model of Twinsen with a completely new set of animations and more freedom of control. This required an update to the existing animation system.

I of course could not do it the simple way and decided to go into the unknown and explore some unique ways of creating data. The reality is that I was not even sure if this method would really work but well,  4 months later I'm pretty optimistic. I working right now on an editor prototype and things coming together pretty well. 

These 4 months were of course not exclusive to the animation system. I was doing a lot of changes all over the place. I will skip some boring details but what I will mention is work on the assets. And yes after this long wall of text, there will be some pictures.   

From now on we have Spheros in making. Did you expect that?  


There is also a further iteration on Rabbibunies that I decided to move a little bit more into the old cartoonish feel. Mostly done tweaking to the nose and eyes. I kind of like it more now compared to the old one.


Finally still tweaking a new Twinsen model. Still not ready but well if it ever will be. 

There is also a new full-body version of the statues. I will be using them all around the dream sequence so having a little bit more variation is always good.  


Finally, if we speak about dream sequence I finally know how to start it in the way it makes sense. Bellow some early sneak peek into the new location where our story will begin. 



Feel free to comment here or on Discord channel and the last thing that is left is wishing you a happy easter. 

Thursday 31 March 2022

Development - March 2022

Before we noticed another month slipped thru our fingers. I would love to say that there was a lot of progression in the project, but I would lie. This was a month focused on technology, workflows, and boring improvements. Because of that, this post will be a little bit more technical so continue reading it on your own responsibility...

Development Setup

Because Coffemonsters is a really small group, for a long time our projects were developed in a really simple setup. We had a virtual server running:
* gitea (https://gitea.io/) to store code,
* perforce (https://www.perforce.com/products/helix-core) to store data
* mediawiki (https://www.mediawiki.org/) for some guides and documentation. 

It somehow felt that we did not need more. But recently thanks to my friend we got an infrastructure upgrade. He crafted for us a really nice development environment with a dedicated server running dockers (https://www.docker.com/), our own gitlab (https://gitlab.org), perforce, wiki, CI (Continuous Integration) builders, and a lot more. 

This was not a step that was needed but it was planned for a very long time. Thanks to finally doing it we can slowly start building CI  and an automated build system which will bring us a step closer to opening access to game builds.

All of that sounds great but it has some price, we are still in the middle of a transition to this new work environment. Most of the stuff just worked from day one, some others not so much. One of the things that went rather terrible was fact that we neglected some automatization scripts. This mistake resulted in significant maintenance work. The first part, "project generations" is mostly done and only took three weeks. This was the worst part because it was a blocking one. Now we moved to the second phase which we can do in parallel to our normal development: simplifying the environment setup. The goal is to pull a branch, run one script and be ready to develop the game. When we finish with it we will finally be able to start CI and create an automated build system. Sadly getting to this point will take some time and a lot of effort.

Tools improvements

Switching to new infrastructure was not the only thing that was done. We still working on improving the game which leads us back to improvements in some tech. Who would expect that doing simple ladder-climbing could lead to so many interesting problems?

One of them that fascinates me personally, is not a super technical one but related to tool UI (I still have a hard time acknowledging it). Everything started with switching to document-based tooling in the engine. The idea is simple: You want to edit a file just open it in the new tab (just like a browser). 
 

We never regretted going into this direction but there was one flaw with it. Some objects can contain embedded data. A good example of it can be a visual script that can be unique for every instance of the object. In the past, in an attempt of editing, we would just open a new detached window. It would be a blocking one so you could not change anything on the scene while you modify the script. 

With the document-based tools UI, we have a problem. The visual script doesn't have a file because it depends on data from the level. This makes the opening of a new tab for it weird and confusing. We would lose this way visual difference between embedded data and the one with the source.

This bother us for a long time but we did not really have a nice idea of how to solve it ... till recently.

Our solution to the problem would be building relations inside the tabs that will look like this:

Selected normal tool:

Selected tool owning embedded data (f.ex. Level):

Selected Tool editing embedded data (f.ex. Visual Script):

Look when there are multiple nesting:



As you can see this is still a work in progress but it looks promising. Thanks to this very generic approach we will be able to unify internal workflows and if everything goes right, completely forgot that the problem existed in the first place.

The Game

We know that all of you love LBA. Guess what? We too. That is why we would really want to bring to you our tribute as soon as possible. Sadly making the project takes place whenever we have time and energy to do it. You can probably imagine how hard is to balance normal life and work on this freaking awesome but ambitious project.

This limited amount of time forces us to prioritize one stuff over the others. This was the case this month, we got a great opportunity to switch infrastructure which would be hard to say no to. We tackled technical problems that bother us for a long time. But we also did not forget about the game. We did an awesome poster, some improvements in the player controller, we iterate over the new Twinsen model which soon should be ready to start bringing it to the game for tests (Last chance for complaining about its look). 

For some, this may be not a lot. In our opinion, we just took another step in the right direction and this is what matters.

Thursday 10 March 2022

Tribute

When the announcement of the original project (https://twinsenslittlebigadventure.com/) was published, our work was thrown into chaos. We quickly needed to figure out what to do. There were so many questions in our minds: Drop the project? Continue original plan? Adjust to a new reality? What about the name? We could no longer use word "Remake". At the same time, we needed something to distinguish our work from the official project.

This is where the name "Tribute" came. It was a word that describes perfectly what we trying to do, why we do it, and on top of that nicely distinguishes our work from any other projects. This was the essence of all these years spent on development and all these changes we were doing. Everything to give a tribute to the games that all of us love and the people who created them. 

Six months later we believe in all of that even more. Official developers (https://www.2point21.com/) work hard on bringing us more LBA content. To avoid issues, a fan project like ours should never be mistaken for what they do. That is why we plan to shift some of our "branding" (if you can call it that way) to make it more clear for people that this is just a tribute, made by fans. Results of this work can be seen below. What do you think? 



 

Monday 28 February 2022

Development - February 2022

Following last month's promises, we are still working on the tribute. This is not necessarily an easy task as this was a rather busy time, full of unexpected situations. So here we are in the times when the world is once again in chaos and a lot of stuff does not make sense.

The last post spawned a lot of discussion regards Twinsen model. Most of the voices were that you don't like the new look :/ This was a little bit heartbreaking but well, we could fight these opinions or just accept them and return back to a drawing board. Took us a few hours to process all feedback, replay comments, make a copy of the original model, and open the blender to start working. A few iterations later we have some proposition.


If you are interested in the whole progress you can see it at or discord channel (https://discord.gg/vBtsvRqWa7). For those who are curious, we attaching a comparison with the previous model in the engine.


This is still not a final version as some things will change over time. What do you think about it?

The truth is that changing of Twinsen model was the easiest part of the work. The biggest challenge this month was fact that the engine used by the game became really unstable :( At first, we thought that this was a result of one of many changes we did. Reality proved us wrong. The issue was that we made stuff more efficient..., yeah, by doing that, we surfaced some timing issue in our multithreaded code that was there forever. In practice, this was just a few hours of work to fix it. In reality, two weeks of intense tracking in the evenings, in the meantime, we started questioning our own skills and generally, sanity.

To protect the last one we did some experiments with the content creation. By doing that we tested tools, pipelines, and I personally de-rusted my skills in creating models. Results are not bad but also not great. 




Or conclusion from this is that we will mostly use these assets as an addition to the levels and not to create whole locations. We believe that we can do better using different workflows and plan to deliver.

Another thing that helped with our sanity, was adding of new developer UI (https://github.com/ocornut/imgui) to the game, and some fixes and improvements of the tooling. This will not affect the game directly but will make an investigation of the issues a lot easier. 


Finally, we were working on improving a player controller. We want Twinsen controls to feel more natural, include better feedback when he lands on the ground and some new animation. In practice, we are switching whole code to support State Machines that are also used for AI. For those who are not familiar with State machines, they are graphs (we created a visual tool to define them).


Graphs have nodes (boxes) that define different states and connections  (arrows) that define how we can transfer between them and conditions that need to be met. This is a simple, yet powerful concept which already proving to clean up our code a lot. 

With this, we are getting to the end of this month's update. As you can see we are busy, doing what we can to make tribute a real thing. We are a few step closer but there is still a lot more challenges ahead of us. 

Like always feel free to share, comment, join our discord channel where we post more often updates about development.  











Saturday 29 January 2022

Little Big Adventure 2022

The last two months are pretty interesting ones for the LBA community.

  • We learned about the new name for the official games
    (https://twinsenslittlebigadventure.com/lba-new-name-twinsen/) 
  • We got a message from Didier Chanfray regards the plans for the IP
    (https://twinsenslittlebigadventure.com/a-message-from-didier-chanfray/).
In meantime Coffemonsters is silent ... Some may think that because of the announcement of the official project we gave up on ours. The reality is that we know we cannot compete in terms of news from [2.21], they are the creators of the official project. Members of Coffemonsters always were and will be supporting them in their work to bring us games from Twinsun's universe. 

But this also does not mean we gave up. While reading the message from Didier Chanfray we can encounter the sentence: 
"If you wish to create something around the original games yourselves, we've open-sourced the code for the original games and will support any fan project/mod to the maximum of our capabilities."
This makes us believe that there is a place for a project like ours. What we doing is not a competition to the official game but a tribute to the original games and people who created them. This is our reimagination of them and answers to the question: What if ...? 

This led us finally to the topic of our "LBA: Tribute" project which still moving forward. Like always we spend a lot of time on technology and tooling but we also try our best to never neglect the game. We recently added our first, rough version of the skeleton:



We have some nice use cases for it in the scope of the tribute (1st island). While iterating on camera and character movements we also created new clothes for Twinsen. 




From other important announcements, we plan to be a little bit more open about our development processes. This should translate into more development news at our discord channel (https://discord.gg/Tc9Hs5h9), more news about work in progress stuff, and our long-term goal is to release development builds to everyone. This should allow you to look into the newest changes and explore the world we created while waiting for the official game. The reasons why this is not happening right away, are technical issues that we need to resolve before releasing builds.

We believe that right now we have really exciting times for all fans of LBA. I know that we all wait for more news from https://twinsenslittlebigadventure.com/. But I also want to believe that news and progress from our small fan project bring some joy to your life. So, till the next one.

Sunday 10 October 2021

27th Anniversary of LBA 1

Finally arrived LBA 1 release anniversary. This year it is a pretty weird one. On one side it is a happy one because we got the announcement that a new entry to the universe will happen. On the other hand a little bit sad because our celebration stream was canceled. I initially planned to replace my stream from it with another dev update, but then life happened. 

I got super busy, partially upon my own request. Specifically, I work on a presentation for the GiC conference where I will be talking about a custom resource management system. I think that this will be an interesting lecture, mostly because I will be talking about the engine that powers the L.B.A. Tribute. If any of you will be there somewhere around and see me don't hesitate to come by and say: hello. 

Now after this long intro, let's focus on the project. From the last update, nothing really changed. The plan is to work on this nice small demo containing only Citadel Island. I will release it when I will be done with it (Sadly there is still no release date). 

Currently, I am focusing on AI. I was not really happy with my previous solution and decided to improve upon it. A few AI-related presentations later I felt like I'm still lost. I understood what they talking about but still did not sorted stuff in my head to make a final decision regards my approach to it. This came later after few beverages (alcoholic and non) and discussions with friends. The last one probably helped here the most.

I decided to use behaviors graphs. How they work for those who don't know: when designing AI you building different states and defining conditions that need to be met to transfer between them. A simple example can be seen below.


Little did I knew, how this decision will backfire on me. The next weeks were full of UI work. Not a lot of AI but mostly thinking about how to make the creation of graphs possible in the toolkit. This was important for me because I would spend a lot of time using this tool later.

Right now I think I'm done with most of this work. It took forever, lead to some interesting discoveries, performance fixes, bug fixes, UI improvements, changes in the workflows, and generally a lot of boring topics that I will spare you. What is important, now I plan to continue work on AI with the new tools I designed. How this will go we should see soon.