lucienEn Posted November 29, 2022 Share Posted November 29, 2022 Hi, I noticed Circus Convoy has a few sprites that have 2 colors on same scanline together with the player sprite on the same scanline with a 3rd color. How is that achieved? Can't be playfield since the resolution is higher. Maybe it's by alternating 2 sprites but I don't see flickering. For example the giraffe has 2 colors with the player on the same scanlines. Also the first screen shows a chameleon that appears to be 28 pixel wide but with full resolution yet player sprites are only 8 wide with that resolution. See 2 Quote Link to comment Share on other sites More sharing options...
+splendidnut Posted November 29, 2022 Share Posted November 29, 2022 On the Atari 2600, the Player/Missile graphics can be switched into duplicate / triplicate mode. Sprite layout can be planned out to take advantage of that fact. On the Chameleon screen: The Chameleon is probably using the two available Player sprites set to duplicate mode and interwoven with each other. Also, there's a couple of coloring tricks going on. The wheels on the trailer... two sprites in duplicate mode. Those tumble weeds at the bottom are using triplicate sprite mode. Basically, Circus Convoy is loaded with graphics tricks. They probably used every trick in the metaphorical book. 3 Quote Link to comment Share on other sites More sharing options...
lucienEn Posted November 29, 2022 Author Share Posted November 29, 2022 (edited) You still would have only 2 colors since missile/ball/player all share same color. Switching color during scanline seems also not possible since there is not enough time over few pixels. Perhaps the Playfield can be 3rd color but that's min. 4 pixel wide. Unless it's indeed cleverly under the sprite but the giraffe is at 1 line only 3 pixel wide yet with 2 colors. Also note the Chameleon is assymetrical so replicating would also require changing the player bits and not enough cycles to do that it seems. Let me play with the Stella debugger and override colors feature to see what is what. Edited November 29, 2022 by lucienEn Quote Link to comment Share on other sites More sharing options...
alex_79 Posted November 29, 2022 Share Posted November 29, 2022 4 minutes ago, lucienEn said: missile/ball/player all share same color. The ball shares color with playfield, not with missiles and players. Also note that the players can also be set to 2x or 4x size and the missiles/ball also to 8x size. Plus each object can be repositioned on subsequent scanlines, and they can be interleaved. Number of copies and size can be changed on each scanlines too. Objects with lower priority will only be seen through the "holes" of the ones that are on top of them, creating what seems a high res multicolor sprite. 8 minutes ago, lucienEn said: Let me play with the Stella debugger and override colors feature to see what is what. If you have the rom, then just enable the "fixed debug colors" (ALT+"."), and/or turn each object on or off with ALT+ one of the letters from "Z" to "N" on the keyboard. 3 Quote Link to comment Share on other sites More sharing options...
+splendidnut Posted November 29, 2022 Share Posted November 29, 2022 11 minutes ago, lucienEn said: Switching color during scanline seems also not possible since there is not enough time over few pixels. Switching colors during a scanline is indeed possible. Just requires careful planning... The first screen of Sega's Congo Bongo does it. 16 minutes ago, lucienEn said: Also note the Chameleon is assymetrical so replicating would also require changing the player bits and not enough cycles to do that it seems. Here again, it is indeed possible.... Think about the 6-digit scores many games have: Two sprites, triplicated, with 6 graphics changes per line. 2 Quote Link to comment Share on other sites More sharing options...
LatchKeyKid Posted November 29, 2022 Share Posted November 29, 2022 19 minutes ago, splendidnut said: Switching colors during a scanline is indeed possible. Just requires careful planning... The first screen of Sega's Congo Bongo does it. Here again, it is indeed possible.... Think about the 6-digit scores many games have: Two sprites, triplicated, with 6 graphics changes per line. Is that part of the reason why (other than obviously asthetics) typically no other changes are made on the scanlines with scores such as playfield, ball, and missle changes that would also suck up CPU cycles? Basically all you're doing those lines is the score? Quote Link to comment Share on other sites More sharing options...
+splendidnut Posted November 29, 2022 Share Posted November 29, 2022 For the most part, yes. There are still few little tricks that can be done to add something else to the score area... but it requires a bit more of effort and careful planning to accomplish. Quote Link to comment Share on other sites More sharing options...
lucienEn Posted November 29, 2022 Author Share Posted November 29, 2022 I took some screenshots from debug colors. The giraffe I think is clear now since it's indeed ball color with just 1 sprite (no small feat still). The chameleon is still not very clear to me since it only shows 2 sprites and they don't look replicated: 3 Quote Link to comment Share on other sites More sharing options...
alex_79 Posted November 29, 2022 Share Posted November 29, 2022 15 minutes ago, lucienEn said: The chameleon is still not very clear to me since it only shows 2 sprites and they don't look replicated: They're not duplicated, but resized and repositioned on each scanline. Single step through the code in the debugger while looking at the TIA tab to see exactly how. 2 Quote Link to comment Share on other sites More sharing options...
+SpiceWare Posted November 29, 2022 Share Posted November 29, 2022 52 minutes ago, lucienEn said: The chameleon is still not very clear to me since it only shows 2 sprites and they don't look replicated: Looks like the same thing I did with the Scarlet the Dragon in Medieval Mayhem: each player set for 2x size each player is a different color each player shifted left/right over successive scanlines. They did add changing the colors of the players over successive scanlines. 2 Quote Link to comment Share on other sites More sharing options...
LatchKeyKid Posted November 29, 2022 Share Posted November 29, 2022 3 hours ago, lucienEn said: I took some screenshots from debug colors. The giraffe I think is clear now since it's indeed ball color with just 1 sprite (no small feat still). The chameleon is still not very clear to me since it only shows 2 sprites and they don't look replicated: Thanks! A while back I asked for examples of using the ball or missile to add color and I don't believe this homebrew was mentioned as an example. Quote Link to comment Share on other sites More sharing options...
LatchKeyKid Posted November 29, 2022 Share Posted November 29, 2022 (edited) 2 hours ago, SpiceWare said: Looks like the same thing I did with the Scarlet the Dragon in Medieval Mayhem: each player set for 2x size each player is a different color each player shifted left/right over successive scanlines. They did add changing the colors of the players over successive scanlines. Do you change the player sprite further at any point above double width to accomplish the "length" of the dragon or was double enough to accomplish this? It's very nice sprite work regardless! Edited November 29, 2022 by LatchKeyKid Quote Link to comment Share on other sites More sharing options...
+SpiceWare Posted November 29, 2022 Share Posted November 29, 2022 48 minutes ago, LatchKeyKid said: Do you change the player sprite further at any point above double width to accomplish the "length" of the dragon or was double enough to accomplish this? Just 2x with line-by-line shifting. Manipulating the player's size and/or shifting the position line-by-line has been used to great effect for a long time, such as in Boxing and Dolphin: I also use it for the largest asteroids in Space Rocks, and the space stations in Draconian 4 Quote Link to comment Share on other sites More sharing options...
lucienEn Posted November 29, 2022 Author Share Posted November 29, 2022 (edited) 8 hours ago, SpiceWare said: Looks like the same thing I did with the Scarlet the Dragon in Medieval Mayhem: each player set for 2x size each player is a different color each player shifted left/right over successive scanlines. They did add changing the colors of the players over successive scanlines. Thanks! Getting close as I didn't think about shifting the next scanline so you still have illusion of 1 pixel resolution. However here player 1 is 28 pixel wide (yellow, see below). Double size would be only 16 pixels. However debugging this more it's actually changing the player sizes on each scanline. Pretty cool trick and still lot of work to convert into code (is there a tool for that?). I also noticed when the player is moving out of the center to the sides, the colors are removed for some reason (see 2nd image), not sure yet why: Scanline: 130 - P0 NuSiz = 0: 1 copy - P1 NuSiz = 5: 2x (16) sized player Scanline: 137 - P0 NuSiz = 0: 1 copy - P1 NuSiz = 7: 4x (32) sized player Scanline: 147 - P0 NuSiz = 7: 4x (32) sized player - P1 NuSiz = 7: 4x (32) sized player Scanline: 148 - P0 NuSiz = 5: 2x (16) sized player - P1 NuSiz = 7: 4x (32) sized player Edited November 29, 2022 by lucienEn 2 Quote Link to comment Share on other sites More sharing options...
lucienEn Posted November 29, 2022 Author Share Posted November 29, 2022 8 hours ago, alex_79 said: They're not duplicated, but resized and repositioned on each scanline. Single step through the code in the debugger while looking at the TIA tab to see exactly how. Yes that's it:-). Looking at all complexity of this, would be great if someone could come up with editor that could convert this into code but not trivial with the limitations. Quote Link to comment Share on other sites More sharing options...
+SpiceWare Posted November 30, 2022 Share Posted November 30, 2022 5 hours ago, lucienEn said: is there a tool for that? I have a few web based graphic tool converters on my Atari VCS/2600 page. The Two Color Sprite Converter is what I used to convert the dragon graphics. On the first screen copy/paste one of the test URLS into the first field then click Load Image: On the second screen specify which color is used for which player. If text is hard to read click Change Colors to step thru a number of screen & text colors. Click Show Results. Result screen: Scroll to bottom to see results. Browser specs have changed a bit, so they all ended up on a single, and very long, line of text Use your browsers "view page source" feature to see it as intended: ImageA6 .byte zz________ ; 0 .byte zz________ ; 1 .byte zz________ ; 2 .byte zz________ ; 3 .byte zz________ ; 4 .byte zz________ ; 5 .byte zz________ ; 6 .byte zz________ ; 7 .byte zz________ ; 8 .byte zz________ ; 9 .byte zz________ ; 10 .byte zz________ ; 11 .byte zz________ ; 12 .byte zz________ ; 13 .byte zz________ ; 14 .byte zz___XXX_X ; 15 .byte zz_X_XX___ ; 16 .byte zzXXXX____ ; 17 .byte zzX_______ ; 18 .byte zzXX______ ; 19 .byte zzXXXX____ ; 20 .byte zzXX______ ; 21 .byte zzXX______ ; 22 .byte zzX_______ ; 23 .byte zzXX______ ; 24 .byte zzXX______ ; 25 .byte zzXXX_____ ; 26 .byte zzXXXXX___ ; 27 .byte zzXXXXXX_X ; 28 .byte zzXXX__XX_ ; 29 .byte zzXXXX___X ; 30 .byte zzXXX_____ ; 31 .byte zzXX_X____ ; 32 .byte zzXX_XX___ ; 33 .byte zz_XX_X_X_ ; 34 .byte zzXX__XX__ ; 35 .byte zzX_X_X___ ; 36 .byte zzX__XXX__ ; 37 .byte zzXX_XX___ ; 38 .byte zzXXX_____ ; 39 .byte zz________ ; 40 .byte zz________ ; 41 .byte zz________ ; 42 .byte zz________ ; 43 ImageB6 .byte zz________ ; 0 .byte zz________ ; 1 .byte zz________ ; 2 .byte zz________ ; 3 .byte zz________ ; 4 .byte zz________ ; 5 .byte zz________ ; 6 .byte zz________ ; 7 .byte zz________ ; 8 .byte zz________ ; 9 .byte zz________ ; 10 .byte zz________ ; 11 .byte zz________ ; 12 .byte zz________ ; 13 .byte zz______XX ; 14 .byte zz_XX_XX__ ; 15 .byte zzXX_XX___ ; 16 .byte zzX_X_____ ; 17 .byte zzXX_XX___ ; 18 .byte zzXXX_X___ ; 19 .byte zzXXX_____ ; 20 .byte zzXX______ ; 21 .byte zzXXX_____ ; 22 .byte zzX__X____ ; 23 .byte zzXX______ ; 24 .byte zzX__X____ ; 25 .byte zzX_______ ; 26 .byte zzX_______ ; 27 .byte zz________ ; 28 .byte zzXX______ ; 29 .byte zzXXX_____ ; 30 .byte zzXXX_____ ; 31 .byte zzX__X____ ; 32 .byte zz________ ; 33 .byte zzX_______ ; 34 .byte zz________ ; 35 .byte zzX_______ ; 36 .byte zz________ ; 37 .byte zzX_______ ; 38 .byte zz________ ; 39 .byte zz________ ; 40 .byte zz________ ; 41 .byte zz________ ; 42 .byte zz________ ; 43 Shift6LtoR .byte HMOVE_0 | HMOVE_0 >> 4 ; 0 x0= 0 x1= 0 .byte HMOVE_0 | HMOVE_0 >> 4 ; 1 x0= 0 x1= 0 .byte HMOVE_0 | HMOVE_0 >> 4 ; 2 x0= 0 x1= 0 .byte HMOVE_0 | HMOVE_0 >> 4 ; 3 x0= 0 x1= 0 .byte HMOVE_0 | HMOVE_0 >> 4 ; 4 x0= 0 x1= 0 .byte HMOVE_0 | HMOVE_0 >> 4 ; 5 x0= 0 x1= 0 .byte HMOVE_0 | HMOVE_0 >> 4 ; 6 x0= 0 x1= 0 .byte HMOVE_0 | HMOVE_0 >> 4 ; 7 x0= 0 x1= 0 .byte HMOVE_0 | HMOVE_0 >> 4 ; 8 x0= 0 x1= 0 .byte HMOVE_0 | HMOVE_0 >> 4 ; 9 x0= 0 x1= 0 .byte HMOVE_0 | HMOVE_0 >> 4 ; 10 x0= 0 x1= 0 .byte HMOVE_0 | HMOVE_0 >> 4 ; 11 x0= 0 x1= 0 .byte HMOVE_R3 | HMOVE_0 >> 4 ; 12 x0= 3 x1= 0 .byte HMOVE_R7 | HMOVE_0 >> 4 ; 13 x0=10 x1= 0 .byte HMOVE_R7 | HMOVE_R6 >> 4 ; 14 x0=17 x1= 6 .byte HMOVE_R7 | HMOVE_R6 >> 4 ; 15 x0=24 x1=12 .byte HMOVE_R6 | HMOVE_R4 >> 4 ; 16 x0=30 x1=16 .byte HMOVE_L2 | HMOVE_R3 >> 4 ; 17 x0=28 x1=19 .byte HMOVE_R4 | HMOVE_L5 >> 4 ; 18 x0=32 x1=14 .byte HMOVE_0 | HMOVE_R4 >> 4 ; 19 x0=32 x1=18 .byte HMOVE_L2 | HMOVE_R2 >> 4 ; 20 x0=30 x1=20 .byte HMOVE_0 | HMOVE_R3 >> 4 ; 21 x0=30 x1=23 .byte HMOVE_L2 | HMOVE_L1 >> 4 ; 22 x0=28 x1=22 .byte HMOVE_R1 | HMOVE_R2 >> 4 ; 23 x0=29 x1=24 .byte HMOVE_L3 | HMOVE_L2 >> 4 ; 24 x0=26 x1=22 .byte HMOVE_L2 | HMOVE_0 >> 4 ; 25 x0=24 x1=22 .byte HMOVE_L2 | HMOVE_L2 >> 4 ; 26 x0=22 x1=20 .byte HMOVE_L6 | HMOVE_R6 >> 4 ; 27 x0=16 x1=26 .byte HMOVE_L2 | HMOVE_0 >> 4 ; 28 x0=14 x1=26 .byte HMOVE_L1 | HMOVE_L7 >> 4 ; 29 x0=13 x1=19 .byte HMOVE_L1 | HMOVE_0 >> 4 ; 30 x0=12 x1=19 .byte HMOVE_0 | HMOVE_L1 >> 4 ; 31 x0=12 x1=18 .byte HMOVE_L1 | HMOVE_L4 >> 4 ; 32 x0=11 x1=14 .byte HMOVE_0 | HMOVE_0 >> 4 ; 33 x0=11 x1=14 .byte HMOVE_L3 | HMOVE_L1 >> 4 ; 34 x0= 8 x1=13 .byte HMOVE_L6 | HMOVE_0 >> 4 ; 35 x0= 2 x1=13 .byte HMOVE_L1 | HMOVE_L2 >> 4 ; 36 x0= 1 x1=11 .byte HMOVE_L1 | HMOVE_0 >> 4 ; 37 x0= 0 x1=11 .byte HMOVE_0 | HMOVE_L2 >> 4 ; 38 x0= 0 x1= 9 .byte HMOVE_R2 | HMOVE_0 >> 4 ; 39 x0= 2 x1= 9 .byte HMOVE_0 | HMOVE_0 >> 4 ; 40 x0= 2 x1= 9 .byte HMOVE_0 | HMOVE_0 >> 4 ; 41 x0= 2 x1= 9 .byte HMOVE_0 | HMOVE_0 >> 4 ; 42 x0= 2 x1= 9 .byte HMOVE_0 | HMOVE_0 >> 4 ; 43 x0= 2 x1= 9 Shift6RtoL .byte HMOVE_0 | HMOVE_0 >> 4 ; 0 .byte HMOVE_0 | HMOVE_0 >> 4 ; 1 .byte HMOVE_0 | HMOVE_0 >> 4 ; 2 .byte HMOVE_0 | HMOVE_0 >> 4 ; 3 .byte HMOVE_0 | HMOVE_0 >> 4 ; 4 .byte HMOVE_0 | HMOVE_0 >> 4 ; 5 .byte HMOVE_0 | HMOVE_0 >> 4 ; 6 .byte HMOVE_0 | HMOVE_0 >> 4 ; 7 .byte HMOVE_0 | HMOVE_0 >> 4 ; 8 .byte HMOVE_0 | HMOVE_0 >> 4 ; 9 .byte HMOVE_0 | HMOVE_0 >> 4 ; 10 .byte HMOVE_0 | HMOVE_0 >> 4 ; 11 .byte HMOVE_L3 | HMOVE_0 >> 4 ; 12 .byte HMOVE_L7 | HMOVE_0 >> 4 ; 13 .byte HMOVE_L7 | HMOVE_L6 >> 4 ; 14 .byte HMOVE_L7 | HMOVE_L6 >> 4 ; 15 .byte HMOVE_L6 | HMOVE_L4 >> 4 ; 16 .byte HMOVE_R2 | HMOVE_L3 >> 4 ; 17 .byte HMOVE_L4 | HMOVE_R5 >> 4 ; 18 .byte HMOVE_0 | HMOVE_L4 >> 4 ; 19 .byte HMOVE_R2 | HMOVE_L2 >> 4 ; 20 .byte HMOVE_0 | HMOVE_L3 >> 4 ; 21 .byte HMOVE_R2 | HMOVE_R1 >> 4 ; 22 .byte HMOVE_L1 | HMOVE_L2 >> 4 ; 23 .byte HMOVE_R3 | HMOVE_R2 >> 4 ; 24 .byte HMOVE_R2 | HMOVE_0 >> 4 ; 25 .byte HMOVE_R2 | HMOVE_R2 >> 4 ; 26 .byte HMOVE_R6 | HMOVE_L6 >> 4 ; 27 .byte HMOVE_R2 | HMOVE_0 >> 4 ; 28 .byte HMOVE_R1 | HMOVE_R7 >> 4 ; 29 .byte HMOVE_R1 | HMOVE_0 >> 4 ; 30 .byte HMOVE_0 | HMOVE_R1 >> 4 ; 31 .byte HMOVE_R1 | HMOVE_R4 >> 4 ; 32 .byte HMOVE_0 | HMOVE_0 >> 4 ; 33 .byte HMOVE_R3 | HMOVE_R1 >> 4 ; 34 .byte HMOVE_R6 | HMOVE_0 >> 4 ; 35 .byte HMOVE_R1 | HMOVE_R2 >> 4 ; 36 .byte HMOVE_R1 | HMOVE_0 >> 4 ; 37 .byte HMOVE_0 | HMOVE_R2 >> 4 ; 38 .byte HMOVE_L2 | HMOVE_0 >> 4 ; 39 .byte HMOVE_0 | HMOVE_0 >> 4 ; 40 .byte HMOVE_0 | HMOVE_0 >> 4 ; 41 .byte HMOVE_0 | HMOVE_0 >> 4 ; 42 .byte HMOVE_0 | HMOVE_0 >> 4 ; 43 ;End 6 5 1 Quote Link to comment Share on other sites More sharing options...
+SpiceWare Posted November 30, 2022 Share Posted November 30, 2022 3 hours ago, lucienEn said: I also noticed when the player is moving out of the center to the sides, the colors are removed for some reason (see 2nd image), not sure yet why Camouflage - chameleons change color to blend into their surroundings. 3 Quote Link to comment Share on other sites More sharing options...
Ecernosoft Posted January 2, 2023 Share Posted January 2, 2023 That game (circus convoy ) is basically an entry into the demo scene. Quote Link to comment Share on other sites More sharing options...
dinox0r Posted May 3, 2023 Share Posted May 3, 2023 Hi @lucienEn. Thank you for sharing the screen shots from debug mode. You said that the giraffe was made by using the sprite 1 and the ball (yellow and blue pixels respectively, I presume). Do you happen to know how they did manage to get the spacing for the ball so small? Please refer to my screenshot below for reference: I have tried myself to do something similar but the gap is massive (9 color clocks as expected from doing 2 consecutive sta RESBL). Are they using a 2x/4x ball and the sprite on top has "holes" that let the ball visible through? Like the following: 2 Quote Link to comment Share on other sites More sharing options...
Thomas Jentzsch Posted May 18, 2023 Share Posted May 18, 2023 (edited) If you have the ROM, I suggest using Stella's debug colors. Also you can individually disable all graphic objects. Edited May 18, 2023 by Thomas Jentzsch Quote Link to comment Share on other sites More sharing options...
lucienEn Posted May 18, 2023 Author Share Posted May 18, 2023 (edited) Yes they used overlap I believe but in Stella debugger fill to that scanline and observe the patterns. Using my screen editor (which should also generate the ASM code for this), I can draw this pattern with ball size 4 and then leave holes in sprite 2: Edited May 18, 2023 by lucienEn 2 Quote Link to comment Share on other sites More sharing options...
LatchKeyKid Posted May 19, 2023 Share Posted May 19, 2023 (edited) On 5/3/2023 at 8:16 AM, lentil_soup said: Hi @lucienEn. Thank you for sharing the screen shots from debug mode. You said that the giraffe was made by using the sprite 1 and the ball (yellow and blue pixels respectively, I presume). Do you happen to know how they did manage to get the spacing for the ball so small? Please refer to my screenshot below for reference: I have tried myself to do something similar but the gap is massive (9 color clocks as expected from doing 2 consecutive sta RESBL). Are they using a 2x/4x ball and the sprite on top has "holes" that let the ball visible through? Like the following: Sprite priority would be the obvious choice as you said. If the player sprite has priority over the ball and the two are overlaid then the ball only shows up in the empty pixels of the player sprite. It's how I hope to make my games a bit more colorful assuming I ever get past the planning stage on one of them (see my avatar here for an example). The big catch is that you can only make the ball 1, 2, 4, or 8 wide so you can only space the empty spots within those paramaters if you don't want the ball to spill over. Edited May 19, 2023 by LatchKeyKid Quote Link to comment Share on other sites More sharing options...
LatchKeyKid Posted May 19, 2023 Share Posted May 19, 2023 On 11/29/2022 at 1:46 PM, SpiceWare said: Just 2x with line-by-line shifting. Manipulating the player's size and/or shifting the position line-by-line has been used to great effect for a long time, such as in Boxing and Dolphin: I also use it for the largest asteroids in Space Rocks, and the space stations in Draconian Thanks for the examples! I relatively recently discovered that Kung Fu also uses that technique for the leg during the kick animations and was curious about what other games did so as well during the original run of the console. 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.