Sad to hear. I saw some of his more recent posts mention a possible illness. I think he posted a lot of his source code at that time to make sure that it was disseminated. He was a great Atari contributor. RIP.
1) Launch RMT
1a) Save stripped RMT file, e.g. sunset.rmt
1b) As your saving the stripped RMT file, copy the feature code into rmt_feat.a65
1c) Save SAP, e.g. sunset.sap
2) Create output.header by extracting the header from 1c)
3) Copy rmtplayr.a65 and comment out "PLAYER equ $5000" line
4) Create output.asm
This code places the stripped RMT, the player code and a short
init routine in memory at the desired locations.
5) Build output.obx, e.g. "make output.obx"
6) Look for "INIT" and "RMT_PLAY" address in output.lab
7) Modify output.header to match addresses from 6)
8) Build output.sap
My main environment is Windows 10 + Cygwin + vim + make + xasm + Perl + Altirra.
Occasionally I've used TMC2 for music and sound effects (X-8), Tiled for map editing (X-8), graph2font for screen editing (X-8, Ransack, Bomber) and gcc for custom C++ utilities (X-8). Other useful tools include franny for ATR manipulation, mads for assembling graph2font-generated sources, exomizer for compression, and many others I'm forgetting. For my various hacks of existing software (e.g. NTSC-fixing, bug fixing, cracking, enhancements) I use my disassembler dis. For BASIC competitions I use dmsc's basicParser.
Of course there is a wealth of great documentation and code to draw inspiration from on the web. It goes without saying that Google is one of the most essential development tools. And sharing ideas on AtariAge is a fundamental source of knowledge and inspiration.
On a related note, would it be possible to normalize the linear and non-linear levels so that typical songs have the same dynamic range in either mode? It seems like non-linear mode makes things much louder overall.
There is some DMA used to fill in the center of the largest faces but it's minimal because it's ANTIC mode 8 with the pixels crunched down from 8 scan-lines per pixel to 1 scan-line per pixel via VSCROL. Here's the DMA pattern in Altirra:
Here's one of the kernels where you can see VSCROL getting updated every scan-line and DLISTL getting updated every other scan-line:
Edit: Correction on how often DLISTL gets updated.
Looks like with my fix, the wizards on level three still glitch and the dragon also doesn't draw in time. I'm afraid there just isn't enough off-screen compute time on NTSC to update the screen cleanly with the current rendering framework of the game. Possible solutions would be to double-buffer the screen or reorganize the code to put all of the screen updates together so they're not so spread out.
Every other frame normally starts after the VBLANK at around scanline 285 on PAL or scanline 32 on NTSC. The late frame start on NTSC delays the animation updates so they occur after the beam has already passed. That causes glitches.
I tried moving the frame start so that it occurs around scanline 147 by adding a DLI and moving the tick update from VBLANK to this new DLI. That seemed to fix the glitches.
The speed of the enemies is faster in the first part of this version than in the original game (and Xuel's NTSC version). I'm not sure how the rest of the game compares, as I didn't play through much of this version yet.
Yeah I noticed that too. The reason is that Rambo Blade replaces the LDA VCOUNT / BNE with LDA VCOUNT / BEQ which effectively gets rid of the frame syncing altogether. This means if you run on a 65816 at a higher frequency (e.g. 21MHz), then the enemies are super fast.
Other than that difference, it's interesting that Rambo Blade uses a similar NTSC-fixing strategy to the one I employed with Joe Blade II, i.e. just swap the immediate and deferred vertical blank routines instead of moving both into deferred as I did with Joe Blade.
Swapped use of Timer 1 and Timer 2 since Timer 1 code was making immediate VBLANK too long but is fine as deferred VBLANK. Not sure if I introduced any order dependency issues with this swap but a quick play through looked OK.