Wednesday 29 May 2024

I had single active task on my list ...

Last week we can count as a productive one. There was a new post and soon after that, I managed to finish the last part of the work related to visual scripting. Finishing something is always a piece of great news. To celebrate it there was an extra update on our Discord:




With that, I finally could return back to the animations. Recovering this single system would bring us back on track with work on the L.B.A. Tribute. We were excited by this perspective as it was too long from the last time we worked on it. 

This negligence showed up pretty quickly. Broken animated characters popped up on our screen. If we had a working game this would probably not happen, as you can see below it is hard to miss it :]


Sadly we do not have it right now and because of that, we missed it. This mistake cost us only three days (if you are interested in details check this thread). From the positive stuff, while working on it we discovered some other issues which potentially could be also hard to track. Now things looked good.


It was once again time to finally work on the animation system. I started doing some prep work, till I realized that the world editor emits errors that I do not see in the tools logger.  This is rather a game-breaker. You never want a case where something goes wrong and you do not know about it.

This rather long and boring story brought us to today. Logging is almost done but cost us a few extra days of work. The results are not bad even if some stuffs were left as to-do to save some time.


The whole situation feels a little bit like: 


Just for me, it feels like "I have a single active task on my list. Started working on it, and now I have ten active tasks on me." But with logging out of the way I can now return back to prep work on animations and with this, soon we may return back to working on the game. Hold crossed fingers for that, I need mine to continue to work on our little adventure. 

Monday 20 May 2024

Dark places.

Another time full of challenges behind us. The biggest one would be my head ­čśôOver the years I had a lot of discussions about how over-ambitious I am. One of my friends describes it: 

"Creating the game in Unity or Unreal is hard. Then I tell people that I released a game on my engine, and they look at me as if I'm insane. Then there is this guy [me]."

The thing is that we do not really create a game with its specialized engine. Our goal is to create a game technology that will allow us to make Tribute and further productions, whatever they would be. This type of approach is hard.  It challenges our skills, pushes them to the limit, and opens doors that never would open otherwise. At the same time, there is the price that we need to pay for this approach. Long development cycle, multiple iterations on systems that do not fit design. We could of course try to clone what other engines do but this is not our way. We like to explore, feel creative freedom, and just do what we want to do. 

All of this sounds great, except anyone who works on long-lasting projects knows that with time comes fatigue. When I started working on the project 14 years ago everything was simple I wanted to make L.B.A. remake. Now things getting complicated, I'm a lot older, and have a job, responsibilities, and family. Even things with L.B.A. got more complicated, we have an official remake and a whole team working on it. Where there are only two of us working on Tribute and we are still stuck on technology. All of these things lead to doubts if the path I chose was right? Was restarting the project some ago really smart? Would it not be easier to give up ...?

When this happens it is hard. Doubts grow in our minds and bring us to dark places which stop us from seeing positive things. The thing is, that there is a lot to see. We still may not be close to finishing the L.B.A. Tribute but whole tools grow with every week, they become more stable and just look awesome.

Editor use for creation L.B.A.:Tribute

Twinsen House (Editor view)

Script editor with a visual selection of translated text.

The same thing with the official remake, I'm sure that what they do is something really cool. But what we can do is take a whole story for a spin and retell it in our own unique way. How this will go we will see but I think this will be something awesome.

What do all of you think about this whole thing?




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.