Documentation + User Guide


Photon Phaser

Guide

Controls: WASD + Space (to stand still), Z to undo, R to restart, P/Escape to pause

Main menu allows access to the settings screen or starting the game

Settings screen allows changing settings in three groups, including post processing, volume and clearing data.

Pause menu allows viewing of hints, exiting back to the main level, operating the lens (if acquired)

Game screen lets you move around and actually interact with the puzzles


Puzzles consist of moving your character (lightbulb) through a room and activating elements. These elements create the puzzles that must be solved to proceed. For example, the level shown above simply requires you to move through the tunnel to reach the goal on the right. Later puzzles will require the use of buttons, doors, photons and mirrors. The game introduces these in a challenging, but not impossible way. The lens shown in the pause menu is acquired at the very end, since there are not enough levels yet. This lens allows the player to choose specific channels to highlight or transform by clicking the pins and drawing a line. To learn more about how the elements interact, it is best to play the game.

Documentation

Comparing to the initial idea:

The game has changed a lot in execution from the initial idea, but the general theme is the same. The main differences are the creation of the two new channels along with their interactions and the addition of new puzzle elements. These changes were made for different reasons, the main of which being that there was not enough flexibility with puzzle design when using fewer elements. Just doubling the number of elements increases the number of possible interactions drastically, so this was helpful to find unique combinations. The change was also made (although never explicitly stated) to move away from walls playing a role in the puzzles as much. The original intent was for walls to host mirrors and such, being the main puzzle elements, but this proved too constricting. However, the walls lying in roughly the midpoint of tiles still remains because of this removed interaction. As for the added channels, they make the game more unique, however since they are quite the logical leap, they are reserved for later areas. A nice example of how these interact is found in the prism, a feature added later, which was then extended to work with the 5 colour channels, splitting into a nice 180 spectrum.

Testing feedback:

Since only two people tested the game in both one-hour sessions, I don't have a whole lot of feedback to go on. One tester said background music would be nice; however, I had already tried to do this but found nothing worked. The other tester said that there needed to be more introduction to the later mirror mechanics, which I do agree with. Sound was a shared issue, one person mentioned that the sounds were too quiet / too loud compared to each other, I adjusted these slightly to make that less noticeable.

More feedback can be found here: Main Feedback (Spoilers yet again) - Photon Phaser by Chloe Gregg (itch.io)

References:

