Jump to content


  • Content Count

  • Joined

  • Last visited

Community Reputation

218 Excellent

About JeremiahK

  • Rank
  • Birthday 05/18/1996

Profile Information

  • Gender
  • Location
    Indiana, USA
  • Interests
    I was born in 1996, and played on my dad's Atari 2600 a bit as a kid. I enjoy making 3D graphics, running, working on my custom computer, and programming.
  • Currently Playing

Recent Profile Visitors

4,382 profile views
  1. Nice game! I think it plays very well and looks great. The title screen and music are impressive for a 2K game. I noticed the score font is 3x5, and since you are using the playfield to display it, you have to store 2 copies of the digits, one being flipped. A couple years ago I did a project with a similar font, and I was able to find a way to store both tables of graphics into the same table. What I did was overlap a mirrored copy in between the 2 forward copies. Looking at a single byte in the table, here are all the bits numbered: %76543210 Bits 765 and 321 hold regular forward copies as usual. Bits 543 hold a mirrored version of the same graphics. In order to display a set of reversed characters, you would need to shift the copies into place before ORing them together. Since you have 10 digits, the table is 50 bytes, but with the extra overhead to handle the mirrored copies, it would probably save you 30ish bytes. (Although I did notice there is an extra 11th character which wouldn't work with this method...) I just wanted to mention it in case you wanted to free up a little space.
  2. Nice score! The color-changing score is a placeholder for a full-screen color-changing screensaver later on. At the moment, we are finishing the 2K version completely. We love 2K games, too, and it's amazing how much we have been able to fit into the game without really doing any modern tricks, other than the 7-digit score. Theoretically, it could have been coded in 1977.
  3. Maybe use a darker grey? I think the current one is too close to the white blocks.
  4. The low bit of colors can be used this way, too. After performing an ASL, it is ready to be used for one of the ENAxx registers.
  5. For larger snippets of code, I have started simply saving it to a file, and uploading as an attachment.
  6. In my nyancat kernel, I also split the screen into zones (7 rows, each 14 lines high, and separated by 5 lines, 128 lines for the whole display). I wanted the cat to be able to move "smoothly" from row to row (it can be drawn halfway between rows). For this reason, the cat kernel uses 2 rows. The other 5 don't try to draw the cat at all, so I was able to significantly decrease the amount of padding needed in the graphics. In the most complex part of the kernel, I am reading graphics values 8 times, and writing to TIA registers 11 times, per line, if I recall. I used every one of the 76 cycles per line, and all the registers. The stack pointer was used to hold a color value for one of the sprites, since it can be loaded into X faster than RAM. Note that the time-sensitive areas of the kernel must not cross page boundaries, unless the extra cycle is accounted for.
  7. Haha, I noticed the same thing myself! For debugging, I like to set the level to 99 to make it last forever, no reshuffles
  8. Let me know when you need the final bin for the stream. I am going to try and get the scoreboard functioning by then
  9. Thanks Omegamatrix! I had thought of that, but there isn't really a way to do that. The ball wouldn't be wide enough, and we are already using all the other objects/colors. I think the flashing block is fine, although we can always tweak the way it flashes. Yes, that is not final. We are definitely going for a steady 262 line 60hz display. Also, if anyone loads the game up on a Harmony cart, note that I am aware that the colors need to be improved. Some are fine, but green is especially icky.
  10. I like that! Another name idea I had was Block Party. Or we could call it Forty-Niner, and have some sort of classic bogus Atari story about being a California miner in 1849.
  11. Thanks Andrew! I actually did know that, if I'm honest, I just wanted the first reply
  12. Adding a reply so I get notifications. It's been a very productive week! Just Jeff and I have been brainstorming and hammering out the code this past week or so, starting from a static kernel display. These past two days have been the biggest breakthrough, everything fell into place. It's still very rough, but all the Bejeweled gameplay functionality is there, and in just under 1K of code!
  13. Agreed, I only mention it because it might affect how we implement certain things. I would recommend always checking all 16 rows/columns. This way, we can use the same routine to check after spawning in new blocks. You can only make 1 or 2 matches on a single move, but after gravity and random spawns, a chain reaction could start, and there would be no way of knowing where they are on the board without checking everything. The coordinates may not need to be kept, simply the cursor position and move direction. I made a comment on the commit, and I will copy it here in case anybody wants to respond:
  14. I am planning out how the game states/logic should flow. This is what I've got, let me know what you think. Attract Mode: Show game board with some fun colorful effects, just randomly changing colors for a placeholder (easter egg potential later). The previous game's score(s) should be shown. (Top for P1, bottom for P2? We can always decide on this later.) Pressing Game Reset or P1's fire button will start a new game with the same settings as the last game (or default settings on startup). Pressing Game Select or P1's up/down will enter Game Select Mode. Game Select Mode: Pressing Game Select or P1's up/down changes the game mode number, which is displayed in place of the score. If we end up wanting a Space Invaders style 112 game modes, this might not work well. Pressing Game Reset or P1's fire button starts the game by entering Game Init Mode. Waiting for some period of time without an input will preserve the selected game mode, but switch back to Attract Mode. Game Init Mode: All game variables are initialized here, level, score, cursor position, etc. The game board is cleared, and the game enters Shuffle Mode. Shuffle Mode: Blocks are randomly spawned into the top of the grid, falling down until the grid is full. They are spawned in such a way that no matches/runs of colors are formed. Once the grid is full, switch to Play Mode. Play Mode: This is the "normal" mode of the game, where the cursor is drawn, and moves can be made. If a player moves the joystick while holding the fire button, switch to Move Mode. Otherwise, move the cursor. Move Mode: Here a move is attempted. The gems being moved are swapped, and a bit in RAM is checked, the "undo" bit. If it is set, switch to Play Mode, otherwise Match Mode. This is because if a match isn't found (an illegal move was made), the move will have to be made again to swap the gems back. So basically, there are two Move Modes, Attempt Move Mode, and Undo Move Mode. Match Mode: Every row and column is checked for runs of 3 or more same-colored gems. If none are found, check the "recheck matches" bit. If it is set, we have already taken care of the matches and gravity, so clear the bit and switch to Play Mode. Otherwise, set the "undo" bit, and switch back to Move Mode. If matches are found (there might be more than one in the case of chain reactions), every matching gem is removed from the board, and the game enters Gravity Mode. Gravity Mode: Each column is checked from the bottom up for empty holes. When one is found, every block above it (including other holes) is moved down 1 step, and a new block is spawned at the top. If no holes are found, set the "recheck matches" bit (can probably be the same as the "undo" bit), and switch back to Match Mode, since the new gem locations may have formed new matches. As far as I know, this should cover everything in the game, except for knowing when the game is lost. In order to do this, it needs to be somehow determined that there are no moves left. Note that the game modes that change the state of the board will also take care of animating the moves.
  • Create New...