shiromino / shiromino Goto Github PK
View Code? Open in Web Editor NEWA fast-paced puzzle game with roots in the arcade.
License: Other
A fast-paced puzzle game with roots in the arcade.
License: Other
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:
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.
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.
As I like to fire up Shiromino for quick practice sessions, I'd love if I could use command-line options to right away get to my desired mode, e.g. ./Shiromino -mode g2_death -section 400 -view centered
.
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.
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 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 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
Consider adding an extra practice mode with additional features:
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:
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.
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.
eg:G3 Rule for G1 / G2 modes or vice versa.
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.
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.
game.ini
Suggestion: keep track of 1/2/3/4 line clears and display the information accordingly in replays.
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.
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.
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).
A nice feature to have would be to automatically convert replays to different formats:
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.
It's currently not possible to delete any saved replays.
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.
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.
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:
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.
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
In game modes that end at lv. 999, it sometimes happens that the background image for lv. 1000+ is shown at the very end. I can't reliably reproduce this bug, but I can provide screenshots if you want.
This one is only for the record to keep others from reporting it as I know it's a planned feature.
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).
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:
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
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.
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".
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.