I ripped USFs from Battlezone: Rise of the Black Dogs, just a few questions by Nielk1 at 3:03 AM EDT on May 7, 2014
I am a member of the Battlezone Community, specifically for the game Battlezone II for PC. A few members have already participated in recreating the missions from the first PC game in the BZ2 engine, but one set of content has always illuded us. The contents of the N64 game, "Battlezone: Rise of the Black Dogs". Recently, we discovered that sample ripping was possible on the rom (it's offsets were recently added to the ripper's predefinitions from what I can tell) and various experiments later have left us with extracted textures, terrain light maps, terrain texture maps, and we are still working on that.
Along with this work was continuing attempts to gain access to a faithful recreation of the music tracks, however awful, from the N64 game. On the tail of the recent success interpreting the binary files extracted from the ROM as a sort of hybrid data type between N64 standards and the 1st PC game I took a try combining the samples and midi rips. This did not go well. I took another tactic and started tearing through the USF creation example from 'KIG'. While it didn't match up very well, it got me far enough along to make some major progress.
And without further exposition on why I did this, the fruits of my labor thus far and the reason for my post:
First, the questions:
What do I put in the genera tag, the game genera?
Is there any way to remove a 1 second or so gap at the start of every track? It is part of the track, though not played when the track loops around a 2nd time (aside from some slight volume differences at the start the 2nd loop is exactly the same, and as tracks are all over a minute and sometimes it does not mesh well, not needed). The only way I can think is to create a save state manually for each and every track with the $a0 register already set, since I would lose my entry point to change the register value in "PJ64 USF" (which, btw, is a pain in the arse to get working). I'm just starting to think leaving the 1 second gap (that is also in the midis if you rip them) is the best course of action, but I want opinions.
How do I know if my rip's CPU use is low enough. I suspect it is fine given Winamp's CPU change is not even noticed by task manager when playing, but it is just something I want to be sure is good knowing how much of a pain it was to get the game to emulate properly in the first place (it really still doesn't).
What is the proper method to release these rips, where do I submit them, to whom.
Are my timings good enough? (They are all within 1 second of correct, I tried to use a precision of 0.01 seconds but I swear it kept changing to 0.1 and on a rare occasion the thing wouldn't play exactly the same if skipped right to the end. Basically, it was a matter of trying to prevent you from hearing the first note of a loop that is unnecessary and sometimes doesn't mesh well in the first place.)
What should I do with a few samples that are used by the game as music? These are: the Climax Group card sound, the Crave Entertainment card sound, the Title Screen sound, the Success sound, and the Failure sound. I figured I would distribute the WAVs of these tracks with the miniusf files and usflib, at least for the Battlezone community, but I wonder what the proper action is in the "USF Scene".
Some tech info:
if (PROGRAM_COUNTER==0x80036820){ if (!runyet) { ((DWORD*)((g_MMU->Rdram())))[0x2972C/4]=0; // set jump to NOP in thread 2 // nothin' ((DWORD*)((g_MMU->Rdram())))[0x3F3D0/4]=0; // set jump to NOP in __osDevMgrMain ((DWORD*)((g_MMU->Rdram())))[0x3C6D8/4]=0; // set jump to NOP in thread 4 // nothin' ((DWORD*)((g_MMU->Rdram())))[0x525EC/4]=0; // set jump to NOP in thread 5 // nothin' ((DWORD*)((g_MMU->Rdram())))[0x2AB94/4]=0; // set jump to NOP in thread 6 // nothin' ((DWORD*)((g_MMU->Rdram())))[0x2A8FC/4]=0; // set jump to NOP in thread 7 // nothin' ((DWORD*)((g_MMU->Rdram())))[0x29AF4/4]=0; // set jump to NOP in thread 9 // message queue chewer ((DWORD*)((g_MMU->Rdram())))[0x2A4B0/4]=0; // set jump to NOP in thread A // message queue item shifter ((DWORD*)((g_MMU->Rdram())))[0x2AA44/4]=0; // set jal osSendMesg to NOP in thread 8 /*paste the save state as menu item code here for lack of an easy function in the current PJ64 source for this*/ } runyet=1; }
Entry point for ripping the USFs with PJ64 USF is 0x80036820.
Final filesize of miniusf files and usflib is 336,546 bytes, they play well in Winamp under 64th Note.
I worked with a fellow BZ community member in tagging the tracks and used his descriptions in the comment tag. The names are not final, they are based on the names given to the tracks when they were recorded directly from an N64 by another community member, probably based on their order of occurrence in one of the three campaigns. There are 3 files that we suspect are unused by the game, though we need to look into it harder. Zealous direct recordings didn't find them after all.
Wow, funny to find you here Nielk1. How's the BZ2 community been doing?
It's nice to finally have a USF set of this game already, one thing I noticed when I played this game is that the music sounds almost like it was done in maybe FastTracker 2. I do know that the music in Red Odyssey was done on either ImpulseTracker or IMAGO Orpheus and rendered to CD-AUDIO, and given how the N64 has limited memory music is usually either some form of tracker or some oddball MIDI format.
If as you said n64soundtool has the proper sample data offsets for ripping I could try recreating this music in ImpulseTracker if you wouldn't mind that kind of effort.
I gave your rip a full listen and I can't tell any issues with it, it pretty much sounds exactly like the game.
What I'd really love to see is these tracks with samples and such that make them sound similar to BZ (PC). Most of the music is new, and having a new set of BZ style music fitting for Battlezone 1 version 1.5 mods and Battlezone II: Battlezone Classic extensions would be awesome.
I am also trying to get the mission scripts (ASM, AH!), maps, and 1 or 2 new units out of the N64 game. I even found the BZNs so far, but I need to write a custom reader to even make sense of it.
Look in the folder that my download link goes to. It has a few of the minor things I have pulled, including the midis and samples in 2 7zs.
Glad to hear my timings are good. I guess the only real question left barring something someone else notices is how to label these and where to put them (plus a little better track names on the Mission # tracks).
Making the N64 music sound somewhat like the original BZ would be quite a trick. I dunno' what Jeehun Hwang used when he produced the music (it sounds like he used a full blown orchestra or something) but it would probably take a pretty hefty DAW to pull this off with.
I was more thinking of making the N64 music in ImpulseTracker with slightly better sounding samples. And I can render them to .ogg files since I know the unofficial Battlezone patches only support that for music.
I'm taking a look at the other archives, thanks for sharing this!
I think I am going to set up my emulator to dump the music # for each mission as I start it and then name the tracks after the mission names in this style:
Please take a look and let me know what you think. I've been told by one person that the WAV file I have in there for the Title is a smidge slow, though everything else there seems perfect. The USFs are now fully tagged.
If this is good, all I need to know is how to properly roll this out, get it on the archive sites, etc.