Jump to content
IGNORED

VBXE Exercise - Popeye WIP


woj

Recommended Posts

Weekly update one day late, I really wanted to complete the round 3 intro before posting ;) Internally or not really visibly the order of drawing has been changed a bit here and there, so that certain objects appear in front in certain situations. Also a minor UI bug fixed when starting the game for two players (Option selects that). Visually, all round intros and outtros finished, minus Bluto in round 1, he is a bit more of a pain to sort out, both in terms of his logic / AI and animations. Also both water splashes when Popeye or Bluto die are now done (for Popeye you can see it when killing him with key 'J' or 'L', for Bluto you have to trust me it's there and tested ;)). Finally the Bonus sign flash for when Bluto gets the barrel on his head is also in place, you can see it in round 1 by pressing 'C' ('C' in other rounds adds 500 points to the score, for quicker getting to the high score list for testing). Screenshots of all this attached (some things are moving so vigorously it is impossible to take a non-interlaced shot). 

 

It's probably the last WIP update with an SD ATR image, I will need to get up to ED/DD from now on. I do have a question here, I have close to zero experience with disk drives and floppies on these things (I never owned a disk drive in my younghood, only the Turbo 2000 cassette player), how common / usable are ED 130k disks? Is it reasonable to make this a distribution ATR file format, or just go directly to 180K DD ATR? (I am now certain the game will fit in 130K). 

 

Also, looking a bit ahead into what I need to do next I encountered a silly but painful to solve issue. In round 1 I do not have a non-transparent black color to use, and anyway I look at the palettes and attribute maps I will not be able to squeeze it in. Because of this both the barrel and punch-bag do have a transparency instead, and some things flash through them. For the hearts I can draw the barrel first to bring the hearts in front, can't do that with the punch-bag though due to it having the same colors as Popeye and triggering collisions / collection if it is already drawn when the hearts are being drawn. Then, when the barrel ends up on Bluto's head on the middle platform the ladder in the background will flash through the barrel. 

 

The only solution I can see for this at the moment is to have a black colored PM object in between the barrel and the background with the right priorities set in VBXE. Animating those vertically will eat a lot of cycles. On the other hand, I was thinking of using PMs this way anyhow for collision detection between Popeye and Bluto/Vulture (in the code I call it the eagle, easier to spell for me ;)) anyhow. In the original game they do not collide by slightest touch, rather by some smaller set of coordinates. So either a PM mask underneath, or complex coordinate checking of both object. In either case, the PM solution will still leave the punch-bag transparent, but that's something I can probably live with.

 

TBC, though not sure when, some private things are coming up that will suspend the development for 2-3 weeks at least. 

screen1.png

screen2.png

screen3.png

screen4.png

screen5.png

screen6.png

 

  • Like 8
Link to comment
Share on other sites

8 minutes ago, woj said:

I do have a question here, I have close to zero experience with disk drives and floppies on these things (I never owned a disk drive in my younghood, only the Turbo 2000 cassette player), how common / usable are ED 130k disks? Is it reasonable to make this a distribution ATR file format, or just go directly to 180K DD ATR? (I am now certain the game will fit in 130K).

Go with ED 130k.

 

The only drive which cannot read this format is the 810.

 

If you use real DD 180k, unmodified 1050 cannot read it anymore.

 

  • Like 3
Link to comment
Share on other sites

A bit in a half state, but since there will be a 2+ week break I though I'd just leave it as it is. The bottles are now being spawned by sea hags, and you can punch them. Since they are a bit too aggressive they do not yet kill (it would be very hard to play), thus you can actually also punch them out from behind. The fist out state duration felt a bit too long (there was a sluggish feel when punching the bottles), so it was shortened by half. Otherwise, apart from Bluto sprites all the graphics data is loaded into VBXE, so now there is really little left to do, the jumping sculls are as easy as the bottles, the vulture also does not seem to be too difficult to sort out. 

screen1.png

screen2.png

 

  • Like 8
Link to comment
Share on other sites

Small amendment, but I could use some external testing till the time I get back at developing this. The new version has an animation on kill bug fixed (weird things were happening when Popeye got killed in the middle of the punch), the bottles / sea hags are much less aggressive (this still needs to be sorted out, they need to get more aggressive with round and game progression I think), but most importantly the bottles now kill Popeye!!! So this became "a game" now :D The collision margin is quite forgiving (the bottle really has to be deepish within Popeye bounds), which means in some rare situations you can avoid a hit being on the stairs (one step down) when the bottle is about to straight hit Popeye's face by punching and effectively lowering the head. This needs to be very precisely timed though...

 

  • Like 4