Assets (or most of them):

  • Font
    • Font used for all text (see reference list)
  • Materials
    • Exit
      • Used on level transition
    • Filter
      • Used on photon filters
    • FullLit
      • Used for photons and other fully lit items
    • Indicator
      • Used on colour indicators on emitters, receivers and the lens ui
    • Mirror
      • Used on mirrors
    • RGBIU
      • Generic, used on everything else by default
    • Wire
      • Used on the simple wire displays
  • Prefabs
    • AdvancedLens
      • Inherits from Lens, also includes the IU channels and another sprite
    • Lens
      • A collectable that unlocks the lens for the player
    • Blocker
      • Blocks items which share a channel
    • Box
      • Box that can be pushed and contain other items
    • Button
      • Button that sends rising and falling signals when something steps on it
    • Door
      • Toggles state on any signal
    • Emitter
      • Creates a photon in front of it when triggered with a rising signal
    • Filter
      • Outputs the reflected light from a mirror of the same type without reflecting the photon.
    • LevelEntrance
      • Takes the player into a level
    • LevelExit
      • Returns the player to the main level
    • LevelTele
      • Acts as a silent level entrance
    • Mirror
      • Reflects a photon and lets some other part pass through
    • Notification
      • Displays some text when stepped on
    • Prism
      • Splits photons into 5 directions
    • Receiver
      • Sends a rising signal when the correct (or any) photon is consumed.
    • BlockedLava
      • Water with a box in it
    • Lava
      • Water
    • StonesLava
      • Water with a lily
    • Grid
      • Contains all tilemap stuff and canvas for each level
    • Indicator
      • Shared indicator used by emitters and receivers
    • Light
      • Emits light with colour and radius
    • Photon
      • Moving light ball that interacts with stuff
    • Player
      • Moveable player, cannot have more than one per scene
    • TriggerScheduler
      • Helper that retriggers after certain step cycles
    • Wire
      • Wire that shows up when hovering with mouse
    • Button (UI)
      • Menu button with sounds and stuff
    • LensPin
      • Pin used in the lens UI to connect channels
    • InterSceneSounds
      • Plays sounds between scene transitions
    • NotificationManager
      • Displays and queues notifications
    • PlayerInputManager
      • Handles input and routes to player
  • Scenes
    • LegacyLevels
      • Old levels in the first build (very broken)
    • Levels
      • Each folder contains lists of levels in that section
      • Also contains the base level for creating new ones
    • WorldMap
      • Contains main levels
    • Main Menu
      • Starting scene with title and buttons
    • Settings
      • Settings menu accessed from main menu
    • Tester
      • Contains a sandbox for testing the new elements
  • Scripts
    • very loose organisation, mainly because I didn't want to move stuff
    • Data
      • LaserColour
        • Contains a PColour in a component which is added to many elements
      • LaserDirection
        • Controls the direction of elements, one of 8
      • LaserFilter
        • Controls how a PColour gets filtered by the different types described inside
      • LaserReflector
        • Has unused option for single sided mirrors
      • PColour
        • Contains the five channels used for everything in the game
    • Elements
      • Blocker
        • Acts as a wall to objects who share a channel with the blocker
      • Box
        • Passes triggers to the contained mirror
      • Button
        • Listens on the space to send triggers
      • Door
        • Keeps door tile up to date with the togglable state
      • Emitter
        • Creates a photon when triggered based on its own details
      • Filter
        • Updates a photon based on a LaserFilter
      • FixedAnimator
        • Animates a sprite based on real time rather than time since creation (for animated water)
      • FloorTile
        • Used to store the details about a floor, such as if it can be stood on
      • LensPickup
        • Used to update the lens status of the player
      • LevelEntrance
        • Contains a colour and can be changed by photons, only takes the player to the level if they share a channel
      • LevelExit
        • Similar to the above, takes you to the main level always
      • LevelSwitcher
        • Basic level transition code
      • LightSource
        • Emits light that gets sent to shaders via LeveGrid
      • Mirror
        • Updates and potentially creates a new photon in the reflected direction specified by LaserReflector
      • Notification
        • Stores a message to show when stepped on
      • Photon
        • Logic controlling how photons interact and change colour
      • Player
        • Logic for player movement and triggering steps
      • Prism
        • Splits photons into their 5 channels by creating new photons
      • Receiver
        • Has two modes for emitting signals, any or exact match
      • TriggerSchedule
        • Timed activations (unused)
      • WallRuleTile
        • Controls how walls connect to each other by grouping them
      • Lens
        • Stores the state of a lens
      • SaveData
        • Allows for saving data even on web build and stores the actual data
      • SoundManager
        • Filter for when sounds can be played
    • UI
      • ButtonTextHover
        • Non-functional text colour changer
      • HintSystem
        • Stores and displays hints to the user when asked for
      • LensPin
        • Allows dragging to other pins to update the state of the lens
      • LensShower
        • Depending on the lens the player has, shows different pins
      • MainMenu
        • Does initial loading and creates the InterSceneSounds object
      • MenuButton
        • Plays a sound on click
      • OpenHints
        • Shows the hint menu
      • PlayButton
        • Starts the game (effectively a level exit)
      • Resume
        • Tells the game to close the pause menu
      • SceneSwitchMenuButton
        • Simple button helper that opens a new scene
      • Settings
        • Controls the settings in SaveData through the settings scene
    • Utility
      • Aspecter
        • Controls the aspect of the camera so everything stays consistent, also updates shaders based on this
      • GridObject
        • Component used to attach objects to the grid and provide access to the LevelGrid, also allows animation
      • Indicator
        • Displays a colour
      • InterSceneSounds
        • Keeps track of some sounds and updates volume
      • LensRenderer
        • Basic renderer that uses the lens currently active to transform colours
      • LevelGrid
        • Keeps track of a lot of information about the level and coordinates steps
      • Moveable
        • Boxes and players use this to move on the grid, respecting walls
      • NotificationManager
        • Displays notifications when queued
      • Pane
        • Old file that is still used to determine how filters and mirrors are displayed
      • PlayerInputManager
        • Allows for holding, queuing and everything for inputs which are then forwarded to the player
      • RGBIUColRenderer
        • More advanced renderer that incorporates lighting
      • RGBIURenderer
        • Standard renderer that incorporates the IU texture
      • Solid
        • Makes an object impassable
      • SpaceListener
        • Allows for listening to different actions on a space
      • Steppable
        • Listens for the step
      • Triggerable
        • Listens for different edges of a trigger
      • Triggerer
      • Triggers things when activated
      • WireDisplay
      • Displays wires connecting to and from this element
  • Settings
    • various files created by URP, contains the unused renderer that is created by default
  • Shaders
    • ExitShader
      • Flat coloured shader specified by the params, lit, only shows overlap
    • IndicatorShader
      • Similar to ExitShader, shows entire lighting, not just overlap
    • LensAndChromeShader
      • Post Processing that distorts the lens and adds chromatic abberation
    • LinesShader
      • Addes CRT lines
    • PaneShader
      • Shades with a highlight colour
    • PhotonShader
      • Has two halves which are coloured differently and combined
    • RGBIUShader
      • Default shader which does the 5 channel calculations, other shaders copy these functions
    • WireShader
      • Like PhotonShader, single coloured
  • Sounds
    • Contains sounds for the game
  • Sprites
    • Contains sprites for the game
    • Also, most elements contain a file with the suffix "_iu" which stores the infrared and ultraviolet in the red and blue channels
  • Tiles
    • BlockedLava
      • Walkable, doesn't allow sinking, replaces with Lava
    • Door
      • Connects to walls
    • Floor
      • Basic floor tile with sprite
    • Glass
      • Unused
    • Lava
      • Unwalkable, sinkable, creates BlockedLaa
    • MarkedFloor
      • Highlighted tile
    • Mirror
      • Unused
    • OpenDoor
      • Same as door, passable
    • StonesLava
      • Acts the same as BlockedLava
    • Wall
      • Impassable, connects to walls and doors
  • Master
    • Volume changer
  • Renderer
    • Contains the two fullscreen passes (LensAndChromeShader, LinesShader)
  • ScreenPipeline
    • Specifies the renderer

Leave a comment

Log in with itch.io to leave a comment.