Jump to content
IGNORED

Galaxian - Expanded


Nukey Shay

Recommended Posts

Sprites that don't use 6 pixels cause problems with positioning...because the reflect register is used to "fill in the gaps". While it's easy to alter the sprites to look more arcade-like (heck, just invoke Kevin's sprites that are already present in the assembly file), they won't move that way - they'd be wobbling around just like the flagships do if the reflect registers stay in, or move really herky-jerky if the reflect registers are taken out (which subsequently makes them easier to hit, too...since they would be stationary 2 frames out of 3). Neither one was an attractive solution IMO, so I kept Atari's original sprites in. As mentioned before, I only used 7 pixels on the flagship because A) a 6-pixel version looks worse than the wobble; and B) flagships wobbling in the convoy are easier to hit - costing the player potential bonus points if not targeting the convoy carefully to avoid them. The better solution is to fix the positioning so that reflect isn't required to fill in the gaps, but that is beyond me. Just looking at the multi-RESP0 demo code makes my brane hert.

 

Still no luck altering the routine for an 8th convoy sprite. I run short of cycles in setup in a couple of places, and I still never located any free ram to hold it's status. I have unrolled the loops in a 16k build, tho...might use the extra space to update color info of the independant sprite instead - that looks easier to do...and it would look a lot better if the sprites didn't become monocolor as they charge the ship.

Link to comment
Share on other sites

Just looking at the multi-RESP0 demo code makes my brane hert.

I've been experimenting with multi-RESP0 code (in emulation only for now), and I finally understand it better. In particular, I always wondered why the last sprite didn't have the same spacing as the others, and now I get it. The "Atari 2600 TIA Hardware Notes" document by Andrew Towers says

 

For better or worse, the manual 'reset' signal (RESP0) does not

generate a START signal for graphics output. This means that

you must always do a 'reset' then wait for the counter to

wrap around (160 CLK later) before the main copy of the player

will appear. However, if you have any of the 'close', 'medium'

or 'far' copies of the player enabled in NUSIZ, these will be

drawn on the current and subsequent scanlines as the appropriate

decodes are reached and generate their START signals.

However, the second sentence is incorrect. There are 4 possible START signals on a line-- really the same signal, of course, but generated up to 4 times, at values 101101, 111000, 101111, and 111001 of the player0 horizontal position counter.

 

101101 (count 39) generates a START signal and resets the counter to 000000, so it precedes the main copy of the player. Since RESP0 resets the counter to 000000 but doesn't generate a START signal, you normally have to wait for the counter to get to 101101 before the main copy appears, which means it doesn't appear until the next scan line.

 

111000 (count 3) generates a START signal that causes the near copy of the player to appear if bit 0 of NUSIZ0 is on (as long as bit 2 is not on as well).

 

101111 (count 7) generates a START signal that causes the middle copy of the player to appear if bit 1 of NUSIZ0 is on (as long as bits 0 and 2 are not both on as well).

 

111001 (count 15) generates a START signal that causes the far copy of the player to appear if bit 2 of NUSIZ0 is on (as long as bit 0 is not on as well).

 

The START signal is active for 4 color clocks (1 horizontal count). If you strobe RESP0 such that it ends while the START signal is active, you get the main copy of player0 right away, without having to wait until the next scan line. Based on the second sentence in the above quote, I always thought that when you trigger RESP0 multiple times on a line, you're just getting the extra copies of the player, not the main copy. However, that's true only if RESP0 ends while the START signal is inactive.

 

Consider the following examples:

 

  LDA #% 00000011
  STA NUSIZ0
  STA RESP0
  sleep 3
  STA RESP0

Here, you'll get 3 copies of player0-- main, near, and middle. That means if you wait long enough, then do RESP0, sleep 3, RESP0 again, you can get 3 more copies of player0 on the same line. Each triplet will be perfectly spaced (i.e., 8 color clocks between each copy). This means you could get 12 sprites on a line by doing the following:

 

  LDA #% 00000011
  STA NUSIZ0
  STA NUSIZ1
  STA RESP0
  STA RESP1
  STA RESP0 ; this gives you 3 copies of player0
  STA RESP1 ; this gives you 3 copies of player1
  sleep 5 ; or longer
  STA RESP0
  STA RESP1
  STA RESP0 ; this gives you 3 more copies of player0
  STA RESP1 ; this gives you 3 more copies of player1

Although you wouldn't have enough time to load unique values for each copy of player0 and player1, you could display the icons for up to 12 spare lives, or something like that, although they wouldn't be evenly spaced. Or, if you sleep 11 instead of sleep 5, you can get 6 sprites, a nice gap, then 6 more sprites, such that you could display up to 6 spare lives for one player on the left half of the screen, and up to 6 spare lives for a second player on the right half of the screen, in a 2-player game. Instead of sleep 11, you could use that time to load different graphics for the second set of 6 spare lives (if the second player had a differently-shaped ship), or a different color (like red for the first player's spare lives, and green for the second player's spare lives).

 

  LDA #% 00000011
  STA NUSIZ0
  STA RESP0
  sleep 3
  STA RESP0
  sleep 3
  STA RESP0

