Jump to content

Unnamed Gridrunner-style X-Zapper thing (WIP)


Recommended Posts

I've been thinking about coding something in the fashion of Jeff Minter's classic VIC-20 game "Gridrunner" but not a port or cut down version or demake, just something that borrows (heavily) gameplay elements from it.


So the first thing to get running in batari is the infamous X-Zapper. In Gridrunner (and Matrix the sequel), the X-Zapper sits on the bottom line of the screen and advances left to right, wrapping around when it leaves the right end of the screen. On a rhythm (*) it fires upwards and zaps out the entire column it sits at the bottom of. The effect of this is to stop you camping (it's based on Centipede after all - it serves the same purpose as the spider and probably for the same reason) and so gameplay rhythm involves you perpetually running rightwards trying to stay ahead of it and swooping back left across it's face after it's fired and before it's due to do it again. We'll charitably overlook the bug that in the original VIC game the X-Zapper can never fire into the leftmost column...


Somebody else's VIC-20 YouTube video follows...



There is also a Y-Zapper in Gridrunner that works in the vertical plane and fires in tandem with the X-Zapper but that was always pretty weak sauce as an enemy, I never seemed to get hit by it very often and used to just blank it out.


So, fired up batari and produced this in an evening using the ball as the X-Zapper because I want to use Player1 for future enemies.



The next thing is add some actual game here. At the moment I'm thinking of NUSIZ1'ing to get three enemy sprites and what I haven't yet decided is whether they will act as conventional divebombers to be shot and avoided, a formation that flies left and right and drops bombs, or something that snakes right to left down the screen in the style of Centipede and Gridrunner. Also whether the player will have u/d movement as he does here. I'm using missile0 for both the player and the X-Zapper because I don't know if missile1 will be needed for some other future gameplay element.


I'd like it to evolve organically as I play about with gameplay elements so don't have very much of a plan at the moment. To be honest that's what I think Jeff did on a lot of his early games.




(*) A lot of people think this is random in the way it fires and thus horribly "cheap". It's not, and Jeff actually tells you that in the instructions if anybody bothered to read them lol...

Edited by Coopdevil
  • Like 4
Link to comment
Share on other sites

If you use the multisprite kernel you might use:

	pfheight = 0

and positioning a large empty playfield with only a single line to also have a X-Zapper.


I have modified @Random Terrain's "Sprite with Missile Example" to use the multisprite kernel and to change the playfield position randomly every time the joystick button is pressed.




Using the multisprite kernel for your project would also have the advantage of having more enemies (up to 5), but also some disadvantages:

  • No multicolored players
  • Missiles are only one pixel height
  • The ball is also only one pixel height, but since you are using the ball in full screen height this should be doable with a kernel hack and switching ENABL in your bB code


  • Like 1
  • Thanks 1
Link to comment
Share on other sites

6 hours ago, Al_Nafuur said:

If you use the multisprite kernel you might use:




Thanks very much for that, I had been wondering if something like using the playfield with very narrow block heights would do the trick. TBH I'm trying to keep it simple for now without delving into the complexity of the extra kernels, and also I don't think there is really enough playspace for a Y-Zapper to be worth bothering with.


As can be seen below I'm not using multicoloured sprites anyway, but would want taller missiles. In my messing about with Einvader, my first game, I found that taller missiles made the enemies a bit easier to hit and so I felt the game became more playable.


Still, I admit I'm a long way from knowing what the finished result will be.

  • Like 1
Link to comment
Share on other sites

(The player to invader, and player to X-Zapper beam collision detection is disabled in this build as I had other things to test and didn't want them getting in the way. The X-Zapper is firing quite quickly too, faster than I probably intend at the start of the game but it's doing that in the interests of showing how it works.)



Reduced the U/D movement available to the player to about 40%-ish which is more in keeping with Gridrunner and Centipede etc. When the player sprite was allowed to camp up at the top of the playfield the rate of fire became excessively quick and took a lot of the skill out of it.


Came up with an interesting limited palette for the game too, black and white with a splash of red used for when the X-Zapper fires. That's quite unusual for Atari games, I don't really recall anything like that before but I really like the stark look of it. It might not look as good on a CRT though tbh when things go blurry and the edges of the colours bleed and crawl. I'll probably allow for a dark mode option with the black and white inverted.


I also got a train of three invaders running about using NUSIZ1 and reacting to where the missile0x is relative to player1x to correctly determine which of the three was shot and behave accordingly by changing NUSIZ1 on the fly. It may not seem much to experienced VCS coders but realising that I could change to the NUSIZ1 value to other settings to simulate shooting an individual invader out of the formation was a real lightbulb moment for me. Very pleased to get that working.


An idea I've had bouncing around is for the game to compromise of a few shooting mini-games so that after each train of three invaders is killed there is something like an 80% chance of the next event being the train respawning at the top of the screen but otherwise "something else" happens instead. For example I was thinking of a indestructible missile (say something like the big bullets in Mario games) appearing on the player's y position at either left or right and screaming across the screen, being removed when it hits the other end. So you are blasting through waves of "invader trains" but then at random something else happens and you have to react to it quickly. An indestructible quad size enemy (maybe a big saucer) slowing descending and firing rapidly below it is another one I was toying with, you score points for each time you hit it but have to balance risk with reward in that the longer you stay below it dodging it's bullets the more points you can score.


Need scoring and two frame animation on the enemies too. Simple stuff though.





  • Like 3
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.

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.

  • Recently Browsing   0 members

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