DOOM64-RE

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

wessarc.h (12029B)


      1 #ifndef _WESSARC_H
      2 #define _WESSARC_H
      3 
      4 #include <ultra64.h>
      5 #include <libaudio.h>
      6 
      7 //#define NOUSEWESSCODE
      8 
      9 enum Wess_Error {
     10 
     11 	wess_NO_ERROR,
     12 	wess_FOPEN,
     13 	wess_FREAD,
     14 	wess_FSEEK
     15 };
     16 
     17 //LCD FILE Structs
     18 typedef struct
     19 {
     20 	unsigned char	patchmap_cnt;	//r*
     21 	unsigned char	pad1;	        //r*1
     22 	unsigned short	patchmap_idx;	//r*2
     23 }patches_header;
     24 
     25 typedef struct
     26 {
     27 	unsigned char priority;			//*0
     28 	unsigned char volume;			//*1----*2
     29 	unsigned char pan;				//*2----*3
     30 	unsigned char reverb;			//*3----*1
     31 	unsigned char root_key;			//*4----*4
     32 	unsigned char fine_adj;			//*5----*5
     33 	unsigned char note_min;			//*6----*6
     34 	unsigned char note_max;			//*7----*7
     35 	unsigned char pitchstep_min;	//*8----*8
     36 	unsigned char pitchstep_max;	//*9----*9
     37 	unsigned short sample_id;		//*10 swap
     38 	unsigned short attack_time;		//*12 swap
     39 	unsigned short decay_time;		//*14 swap
     40 	unsigned short release_time;	//*16 swap
     41 	unsigned char attack_level;		//*18
     42 	unsigned char decay_level;		//*19
     43 }patchmaps_header;
     44 
     45 typedef struct {
     46     s32 order;
     47     s32 npredictors;
     48     s16 book[128];        /* Actually variable size. Must be 8-byte aligned */
     49 } ALADPCMBook2;
     50 
     51 typedef struct {
     52     u32         start;
     53     u32         end;
     54     u32         count;
     55     ADPCM_STATE state;
     56     u32         pad;
     57 } ALADPCMloop2;
     58 
     59 typedef struct {
     60     u32         start;
     61     u32         end;
     62     u32         count;
     63     u32         pad;
     64 } ALRawLoop2;
     65 
     66 typedef struct {
     67     ALADPCMloop2 *loop;
     68     ALADPCMBook2 *book;
     69 } ALADPCMWaveInfo2;
     70 
     71 typedef struct
     72 {
     73     u8      *base;  /* ptr to start of wave data    */	//r*0
     74     s32     len;    /* length of data in bytes      */	//r*4
     75     u8      type;   /* compression type             */	//r*8
     76     u8      flags;  /* offset/address flags         */	//r*9
     77     void    *loop;  //r*12
     78     void    *book;  //r*14
     79 } ALWaveTable2;
     80 
     81 typedef struct
     82 {
     83 	//u8          *base;          /* ptr to start of wave data    */	//r*0
     84 	//s32         len;            /* length of data in bytes      */	//r*4
     85 	//u8          type;           /* compression type             */	//r*8
     86 	//u8          flags;          /* offset/address flags         */	//r*9
     87 	//union {
     88 	//	ALADPCMWaveInfo2 adpcmWave;//12
     89 	//	ALRAWWaveInfo   rawWave;//12
     90 	//} waveInfo;//12
     91 
     92 	ALWaveTable2 wave;
     93 	s32         pitch;//20
     94 } patchinfo_header; //ALWaveTable custom
     95 
     96 typedef struct
     97 {
     98 	unsigned short            nsfx1;			//0 sfx count (124)
     99 	unsigned short            rawcount;			//2
    100 	unsigned short            adpcmcount;		//4 loop data count (23)
    101 	unsigned short            nsfx2;			//6 sfx count again?? (124)
    102 } loopinfo_header;
    103 
    104 //*******************************
    105 
    106 typedef struct
    107 {
    108 	int				module_id_text;		//*
    109 	unsigned int	module_version;		//*4
    110 	unsigned int	pad1;				//*8
    111 	unsigned short	pad2;				//*12
    112 	unsigned short	sequences;			//*14
    113 	unsigned char	decomp_type;		//*16
    114 	unsigned char	pad3;				//*17
    115 	unsigned char	pad4;				//*18
    116 	unsigned char	pad5;				//*19
    117 	unsigned int	compress_size;		//*20
    118 	unsigned int	data_size;			//*24
    119 	unsigned int	pad6;				//*28
    120 }module_header;//32
    121 
    122 typedef struct
    123 {
    124 	unsigned char	voices_type;		//*
    125 	unsigned char	reverb;				//*1
    126 	unsigned short	initpatchnum;		//*2
    127 	unsigned short	initpitch_cntrl;	//*4
    128 	unsigned char	initvolume_cntrl;	//*6
    129 	unsigned char	initpan_cntrl;		//*7
    130 	unsigned char	substack_count;		//*8
    131 	unsigned char	mutebits;			//*9
    132 	unsigned short	initppq;			//*10
    133 	unsigned short	initqpm;			//*12
    134 	unsigned short	labellist_count;	//*14
    135 	unsigned int	data_size;			//*16
    136 }track_header;//size 20 bytes
    137 
    138 typedef struct
    139 {
    140 	track_header	*trk_hdr;//*
    141 	unsigned long	*plabellist;//*4
    142 	char			*ptrk_data;//*8
    143 }track_data;
    144 
    145 typedef struct
    146 {
    147 	unsigned short	tracks;			//*
    148 	unsigned short	decomp_type;	//*2
    149 	unsigned int	trkinfolength;	//*4
    150 	unsigned int	fileposition;	//*8
    151 }seq_header;
    152 
    153 typedef struct
    154 {
    155 	seq_header		seq_hdr;		//*
    156 	track_data		*ptrk_info;		//*12
    157 }sequence_data;
    158 
    159 typedef struct
    160 {
    161 	module_header	mod_hdr;			//*
    162 	sequence_data	*pseq_info;			//*32
    163 }module_data;
    164 
    165 typedef void (*callfunc_t)(char, short);
    166 typedef struct
    167 {
    168 	unsigned char	active;				//*
    169 	unsigned char	type;				//*1
    170 	unsigned short	curval;				//*2
    171 	callfunc_t      callfunc;			//*4
    172 }callback_status;
    173 
    174 typedef struct
    175 {
    176 	unsigned int	load_flags;			//*
    177 	unsigned short	patches;			//*4
    178 	unsigned short	patch_size;			//*6
    179 	unsigned short	patchmaps;			//*8
    180 	unsigned short	patchmap_size;		//*10
    181 	unsigned short	patchinfo;			//*12
    182 	unsigned short	patchinfo_size;		//*14
    183 	unsigned short	drummaps;			//*16
    184 	unsigned short	drummap_size;		//*18
    185 	unsigned int	extra_data_size;	//*20
    186 }patch_group_header;
    187 
    188 typedef struct
    189 {
    190 	int hardware_ID;//76
    191 	int flags_load;//80
    192 }hardware_table_list;
    193 
    194 typedef struct
    195 {
    196 	patch_group_header pat_grp_hdr;		//*
    197 	char				*ppat_data;		//*24
    198 }patch_group_data;//size 84 bytes
    199 
    200 #define DriverInit      0
    201 #define DriverExit      1
    202 #define DriverEntry1    2
    203 #define DriverEntry2    3
    204 #define DriverEntry3    4
    205 #define TrkOff          5
    206 #define TrkMute         6
    207 #define PatchChg        7
    208 #define PatchMod        8
    209 #define PitchMod        9
    210 #define ZeroMod         10
    211 #define ModuMod         11
    212 #define VolumeMod       12
    213 #define PanMod          13
    214 #define PedalMod        14
    215 #define ReverbMod       15
    216 #define ChorusMod       16
    217 #define NoteOn          17
    218 #define NoteOff         18
    219 
    220 // Engine Only
    221 #define StatusMark      19
    222 #define GateJump        20
    223 #define IterJump        21
    224 #define ResetGates      22
    225 #define ResetIters      23
    226 #define WriteIterBox    24
    227 #define SeqTempo        25
    228 #define SeqGosub        26
    229 #define SeqJump         27
    230 #define SeqRet          28
    231 #define SeqEnd          29
    232 #define TrkTempo        30
    233 #define TrkGosub        31
    234 #define TrkJump         32
    235 #define TrkRet          33
    236 #define TrkEnd          34
    237 #define NullEvent       35
    238 
    239 #define SEQ_STATE_STOPPED 0
    240 #define SEQ_STATE_PLAYING 1
    241 
    242 //(val << 0 < 0) 128
    243 //(val << 1 < 0) 64
    244 //(val << 2 < 0) 32
    245 //(val << 3 < 0) 16
    246 //(val << 4 < 0) 8
    247 //(val << 5 < 0) 4
    248 //(val << 6 < 0) 2
    249 //(val << 7 < 0) 1
    250 
    251 //New track
    252 #define TRK_OFF		1
    253 #define TRK_SKIP	2
    254 #define TRK_LOOPED	4
    255 #define TRK_TIMED	8
    256 #define TRK_STOPPED	16
    257 #define TRK_HANDLED	32
    258 #define TRK_MUTE	64
    259 #define TRK_ACTIVE	128
    260 
    261 //New seq
    262 #define SEQ_STOP	8
    263 #define SEQ_RESTART	16
    264 #define SEQ_PAUSE	32
    265 #define SEQ_HANDLE	64
    266 #define SEQ_ACTIVE	128
    267 
    268 //New voice
    269 #define VOICE_DECAY		32
    270 #define VOICE_RELEASE	64
    271 #define VOICE_ACTIVE	128
    272 
    273 typedef struct
    274 {
    275 	unsigned char	flags;			//*
    276 	unsigned char	playmode;		//*1
    277 	unsigned short	seq_num;		//*2
    278 	unsigned char	tracks_active;	//*4
    279 	unsigned char	tracks_playing;	//*5
    280 	unsigned char	volume;			//*6
    281 	unsigned char	pan;			//*7
    282 	unsigned int	seq_type;		//*8
    283 	char			*ptrk_indxs;	//*12---
    284 	char			*pgates;		//*16---
    285 	char			*piters;		//*20
    286 }sequence_status;
    287 
    288 typedef struct
    289 {
    290 	unsigned char	flags;			//*
    291 	unsigned char	refindx;		//*1
    292 	unsigned char	seq_owner;		//*2
    293 	unsigned char	sndclass;		//*3
    294 	unsigned short	patchnum;		//*4
    295 	short			pitch_cntrl;	//*6
    296 	unsigned int	deltatime;		//*8
    297 	unsigned char	reverb;			//*12
    298 	unsigned char	volume_cntrl;	//*13
    299 	unsigned char	pan_cntrl;		//*14
    300 	unsigned char	mutemask;		//*15
    301 	unsigned char	patchtype;		//*16
    302 	unsigned char	voices_active;	//*17
    303 	unsigned char	voices_max;		//*18
    304 	unsigned char	priority;		//*19
    305 	unsigned short	ppq;			//*20
    306 	unsigned short	qpm;			//*22
    307 	unsigned short	labellist_count;//*24
    308 	unsigned short	labellist_max;	//*26
    309 	unsigned long   ppi;			//*28
    310 	unsigned long	starppi;		//*32
    311 	unsigned int	accppi;			//*36
    312 	unsigned int	totppi;			//*40
    313 	unsigned int	endppi;			//*44
    314 	unsigned char	*pstart;		//*48
    315 	unsigned char	*ppos;			//*52
    316 	unsigned long	*plabellist;	//*56
    317 	unsigned long	*psubstack;		//*60
    318 	unsigned char	*psp;			//*64
    319 	unsigned long	*pstackend;		//*68
    320 	unsigned int	data_size;		//*72
    321 	unsigned int	data_space;		//*76
    322 }track_status;
    323 
    324 typedef struct
    325 {
    326 	unsigned char		flags;			//*
    327 	unsigned char		patchtype;		//*1
    328 	unsigned char		refindx;		//*2
    329 	unsigned char		track;			//*3
    330 	unsigned char		priority;		//*4
    331 	unsigned char		keynum;			//*5
    332 	unsigned char		velnum;			//*6
    333 	unsigned char		sndtype;		//*7
    334 	patchmaps_header 	*patchmaps;		//*8
    335 	patchinfo_header 	*patchinfo;		//*12 /* offset to wavetable struct           */
    336 	unsigned long		pabstime;		//*16
    337 }voice_status;//size 24 bytes
    338 
    339 typedef struct
    340 {
    341 	unsigned long		*pabstime;				//*---
    342 	unsigned char		seqs_active;			//*4
    343 	unsigned char		trks_active;			//*5
    344 	unsigned char		voices_active;			//*6
    345 	unsigned char		voices_total;			//*7
    346 	unsigned char		patch_types_loaded;		//*8
    347 	unsigned char		callbacks_active;		//*9
    348 	unsigned char		max_trks_perseq;		//*10
    349 	unsigned char		max_substack_pertrk;	//*11----
    350 	module_data			*pmod_info;				//*12---
    351 	callback_status		*pcalltable;			//*16---
    352 	patch_group_data	*ppat_info;				//*20-----
    353 	sequence_status		*pseqstattbl;			//*24-----
    354 	track_status		*ptrkstattbl;			//*28-----
    355 	voice_status		*pvoicestattbl;			//*32-----
    356 }master_status_structure;
    357 
    358 typedef master_status_structure pmasterstat;
    359 
    360 #define WESS_SSSP_TEXT		0x534E3634//'SN64'
    361 #define WESS_CORE_VERSION	0x02
    362 
    363 #define SNDFX_CLASS		0
    364 #define MUSIC_CLASS		1
    365 #define DRUMS_CLASS		2
    366 #define SFXDRUMS_CLASS	3
    367 
    368 #define TAG_SOUND_EFFECTS 1
    369 #define TAG_MUSIC         2
    370 #define TAG_DRUMS         4
    371 
    372 #define LOAD_PATCHES	1
    373 #define LOAD_PATCHMAPS	2
    374 #define LOAD_PATCHINFO	4
    375 #define LOAD_DRUMMAPS	8
    376 #define LOAD_EXTRADATA	16
    377 
    378 ///----------------------------------
    379 extern void (**CmdFuncArr[10])(track_status *);
    380 
    381 extern int wess_driver_num_dma_buffers;
    382 extern int wess_driver_num_dma_messages;
    383 extern int wess_driver_dma_buffer_length;
    384 extern int wess_driver_extra_samples;
    385 extern int wess_driver_frame_lag;
    386 extern int wess_driver_voices;
    387 extern int wess_driver_updates;
    388 extern int wess_driver_sequences;
    389 extern int wess_driver_tracks;
    390 extern int wess_driver_gates;
    391 extern int wess_driver_iters;
    392 extern int wess_driver_callbacks;
    393 extern int wess_driver_max_trks_per_seq;
    394 extern int wess_driver_max_subs_per_trk;
    395 extern int enabledecay;
    396 
    397 extern int SeqOn;
    398 extern unsigned long millicount;
    399 extern int WessTimerActive;
    400 
    401 
    402 #define SEEK_SET    0
    403 #define SEEK_CUR    1
    404 #define SEEK_END    2
    405 
    406 typedef struct
    407 {
    408 	char *start;		//L800B4200
    409 	char *src;			//L800B4204
    410 } N64_File_IO_Struct;
    411 
    412 typedef N64_File_IO_Struct Wess_File_IO_Struct;
    413 typedef N64_File_IO_Struct Wess_Data_IO_Struct;
    414 
    415 extern Wess_File_IO_Struct module_fileref;//800B4200
    416 extern Wess_Data_IO_Struct data_fileref;//L800B4208
    417 
    418 extern void wess_engine_off(void);//L80035340()
    419 extern void wess_engine_on(void);//L8003534C()
    420 
    421 extern void wess_low_level_init(void);//L8003531C()
    422 extern void wess_low_level_exit(void);//L80035324()
    423 
    424 extern short GetIntsPerSec(void);
    425 extern unsigned long CalcPartsPerInt(short ips,short ppq,short qpm);
    426 
    427 extern void init_WessTimer(void);
    428 extern void exit_WessTimer(void);
    429 
    430 extern void wess_low_level_exit(void);
    431 extern char *wess_malloc(char *mem);
    432 extern void wess_free(char *mem);
    433 
    434 extern Wess_File_IO_Struct *module_open(char *filename);
    435 extern int module_read(void *destptr, int readbytes, Wess_File_IO_Struct *fileptr);
    436 extern int module_seek(Wess_File_IO_Struct *fileptr, int seekpos, int seekmode);
    437 extern unsigned long module_tell(Wess_File_IO_Struct *fileptr);
    438 extern void module_close(Wess_File_IO_Struct *fileptr);
    439 
    440 extern int wess_decomp(unsigned char decomp_type, char *fileref, unsigned long file_offset, char *ramdest, unsigned long uncompressed_size);
    441 extern void wess_enable(void);
    442 extern void wess_disable(void);
    443 
    444 
    445 extern long WessInterruptHandler(void);
    446 
    447 typedef void(*WessAction)(track_status *ptmp, int value);
    448 
    449 #define QUEUE_SEQ_STOPALL					0
    450 #define QUEUE_SEQ_STOP						1
    451 #define QUEUE_MASTER_SFX_VOL_SET			2
    452 #define QUEUE_MASTER_MUS_VOL_SET			3
    453 #define QUEUE_HANDLE_PARM_MOD				4
    454 #define QUEUE_HANDLE_NOTEON					5
    455 #define QUEUE_SEQ_PAUSE						6
    456 #define QUEUE_SEQ_RESTART					7
    457 #define QUEUE_SEQ_PAUSEALL					8
    458 #define QUEUE_SEQ_RESTARTALL				9
    459 #define QUEUE_SEQ_STOPTYPE					10
    460 #define QUEUE_SEQ_UPDATE_TYPE_SPECIAL		11
    461 #define QUEUE_SEQ_STOPALL_AND_VOICERAMP		12
    462 #define QUEUE_SEQ_STOP_AND_VOICERAMP		13
    463 #define QUEUE_SEQ_STOPTYPE_AND_VOICERAMP	14
    464 
    465 #endif // _WESSARC_H