Here, you get 4 copies of player0-- but they aren't near, near, near, middle as I'd always thought. Rather, they're main, main, near, middle. The 2 main copies are 9 color clocks apart, and the rest are 8 color clocks apart.

 

  LDA #% 00000001
  STA NUSIZ0
  STA RESP0
  sleep 3
  STA RESP0
  sleep 3
  STA RESP0
  sleep 3
  STA RESP0
  sleep 3
  STA RESP0

This is similar to the preceding example, but you get 5 copies-- main, main, main, main, near (not near, near, near, near, near as I'd always thought). The main copies are 9 color clocks apart, but there are 8 color clocks between the last main copy and the near copy. This is usually described as "the last copy is shifted left 1 pixel," but it isn't shifted at all-- it's right where it's supposed to be!

 

  LDA #% 00000010
  STA NUSIZ0
  STA RESP0
  sleep 8
  STA RESP0

Here you get 2 copies-- main and middle-- since the second RESP0 ends while the START signal is active for the first middle copy, so you don't get anything from the first RESP0, just the main and middle copies from the second RESP0.

 

  LDA #% 00000100
  STA NUSIZ0
  STA RESP0
  sleep 19
  STA RESP0

Here you again get 2 copies-- main and far-- since the second RESP0 ends while the START signal is active for the first far copy, so you don't get anything from the first RESP0, just the main and far copies from the second RESP0.

 

All of this may be really old hat for expert 2600 programmers, but the realization that you get the main copy right away as long as RESP0 ends while START is active was a big revelation for me, since it finally let me understand why the spacing seems to be off on the last sprite in the fourth example.

 

Another trick that could be used would be to display all 4 copies on a line-- main, near, middle, and far-- by using the first example, waiting a bit, then changing NUSIZ0 to % 00000100 or % 00000110.

 

Michael

 

Edited to fix the binary values. Dang forum software loves to eat % 00!

 

Weird. The only way I can seem to get % 00 left unmolested by the forum software is to leave a space between them. :?

Edited by SeaGtGruff
Link to comment
Share on other sites

This means you could get 12 sprites on a line by doing the following:

 

  LDA #% 00000011
  STA NUSIZ0
  STA NUSIZ1
  STA RESP0
  STA RESP1
  STA RESP0 ; this gives you 3 copies of player0
  STA RESP1 ; this gives you 3 copies of player1
  sleep 5 ; or longer
  STA RESP0
  STA RESP1
  STA RESP0 ; this gives you 3 more copies of player0
  STA RESP1 ; this gives you 3 more copies of player1

Although you wouldn't have enough time to load unique values for each copy of player0 and player1, you could display the icons for up to 12 spare lives, or something like that, although they wouldn't be evenly spaced. Or, if you sleep 11 instead of sleep 5, you can get 6 sprites, a nice gap, then 6 more sprites, such that you could display up to 6 spare lives for one player on the left half of the screen, and up to 6 spare lives for a second player on the right half of the screen, in a 2-player game. Instead of sleep 11, you could use that time to load different graphics for the second set of 6 spare lives (if the second player had a differently-shaped ship), or a different color (like red for the first player's spare lives, and green for the second player's spare lives).

Scratch what I said about changing the graphics or color between the 2 sets of spare lives-- it don't work so good. But you can have 2 sets of 6 spare lives with the same graphics and color. You'd need multiple versions of the loop to handle the different numbers, and now I'm not sure how well changing NUSIZ0 and NUSIZ1 midline will work out timing wise. If I get it working, I'll post it as a bB minikernel.

 

Michael

 

Teaser screenshot

post-7456-128334296756_thumb.png

Edited by SeaGtGruff
Link to comment
Share on other sites

  • 3 weeks later...

Just tried the PAL60 version. What a great choice of vibrant colours and attract mode scoreboard!

 

Two things that might perhaps make it even better:

 

1. the shooting sound is too rough... it would be nice if the noise was softer, closer to the arcade machine

2. I'm missing the scrolling rasterlines in the scoreboard

Edited by maiki
Link to comment
Share on other sites

Ok it took me a while (it always does) but I already am in love with it as is. Being an arcade kid in the 70's & 80's VCS days, this is exactly the kind of homebrew/hack I like to see. :P From the arcade-like startup, to the 'attract mode' screens this thing is awesome. And the colors & relatively accurate ship graphic make this a game that would've made me shat a brick had I seen it in 1980 :lol: Awesome job Nukey

 

So far I've only played through 2 levels so I haven't gotten real in depth in it to see the difficulty, etc. But why don't you just spill the beans on what the easter egg is already. Is it something on level 4? :)

Link to comment
Share on other sites

Really? I think that it's relatively easy to trigger it in this hack (when compared to secrets I hid in other hacks)...just score well. Try waiting for aliens to charge before shooting them whenever you can. As you guessed...once a few levels have passed, it should appear. You'll be presented with a "bonus level" that gives you the opportunity to score a huge amount of points (once you see it, you'll know why).

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 months later...
Ok - passed the 4th level with 4 ships intact and nothing - mabey the third 4 is 4 zero's (score over 10,000) - should be do-able, just need a keen trigger finger!!!!

 

This was beginning to sound strange, so I double-checked the routine. It was BROKEN. The way it was supposed to work is by ANDing bit 4 of the middle score variable (i.e. hundredths-digit = 4, 5, 6, or 7) with the number of ships and the wave number. Unfortunately, the number of ships refers to the number of reserve ships...so you would not see the bonus wave until the score had rolled at least once...to hit 7k a second time and award the next one!

 

Fixed version posted up top

Link to comment
Share on other sites

  • 11 months later...

Hi Nukey. I just stummbled onto this old thread. Get hack! I love it!

 

I was also looking into the issue you mentioned of the flagship and thought I would try to see if I could try some pixel alterations that might help.

 

Meanwhile, as a hack request, can you have the ship double-sized along with the missile width too? I prefer the narrow shots with the normal ship on "B" difficulty and wide shots and wide ship on "A". Makes a neat trade-off for using wide shots on the enemies while becoming a bigger target as well, like it is done in atari space invaders.

Link to comment
Share on other sites

  • 5 months later...
  • 4 years later...

Not sure if you could make the flagships stop flashing white.

 

I'd suggest having the flagships turn upside down too as they dive, and also make your bullet be a bit more left of the centre of the player ship (so that hopefully the bullet's centre and the ship's centre match).

 

Also the main thing that really bugs me is how the boundary was taken away. If I was playing on an arcade machine, I'd see the boundaries, and if I was playing an emulation of the arcade version, the lack of stars would mark the boundaries, but here, there are no stars, so the boundaries (where my ship would end up unexpectedly stopping) aren't really clear, so I really hope you could put the boundaries back (though it doesn't have to be the same colour as the original). It just feels like everything's floating in the middle of a non-existing boundary.

 

Edit: I see some people dislike the border. I suppose maybe add an option to show/hide it.

Edited by Tangentg
Link to comment
Share on other sites

Not sure if you could make the flagships stop flashing white.

 

I'd suggest having the flagships turn upside down too as they dive, and also make your bullet be a bit more left of the centre of the player ship (so that hopefully the bullet's centre and the ship's centre match).

 

Also the main thing that really bugs me is how the boundary was taken away. If I was playing on an arcade machine, I'd see the boundaries, and if I was playing an emulation of the arcade version, the lack of stars would mark the boundaries, but here, there are no stars, so the boundaries (where my ship would end up unexpectedly stopping) aren't really clear, so I really hope you could put the boundaries back (though it doesn't have to be the same colour as the original). It just feels like everything's floating in the middle of a non-existing boundary.

 

Edit: I see some people dislike the border. I suppose maybe add an option to show/hide it.

Just fired up the arcade version and there is no boundaries. Could have been the bezel over the monitor that you saw!

Link to comment
Share on other sites

Just fired up the arcade version and there is no boundaries. Could have been the bezel over the monitor that you saw!

I have addressed that issue already. With the arcade machine you see the boundaries of the machine itself, and if you're playing on an emulator, the lack of stars marks the boundary, but my screen is really wide so there's black that isn't part of the game and black that's actually the game, so it becomes unclear whether the black you see is in the game or not so your ship could stop unexpectedly when moving to either side, and it just overall looks weird.

 

I don't really suggest adding stars to this 2600 version cause it may mess up the clearness of the game (blending in with the aliens and bullets), and it may not look that well like in the Apple II version. I just highly suggest adding a border back with an option to turn it on/off.

 

The fact that there isn't a border and the flagships don't turn upside down are the only things preventing me from enjoying this version, and I don't think stars would help.

I think you did a really good job at the alien sprites, especially when they're diving. I don't really like how the flagships look and would suggest adding more blue pixels in place of the yellow ones (not replacing all entirely obviously), but that's relatively minor.

 

Edit: From Google, the screenshot of Galaxian expanded from Strategy Wiki is this:

Galaxian_Expanded_2600_hack.png

 

If this is how the flagships look then there's not much problem with them, but in the version I got, they look like this:

 

post-7623-0-38297600-1322002941_thumb.pn

Edited by Tangentg
Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...