PickPon

November 4, 2018

Project Details

  • Platform: PC
  • Genre: Local Multiplayer / Party
  • Engine: Unreal Engine 4
  • Development Time: 2 weeks

  • *Controllers are required

Concept



PickPon is a wild player versus player arena battle game for 2-4 players.


Face off against your friends in an intense and crazy showdown where being the fastest and smartest collector is the name of the game. Compete to pick up the most items before the timer runs out, but be careful! The other competitors can steal your items before you deposit them in your zone!
There are many different ways to play to get to the top, but only one can win the collectorbot championship!



Roles and Responsibilities

  • Project Manager

    Version control, Naming convention, Team management and communication


  • Multiplayer/Gameplay - C++/Blueprints

    Setup local multiplayer and gameplay logic. Created in editor scripts to help other artists and designers


  • UI/Menu Scripter - C++/Blueprints

    Setup main menu, character selection and UI

Project Architecture



Click on the tabs for more details
Project Diagram
  • BP = Blueprint Actors
  • BPC = Actor Component
  • WBP = Widget Blueprint
  • M = Material
  • SM = Static Mesh (3d Mesh)
  • MI = Material Instance
  • Inherent = Base Class ( If you intend to make subclasses later ex: pickups)
  • Main = Levels
  • IBP = Interfaces
  • P = Particles
  • T = Textures
  • ABP = Animations Blueprint

//Content

  •    /Assets
  •       /Arena
  •       /Character
  •       /Pickups
  •    Blueprints
  •       /Audio
  •       /Gameplay
  •       /Scripts
  •    /Maps
  •    /Materials
  •    /VFX
  •    /UI
  •       /Widgets
  •       /Textures
  •    Temp
  • Game Mode:

    Controls game state, Spawn characters, Scoring system, Map Transition


  • Game Instance:

    Holds players information for map transitions


  • Player Controller:

    Input logic for MainMenu, Lobby and UI


  • Pawn:

    Input logic for gameplay, general pawn logic


  • Actors:

    Other gameplay logic that might communicate with Game Mode or Pawn class

Local Multiplayer



I scripted the local multiplayer system for 2-4 players, splitted screens gameplay. I started creating a lobby where players can join the local session by pressing "Start". The controller and pawn information gets stored in the Game Instance class for map transitions. After loading the gameplay level, Game Mode class retrieve that GI information and sets player pawns to their correct player controller, and set the conditions to start the match activating the camera Split-screen mode



Lobby


The lobby system is composed by 3 Events. The "SpawnCharacter" event replaces an empty dummy pawn to a playable character pawn and assigns it to the controller which joined the session. "DespawnCharacter" does the opposite logic from "SpawnCharacter". "DespawnAllMenuCharacters" resets all the pawns to the dummy. It's triggered when players go back to the main menu or after a game match







Camera Splitscreen C++ Function


To enable/disable the camera splitscreen in runtime I created a custom C++ class which allows scripting this functionality in Blueprints



2-4 players setup

This function runs when the match starts, it spawn player characters and assign them to their controllers, It also remove non active players and controllers



Camera Splitscreen C++ Function


//.h
 
	UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldObjectContext"))
	static void SetCameraSplitscreen(bool bIsDisabled, UObject* WorldObjectContext);
 
//.cpp
 
void ASplitScreenController::SetCameraSplitscreen(bool bIsDisabled, UObject* WorldObjectContext)
{
	if (!WorldObjectContext)
	return;
	
	UWorld* CurrentWorld = Cast(WorldObjectContext->GetWorld());
	if (CurrentWorld)
	{
		CurrentWorld->GetGameViewport()->SetDisableSplitscreenOverride(bIsDisabled);
	}

}





2-4 players setup





Editor Scripts



One of my favorite tasks was creating scripting tools to quickly create an crowd arena and 3D artists integrate directional light system with their shader inside the engine.



Crowd Generator


A simple script for Level Designers and Artist. Quickly create a circular crowd around the arena with customizable radius, scale and size parameters




Crowd Generator Script







Custom Directional Light Actor


A simple construction script that allowed 3D Artists to test their cell shader results on level




Custom Directional Light Actor Script