Jump to content
IGNORED

Snake Plissken - game released


sometimes99er

Recommended Posts

snakec.bin

 

 


- - - - -

Origin
https://en.wikipedia.org/wiki/Snake_(video_game)

Back in 2005 I did a routine for scrolling a line of text. Added a few bits to make a demo. It scrolls the text and reacts when you press fire, but otherwise stalls / stalled (wasn't brought any further).

hellr.png

 

 

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

Then in 2007 it was time for another snake demo, or could we call it a game.

 

The player controls a square on a bordered plane. As it moves forward, it leaves a trail behind, resembling a moving snake. In this game, the end of the trail is in a fixed position, so the snake continually gets longer as it moves. In another common scheme, the snake has a specific length, so there is a moving tail a fixed number of units away from the head. The player loses when the snake runs into the screen border or trail.

 

 

 

snakepl.png

  • Like 3
Link to comment
Share on other sites

Ah, thanks for feedback. The downloads and likes are of course very nice, but I was wondering if I was almost going to be talking to myself. ;)

 

Wondering aloud if you could speed up the game if you skipped the GCHAR and double-tracked where you've been in an array.

 

;)

No GCHAR. With the XB version thrown in and the latest one being rather slow, I may have confused things.

It's written in assembly, so it can actually fill the screen in less than a handful of frames with current algorithm - and yes, it's using an array. The old assembly version were set to move once per 4 frames, and this one is set at once per 8 frames. Speed increases will be coming up soon.

 

I LOVE THIS GAME! It's addicting as hell though!

 

:)

Thanks. It's one of those typical game projects to do when you've done the initial Hello World.

Edited by sometimes99er
Link to comment
Share on other sites

Thanks for feedback to all.

 

Snafu for the Intellivision is probably my favorite in the genre. Game variation 3 is our favorite. Anyone who hasn't played it should give it a shot.

 

Snafu looks good. I like the effect of the sprites traveling above the character progression. Computer controlled snakes is also a nice idea.

 

This update includes:

  • Speed increase for every 4 apples eaten.
  • Scoring is now 5 points per apple.
  • Color, graphic and sound changes.

The speed is 8 frames per move (slow) to begin with, increase is 1 frame per move, and it ends at max of 2 frames per move (very fast).

 

snakepl006.png

 

 

(program name: snake)

 

 

 

 

  • Like 4
Link to comment
Share on other sites

It's amazing how such a simple game can be so friggin addictive! I love it :thumbsup: :thumbsup: :thumbsup:

Is this the final version?

 

Thanks. :)

 

No, it's not the final version. I think I'll be adding things and adjusting along the way. Right now I'm thinking levels, challenges, power-ups and -downs, keys, obstacles, moving obstacles, enemies, teleports ... At the same time derailing with a handful of other games. And only an hour to spend here and there. :|

Edited by sometimes99er
  • Like 1
Link to comment
Share on other sites

 

No, it's not the final version.

 

Glad to hear that!

 

It would be interesting to have a random rotten apple that kills the snake.

 

One problem I've found standardizing to an UberCart for everything, many single proggies such as this don't come available for the non-inverted 512K chip. :skull:

post-35324-0-70113300-1459715449_thumb.jpg

  • Like 1
Link to comment
Share on other sites

One problem I've found standardizing to an UberCart for everything, many single proggies such as this don't come available for the non-inverted 512K chip. :skull:

Single 8k programs don't care if the cartridge is inverted or not, they don't bank. :)

  • Like 1
Link to comment
Share on other sites

One problem I've found standardizing to an UberCart for everything, many single proggies such as this don't come available for the non-inverted 512K chip. :skull:

Single 8k programs don't care if the cartridge is inverted or not, they don't bank. :)

Thanks. Yes, I thought that, and yet I still don't quite understand the original statement (/question). Is there a download format missing ? :)

Link to comment
Share on other sites

 

 

Thanks. Yes, I thought that, and yet I still don't quite understand the original statement (/question). Is there a download format missing ? :)

 

I *believe* I need it in non-inverted format to program into a AT49F040 512K chip for the UberCart. I tired the snakec.bin image, but nada happened.

  • Like 1
Link to comment
Share on other sites

I *believe* I need it in non-inverted format to program into a AT49F040 512K chip for the UberCart. I tired the snakec.bin image, but nada happened.

