Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

Skiatris

RADStudio FMX / Skia4Delphi Arcade Game protype "Skiatris". A high-performance falling block game built entirely with Skia4Delphi.

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate this project.

README

Skiatris

RADStudio FMX / Skia4Delphi Arcade Game "Skiatris". A high-performance, thread-safe falling block game prototype built entirely with Skia4Delphi.

Unbenannt

Sample Video: [https://www.youtube.com/watch?v=mePkXrbPfJg](https://youtu.be/jsfy5inld4E)

🎮 Gameplay Features

pascal
Classic Mechanics: All 7 standard Tetromino pieces with proper rotation states.
Wall Kicks: Smart rotation logic allows pieces to shift automatically if they hit a wall or block while rotating, just like in modern Tetris.
Ghost Piece: A semi-transparent outline shows exactly where your piece will land.
Neon Visuals: Pure vector rendering with heavy use of TSkMaskFilter for glowing blocks, grid lines, and UI text.
Particle Explosions: Clearing lines triggers a satisfying burst of colored particles affected by gravity.
Progressive Difficulty: The game speed increases every 10 cleared lines.
Threaded Engine: Physics and input handling run on a background thread, synchronized safely with the main rendering thread for buttery-smooth 60 FPS.

🕹️ Controls

pascal
Move Left/Right: A/D or Left/Right Arrows
Soft Drop: S or Down Arrow
Rotate: Spacebar
Pause Menu: Escape

🛠️ Technical Details

pascal
Renderer: Pure Skia Canvas (No Game Engine, no FMX shapes, no PNGs). Everything is mathematically drawn using paths, masks, and shaders.
Threading: The game loop runs in an anonymous background thread. Inputs are collected thread-safely using a TCriticalSection and consumed immediately to prevent OS key-repeat spam.
Data Structures: Uses a custom TBlocks array type to allow direct copy assignments (:=) of rotation states, avoiding messy nested loops.
Rotation Normalization: The 4x4 rotation matrix is normalized (shifted to top-left) after rotating to prevent pieces from jumping unpredictably in the grid.

📦 What's Inside

pascal
Skiatris.pas: The complete falling-block arcade engine in a single, highly commented file.
Sample project and executable included.

🚀 Getting Started

pascal
Open the project in RAD Studio (Delphi).
Ensure you have the Skia4Delphi library installed.
Run and play!

License

MIT License - Do whatever you want with it. Credits appreciated but not required.

🎮 Skia4Delphi Games (each one file, no ext engine):
2D JumpnRun Platformer https://github.com/LaMitaOne/Skia_PlatformerGame
2D MegaCatling (Megaman platformer/shooter) https://github.com/LaMitaOne/Skia-MegaCatling
2D Lemmings/Worms/Portal/Touch hybrid https://github.com/LaMitaOne/SkiaLemmings
2D Side-scrolling space shooter https://github.com/LaMitaOne/SkiaStarPatrols
2D Skia Powder (Falling Sand Simulation) https://github.com/LaMitaOne/Skia-Powder
2D BombRunner (Bomberman clone) https://github.com/LaMitaOne/SkiaBombRunner
2D Skia Micro Racers https://github.com/LaMitaOne/SkiaMicroRacers

  1. D C&C style isometric rts https://github.com/LaMitaOne/Skia-RTS-Game
  2. D Isometric cat game https://github.com/LaMitaOne/Skia-A-Cats-Life
  3. D Raycasting doom base https://github.com/LaMitaOne/SkiaDoomBase
  4. D Voxel Raycasting Comanche https://github.com/LaMitaOne/Skia-Voxel-Comanche
    3D better go to https://github.com/castle-engine

🎮 Game components FMX:
MRX Gamepad Core https://github.com/LaMitaOne/MRX-Gamepad-Core

If you want to tip me a coffee.. :)