1. PogoChamp
  2. News

PogoChamp News

Progress Report #4

This week I worked on a variety of stuff around the game, but still managed to make some nice improvements and bug fixes. I worked with the concept artists, migrated the website to a new web host, worked on setting up an email newsletter (still not done), and even managed to work on the actual game!

Stats Recording


Stats are now recorded as you play the game. I think I'll use these stats for some of the achievements or other rewards once the game is further along, but for now they're just for fun. I eventually want to add a "flip counter", but I haven't figured out how to properly track what a "flip" is. I'm sure I'll get to it eventually, but for now the simple things are being tracked quite nicely.

Bug of the Week

This week's top bug is UI related. Because PogoChamp is a controller-centric, I need a way to show users which UI/menu elements they're interacting with. I decided to use a kind of targeting reticle as seen below:



The selection reticle works by placing its center at the center of the currently selected UI element. This worked well until I added the stats screen. While working on that screen I noticed that the selection reticle was slightly misplaced on the Close button. This was confusing, because it worked perfectly for all the other buttons in the main menu, options menu, and replay list. After some digging, I noticed that the misplacement varied depending on the game's resolution:



It turns out the close button in the stats menu was the first button that was anchored to the left side. All the other buttons were anchored to their center point. I had been calculating the center point using:

Vector2 buttonPosition = RectTransformUtility.WorldToScreenPoint(null, targetTransform.position);
reticle.position = buttonPosition + targetTransform.rect.center;


It turns out that targetTransform.rect.center doesn't scale when screen size changes. The solution, ended up being relatively straight forward: just manually calculate the center offset of the rect, using the current screen size

Vector2 buttonPosition = RectTransformUtility.WorldToScreenPoint(null, targetRectTransform.position);

CanvasScaler scaler = targetRectTransform.GetComponentInParent();
Vector2 reference = scaler.referenceResolution;

float widthMult = Screen.width / reference.x;
float heightMult = Screen.height / reference.y;

Vector2 offset = targetRectTransform.rect.center * new Vector2(widthMult, heightMult);
reticle.position = buttonPosition + offset;


Art Update

As mentioned in Progress Report #3, I've started working with a few different artists, with the goal of creating some concept art for PogoChamp. These initial pieces of art will be used as the reference for creating the actual in-game art and music, so getting it "right" is pretty important. Working with the artists has been great so far, but I don't have anything to share with you all yet.

Skipping the Steam Game Festival: Autumn

The Steam Game Festival is a week-long event where unreleased games all share demos at the same time. It's an exciting event, and during the previous Game Festival I played some pretty interesting stuff. The last Game Festival featured 900 games, which is way too many, so Valve decided that games can only be in one of the next three Game Festivals. Because PogoChamp won't have updated artwork by the time the event starts on October 7, I decided to hold off on submitting it until the next Game Festival (likely some time in February).

Changelog


  • Finished the first version of stats recording. Records things like air time/distance traveled, but is missing fun stuff like number of flips.
  • Added the first version of the stats menu UI.
  • Update stats menu number display to use hours, minutes and kilometers where appropriate.
  • Fixed issue where GUI selection indicator would be in wrong position at certain resolutions.
  • Fixed bug where a second instanced of the level state manager singleton would be created when reloading levels.
  • Replay Mode: Added replay ghost toggling.
  • Replay Mode: Changed the UI toggle to be simpler, it now toggles the entire UI, instead of one section at a time.
  • Replay Mode: The "stationary" camera can now be moved, it has been renamed to "fixed" camera.
  • Replay Mode: The camera now properly maintains its orientation when switching between camera modes.
  • Replay Mode: Update the camera deadzone to be more consistent.
  • Fixed selection reticle not animating when the game is paused.


Leave a comment below or join the Discord to let me know what you'd like to hear about in the next progress report!

Progress Report #3: New Website

Hey everybody, this week I was working on lots of stuff around the game, but not too much in the game.


I don't know if any of you checked the website before, but it was.... very bad.

Hover the spoiler to witness my shame ːsteamfacepalmː


Seriously? It's just a link to Discord and Steam and the placeholder logo! No pages, no formatting, why even have a website????


I spent some time this updating the website to be presentable. Still not amazing, but it has all the basic stuff now like the trailer, description, press kit and contact info. Check it out if you're interested:

