top of page

Ascent:

Scripting:

Creating the storybook, one of the most important factors was ease of use. We wanted everything to be controlled only using left-click, much like the rest of the game.

As all functions are controlled by left click - including loading and skipping dialouge, and turning pages, I set the book up so only one of these functions would detect clicking at a time, and pass on to the next once it has finished all operations. Only once all events on one page had been completed could it turn to the next and start the sequence over again.

I had to make sure that everything happens in a set order to prevent the player from skipping through pages. As the book is in charge of loading new scenes, breaking the sequence here would have allowed people to skip through entire levels.

Ascent is an exploration game inspired by a multitude of folklores utilising a unique, handcrafted art style. Encounter and outrun folklore-inspired enemies as you climb the sacred mountain to rekindle the holy flame, all the while becoming immersed in a story told to you via a fully-illustrated folktale.

I'm responsible for the majority of the storybook section in Ascent - I created 90% of its code, in addition to animating it and illustrating some of its pages.While it may look simple, there's a lot going on underneath the hood to ensure a streamlined and pleasant experience.

Play Ascent at:
BookOpeningShot.jpg

Animating The Storybook:

Page.gif

I was also responsible for animating the storybook opening, closing and the page flipping animations. The page flipping was created in Maya using curves, starting by creating a single curve and animating it turning 180 degrees from the left edge as a page would.

 

From here, I duplicated the curve, moved it forward and connected the two curves with a face, to create a basic page model with a turning animation.

After separating this face into multiple divisions I controlled the vertices on the corners and ends of the right edge to fall slower than the rest of the page, to act as real paper would when being turned and met with air resistance.

 

From there, UVing each page was easy, and creating seamless double-page spreads only required coordinating which pages in Unity would be placed together.

LikeThatsEverGonnaHappen.gif

The pages in the storybook are actually far too big to fit within the cover, as we wanted them to be as readable as possible. However, this meant that when the book closed, a lot of the page would still be visible outside of the cover. To remedy this I implemented a trick where the pages only load in once the book is halfway open, as the animation for opening/closing the front cover hides enough of the screen for the effect to be seamless.

SwampPages.jpg
RoadPages.jpg

Four of the pages I illustrated for Ascent

Project Reflection:

What went well:
For this project especially, I pushed myself to take on multiple responsibilities to grow as a developer. I acted as sprint planner and scum lord, as well as a 2D & 3D artist, animator, designer and programmer. I also managed to organise myself very well and didn't let any of these other responsibilities slow me down from my main tasks as a programmer.

From each of these practices, I learned a lot about the workflows and responsibilities of team members with these specialisms, after communicating with them regularly throughout development. Additionally, it allowed me to hone my skills in other areas to become even more T-shaped.

What could've gone better:
As this project took place in the middle of the 2nd lockdown, I felt guilty asking other programmers for help with any scripts I was struggling with, as I didn't want to be a burden. However, I learned that getting help from others is an integral part of development. It not only speeds up the development of each other's scripts but also allows other programmers to become familiar with each other's code. This promotes further group coding and greater awareness of the project, and can also come in great handy if the creator of a particular script is absent.

bottom of page