Link to comment
Share on other sites

@woj when this gets completed, it'll be the killer app for VBXE owners for sure 👍    

 

Kinda like Donkey Kong was the Colecovision, and Space Invaders was for the 2600.

 

Probably be responsible for a lot more VBXE sales. Maybe you can work out a deal with Lotharek to make it a pack-in cartridge and make some royalties :)

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

Nobody told me the ED ATR image is not working, at all. As said earlier, I am a dumbass when it comes to floppies. Attached a fixed version (those who know the common problem know it, those who don't - it was all about the $42 file flag vs. $03). 

 

@mytek, yes, I hate to see something like VBXE so underused and underrated (myself I was very hesitant to get it, no regrets here now ;)), before going for it I thought perhaps the device is horribly difficult to program, but it is not (it is my first ever proper Atari program, and I went directly for VBXE). At first I also got the impression the docs are not so good (I've seen complaints), they were not too clear on the first reading (the core problem is the lack of running examples IMO), but let's be honest, this is not supposed to be writing "HELLO WORLD" in Python ;).

 

 

  • Like 6
Link to comment
Share on other sites

On 7/24/2023 at 11:15 AM, woj said:

Nobody told me the ED ATR image is not working, at all. As said earlier, I am a dumbass when it comes to floppies. Attached a fixed version (those who know the common problem know it, those who don't - it was all about the $42 file flag vs. $03). 

 

@mytek, yes, I hate to see something like VBXE so underused and underrated (myself I was very hesitant to get it, no regrets here now ;)), before going for it I thought perhaps the device is horribly difficult to program, but it is not (it is my first ever proper Atari program, and I went directly for VBXE). At first I also got the impression the docs are not so good (I've seen complaints), they were not too clear on the first reading (the core problem is the lack of running examples IMO), but let's be honest, this is not supposed to be writing "HELLO WORLD" in Python ;).

 

popeye.atr 130.02 kB · 32 downloads

Awesome work Woj ! Keep on doing your best. By the way, atr file is still not working. Thanks again my friend.

 

 

  • Like 3
Link to comment
Share on other sites

56 minutes ago, ALEXANDER said:

By the way, atr file is still not working.

The most recent I posted? I swear I tested it with SDriveMax and Altirra (Side3 and U1MB SDX). No possibility to check now, but the only other possibility is that I mixed up the files... or you did... or the file is indeed still wrong, but not for the mentioned setups...

Link to comment
Share on other sites

6 hours ago, Saberman said:

A great port!

 

Thanks for the publicity work 😉

 

What did you use to record the screen cast? Altirra? If so, there is an interlace option somewhere in the video settings to get a much better result (see my earlier posts for my own attempts).

Link to comment
Share on other sites

  • 3 weeks later...

I am back at the project. Not much new visually, in fact, just that now when the spinach is active and there are items lying on the bottom of the screen they keep flashing different colors as in the original game, that is, only their sinking freeze, not the color flashing. Otherwise, internally (but also for playability) a lot of things have happened:

 

1. SELECT now goes through 4 different states of interlace field swapping, 2 states for two different interlace fields as before, and 2 states of the same, but with the interlace hack deactivated. This was done after I acquired RetroTINK which turned out not to support the interlace hack at all and instead looses the signal entirely. So the two new states are for the displays that do not support the hack and shit themselves instead. With these new setting some displays might do the right thing nevertheless (that do unconditional interlaced signal processing, my LCD TV seems to be like this), some will simply flicker, but this is still better than a non-working game. In RetroTINK I could set the frame blending mode on (Altirra also has something like this) to get a very decent result (should have taken the picture, next time...).

 

2. I rearranged the code in the vblank procedure, long story short, I effectively have much more frame time left, and it also seems I might still be able to keep the game working on NTSC machines (for those that do not (yet) know it - those have much less free play in the vblank interrupt). I read a lot about the scanlines, frame times and what not, including the invaluable Altirra Hardware Reference Manual (kudos @phaeron!) and had epiphany here. The result is that I also have a lot of frame time left. One thing I did not do for testing is to check if saving high-score on a real SIO device still works though.

 

3. Looking ahead to implementing Bluto I slightly changed the method for detecting collisions with Popeye, one side effect is that the HELP items in round 3 do not need to be drawn twice anymore, though Popeye does, but that's much cheaper, and also serves additional purposes for collisions with Bluto and the vulture. One of my options to do collisions was to employ a P/M underlay for some objects, but that brought up a lot of problems, one of which is suspected interaction with interlace hack code (PMs might change DMA timing I think, but I am too stupid to know how), so that had to be dumped and all collisions will be VBXE based (but really, not only for the P/M reason which itself could probably be solved).

 

