Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


NRV last won the day on September 1 2017

NRV had the most liked content!

Community Reputation

541 Excellent

1 Follower

About NRV

  • Rank

Recent Profile Visitors

16,688 profile views
  1. There is already an A8 version of Raimais, so there is code done if you need it, but probably if there is a popular vote Bubble Bobble would win x) (and the graphics for the 7800 are already done in this thread: )
  2. https://en.wikipedia.org/wiki/Pac-Man_Vs
  3. Couldn't resist doing it with other colors of the A8 palette (Altirra default NTSC):
  4. As a general programming advice I prefer the other option, detecting the "just pressed" event, so a detection of a "key not pressed", followed by a detection of "key pressed". That way you know that no other application can mess with yours. Also, detecting "just pressed" feels more responsive than detecting "just released", from the user's perspective. But I understand that this doesn't protect you from messing with the next application
  5. What method do you use? When I did my pseudo clone I moved all balls by steps equal or lower than one pixel, many times per frame, checking if they cross over brick limits. With this there is no problem with the collisions (even if you hit more than one brick in the same frame), but the problem is that a higher speeds (and with more active balls) the processing cost is also higher. So I don't know if this method will work well with the 7800. Well.. probably there are ways to optimize this, like doing the fine steps only if we are moving through a zone with bricks on it.. but I never explored this solution.
  6. Is kind of funny that this can done almost equal (or better) in the A8 (G0, P/M's for the white "underlay" color, narrow playfield).. and the arcade uses a 6502 clocked at 756 KHz. How much do you like the original?
  7. Not that I'm participating, but I normally do two versions of my games NTSC and PAL.. would that be ok with the competition rules?
  8. Not trying to influence your opinion, I think both options are valid, but I just wanted to add a vote for some "mild" randomness. Probably one of the extreme examples for this is something like Spelunky (or Rogue Legacy for metroidvanias), and for sure that have some epic speed runs In my case, when I do any type of game I end testing it so much, that I feel forced to add some kind of randomization, so it still feels fun down the way. Without changing the order of rooms, I have experimented with changing the starting direction of the enemies, changing slightly the speed of some enemies and obstacles, adding a small random delay to the start of some periodic events, all with the intention that the player don't only memorize every pattern, but has to adapt to the small changes. Anyway, whatever you do is going to be a great game 😛 Saludos vecino.
  9. Ouch.. that fired some neurons that were sleeping for more than 30 years x) The vector line maze.. the sound.. It was in the Analog Compendium.
  10. If the macros provided by mads are not enough for your case you can do your own. But you need to decide first where you want to put the results (A, X or Y, or some memory addresses). Also if you want to support negative numbers and how you handle the cases where there is overflow (adding two bytes could give you a word result, for example). Anyway the syntax would be something like: .macro Add .if [:1 < 256] .and [:2 < 256] // code to add two bytes.. .elseif [:1 < 256] .and [:2 > 255] // code to add one byte and a word.. .elseif [:1 > 255] .and [:2 < 256] // code to add one word and a byte.. .else // code to add two words.. .endif .endm
  11. More than that, if you have more than one software sprite: - first "erase" all previous/old sprites in the screen - then draw all new sprites ..repeat Erasing means restoring the background and it can be done in different ways, for example: - if you background is empty, you just put 0's in the old sprite position. - or you could have a copy of the background in memory and just copy the area touched by the sprite from there. - or use some other logic to restore the background, like when using background "tiles".. Drawing can also be done in different ways, some of them faster but prone to more visual artifacts: - just storing the sprite data on the screen without masking or caring for the sprite "borders" against the background. - doing an OR or XOR/EOR of the sprite bytes against the background. - doing the "proper" method of having a sprite mask (different than the sprite data) to AND against the background (basically cutting a hole with the shape of the sprite in the background), and then ORing the sprite data against the background. Then there is the problem with rotating the sprite bits inside a byte, because the graphic modes use 8, 4 or 2 pixels per byte. This can be done in real time (slow) or having the rotations pre-calculated in memory (faster, but using a lot more memory). All this is for graphic modes. Char based software sprites are a little more complex.
  12. NRV


    Nice page. I add a vote for the ideas in Really Bad Chess. It "seems" easy enough to implement and is a lot of fun to play x)
  13. Yep, that's the original PC port. There was another version with improvements, but the links seem to be broken: https://code.google.com/archive/p/envisionpc-reborn/ http://atarionline.pl/forum/comments.php?DiscussionID=1220&page=3 Here is the version that I have: epcr.zip The "language" is something that I did for Project M because I was low on memory for more maps x). That second map (27 x 20 tiles, should use 540 bytes) look like this in code: TabMazeCode2 .byte MCMD_BLOCK, 28, 0,0, 32,45 ; full level .byte MCMD_REPEAT_IN_BLOCK, 5,2, 4,4 ; 5x2 empty rooms of 3x3 .byte MCMD_BLOCK, 0, 6,12, 3,3 .byte MCMD_REPEAT_END .byte MCMD_BLOCK_ARRAY, 9, 0 ; 9 empty space blocks .byte 2,1, 9,9 .byte 12,3, 7,7 .byte 24,3, 3,3 .byte 11,4, 1,2 .byte 19,7, 2,1 .byte 21,4, 1,4 .byte 22,4, 2,1 .byte 15,10, 1,6 .byte 17,17, 5,1 .byte MCMD_BLOCK, 28, 4,3, 5,5 ; normal brick block .byte MCMD_BLOCK, 22, 14,4, 3,2 ; purple brick block .byte MCMD_BLOCK, 21, 14,7, 3,2 ; red brick block .byte MCMD_POINT_ARRAY, 3, 11 ; yellow metal .byte 6,4, 7,5, 5,17 .byte MCMD_POINT_ARRAY, 4, 14 ; green metal .byte 6,0, 11,7, 13,17, 21,13 .byte MCMD_POINT_ARRAY, 8, 0 ; empty space .byte 9,17, 11,15, 13,13, 19,15, 4,5, 5,5, 6,6, 6,7 .byte MCMD_POINT, 1, 6,5 ; key .byte MCMD_POINT, 4, 6,17 ; gold cup .byte MCMD_POINT, 5, 26,4 ; teleporter .byte MCMD_POINT, 47, 27,4 ; animated texture .byte MCMD_END Obviously, you need to add the memory used by the code to "draw" those commands, so in the end I don't know if I ended using less memory x) (there are two more maps like this one).
  14. Well, I wouldn't call it exactly "early" The start of this thread is from 2010 and the map is the same as my last experiment: This was done in Envision PC. The 3 maps after this are done with a kind of "language" that draw the map in memory, so they use less space than the final size of the map. For example the next one: Basically the language let you draw square zones or lines of any type of tile, and also list of objects, if I remember correctly. For people talking about trading slanted borders of a column against vertical resolution.. I don't think it's a good trade off. Remember that you need both orientations for the slope (increasing or decreasing from left to right). That the slope can connect to the side chars, but also to the chars above or below them (because.. perspective). That you need more than the 32 different heights of a column, because for size 32 you still need some different columns, because the inside of the texture changes when you are nearer a wall. And the number of columns in a font is already very limited (128), so it would mean a very coarse vertical resolution in the end. I don't know if I read it well, but using more than one font per line is not useful for this technique. Assuming you can do it (is impossible in the bad lines and you are going to consume all the cpu in the char lines, for every hardware frame!) it doesn't help you, because you can need every possible column variation in any horizontal position of the screen (so they must be in every font used in a line).
  • Create New...