Rogue Jester

Rogue Jester is a Rogue-like FPS that we are building to learn more about Unity.


We are currently testing the Git LFS and the CI/CD for the Steam release. We definitely think the dark and darker style but set in the cyberpunk future is the best way to describe the path the game will take.


  • Get Unity Assets for Robots NPC Bosses etc low poly
  • Add more levels to the game
  • Creating Levels - need ideas what kinda of levels and what assets to use
  • Borderlands is the TO-GO game
  • Improving AI - adding new state machines to the game so enemies are more interesting
  • Boss Fights
  • Game is in space We use Space SkyBox
  • Leveling Up System - MAX HP increases when player levels up
  • Talent Tree - TBD
  • Add MiniMap - UI
  • Upgrade System - Upgrade Weapons
  • New Weapons Added
  • New Classes Added - Each class got unique ability
  • SFX GunShots - NO BGX


Current errors for Rogue Jester that we need to resolve:

Build Error

These are the active build errors for the RJ application or CI/CD for the project.

Build Error 1:

[error] Error: unrecognized project! Please check your app configuration - if this is a Unity application, We expect your "Project Subdirectory" to be set to the path which directly contains the ProjectSettings and Assets directories. For a native app, this should be set to the path which directly contains the project file (.xcodeproj,, etc).

Application Error

Application Error 1:

Error: Only Capsule and Sphere Colliders are supported by the Lean ability.
UnityEngine.Debug:LogError (object)
Opsive.UltimateCharacterController.FirstPersonController.Character.Abilities.Lean:Awake () (at Assets/Opsive/UltimateCharacterController/Scripts/FirstPersonController/Character/Abilities/Lean.cs:78)
Opsive.UltimateCharacterController.Character.UltimateCharacterLocomotion:InitializeAbilities () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotion.cs:340)
Opsive.UltimateCharacterController.Character.UltimateCharacterLocomotion:AwakeInternal () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotion.cs:301)
Opsive.UltimateCharacterController.Character.CharacterLocomotion:Awake () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/CharacterLocomotion.cs:310)

Error 2:

Error: Only Capsule and Sphere Colliders are supported by the Item Pullback ability.
UnityEngine.Debug:LogError (object)
Opsive.UltimateCharacterController.ThirdPersonController.Character.Abilities.Items.ItemPullback:Awake () (at Assets/Opsive/UltimateCharacterController/Scripts/ThirdPersonController/Character/Abilities/ItemAbilities/ItemPullback.cs:54)
Opsive.UltimateCharacterController.Character.UltimateCharacterLocomotion:InitializeItemAbilities () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotion.cs:366)
Opsive.UltimateCharacterController.Character.UltimateCharacterLocomotion:AwakeInternal () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotion.cs:302)
Opsive.UltimateCharacterController.Character.CharacterLocomotion:Awake () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/CharacterLocomotion.cs:310)

Error 3:

UnassignedReferenceException: The variable m_AvailableModels of ModelManager has not been assigned.
You probably need to assign the m_AvailableModels variable of the ModelManager script in the inspector.
Opsive.UltimateCharacterController.Character.ModelManager.Start () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/ModelManager.cs:62)

Error 4:

NullReferenceException: Object reference not set to an instance of an object
Opsive.UltimateInventorySystem.UI.Currency.MultiCurrencyView.DrawCurrency (Opsive.UltimateInventorySystem.Exchange.CurrencyCollection currencyCollection) (at Assets/Opsive/UltimateInventorySystem/Scripts/UI/Currency/MultiCurrencyView.cs:62)
Opsive.UltimateInventorySystem.UI.Monitors.CurrencyOwnerMonitor.CurrencyUpdate (Opsive.UltimateInventorySystem.Exchange.CurrencyOwnerBase currencyOwner) (at Assets/Opsive/UltimateInventorySystem/Scripts/UI/Monitors/CurrencyOwnerMonitor.cs:86)
Opsive.UltimateInventorySystem.UI.Monitors.CurrencyOwnerMonitor.Initialize () (at Assets/Opsive/UltimateInventorySystem/Scripts/UI/Monitors/CurrencyOwnerMonitor.cs:63)
Opsive.UltimateInventorySystem.UI.Monitors.CurrencyOwnerMonitor.Start () (at Assets/Opsive/UltimateInventorySystem/Scripts/UI/Monitors/CurrencyOwnerMonitor.cs:38)