4. The punching sensitivity for dodging bottles is now changed, should be closer to the original arcade version (though still not the same, my opinion is that the arcade is a bit too forgiving when it comes to punching too late / too early).

 

5. The aggressiveness of sea hags now incrementally increases through the round itself and through rounds as a whole.

 

6. I did something that perhaps decreases the input lag for the fire button, but I have no way to measure this apart from my subjective impressions.

 

7. Realized that putting the barrel on Bluto's head gives different number of points depending on where he is, so added graphics for that too prepping for Bluto.

 

8. Fully figured out what the vulture does and recorded MAME sessions for higher rounds to trace the animations exactly (this was not so easy, I am actually not that good at the game, and too lazy to hack it). 

 

9. With no performance penalty, refactored some round initialization code to effectively shave ~400 bytes of code (that were immediately eaten back by point 5.)

 

10. With one simple code change and moving the VBXE window over the 4K block that holds the font data (and thus is only accessed by ANTIC) I reclaimed 4K of RAM game use. No idea how I missed that before.

 

Attached the new binaries, and some pictures showing the percentage of frame time taken so far (the colored background is the current processing time with most of the possible objects on the screen, the black background is what is left, the processing needs to be done by the screen water level, so it is plenty still). (Yes, I know Olive is missing her face color in round 3, this is a side effect of hacking the game to start directly with round 3). 

 

 

screen1.png

screen2.png

screen3.png

 

  • Like 13
Link to comment
Share on other sites

I am short one small thing that I wanted to have finished by today, and that is the animated corner sea hag and automatic spawning of sculls, this in itself is simple enough, but I ran out of addressing space with the current loading layout, and I need to do some rearranging there first (I still have plenty of RAM left, almost 10K, but with the current setup things start to get in each other way a bit). What is new:

 

1. Vulture in all ship rounds, following the same flying patterns as in the original game. Vulture kills, can be punched, and "walked over" when on spinach.

 

2. Sculls in the corresponding rounds, they can be punched and they kill, but spawning is not automatic yet, for now use key 'S' instead. 

 

3. Fixed recently introduced positioning bug when entering high score initials.

 

4. Punching and collisions sensitivity was probably affected by recent additions, not really sure, by if so, hopefully in a positive way.

 

5. Some face pink color elements (in the punchbag and sculls) got the color replaced with a different index (same color), so that they do not turn red when Popeye eats the spinach. I think in the original game this was an unwanted side effect  (or even a bug) rather than planned design feature.

 

The attached files are modified to start directly in round 3, so that you can get quicker to the new things ;) Still no pictures from my RetroTINK, my hardware is temporarily dismantled from my desk due to some upcoming soldering projects (that I will need to pause this thing for for a few days at some point, before I get on to implementing Bluto, I need a break here). Aside from the corner sea hag spawning the sculls, the only thing really left is Bluto, and for him I have a lot of infrastructure and visuals already in place. I also slowly started looking around for what my Pokey music and sound possibilities are. 

 

To be continued...

screen0.png

screen1.png

screen2.png

 

  • Like 7
Link to comment
Share on other sites

On 7/4/2023 at 3:25 AM, 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.

 

Here's an alternate method that would yield better sprites and a more colorful background without multiplexing.

 

Instead of using the missiles for hearts (as in the Atari version), they can be used to widen all of the sprites by two pixels. The hearts would then be playfield/character graphics. This also frees up the fifth color for more creative use in coloring the background. In the Atari version, the fifth color (and corresponding playfield color register) is locked into pink for the hearts on the entire display (fifth player color and fifth Antic 4 color use the same register). It's a tradeoff; but I think the results would make it worthwhile.

 

[Edit: Some text changed, rearranged, and added for clarity.]

 

popeye-update.thumb.png.f9f3f20d045ed2fc440af79179469624.png

 

Here's Atari Popeye Arcade version for comparison.

 

Popeye-AtariArcade.thumb.png.947c2f997c0d147662d0bda1d6bcdcc3.png

 

  • Like 6
Link to comment
Share on other sites

Amazing graphics!  Between this app and the HAVO, I may have to get a VBXE installed!  The original A8 release was graphically pretty terrible, IMO.  For anyone interested, there is a lot of Popeye trivia and info.  Here's a good place to start:

 

https://duckduckgo.com/?t=ffab&q=Popeye+cartoon+characters&atb=v371-1&ia=web

 

or the sites:

 

