home *** CD-ROM | disk | FTP | other *** search
- /* RISC OS sound support for Manic Miner */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include "ROsound.h"
- #include "ROsupport.h"
-
- /* ////////////////////////////////////////////////////////////
- // Audio Stuff
- //////////////////////////////////////////////////////////// */
- /*#define INGAMEpc 0x00 */
- /*#define INGAMEspec 0x09 */
- /*#define TITLEmusic 0x0d */
- /*#define OPTIONSmusic 0x12 */
- /*#define FINALcavern 0x16 */
- /*#define ENDsequence 0x20 */
-
- /*BYTE VOL=64; */
-
- /*BYTE MUSICh; */
-
- /*WORD volatile FrCt=0; */
-
- /*void *wav=0, *die=0, *pick=0;*/
- /*MIDASsample *mod; */
- /*MIDASmodulePlayHandle modon=0; */
-
-
- const char *
- loadSamples (void)
- {
- long len;
- int i;
- long *p;
- FILE *in;
-
- in = fopen (using_16bit ? "<Manic$Dir>.mm-samp16" : "<Manic$Dir>.mm-samp8",
- "rb");
- if (!in)
- return "Failed to load sample data";
- fseek (in, 0, SEEK_END);
- len = ftell (in);
- fseek (in, 0, SEEK_SET);
- p = malloc ((int) len);
- if (!p)
- return "Failed to load sample data";
- i = fread (p, (int) len, 1, in);
- fclose (in);
- if (i != 1)
- return "Failed to load sample data";
-
- for (i = 0; i < 4; ++i) {
- if (p[0] >= 0) {
- sampleptr[i].repeat = p[1];
- sampleptr[i].ptr = p + 2; /* 8 bytes on... */
- sampleptr[i].end = p + (2 + p[0] / 4);
- p += (p[0] + 11) / 4; /* n+2 words :-) */
- }
- else {
- int j = (int) (~*p++); /* j<i */
- sampleptr[i].repeat = sampleptr[j].repeat;
- sampleptr[i].ptr = sampleptr[j].ptr;
- sampleptr[i].end = sampleptr[j].end;
- }
- }
- return 0;
- }
-
- /* ////////////////////////////////////////////////////////////
- // Play beep...
- //////////////////////////////////////////////////////////// */
-
- #define CONV(p) ((p<<12)/samplefreq)
- #define LONG (4096)
-
- static void
- Sound (unsigned int channel, int sample, int pitch /*Hz */ , int len /*cs */ )
- {
- if (channel < 2) {
- wavpitch[channel] = CONV (pitch);
- wavsample[channel] = sample;
- wavlen[channel] = len * samplefreq / 100;
- }
- }
-
-
- void
- wavPitchBend (unsigned int channel, int pitch)
- {
- if (channel < 2)
- wavpitch[channel] = CONV (pitch);
- }
-
-
- void
- quiet (unsigned int channel)
- {
- if (channel < 2)
- wavpitch[channel] = 0;
- }
-
-
- void
- mm_snd_playmod (int patnum)
- {
- switch (patnum) {
- case 0:
- musicPlay (0, 9, 0);
- return;
- case 9:
- musicPlay (9, 13, 0);
- return;
- case 13:
- musicPlay (13, 18, 1);
- return;
- case 18:
- musicPlay (18, 22, 0);
- return;
- case 32:
- musicPlay (32, 60, 0);
- return;
- default:
- musicPause (0);
- }
- }
-
-
- void
- mm_snd_update (void)
- {
- }
-
-
- void
- mm_snd_stopmod (void)
- {
- musicPause (0); /*musicPlay(17,**18,** 0); */
- }
-
-
- void
- mm_snd_jump (unsigned int rate)
- {
- Sound (0, 0, rate, 2);
- }
-
-
- void
- mm_snd_jump2 (unsigned int rate)
- {
- Sound (1, 0, rate, 2);
- }
-
-
- void
- mm_snd_die (unsigned int rate)
- {
- Sound (1, 1, rate, LONG);
- }
-
-
- void
- mm_snd_pick (unsigned int rate)
- {
- Sound (1, 2, rate, LONG);
- }
-
-
- void
- mm_snd_mute (void)
- {
- musicPause (0);
- }
-
- void
- mm_snd_unmute (void)
- {
- musicPause (1);
- }
-
-