Jump to content

Grizzards — turn-based RPG (completed)

Recommended Posts

4 hours ago, Thomas Jentzsch said:

Yes, Stella does emulate the SaveKey. You only have to make sure that the correct controller for the right port is selected.


Also, @Bruce-Robert Pocock, I would reccomend a port to the 5200, or maybe 7800.

This game is amazing and honestly, specifically 2600--> 5200 is pretty easy.

It could have better graphics on the 5200 as well.


I'm not saying you should, I'm saying that especially if your using ASM (which it looks like you are) then a 5200 port would be a breeze to make.


Honestly, what you've done on the 2600 is just insane. Even if the graphics aren't as good as say, Mappy or Zoo keeper, the gameplay is there. It is how an atari game should be- the gameplay. If its got good gameplay, people will play it.  And your game has that!! Amazing work.


  • Thanks 1
Link to comment
Share on other sites

Just to "brag" a little, Zephyr (who does not have a forum account) seems to have just set the reigning high score tonight with 40,449 points, 17/30 Grizzards, and only 4 hours (game clock time). That's on the “first quest” (before New Game Plus kicks in), standard difficulty (“B”).

Link to comment
Share on other sites

  • 2 weeks later...

I've discovered a bug — which has been patched in the latest daily builds on the web site. However, the work-around is very simple: If you're using the latest packaged beta build of the game, please do not try to register a character with a name containing the digit zero. There was a bug in which the code would not allow you to resume from a slot whose player name contained a zero.


There are a few other changes in the daily builds since the previous release, mostly to do with near-end-of-game leveling.

  • Like 2
Link to comment
Share on other sites

A few updates … we may have been quiet here on the forum, but we've been busily hacking behind the scenes.

  • We've been working with @Albert to nail down manual, packaging, and such details, who has been long-suffering to get everything in place.
  • Grizzards will be one of the games you can play at the AtariAge booth at PRGE!
  • The AtariAge official Grizzards cartridges will include a save-to-cartridge capability thanks to @batari, so you will not need a SaveKey (or AtariVox) to save your progress. Each cartridge will have eight save slots available, which you can (if you RTFM) erase if you need to, but you can continue with New Game Plus in each slot as well.

Of course, if you do have an AtariVox, you'll get the advantage of full narration of all NPC interactions and combat encounters, as well as various other bits. If you saw the trailer video posted previously, or have seen the game on @ZeroPage Homebrew, you should know it can be quite chatty.


There have been a few other changes, most of which you should not be able to notice, but that will include some late-game edits for playability (leveling) as I mentioned before.


OK, this is actually the Spoiler Lite™ edition:

If you got to Port Lion, and found the one lost item, and then someone else found the other item you needed and gave it to you, and then you gave it to yet another person and they used it to get you to a new place — we're adding some more Grizzard Depots in that new place, because folks were getting frustrated with the distance between them and how tough some of the combats can be in there. Also, some of the monsters placements and things have been changed, and lots of tiny tweaks.


In other words, if you got "past" the main parts of Port Lion and then felt like you were just getting sucker-punched, you might appreciate the changes. It's not "super easy" but it's definitely more of a fair curve.

  • Like 7
Link to comment
Share on other sites

A few little features have probably made it in at the last moment, and will be primarily in the AtariAge release at PRGE.

  • High Score Registration. When — and only when — you defeat the final boss, you have a chance to set the High Score. Your player name and score will automatically be entered, and will appear in the Attract Sequence, unless someone unseats you.
    • High Scores will only work on the AtariAge cartridge version (due to no room for the extra code on the SaveKey build), and if nobody has won the game yet, you won't see the high score screen appear at all.

There's “only” around 40 major changes since the last release, and I will package up a SaveKey version of something very much like the final build later. Of course, that build will continue to require a memory device, and may be missing a few little details (like high scores) due to lack of room in the ROM.


If you're at PRGE, be sure to check it out in person … and say “hi!” … and see if you can spot the changes 😃. There have been visual and even auditory tweaks in the attract/title sequence, the map screens, the combat engine, even the end-of-game sequence. One thing that has not changed are the four Easter eggs in the game. As far as I know, nobody seems to have found any of them, yet. Here's some hints.