https://popeye.fandom.com/wiki/Full_character_list

 

https://popeye.com/

 

Link to comment
Share on other sites

5 hours ago, Larry said:

The original A8 release was graphically pretty terrible, IMO.

I don't think so. They could have done better; but they could have done a lot worse too.

 

Technically they came up with a pretty sensible approach for getting all the graphics in the game. Gameplay generally makes up for any lack in graphic design. It plays pretty well. I played it quite a bit back in the day.

 

BTW, I keep calling it Atari Popeye; I forgot it's actually a Parker Brothers game.

 

  • Like 1
Link to comment
Share on other sites

Early update this week, I need to move on to a couple of long overdue soldering projects, the stage of the work is really good for that. The scull spawning Sea Hags have been added, the game got somewhat more difficult upwards of round 4, even with no Bluto ;) As usual, I also fixed a couple of bugs. 

 

But there is one more quite visible change, if one has the right equipment and internal computer configuration, after another epiphany I had earlier this week, talked to @Simius to confirm and also get one technical detail out of him (that triggered his recent update to Sophia 2 documentation) I got a proper interlaced mode functional in the game, something that (only!) Sophia offers. That is, it provides a true interlaced sync signal that the video output, including VBXE's one, uses to generate the TV signal. This means that no Rybags hack is needed anymore, and the picture shows OK on *all* displays. Including upscalers, I got it to work with RetroTINK with more than satisfying results, see the photos. The game now, when it detects Sophia, non-permanently turns on the interlace mode, sets up its internals properly not to use the hack, and also disables SELECT for odd/even field swapping, as that can be confidently set to the right value from a Sophia register. But yes, you need Sophia+VBXE combo in your computer for that (and for that reason my only Sophia had to change its home from my 800XL to the 130XE). 

 

Another small side development for this game is that I want to make it S_VBXE.SYS Sparta DOS X driver friendly. When the driver is enabled and CON: driver turned on to use 80 columns VBXE mode, the game loads from SDX, just the loading screen gets blank (due to me doing some VBXE preinitialization needed for loading VBXE graphics data in) and progress messages are not printed, and starts, so this direction could be fine, and I could stop there. Resetting the computer though crashes SDX (with no S_VBXE it just gets back to SDX), so this is no good. Switching to 40 column mode with "CON 40" before starting the game ends up with a working SDX prompt after reset, but doing "CON 80" does not work anymore. So it seems I have two problems to solve (if I can be bothered), one is probably to use some XIO call to disable the 80 column mode for the CON: device (had so far problems finding what those XIO codes and parameters would be, only found ones for S_VBXE), and then also have clean-exit key for the game and reset the VBXE configuration to something that would make the CON / S_VBXE combo not to crap itself. Perhaps @drac030 would know the right way to deal with this? (Right selection / order of closing / probing the S/S2/E/CON devices?). I essentially wipe out the whole of VBXE memory, so it might not even be technically possible without full reinitialization/reloading of S_VBXE, don't know...

 

Uff, wrote a bit too much today ;), pictures for the eye, WIP binaries for the curious ;)

20230825_195912.jpg

20230825_200057.jpg

screen.png

 

  • Like 5
Link to comment
Share on other sites

12 hours ago, woj said:

essentially wipe out the whole of VBXE memory, so it might not even be technically possible without full reinitialization/reloading of S_VBXE, don't know...

Yes, this is the cause. The bulk of the S_VBXE driver sits in the VBXE RAM, in the last 16k. When you wipe it, the code naturally ceases to exist. The only "clean" way out then is to reboot.

 

XIO's are listed in the documentation (XIO.TXT or so, in the distribution archive).

Link to comment
Share on other sites

11 hours ago, drac030 said:

Yes, this is the cause. The bulk of the S_VBXE driver sits in the VBXE RAM, in the last 16k. When you wipe it, the code naturally ceases to exist. The only "clean" way out then is to reboot.

 

XIO's are listed in the documentation (XIO.TXT or so, in the distribution archive).

 

Thanks! So far I made sure that I keep away from the $07 page of VBXE then (was easy as I had $06 also unused and I now know I won't need it, so just moved stuff there), and I reset the base configuration parameters of VBXE to zero. This still does not allow S_VBXE.SYS to "wake up" after exit to DOS, but I do get a working SDX prompt. I have to dig in into those XIOs. Yes, I did find XIO.TXT, this is for the S_VBXE driver, I was wondering if something like this exists also for CON.SYS?...

 

(Perhaps just restoring the XDL address which I can get first through XIO would do the trick, one first obvious thing I have seen in the docs.)

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