The issues and errors that have been closed.

Unity Cloud Error 1

Unity Cloud Error 1 was the failure of the Unity DevOps / Build tools to automatically detect the current version of Unity that our project sent.

Something went wrong when submitting your build(s)
Could not auto Default Windows desktop 64-bit detect unity version. Failed to parse Unity Version from ProjectSettings/ProjectVersion.txt. Reason: The specified revision was not found serverpath:/ProjectSettings/ProjectVersion.txt#br:[email protected]@[email protected]


Services and concepts that we would like to integrate RJ with.


These are the official Steam Tasks

  • Library Capsule

Library Capsule *600px wide x 900px tall

  • Design: This should be graphically-centric and give the user some sense of the experience. Please use the key art that is being used for any retail boxes or marketing as well as the name of your game, ideally using the same logo / title as printed on any retail or marketing. Do not include quotes, marketing copy, or other strings of text beyond the title of your application. The art should depict something important about your product. The logo should be easily legible against the background.

  • Usage: This image is primarily used in the library overview and collection views

  • Sizes: 600px x 900px (an additional half-size 300px x 450px PNG will be auto-generated from larger file)

  • Library Hero

Library Hero *3840px wide x 1240px tall The hero graphic and logo are layered and move independently when the page is scrolled, creating a subtle parallax effect. Consider how the product logo will be placed on top of the hero image (left bottom corner or centered). You’ll want to ensure the logo is both visible and legible against the background.

  • Design: This should be a visually rich image that is easily recognizable. For best results, please use the key art that is used for any retail boxes or marketing. Do not include quotes or other strings of text.

At the center of the template is a “safe area” of 860px x 380px. This area will remain uncropped across scaling and resizing of the Steam client window. Artwork should extend across the entire template, but critical content should be within the safe area. For ex: a main character’s face should be entirely in the safe area or risk being cropped.

  • Usage: Appears at the top of a user’s library details page for this product.

  • Sizes: 3840px x 1240px (an additional half-size 1920px x 620px PNG will be auto-generated from larger file)

  • Library Logo

Library Logo *1280px wide x 720px tall

After upload, you can use the preview tool to select the logo’s position. Options include: left bottom corner, centered top, centered middle, and centered bottom.

Note: If a hero graphic and logo are not uploaded, the hero area will display a screenshot from the store, with the application name in text overlaid in the bottom left corner.

  • Design: For best results, use the logo that is being used for any retail boxes or marketing. You’ll want to ensure the logo is both visible and legible against the hero graphic background, sometimes a drop shadow can help. The PNG image should have a transparent background.

  • Usage: Appears at the top of a user’s library details page for this product, placed on top of the hero graphic.

  • Sizes: 1280px x 720px (an additional half-size 640 x 360px PNG will be auto-generated from larger file) Ensure that the logo extends the full width of the PNG, without extra padding.

  • Placement Tool

The four green anchor points relate to the four possible positions your logo can be pinned. Bottom-left, top center, mid-center, and bottom-center.

In most cases, the bottom-left position should be used.

You may want a centered logo if…

Your logo is symmetrical or close to symmetrical or a logo that’s contained in a circle. Your background header image has more of the interesting parts on the outside edges and the center has areas of rest. Your background header image is symmetrically balanced and positioning the logo in the bottom-left throws the balance off. Once you have determined your logo position, use the blue logo box to size your logo appropriately. The blue box acts as a bounding box for the logo, it will not scale outside this box. The right edge of the blue box determines the maximum proportion the logo will scale to compared to the background hero graphic (this is useful if there is background art you don’t want the logo to overlap.) The top edge of the blue box determines the maximum size the logo will scale to (this is useful if you are finding the logo is too big when the window has been scaled up.)

