Sunday, April 30, 2023

CAGD 370 Blogpost 4

During the fourth sprint I got to work on building the tutorial level and coding the menus, while our programmer finished off the remaining features and our level designer got to work on the second level. The major features of the game really came together during this sprint, and all that we need for the game to be ready will be development of the later levels. Some smaller additions I made were the models for the checkpoint flags, snow shoes, and air rings, as well as adding a controls screen.

The pause menu gave me some trouble. Coding it in didn’t take too long, but for some reason the buttons wouldn’t respond to the mouse, and I couldn’t figure out why. I spent a lot of time looking up solutions and couldn’t find anything, and after systematically combing through the scene found that it had something to do with the camera. Eventually I discovered that there was a conflict with another script that disabled the mouse input, so after making the pause menu re-enable it, everything was good to go. Having a working pause menu and being able to easily navigate between the scenes and main menu felt like we had a real working game.

For the rest of the sprint I worked on the tutorial level. I built the whole thing from the ground up, completing the annotated map, blockout, and full working version of the level. Our programmer added in some code using surface normals to get the movement working on any surface, so I wanted to try something different for the tutorial level. Since we used ProBuilder in CAGD 270 to make levels, I thought it’d be worth experimenting with using it for this project. After testing it out with our movement system, ProBuilder worked great, and let me make much more intricate levels with curves and ramps that fit our game perfectly. 

After testing the level out myself, I made a few changes from the annotated map. Mainly, I removed the alternate routes in the opening area, since I think they would be too confusing for new players. I want it to be clear where to go next, and the current more linear design better shows the player what their goal is: gliding to the platform that’ll let them access the next section. This ensures that players learn to skate and glide before they continue. I added a few extra ramps, but they all direct the player to the goal. One of the extra ramps subtly pushes the players towards success, since if they skate up it to get the acorn, they’ll come down with extra speed that makes the first gliding section easier.

After the first checkpoint, there’s a long ramp and jump to prepare players for more of what the main levels are like, with long speedy down-ramps. This big jump can’t be completed by gliding right away, so players have to learn to start gliding at the apex of their jump. During the playtest we saw some players struggle at this section, but because there’s a checkpoint at the top, players were able to try until they got it without losing progress. I was happy that it successfully taught the players how to play the game. 

The last trick I added was the first breakable wall. Because players completing the jump have a lot of speed, it’s likely to be hard for them to slow down. I added a breakable wall at the end of this section so that players will crash into it and learn that these walls can be broken. In the playtest, I saw a lot of the design elements work perfectly, and all players were able to complete the level while learning how to play.


Wednesday, April 12, 2023

CAGD 370 Blogpost 3

 The third sprint was defined by our kinesthetic playtest, where we had other groups playtest the movement of our game in the first level. We learned some important things from the playtest. Skating worked really well, but gliding not so much. Because players were used to holding W to go forwards, as soon as they started gliding, they would nosedive. We decided to remove the S and W gliding controls for now because their gameplay use was limited and they felt confusing and unintuitive to players. The other major change to movement was that now gliding is limited to a timer, so players can’t glide over the full level.

During the sprint, the first thing I did was upload my model for the end of level flag. Now that the level flag was coded in, I could link all the levels up to the main menu. The main menu has buttons for each level so that the player can access whichever they want in any order. Next I started on the main menu stats. I got a scriptable object set up for the player data, which updates whenever the player completes a level. That way, the player’s time and acorns are recorded, and then compared to the record time / score, and then the menu can display the record time and score. With the acorns, this incentivizes players to try to collect them all, and with the time, it encourages players to compete to go as fast as possible.

Another major development I tried to get completed as soon as possible was making a design document for level objects. We decided that the next feature to add was intractable objects in the levels, so I designed the bumper, branch walls, black ice, and icicles. I wanted an object that changes the players movement, and eventually realized that the bumper would be huge for gameplay because it lets players easily 180, which is difficult with the skating controls. The branch walls are a simple barrier that players can break if they’re going fast enough, which serves as a different type of obstacle. Black ice is another unique obstacle type, as its much more slippery. Finally, icicles add another hazard in the air.



Finally, I decided to take on designing the tutorial level. Since the movement is the most important part, I wanted to design a gentle area that lets players get used to how movement feels. It opens on a frozen lake with a small ramp, an acorn, a wall barrier, and a small puddle of water, where players can get acquainted with the controls. From there there’s two different paths with a tiny gliding platforming section, rewarding some extra acorns and both leading to the first checkpoint. After the checkpoint is the first challenge, a short skate down a steep hill to prepare players for what the harder levels will be like. Its a straight shot with one gliding gap and one big turn. In the final area, players can experiment with a branch wall, avoid another water hazard, and learn to use a jump pack to reach the flag.

Overall I would consider the design mostly successful, but I feel like I could do better with more time. However, as the third sprint comes to an end, I know it’s important that the project gets completed by the deadline. I’ve started work on the blockout with proBuilder, and next up is to finish the tutorial level.


Sunday, April 2, 2023

CAGD 370 Blogpost 2

Our team finished the second sprint, we have a lot of good progress but still have a ways to go before the prototype is complete. The good news is that all of the foundational elements are there and everything in the game works—at this point, we know that no matter what, we’ll have a functional playable prototype. Elements like skating, gliding, acorns, and the first level are all in the game. The next step is going to be looking at the game’s completeness, making sure there’s a good amount of other features. 

During this sprint, I made design documents for the HUD and power-ups, so that my team can have a good idea of what we’re going to be designing. I also coded in the acorns, and gave them a model. The acorn collection is a dynamic system that counts how many acorns are in the level at the game’s start, so this way, the designers can add more acorns to the level without worrying about breaking the HUD. I also wanted the acorns to look nicer than just deleting on touch, so now they quickly shrink and move towards the player, to indicate picking up.

Hand in hand with collectibles, I also set up the rest of the HUD, which included the speedometer and the timer. For the speedometer, I grabbed the rigidbody of the player and used its velocity, then rounded it. For the timer, I tried a formula to round it to two decimal places, but then it would jitter back and forth since it would truncate whenever there was a trailing 0. Fortunately I found a truncation function in the ToString() method, and set it to always only display two decimal places. I also made a model for the jump pack power-up that our programmer implemented. I know that art should be minimized, but there’s going to be at least three power-ups, so I think it’s useful to the player to have a way to distinguish between them. The model is also pretty simple.

We faced a couple of challenges during the sprint, the first was that kickoff was a little trickier since we didn’t have class time to do it. We distributed some work out over the weekend, but reviewed it and modified it slightly in person, where it was easier to discuss. When it came to our cards, we were better about splitting things down from the start, however, this led to some redundant cards.

Another challenge was that our level designer was out sick for a few days towards the end of the sprint, but fortunately he pulled through and got a blockout of the first level completed. While we had six cards left at the end of the sprint, we completed over twenty. The work we didn’t get to was the level flag, the dash powerup, and the second level map.

Going forwards, the next area of focus is going to be adding intractable objects to the levels beyond the existing collectibles and hazards. Once they are designed, the programmer can implement them, and the level designer can put them in the levels. We also need a system to load into levels from the main menu, as well as tracking stats, and saving player data. Currently, there’s also a few more power-ups to be coded in. When those features are done, the levels can be completed, and the game will be ready!

 

Featured Post

ProcGen FPS Update -- 8/28/2024

  The level is procedurally generated each time the program is run.