Jump to content

Bruce-Robert Pocock

+AtariAge Subscriber
  • Content Count

  • Joined

  • Last visited

Everything posted by Bruce-Robert Pocock

  1. It's that time again … here's a new beta release. Changes since the last release … 23 tickets closed: Improvements: Finalized Syrex map in the manual SECAM: Top half of Stats screen has to be black to see Grizzard portraits Button III will not toggle pause when in combat (since there's no pause to affect combat mode, but you'd come back to the map screen mysteriously paused) Animated 16×16 crab and bat monsters Random encounters now only occur in “dark” places for most monster types Title theme music plays over You Won screen Additional credits sequence from You Won screen Fisherman dialogue improved Able to catch a Corlyn Unused dialogue block memory re-used for other purposes Miranda's dialogue improved Bug fixes: Fixed pausing on SECAM build (right difficulty switch) Several cases which could cause transient scan line count errors, mostly in PAL/SECAM builds, but a few in NTSC. Combat moves fixed for Theref (non-working) move “SCARE AWAY” was removed Screen linkage on Port Lion southern beach area was incorrect when moving from screen 19 → 14 And, here are the binaries. Note that there's a cute little chooser to help you find the right binary for you on https://star-hope.org/games/Grizzards If you only have a Flashback Portable, this build is for you, but it's very buggy on that device. Refer to the NTSC NoSave manual, below. Grizzards.Portable.NTSC.full-beta-3.bin If you do not have an AtariVox nor a SaveKey nor a MemCard, you're limited to the NoSave demo. Grizzards.NoSave.SECAM.full-beta-3.pdfGrizzards.NoSave.SECAM.full-beta-3.a26Grizzards.NoSave.NTSC.full-beta-3.pdfGrizzards.NoSave.NTSC.full-beta-3.a26Grizzards.NoSave.PAL.full-beta-3.pdfGrizzards.NoSave.PAL.full-beta-3.a26 If you have a 32kiB limit flashcart (e.g. original Harmony) or only want the demo, here it is. Grizzards.Demo.SECAM.full-beta-3.pdfGrizzards.Demo.SECAM.full-beta-3.a26Grizzards.Demo.NTSC.full-beta-3.pdfGrizzards.Demo.NTSC.full-beta-3.a26Grizzards.Demo.PAL.full-beta-3.pdfGrizzards.Demo.PAL.full-beta-3.a26 And if you have a 64kiB flashcart you can try the full game: Grizzards.SECAM.full-beta-3.a26Grizzards.NTSC.full-beta-3.a26Grizzards.PAL.full-beta-3.a26Grizzards.SECAM.full-beta-3.pdfGrizzards.NTSC.full-beta-3.pdfGrizzards.PAL.full-beta-3.pdf I'm still eager to hear any feedback, naturally.
  2. Zephyr Salz & I just booked our tickets. We'll be in town before & after the expo as well, but if you need a hand with set-up/break-down @Albert we'll be around.
  3. Three newly-noticed bugs have (already) come up, You can't catch a Corlyn at the place they were meant to be, so while you can potentially win the game you can't (even on multiple runs through) get to all 30 Grizzards yet. #480 There's a certain point when you're traveling south from the cliffs to the beach, south of Port Lion, where you get “warped” to the southwest corner of the island accidentally. #481 A monster tried to heal itself, missed (!?) and apparently “ran away” from the combat. By healing myself (since there was nobody left to fight) I was declared the winner of the combat by default. This is not something that is supposed to happen, although it surely could have been worse. #479 There may be other bugs still in there, but those three I know about now. Update: Two of these bugs are fixed in the daily builds (#480, #481) now … the weird one (#479) is still a work in progress. None of them are really game-breaking, though.
  4. Well, if you've been following along, there have been a lot of changes since the last Beta release, so here is a Full Beta 2 release. There's a cute little Chooser widget on the web site along with some bonus downloads, but as per tradition, here's the release binaries as well. Note that the manuals for each version and region are slightly different, so you'll want to grab the PDF that matches your version. If you have only a Flashback Portable, there's a build for that, but it's quite buggy still, including very bad text displays … sorry, this is the worst experience. (Refer to the No Save NTSC manual, below.) Grizzards.Portable.NTSC.bin If you do not have a SaveKey or AtariVox device, you'll need the No Save demo. This is more limited than the regular Demo. Grizzards.NoSave.SECAM.full-beta-2.pdfGrizzards.NoSave.SECAM.full-beta-2.a26Grizzards.NoSave.NTSC.full-beta-2.pdfGrizzards.NoSave.NTSC.full-beta-2.a26Grizzards.NoSave.PAL.full-beta-2.pdfGrizzards.NoSave.PAL.full-beta-2.a26 If you have a SaveKey or AtariVox, you can play the full 32k Demo version. This has a number of limitations (discussed above) compared to the full game, but it does fit on an original Harmony cartridge. Grizzards.Demo.SECAM.full-beta-2.pdfGrizzards.Demo.SECAM.full-beta-2.a26Grizzards.Demo.NTSC.full-beta-2.pdfGrizzards.Demo.NTSC.full-beta-2.a26Grizzards.Demo.PAL.full-beta-2.pdfGrizzards.Demo.PAL.full-beta-2.a26 If you have a SaveKey or AtariVox, and a multi-cart that can handle 64k EF binaries (eg. Kroc, Plus, Uno, or Harmony Encore) or want to play in Stella or Gopher2600, you can play the full game. (note, the 7800 Pause button isn't properly recognized on the Plus or Uno carts.) Grizzards.NTSC.full-beta-2.pdfGrizzards.PAL.full-beta-2.pdfGrizzards.NTSC.full-beta-2.a26Grizzards.SECAM.full-beta-2.pdfGrizzards.PAL.full-beta-2.a26Grizzards.SECAM.full-beta-2.a26 And, just for @Prizrak's kind inclusion in the PlusStore, here is a version of the manual abbreviated to the point where it's usable from the PlusCart's text reader. Grizzards.Manual.txt This rolls up 59 tickets since Full Beta 1 in a somewhat tested package for all 10 of the above public configurations. Most of these changes have been in the daily builds already, and a few of them are mentioned in the previous posts, but for completeness's sake: Bug Fixes Fixed display of “T” in the “Lost Mine” sign on the road by Mt Peshon (and some other random letters in the middle of the screen as well) Fixed Joy2b+ button debounce errors on the 7800 (Thanks to @SmittyB for the solution) Fixed: it was possible to get stuck in the corner of Port Lion Docks when coming from the south beach at just the right position Critical hit CRIT! was missing if there was only a status effect Access to room links from rooms in a memory bank 64 & above was wrong (missing carry) Healing sometimes did not actually heal Limited Max HP of monsters (suggested by local testers) Monsters should not try to heal when they don't need it (suggested by local testers and @ZeroPage Homebrew) Every 4° frame of monster animation had a different number of scanlines colored in the top § Selecting certain moves (with very high index numbers) caused a one-scan-line overrun, e.g. BACK KICK Pressing “left” on the “I can train your Grizzard…” dialogue (and other dialogues later in the game) brought up arbitrary (but consistent) other dialogue from earlier in the game The number was not being spoken aloud for monsters as the object of a sentence Pronunciation of various phrases was refined (or, in some cases, corrected) Don't display CRIT! on a miss (*except SECAM builds, due to lack of space) Multiple pages of NPC dialogue in a row now work properly Reset switch works properly while on signpost/NPC text screens Semifinal boss was occurring in another semifinal boss's lair Monsters healing moves that … reflected? and damaged the Grizzard instead Bottom line of boss-sized Will-O'-Wisp were black rather than bright Two villagers (in Treble and Anchor) were spouting the same dialogue Critical hit damage was not always maxxed Dividing line on later Boss combats was “wiggling” on monsters' turn Proper “New Game Plus” action when pressing Reset from You Won screen If you die on the final boss, you can continue from the semifinal boss Probably fixed, but I can't prove it 100% … random encounters would “change into” a boss fight when they weren't meant to be. Enhancements Keep your last move selection between combat rounds (suggested by @ZeroPage Homebrew) Show a message when a potion was used (suggested from watching @ZeroPage Homebrew) Misc. editorial updates to the manual; general editing for terseness. Monsters do not “de-puff” when the game is paused All Grizzards have Moves available Game leveling: all areas (thanks in part to @mika and others) Optimized (combined) player/monster healing code from ExecuteCombatMove Healing moves should not “miss” (suggested from @ZeroPage Homebrew) Paused music when the game is paused (suggested by Zephyr Salz) — note, music stops after the current note finishes playing, so there's a tiny lag before it pauses. Black signpost in dark caves (with venom sheep) was impossible to see ERASE? screen was accidentally switching to ERASE instantly rather than defaulting to KEEP (needed to debounce joystick a bit) Move BURY DEEP now does a little damage as well The bestiary in the manual now includes all the monsters up to a certain point in the game (suggested by Zephyr Salz and from @ZeroPage Homebrew). Beyond that point, you'll have to discover the rest on your own. The Game Over (death) screen now shows your final score Moved the Spiral Woods signpost a bit more center screen so you don't walk into it when heading west accidentally (suggested by watching playtesters) Switching Grizzards does a Save of your selected Grizzard (suggested by watching playtesters) Shows a special message HEALED when healing results in your Grizzard being fully healed All Moves with names like “poison” or “curse” now have a chance of inducing either Sleep, Muddle, or both Demo saves now use the registered SaveKey addresses — but use a distinct signature key, because Demo save games are not in exactly the same format as the full game uses. Levers are now labeled in runes Finished animation of final boss Miranda's last information dump now occurs as a single stream of text Waves on Port Lion beaches are a little smaller Refinements on “You won” screen layout, including showing the winning player's name on the screen Updated map in manual Your Grizzard is fully healed when beginning the final boss fight (after whichever semi-final boss you visited last) I'm still trying to cram in some more features and leveling on the game, and I'm still eager to hear any feedback. I'm also aware of some edge cases where the line count gets out of whack for one frame at a time, which I'm hunting down one-by-one, mostly in the PAL or SECAM builds. There's not a lot of space left, but there's some: Total free ROM space (64k build) = 1,323 bytes, largest block: 323 bytes Total free ROM space in demo (32k build) = 1,206 bytes, largest block: 604 bytes There are also a few unused dialogue blocks that I'm going to repurpose. Grizzards.Manual.txt
  5. While I haven't “fixed” this in the general case, I did squeeze in a minor patch over lunch today where the player's Grizzard in particular shows HEALED when fully healed. The original enhancement ticket is still out there, but this makes me happy as a stop-gap. The problem is that the knowledge (as to whether the HP were truncated to the max HP of the monster) is not visible from the memory bank where the outcome display routine exists, and the combat core routines and combat core data have completely packed one 4k bank so tightly that there's only 3 bytes free (in that bank) in the SECAM build right now — not enough space to push the data over. Of course I'll try to keep optimizing things — combat code is thankfully not time-critical so I can optimize for space freely — but changes to the combat core are stupidly difficult to make at this point. Today's dailies will also include a number of other bug fixes and enhancements, and once a couple of other bugs are fixed and I've won the game from a clean start again, I'll roll up a full beta 2 Release as well.
  6. Since today is Easter … There are currently 3 “Easter egg” type features in Grizzards. If you discover these secrets, you can: Find a secret “credits” screen that speaks (with an AtariVox) a number of “thank yous” and shows you the build date of the game. “Upgrade” your saved game file by adding a very powerful Grizzard to your repertoire … but your score will be “tainted” forever. Start a new game and go directly into the “New Game Plus” mode. As a hint … the first one is the easiest to find, and it can be accessed during the Attract sequence; you might even be able to stumble upon it accidentally. The other two require a bit of work to find.
  7. The latest dailies have a rewrite of the “healing” system that actually solves some bugs that @ZeroPage Homebrew was noticing on their show. Now, Grizzards and monsters follow the same rules (use the same subroutine, in fact) when healing. Monsters now start with a certain number of HP, and that is their maximum HP. Monsters no longer can spam healing moves to go above their starting (now, maximum) HP In addition Monsters should no longer spam healing moves in general; they should only attempt to heal if they are actually injured, to some degree. One thing that may be a little confusing is that the combat outcome screen does not know when your Grizzard or a monster reaches their max HP, so e.g. You have 40 HP with MAX 50 You use a healing Move and “roll” to heal 20 HP 40 + 20 > 50, so you have now 50 HP (your max) The combat outcome screen says HEAL20 anyway I've opened a ticket to address this, if I can do, but it may fall victim to the lack of ROM space. I have 3 bytes free in the combat bank right now, but we'll see. As usual, there are miscellaneous other bug fixes or improvements as well.
  8. I was mostly kidding, TBH, but I appreciate the work @stepho put into the variant logo 😃
  9. So, ah, what about “couch compliant, but only if you use a gamepad”? I have this odd notion of making a variant with a gamepad in place of the CX-40 but that's awfully small 🤪 (context: Grizzards lets you use button II / C to access stats, which otherwise is on Game Select switch)
  10. Just a little progress note. The latest “dailies” have been getting to be “a few days” between. I'm stalking down some bugs that I hope nobody is encountering in real life, but I'm particularly aware of a bug where healing yourself produces incorrect messages — e.g. saying that you've healed, when you failed, or saying that you've been killed when you've actually been healed, or so forth. Some of the other remaining bugs are things like scanline count errors during certain transitions — e.g. when learning a move spontaneously (from gaining XP from defeating a monster rather than from observing a monster using that move). There are also a number of monster encounters not encoded in the third area of the game (the one you reach after Port Lion). The daily builds are going up over on the web page to avoid littering the forum with (perhaps literally) hundreds of ROM files, but my goal is to produce a definitive, final Demo version (along with a full game Beta 2 release) followed by, unless more bugs are found, a release candidate for the full game. In parallel, I'll continue trying to get the NoSave Demo working all right on the Flashback Portable for my own amusement, but no promises that I'll end up with an acceptable port there. Also, there will be a slightly updated version of the map forthcoming, some editorial changes to the manual, and I intend to shake up the Bestiary section of the manual to better match the monsters that you encounter in the earlier areas of the game particularly. As always, if you have any feedback I'm greatly appreciative to hear it. Stats: The demo build has around 1.2kiB of free space smeared between its 32kiB of ROM. Largest free block is 608 bytes. Smallest free ROM in a bank is 43 bytes in the bank handling dialogue text. The full game build has around 1.9kiB of free space smeared between its 64kiB of ROM. Largest free block is 634 bytes. Smallest free ROM in a bank is 6 bytes in the combat code. The full build for all the 13 ROM image files takes around 10-15s, wall clock time. The Lisp utility program itself takes about 8s to be compiled, first. Two difficulty modes (left difficulty switch) Over 200 screens in 3 different areas About 30 non-player characters with whom you can speak, some of whom occur more than once Exactly 30 distinct Grizzards, some of which can metamorphose into others 86 different kinds of monsters, of which 41 small (common) monsters, 41 large (boss) versions of the same, 3 special large, unique bosses, one “giant” final boss with “high resolution” art 64 combat moves for Grizzards or monsters, 63 of which work correctly. (The last one is not assigned to any Grizzards nor monsters yet) Over 300 unique speech phrases or utterances The target for the completed manual is 20pp, although it fluctuates depending on build and region “New game plus” or “hero mode” with increased difficulty, which “stacks” upon difficulty switch setting as well Things not found in the demo, only the full version: “full color” monster art and animations potions better (proper) announcements when your Grizzards metamorphose into a new form SaveKey/AtariVox saves are in their “registered” place and not the Scratchpad area access to all areas of the world, including the Lost Mine; Spiral Woods; tunnels, Southern Field, and Anchor Village; Port Lion; and the final ⅓ of the game (which is a secret). select your starting Grizzard from 3 options un-erase a saved game (if you act quickly after erasing it)
  11. For contrast, I just ran this on my Encore (on a '7800 with S/Video mod) for over 150 passes and no errors beyond the expected blocks in the top row. It also works fine with EF ROMs though. Dunno if that helps. (I have a couple of '2600s that I can pull out and test on as well if more data is helpful.)
  12. Personally, I use Makefiles for what they're good at, but also Perl for simple things — like parsing sources and writing Makefiles based on their inter-dependencies — and Common Lisp for more complex things. Disclaimer: I promise my real code is nowhere near as big a mess as these utilities might lead you to believe. Convert To Speakjet All the tools used in Grizzards are in the GitHub repo, but the one that others might find useful particularly is the convert-to-speakjet Perl script. It takes a text file in the form: PhraseLabel: Say something clever DifferentUtterance: Say something different … and converts it into a series of .byte data for the individual phonemes, based on a dictionary file in the format provided in the SpeakJet developers' kits. The output has labels like Speech_PhraseLabel followed by the SpeakJet bytes (ending with $ff as “usual” for the SpeakJet). The dictionary for Grizzards has a couple of thousand words, and it's relatively simple to expand the dictionary file when you find you were missing something. I work that into the Make process and .include the phrase files to keep from having and “copy and paste” dependencies — the object file depends upon the program source, which in turn depends upon the included (generated) phrase source file, which in turn depends upon the original, editable .txt file. But the source it generates is marginally readable and could be copied-and-pasted into your source tree. really If there's interest, I could try to extract that utility into a slightly more stand-alone form, but the script is here and the dictionary file is here. You'd also need to .include the file that maps the SpeakJet constant names to their numerical values, which is here. I think that for dasm you might have to do a “replace all” of := with .equ in that last file? usage: ./convert-to-speakjet InputFileName.txt SpeakJet.dic OutputFileName.s (or .asm if you prefer) Skyline Tool The big Lisp utility monolith probably deserves also to be cleaned up, but it can do nice things like read common file formats and convert them into formats that at least I find useful on various “retro” systems. Nominally, it should compile on any modern OS with Steel Bank Common Lisp (sbcl), but I haven't actually tested it except on Linux. (It would be easy to port to another Lisp compiler, but I think I did a handful of implementation-dependent things.) In Grizzards, it converts PNG images into “big” 48×42px graphics and smaller 16×16px and 8×8px graphics from “sprite sheets.” (Those are in the usual inverted order, with each 8px wide vertical strip broken into its own table.) The only graphics not rendered through it in Grizzards are the backgrounds, although I had always meant to go that way and just never got around to it. It also converts the music from MIDI into a set of TIA register values for NTSC and PAL tunings. It somewhat randomly contains a driver for an old serial-port EPROM programmer that I sometimes was using, although now-a-days I have an el cheapo USB one like everyone else. But it is capable of burning EPROMs on a BP EP-1 on Linux, if anyone else still has one of those. They're probably useful as a doorstop or a murder weapon as well, those things are sturdy. A version of it has lately been learning to read TMX and TSX (and linked PNG) files from Tiled, and RLE compress the tile map portion, to try something new and more complicated for my next “retro” (but not 2600) project.
  13. I didn't notice this list until djpowerplayer's comment brought it up to the top … Grizzards also uses AtariVox both for saving and prattling on quite a lot. (All signposts, all NPC dialog, and combat narration, among other bits.) I've lately noticed that the allocation list got rolled back to an earlier version that omits us (messaged Albert about it) The Demo uses Scratchpad space, but the full game uses dedicated blocks.
  14. Pushed a new daily build (on the web site). I had to stop using SWCHB for flags, which also meant changing the way I clear RAM to avoid losing those flags, and how Pause works because I needed to merge those bits into the same byte. Chaös ensued, and there was much weeping and gnashing of teeth. An 862-line git diff later, and we have a solution. In the new daily build, you can now use any of the 3 supported controller types on either/both of the 2600 and 7800. Button I = Button B = FIRE = the main input button. Button II = Button C = Game Select = usually Stats, but also Select Slot Button III toggles the Pause on and off. (This is similar-but-different to the way the Pause button works on the 7800. If you have a 2600, you can pause with the Color/B&W switch — or right Difficulty Switch on SECAM — and it will sort-of coöperate with the gamepad button, but mixing and matching may be a little weird'ish. Also, the 7800 Pause button doesn't work nicely under UnoCart/PlusCart firmware, because they jam up the ConsoleDetect routine.) Not unexpectedly, I'm sure, ProLine controllers and equivalent will not work on either the '2600 nor the '7800. Note … the daily build is the bottom one, under full-beta-1, in the Downloads box at https://star-hope.org/games/Grizzards/ — I have not put together a “release” yet with the latest changes.
  15. @SmittyB had the solution. I was out of RAM and used the “unused” bits on port SWCHB to indicate if I detected a '7800 (for Pause purposes) or a Genesis/Joy2b+ gamepad. Turns out, even in '2600 mode, the '7800 will “cheerfully” accept those bits to engage the two-button ProLine support, and therefore jam up the Joy2b+ support. I've started a rewrite to pack those flags into actual RAM, but a test with some code commented-out suggests that it should work, once I shake out the fallout from re-arranging RAM at this stage. I think I can now honestly say that the amount of free RAM in this game is 5 bits, give or take a couple of bytes of stack overflow that I allow to happen under semi-controlled circumstances. (Or, looked at another way, the free RAM is a negative 11 bits.)
  16. Well … I guess it confuses the PlusCart, because hitting Reset a second time I see it begin to flash up the word “Copying” before I get sent back to the menu with “emulation exited” Via (original) Harmony, first, I used your SaveKey Editor, and edited block $1040 to contain $10 $40 on the target SaveKey, and did a “non-destructive” copy from my AtariVox, which had only $ff $ff in that block. The Editor confirmed that the data was not overwritten. I also fired up Grizzards from the PlusCart. Where before the SaveKey had slot 1 = BAKU, slots 2 & 3 = unused; now I see slot 1 = BAKU (unaltered), slot 2 = TESTER, and slot 3 = deleted. That means it (correctly) did not copy slot 1 = ZEPHIE from the AtariVox, but did copy TESTER. … Grizzards save games occupy 4 blocks each (max 12 blocks for 3 slots) so that seems to have worked flawlessly. Trying to copy again in overwrite mode: this time, the PlusCart coöperated fine (did not drop back to menu). Confirmed the Grizzards save games now read ZEPHIE and TESTER, confirming the overwrite. Block $1040 now shows $00 $ff $ff … which is a little surprising — I had expected all $ff in that block, so that's a little odd.
  17. Sure, I'll fire it up — possibly tonight? — my SaveKey gets trashed for testing regularly anyway. Just hopefully it doesn't eat my AtariVox
  18. OK, I feel better a little bit. It works fine on the 2600. I'd been testing on my 7800 with the nifty S/Video mod and assuming that it was 100% compatible (with the quirk of the Pause button, of course). It's not … The above code just worked fine on a 4-switch Vader with composite output. The fire button (button I) however “sticks” on the 7800.
  19. Thanks for the assembly version, @Al_Nafuur. That's about what I thought it compiled into … I actually read the joystick once in VBlank.s and then make use of it all over the code, rather than reading it directly (and debouncing it) all over the place. (As you might imagine, there are a lot of different “kernel” loops for the 35-40 different screens in the game.) Ignoring some conditional-compilation bits … the bulk of DetectGenesis.s does a full frame dumping the paddle caps, followed by lda INPT0 bpl NotGenesis lda INPT1 bpl NotGenesis lda SWCHB ora #SWCHBP0Genesis gne DoneGenesis NotGenesis: lda SWCHB and #~SWCHBP0Genesis DoneGenesis: sta SWCHB … where SWCHBP0Genesis is defined as $10, and SWCHB is already configured to allow that as a flag bit. (Yeah, I ran out of places to store things in RAM.) This part seems to have been working all right for quite a while. The relevant part of VBlank.s, without some conditional-assembly noise, now reads as follows on my local branch lda SWCHB and #SWCHBP0Genesis beq NotGenesis tya ; Y = 0 bit INPT0 bmi DoneButtonIII lda #ButtonIII ; $20 DoneButtonIII: bit INPT1 bmi DoneButtonII ora #ButtonII ; $40 DoneButtonII: NotGenesis: ;; A is now either 0 (no Genesis) or possibly some permutation of (ButtonII, ButtonIII) bit INPT4 bmi DoneButtonI ora #ButtonI ; $80 DoneButtonI: ;; A is now a permutation of (ButtonI, ButtonII, ButtonIII) i.e. $00-$e0 sta NewButtons sta Score + 1 ; XXX ldx DebounceButtons ; XXX stx Score + 2 ; XXX cmp DebounceButtons ; buttons down bits are ones here too bne ButtonsChanged ButtonsSame: sty NewButtons ; Y = 0 sty Score ; XXX jmp DoneButtons ButtonsChanged: sta DebounceButtons eor #ButtonI | ButtonII | ButtonIII | 1 sta NewButtons ; buttons down are now 0 bits, $01 indicates new information sta Score ; XXX The rest of the game's code generally just references NewButtons from that point. The write to Score is barely visible as a flicker for only one frame, but it is visually detectable that something happened … except that nothing happens on hardware with a Joy2b+ gamepad button I after the first press. Works fine with CX-40 and (original, 3-button) Genesis controllers and in Stella configured for either of those. Over the week-end I'm fixing to keep beating my head against the above code because it seems entirely responsible for the issue, if I could only think of why or how. I'm sure it's something utterly silly that I'm just not seeing. Any insight is greatly appreciated.
  20. duh. it occurred to me later. Since only the high bit is set, the lower 6 bits are left floating and $0c is the address for INPT4 which was left on the data bus from fetching the operand. I took the liberty of looking into 1942's GitHub repository and I see that it just "peeks" at the joystick register at arbitrary times in the code using the BASIC joy0fire keyword, which translates to a bit INPT4 presumably followed by a bmi/bpl, so I'm just gonna completely rewrite the VBlank routine to use bit in stead of lda / and #$80 and see if it magically makes things better.
  21. Since GitHub is down'ish, I got a minute to try and dump debugging values to the score, and I'm finding: Button I = B = FIRE = $80 is registering once, and then staying "pinned down." Button II = C =$40 is registering only whilst pressed, as is Button III = $20. Weirdly, unplugging the game pad, I see it stay the same, but when I plug it back in, it immediately resets to $00 and stays there until I press button I again, and then stay pinned at $80. (INPT4 seems to be strangely pinned at $0c precisely.) The Genesis pad reacts as expected to both B and C buttons (momentarily whilst pressed). It's gotta be something in my VBlank / input code. Will review that code more later. BtW, thanks @Al_Nafuur the PlusCart has definitely made this development cycle faster!
  22. If I don't find something tonight with the "score debugger" build I'll dig in farther, but generally I've been enabling VBLANK with just bit 2 (enabled) and no other bits (to ground INPT0123 or latch INPT45). I just (before work here) tried a quick test with bit 6 (latch INPT4/5) as well, as in the first example there. With the latch enabled I'm seeing similar behavior as without: Genesis working, but Joy2b+ not registering the buttons properly. I wonder what is the value that bB resets the VBLANK to, and when, but I imagine that will require a dive into the assembly code on the bB engine itself. I'm lying the blame on the VBlank work code for input debouncing being wrong, so I've gutted and rewritten it a bit and am playing with the maths. I'm thinking to hex dump the three bytes: DebounceButtons, current value of buttons in Temp here, and NewButtons (and just disable their actions in the main map screen for now) to see if the values are significantly different than what I get in Stella. The goal is that: if a button is pressed now, but was not pressed last frame, then it should have a 0 bit in NewButtons (at least $80=FIRE/B/I and $40=C/II, and maybe $20=III if it works out conveniently, although I don't really need button III for Grizzards.). That all will have to wait until this evening, though, most likely.
  23. Tried this as well. Strangely, button I acts like button II and button II does nothing. Ditto for the Genesis controller — B acts like C, and C does nothing. Definitely will be trying some visual feedback for the DebounceButtons & NewButtons locations on-hardware tomorrow.
  24. It would definitely seem to be. Button II — the same as button C — is tied to INPT0, button III to INPT1, and I'm simply testing for the high bit to be clear = button down. My button scan routine combines the two buttons into one byte, and seems to be failing to debounce them correctly and “crossing signals.” I'm experimenting to figure out the pattern precisely, but it seems like: Button I works until you press button II, and button II registers as a press once when it goes down and a second time when it comes back up (so the stats screen stays up only as long as you hold it down) … and then … button I doesn't work properly after that. I'm thinking the debounce value is getting corrupted at some point and staying corrupted. I'm fixing to try plugging the score into the button registers or something to try to watch it. The only other one I can lay hands on immediately was 1942, which seemed to work (flip the plane) in a whole 30 seconds of testing. Good thought, I have not been doing so … maybe the pull-ups in the Joy2b+ are just different enough …
  25. I just got a Joy2b+ control pad today, and there seems to be some bugs with handling it properly in the game. I've opened a ticket https://github.com/brpocock/grizzards/issues/422 to track fixing it. I've already eliminated the hardware — Test Cart confirms everything is working properly. I suspect my “debounce” code is somehow at fault, but it works fine on Genesis (MegaDrive) controllers. We shall see …
  • Create New...