Log In  


Cart #teramom-2 | 2019-03-06 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
108

Cart #teramom-1 | 2019-02-17 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
108

Cart #teramom-0 | 2019-02-07 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
108

About

Tera: Mind Over Matter is a modern puzzle action game about dropping blocks of different shapes to clear lines. The game has a rapid difficulty curve that emphasizes speed and accuracy. Get as many Teras as you can!

Controls

Left/right - shift pieces left and right
Down - soft drop
Up - hard drop (locking behavior can be changed in options)
Z/X - rotate pieces (direction can be changed in options)
Z+X - hold piece

Changelog

v1.2 | 3/5/19

  • Don't reset key repeat for left/right shift inputs when placing a Teramino

v1.1 | 2/17/19

  • Fixed incorrect spawn delay curve which caused pieces to stop spawning at high levels
  • Score display is no longer limited to 4 digits
  • Time display is now minutes:seconds

v1.0 | 2/7/19

  • Initial release

Source

108


This is an excellent version of Tetri -- I mean Tera. Does this have any relation to that Tetris Effect remake from a little bit ago?


nope! but i did play that


Really nice and smooth. The particle effects when a block is dropped is a neat touch. I am still screwed because the game I learned how to play on used Up as the rotate key.


2

Best version of Tera I have ever played. I can see my reflection in the polish on this game. Like, every little detail just makes this a joy to play. This cart is making me wish there was a solid way to play pico8 carts in a handheld. Bravo!!


1

@paloblancogames I've been playing this on the GameShell by ClockWorkPi and it works great! Awesome job @tesselode.


I keep wanting to add a second game mode to this, but I'm not sure what it should be. Should it be some sort of speedrun mode? If so, what score should it be played to? Or does anyone else have a more interesting idea?


@tesselode perhaps "Clear x number of lines within a time constraint"?


1

I have been looking for something precisely like this for a long time. Quite frankly, I'm speechless. It's pretty much perfect!

As for new modes, however, might I suggest a 150-line Marathon mode, or a 3-minute Sprint mode, like some other modern games of the 4-piece block stacking variety?


Just uploaded v1.1 with some minor UI improvements and a pretty important bugfix.

I'm still thinking about a second mode! Not sure what I want to do, or if I'll even implement a second mode. I started experimenting a bit tonight.


1

I like the idea of a time attack mode, where a timer is constantly ticking down and you get time back by making lines.


1

This is my favorite Tetris on PICO-8! Looks great, plays well (especially with the much appreciated hold function), and has a bumpin soundtrack.


thank you!


I can't stop playing! This is my high score :D


holy heck! you gotta record a video so i can see this in action



very nice! i'd like to apologize for the steep difficulty curve :P


I actually like it difficult, although I seem to get messed up around the 10 minute mark, where I can't auto shift pieces sometimes and then they lock very quickly, and one mistake pretty much dooms me and I can't recover. I don't know if this is by design, I resort to tapping each shift and constantly doing so to avoid locking just to be safe.


yeah, something seems off about the key repeat. i need to investigate that



what !!!!!


1

Really nice implementation! (although I'm terrible at it no matter how it's called)


1

Amazing soundtracks!


thank you~!


Fantastic game! Gets very difficult very fast, but I really love how perfectly it captures... the copyrighted other game, down to how it controls and how it feels.

However, I do feel the input problems that joseph3000 talked about. I think it's from the btnp() function, and how it works. When you hold down one key, the btnp() repeat timer starts counting. When you press two keys at the same time, the btnp() repeat timer resets to make sure that both the btnp()s become true at the same time. This cart is a great example of what I'm (trying to) talk about. If you try to press two buttons at the same time, they line up with each other.

I think this is intentional, to make weird input issues on slower games less of a problem. To fix this, you may have to straight-up overwrite the btnp() function.

