Jump to content
IGNORED

VBXE Exercise - Popeye WIP


woj

Recommended Posts

So, a Monday update instead. The reason I could not get it to work yesterday was a mix of (a) tiredness, (b) (slightly) flawed logic, and (c) really stupid bugs in the code. As you all know, nothing good can come out of this combination. But today it did.  

 

In any case, full movement geometry for all rounds is now implemented. The punching bag in round 1 is still missing, but that's not part of Popeye movement geometry really (will come soon though), and the burger eating man in round 2 is also missing, this though is just an animation. Popeye movement on and around the pad in round 3 is not exactly as in the original game, in the sense that the pad will never ever magically reposition itself due to interactions with Popeye, or vice versa, while in the original game there is a lot of magic magnet and teleport things going on in there (still not sure if by design, or lack of better solution). Catching spinach on the fly why dropping off the edge on right hand side on the upper platform is also somewhat better solved (in the original game Popeye levitates after getting it, to me an unacceptable glitch ;)).

 

 

screen2.png

screen.png

popeye.xex popeye.atr

Edited by woj
  • Like 11
  • Thanks 1
Link to comment
Share on other sites

Another Sunday, another update. I added the burger eating man animation in round 2, and the barrel with the punch bag in round 1. Also fixed a long list of issues internally, shaved some clock cycles off every frame, and finally found my VBXE bug that was causing issues on the real hardware. As thought initially, the essence of the bug is working on the blitter list that is currently being blitted, this is a no-no (obviously), but also something that Altirra is much more tolerant with (tagging @phaeron to put this on his todo list ;)). A (crappy, my phone seems to have auto focus issues) video below, in this one you can see a bug with the #lives not being updated on the screen on passing 40000 points, this is fixed in the attached ATR and XEX, I keep reintroducing this bug out of my own stupidity :D, it is now the second time I had to fix it. You can also see that it starts nicely from SDX ;) Key shortcuts up in the thread.

 

Not entirely clear today where I go next and what to target for next week...

 

 

popeye.atr popeye.xex

  • Like 12
Link to comment
Share on other sites

We keep going ;) In the new version there is infrastructure for round outtros and most of them implemented, the game title splash screen is fully done as far as the graphics go. You can now also collect items with 'C' also when Popeye is on spinach (that was not there before, now I needed this to check that the round holds the spinach state upon all items collection before the outtro kicks in). Also discovered several visual bugs having to do with the wrong order of updating odd/even scan-lines. These are the kinds of things that are almost impossible to see on the emulator, and even on hardware the glitches are not that obvious or directly suggest what can be possibly wrong. 

 

The emulator screenshots do not at all give justice to how it looks like on the actual (LCD in my case) screen. You'd also notice that the files got much smaller, I implemented a very quick and dirty RL compression for the graphics data, it reduced the XEX size from above 100k (that I had after the game title splash graphics came in) down to 62k ATM. There is still some "puffy" data in the game that can (and probably will at a later stage) be compressed, just for these parts the binary needs to be complete and code/data segments properly reshuffled / organised. GZIP-ing the XEX gives me the file size of 27k, so for now I call it good enough considering the game code also compresses relatively well. 

 

I am getting dangerously close enough to starting on the actual game :D My next item on the list are the green points splashes on collection / punching events, but then I really have to move on to proper item collection and enemies. The very one thing that I still do not know how to approach is Bluto's AI, I mean figuring out what his algorithm is... TBC

screen1.png

screen2.png

screen3.png

screen4.png

screen5.png

screen6.png

popeye.atr popeye.xex

  • Like 16
Link to comment
Share on other sites

  • 2 weeks later...