www.pogochamp.bike Yeah it's a ".bike" domain... I thought that was funny.

Bug of the week


This week's top bug has to do with conveyor belts. At low speeds, conveyor belts seemed to work fine, but when I decided to make a level with faster belts I noticed that things got pretty weird.



Turns out there were a few different issues here, but the main one was that I was trying to overcompensate for the conveyor belt's speed. I had adjusted my calculations for things like sliding direction and jump height to act as if the conveyor belt was stationary, and the character was moving in the opposite direction of the belt. This caused some exciting issues like instantly bouncing hundreds of meters after gently landing on a belt, and the sliding you see in the gif above.

Basically my naive understanding of relativity / reference frames got the better of me.

Art!


I realized that I can't bump up the visual style of PogoChamp all on my own. I'm a mechanics focused developer, and I don't have the artistic skills to make this game look as good as it could. To that end, over the past week I got in contact with a variety of artists to help me figure out the visual style of the game. We're currently in the concept art phase, but as things come together I'll post updates with some of the artwork. I'm really excited to update the art style from "Unity Standard" to "Actually looks like a video game"!

Changelog
  • Added new wall jump-based level.
  • Increase the resistance of water, so you actually slow down.
  • Remove conveyor force adjustment logic.
  • Prevent low speed bounces from forcing you to jump if you don't input jump.
  • Update the long-jump conveyor level to be beatable again now that conveyor logic has changed.
  • Replays can now be deleted.
  • Replay mode camera movement is no longer based on playback speed.
  • Update "Point and Shoot" level so that the bounce is more consistent.
  • Begin work on stats recording.
  • Fixed a regression which caused an extra pogo to spawn when you crashed.

Progress Report #2

I'm trying to see if I can keep up progress reports on a weekly basis. I think I'll try to post something every Friday, even if not a lot has changed.

This week I started contacting artists to help me work through creating a final visual style for PogoChamp. The current style is mostly just whatever I could do with the assets I had. The current player character is just the Dummy character from FinalIK / Puppetmaster, and the level tiles are the ProBuilder defaults. I made most of the VFX myself, but the art style is currently very "Unity Default".

I'm hoping that with artist help I'll be able to update all the visuals so that PogoChamp looks "like a real video game", and not just something one guy made in his spare time :)

[h2]Bug of the Week:[/h2]


While I was looking into optimizing the replay file size, I decided to reduce the frame rate they record at from 60 fps to 30 fps. When I made the change, I noticed that during the first jump in a replay, the character would stutter pretty severely. Oddly this seemed to only be visible on the first jump, after subsequent jumps seemed fine, as you can see in the image above.

The jump effect is created using two values, the jump progress and the jump force. The jump progress simply describes how far along in the jump animation you are, while the jump force is used to change how far down the pogo stick squishes when you jump. The replay system records both of those values to recreate the jump behavior you see while playing.

In order to root cause this issue, I reduced the replay recording fps from 60 all the way down to 5 fps, and the problem got significantly more pronounced. It turns out I was just using the jump force value at the most recent recorded frame, instead of interpolating it between frames. it ended up being a very easy fix (Mathf.Lerp() to the rescue!), and helped me to fix some other small inconsistencies with jumps in replays. It also demonstrated that even at 5 fps, the replays look very smooth! So if I need to reduce the replay size even further at some point I can safely drop the recording rate even further.

[h2]Changes[/h2]
  • Replay Mode: fixed issue where cameras would stop following ghosts after they crashed.
  • Cleaned up unnecessary GameObjects from some levels.
  • Replay Mode: Show number of attempts in the UI.
  • Replay Mode: Show elapsed time in the UI.
  • Replay Mode: Added reset button to instantly restart a replay.
  • Replay mode: Made it so that swapping between focused attempts makes the camera teleport instead of quickly flying to the new position. (still needs some work).
  • Updated 2 and 3 star times on various levels.
  • Reduced the number of landing poofs that ragdolls spawn when crashing into things.
  • Changed replay saving from JSON to binary format, reduces replay file size by about 30%.
  • Replay Mode: Reduced how often surfaces would unnecessarily become see through in replays.
  • Replay Mode: Fixed replay jump jitter at low FPS.
  • Reduced replay recording FPS from 60 to 30, for an additional 50% size reduction! (now 65% smaller than they were last week!).
  • Replay Mode: Fixed Free camera sliding slightly when no controller input is pressed.
  • Replay Mode: Free camera now moves and rotates faster.