Still, even with these input issues, (more caused by PICO-8's function than your coding) this really is the definitive PICO-8 clone of tetr- err... game involving falling pieces made up of four boxes that are affected by slowly increasing gravity.


Ahhh...yes, I thought it might have to do with btnp(), but wasn't sure how exactly until seeing the pad test. It must be when I'm holding shift before next piece (to beat DAS) and then pressing rotate; at super high speeds this effectively cancels my auto-shift and the piece locks where it insta-drops.


oh shit, yeah i can fix that. please bug me if i don't get an input patch out in the next couple days!


ok, i just released an update that removed some vestigial code that was making the inputs stiffer than they needed to be. @joseph3000 @TheV360 how does this feel to you?


I think the stickiness problem is gone...but I seem to have another issue now! Maybe this is a consequence of whatever input changes you made? Sometimes when I rotate a piece, it double-rotates, and therefore I mess up. This only happened sometimes in the previous version, but now seems to happen a lot. I always thought it was my controller at first, but maybe it has to do with the built-in input repeating?

I think holding rotate only counting as one input might help!


The input rotation just uses btnp, no custom handling there. Are you finding yourself holding down the rotation buttons?


Hmm...ok then. I don't hold rotation, but it's definitely double rotating on occasion when I press. I'll try and figure out what I'm doing when it happens.


I tried to fix the btnp() issue by remaking btnp() from scratch. It's not a perfect fix, but here's my code.

___btnp={pause = 8, old=btnp}
do
 local b, p
 for p=0,1 do
  ___btnp[p]={}
  for b=0,5 do
   ___btnp[p][b]=0
  end
 end
end
function update_btnp() -- run this every frame. if 30fps, halve the ___btnp.pause value.
 -- b: buttons, p: players
 local b, p
 for p=0,1 do
  if(not ___btnp[p])___btnp[p]={}
  for b=0,5 do
   if btn(b, p) then
    if not ___btnp[p][b] then
     ___btnp[p][b]=-___btnp.pause
    end
     ___btnp[p][b]+=1
   else
    ___btnp[p][b]=false
   end
  end
 end
end
function btnp(i, p)
 p=p or 0
 return ___btnp[p][i] and ___btnp[p][i]~=1 and ___btnp[p][i]%___btnp.pause==1
end

@TheV360 are you having the double rotation issue as well?


1

Awesome! It's like a modern tetris (with hold and ghost piece) but with the retro aesthetic of NES tetris.
I also like the steep difficulty curve which decreases the average run time (It usually takes 9~10 minutes for me to get to 1000 points).


I've been playing a lot, trying to figure out what it is I'm doing to cause the double rotation. I honestly don't know, sometimes I just press only rotate and it double rotates, even at the start when things are quiet still. Maybe it's just my controller, or how PICO-8 runs on my Mac??

I mess up a lot more and it's hard to get my usual scores, but I did just get this :)


sorry you're still having trouble with the double rotation! i haven't been able to reproduce it.

can anyone else on mac see if they have this issue?


Great implementation. Minus points for thinly-veiled rebranding.


Game's alright I guess :P

One thing I noticed, especially past 20G was left/right movement would occasionally lock up for about a second sometimes. Not sure why, might be something to do with how DAS can be buffered between pieces. Regardless, excellent job


hot dang, nice score!


tetromino gang (wat) here, got ~1900 on first try. it's always nice to have a new modern tetromino game with good handling but also not completely copy-pasting srs.

though there's still some bit of defects:

the O piece is spawns with 1 grid bias to the left. (although, Atari has their I piece 1 grid to the right)

ISZ are initially all flipped, so, in air, CW/CCW rotation leads to left/right bias.
there's room of choice (and yes some old BPS T® just followed this scheme), but there's also T® DX, that spawns ISZ "facing" up while JLT facing down, and they rotate identically to SRS (except for wallkick).

another game to mention is DTET with its famous 3-positional ISZ, although it's overall ARS-flavored, it also followed CCW-for-left and CW-for-right bias.
it also use only 2 rotation buttons and Z+X is for 180° rotation (works like Z+Z when first rotation succeeds, otherwise will try real 180° rotation), no hold function is present.

imo it's better to use DX spawn position, base rotation with SRS wallkicks. although, SZ under high gravity on the ground still rotates weirdly due to SRS wallkicks...

i can feel the complete "buffering" of actions during the ARE (i.e. spawn delay) that tries to implement what we call Initial Rotation/Move System (but seems no hold :x) but unfortunately it might need more detailed tuning. from a (fast?) player's perspective, i encountered both "kept pressing ←/→ hard but the next piece doesn't move at all" and "already released before the next piece spawns but many repeated ←/→ are buffered then bang i can't predict where the next piece will appear".

this is truly THE detailed part for the tetromino game. of course different implementation exists, but some feels better. the basic rule is, the game got to identify the intent of fast players on how to move the next/active piece by the keystrokes received, that may or may not appear on the right time.

different implementation also fits games with different ARE. like T® Effect Connected already provided options on their types, the keydown event buffering vs. keydown status on-the-last-frame triggering. keydown status on-the-last-frame IRS with 0 ARE just makes disaster.

rotation should not auto-repeat, generally....

IMS (some other name is DAS precharging) is even more complicated (to name some good example, DTET and Quadra made this well). some general idea as my preference, the IMS should buffer (at most) only one horizontal move (only the one by keydown event that happened DURING the ARE), not the auto-repeated ones, especially those "leaked" from the previous piece when harddrop is pushed before the move button is released. but after the next piece spawns, if the move button is held long enough, das should go on (no matter it's newly pushed during ARE or lasted from the last piece)

more details coming, like Quadra cancels any buffer and never accept more if opposite moving/rotation happened during ARE, DTET cancels (actually shrinks) ARE if IxS is triggered. dot dot dot.

some tuning will help making tera capable of being even harder. decreasing lock delay rocks 8)


My current PB on mobile
The control is a little terrible for me because I would accidently press move left/right and hard drop at same time

Yes, All Spin



[Please log in to post a comment]