On this Christmas Day 2023 PS4 Scene homebrew developer @marcussacana aka DdtankAndr on Twitter released a FridayNightFunkin PS4 PKG game port alongside an OrbisGL GUI Framework (Graphical User Interface) for PlayStation 4 including an OrbisGL Homebrew Template for those interested in creating PS4 homebrew with Visual Studio.
Download: IV0000-BREW01859_00-MARCUSSACANA0000.pkg (1.11 GB) / assets.zip (1008.84 MB) / FridayNightFunkin GIT / OrbisGL.Homebrew.Template.7z (63.2 MB) / OrbisGL GUI Framework GIT
This release comes following the PS4 Skeleton Base PKG Homebrew, PSTools PS4 Unity Base to Create Homebrew, his DirectPackageInstaller Tool to Preview & Send PS4 PKGs and PS4 OpenOrbis Mono Entrypoint for Homebrew with SDL2 & OrbisGL Library that doesn't require Unity nor the previous PlayStation DevKit leaks.
From the FridayNightFunkin README.md: Friday Night Funkin PS4
This is the repository for Friday Night Funkin PS4 Port, a game originally made for Ludum Dare 47 "Stuck In a Loop".
Installation
Initial Public Build
Pre-release
OrbisGL is an Open Source graphical user interface framework that facilitates the development of PS4 Homebrews using solely the C# and OpenGL.This framework encompasses functionalities for rendering fundamental geometric shapes, text, audio playback, and input processing (keyboard, mouse, and DualShock).
Folders
To download this project and build it, you will need to initialize the submodules as well, this can be done like this:
Building
OrbisGL Execution Workflow
Credits
Merry Christmas!
It is with great enthusiasm that I am today releasing OrbisGL in its initial version. This "Homebrew Template" is a simplified version that includes the necessary binaries for compilation on Windows, excluding Visual Studio. This means that all you need to create your PS4 homebrew now is to have Visual Studio installed and this file extracted to a location of your preference.
To make it work, you need to launch the "Developer Command Prompt for VS 2022" and within the extracted template folder, execute one of the following commands:
Download: IV0000-BREW01859_00-MARCUSSACANA0000.pkg (1.11 GB) / assets.zip (1008.84 MB) / FridayNightFunkin GIT / OrbisGL.Homebrew.Template.7z (63.2 MB) / OrbisGL GUI Framework GIT
This release comes following the PS4 Skeleton Base PKG Homebrew, PSTools PS4 Unity Base to Create Homebrew, his DirectPackageInstaller Tool to Preview & Send PS4 PKGs and PS4 OpenOrbis Mono Entrypoint for Homebrew with SDL2 & OrbisGL Library that doesn't require Unity nor the previous PlayStation DevKit leaks.
From the FridayNightFunkin README.md: Friday Night Funkin PS4
This is the repository for Friday Night Funkin PS4 Port, a game originally made for Ludum Dare 47 "Stuck In a Loop".
- Play the Ludum Dare prototype here: friday-night-funkin
- Play the Newgrounds one here: FRIDAY NIGHT FUNKIN'
- Support the project on the itch.io page: funkin
- ninjamuffin99 (me!) - Programmer
- PhantomArcade3K and Evilsk8r - Art
- Kawaisprite - Musician
- Marcussacana - PS4 Port
Installation
- Download the PKG Clicking here
- Install as any other game
- Install the Visual Studio
- Install the OpenOrbis ***
- Setup the OpenOrbis *** Environment variable "OO_PS4_TOOLCHAIN"
- Clone this repo with those commands:
Code:
git clone https://github.com/marcussacana/FridayNightFunkin
git submodule init
git submodule update --init --recursive
- Download the game assets here: assets.zip
- Place the assets (without extract) at "assets\misc"
- Open the "Developer Command Prompt for VS 2022"
- Run in this project root directory the command
Code:
build-windows release
Pre-release
- Currently up week 6 implemented
- this is an pre-release, expect some minor bugs
- the next update it will take a while since I spent the entire year in this game already.
OrbisGL is an Open Source graphical user interface framework that facilitates the development of PS4 Homebrews using solely the C# and OpenGL.This framework encompasses functionalities for rendering fundamental geometric shapes, text, audio playback, and input processing (keyboard, mouse, and DualShock).
Folders
- GLTest: Contains an functional project intended for testing and debugging the library directly on Windows, albeit without support for DualShock input and audio output.
- ImageSharp: Dependency responsible for image decoding.
- OrbisGL: Contains the framework itself
- SharpGLES: Dependency adapted to enable compatibility with the PS4, integrating OrbisGL with OpenGL.
To download this project and build it, you will need to initialize the submodules as well, this can be done like this:
Code:
git clone https://github.com/marcussacana/OrbisGL
git submodule init
git submodule update --init --recursive
- Clone the repository as shown in Cloning
- Open the OrbisGL.sln project with Visual Studio or JetBrains Rider (Recommended)
- Restore the Nuget Packages
- Build it!
- Build the OrbisGL as show in Building
- Create a new empty C# Project
- Add ObisGL as Reference into your project
- Create an new class that derivates the OrbisGL.GL.Application class
Code:
using OrbisGL;
using OrbisGL.GL;
public namespace MyHomebrew {
public class Entrypoint : Application {
//Initialize the OrbisGL with resolution of 1920x1080p60
public Entrypoint() : base(1920, 1080, 60) {
}
}
}
- The input methods are all disabled by default, you should initialize it early before create any object in your application
Code:
public Entrypoint() : base(1920, 1080, 60)
{
//Enable keyboard input
EnableKeyboard();
//Enable mouse Input
//EnableMouse();
//Enable Dualshock 4 Input
EnableDualshock(new DualshockSettings()
{
//When true, Left Analog moves are mapped to pad buttons
LeftAnalogAsPad = true,
//When true, the pad buttons will act as a focus selector
PadAsSelector = true,
///When set, the Touchpad may be used as an Virtual Mouse
Mouse = VirtualMouse.Touchpad
});
}
- Now the OpenGL and Input are ready, you may start creating the controllers
Code:
public Entrypoint() : base(1920, 1080, 60)
{
//... Initialize Environment
InitializeComponents();
}
private void InitializeComponents(){
//Creates an Panel with the screen size
var BG = new Panel(1920, 1080);
//This panel will be our root controller
//and will act as an Background as well.
//This will create a button:
var BtnHW = new Button(200, 20, 28);
BtnHW.Text = "Hello World";
//The constructor parameters of the button specify that
//the button will have a length of 200px, a height of 20px,
//and a font size of 28.
//Assign an event for this button,
BtnHW.OnClicked += (s, a) => { /* BUTTON CLICKED */ };
//There are three analogous events: OnKeyDown, OnMouseClick, and
//OnButtonPressed. The distinction lies in the fact that each of these events is
//triggered exclusively by a specific input method – keyboard, mouse, or DualShock,
//respectively. This stands in contrast to OnClicked, which can be activated by any
//input method.
//This will set the button's position coordinates
//to X=20 and Y=30. These coordinates are always
//relative to the parent control.
BtnHW.Position = new System.Numerics.Vector2(20, 30);
//This command will cause the previously created
//button to become a child of the "BG" control.
BG.AddChild(BtnHW);
//The AddObject is a method inherent to the Application class
//from which we previously derived. It can be invoked to append
//controls or graphical objects to the list of items intended for rendering.
AddObject(BG);
//Objects derived from the "Control" class automatically receive
//input events when activated. On the other hand, "GLObject2D"
//objects are treated as non-interactive visual items and do
//not inherently receive any input events.
}
- Once everything is configured, you need to invoke the Run method, which initializes the main application event loop. You can call this method by simply creating an instance of the class you derived from Application and then invoking the Run(); method at the entry point of your project.
Code:
//Program.cs
//If you are using the PS4-OpenOrbis-Mono project
//currently the program entrypoint is allways the
//Orbis.Program.Main method, and not the executable
//entrypoint, So your entrypoint code should look
//exactly like this:
namespace Orbis
{
public static class Program
{
public static void Main(string[] args)
{
var Display = new Entrypoint();
Display.Run();
}
}
}
Credits
- PS4-OpenOrbis-Mono: LightningMods, Al-Azif, bucanero, flatz, sleirsgoevy, OSM-Made, OpenOrbis Team.
- OrbisGL: marcussacana
- Shaders: ShadyBen, iq, gigaherz, Cherno, marcussacana
- SharpGLES: bitlush
- ImageSharp: James Jackson-South, Dirk Lemstra, Anton Firsov, Scott Williams, Brian Popow, and the open source contributors.
Merry Christmas!
It is with great enthusiasm that I am today releasing OrbisGL in its initial version. This "Homebrew Template" is a simplified version that includes the necessary binaries for compilation on Windows, excluding Visual Studio. This means that all you need to create your PS4 homebrew now is to have Visual Studio installed and this file extracted to a location of your preference.
To make it work, you need to launch the "Developer Command Prompt for VS 2022" and within the extracted template folder, execute one of the following commands:
- Build-Windows debug
- Compiles a pkg build for debugging. When launching the application, it will freeze until the debugger is connected to port 2222.
- Build-Windows release
- Compiles a pkg build for publication.
- Build-Windows remote_debug
- Compiles a project build for remote debugging through itemzflow. An NFSv3 server will be initiated, and you need to configure itemzflow to connect. Upon launching the application, it will also wait for a debugger connection on the same port 2222.
- Build-Windows clear
- Clears compilation residues from the folder.