Tromi: Difference between revisions
No edit summary |
add title screenshot |
||
(13 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{Infobox | {{Infobox | ||
| boxart = | | boxart = | ||
| caption = | | caption = | ||
| developer = mycophobia | | developer = mycophobia | ||
| composer = Jerry Martin | |||
| publisher = | | publisher = | ||
| platform = LÖVE | | platform = LÖVE | ||
| released = December 26, 2022 | | released = {{release | '''First release (Version 1)''' | December 26, 2022}} {{release | '''Official release (Version 2)''' | April, 08 2024}} | ||
| latestrelease = | | latestrelease = April 25, 2024 (Version 2.2) | ||
| sequel = | | sequel = | ||
| preview = 1 | | preview = 1 | ||
| playfield = 20 × 10 | | playfield = 20 × 10 | ||
| hold = | | hold = No | ||
| hard = | | hard = No | ||
| system = | | system = Tromi Rotation System | ||
| title-scrn = | | title-scrn = Tromi_title.jpg | ||
| ingame-scrn = Tromi_ingame.jpg | | ingame-scrn = Tromi_ingame.jpg | ||
}} | }} | ||
'''''Tromi''''' is a ''[[TGM]]'' | '''''Tromi''''' is a fan-made game developed by Mycophobia, inspired by ''[[TGM]]'' and built on the ''[[Cambridge]]'' source code. It blends an old-school aesthetic with a relaxing gameplay experience, while updating key elements to meet modern gameplay standards. | ||
== Gameplay == | |||
=== Gravity === | |||
[[Gravity]] increases uniformly, unlike [[TGM series]] games; however, it still depends on the current level. | |||
=== Level === | |||
Unlike in ''TGM'', where level has a unique implementation, level in ''Tromi'' is simply based on your current score. | |||
There are 10 levels in ''Tromi'', numbered from 0 to 9, and there are 6 small steps {{efn |''Tromi'', in behind the scene, actually recognize all 10 levels as 60 (internal) levels, but the speed table only contains 55 (internal) levels}} in every level (except level 9). | |||
=== IRS === | |||
{{main|IRS}} | |||
Normally a piece will appear in the rotation showed in the [[piece preview]]. With IRS, holding either the left or right rotation button will cause the piece to appear rotated 90 degrees. This allows the player a higher degree of freedom when placing pieces at higher game speeds. | |||
== Grading == | |||
{| class="wikitable floatright" | |||
|+ Grade list<br>(can be seen at "Name entry" screen) | |||
! style="background:#33D5FD" | Beginner || style="background:#00F59B" | Intermediate || style="background:#FFFF00" | Expert | |||
|- | |||
| bgcolor = "#76F9FB" | 19 kyu || bgcolor="#6DFFC2" | 9 kyu || bgcolor="#FFFF6D" | 1 Dan | |||
|- | |||
| bgcolor = "#76F9FB" | 18 kyu || bgcolor="#6DFFC2" | 8 kyu || bgcolor="#FFFF6D" | 2 Dan | |||
|- | |||
| bgcolor = "#76F9FB" | 17 kyu || bgcolor="#6DFFC2" | 7 kyu || bgcolor="#FFFF6D" | 3 Dan | |||
|- | |||
| bgcolor = "#76F9FB" | 16 kyu || bgcolor="#6DFFC2" | 6 kyu || bgcolor="#FFFF6D" | 4 Dan | |||
|- | |||
| bgcolor = "#76F9FB" | 15 kyu || bgcolor="#6DFFC2" | 5 kyu || bgcolor="#FFFF6D" | 5 Dan | |||
|- | |||
| bgcolor = "#76F9FB" | 14 kyu || bgcolor="#6DFFC2" | 4 kyu || bgcolor="#FFFF6D" | 6 Dan | |||
|- | |||
| bgcolor = "#76F9FB" | 13 kyu || bgcolor="#6DFFC2" | 3 kyu || bgcolor="#FFFF6D" | 7 Dan | |||
|- | |||
| bgcolor = "#76F9FB" | 12 kyu || bgcolor="#6DFFC2" | 2 kyu || bgcolor="#FFFF6D" | 8 Dan | |||
|- | |||
| bgcolor = "#76F9FB" | 11 kyu || bgcolor="#6DFFC2" | 1 kyu || bgcolor="#FFFF6D" | 9 Dan | |||
|- | |||
| bgcolor = "#76F9FB" | 10 kyu | |||
|} | |||
=== Account system === | |||
''Tromi'' has an account system like ''[[TGM3]]'', but it doesn't come with any security system such as PIN or password. That's why you doesn't need to register any account for the first time, just fill in your (initial) name to play (like in guest mode). | |||
=== Grading system === | |||
''Tromi'' has its own grading system, nominally based on the kyu/dan system of Go and Shogi, organized to correspond to specific points in the speed curve.<br> | |||
Both ''Tromi'' and ''TGM3'' have their own grading systems that are designed to track performance in multiple games, but the way they work is different. | |||
* In ''TGM3'', there is the [[TGM3#User accounts and exams|Promotion Exam and Demotion Exam]] | |||
* In ''Tromi'', there is the [[Tromi#Promotion Meter|Promotion Meter]] | |||
=== Promotion Meter === | |||
Promotion Meter acts like a progress bar that shows how likely you are to be promoted or demoted. It ranges from -2 (high chance of demotion) to +2 (high chance of promotion). New players starting at 0. | |||
After every game, your final score is compared to the table below based on your current grade. For every grade, there are 3 scores: Auto Promote, Promote, and Demote assigned to them. | |||
* If your score is higher than your grade's Promote point, Promotion Meter will be boosted by one. | |||
* On the other hand, if your score falls below your grade's Demote point, Promotion Meter will be dropped by one. | |||
Once the Promotion Meter goes above +2, you will be promoted, but if the Promotion Meter falls below -2, you will be demoted. Both cases will lead to the Promotion Meter going back to 0. | |||
There are two special cases: | |||
* If your score is between your grade's Promote point and Demote point, or your run is too short (dropped less than 50 blocks){{efn | Only available in version 2.2 and later, versions earlier than that still drop your Promotion Meter}}; nothing will happen. | |||
* If your score exceeds your grade's Auto Promote point, you will get the highest grade that your score qualifies for. | |||
{| class="wikitable" | |||
|+ Grade condition (required score) | |||
! Grade || Auto<br>Promote || Promote || Demote || Grade || Auto<br>Promote || Promote || Demote || Grade || Auto<br>Promote || Promote || Demote | |||
|- align = "center" | |||
| bgcolor="#33D5FD" | 19 kyu | |||
| bgcolor="#76F9FB" | 79,999|| bgcolor="#76F9FB" | 26,666|| bgcolor="#76F9FB" |-1 | |||
| bgcolor="#00F59B" | 9 kyu | |||
| bgcolor="#6DFFC2" | 346,666|| bgcolor="#6DFFC2" | 293,333|| bgcolor="#6DFFC2" |180,000 | |||
| bgcolor="#FFFF00" | 1 Dan | |||
| bgcolor="#FFFF6D" | 586,666|| bgcolor="#FFFF6D" | 533,333|| bgcolor="#FFFF6D" |420,000 | |||
|- align = "center" | |||
| bgcolor="#33D5FD" | 18 kyu | |||
| bgcolor="#76F9FB" | 106,666|| bgcolor="#76F9FB" | 53,333|| bgcolor="#76F9FB" |13,332 | |||
| bgcolor="#00F59B" | 8 kyu | |||
| bgcolor="#6DFFC2" | 373,333|| bgcolor="#6DFFC2" | 319,999|| bgcolor="#6DFFC2" |180,000 | |||
| bgcolor="#FFFF00" | 2 Dan | |||
| bgcolor="#FFFF6D" | 613,333|| bgcolor="#FFFF6D" | 559,999|| bgcolor="#FFFF6D" |420,000 | |||
|- align = "center" | |||
| bgcolor="#33D5FD" | 17 kyu | |||
| bgcolor="#76F9FB" | 133,333|| bgcolor="#76F9FB" | 79,999|| bgcolor="#76F9FB" |25,000 | |||
| bgcolor="#00F59B" | 7 kyu | |||
| bgcolor="#6DFFC2" | 399,999|| bgcolor="#6DFFC2" | 346,666|| bgcolor="#6DFFC2" |240,000 | |||
| bgcolor="#FFFF00" | 3 Dan | |||
| bgcolor="#FFFF6D" | 639,999|| bgcolor="#FFFF6D" | 586,666|| bgcolor="#FFFF6D" |480,000 | |||
|- align = "center" | |||
| bgcolor="#33D5FD" | 16 kyu | |||
| bgcolor="#76F9FB" | 159,999|| bgcolor="#76F9FB" | 106,666|| bgcolor="#76F9FB" |40,000 | |||
| bgcolor="#00F59B" | 6 kyu | |||
| bgcolor="#6DFFC2" | 426,666|| bgcolor="#6DFFC2" | 373,333|| bgcolor="#6DFFC2" |240,000 | |||
| bgcolor="#FFFF00" | 4 Dan | |||
| bgcolor="#FFFF6D" | 666,666|| bgcolor="#FFFF6D" | 613,333|| bgcolor="#FFFF6D" |480,000 | |||
|- align = "center" | |||
| bgcolor="#33D5FD" | 15 kyu | |||
| bgcolor="#76F9FB" | 186,666|| bgcolor="#76F9FB" | 133,333|| bgcolor="#76F9FB" |50,000 | |||
| bgcolor="#00F59B" | 5 kyu | |||
| bgcolor="#6DFFC2" | 453,333|| bgcolor="#6DFFC2" | 399,999|| bgcolor="#6DFFC2" |300,000 | |||
| bgcolor="#FFFF00" | 5 Dan | |||
| bgcolor="#FFFF6D" | 693,333|| bgcolor="#FFFF6D" | 639,999|| bgcolor="#FFFF6D" |480,000 | |||
|- align = "center" | |||
| bgcolor="#33D5FD" | 14 kyu | |||
| bgcolor="#76F9FB" | 213,333|| bgcolor="#76F9FB" | 159,999|| bgcolor="#76F9FB" |60,000 | |||
| bgcolor="#00F59B" | 4 kyu | |||
| bgcolor="#6DFFC2" | 479,999|| bgcolor="#6DFFC2" | 426,666|| bgcolor="#6DFFC2" |300,000 | |||
| bgcolor="#FFFF00" | 6 Dan | |||
| bgcolor="#FFFF6D" | 719,999|| bgcolor="#FFFF6D" | 666,666|| bgcolor="#FFFF6D" |480,000 | |||
|- align = "center" | |||
| bgcolor="#33D5FD" | 13 kyu | |||
| bgcolor="#76F9FB" | 239,999|| bgcolor="#76F9FB" | 186,666|| bgcolor="#76F9FB" |60,000 | |||
| bgcolor="#00F59B" | 3 kyu | |||
| bgcolor="#6DFFC2" | 506,666|| bgcolor="#6DFFC2" | 453,333|| bgcolor="#6DFFC2" |360,000 | |||
| bgcolor="#FFFF00" | 7 Dan | |||
| bgcolor="#FFFF6D" | 746,666|| bgcolor="#FFFF6D" | 693,333|| bgcolor="#FFFF6D" |540,000 | |||
|- align = "center" | |||
| bgcolor="#33D5FD" | 12 kyu | |||
| bgcolor="#76F9FB" | 266,666|| bgcolor="#76F9FB" | 213,333|| bgcolor="#76F9FB" |120,000 | |||
| bgcolor="#00F59B" | 2 kyu | |||
| bgcolor="#6DFFC2" | 533,333|| bgcolor="#6DFFC2" | 479,999|| bgcolor="#6DFFC2" |360,000 | |||
| bgcolor="#FFFF00" | 8 Dan | |||
| bgcolor="#FFFF6D" | 773,333|| bgcolor="#FFFF6D" | 719,999|| bgcolor="#FFFF6D" |540,000 | |||
|- align = "center" | |||
| bgcolor="#33D5FD" | 11 kyu | |||
| bgcolor="#76F9FB" | 293,333|| bgcolor="#76F9FB" | 239,999|| bgcolor="#76F9FB" |120,000 | |||
| bgcolor="#00F59B" | 1 kyu | |||
| bgcolor="#6DFFC2" | 559,999|| bgcolor="#6DFFC2" | 506,666|| bgcolor="#6DFFC2" |360,000 | |||
| bgcolor="#FFFF00" | 9 Dan | |||
| bgcolor="#FFFF6D" | 1,000,000|| bgcolor="#FFFF6D" | 719,999|| bgcolor="#FFFF6D" |540,000 | |||
|- align = "center" | |||
| bgcolor="#33D5FD" | 10 kyu | |||
| bgcolor="#76F9FB" | 319,999|| bgcolor="#76F9FB" | 266,666|| bgcolor="#76F9FB" |120,000 | |||
|} | |||
== Formulas == | |||
=== Level and step === | |||
: <math>\text{Level} = \lfloor \text{Score} \div 60,000 \rfloor</math> | |||
: <math>\text{Step} = \lfloor \text{Score}\div 10,000 \rfloor \bmod (\text{Level} \times 6) </math> | |||
Where: | |||
* <math>\lfloor \text{Score} \div 10,000 \rfloor</math> and <math>\lfloor \text{Score} \div 60,000 \rfloor</math> are rounded down. | |||
* Level is your current level (should only be in the range of 0 to 9). | |||
* Score is your current score. | |||
* Step is the remainder, which is your current step in your current level (should only be in the range of 1 to 6). | |||
=== Scoring === | |||
{| class="wikitable floatright" border="2" cellpadding="2" cellspacing="0" style="margin-left:1em; margin-right:1em; background:#f9f9f9; border:3px #999999 solid; border-collapse:collapse;" | |||
|+ Lines Bonus reward | |||
|- | |||
! Lines !! Reward (Points) | |||
|- | |||
| Double || 1,667 | |||
|- | |||
| Triple || 3,750 | |||
|- | |||
| Quad || 6,668 | |||
|- | |||
| Pentad || 8,335 | |||
|} | |||
: <math>\text{Efficiency} = (\text{Moves} \div \text{[Active frames]}) \times \text{(0 if placement results in hole)}</math> | |||
: <math>\text{Score} = (\text{[50 piece Avg. of Efficiency]} \times 1666 \times \text{Lines}) + \text{[Lines Bonus]}</math> | |||
Where: | |||
* Moves is the number of cells the piece moved (including manual moves, manual soft drops, and gravity). | |||
* Active frames is the number of frames since the block spawned until the piece locked down. | |||
* Lines is the number of lines you just cleared. | |||
* Lines Bonus is the extra bonus for clearing two or more lines. Look at the table on the right to calculate | |||
== Speed timings == | |||
{| | |||
|- | |||
<td> | |||
{| class="wikitable" border="2" cellpadding="2" cellspacing="0" style="margin-top:1em; margin-bottom:1em; background:#f9f9f9; border:3px #999999 solid; border-collapse:collapse;" | |||
|+ Dynamic value | |||
! style="background:#0DB2FF" |Level | |||
! style="background:#00FFB7" |Step | |||
! style="background:#BBBBBB" |[[Gravity]]<br>(G) | |||
! style="background:#FFA069" |[[ARE]]<br>(frame) | |||
! style="background:#CC88FF" |[[Lock delay|Lock]]<br>(frame) | |||
! style="background:#FFFF55" |[[DAS]]<br>(frame) | |||
! style="background:#0DB2FF" |Level | |||
! style="background:#00FFB7" |Step | |||
! style="background:#BBBBBB" |[[Gravity]]<br>(G) | |||
! style="background:#FFA069" |[[ARE]]<br>(frame) | |||
! style="background:#CC88FF" |[[Lock delay|Lock]]<br>(frame) | |||
! style="background:#FFFF55" |[[DAS]]<br>(frame) | |||
|- align = center | |||
| rowspan="6" bgcolor="#8AD2FF" | 0 | |||
| bgcolor = "#C8FFF6" | 1 | |||
|0.013 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| rowspan="6" bgcolor="#8AD2FF" | 5 | |||
| bgcolor = "#C8FFF6" | 1 | |||
|0.842 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 2 | |||
|0.015 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 2 | |||
|1.029 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 3 | |||
|0.016 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 3 | |||
|1.323 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 4 | |||
|0.018 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 4 | |||
|1.852 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 11 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 5 | |||
|0.021 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 5 | |||
|3.086 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 10 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 6 | |||
|0.025 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 6 | |||
|9.259 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 9 | |||
|- align = center | |||
| rowspan="6" bgcolor="#8AD2FF" | 1 | |||
| bgcolor = "#C8FFF6" | 1 | |||
|0.027 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| rowspan="6" bgcolor="#8AD2FF" | 6 | |||
| bgcolor = "#C8FFF6" | 1 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 2 | |||
|0.030 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 2 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 3 | |||
|0.033 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 3 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 19 | |||
| bgcolor = "#CCBBFF" | 28 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 4 | |||
|0.038 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 4 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 18 | |||
| bgcolor = "#CCBBFF" | 27 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 5 | |||
|0.043 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 5 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 17 | |||
| bgcolor = "#CCBBFF" | 26 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 6 | |||
|0.051 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 6 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 17 | |||
| bgcolor = "#CCBBFF" | 25 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| rowspan="6" bgcolor="#8AD2FF" | 2 | |||
| bgcolor = "#C8FFF6" | 1 | |||
|0.056 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| rowspan="6" bgcolor="#8AD2FF" | 7 | |||
| bgcolor = "#C8FFF6" | 1 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 16 | |||
| bgcolor = "#CCBBFF" | 24 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 2 | |||
|0.062 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 2 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 16 | |||
| bgcolor = "#CCBBFF" | 23 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 3 | |||
|0.070 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 3 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 15 | |||
| bgcolor = "#CCBBFF" | 23 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 4 | |||
|0.079 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 4 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 15 | |||
| bgcolor = "#CCBBFF" | 22 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 5 | |||
|0.092 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 5 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 14 | |||
| bgcolor = "#CCBBFF" | 21 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 6 | |||
|0.109 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 6 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 14 | |||
| bgcolor = "#CCBBFF" | 21 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| rowspan="6" bgcolor="#8AD2FF" | 3 | |||
| bgcolor = "#C8FFF6" | 1 | |||
|0.120 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| rowspan="6" bgcolor="#8AD2FF" | 8 | |||
| bgcolor = "#C8FFF6" | 1 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 14 | |||
| bgcolor = "#CCBBFF" | 20 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 2 | |||
|0.134 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 2 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 13 | |||
| bgcolor = "#CCBBFF" | 20 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 3 | |||
|0.152 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 3 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 13 | |||
| bgcolor = "#CCBBFF" | 20 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 4 | |||
|0.175 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 4 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 13 | |||
| bgcolor = "#CCBBFF" | 19 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 5 | |||
|0.206 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 5 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 13 | |||
| bgcolor = "#CCBBFF" | 19 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 6 | |||
|0.250 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| bgcolor = "#C8FFF6" | 6 | |||
|20 | |||
| bgcolor = "#FFD3AC" | 13 | |||
| bgcolor = "#CCBBFF" | 19 | |||
| bgcolor = "#FFFF88" | 8 | |||
|- align = center | |||
| rowspan="6" bgcolor="#8AD2FF" | 4 | |||
| bgcolor = "#C8FFF6" | 1 | |||
|0.281 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
| rowspan="6" bgcolor="#8AD2FF" | 9 | |||
| rowspan="6" bgcolor="#C8FFF6" | | |||
| rowspan="6" |20 | |||
| rowspan="6" bgcolor="#FFD3AC" | 12 | |||
| rowspan="6" bgcolor="#CCBBFF" | 18 | |||
| rowspan="6" bgcolor="#FFFF88" | 8 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 2 | |||
|0.319 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 3 | |||
|0.370 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 4 | |||
|0.441 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 5 | |||
|0.545 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
|- align = center | |||
| bgcolor = "#C8FFF6" | 6 | |||
|0.712 | |||
| bgcolor = "#FFD3AC" | 20 | |||
| bgcolor = "#CCBBFF" | 30 | |||
| bgcolor = "#FFFF88" | 12 | |||
|} | |||
</td> | |||
<td style="vertical-align: top; border: 3px; padding-left: 1em"> | |||
{| class="wikitable" | |||
|+ Fixed value | |||
! style="background:#0DB2FF" align = "center" |'''Mode''' | |||
! style="background:#00FFB7" align = "center" |'''Normal''' | |||
! style="background:#FFA069" align = "center" |'''20G training''' | |||
|- | |||
| ARR (frames) || align = "center" colspan="2"| 1 | |||
|- | |||
| Drop (G) || align = "center" colspan="2"| 1 | |||
|- | |||
| DAS cut (frames) || align = "center" colspan="2" | 0 | |||
|- | |||
| DAS (frames) || align = "center" | - || align = "center" | 8 | |||
|- | |||
| Lock (frames) || align = "center" | - || align = "center" | 99999999999 | |||
|- | |||
| Gravity (G) || align = "center" | - || align = center | 20 | |||
|- | |||
| ARE (frames) || align = "center" | - || align = "center" | 2 | |||
|} | |||
</td> | |||
|} | |||
== Rotation system == | |||
Tromi rotation uses standard Sega orientations and colors, with an additional kick system in the case of a failed basic rotation. Exactly one kick will be attempted, and this kick is selected in the following manner: | |||
If basic rotation fails, determine which rows and columns are blocked when the piece is rotated. Relevant rows and columns are as follows, numbered top-to-bottom and left-to-right: | |||
<div> | |||
<div style="float:right; width:30%;"> | |||
{| class="wikitable" | |||
|- | |||
! A !! B !! C !! D !! E !! F !! G | |||
|- | |||
| | |||
<playfield> | |||
XXXX | |||
.... | |||
.... | |||
.... | |||
</playfield> | |||
|| | |||
<playfield> | |||
.... | |||
.... | |||
.... | |||
XXXX | |||
</playfield> | |||
|| | |||
<playfield> | |||
.... | |||
X... | |||
.... | |||
.... | |||
</playfield> | |||
|| | |||
<playfield> | |||
.... | |||
.... | |||
X... | |||
.... | |||
</playfield> | |||
|| | |||
<playfield> | |||
.... | |||
..XX | |||
.... | |||
.... | |||
</playfield> | |||
|| | |||
<playfield> | |||
.... | |||
.... | |||
..XX | |||
.... | |||
</playfield> | |||
|| | |||
<playfield> | |||
.X.. | |||
.X.. | |||
.X.. | |||
.X.. | |||
</playfield> | |||
|} | |||
</div> | |||
<div style="margin-right: 50%;"> | |||
A. Row 1 (any of top row) | |||
B. Row 4 (any of bottom row, only applicable to vertical I) | |||
C. Row 2 + Column 1 (upper left) | |||
D. Row 3 + Column 1 (lower left) | |||
E. Row 2 + Column 3 or 4 (upper right) | |||
F. Row 3 + Column 3 or 4 (lower right) | |||
G. Column 2 (any of center column) | |||
</div> | |||
</div> | |||
The kick selected is determined in the following order of priority: | |||
1. If case A, C+E, C+F, or E+D, one space down | |||
2. If case D+F, one space up | |||
3. If case C and/or D, one space right | |||
4. If case E and/or F, one space left | |||
5. If case G and the rotated piece has a mino in the left column, one space right | |||
6. If case G and the rotated piece has a mino in the right column, one space left | |||
7. If case B, one space up (this is only possible with the vertical I) | |||
Case A mitigates the playfield having no invisible rows above it, in that if a piece is rotated from spawn position at the very top of the playfield, it will always try to kick down instead of anything else. | |||
Floorkicks will not allow for infinite lock delay resets as lock delay is only reset when a piece steps down lower than it has ever been. A side-effect is that after a floorkick the total lock delay will be shared for the cell the piece is on and the cell directly below it; one must drop the piece at least 2 cells down after a floorkick for the lock delay to reset. | |||
== Notes == | |||
{{notelist}} | |||
== External links == | == External links == | ||
* [https://mycophobia.org/tromi | * [https://mycophobia.org/tromi Home page and download] | ||
* [https://mycophobia.org/forums/viewtopic.php?t=29 Leaderboard] | |||
[[Category:Fan games]] | [[Category:Fan games]] |
Latest revision as of 17:10, 4 November 2024
Tromi | |
---|---|
Developer(s) | mycophobia |
Composer(s) | Jerry Martin |
Platform(s) | LÖVE |
Release |
|
Latest release | April 25, 2024 (Version 2.2) |
Gameplay info | |
Next pieces | 1 |
Playfield size | 20 × 10 |
Hold piece | No |
Hard drop | No |
Rotation system | Tromi Rotation System |
Tromi is a fan-made game developed by Mycophobia, inspired by TGM and built on the Cambridge source code. It blends an old-school aesthetic with a relaxing gameplay experience, while updating key elements to meet modern gameplay standards.
Gameplay
Gravity
Gravity increases uniformly, unlike TGM series games; however, it still depends on the current level.
Level
Unlike in TGM, where level has a unique implementation, level in Tromi is simply based on your current score.
There are 10 levels in Tromi, numbered from 0 to 9, and there are 6 small steps [a] in every level (except level 9).
IRS
- Main article: IRS
Normally a piece will appear in the rotation showed in the piece preview. With IRS, holding either the left or right rotation button will cause the piece to appear rotated 90 degrees. This allows the player a higher degree of freedom when placing pieces at higher game speeds.
Grading
Beginner | Intermediate | Expert |
---|---|---|
19 kyu | 9 kyu | 1 Dan |
18 kyu | 8 kyu | 2 Dan |
17 kyu | 7 kyu | 3 Dan |
16 kyu | 6 kyu | 4 Dan |
15 kyu | 5 kyu | 5 Dan |
14 kyu | 4 kyu | 6 Dan |
13 kyu | 3 kyu | 7 Dan |
12 kyu | 2 kyu | 8 Dan |
11 kyu | 1 kyu | 9 Dan |
10 kyu |
Account system
Tromi has an account system like TGM3, but it doesn't come with any security system such as PIN or password. That's why you doesn't need to register any account for the first time, just fill in your (initial) name to play (like in guest mode).
Grading system
Tromi has its own grading system, nominally based on the kyu/dan system of Go and Shogi, organized to correspond to specific points in the speed curve.
Both Tromi and TGM3 have their own grading systems that are designed to track performance in multiple games, but the way they work is different.
- In TGM3, there is the Promotion Exam and Demotion Exam
- In Tromi, there is the Promotion Meter
Promotion Meter
Promotion Meter acts like a progress bar that shows how likely you are to be promoted or demoted. It ranges from -2 (high chance of demotion) to +2 (high chance of promotion). New players starting at 0.
After every game, your final score is compared to the table below based on your current grade. For every grade, there are 3 scores: Auto Promote, Promote, and Demote assigned to them.
- If your score is higher than your grade's Promote point, Promotion Meter will be boosted by one.
- On the other hand, if your score falls below your grade's Demote point, Promotion Meter will be dropped by one.
Once the Promotion Meter goes above +2, you will be promoted, but if the Promotion Meter falls below -2, you will be demoted. Both cases will lead to the Promotion Meter going back to 0.
There are two special cases:
- If your score is between your grade's Promote point and Demote point, or your run is too short (dropped less than 50 blocks)[b]; nothing will happen.
- If your score exceeds your grade's Auto Promote point, you will get the highest grade that your score qualifies for.
Grade | Auto Promote |
Promote | Demote | Grade | Auto Promote |
Promote | Demote | Grade | Auto Promote |
Promote | Demote |
---|---|---|---|---|---|---|---|---|---|---|---|
19 kyu | 79,999 | 26,666 | -1 | 9 kyu | 346,666 | 293,333 | 180,000 | 1 Dan | 586,666 | 533,333 | 420,000 |
18 kyu | 106,666 | 53,333 | 13,332 | 8 kyu | 373,333 | 319,999 | 180,000 | 2 Dan | 613,333 | 559,999 | 420,000 |
17 kyu | 133,333 | 79,999 | 25,000 | 7 kyu | 399,999 | 346,666 | 240,000 | 3 Dan | 639,999 | 586,666 | 480,000 |
16 kyu | 159,999 | 106,666 | 40,000 | 6 kyu | 426,666 | 373,333 | 240,000 | 4 Dan | 666,666 | 613,333 | 480,000 |
15 kyu | 186,666 | 133,333 | 50,000 | 5 kyu | 453,333 | 399,999 | 300,000 | 5 Dan | 693,333 | 639,999 | 480,000 |
14 kyu | 213,333 | 159,999 | 60,000 | 4 kyu | 479,999 | 426,666 | 300,000 | 6 Dan | 719,999 | 666,666 | 480,000 |
13 kyu | 239,999 | 186,666 | 60,000 | 3 kyu | 506,666 | 453,333 | 360,000 | 7 Dan | 746,666 | 693,333 | 540,000 |
12 kyu | 266,666 | 213,333 | 120,000 | 2 kyu | 533,333 | 479,999 | 360,000 | 8 Dan | 773,333 | 719,999 | 540,000 |
11 kyu | 293,333 | 239,999 | 120,000 | 1 kyu | 559,999 | 506,666 | 360,000 | 9 Dan | 1,000,000 | 719,999 | 540,000 |
10 kyu | 319,999 | 266,666 | 120,000 |
Formulas
Level and step
Where:
- and are rounded down.
- Level is your current level (should only be in the range of 0 to 9).
- Score is your current score.
- Step is the remainder, which is your current step in your current level (should only be in the range of 1 to 6).
Scoring
Lines | Reward (Points) |
---|---|
Double | 1,667 |
Triple | 3,750 |
Quad | 6,668 |
Pentad | 8,335 |
Where:
- Moves is the number of cells the piece moved (including manual moves, manual soft drops, and gravity).
- Active frames is the number of frames since the block spawned until the piece locked down.
- Lines is the number of lines you just cleared.
- Lines Bonus is the extra bonus for clearing two or more lines. Look at the table on the right to calculate
Speed timings
|
|
Rotation system
Tromi rotation uses standard Sega orientations and colors, with an additional kick system in the case of a failed basic rotation. Exactly one kick will be attempted, and this kick is selected in the following manner:
If basic rotation fails, determine which rows and columns are blocked when the piece is rotated. Relevant rows and columns are as follows, numbered top-to-bottom and left-to-right:
A | B | C | D | E | F | G | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
A. Row 1 (any of top row) B. Row 4 (any of bottom row, only applicable to vertical I) C. Row 2 + Column 1 (upper left) D. Row 3 + Column 1 (lower left) E. Row 2 + Column 3 or 4 (upper right) F. Row 3 + Column 3 or 4 (lower right) G. Column 2 (any of center column)
The kick selected is determined in the following order of priority:
1. If case A, C+E, C+F, or E+D, one space down 2. If case D+F, one space up 3. If case C and/or D, one space right 4. If case E and/or F, one space left 5. If case G and the rotated piece has a mino in the left column, one space right 6. If case G and the rotated piece has a mino in the right column, one space left 7. If case B, one space up (this is only possible with the vertical I)
Case A mitigates the playfield having no invisible rows above it, in that if a piece is rotated from spawn position at the very top of the playfield, it will always try to kick down instead of anything else.
Floorkicks will not allow for infinite lock delay resets as lock delay is only reset when a piece steps down lower than it has ever been. A side-effect is that after a floorkick the total lock delay will be shared for the cell the piece is on and the cell directly below it; one must drop the piece at least 2 cells down after a floorkick for the lock delay to reset.