141 lines
5.8 KiB
Markdown
141 lines
5.8 KiB
Markdown
# jminos
|
||
|
||
Modern stacker game with every polyominoes from size 1 to 15, made in C++ with [SFML 3](https://www.sfml-dev.org/)!
|
||
|
||
## Download
|
||
|
||
You can download the latest release [here](https://git.ale-pri.com/TetrisNerd/jminos/releases)!
|
||
This game has been tested on Windows 11 and Linux, and releases are provided for theses two systems.
|
||
If your OS isn't compatible, you can try [manually building the project](#manual-build).
|
||
|
||
## How to play
|
||
|
||
Choose which pieces you want to play with and stack them up until you either win or top out!
|
||
Make full lines to make them dissapear.
|
||
Use the different spins to kick the pieces in spot you couldn't imagine were attaignable!
|
||
Each gamemode has its own objective, but you can play as you wish.
|
||
|
||
You can see and change in-game keybinds in the **SETTINGS** section of the main menu!
|
||
All of in-menu navigation is done with the **arrow keys**, the **Enter key** and the **Escape key**. Theses are unchangeable keybinds.
|
||
You will find more infos about the Rotation System, the scoring system, or the different pieces type in the **INFO** section of the main menu.
|
||
|
||
## Features
|
||
|
||
- Every polyominoes up to pentedecaminoes!
|
||
- 7bag with proportionnality for each polyomino size!
|
||
- AutoRS as the Rotation System!
|
||
- 0° rotations!
|
||
- All spin!
|
||
- IRS, IHS, infinite hold, and other leniency mechanics!
|
||
- Customizable board size!
|
||
- Customizable keybinds!
|
||
- Very bland interface!! (i'm not a designer)
|
||
|
||
### Available gamemodes
|
||
|
||
- SPRINT : clear 40 lines as fast as possible!
|
||
- MARATHON : clear 200 lines with increasing gravity!
|
||
- ULTRA : scores as much as possible in only 2 minutes!
|
||
- MASTER : clear 200 lines at levels higher than maximum gravity!
|
||
- INVISIBLE : get 1000 grade while not being able to see the board!
|
||
- ZEN : practice indefinitely in this mode with no gravity!
|
||
|
||
### Screenshots
|
||
|
||
Pentedecamino jumpscare
|
||

|
||
|
||
Pieces select screen
|
||

|
||
|
||
AutoRS demonstration
|
||

|
||
|
||
0° spins demonstration
|
||

|
||
|
||
## Manual build
|
||
|
||
This project uses xmake for compiling, xmake is cross-platform and works in most OS, xmake also automatically install supported librairies.
|
||
To be able to build this project, you need to [have xmake installed](https://xmake.io) and have a compiler with C++20 compatibility.
|
||
|
||
If you want to contribute or are simply curious, you can check the [wiki](https://git.ale-pri.com/TetrisNerd/jminos/wiki)!
|
||
|
||
### Build the project
|
||
|
||
``cd jminos``
|
||
|
||
``xmake``
|
||
|
||
If you need to change the toolchain (for example using gcc):
|
||
``xmake f --toolchain=gcc``
|
||
|
||
If you want to build for another platform (for example with mingw):
|
||
``xmake f -p mingw``
|
||
|
||
### Run the project
|
||
|
||
``xmake run``
|
||
|
||
The program will generate the polyomino files for you if you don't have them.
|
||
As this is a lengthy process, debug mode limits pieces size to 10.
|
||
To switch between debug and release mode:
|
||
``xmake f -m debug``
|
||
``xmake f -m release``
|
||
|
||
If for some reasons you wanna run the command line version:
|
||
``xmake build text``
|
||
``xmake run text``
|
||
The command line version is **not** updated.
|
||
|
||
### Package the project
|
||
|
||
To package the executable manually properly, follow theses steps:
|
||
|
||
1. Clone the project into a new folder.
|
||
2. If you already have all 15 pieces files, copy them over to the ``data/pieces`` folder, else you will be generating them at the next step.
|
||
3. Go into release mode (``xmake f -m release``) and run the project once (``xmake`` and ``xmake run``). This is to generate the default config files, close the game immediately after it started.
|
||
4. Make a new folder named ``jminos`` and copy the executable (should be located somewhere like ``build/linux/x86_64/release/graph``) as well as the ``data/pieces`` and ``data/config`` folders.
|
||
5. Zip the newly created ``jminos`` folder into a file named ``jminos_{platform}``.
|
||
|
||
## Benchmarks
|
||
|
||
### One-sided n-polyominoes
|
||
|
||
| n | Number | Generation | File storing | File retrieving | File size |
|
||
| -: | -: | :-: | :-: | :-: | -: |
|
||
| 1 | 1 | 0s 0.005471ms | 0s 0.14436ms | 0s 0.022223ms | 3 bytes |
|
||
| 2 | 1 | 0s 0.006979ms | 0s 0.036624ms | 0s 0.011424ms | 4 bytes |
|
||
| 3 | 2 | 0s 0.018718ms | 0s 0.035885ms | 0s 0.013246ms | 9 bytes |
|
||
| 4 | 7 | 0s 0.060544ms | 0s 0.056277ms | 0s 0.019395ms | 36 bytes |
|
||
| 5 | 18 | 0s 0.220348ms | 0s 0.166593ms | 0s 0.036526ms | 76 bytes |
|
||
| 6 | 60 | 0s 0.773924ms | 0s 0.283423ms | 0s 0.063492ms | 186 bytes |
|
||
| 7 | 196 | 0s 3.00331ms | 0s 0.827344ms | 0s 0.163653ms | 546 bytes |
|
||
| 8 | 704 | 0s 13.142ms | 0s 3.68255ms | 0s 0.630044ms | 1 898 bytes |
|
||
| 9 | 2500 | 0s 50.9272ms | 0s 16.1929ms | 0s 2.35157ms | 6889 bytes |
|
||
| 10 | 9189 | 0s 204.031ms | 0s 87.1819ms | 0s 10.5841ms | 25302 bytes |
|
||
| 11 | 33896 | 0s 832.82ms | 0s 412.466ms | 0s 57.6399ms | 93711 bytes |
|
||
| 12 | 126759 | 3s 425.907ms | 1s 982.715ms | 0s 226.816ms | 350325 bytes |
|
||
| 13 | 476270 | 14s 570.595ms | 9s 945.511ms | 0s 972.036ms | 1327156 bytes |
|
||
| 14 | 1802312 | 56s 394.426ms | 41s 675.672ms | 4s 79.0436ms | 5035148 bytes |
|
||
| 15 | 6849777 | 258s 219.666ms | 223s 386.329ms | 16s 483.426ms | 19392417 bytes |
|
||
|
||
_File storing includes type checking and sorting all polyominoes before writing them to the file._
|
||
The files are compressed, they used to be about 5x as large.
|
||
|
||
Run it yourself by typing:
|
||
``xmake f -m release``
|
||
``xmake build bmark``
|
||
``xmake run bmark``
|
||
|
||
## Credits
|
||
|
||
Library used: [SFML 3](https://www.sfml-dev.org/).
|
||
Font used: [Press Start](https://www.zone38.net/font/#pressstart).
|
||
|
||
Inspired by other modern stacker games such as Techmino, jstris, tetr.io, etc.
|
||
This game isn't affiliated with any of them.
|
||
|
||
Special thanks to my friend [Simon](https://git.ale-pri.com/Persson-dev) who did most of the outside stuff (github actions, files compression, asset manager, xmake).
|
||
All the code in src/Common/, src/Utils/ and xmake/ comes from him.
|