So, @Nyeogmi and I have been tinkering with @Vanessa's PicoTetris. I've been giving it more and more mechanics inspired by Tetris: The Grand Master, and Nyeogmi has been finding ways to keep the game running at 60FPS despite the stuff I've done to it. So, together, we present: Extreme Tetrom! Immensely more TGM-like and 100% less trademark-infringing.
Updated 2022-3-31 - Ver. 3.5.1
Extreme Tetrom is a homage to Tetris: The Grand Master, Arika's series of Tetris games designed to become very difficult, providing new challenges to experienced players. It isn't a clone of any TGM game - it has its own difficulty curves, grading system, and surprises - but it should feel familiar to TGM players. Using a variation of Super Rotation System - the "normal" Tetris rotation system in modern games - it should feel familiar to Tetris players who have never played a TGM game, too!
If you're used to other versions of Tetris, watch out for the special rules around "floor kicks" (pieces getting popped up so they can rotate when they're on the ground) and lockdown. Floor kicks can't pop a piece back up into the air anymore, and the only way to reset the timeout before a piece locks down is to move it to a lower row than it's been in before - moving, rotating, or "climbing" the piece upwards won't help. Think fast!
Think very fast indeed - once gravity is instantly spawning pieces on the floor of the well, the game still finds ways to get faster and faster, reducing the delay between piece spawns and giving you less time to maneuver on the ground.
This is Extreme Tetrom. Can you master it?
Controls
L/R: Shift piece to the side
D: Soft drop
U: Hard drop
X,Z: Rotate
X+Z together: Hold piece
Modes
- Marathon: A classic mode for players who want a traditional Tetris experience. How quickly can you clear 150 lines? Game speed follows a curve similar to "standard" Tetris games.
- Infinite: Played for a high score, this mode also uses a standard Tetris speed curve - although it starts doing some very TGM-like things to try to force the game to end once you've been playing for a very long time...
- Grandmaster: Inspired by Arika's TGM series, this mode's speed fluctuates throughout play (until it reaches 20G, at which point it only gets harder). You're playing for a grade rather than a score; combos, clearing more lines at once, playing quickly, and making it further into the game will all help your grade. Can you survive to Level 1024? Can you achieve the grade of Grandmaster? There may be some surprises along the way...
- Intense: Inspired by TGM2+'s "T.A. DEATH" mode, and TGM3's "Shirase" mode, this mode starts at 20G and gets harder. The only thing you need to do is survive. How far can you make it? There is a last level. Can you get there?
- Grandmaster+: A more challenging variation of Grandmaster mode for people who want their game spiced up! Garbage rows will appear with increasing frequency throughout the game.
- Intense+: Similarly, this adds garbage rows to Intense.
- Extreme: For people who thought Intense+ was too easy. There is a last level, but I do not believe it is within human capability to get there. Prove me wrong.
- Lightning: A race to 40 lines - in the dark. You'll get a brief glimpse of your well every time you drop a piece. For a while, at least - then you'll have to clear a line to get that flash of light again...
- Invisible: And if you prefer your darkness to be absolute, here you go! The ghost piece is useful for tracing out the shape of the top of your well - right until the ghost piece itself disappears.
Notes
I hope folks have fun with this game! I have always been fascinated by the TGM series and have wanted a home release of the games in the USA; no luck yet, despite hints by Arika last November. I was impressed by Vanessa's "Pico Tetris 1.1" game, and saw its existing references to TGM - "secret grade" mode and unique piece entry sound effects per shape - but I wanted to go much further, and make it into a true homage to TGM inside Pico-8. There are a few rough edges here and there, but I consider myself to have succeeded.
If you'd like to add your own modes to the game, check out tab 5. Speed rules are pretty much spreadsheets. Note that the engine interpolates linearly between gravity speeds (but not between ARE/DAS/lockdown speeds - those are stepwise, and only at section breaks), so you'll need to add an explicit "endpoint" at the same speed if you want the game to hold a speed for a while. Gravity is measured in frames per line, so 0.05 is 20G mode. In the actual speed curves, I'm using 0.005 instead - 200G - because rounding errors made 20G not quite behave like 20G, but way-more-than-20G works just fine.
I'd love to see folks' highest grades in the GM modes and furthest sections in Intense and Extreme! If there are bugs I haven't caught, they might be in the late parts of Intense or anywhere past level 2 of Extreme - they seemed okay when I tested them with the difficulty turned way down, but I have not been able to genuinely test the higher levels of these modes with their real difficulty curves enabled. I'm no grandmaster.
Are you?
Changelog
I've built a shoot-em-up game engine inspired by Tyrian, a classic of the genre released for MS-DOS in 1995. I'm stuck for now on my lack of artistic skill for graphics, art, a title screen, a menu...
I'm a fan of declarative programming, so I've gone pretty far down that path. The base implementations of ships, guns, and bullets handle clamping to the screen space, autoscrolling, acceleration + momentum + drag, damage, regenerating shields, limited power from a generator (which your weapons and shields both draw from), moving in straight lines (for bullets), limited ammo (optional), and poorly-animated explosions.
I've implemented powerups for recovering health and switching weapons. Weapons can have limited ammo.
I've implemented a general engine for progressing through a level. A level is a table from "distance" to 0-argument functions, which will typically spawn enemies (or powerups, or start events). A level can be "frozen", which stops it from incrementing distance or executing new level events, allowing for boss fights and the like.
Collisions between player bullets and enemy ships are optimized by breaking the screen into a grid of regions; a ship only checks for collisions with bullets in the regions that its own hitbox intersects with. (Ship-ship collisions and enemy-bullet on player ship collisions are brute force because there is usually only one player ship and the overhead of calculating the grid is pure dead weight.)
I've got a bunch of documentation in tab 8 - I hope it's enough for folks to develop their own ships, weapons, and levels with! In retrospect, I think I need to document that ship and event lifespan is managed as follows: when an event, move(), hitship(), or hitbullet() call returns true (or true-ish), it's dropped.
The example level is just a sandbox I was testing stuff in. The graphics are very distant from anything I'd really want to release. But the engine is there, and I think it's cool, and I'd be really excited to see anyone else using it to design a shmup of their own. It's a Tyrian-inspired shmup engine that doesn't have quite enough pieces to be a shmup kit, but I hope to get there.




  4 comments