Progress Report #1

Hi everybody,

Welcome to the first progress report for PogoChamp! I've been pretty heads-down on implementation, and I decided to take a breath and let you know what I've been working on over the last month and a half. There are a lot of changes, but here are some highlights.

[h2]Redesigned Replay Mode[/h2]

This gif shows transitioning between Free, Stationary, and Follow cameras in Replay Mode, and also demonstrates the updated Super Jump vfx.

[h2]Minor visuals & Post Processing update[/h2]

Left = old, right = new

[h2]Changes (in approximately chronological order)[/h2]

  • Updated all UI text to use a new font.
  • Tweaked the new font to have monospaced numbers.
  • Added "New Record" text that shows when you beat your old best time.
  • Adjust water physics so you don't bounce infinitely on it.
  • Add placeholder SFX for jumping / landing.
  • Moved the jump charge UI to be centered & follow the player (used to be in the bottom left corner).
  • Added level numbers to the level select UI.
  • Added level gates to tune progression so people don't get overwhelmed.
  • Fixed issue where sometimes the character would spin out all crazy when landing at certain angles.
  • Adjust the way the character is put together so that velocity properly transfers when you crash.
  • Update canvases so they scale with screen size.
  • Fixed placement of super jump trails.
  • Update super jump trail color to be a rainbow (not sure if permanent).
  • Jump charge UI now indicates whether you are in the process of super jumping, so it's much easier to see where you went wrong.
  • Increased super jump input window to be much more forgiving.
  • Delay start time & replay tracking until you move.
  • Add in-level score HUD.
  • Added ~10 new levels
  • Updated all of the level star times.
  • Show the number of stars needed to unlock each gate.
  • Make gates a physical object in the level select. Gates animate opening + save whether they have been opened.
  • Reduce amount of time before you can input anything after crashing.
  • Add a skip button to the victory animation.
  • Added Cannons (mario-style)
  • Adjusted the camera top and bottom angles to be less extreme.
  • Only enable mouse camera control when using Keyboard & Mouse control scheme.
  • Added camera reset button, which will position the camera behind the character while it's moving.
  • Added more input icon textures (L3, R3, Scroll)
  • Add Pause & Pause Menu.
  • And Options Menu.
  • Allow customizing camera settings (sensitivity + invert) in options menu.
  • Several level adjustments & bug fixes.
  • Show the number of attempts in the post-level replay UI.
  • Changed the save system from PlayerPrefs to SaveGameFree.
  • Camera settings are saved now.
  • Updated game shaders to use FlatKit + increased saturation. I think the game "Pops" more now.
  • Replay system completely redesigned. Replays are now timestep agnostic, and include perfect jump trails and explosions. Their fidelity (records per second) can also be adjusted at will, and playback & recording rate are decoupled.
  • Post-crash ragdolls are now recorded in the replay system.
  • Replays can be saved & loaded now.
  • Added a Main Menu.
  • Added a replay list menu to the main menu where you can view your replays.
  • Decoupled Game Logic from the level Scenes, so that you can load scenes in different modes (Normal mode, replay mode, etc).
  • Updated the Spawn Point VFX.
  • Added animated leaning to the player character.
  • Allow the player to overlap water slightly before crashing.
  • Added square goal zones.
  • Fixed issue where strangely scaled goal zones would cause the character to morph in strange ways.
  • Added breakable platforms.
  • Removed 200+ C# warnings (mostly variable not initialized).
  • Added replay mode, which allows you to control playback speed, adjust camera, watch specific attempts, pause, etc.
  • Allow you to hide the UI in Replay Mode.
  • Added a current button selection UI indicator to all menus.
  • Added Loading popup when loading replays, and Saving popup when saving them.
  • Replays save and load is now done in a background thread.
  • Saving replays now saves a screenshot, which is displayed in the replay list, so you don't need to remember all the level names.
  • Returning to the Main Menu from a replay now keeps the menu open and scrolled to your previous position.
  • Button prompts now update much more reliably when controller type changes.
  • Added screen wipe transition when loading into levels.
  • Updated to Unity 2020.1
  • Fixed lighting and saturation in Replay mode.


Let me know what you think in the comments!