Garbage behaves as it should, as far as I can tell. VBA's problem is just a wrong frame rate. VirtualDub can fix that up fine with its button to adjust frame rate so that video and audio durations match. Done in next version. IRC is on blockstats.org, but it tends to be abandoned because blockstats is abandoned because Nintendo fell behind on keeping the TDS hub on nintendowifi.com working once Wii came out.
Ah, I thought I was on the wrong place for a minute there. =P Btw, another bug: Sometimes, the tetrimino appears to hard drop when it's first released after hard dropping the last one. Doesn't actually drop though. And AUGH my hands are cold. :[
nothing gets vetoed, i don't think-- just made a footnote in the to do file. anyway, an old client i used to play called blocktrix had a feature like that, but i think it updated every tetromino. i'm not sure how i feel about it though, since i want to focus on the playfield and next-coming blocks, not a meter.
I think I found what was causing double trails: an interaction between the trail code and the frameskip code. I drew myself away from Animal Crack long enough to add a speedometer to the next version, and it appears most useful when watching a .ljm.
"it appears most useful when watching a .ljm." ahhh, i didn't think about that. now i'm interested. edit: bug; trails option resets to "on" when after being turned off and application restarted.
It also forces smooth gravity to on between sessions. But this is likely already fixed for the next version...
People with Nintendo DS-specific flash cards that don't work with GBA homebrew (e.g. SuperCard Rumble, M3 Pro, DS-X, or R4) need not fret. Now that Dave "wintermute" Murphy has released devkitARM R20, LOCKJAW is coming to DS. It's ridiculous how easily GBA programming skills transfer to the DS.
LOCKJAW 0.38 is out 0.38 (2007-09-11) Plays a .ljm specified at the command line. More refactoring for multiplayer. Added wall kick opcode SKIP_IF3, similar to SKIP_IF except it also checks the two cells above the specified cell. L, J, and T in Arika use SKIP_IF3 to check the entire center column when rotating to vertical. Moves new tetrominoes to be between the walls (fixing Tengen in width 4) and, if "Enter above playfield" is off, down far enough so that they're within the playfield (requested by Caithness). New rotation system: Climbing, based on Tetris DX. (No, you can't wall-climb yet because the sub-block behavior differs.) Option "4x4 squares" is called "Gluing". Other gluing options are planned. In Square gluing, formation of a square adds a delay equal to line clear delay. PC: Refactored to share some of the GBA/DS options logic. PC: Moved most sound effect code into pcsound.c. PC: Sound for 4x4 square formation (cribbed from TOD). PC: Reloads the default skin's configuration before loading the skin, so that skins always inherit from the default skin and not the last chosen skin (requested by Rich Nagel). GBA: Uses duration as priority for square wave sound effects, which should prevent the section up sound from getting interrupted as often. GBA/DS: Draws real-time speedometer. In most games, the I tetromino starts out centered in columns 4-7 (left), but in Tengen Tet?is, all tetrominoes enter with their leftmost block in column 5 (right): Code: ___IIII___ ____IIII__ | | | | | | | | | | | | 1234567890 1234567890 Narrow the playfield to 4 cells wide by and column 8 becomes a wall: Code: IIII _IIII | | | | | | | | | | | | 1234567890 1234567890 The new entry-positioning code in 0.38 finds the left, right, and top extents of a piece and then nudges the tetromino so that it does not overlap the playfield walls (or, in the case of "Enter above ceiling" turned off, the ceiling). edo: I'll look over your proposal.
I'm sorry, I meant to test this for you when you last asked, but then I completely forgot about it. I tested just now on my TAP and it works. However, the best way to test it would be the following setup, which I imagine is closer to how the behaviour was originally discovered: Code: ..XXXXXXX. ...XXXXXX. .X.XXXXXX. XXXXXXXXX. XXXXXXXXX. XXXXXXXXX. XXXXXXXXX. JJXXXXXXX. J..XXXXXX. JX.XXXXXX. XXXXXXXXX. XXXXXXXXX. XXXXXXXXX. XXXXXXXXX. ..XXXXXXX. JJJXXXXXX. .XJXXXXXX. XXXXXXXXX. XXXXXXXXX. XXXXXXXXX. XXXXXXXXX. JJXXXXXXX. J..XXXXXX. JX.XXXXXX. XXXXXXXXX. XXXXXXXXX. XXXXXXXXX. XXXXXXXXX. This move comes up infrequently, but not insignificantly. The wallkick would have been discovered when someone rotated an extra time by accident and it actually worked.
The new version looks great, Tepples - Haven't had time to "break it in" yet, but the new features/corrections look nice - BTW, for the custom keyboard settings screen, why is everything listed twice? Also, I noticed that the new filename for the saved keyboard settings was "LJ-Keys.038" (instead of the previous filename "LJ-Keys.005"). Was this intentional (just a-wondering, so's I can update my LJ utility)? Lastly, I noticed that some of the lines in the LJ.ini file have their settings (the specific text for the options) changed. Again, was this intentional (I'll want to add the modified CFG files to my utility's ZIP if I release a new version)? Anyhow, all seems to work as advertised (including the skin selecting, and playing a demo via command line) - Hehe, looks like I'll need to release an update for my stereo sound effects pack as well <G>. [note to self] Change Wiki LJ settings page (online and local saved copy) -> 4x4 = Gluing
Version 38 fixes the specific problem I was talking about, which was the I piece spawning on the second-from-top row instead of the top one, but it introduces a new one. Now every piece spawns with its bottom-most block in the 20th row. For all pieces except the I, this amounts to "Enter half above playfield, and half inside it". Also, I'm not sure what you mean by saying that they are moved far enough down so that they're within the playfield, as they were completely within the playfield before, an it seems they've been moved one row upwards now. Edit: Also, while researching this in Baboo! mode, I noticed an odd discrepancy in version 37 which was fixed in 38. In Lockjaw 37, when playing with Enter Above Playfield turned off, the pieces spawn in the top two rows, but graphically it looks as though they're half a row higher than that. I just thought that was kind of amusing.
When the format changes incompatibly, so does the file name. The change in the format was that the second column is saved, which is part of "more refactoring for multiplayer". Yes. The new text accommodates the fact that the PC and GBA share a lot of their options code. Now I get to describe "gluing". Future versions will add more ways to have blocks glue themselves together as pieces lock. A proper TGM simulation would use Sticky gluing so that each block gets inserted into a white-bordered mass. The Next Tetris would use Sticky by color gluing. However, the line clear gravity setting will remain separate in order to simulate TOD, which uses Square gluing with Sticky gravity. Oh, and I think I figured out a slightly more data-driven approach to implementing TGM's WTF wall kicks. In addition to SKIP_IF3, I might add a new opcode SKIP_IF_TSHAPE that checks the blocks in this shape: Code: OXO .X. .X. If at least one block is in any O position, the opcode passes, and further kicks are evaluated. If not, it is evaluated as a SKIP_IF3, meaning that if any block is in the X positions, the opcode fails, and further kicks are not evaluated. It's still a special case, but at least it's a data-driven special case. But does the T tetromino also have WTF kicks? Does rotation to the left from this position work? Code: ...JJJOO.. ..TTTJOO.. ...TIIII.. Try playing with "Smooth gravity" turned off. This engine follows the same collision rule as Super Puzzle Fighter II: only the bottom edge of each block in a piece is checked for collision.
It's not that the game says "check the middle for obstructions and if present, prevent kicks". Instead it's going "skip the middle when checking for kicks". So it still checks the sides, always. See how the logic is subtly different? That should answer your T question.
Thanks for the info, Tepples - Hehe, I should have figured that one out <G>. Again, thanks for the info... looking forward to multiplayer mode -
Suggestion: Split the randomizer into 2 options. The first controls the piece set to use (standard, extended, stickless, stickless extended (aka teflon mode in a previous game you've made), snakes), and a second option that controls the randomizer to apply to it (single bag, double bag, TOJ bag, history, MTB, memoryless). This would allow some of the more interesting randomizer ideas to be tried without having to write special code for them (like you did for memoryless 10, for example), and would also allow you to generate a piece for the hold box if the opition is set without removing it from the first bag. And a question about wktables.c: which state is the flat-down state of J L and T? Is it U or D?