Jump to content
IGNORED

Jaguar's polygon pushing "power"


Gunstar

Recommended Posts

So, getting back on topic - which Jag games have the best music (aside from, say, Tempest) ? And how much of the performance is usually spent on audio for a Jag ?

 

Asking that question might get you lots of replies along the lines of "i love the game x music" which won't necessarily give you any info on the routines used and how much resources they use.

 

There are a few types of audio used on Jaguar games. There's tracker stuff as with Tempest 2000. If you want this kind of audio there are several routines out there, the best of which are LinkoVitch's and Seb's (both in terms of quality and their efficiency). Sinister is also freely available, but is basically a rip of the Imagitec routine used in Tempest and other games and relies a lot on the 68k. Then there's Atari's midi-based stuff. I know nothing of this format, but in Curt's files there's a few versions if you want to play with it. And of course CD audio for the JagCd, which isn't just a straight pass through and isn't 'free', bizarrely.

Edited by sh3-rg
  • Like 2
Link to comment
Share on other sites

I did some looking into the music on Jaguar Rayman some time back. The music is an EXTREMELY simplified tracker format using standard MIDI instruments (except for two). What I know so far...

 

The table of tracks is at offset $1210F0 in the rom. Each entry is 4 LONG values (in big endian format). The first LONG is a track global volume as a WORD, followed by a flag (either FFFF or FF05); the second is a pointer to the compressed track score (AND with $3FFFFF to get the offset in the rom); the third is a bitmask of envelopes used by the track, and the fourth is a bitmask of waveforms used by the track. A bit set for an envelope without a corresponding waveform bit set indicates an FM instrument as opposed to a wavetable instrument. A track score pointer of 0 indicates the end of the table.

 

Track scores are compressed using Rob Northen Compression mode 2. They consist of a number of pairs of LONG values. The first LONG is the time you should wait for before processing the second LONG in the pair. The time is incremented by timer 2 at the tempo rate of the song. It's not a relative delay, it's an absolute time. The second LONG is the score event. One field is the voice number - if the voice is currently off, the event is always a note on event with the following form:

 

b31-29 = unused

b28-26 = voice #

b25-21 = patch # (instrument to play on this voice)

b20-07 = pitch

b06-00 = volume (0 to 127)

 

There are only 29 instruments used by Rayman; they are in order: acoustic bass, clarinet, kick drum 2, open hihat, electric snare 2, fretless bass, electric piano 1, closed hihat 2, percussive organ, acoustic nylon guitar, rock organ, a custom fm instrument, kalimba, contrabass, synth pad 2, harmonica, oboe, pizzicato strings, distortion guitar, synth brass 1, acoustic grand piano, vibraphone (or is it a vibra slap?), cello, soprano sax, percussive conga (not sure about this?), sitar, xylophone, melodic toms, and some instrument called a hulotte (no idea - but it's French for a tufted owl). No bits are set in the bitmasks for bit 29 to 31, so those are unused.

 

If a voice is on, the event has a different form:

 

b31-29 = event, 0 = note off, 1 = pitch change, 2 = change controller, 3 = jump, 4 = pitch change, 5 to 7 unused

 

For everything but jump, the following fields are defined:

 

b28-26 = voice

b25-21 = patch #

b20 = flag, 1 = modify value in patch table, 0 = modify value in voice

b19-15 = controller # (for change controller, defined controls are 7 = volume, 9 = pitch bend, 10 = pan)

b14-00 = value (volume, pitch, or pan depending on the event)

 

Note that there are three ways defined to set the pitch... they all do the same thing. So far that I've seen, the way the pitch is set is using event 4.

 

For jump, the following fields are defined:

 

b28-08 = signed offset of jump divided by 8; multiply value by 8 and add to current pointer to get the jump address

b07-00 = count; if b7 is set, ignore the count and always jump; if b7 is not set, skip jump if 0, otherwise decrement b6-0 and do jump

 

The time is reset to the time for the target address of the jump (the first long).

 

Note that the count isn't very useful as you'd have to reload the count when replaying the music. None of the tracks I've examined so far use the count - they set b7 so that it always jumps... in fact, it's always the last event in the score - jump back to the very beginning of the score.

 

As you can see, it's really damn simple. No tremolo, no vibrato, no porta, no slides, no NOTHING but setting note on/off, volume, pan, or pitch by hand using events.

  • Like 10
Link to comment
Share on other sites

Full Potential ? Well, until someone invests couple hundred hours of his free time to write an ASM SW rasterizer, it`s not gonna happen

 

Well that's already been done. A few times and the sources are all available. The Atari Renderer, HoverStrike, HoverStrike CD and Fight For Life all have their sources available for them. It seems like the Jaguar community is rather spoiled for choice when it comes to ready made pre-written ASM SW rasterizers. I'm sure they'd all have to be adapted to whatever other things they'd be used for but it sure seems like it would beat starting from scratch.

Edited by JagChris
Link to comment
Share on other sites

Full Potential ? Well, until someone invests couple hundred hours of his free time to write an ASM SW rasterizer, it`s not gonna happen

 

Well that's already been done. A few times and the sources are all available. The Atari Renderer, HoverStrike, HoverStrike CD and Fight For Life all have their sources available for them. It seems like the Jaguar community is rather spoiled for choice when it comes to ready made pre-written ASM SW rasterizers.

So, there isn`t a single game (or a tech demo at least) that would be based off hose sources ?

 

I'm sure they'd all have to be adapted to whatever other things they'd be used for but it sure seems like it would beat starting from scratch.

Oh, absolutely. Technically, you just need a rasterizer module that you supply with the camera, vertices & textures (equivalent of Vertex/Index Buffers in DirectX) and let it do its magic :)

Having to write some wrapper vs starting from scratch is an easy dilemma :)

 

A combination of Removers Library + some 3d Rasterizer module (from, say, Hovercraft CD) sure sounds like a fastest way.

 

 

Are there any legal implications of using those sources (from those games), perhaps ? What license have they been released under ?

Link to comment
Share on other sites

So, there isn`t a single game (or a tech demo at least) that would be based off those sources ?

 

Yes, Surrounded! was written using a modified version of the Atari renderer. As for licensing I dont think there would be any issue. The Atari renderer itself was created for developers to use. I think HS and HS CD were using modified versions of that based on the evidence.

Link to comment
Share on other sites

Since Hasbro (who bought what was left of Atari when they fell) publicly released their rights on the Jaguar, you can reuse example code without problems (it may not be true for Atari-developed games source code, however ; the situation is not clear).

 

I doubt anyone would care if he cannibalised the modules to make something new since most of these sources were salvaged out of a dumpster by Curt Vendel weren't they?

 

But since I really don't know, which one do you think would be least likely to raise a stink? Looking at the HS CD source the engine has the usual 'use and adaptaion of this is prohibited' notice in the beginning but I cannot find something like this in the Renderer sources. Either I'm just not looking hard enough or this implies that maybe this source was meant to be sent 'out there' for developers to use?

Edited by JagChris
Link to comment
Share on other sites

Since Hasbro (who bought what was left of Atari when they fell) publicly released their rights on the Jaguar, you can reuse example code without problems (it may not be true for Atari-developed games source code, however ; the situation is not clear).

 

I think Kskunk answered this question probably about as good as its going to get answered. http://www.jaguarsector.com/index.php?showtopic=33344&st=0&gopid=344265entry344265

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