If you place the 8K binary in every bank or maybe just in the first and last bank, then I think it should work ? :cool:

 

As Tursi said, 8K programs do not switch banks, so it is as it is, - inverted and non-inverted does not exist in their world. Larger programs has one 8K after the other, and you can switch the order, hence inverted and non-inverted. A 32K program would have the order of 1, 2, 3 and 4 or, inverted, 4, 3, 2 and 1. The reason for the 8K chucks / banks is due to the memory layout of the TI, where ROM on cartridge is (normally) available only at >6000 thru >7FFF (8K), - larger programs has to switch in banks in this 8K area. ;)

Edited by sometimes99er
  • Like 1
Link to comment
Share on other sites

Yep... it's harder to get a high score.

I've gotten as far as 125 points a few times. The speed after 120 points is a bit insane (and it's the maximum speed even if you get further). ;)

 

snakepl006s.png

 

So after you score 20 points (4 apples eaten), the speed is increased from 1 to 2, - the number of frame updates between moves are lowered from 8 to 7, - and the milliseconds between moves are lowered from 133 to 117 (same thing just expressed in 3 different ways). The change in percent or the relative increase is probably perceived as being more and more significant. I think I'll leave out speed 7 from future versions. The missions will also add other aspects of difficulty, so this speed 7 makes it ... inhuman. On the other hand, there are people out there with good reflexes.

 

;)

Edited by sometimes99er
  • Like 1
Link to comment
Share on other sites

I *believe* I need it in non-inverted format to program into a AT49F040 512K chip for the UberCart. I tired the snakec.bin image, but nada happened.

Sometimes did a good job explaining what inverted versus non-inverted means -- for an 8k program the inverted versus non-inverted image would be 100% identical. The question is WHERE on that 512k chip are you storing the program, are you using a menu program, and what's the startup bank on your cartridge?

 

To be more clear, the above questions are the questions you need to answer to yourself when you make a cartridge with more than 8k available (whether you are using more than that or not). The TI can only ever see 8k at a time -- the analogy (and origin of the term "paging memory", which unfortunately we aren't using, we use "banking", but it is the same thing) -- is a book. You can only see the page that you currently have open. The book itself has many more pages (and so much more information or story), but you can't see the other pages unless you turn the current one.

 

In the case of the TI - the cartridge port can see one 8k page at a time. It turns the pages by writing to the cartridge ROM -- since it's ROM you can't actually change it that way, but the hardware sees the "erroneous" write and interprets it as a request to turn the page. The page it turns to is dependent on the exact address written -- certain bits from the address are captured and stored as the new page number. On "inverted" boards the bits are flipped from 1 to 0, and 0 to 1... on "non-inverted" boards they are not. This is the "379" and "378" - they are fully named 74LS379 and 74LS378 (they are the smaller chip on the board).

 

This is where "non-inverted" versus "inverted" comes in - a concept that we really only have because of the original way Extended BASIC ROMs were distributed. (Otherwise we'd probably only ever have built "non-inverted". ;) ). "non-inverted" would be how we read books in the Western world. When we ask for page 1, the book is opened to what we would consider the first page. "Inverted", however, starts at the back of the book, so when we ask for page 1, it opens the book "backwards" and starts at the LAST page.

 

Note that this causes an important distinction: with the "non-inverted" layout, page '1' is predictable, you always know exactly where it is relative to the beginning of the ROM. But with "inverted" layout, the "last" page depends on how big the EPROM is. A 16k EPROM only has 2 pages. A 512k EPROM has 64 pages. So on an inverted cartridge, if you have a program that uses pages 1 and 2, you need to be more careful about where they end up in the final image than on a non-inverted cartridge, where you don't really need to know how big the EPROM will be.

 

The third question was 'startup bank'. The hardware that we use for remembering the current page (or bank) is very old electronics design, and one of the things it does NOT have is a guaranteed startup state -- it can start with any random value, in theory. In practice we've found over hundreds of samples that almost all of them either start up with all '1's or all '0's, meaning that they start up selecting either the first or the last page of the EPROM. (We don't need to worry about whether it's inverted in the startup case).

 

The only way to know the startup bank is to try it. I released a test program for it, but you can just as easily burn a different program into each bank and see which one starts up. It's important to run a few power cycles to make sure it's consistent (soft reset, and even a hardware reset button, will not affect the page selection chip).

 

Once you have those three questions understood, you can build your ROM. Put whatever you want to start up in the startup bank (be it menu or program), and that should work.

 

If an 8k program is the ONLY program you are storing, just copy it to itself repeatedly till you have 512k (which would be 64 copies!!) Then it is guaranteed to be in the startup bank! ;) But more reasonably you probably want to make a big multicart with lots of ROMs, just drop the multicart menu I wrote at the first and last bank (covers most of the cases) and you can throw every 8k ROM you find in the middle. :)

  • Like 5