Not much new in terms of visuals, only the on-game-screen point splashes, however, internally the code went through a serious overhaul in terms of where things are placed in RAM, the loading order, etc. as well as more organized variable allocation on zero and non-zero page (see here: https://forums.atariage.com/topic/351799-safe-page-zero-locations-to-reuse/). The refactoring was so much work that I consider it a small miracle that everything got back to the working order without me loosing it. Now I know how much of everything I have left, the game code so far occupies 14 kB of RAM, and I have another 14 kB left for the rest of the game logic and sound. With a little bit of luck the game will fit into basic 64K machines. If not, well, will have to learn how to do bank switching in a manner not colliding with SDX and alike, and use the rest of my 130XE / U1MB memory :D. Memory reorganization also involved VBXE, repositioning framebuffer memory to VBXE's $000000 allowed me to save a couple of cycles here and there where things were shifted to find its place in the right memory window. 

 

Anyhow, a screenshot of the point splash and new WIP binaries. 

 

screen1.png

popeye.atr popeye.xex

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

On 6/5/2023 at 2:08 PM, woj said:

Not much new in terms of visuals, only the on-game-screen point splashes, however, internally the code went through a serious overhaul in terms of where things are placed in RAM, the loading order, etc. as well as more organized variable allocation on zero and non-zero page (see here: https://forums.atariage.com/topic/351799-safe-page-zero-locations-to-reuse/). The refactoring was so much work that I consider it a small miracle that everything got back to the working order without me loosing it. Now I know how much of everything I have left, the game code so far occupies 14 kB of RAM, and I have another 14 kB left for the rest of the game logic and sound. With a little bit of luck the game will fit into basic 64K machines. If not, well, will have to learn how to do bank switching in a manner not colliding with SDX and alike, and use the rest of my 130XE / U1MB memory :D. Memory reorganization also involved VBXE, repositioning framebuffer memory to VBXE's $000000 allowed me to save a couple of cycles here and there where things were shifted to find its place in the right memory window. 

 

Anyhow, a screenshot of the point splash and new WIP binaries. 

 

screen1.png

popeye.atr 90.02 kB · 14 downloads popeye.xex 62.38 kB · 21 downloads

Go on Woj ! You and Atari can ! A video for your effort.

 

 

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

Not really properly finished next stage WIP, but at least something that is not broken. I got the first version of hearts flying down, reaching the bottom and then flashing to vanish eventually. I made 8 of them flying to see how much frame time it takes. It is not tragic, but now I sense I might be having performance issues eventually. The complete processing of these 8 flying hearts including the drawing takes ~24 scanlines of each frame. This still leaves me some time for the rest of the enemies, nevertheless, it ended up being a bit more than I was hoping for. I do have some wasted CPU time slot in the magic interlace VBI routine to use with some wise coding, but I was hoping it would be all "easy". BTW, they are "parallel" because they are auto-spawned simultaneously, but they do have independent states and counters. 

screen1.png

screen2.png

popeye.atr popeye.xex

  • Like 8
Link to comment
Share on other sites

Weekly update! Again, I ran out of time to finish some things, but I got it to presentable stage again. In round 1 and 2 the 'C' key now spawns the corresponding collectables, that you can, well, you wouldn't guess, collect ;) to finish the round. You would then be stuck in round 3, because the letter collectables are not yet finished (not even started with in fact). The hearts not straightening up on landing is on purpose, BTW, I need to dwell a bit on whether it should be this way. Also, notes in round 2 only fly according to one pattern, but there are two, and in the second one they occasionally stop on the second platform for some seconds. This is the detail I was not able to finish today. Otherwise they are complete, including sinking to the water and eventually breaking and killing Popeye. One last thing here, you can spawn more items than you need to collect, proper book keeping for this will be fixed later when get to implementing Olive and her spawning patterns.

 

Otherwise, I spent some time speed matching Popeye's marching and collectable speeds for PAL with respect to the original NTSC game. This is another way of announcing now that this game will be calibrated for PAL (it will work on NTSC, but will not be scaled for speed). My motivation for this is that most VBXE users are on the PAL side of the pond in any case. The other reason is that I do not have NTSC hardware to test, and with all due and unconditional respect to Altirra, this is a necessary thing for quality control. 

 

Finally, until Avery fixes bugs I reported, you will not get expected results running this on Altirra, there will be unwanted collisions of items with scenery and each other and they will collect automatically from time to time.

 

 

screen1.png

screen2.png

screen3.png

screen4.png

screen5.png

popeye.atr popeye.xex

  • Like 8
  • Thanks 3
Link to comment
Share on other sites

Thanks to @phaeron the VBXE collisions are now fixed, and also thanks to his explanations I finally understood the essence of the interlace hack. I was fighting with my code for a good part of the day going through very many weird behaviours of ANTIC, to find out at the very end that (as he pointed out, but I am just that stupid) I needed only to change the termination of the display list. 

 

In any case, new binary with the correct (or so I now hope) interlacing code attached, the round 2 notes here are also in another pattern mode for a change. If you enable video output interlace in Altirra you can enjoy full resolution graphics, albeit with the expected interlace artifacts when objects are moving. Still much better than the flickering output.

 

 

screen_interlaced.png

popeye.atr popeye.xex

  • Like 6
  • Thanks 2
Link to comment
Share on other sites

The collectables are practically finished, they only now need Olive ;) The 'C' key to spawn items is no longer there, they spawn by themselves following the original game patterns. I also played a bit with Altirra video recording and post-processing with mencoder, the result is not exciting, but partly also because YT decided to butcher it with compression of its own, not sure I care enough to spend time mastering this part too. Attached new binaries and the video I made with Altirra. 

 

Doing the HELP letters in round 3 I hit somewhat of a wall. Long story short, I need to blit all flying letters twice, once for collision detection setting no overlapping colors with Popeye (which is the black one), and for the second time with the actual colors. One solution would be to have two black colors, however, there is no space in the palette for this, so double blitting seemed to be the only choice. This is bad, because it takes substantial amount of the frame time when there are multiple letters, and I still have plenty to cover there... On the other hand, the total frame time in round 3 is not that different from the round 2 one with all the big animated side objects.

 

 

popeye.atr popeye.xex

  • Like 6
Link to comment
Share on other sites

I didn't mention it before, but, on one of the previous versions (last one, or the one before that), I encountered a bug. Reason I didn't bring it up, I thought it may have something to do with problems in Altirra (I don't own a real VBXE). Anyway... what happened was, a heart got down to the bottom and ended up in a spot where Popeye couldn't get at it. It was in the far lower-right. I haven't played it enough to see if it would happened again; but I figured it was worth mentioning, since maybe it didn't have anything to do with Alirra problems.

 

Link to comment
Share on other sites

2 minutes ago, MrFish said:

I didn't mention it before, but, on one of the previous versions (last one, or the one before that), I encountered a bug. Reason I didn't bring it up, I thought it may have something to do with problems in Altirra (I don't own a real VBXE). Anyway... what happened was, a heart got down to the bottom and ended up in a spot where Popeye couldn't get at it. It was in the far lower-right. I haven't played it enough to see if it would happened again; but I figured it was worth mentioning, since maybe it didn't have anything to do with Alirra problems.

Not a bug really, simply unfinished code, the spawning positions where first arbitrary and then getting the x coordinate from the recently collected objects, so eventually they would end up in weird places. Now it should be all fine 🙂 

 

On that note, please report everything you encounter, some of those things I might know or expect (for example, one of the recent versions I posted wouldn't work on $D7xx VBXE), but there has to be tons of things I did not yet notice.

  • Like 1
Link to comment
Share on other sites

2 minutes ago, woj said:

Not a bug really, simply unfinished code...

Oh, I like that one! Potentially any actively-developed program could fall into that category. :D

 

2 minutes ago, woj said:

please report everything you encounter

Alright, no more holding back on the bug reports.

 

  • Like 1
Link to comment
Share on other sites

It's good to take a short brake from rushed development, do some soldering and stuff for a change, and "play" one's own game for more time than just checking if the latest addition works, discovered two bugs doing that 😀 

  • Like 3
Link to comment
Share on other sites

No meaningful update today, in terms of new WIP binaries, they are in a transitional not publishable state. Apart from fixing a lot of bugs, I implemented all of Olive in-game logic, walking and spawning animations, and it "almost" works, but there are some bugs remaining that really have to be fixed (the most annoying of which is that Olive does not stop wandering pointlessly after spawning the last item, the off by a couple of pixels position of the heart in the screenshot below being least of my problems). But a screenshot teaser instead, I promise you she does walk, spawns where she stands, and does everything in the right order and more-or-less where the original game does it. I am probably a tiny bug fix away from full happiness here, but it won't be fixed today ;)  

screen_olive.png

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

I appreciate the effort (not sure how I missed the reply that was chronologically before my previous one???), only as I said earlier, this is not going to be sold or cartridged. Of course, self-made shelf decoration copies are very welcome!

 

In any case, new WIP binaries attached, Olive is now walking and spawning nicely. Yesterday's bugs were rather simple after good night's sleep, however, there was a ton of other things today that I had to weed out, not really 100% sure I fixed everything. I also wanted to make a nice high-res video with Altirra, but I had to use that time for the said weeding out ;) 

 

Next on the to-do list: one more die mode for Popeye (only recently I noticed there are three, not two), water splash when he drops in the water, and Olive shouting animations. Then all Olive intro animations. Then I can probably declare I am more than 50% done :D 

popeye.atr popeye.xex

Edited by woj
  • Like 6
Link to comment
Share on other sites

With all the game logic being (much) closer to the original than the Atari-released version, I wonder if it'd be feasible (using your VBXE source as a starting point) to do an improved version for standard Atari graphics; or is everything too tied into VBXE and the higher resolution?

 

  • Like 2
Link to comment
Share on other sites

Well, I would like to give a positive answer to this, however, even before finishing this one I can see a long list of problems. There was an effort to better the original Atari version of the game by @darryl1970 and friends, and to go beyond what they have done and get attractive graphics one would need to go sprite multiplexing route etc. Another issue is lack of RAM in my implementation. All graphics data go directly into VBXE, and there is a lot of it, the loading messages should give you a clue.  The base RAM holds only the game logic in the "expanded" form. What I mean by that is: anything that would be normally calculated / checked on the fly but can be replaced by a pre-calculated array of constant data is done this way. I believe this is the only reason why I have not yet hit the performance wall. Factory Atari graphics would need to find its space around all this, or everything has to be rewritten to make space. Or it has to be rewritten to use +64K machines. In any case, the ability to fit it all into 64K is probably my only current unknown with the current implementation.

 

I did have two ideas for what to do with this once (if!) this is completed. The first idea is to do a lower-res (256x224) full 256+ color mode, non-interlaced version of this, this would require reworking all of the bitmaps, the code base would stay largely the same (and simpler!). It probably would look more like Darryl's 7800 version. The other idea, do not laugh, is to dive into what Commander X16 can do and port it there. The machine is intriguing me, and there might be a chance to buy one for reasonable money soon. Like with acquiring a NOS 130XE last year I'd need to have a good reason to get one, and porting arcade Popeye there certainly would be a good one. Unless it's already done... 

  • Like 2
Link to comment
Share on other sites

1 hour ago, woj said:

There was an effort to better the original Atari version of the game by @darryl1970 and friends, and to go beyond what they have done and get attractive graphics one would need to go sprite multiplexing route etc.

Commendable effort on the Popeye hack that was done; but the main focus there was on improving existing graphics (and there were some changes in Popeye's punching hit detection); a lot of details still remain left out, though (graphically and gameplay-wise). Working from the ground up would afford more opportunities for arcade accuracy, especially given the highly-accurate foundation you've already created. 

 

As for improving the general look of the graphics, yes, I'd say you'd be forced to go the route of a flicker system for the sprites; but there is a nice, well-tested, and freely-available engine that was donated to the community by @shanti77 -- who used it to create his version of Bomb Jack and his original game the Last Squadron.

 

1 hour ago, woj said:

Another issue is lack of RAM in my implementation. All graphics data go directly into VBXE

One common solution for keeping RAM use to a minimum is to target large cartridge medium. Unless the data is needed in RAM all at once, bank-switching cartridges can keep software compatible with lower-memory systems.

 

  • Like 3
Link to comment
Share on other sites

Another attempt at squeezing something out of the Altirra recording/mencoder/YT combo, the video shows more or less everything the game can do at the moment (plus high-score saving to disk not visible on the video). You may have to manually set the video quality on YT for best result:

 

 

  • Like 5
Link to comment
Share on other sites

Not much more will happen today in terms of visuals (lots of work with GIMP required), so the update comes now ;) The third way to kill Popeye is now implemented (was in fact trivial, due to my genius design :D), the three ways to kill are emulated with keys J, K, and L. Olive also now reprimands Popeye about broken hearts/notes in rounds 1x/2x. Interesting fact, I think the original game is missing that animation in rounds 3x due to some graphics / palette limitation. At least I would not be able to have that animation on the bottom of round 3 screen either, not without redefining all screen palettes / VBXE attribute maps just for this. Also, in the attempt to have full round intro animations for Olive and other objects I had to refactor the whole engine for intros, I don't know what I was thinking at the time, but now it is faster, shorter, and more maintainable. 

 

Till next week...

olive.png

popeye.atr popeye.xex

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