Here's what the four “Easter Eggs” do:

  • One shows a “dedication” screen and the build date of your ROM. It includes a voice-over thanking the AtariAge Forums folks — that would be you!
  • One gives you instant access to the most powerful Grizzard companion in the game, already at a high level, but it also blocks you from being allowed to set a high score.
  • One lets you start your game by going directly to the New Game Plus (“Second Quest”) level of difficulty with all three Starter Grizzards ready for you at the Depot.
  • The last is a secret room, which just exists for Bragging RIghts mostly, however, it is the only way to finish a single game (not New Game Plus) of Grizzards and have caught all 30. That's because normally you'll only be able to have one of the three Starter Grizzards, and the forms that it metamorphoses into, leaving gaps in your, um, Grizzard-dex, that can only be filled in New Game Plus time. Using this secret room, however, you can obtain the other two Starters without waiting for New Game Plus.

I'm not counting there the secret way to clear the High Scores table, which will also be revealed in due time.


How big is it? While it's a whole 64kiB ROM, Grizzards does use almost all of it. In fact, we use over 98% of the available ROM space, with only about 170 bytes (2.6%) of duplicated code and data shared between banks.


Also in future, for players, I've developed a partially-complete “Complete Guide” with the details of every monster, every Grizzard companion, and maps of every area of the game — not quite a walkthrough, but very close. I'll be finishing that up and making it available to anyone who wants to cheat look under the hood at how the game world is put together (from a designer's or player's, not programmer's, perspective) at some time in future.


About that Save To Cartridge … how does it work? (For developers)


As far as I know, aside from high scores and settings on Star Castle Arcade, Grizzards is one of the first (if not the first?) 2600 games to save your game progress directly on the cartridge, but I doubt it will be the last. The technique used for Grizzards is not ARM-based (there are apparently other techniques that could be employed there), but some very clever address-bus-based logic. batari has designed a "conventional" (non-ARM) board with a Programmable Logic Device that handles bank switching based on the usual “EF” style banking, which is the 64k version of “F4” banking. However, it does a bit more than that, as well. The PLD also presents four special i²c hotspots, and uses two other addresses from which to read. We've taken the SaveKey i²c library (based on the original by Alex Herbert) and created an API-compatible version that uses these new hotspots ratther than interacting with the control port, so the usual “higher level” i²c operations will all work more-or-less as you expect: i.e. i2cStartWrite, i2cStopWrite, i2cStartRead, i2cStopRead, i2cTxByte, and i2cRxByte.


As such, there are six ROM addresses in high memory that can't be used in any ROM bank. Four of these are “don't care” values, like the banking hotspots, while the others must contain (for this driver to work) precisely a zero and a one.


There is one major difference between addressing the SaveKey and addressing the on-cartridge EEPROM, and that's addressing. The SaveKey addresses you use are assigned from some certain “prefix,” for example, the SaveKey version of Grizzards uses memory starting at SaveKey address $1100. The Save-to-cart version starts at address $000. (Actually, $n00 where n = save game slot index.) Also, the SaveKey is a 32kiB EEPROM, divided into 64 byte pages, with an address range $0000 - $7fff; the Grizzards cartridge will have a 2kiB EEPROM in it, so the total address space is only $000 - $7ff. In order to keep life interesting, the 2k EEPROM uses the “i²c bus attention” byte to contain the upper 3 bits of the address. Look at it this way; in a SaveKey program, you might do something like this:

          jsr i2cStartWrite           ; Sends i²c attention byte $a0
          bcs NoSaveKey               ; complain or ignore the lack of SaveKey
          lda #>SaveKeyStartAddress
          jsr i2cTxByte               ; Sends upper byte of address, $00 - $7f
          lda #<SaveKeyStartAddress
          jsr i2cTxByte               ; Sends lower byte of address
          ;; save data, &c.


With the 2k EEPROM, that same code changes a little, to look instead like the following. Also, note that the i²c attention byte is also ORA'ed with the upper address bits when calling i2cStartRead, so you'll need to know the address's upper bits twice when reading data.

          lda #>EEPROMStartAddress    ; 0 - 7
          jsr i2cStartWrite           ; Sends i²c attention byte ( $a0 | (A << 1) )
          lda #<EEPROMStartAddress
          jsr i2cTxByte               ; Sends lower byte of address
          ;; save data, &c.
          ;; … the same as above


After PRGE, I'll rework the i²c library file into a more generally-useful form (as a drop-in file others could use) and also convert a copy to dasm format as that seems to be quite popular here.

Kudos to batari for making this technique possible.


And … keep an eye on the usual places this fall for the first previews of my next project, which is already in-the-works. It's very early, and many critical components simply don't work properly yet, but I think there's a good chance that some Grizzards fans might be excited about that game, as well. (No, it is not a Grizzards sequel nor port … it's something new and different.)

  • Like 2