Link to comment
Share on other sites

Tursi,

That was a great post! So great in fact, I printed it off to digest in full later. You have a knack of explaining things that the un-enlightened can understand. (Trust me I know.) |:) Until now, I just grabbed pre-made 512K images made by TI gods like you, Rasmus and Stuart, and simply pressed a button to burn them in... no fuss, no muss and considered myself lucky.. It was so easy even this caveman could do it. ;)

 

I guess I'm entering a new phase where your post creates even more questions. Questions like, "HOW would I select which bank to put an 8K file into?" That seems like the best solution, at least to me at my level of understanding. Or the other alternative, "How would I copy a program into itself 64 times?" I imagine there are detailed instructions somewhere that I've overlooked, written in a style even a complete neophyte can comprehend?

 

 

I guess I've arrived at the point in time, that I need to find the time learn it and to do it myself. And speaking of time, I'm out of it for right now and have to leave. (Dammit, always when it gets good.)

Link to comment
Share on other sites

For duplicating an image, I just use the command prompt in Windows and the COPY command. It has the ability to concatenate two files by simply using a plus sign. One annoyance is that the command line infers you need to add a "/b" switch for binary. I've not seen it matter, but I do it for safety, cause the last thing I want to troubleshoot is a character being deleted or changed for a presumed text file end of line.

 

For instance, this is how I would get that 8k program to 512k (and every step along the way):

 

copy /b snakec.bin + /b snakec.bin /b snake16k.bin

copy /b snake16k.bin + /b snake16k.bin /b snake32k.bin

copy /b snake32k.bin + /b snake32k.bin /b snake64k.bin

copy /b snake64k.bin + /b snake64k.bin /b snake128k.bin

copy /b snake128k.bin + /b snake128k.bin /b snake256k.bin

copy /b snake256k.bin + /b snake256k.bin /b snake512k.bin

 

Note the lack of plus sign specifies the target file. A little hard to read! :)

 

You can also put more than two on a single line, I just find it quick to do that sequence (hooray for powers of 2!), using up-arrow and editing the line. ;)

 

And that's also how you would define the layout of the cartridge. For sake of simplicity, let's assume we're making a 32k EPROM, and we have four programs: MULTICARTC.BIN, SNAKEC.BIN, ZMOTIFC.BIN, and MINEC.BIN. So we need to answer our three questions:

 

Where on the chip? We have 32k, so there is room for 4 programs, and we have four. We're not fussy about order except that the multicart menu needs to be in the startup bank. All of our programs are 8k, so we don't really care if it is an inverted board or not (it only affects the order of 8k segments in a single program). And our startup bank, we have determined by experimentation, is the last one.

 

copy /b snakec.bin + /b zmotifc.bin + /b minec.bin + /b multicartc.bin /b mycart32k.bin

 

mycart32k.bin will then contain a binary file ready for EPROM with the four programs in that order.

 

There is a HUGE gotcha with using COPY -- it does not care a whit about how big the files are or what your eventual goal is. The files must be /exactly/ 8192 bytes for this to work. Most programs are shipped appropriately padded, but make sure you check before you start. :)

  • Like 4
Link to comment
Share on other sites

For instance, this is how I would get that 8k program to 512k (and every step along the way):

 

copy /b snakec.bin + /b snakec.bin /b snake16k.bin

copy /b snake16k.bin + /b snake16k.bin /b snake32k.bin

copy /b snake32k.bin + /b snake32k.bin /b snake64k.bin

copy /b snake64k.bin + /b snake64k.bin /b snake128k.bin

copy /b snake128k.bin + /b snake128k.bin /b snake256k.bin

copy /b snake256k.bin + /b snake256k.bin /b snake512k.bin

 

FANTASTIC! Thanks again Tursi! :thumbsup:

I think I'll have a few hours of time on Wednesday to play around, so I printed this up too and will give it a shot! :)

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...