DOOM64-RE

DOOM 64 Reverse Engineering
Log | Files | Refs | README | LICENSE

wessedit.c (4891B)


      1 
      2 /* ULTRA64 LIBRARIES */
      3 #include <ultra64.h>
      4 #include "ultratypes.h"
      5 #include <libaudio.h>
      6 
      7 /* WESS API INCLUDES */
      8 #include "wessapi.h"	// audio stuff...
      9 #include "seqload.h"
     10 #include "soundhw.h"
     11 #include "wessarc.h"
     12 #include "wessseq.h"
     13 
     14 #include "funqueue.h"
     15 
     16 #include "wessedit.h"
     17 #ifndef NOUSEWESSCODE
     18 extern pmasterstat *pm_stat;    //0x800B41CC
     19 
     20 static int max_edit_labels = 2;		//0x8005D900
     21 static int soundfx_edit_tracks = 8;	//0x8005D904
     22 static int music_edit_tracks = 15;	//0x8005D908
     23 static int drums_edit_tracks = 1;	//0x8005D90C
     24 static int edt_mem_is_mine = 0;//0x8005D910
     25 static char *edt_mem = 0;//0x8005D914
     26 static int  edt_size = 0;//0x8005D918
     27 
     28 void wess_handle_free_edit_space(void) // 80034D20
     29 {
     30 	if (edt_mem_is_mine)
     31 	{
     32 		if (edt_mem)
     33 		{
     34 			wess_free(edt_mem);
     35 			edt_mem = 0;
     36 		}
     37 		edt_mem_is_mine = 0;
     38 	}
     39 }
     40 
     41 char *wess_get_edt_start(void) // 80034D70
     42 {
     43 	return(edt_mem);
     44 }
     45 
     46 int wess_get_edt_size(void) // 80034D80
     47 {
     48 	return(edt_size);
     49 }
     50 
     51 void wess_handle_set_edit_tracks(int labels, int soundfx, int music, int drums) // 80034D90
     52 {
     53 	max_edit_labels = labels;
     54 	soundfx_edit_tracks = soundfx;
     55 	music_edit_tracks = music;
     56 	drums_edit_tracks = drums;
     57 }
     58 
     59 int wess_handle_create_edit_space(char *memory_pointer, int data_size, int memory_allowance) // 80034DB4
     60 {
     61 	int i, j, k, soundfx_cnt, music_cnt, drums_cnt;
     62 	sequence_status *psq_stat;
     63 	track_status *ptk_stat;
     64 	char *pdest;
     65 	char *pmem;
     66 	int ptrk_indxs_pos;
     67 	int set_psq_stat;
     68 
     69 	char *_memory_pointer;
     70 	int _data_size;
     71 	int _memory_allowance;
     72 
     73 	_memory_pointer = memory_pointer;
     74 	_data_size = data_size;
     75 	_memory_allowance = memory_allowance;
     76 
     77 	if (!Is_Module_Loaded())
     78 		return(0);
     79 
     80 	soundfx_cnt = 0;
     81 	music_cnt = 0;
     82 	drums_cnt = 0;
     83 
     84 	set_psq_stat = 0;
     85 
     86 	if (_memory_pointer == NULL)
     87 	{
     88 		edt_mem_is_mine = 1;
     89 		edt_mem = wess_malloc((char *)_memory_allowance);
     90 		if (edt_mem == NULL)
     91 		{
     92 			return(0);
     93 		}
     94 	}
     95 	else
     96 	{
     97 		edt_mem_is_mine = 0;
     98 		edt_mem = _memory_pointer;
     99 	}
    100 
    101 	edt_size = _memory_allowance;
    102 
    103 	wess_disable();
    104 
    105 	for (i = 0; i < wess_driver_tracks; i++)
    106 	{
    107 		if (!((pm_stat->pseqstattbl + i)->flags & SEQ_ACTIVE))
    108 			break;
    109 	}
    110 
    111 	if (wess_driver_tracks == i)
    112 	{
    113 		wess_enable();
    114 		return 0;
    115 	}
    116 
    117 	psq_stat = (pm_stat->pseqstattbl + i);
    118 	pdest = psq_stat->ptrk_indxs;
    119 	for (j = 0; j < wess_driver_tracks; j++)
    120 	{
    121 		ptk_stat = (pm_stat->ptrkstattbl + i);
    122 
    123 		if (!(ptk_stat->flags & TRK_ACTIVE))
    124 		{
    125 			if (soundfx_cnt < soundfx_edit_tracks)
    126 			{
    127 				ptk_stat->sndclass = SNDFX_CLASS;
    128 				ptk_stat->patchtype = 1;
    129 				ptk_stat->data_space = _data_size - (max_edit_labels << 2);
    130 				ptrk_indxs_pos = soundfx_cnt;
    131 				soundfx_cnt++;
    132 			}
    133 			else if (music_cnt < music_edit_tracks)
    134 			{
    135 				ptk_stat->sndclass = MUSIC_CLASS;
    136 				ptk_stat->patchtype = 1;
    137 				ptk_stat->data_space = _data_size - (max_edit_labels << 2);
    138 				ptrk_indxs_pos = (music_cnt + soundfx_edit_tracks);
    139 				music_cnt++;
    140 			}
    141 			else if (drums_cnt < drums_edit_tracks)
    142 			{
    143 				ptk_stat->sndclass = DRUMS_CLASS;
    144 				ptk_stat->patchtype = 1;
    145 				ptk_stat->data_space = (_memory_allowance - (soundfx_edit_tracks + music_edit_tracks) * _data_size) - (max_edit_labels << 2);
    146 				ptrk_indxs_pos = (drums_cnt + soundfx_edit_tracks + music_edit_tracks);
    147 				drums_cnt++;
    148 			}
    149 			else
    150 			{
    151 				break;
    152 			}
    153 
    154 			//----------------------
    155 			set_psq_stat = 1;
    156 
    157 			*(pdest + ptrk_indxs_pos) = j; /* update ptrk_indxs for the sequence */
    158 
    159 			ptk_stat->seq_owner = i;
    160 			ptk_stat->patchnum = 0;
    161 			ptk_stat->volume_cntrl = 0x7f;
    162 			ptk_stat->pitch_cntrl = 0;
    163 			ptk_stat->pan_cntrl = 0x40;
    164 			ptk_stat->voices_active = 0;
    165 			ptk_stat->ppq = 120;
    166 			ptk_stat->qpm = 120;
    167 			ptk_stat->ppi = CalcPartsPerInt(GetIntsPerSec(), ptk_stat->ppq, ptk_stat->qpm);
    168 			ptk_stat->starppi = 0;
    169 			ptk_stat->totppi = 0;
    170 			ptk_stat->labellist_count = 0;
    171 			ptk_stat->data_size = 2;
    172 			ptk_stat->psp = (unsigned char*)ptk_stat->psubstack;
    173 			ptk_stat->labellist_max = max_edit_labels;
    174 
    175 			//----------------------
    176 			pmem = (edt_mem + (ptrk_indxs_pos * _data_size));
    177 			ptk_stat->plabellist = (unsigned long *)pmem;
    178 
    179 			for (k = 0; k < ptk_stat->labellist_max; k++)
    180 			{
    181 				*pmem++ = 0;
    182 			}
    183 
    184 			//----------------------
    185 			pmem = (edt_mem + (max_edit_labels << 2) + (ptrk_indxs_pos * _data_size));
    186 			ptk_stat->pstart = (char *)pmem;
    187 			pmem[0] = 0;
    188 			pmem[1] = TrkEnd;
    189 
    190 			ptk_stat->flags = (ptk_stat->flags|TRK_ACTIVE|TRK_STOPPED|TRK_HANDLED|TRK_OFF) & ~(TRK_MUTE|TRK_TIMED|TRK_LOOPED|TRK_SKIP);
    191 			ptk_stat->ppos = Read_Vlq(ptk_stat->pstart, &ptk_stat->deltatime);
    192 			ptk_stat->mutemask = 0;
    193 
    194 			psq_stat->tracks_active++;
    195 			pm_stat->trks_active++;
    196 		}
    197 	}
    198 
    199 	if (set_psq_stat)
    200 	{
    201 		psq_stat->flags |= (SEQ_HANDLE|SEQ_ACTIVE);
    202 		psq_stat->seq_num = -1;
    203 		psq_stat->seq_type = 0;
    204 		psq_stat->playmode = 0;
    205 		psq_stat->volume = 0x7f;
    206 		psq_stat->pan = 0x40;
    207 		pm_stat->seqs_active++;
    208 	}
    209 
    210 	wess_enable();
    211 
    212 	if (set_psq_stat)
    213 	{
    214 		return (i + 1);
    215 	}
    216 
    217 	return 0;
    218 }
    219 #endif