# Lost Kingdoms 2 SAM/PPS open FDDE "pps" open FDDE "sam" 1 endian big get PPS_SIZE long get DUMMY long # 3 get ENTRY_SIZE long get SOME_OFF long get INFO_OFF long goto INFO_OFF for i = 0 get DUMMY long if DUMMY == 0xffffffff break endif get OFFSET long get ZERO long get DUMMY short get FREQUENCY short get DUMMY long get DUMMY long # often zero get DUMMY long # often zero get COEFF_OFF long putarray 0 i OFFSET putarray 1 i FREQUENCY putarray 2 i COEFF_OFF next i get OFFSET asize 1 putarray 0 i OFFSET math FILES = i for i = 0 < FILES getarray OFFSET 0 i getarray FREQUENCY 1 i getarray COEFF_OFF 2 i math i + 1 getarray SIZE 0 i math SIZE - OFFSET math CHANNELS = 1 math TMP = CHANNELS math TMP * 32 math COEFF_OFF + INFO_OFF math COEFF_OFF + 8 goto COEFF_OFF getdstring COEFF TMP get NAME basename string NAME p "%s_%d.genh" NAME i callfunction DUMP_GENH 1 next # requirements: NAME, OFFSET, SIZE, CHANNELS, FREQUENCY, COEFF startfunction DUMP_GENH endian save CURRENT_ENDIAN endian little math genhsz = 0x80 log MEMORY_FILE 0 0 putdstring "GENH" 4 MEMORY_FILE // 0 magic put CHANNELS long MEMORY_FILE // 4 channel_count put 2 long MEMORY_FILE // 8 interleave put FREQUENCY long MEMORY_FILE // c sample_rate put 0xffffffff long MEMORY_FILE // 10 loop_start xmath loop_end "((SIZE * 14)/8)/CHANNELS" put loop_end long MEMORY_FILE // 14 loop_end put 12 long MEMORY_FILE // 18 codec xmath start_off "genhsz + (CHANNELS * 32)" put start_off long MEMORY_FILE // 1c start_offset xmath header_size "genhsz + (CHANNELS * 32)" put header_size long MEMORY_FILE // 20 header_size put genhsz long MEMORY_FILE // 24 coef[0] xmath TMP "genhsz + 32" put TMP long MEMORY_FILE // 28 coef[1] put 1 long MEMORY_FILE // 2c dsp_interleave_type put 0 long MEMORY_FILE // 30 coef_type put genhsz long MEMORY_FILE // 34 coef_splitted[0] put TMP long MEMORY_FILE // 38 coef_splitted[1] get z asize MEMORY_FILE for z = z < genhsz put 0 byte MEMORY_FILE next z math COEFF_PTR = 0 for z = 0 < CHANNELS for x = 0 < 16 getvarchr TMP COEFF COEFF_PTR short math COEFF_PTR + 2 put TMP short MEMORY_FILE next x #math COEFF_PTR + 0xe # 0x20 + 0xe = 0x2e next z get TMP asize MEMORY_FILE log NAME 0 TMP MEMORY_FILE append log NAME OFFSET SIZE 1 append endian CURRENT_ENDIAN endfunction