Link to comment
Share on other sites

I'm really looking forward to this, and whatever fancy physical edition I can get! With save now supported, if I use an AtariVox, it is just for audio, correct? It doesn't save it there instead if present or anything right? I'd prefer the save travel with the cartridge, and I'm assiming a single save method is way easier (and preferred by me!).

  • Thanks 1
Link to comment
Share on other sites

13 minutes ago, Hastor said:

I'm really looking forward to this, and whatever fancy physical edition I can get!

That's appreciated! While it's not as super fancy as some games, perhaps, the AtariAge boxed edition will have the box & cartridge, a 20-page manual (rather similar to the ones posted here over the past year, but edited and refined quite a bit) and a card with a map of Syrex.

13 minutes ago, Hastor said:

if I use an AtariVox, it is just for audio, correct?

On the AtariAge release version, the AtariVox (which is optional) is just for voice; the “save game” and high score functions are totally routed to the internal EEPROM only. With eight slots to work with, I hope there's plenty of room for the whole family to have their own games going.


(There will eventually be a final build of the SaveKey version as well, but it may be a little while before I put together a proper release build for that — definitely after PRGE, for starters.)

Link to comment
Share on other sites

6 hours ago, Hastor said:

So, will the physical version support AtariVox?

Yes, but only for voice synthesis. As you're probably aware, we have full narration of combat as well as all NPC interactions and a lot more, so it can be quite chatty.


You can tell if the AtariVox is detected immediately upon start up as it'll start talking during the Attract sequence.


You won't miss much if you don't have one, although there are a few subtle bits that are only in the speech track.

Link to comment
Share on other sites

6 hours ago, Hastor said:

So, will the physical version support AtariVox? That would be a hell of a choice between the two! All the AtariVoc stuff I have, it is optional but supported.

Exactly so, it's optional, but we make a lot of use of it for voice synthesis.

Link to comment
Share on other sites

