Coder Social home page Coder Social logo

shiromino's Introduction

shiromino

build

shiromino is a portable, free and open-source puzzle game made possible by a small team of volunteers. Unlike many other games of its kind, shiromino doesn't stop at tetrominoes, but also lets you experience your favorite arcade titles with pentominoes.

Download

Official packages

This list features official packages that we maintain. This allows you to install shiromino using your favorite package manager.

Repository Package name
Arch User Repository (AUR) shiromino
Arch User Repository (AUR) shiromino-git

GitHub releases

Our relases also come with pre-built Windows executables that you can download straight from GitHub.

Source code

If you'd like to compile the game from source, that's fine, too. It only takes a moment and is a well-documented process for all major platforms.

Documentation

Demo

shiromino.mp4

Related work

shiromino's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

shiromino's Issues

G2 Master: Add practice for fading roll and m-roll

It is not possible to practice the fading roll and m-roll in G2 Master. It should be straightforward to add them. Right now, it is possible to pick a starting level in 100-level increments up to 900. This selector could be extended by adding a starting point called "fading" and one called "invisible".

Decide on the platforms we want to cover

We currently support OpenGL for an improved feature set, but we haven't decided on the set of platforms we'd like to cover with this repository. There's a PS Vita port of the game somewhere (which doesn't look GPU-accelerated), and there are also plans to port the game to the Nintendo 3DS.

Availability matrix

Platform Metal OpenGL Vulkan
Linux No Yes Yes
macOS Yes Yes¹ Yes²
Windows No Yes Yes
PlayStation Vita No No No
Nintendo 3DS No No No

¹ via MoltenGL

² via MoltenVK

It currently doesn't look like we're going to support the PlayStation Vita or the Nintendo 3DS in this repository, but more like this work has to happen in forks that would port GPU-related code to their specific target platform.

The PlayStation Vita situation

The only way in the homebrew scene to employ the PlayStation Vita's GPU currently is to use gxmfun, which is its own little GPU API. There's also software implementations of OpenGL, but they're probably not worth pursuing for us, given that we should strive for at least 60 fps (see video linked above, which is pretty laggy).

The Nintendo 3DS situation

The Nintendo 3DS actually has a GPU-accelerated OpenGL library via Caelina or ctrgl. The problem with those is that they're unmaintained, very incomplete, and only cover a subset of OpenGL 1.x, which puts very hard limits on all the other platforms if we were to set that as the lowest common denominator.

Currently, it looks like we could achieve the most with the lowest effort by replacing OpenGL with Vulkan and by letting forks cover less dominant platforms.

/cc @nightmareci

Play custom audio/enable looping tracks

