/tyra

Game engine for PlayStation 2™

Primary LanguageC++Apache License 2.0Apache-2.0

Contributors MIT License Discord Discord


Logo

Tyra - alpha 1.36.3

Open source game engine for PlayStation 2™
Dolphin sample »   Floors sample »

Report Bug · Request Feature

Stargazers repo roster for h4570/tyra

Table of Contents


About the Project

Sample code

Sample game

Samples

Description

Tyra is a project that aims to facilitate the development of PlayStation 2 games. The goal is simple API which will allow you to develop some nice small homebrew games in a short period of time. Finally, (thanks to PS2DEV team) Tyra supports C++20, so we are free from the 2003's GCC which only supported C++98.
Project is on alpha stage, so keep in mind that there are many things to be done and to fix. Unfortunately there are not many people, which want's to help with this project. If you want to be a volunteer, but don't have too much knowledge in this field, write to me on Discord, I will be happy to help.

When project will be on beta stage, we plan to create some YouTube tutorials :)

Why was this project created? PS2 development can be a big challenge.
PS2 it's pretty low-level and there are a lot of stuff that you must do from scratch.
For example, if you want to render something using only PS2DEV you must:

  • Create VU1 micro-program
  • Load micro-program and send it to VU1
  • Create parser for your 3D file
  • Create parser for texture file
  • Calculate lights, shadows, MVP matrices (3D->2D)..
  • Clip triangles (sic!)
  • Prepare DMA packets for coprocessors communication
  • Setup rasterizer (GS)
  • Send texture to GS
  • Send packets
  • Synchronize all

but with Tyra you can do it with methods like loadObj() and draw() 😁.

Features

  • 3D support - VU1 "Path 1 rendering"
  • 2D support - PNG & BMP
  • Frustum culling, backface culling
  • OpenGL adaptions: Perspective projection, lookAt camera
  • Texture support - .bmp and png
  • Mesh loaders: ".obj", ".dff" (RenderWare, GTA:SA) and ".md2" (Quake II)
  • Threading support
  • Animation support for obj and md2
  • Audio support - .wav and .adpcm
  • Pad support

Branches

  • Master - monthly releases - tested on PS2 & PCSX2.
  • Develop - daily builds - can be unstable.

Getting Started

Installation

Step by step tutorial here
If you need any support, feel free to ask questions on discord:
Discord

Prerequisites

  • PS2 DEV environment - PS2DEV
  • At least #58ffb33 PS2SDK (28.05.2021) - PS2SDK
  • PS2 Emulator. For example PCSX2

Extra info

  • If you want to use your own .obj file, please check "triangulate faces" in blender.
    PS2 is supporting only triangle primitive type.

Roadmap

Roadmap for next master release:

Next release roadmap

See the open issues for a list of proposed features (and known issues).


Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/amazing-feature)
  3. Commit your Changes (git commit -m 'Add some amazing-feature')
  4. Push to the Branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

Distributed under the Apache License 2.0 License. See LICENSE for more information.


Built With


Acronyms

  • EE (Emotion Engine) - whole set of processors and subsystems that make up the PlayStation 2
  • GS (Graphic synthesizer) - configurable rasterizer and texture mapper. Has only 2MB~ memory for textures, but for the opposite have very high transfer rate, so you can switch textures in the blink
  • VU0 - programmable (ASM) vector processor that is accessed by inline assembly code injected into C program.
  • VU1 - programmable (ASM) vector processor, which is similar to vertex shader. Accessed via DMA.
  • IOP - I/O processor which enables access to peripheral devices, such the game controller

Thanks

Without these guys, everything would be harder:

  • Dr Henry Fortuna - for code sources
  • Rick Gaiser, fjtrujy - for help and new GCC!
  • Lukasz D.K. - for huge archive of PS2 stuff
  • Guilherme Lampert - for code sources
  • Jesper Svennevid, Daniel Collin - for openvcl's code samples
  • Whole PS2DEV team
  • Manieq - for nice splash screens!
  • And so many other guys. Thanks!

Project Link: https://github.com/h4570/tyra
Sandro Sobczyński - sandro.sobczynski@gmail.com
LinkedIn


Logo