Peint is a watercolor storybook style side-scroller where the player ventures with their color-shifting fox to paint life back into the world and see the northern lights.
As a team, we decided that we wanted to do something colorful and cute that would be visually pleasing to the player. We wanted the player to have a lighthearted engaging experience. We wanted the player to interact with the world by painting in the background.
The game was developed over a period of two and a half months in a team of four people. This game was also developed in tandem with stakeholders that had input into the project.
Role: Programmer
Team size: 4
Engine: Unity 2019
Language: C#
Development time: 3 Months (3 Hours/day)
Art Dana Brooks
Audio Alex Vaughn
Level Design Alex Vaughn & Courtney Leonie
Programming Yixuan Wei
The codebase of Peint could be found via Github.
To better show the “painting”/revealing process of the background stuff and also give the player a better view for such platforming game, the camera would keep the player on the left 4th of the screen in on “Camera Screen” defined in ScreenCameraMovement.cs, and between each “CameraScreen” the camera would lerp and all background stuff would reset.
The picture below gives an example of using SetImageAlpha.cs for a SpriteRenderer component. RightX in SetImageAlpha is controlling the extent of revealing objects, which is the exposed value in shader GradualReveal, 1 means totally revealed, 0 means totally invisible.
All background items are controlled by ScreenBackgroundManager.cs, which listens to the player character and controls the revealing or reset of them. Whenever the character steps on a colored platform, ScreenBackgroundManager would try to start revealing background items with the same color, already revealed items would ignore this event. And if at this time all three kinds of platforms have been stepped in this camera screen, TiledImageManager would be asked to reveal the true image background. If the player goes into a new “Camera Screen”, all background stuff would be reset.
The background images are tiled one by one, revealing themselves from left to right. The general revealing order of different images is controlled by TiledImageManager.cs, parameter Transition Time controls the total revealing time of all images. Each image revealing from left to right is controlled by ImageBackgroundManager.cs, using IENUMERATOR to set the Right X parameter in SetImageAlpha.cs as time goes on. The SetImageAlpha.cs is responsible for instantiating new Material from shader Unlit/GradualReveal and controlling the revealing extent of an image.
The text in the tutorial is revealing gradually when showing up, based on SetUIAlpha.cs, which instantiates a material from GradualRevealUI.shader. TutorialManager.cs is responsible for attaching SetUIAlpha.cs to every text component in the current tutorial.
Peint is designed to be a mobile game, where the player taps the left and right screen to make your little fox jump and change color. Considering this is also a 2D platformer, the jump is quite vital for the game feel. And below is the snippet of code to update jump move, supporting modifications of m_jumpStartSpeed, m_jumpClampedSpeed, m_fallMultiplier, m_lowJumpMultiplier, m_maxFallingSpeed from designers to fully custom this jump feature.
An input interface is also implemented to support keyboard and screen input at the same time for Peint, as the code shown below
What Went Well
Iterated the scripts quickly to suit the needs of design and art.
Picked up alien technology details quickly from online documentation.
Kept refining and focused on the work.
What Went Wrong
Couldn’t make a good assumption on the workload of alien technologies.
Didn’t always update the scripts and projects to be the latest and best, and sometimes submitted the half-finished scripts that broke others’ scenes, so the versions could be messy sometimes.
The implementations were sometimes over-scoping (especially when in the beginning phase of development) that became abandoned afterward, but sometimes under-scoping (especially when in later phase everything became on fire) which required repeated more work for constructing a new set of implementations to incorporate new features.
What I Learned
Try to keep implementations the suitable scoping size throughout the development.
For alien technologies, start with stupid and simple implementations, iterate on these when experiences accumulate.
Always go back and update the scripts and projects, submit the changes only after fully tested.
What Went Well
Communication always went well, the discussions were straight and easy to continue.
Team members were really devoted to developing this game, offering to do more and better than initially scheduled.
Feedbacks were consumed well, we iterated on our projects fast and everyone iterated their work proactively.
What Went Wrong
Asset lock was not always persisted throughout the process, which led to overworking before the end of a milestone.
In POCG and VS milestone, everyone was stressful and the scrum was so messy because the game didn’t give a clear future. Through the result turned well at last, the over tension and mental stress was hindering development.
Documentation could sometimes be outdated, since we were all focusing on finishing the game and mindmap was hard to use!
What I Learned
Always communicate on issues or progress, helping syncing people’s paces and resolving issues.
Keep the documents and projects to be updated, so that abandoned versions wouldn’t mess up with correct ones.
Try to scope work accurately, keep the balance of portability and simplification for script implementation.