Kistaro [Lexaloffle Blog Feed]https://www.lexaloffle.com/bbs/?uid=12815 Extreme Tetrom <p>So, <a href="https://www.lexaloffle.com/bbs/?uid=61658"> @Nyeogmi</a> and I have been tinkering with <a href="https://www.lexaloffle.com/bbs/?uid=36276"> @Vanessa</a>'s <a href="https://www.lexaloffle.com/bbs/?tid=33775">PicoTetris</a>. 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.</p> <p><em>Updated 2022-3-31 - Ver. 3.5.1</em></p> <p> <table><tr><td> <a href="/bbs/?pid=108108#p"> <img src="/bbs/thumbs/pico8_extreme_tetrom-9.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=108108#p"> extreme_tetrom</a><br><br> by <a href="/bbs/?uid=12815"> Kistaro</a> <br><br><br> <a href="/bbs/?pid=108108#p"> [Click to Play]</a> </td></tr></table> </p> <p>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 &quot;normal&quot; Tetris rotation system in modern games - it should feel familiar to Tetris players who have never played a TGM game, too!</p> <p>If you're used to other versions of Tetris, watch out for the special rules around &quot;floor kicks&quot; (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 &quot;climbing&quot; the piece upwards won't help. Think fast!</p> <p>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.</p> <p>This is Extreme Tetrom. Can you master it?</p> <h2>Controls</h2> <p>L/R: Shift piece to the side<br /> D: Soft drop<br /> U: Hard drop<br /> X,Z: Rotate<br /> X+Z together: Hold piece</p> <h2>Modes</h2> <ul> <li><strong>Marathon:</strong> 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 &quot;standard&quot; Tetris games.</li> <li><strong>Infinite:</strong> 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...</li> <li><strong>Grandmaster:</strong> 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...</li> <li><strong>Intense:</strong> Inspired by TGM2+'s &quot;T.A. DEATH&quot; mode, and TGM3's &quot;Shirase&quot; mode, this mode <em>starts</em> at 20G and gets harder. The only thing you need to do is <em>survive.</em> How far can you make it? <em>There is a last level.</em> Can you get there?</li> <li><strong>Grandmaster+:</strong> 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.</li> <li><strong>Intense+:</strong> Similarly, this adds garbage rows to Intense.</li> <li><strong>Extreme:</strong> 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.</li> <li><strong>Lightning:</strong> 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...</li> <li><strong>Invisible:</strong> 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.</li> </ul> <h2>Notes</h2> <p>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 &quot;Pico Tetris 1.1&quot; game, and saw its existing references to TGM - &quot;secret grade&quot; 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.</p> <p>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 &quot;endpoint&quot; 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.</p> <p>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.</p> <p>Are you?</p> <h2>Changelog</h2> <p><div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;"></p> <h3>Version 3.5.1 (2022-3-31)</h3> <p>Fixes bugs in saving and loading options (some options were swapped in serialize/deserialize, which is why you might have noticed them trading off on every cartridge reboot; oops).</p> <h3>Version 3.5 (2022-3-30)</h3> <p>New option: careful hard drops. If careful hard drops are enabled, hard drops don't happen while the left or right key is pressed. (If you &quot;roll&quot; from a side to the up-diagonal to straight up, the hard drop will happen in the frame where you release the side key.) This should help reduce erroneous hard drops when using a gamepad (or, say, the control pad built into an RG351V), although it won't help you if you're accidentally hitting straight up first. (It's useful for imprecise gamepads that tend to hit up plus a side at the same time, though.)</p> <p>New piece randomizer: after creating a sequence, it swaps pieces forwards in the sequence if it's a repeat from the least three pieces - but it doesn't check if the swapped-backwards piece itself is also a duplicate. It does three passes of this. This helps spread out clumps of the same piece, which feels like a really unpleasant way to lose, while preserving the generally less-predictable nature of the 3-bag randomizer. The real TGM randomizer is more aggressively non-cluster-y (history 4, 6 redraws) but doesn't let you make predictions about the future (not a bag randomizer). Nothing wrong with the TGM approach, I just continue to have a design goal of &quot;not <em>quite</em> TGM&quot;.</p> <h3>Version 3.4 (2022-3-29)</h3> <p>New option: the bleepy little tune that plays when a piece enters can now be selected either by the shape of the piece that just entered or by the <em>next</em> piece. TGM's behavior is the <em>next</em> piece! Players without save data will get TGM's behavior, but existing players will get Extreme Tetrom's previous behavior (which is to pay a sound for the piece currently entering). This can be freely changed in options.</p> <h3>Version 3.3 (2022-3-11)</h3> <p>Hold piece is faded when hold is unavailable. Hold for first piece is fixed. Fixes DAS bug introduced in 3.2.</p> <h3>Version 3.2 (2022-3-11)</h3> <p>Pieces now spawn after ARE rather than before; now the &quot;thud&quot; sound effects are audible! This means the &quot;next&quot; piece indicator doesn't update until after the new piece is actually in play, which is less confusing (and also how TGM handles it) since there isn't that moment where the piece yet-to-enter is not actually shown as &quot;next&quot;.</p> <p>This also includes &quot;real&quot; IHS/IRS. The original ARE behavior existed to support rotation/hold while still in ARE; now Initial Hold / Initial Rotation behaves like TGM. Due to control limitations, there is no way to use both initial hold and initial rotation for the same spawn.</p> <p>Rotation never auto-repeats now.</p> <p>If a piece cannot move horizontally when left or right is pressed, then as long as that button is held, it will move at the first opportunity. This is important when gravity is close to 1G: if you attempt to move a piece sideways into a small slot, if you're too early but not early by at least the DAS charge, you can miss the slot because the piece tried to move (and failed), then does not try again until the DAS delay expires. Now, if a piece fails to move horizontally, it will bypass the DAS delay and move on the first frame it is able to do so, as long as the button is still being held. (It will not continue to move horizontally until the DAS delay expires. DAS delay is being counted for the entire duration of this hold, so if a piece is stuck long enough to consume the entire DAS delay, the piece will immediately continue to move.) This behavior does not apply to rotation.</p> <h3>Version 3.1 (2022-3-6)</h3> <p>Initial public release.<br /> </div></div></div></p> https://www.lexaloffle.com/bbs/?tid=46857 https://www.lexaloffle.com/bbs/?tid=46857 Sun, 06 Mar 2022 02:01:24 UTC Tyrian-inspired shmup engine <p> <table><tr><td> <a href="/bbs/?pid=104614#p"> <img src="/bbs/thumbs/pico8_shmupengineprototype01-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=104614#p"> Generic Shoot-Em-Up Engine 0.1</a><br><br> by <a href="/bbs/?uid=12815"> Kistaro</a> <br><br><br> <a href="/bbs/?pid=104614#p"> [Click to Play]</a> </td></tr></table> Hey all,</p> <p>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...</p> <p>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.</p> <p>I've implemented powerups for recovering health and switching weapons. Weapons can have limited ammo.</p> <p>I've implemented a general engine for progressing through a level. A level is a table from &quot;distance&quot; to 0-argument functions, which will typically spawn enemies (or powerups, or start events). A level can be &quot;frozen&quot;, which stops it from incrementing distance or executing new level events, allowing for boss fights and the like.</p> <p>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.)</p> <p>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.</p> <p>The example level is just a sandbox I was testing stuff in. The graphics are <em>very</em> 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.</p> https://www.lexaloffle.com/bbs/?tid=46077 https://www.lexaloffle.com/bbs/?tid=46077 Sun, 09 Jan 2022 05:09:22 UTC