Here's a list of the changes from the last major release, to the final AtariAge version. Note that some of these features, like more save game slots and recording high scores, are particular to the AtariAge cartridge and will not be in the SaveKey version at all.

  • Packaging design, as you've seen above
  • Bug fix: music playing over the “Atari Today” jingle on Reset
  • Added another Depot to the final area
  • Score resets properly on New Game Plus
  • Changed XP required to metamorphose
  • Starting a new game must blank out Grizzards from a previous (erased) game in that slot
  • Players using a specific cheat code cannot set the High Score
  • Grizzards whose Max HP reached 255 would vanish from your party
  • Ensured that an erased game is not overwritten until you confirm your name & Starter on the new game
  • Reduced the code size of several things to make room
  • Pinned top score at 999,999 points (no wrap-around)
  • Support for saving to the AtariAge cartridge's internal 2kiB EEPROM
  • Attract sequence always shows all 3 starters with equal time
  • Current Grizzard's stats could be wiped out on New Game Plus
  • Gary said something in early conversation that could not have happened yet at that point in the story, a.k.a. Gary sees the future
  • Bug fix: AtariVox voices turned off after sailing
  • Bug fix: Three Starter Grizzards appeared in party
  • “You won” screen gives correct count of Grizzards caught (or metamorphosed into)
  • Bug fix: New Game Plus copying current Grizzard's stats over a new Starter
  • Speech on boarding ships was trying to speak garbage
  • Procedure for encoding fake save games into EEPROMs to test game scenarios on the hardware
  • Bug fix: Switching Grizzards could cause all Grizzards' Attack and Defend abilities to go to 255
  • Bug fix: Not creating a valid progress record when you visited a Depot
  • Bug fix: Smaller buffer caused overwriting game slot signature
  • Text sprites aligned properly for displaying the high score
  • Bug fix: Game drops you in directly after the publisher screen
  • Tested 7800 detection on the actual circuit board
  • All of the monsters found in the manual (except, obviously, the Grue) can appear in the Attract sequence
  • You can set the high score (when you win)
  • Peter was missing … from the place to which he went when he went missing
  • Manual regression testing across about a dozen test scripts
  • Ensured that you couldn't load Grizzards that had not been caught
  • You can erase the high score record by holding both Game Select and Game Reset while you power on
  • Bug fix: same Grizzard repeating in the Attract sequence forever
  • Bug fix: speech from memory bank 8 causing AtariVox to cough and sputter
  • Bug fix: the beloved in Treble Village did not speak (via AtariVox) or the speech was from a future conversation compared to their text
  • Bug fix: A first quest win saying “won again”
  • Bug fix: The number of Grizzards caught on the “you won” screen would increase to include the new Starters being added to your party in New Game Plus if you read all of the credits and looped back around.
  • Bug fix: HP could “wrap around” back to zero when healing massive amounts
  • Adjusted Grizzards' colors
  • Aligned all combat Moves or monster names to the same style
  • Bug fix: Being able to re-catch a wild Grizzard after having metamorphosed one before
  • Bug fix: Score wiped to 000,000 on defeating the final boss
  • Secret room added in which to catch the Starter Grizzards you did not catch
  • Bug fix: New games inherited unused potions from erased games in same slot
  • Position in “your house" was not being set on New Game Plus
  • Adapted SaveKey code for 24LC16B interface
  • Added bosses to Attract sequence
  • Attack results are moved lower on the screen
  • When using the “cheat” code to start in New Game Plus mode, you can now enter your name on the save game slot
  • NoSave build was broken
  • Portable build was — and remains — broken
  • Pressing Game Reset at any time during end credits starts New Game Plus
  • Bug fix: After winning, if you cut power, your save game slot was ruined
  • When unpausing, make music resume immediately
  • Fixed colors of Uber Slimes
  • Make NPCs in west Port Lion distinguishable by position
  • Fisherman's conversation tree was broken
  • Allow player names to start with a zero
  • General level around end-of-game bosses
  • Speech for “Hard Tackle” Move was the wrong phrase
  • Added a secret dancing signpost with the build date information as an Easter Egg to be found
  • Button III can be used to reset from the error screen (but hopefully you'll never see it)
  • Adjusted wave motion for Aquax title/chooser screens
  • Fixed giving out points for certain role-playing events
  • Fixed some Fat Tony dialogue where he knew more than he should at that point in the story
  • …and miscellaneous other, smaller changes.

With the press onwards to PRGE, the web site has not yet been updated and I have not put up proper links yet for a 1.0 public release, but I will get to it sooner than later.


In other news, Zephyr and I will be at PRGE (all three days), so do say “howdy” at the Expo if you're there!

  • Like 5
Link to comment
Share on other sites

On 9/29/2022 at 1:51 AM, Bruce-Robert Pocock said:

About that Save To Cartridge … how does it work? (For developers)

Lessons learned: How SaveKey's EEPROM works really, and how the 2k on-board EEPROM differs:


SaveKey “blocks” are 64 bytes long, and game allocations are designed to align to those 64-byte boundaries. (You'll notice that on the great allocation list, Grizzards's relatively giant save files take up 12 blocks, 4 blocks for each of the 3 save game slots. Just based on having up to 30 Grizzards with 5 main stats each, that right there is over 150 bytes, plus the game progress data, game clock, score, potions, & other global data.)

The 2k EEPROM, rather, uses a 16 byte block size. I had misinterpreted the documentation: this does not mean that you have only a 16-byte buffer to write from, it also means that any write will wrap around if you try to save more than 16 bytes or across a 16-byte boundary.


For example, suppose you've set the pointer to $453 and wrote 16 bytes:

          lda #$04
          jsr i2cStartWrite
          lda #$53
          jsr i2cTxByte
          ldx # 0
          lda Buffer, x
          jsr i2cTxByte
          cpx #$10
          bne -
          jsr i2cStopWrite
          jsr i2cWaitForAck

          .byte 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15


Let's assume that the area of the EEPROM was initialized to $ff (you can't guarantee that, but it's the usual value of a blanked EEPROM). What you probably intended was this:

       0. 1. 2. 3. 4. 5. 6. 7. 8. 9. a. b. c. d. e. f.
$450.  ff ff ff 00 01 02 03 04 05 06 07 08 09 0a 0b 0c
$460.  0d 0e 0f ff ff ff ff ff ff ff ff ff ff ff ff ff

What will actually happen is, the write “cursor” will wrap around on the same 16-byte page:

       0. 1. 2. 3. 4. 5. 6. 7. 8. 9. a. b. c. d. e. f.
$450.  0d 0e 0f 00 01 02 03 04 05 06 07 08 09 0a 0b 0c
$460.  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff


Note that you can write fewer bytes if you want (although, as the datasheet charmingly describes it, this will cause the entire block to “endure” a write cycle), but you can't write more than 16 bytes, and you can't write across a $10 boundary.


So, one further remediation step that may be required to use the on-cartridge EEPROM is that you may need to audit your save records structure/write patterns to ensure that this does not bite you. It did bite me, both in saving global game data and in the arrangement of Grizzard stats in the save file – causing an “after the last minute” rework to the record layout for Grizzard stats.

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

I saw that Grizzards v1.1 was posted on your site - congratulations on the release! I thought you might like to see your incredible accomplishment running (via StellaDS) on the venerable Nintendo DS.  Another great RPG playable on the old handheld - thanks for your efforts and a public release for us to enjoy!


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

  • 2 weeks later...
  • 2 weeks later...





Make sure you tune in this Saturday and Sunday to ZeroPage Homebrew for the biggest LIVE UNBOXING and INTERVIEW EVENT OF THE YEAR for Atari Homebrew! ZeroPage Homebrew will be hosting AtariAge Day 2022: Fall Edition celebrating all the newest Atari 2600, 5200, 7800 and Atari Jaguar releases!

Saturday Nov 12 & Sunday Nov 13, 2022
LIVE @ 12PM PT | 3PM ET | 8PM GMT (Click for your local time)
WATCH LIVE: https://twitch.tv/zeropagehomebrew/
WATCH LATER: https://youtube.com/zeropagehomebrew/

We will be talking LIVE to the developers of TWENTY FOUR GAMES that are hitting the AtariAge Store:

  • Blocks (2600) - Jeremiah Knol & Jeff Haber
  • Boulder Dash (2600) - Thomas Jentzsch & Andrew Davie
  • Gorf Arcade (2600) - John Champeau
  • Grizzards (2600) - Bruce-Robert Pocock
  • Lode Runner (2600) - Dion Olsthoorn
  • Oozy the Goo Slime Quest (2600) - Vladimir Zuniga
  • Qyx (2600) - John Champeau
  • RAPTOR (2600) - Andrew Pauley
  • RubyQ (2600) - Silvio Mogno
  • Stratovox (2600) - Carlos Centeno
  • VROOM! (2600) - Thomas Jentzsch
  • Rob 'n' Banks (5200) - Ryan Witmer
  • 2048 (7800) - Lewis Hill
  • Attack of the PETSCII Robots (7800) - Mike Saarna
  • Dragon's Havoc (7800) - Todd Furmanski
  • Galaxian Arcade (7800) - Bob DeCrescenzo
  • Keystone Koppers (7800) - Lewis Hill
  • Pac-Man Collection 40th Anniversary (7800) - Bob DeCrescenzo
  • Popeye (7800) - Darryl Guenther
  • Slide Boy in Maze Land (7800) - Vladimir Zuniga
  • UniWarS (7800) - Bob DeCrescenzo
  • Chaos Engine (Jaguar) - Lawrence Staveley
  • Gods (Jaguar) - Lawrence Staveley
  • Stormbringer (Jaguar) - Lawrence Staveley



- James

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...
On 11/23/2022 at 8:37 PM, LatchKeyKid said:

This may sound like a stupid question but is the inspiration for this a certain handheld monster catching/fighting game?

It definitely was strongly influenced by them as a whole. It actually began it's evolution as a party-based TRPG concept I was calling "Initial Fantasy" for no particular reason 😏 but pretty quickly the "monster collector" genre took over.


If anyone we're ambitious about doing "Initial Fantasy" it's still quite possible that the Grizzards code would make a nice starting point, but even with SaveKey that would probably require more ROM and SARA RAM to complete successfully.


By the way … I have been meaning to finalize a public build based on the cartridge version and should have that packaged up in the next couple of weeks, in time for the general release in the AtariAge store. It's mostly just packaging work, ensuring the PDF manual matches the public build of the game, and general administrative type things: the code is all in place for it.


I've been trying to hammer out some technical hurdles on Phantasia that have kept me from circling around to that lately.

  • Like 1
Link to comment
Share on other sites

  • 1 month later...

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