Typically you can take the top edge and leave it higher than the bounds of the logo. Play around with it and try scaling your window to get a sense for how your logo will adjust as the window scale changes.

Once you are happy with your logo position, proportion, and scale, hit the save button to commit your changes.


  • Create Concept Issue Ticket
  • RogueJester - (init) - Start the initialization of RogueJester
  • Map out the ideas
  • Update SkyBox
  • h0lybyte: Integrate the React with Unity
  • Player Level Up System(max level TBD)
  • HP Getting Upgraded on Level
  • Added Currency inside game(killed enemies drop currency)
  • Currency is saved trought out scene
  • Added + 2 more levels(total levels 4)
  • User Interface all the values are displayed on the screen or in the menu
  • Main Menu (Modern Menu Designed)much more fun to interact with!
  • LoginSceneDesign
  • MainSceneDesign
  • InGameMenu design and functionality
  • Scaling UI in game for all devices
  • Level SelectionScene and Functionality
  • SceneFlow
  • Enemy Ai Improved
  • Upgrade System
  • Boss Fight
  • When player drops down he doesent die. Game needs to reset.
  • Mobile Controls movement adopted for android
  • Re-design Menu(so responsive for more platforms)
  • Move Gameplay Actions into Button for android usage
  • Displaying Stats in the game panel (TBD)
  • Inventory System
  • When player dies he loses items that he bring with him
  • Main Menu Inventory(player select what items to bring for the next level)
  • Inventory data values stored in JSON
  • New vfx for weapons
  • InventoryDisplaying in Menu


  • h0lybyte: Level3

  • ZaneRage: Everything Else

  • Should create a header!

Theme Song

The game will have one exclusive theme song, which we will refer to as Going to Work

Describe the music topic Music Theory: “Going to work”

00:00 : 00:30 - Intro Lofi Punk 00:29 - 01:00 - Verse1 from PeacefulFire 01:00 - 01:25 - Longer Chorus Phuck Work 01:15 - 01:30 - Verse2 from PeacefulFire

Sample 1


#I'm here for the company
#Not here for the capital
#Been agitate lately
#Actually Anti-affable, maybe


  • Collective thoughts, concepts and ideas for the RogueJester FPS.
  • Ideas How to Convert 1. System.Text.Json namespace to convert C# objects to JSON and vice-versa.
  • Explained in this link
  • Thus, convert the JSON string to class object in C# using the JsonSerializer.Deserialize () method.


I was looking through the notes and they recommend that we use SteaMworks SDK 1.53 aka Release 20.1.0

From SteamWorks Github IO Install

They stated three options, A, B and C. I think we should go with Option A?

Option A: .unitypackage Download the .unitypackage from the Releases page on GitHub. Import everything into your project Release

So I will grab the unitypackage and then proceed to import it.

I wonder if I will need to apply to the Steam store to get an API key? Hmm.

As we wait, I will update the pipeline for the Windows build.

Steam Store Docs

After reviewing the scopes that they provide, we are building the demo , just need to confirm that with external people.

Player Global Values

Original as of 1.2.x

using System.Collections;
using System.Collections.Generic;
using Unity.FPS.Game;
using UnityEngine;