Another great Texmaster feature is that audio tracks can have a looping point, i.e. it is possible to define at which point (anywhere in the file) playback should continue once the end of the file was reached. This would be a nice feature to have and would go well with your planned feature for themes (#21).

DAS will always be canceled for some gamepads once axes are touched

When I enable the live input view with F8 and then press and hold the d-pad on my XBOX 360 gamepad, the button indicators light up for a fraction of a second, and the game does honor the press. But despite me continuing to hold the button, the indicator switches off after that small fraction of a second and ignores the fact that I'm still holding the button.

This might be related to how DAS is implemented, because it feels like as soon as DAS would normally trigger, the input is canceled and ignored. There's a reliable way to reproduce this on my end, and I have verified that it works even for 60 Hz, so this doesn't seem to be a refresh rate problem:

As soon as I touch my controllers' axes 0 or 1 ever so slightly (left analog stick, which is right above the d-pad that I play with), the buggy behavior starts. There's no way to get rid of it, you have to restart the game.

If I'm very attentive not to touch the analog stick, everything works as intended.

Practice Mode: garbage lines, additional lag

Consider adding an extra practice mode with additional features:

  • garbage lines (selectable number of lines of garbage -- zero to ten?; also variable difficulty, i.e. one whole per line up to really messy stacks)
  • add additional lag (Shiromino is more responsive than the arcade originals, so having an option to increase lag may make it a better practice tool for the arcade originals)
  • selectable seed for garbage/piece sequence (the seed is already recorded by the game and printed to the CLI, so this would be relatively straightforward to add)

Out-of-bounds writes can make audio fail

The volume is currently determined like this:

MIX_MAX_VOLUME * (volume / 100.0f) * (settings.sfxVolume / 100.0f) * (settings.masterVolume / 100.0f)
^^^^^^^^^^^^^^   ^^^^^^^^^^^^^^^^^   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 base value           > 1                        <= 1                              <= 1
                caused by OOB write

Export saved games to video/fumen/replay file

A nice feature to have would be to automatically convert replays to different formats:

  • video (x265?)
  • fumen
  • replay file (essentially export the database entry; for easy data exchange with other users)

Support widescreen backgrounds/higher resolutions

Right now, the game runs in 640x480. If higher resolutions are too much of a hassle to support, then you may want to consider supporting 854 x 480. I don't mind the low resolution, but it would be nice to fill the screen real estate of a widescreen monitor. By the way, I've encountered a bug in fullscreen: the screen is simply stretched, which leads to a distorted image. This only affects external monitors when running on a laptop.

G1 seed generation may be faulty

During longer game sessions, it happens that I encounter one particular starting piece sequence in seemingly regular intervals (it's the same few pieces). Thus, it may be that the RNG is less random than intended. I know that this is a very vague bug report. If you're interested in investigating it, I may be able to record gameplay to corroborate this point. In any case, even in long play sessions on the game that inspired this mode, I can't recall ever recognizing a sequence of five or six pieces.

It is entirely possible that I'm wrong and that everything works as intended as this could just be a coincidence, just like getting ten heads in a row with a coin doesn't prove that the coin is loaded. Yet, it's entirely possible that the entropy source for the RNG isn't random enough.

The default controls are not intuitive and fail on non-QWERTY keyboards

The default game.ini makes assumptions about how the keysyms are laid out on the keyboard, making the controls pretty wonky on machines that don't use QWERTY layouts.

We should probably default to keycodes instead and also recognize keysyms to make it easier to set your controls.

  • Recognize both keysyms and keycodes in game.ini
  • Default to keycodes, not keysyms
  • Add a means to provide more than one binding for a given control
  • Bind WASD and arrow keys to make the controls more accessible to new users

Big Master: Blocks falling through frame

For a while, I practiced Big Master at 900+. When you reach lv. 999, blocks start falling through the frame.

Side note: Big Master should probably be called G2 Big Master.

Have a local hi score table

It's always nice to see a summary of one's best times, so having top3/5/10 results for each mode would be quite nice. This data can be easily extracted from the database. In fact, the replay selector sorts results from best to worst, separated by mode, already anyway.

Make selected mode always obvious in screenshot

I sometimes take screenshots of my games. However, the G1 modes are ambiguous. Just from looking at a screenshot, it is not possible to determine if a game was played in G1 Master or G1 20g as both frames are grey. I therefore suggest modifying the frame for G1 20G. Gold would be a choice in line with the aesthetics of the game that inspired this mode, which turns the timer golden in 20G, Alternative, a text label could be added. My preference would be to use a unique color for the frame, though.

Document grading criteria of Pentomino C mode

The conditions of reaching GM in Pentomino C are not documented and should be added to the readme file. Of course, I'm assuming that this grade has been implemented (if not, it should be added because a primary reason why people play those games is to get validation from a machine).

Safely handle ESC right before topping out

Gameplay is only recorded if the game tops out. However, it can easily happen that the player hits ESC a fraction before actually topping out. This means that no replay of the current game will be saved, which may not be intended. Thus, as a workaround, consider adding a delay, e.g. if the game is very close to topping out (check if the spawning next piece would collide with the stack as that's a game over), intercept the ESC keypress and then let the game top out before you allow the user to exit.

Automatically release portable builds

Most users have no clue how to compile things, and we shouldn't force them to learn it just to play this game. There should be a means to download ready-to-go portable builds that require no installation.

We should target all major operating systems:

  • Linux
  • macOS
  • Windows

G2 Death: Series of 5 mode

I'm not sure how interesting this would be, but as 'Series-of-5" is a somewhat popular way of playing G2 Death, this could be it's own mode, maybe as a flag (select 'G2 Death', then hit left to activate this mode). Then, the game keeps track of the results of your last five games (sum + individual game results). This mode should just start one game after another, without exiting to the main menu (cf. #29), i.e. if you exit to the main menu, the game ends and your series is reset to 0.

Show time delta in replays between current and best game

This is related to #38: it would be neat to have the replay screen show, per section, the time difference between the current game and the best game of the same mode, e.g.:
[section] [section time] [total time] [difference]

...and of course show a row with the totals at the end

Add G3 Master with Exams

This one is only for the record to keep others from reporting it as I know it's a planned feature.

Improve display mode selection (F8)

It is possible to cycle through various display modes with F8 but only when a game or replay is active. I would suggest the following:

  • Make it possible to select a default mode in the settings / .ini file
  • Remember the last selected mode (i.e. make it the default)

These could be implemented independently, e.g.

default_display_mode = center
remember_last_used_display_mode = false

Background: I currently practice G2 Death 400, and my preferred view is a centered playfield. Currently, I have to start the game and throw away one run to set the display mode I want. This would of course be trivial if it was a one-off occurrence, but if you like to fire up Shiromino for a quick practice session several times a day, this feels a bit tedious.

Add shortcut to restart current mode

One of the best aspects of Shiromino is that the number of keypresses between launching the app and starting to play a game is minimal. Yet, I find it disruptive to have to hit ESC after topping out or completing a game. This is a rather awkward hand motion and if you're practicing a very fast sequence, e.g. G2 Death 400, a practice run may only last a little while, so you'll be doing it a lot.

In order to minimize the downtime that is currently foisted on the player, I suggest adding a shortcut that makes it possible to start a new game with the current settings without having to return to the main menu, e.g. if you just topped at in a G2 Death 400 practice run, you hit that shortcut and you can play again right away.

Here are two ideas:

  1. Display a menu that says, e.g.
    A: Return to main menu
    B: Restart current mode
    .. where A, B of course map to the rotation buttons, not to letters on the keyboard.

  2. Keep the current behavior (ESC to quit), but add a shortcut like A + B + C or even just A + B or B + C to reset. This is only valid input when the game has ended.

Personally, I'd prefer a solution that didn't use additional on-screen text. This feature would arguably only be really valuable for users who seriously practice with Shiromino, not to anyone who plays the occasional G1 game. For users in the former category, we can probably expect that they read the manual (cf. #27).

On a related note, I think using ESC to return to the menu as the only option is not user-friendly. I think that the user experience would be much improved if you'd never have to lift your hands off your keyboard/stick once you started Shiromino.

Add 'infinite' practice session

One of the nicest features of Texmaster is that it is possible to set a flag called infinite for practice. This allows you to set a starting point, e.g. G2 Master 900, but the level never increases, meaning that you can practice endurance. I suggest adding a similar flag to Shiromino. It would be great if there was also a separate level counter, i.e. freeze the regular level counter at the selected starting level, but have a separate counter that keeps track of how many levels you've survived (you may want to use a more generous limit, e.g. 9999 or 99999 or no limit at all).

You could modify the GUI like this:

  • keep current level selector
  • add a separate field to the right that flip between infinite on and off (default: off)

e.g. the user sees:
G2 Master [900] [infinite]

Navigating between the mode (G1...G3) is done with up/down. You reach the selector via right and once the level is highlighted, you use up/down to make your choice. In order to move on to the field for the infinite option, you hit right again and use up/down to toggle this option.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.