public class GlobalValue : MonoBehaviour
    public static int PickPlayerID {
        get { return PlayerPrefs.GetInt("PickPlayerID", 0); }
        set { PlayerPrefs.SetInt("PickPlayerID", value); }

    public static int SavedCoins
        get { return PlayerPrefs.GetInt("Coins", 0); }
            PlayerPrefs.SetInt("Coins", value);

    public static float SavedCurrentExp
        get { return PlayerPrefs.GetFloat("CurrentEXP", 10); }
            PlayerPrefs.SetFloat("CurrentEXP", value);

    public static int PlayerLevel
        get { return PlayerPrefs.GetInt("PlayerLevel", 1); }
            PlayerPrefs.SetInt("PlayerLevel", value);

    public static float MaxHp
        get { return PlayerPrefs.GetFloat("PlayerMaxHp", 100); }
            PlayerPrefs.SetFloat("PlayerMaxHp", value);


I am thinking we can add these to the PlayerPrefs

    public static string PlayerName {
        get {   return PlayerPrefs.GetString("PlayerName", "Guest");   }
        set {   PlayerPrefs.SetString("PlayerName", value);   }

Can you do nested functions?

    public static string _pN {
        get { return PlayerName(); }
        set { PlayerName(); }

I will test case these tonight, when I get a chance to mess around with after the main branch builds.

Okay so I went ahead and added a couple more things to the GlobalValue.cs file:

Lets start with the PlayerName, PlayerJWT and PlayerEmail

    public static string PlayerName {
        get {   return PlayerPrefs.GetString("PlayerName", "Guest");   }
        set {   PlayerPrefs.SetString("PlayerName", value);   }

    public static string PlayerJWT {
        get {   return PlayerPrefs.GetString("PlayerJWT", "Guest");   }
        set {   PlayerPrefs.SetString("PlayerJWT", value);   }

    public static string PlayerEmail {
        get {   return PlayerPrefs.GetString("PlayerEmail", "Guest");   }
        set {   PlayerPrefs.SetString("PlayerEmail", value);   }

So would we call them like this?


GlobalValue.PlayerJWT = "JWTHere";


Now I am thinking it might be //2 based upon what the other references to GlobalValue, so I suppose we could try.

I will also change the PlayerName

function to PlayerUsername , to keep within the naming flow.

Also do we need to call PlayerPrefs.Save();

? Does GlobalValue already do that?


We decided to remove almost all of the Unity MicroFPS codebase and introduced Opsive controller / inventory system.

The reason we decided to switch over is because it will speed up development and resolve some of the cosmetic / physics / animation / logic issues that we are currently facing.

I believe majority of this week will be spent on focusing on integrating both Opsive plugins into the game. Thus all of Patch 1.2.x will be towards getting everything for the player done.

Error inside the GameManager

So we were working on the pipeline, durning the development hell that is Unity, and ran into a “Build” success but a “Build and Run” failure. We spent some time re-merging the base, switching branches, thinking it might be a cluster of different issues. Silver comes in clutch and finds out that there was a duplicate on GameManager Prefab Replacer , 2 of the same script on same object.


  • Had an issue with the basing earlier in the day. We will split the branches further, to avoid conflicts and issues when rebasing / merging branches.
  • When migrating from the public to private repo, there were some issues with secrets and CI/CD, these issues are still open and should be resolved this week.


  • 11/15/2022
  • Had an issue with the basing earlier in the day. We will split the branches further, to avoid conflicts and issues when rebasing / merging branches.
  • When migrating from the public to private repo, there were some issues with secrets and CI/CD, these issues are still open and should be resolved this week.


  • 11/14/2022
    • Improving the UI/UX
    • Expanding Character Stats

Patch 1.2.x

  • 11/13/2022
    • Start expanding the assets inside the game and work with some core logic.

Patch 1.1

  • 11/12/2022
    • ZaneRage and h0lybyte did the basics the idea / concept.
    • New asset models for the 3D robot soldiers.
    • Added several more assets to the game!

First Official Entry

We should make it so that the Unity pulls this information and displays it onto the Menu -> Patch.


  1. LoginMenu
  2. IntroMenu
  3. WInScene
  4. LoseScene
  5. MainScene
  6. SecondaryScene
  7. LevelSelection


  • This is a full breakdown of the assets that we are using in RogueJester FPS. We will keep the credits and a semi-active list of all the components that we are using.


  • SkyBox provides us with a visual background.
  • Asset: SkyBox Vol 2 ZaneRage: Adding the Asset
  • Quick Search on the Unity Assets page for FREE* 3D Characters -> Robots

3D Robot Solider

  • Official Link
  • ZaneRage: those are soo cool for enemies
  • h0lybyte: Okay, I will grab and commit them for Patch 1.2.x

UAV Trident

Combat Drone

Spider Orange

Robot Metallic Humanoid

Sentry 3D Robot

Robot 3D Sphere