diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b0483e..17ea320 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,7 +38,7 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) set(RCFLAGS "") set(CFLAGS_LANG_C "-ansi") - set(CFLAGS_LANG_CPP "-fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fno-threadsafe-statics") + set(CFLAGS_LANG_CPP "-fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fno-threadsafe-statics -D__STDC_LIMIT_MACROS") if(64BIT) set(CFLAGS "-m64 ${CFLAGS}") @@ -70,7 +70,7 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) set(LDFLAGS_SPEED "${LDFLAGS} -s -fwhole-program -flto -fno-stack-protector") else() # Debug - set(CFLAGS_DEBUG "${CFLAGS} -O0 -g3 -fstack-protector-all") + set(CFLAGS_DEBUG "${CFLAGS} -O0 -g3 -fstack-protector-all -D_FORTIFY_SOURCE=2 -DDEBUG") set(LDFLAGS_DEBUG "${LDFLAGS} -fstack-protector-all") set(CFLAGS_SIZE "${CFLAGS_DEBUG}") set(LDFLAGS_SIZE "${LDFLAGS_DEBUG}") diff --git a/Libraries/FileHandler/Image.cpp b/Libraries/FileHandler/Image.cpp index 7c04adf..408dc4c 100644 --- a/Libraries/FileHandler/Image.cpp +++ b/Libraries/FileHandler/Image.cpp @@ -17,10 +17,10 @@ */ #include "FileHandler.hpp" -#include //Used for libpng #include #include #include +#include //Used for libpng #include "bmp/read_bmp.h" namespace File { diff --git a/Libraries/FileHandler/tga/elf.dat b/Libraries/FileHandler/tga/elf.dat new file mode 100644 index 0000000..fcf6fa7 Binary files /dev/null and b/Libraries/FileHandler/tga/elf.dat differ diff --git a/Libraries/FileHandler/tga/elf.txt b/Libraries/FileHandler/tga/elf.txt new file mode 100644 index 0000000..a193ff0 --- /dev/null +++ b/Libraries/FileHandler/tga/elf.txt @@ -0,0 +1,93 @@ +* Elf32_Word sh_name: +* Elf32_Word sh_type: +* Elf32_Word sh_flags: +* Elf32_Addr sh_addr: +* Elf32_Off sh_offset: (?? ?? ?? ??) +* Elf32_Word sh_size: (?? ?? ?? ??) +* Elf32_Word sh_link: +* Elf32_Word sh_info: +* Elf32_Word sh_addralign: 1 (01 00 00 00) +* Elf32_Word sh_entsize: + +ELF Header: +* e_ident: + * Elf32_Word EI_MAG0: (7F 45 4C 46) + * unsigned char EI_CLASS: ELFCLASS32 (01) + * unsigned char EI_DATA: ELFDATA2LSB (01) + * unsigned char EI_VERSION: EV_CURRENT (01) + * unsigned char EI_PAD[9]: (00 00 00 00 00 00 00 00 00) +* Elf32_Half e_type: ET_REL (01 00) +* Elf32_Half e_machine: EM_NONE (00 00) +* Elf32_Word e_version: EV_CURRENT (01 00 00 00) +* Elf32_Addr e_entry: 0 (00 00 00 00) +* Elf32_Off e_phoff: 0 (00 00 00 00) +* Elf32_Off e_shoff: 64 (40 00 00 00) +* Elf32_Word e_flags: 0x00000001 (01 00 00 00) +* Elf32_Half e_ehsize: 52 (34 00) +* Elf32_Half e_phentsize: 0 (00 00) +* Elf32_Half e_phnum: 0 (00 00) +* Elf32_Half e_shentsize: 40 (28 00) +* Elf32_Half e_shnum: 6 (06 00) +* Elf32_Half e_shstrndx: 2 (02 00) +* unsigned char padding[12] = (00 00 00 00 00 00 00 00 00 00 00 00) + +Section headers +0 (""): All 0s +1 (".text"): +* Elf32_Word sh_name: 1 (01 00 00 00) +* Elf32_Word sh_type: SHT_PROGBITS (01 00 00 00) +* Elf32_Word sh_flags: SHF_ALLOC | SHF_EXECINSTR (06 00 00 00) +* Elf32_Addr sh_addr: 0x00000010 (10 00 00 00) +* Elf32_Off sh_offset: (?? ?? ?? ??) +* Elf32_Word sh_size: (?? ?? ?? ??) +* Elf32_Word sh_link: 0 (00 00 00 00) +* Elf32_Word sh_info: 0 (00 00 00 00) +* Elf32_Word sh_addralign: 1 (01 00 00 00) +* Elf32_Word sh_entsize: 0 (00 00 00 00) +2 (".shstrtab"): +* Elf32_Word sh_name: 7 (07 00 00 00) +* Elf32_Word sh_type: SHT_STRTAB (03 00 00 00) +* Elf32_Word sh_flags: 0 (00 00 00 00) +* Elf32_Addr sh_addr: 0 (00 00 00 00) +* Elf32_Off sh_offset: (?? ?? ?? ??) +* Elf32_Word sh_size: (?? ?? ?? ??) +* Elf32_Word sh_link: 0 (00 00 00 00) +* Elf32_Word sh_info: 0 (00 00 00 00) +* Elf32_Word sh_addralign: 1 (01 00 00 00) +* Elf32_Word sh_entsize: 0 (00 00 00 00) +3 (".symtab"): +* Elf32_Word sh_name: 17 (11 00 00 00) +* Elf32_Word sh_type: SHT_SYMTAB (02 00 00 00) +* Elf32_Word sh_flags: 0 (00 00 00 00) +* Elf32_Addr sh_addr: 0 (00 00 00 00) +* Elf32_Off sh_offset: (?? ?? ?? ??) +* Elf32_Word sh_size: (?? ?? ?? ??) +* Elf32_Word sh_link: 4 (04 00 00 00) +* Elf32_Word sh_info: 5 (05 00 00 00) +* Elf32_Word sh_addralign: 1 (01 00 00 00) +* Elf32_Word sh_entsize: 16 (10 00 00 00) +4 (".strtab"): +* Elf32_Word sh_name: 25 (19 00 00 00) +* Elf32_Word sh_type: SHT_STRTAB (03 00 00 00) +* Elf32_Word sh_flags: 0 (00 00 00 00) +* Elf32_Addr sh_addr: 0 (00 00 00 00) +* Elf32_Off sh_offset: (?? ?? ?? ??) +* Elf32_Word sh_size: (?? ?? ?? ??) +* Elf32_Word sh_link: 0 (00 00 00 00) +* Elf32_Word sh_info: 0 (00 00 00 00) +* Elf32_Word sh_addralign: 1 (01 00 00 00) +* Elf32_Word sh_entsize: 0 (00 00 00 00) +5 (".rel.text"): +* Elf32_Word sh_name: 33 (21 00 00 00) +* Elf32_Word sh_type: SHT_REL (09 00 00 00) +* Elf32_Word sh_flags: 0 (00 00 00 00) +* Elf32_Addr sh_addr: 0 (00 00 00 00) +* Elf32_Off sh_offset: (?? ?? ?? ??) +* Elf32_Word sh_size: (?? ?? ?? ??) +* Elf32_Word sh_link: 3 (03 00 00 00) +* Elf32_Word sh_info: 1 (01 00 00 00) +* Elf32_Word sh_addralign: 1 (01 00 00 00) +* Elf32_Word sh_entsize: 8 (08 00 00 00) + +Symbols: +0: All 0s \ No newline at end of file diff --git a/Libraries/FileHandler/tga/hitutils.h b/Libraries/FileHandler/tga/hitutils.h new file mode 100644 index 0000000..04100ec --- /dev/null +++ b/Libraries/FileHandler/tga/hitutils.h @@ -0,0 +1,461 @@ +/* + hitutils - The Sims HIT (dis)assembler and linker + hitutils.h - Copyright (c) 2012 Niotso Project + Author(s): Fatbag + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef min + #define min(x,y) ((x) < (y) ? (x) : (y)) +#endif +#ifndef max + #define max(x,y) ((x) > (y) ? (x) : (y)) +#endif + +#ifndef read_int32 + #define read_uint32(x) (unsigned)(((x)[0]<<(8*0)) | ((x)[1]<<(8*1)) | ((x)[2]<<(8*2)) | ((x)[3]<<(8*3))) + #define read_uint16(x) (unsigned)(((x)[0]<<(8*0)) | ((x)[1]<<(8*1))) +#endif + +#ifndef write_int32 + #define write_uint32(dest, src) do {\ + (dest)[0] = ((src)&0x000000FF)>>(8*0); \ + (dest)[1] = ((src)&0x0000FF00)>>(8*1); \ + (dest)[2] = ((src)&0x00FF0000)>>(8*2); \ + (dest)[3] = ((src)&0xFF000000)>>(8*3); \ + } while(0) + #define write_uint16(dest, src) do {\ + (dest)[0] = ((src)&0x00FF)>>(8*0); \ + (dest)[1] = ((src)&0xFF00)>>(8*1); \ + } while(0) +#endif + +extern char *strdup (const char *__s) + __THROW __attribute_malloc__ __nonnull ((1)); + +static void Shutdown(); + +static void Shutdown_M(const char * Message, ...){ + va_list args; + va_start(args, Message); + vfprintf(stderr, Message, args); + va_end(args); + + Shutdown(); + exit(EXIT_FAILURE); +} + +enum { + VERSION_TS1 = 1, VERSION_TSO +}; + +#define OPERAND_BYTES(x) (x) +#define OPERAND(x, y) ((y)<<((x)*4+4)) +#define UNIMPLEMENTED ((uint32_t)~0) + +enum operand_t { + o_byte = 1, + o_dword, + o_address, + o_variable, + o_jump +}; + +typedef struct { + const char * Name; + uint32_t Operands; +} instruction_t; + +typedef struct { + const char * Name; + uint32_t Value; +} variable_t; + +typedef struct { + uint8_t * Data; + size_t Size; +} ByteReaderContext; + +static const uint8_t HITHeader[] = {'H','I','T','!',0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,'T','R','A','X'}; + +#define InstructionCount 96 +static const instruction_t Instructions[] = { + {"note", UNIMPLEMENTED}, + {"note_on", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"note_off", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"loadb", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_byte)}, + {"loadl", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, + {"set", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"call", OPERAND_BYTES(4) | OPERAND(0, o_address)}, + {"return", OPERAND_BYTES(0)}, + {"wait", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"callentrypoint", UNIMPLEMENTED}, + {"wait_samp", OPERAND_BYTES(0)}, + {"end", OPERAND_BYTES(0)}, + {"jump", OPERAND_BYTES(1) | OPERAND(0, o_jump)}, + {"test", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"nop", OPERAND_BYTES(0)}, + {"add", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"sub", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"div", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"mul", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"cmp", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"less", UNIMPLEMENTED}, + {"greater", UNIMPLEMENTED}, + {"not", UNIMPLEMENTED}, + {"rand", OPERAND_BYTES(3) | OPERAND(0, o_variable) | OPERAND(1, o_variable) | OPERAND(2, o_variable)}, + {"abs", UNIMPLEMENTED}, + {"limit", UNIMPLEMENTED}, + {"error", UNIMPLEMENTED}, + {"assert", UNIMPLEMENTED}, + {"add_to_group", UNIMPLEMENTED}, + {"remove_from_group", UNIMPLEMENTED}, + {"get_var", UNIMPLEMENTED}, + {"loop", OPERAND_BYTES(0)}, + {"set_loop", OPERAND_BYTES(0)}, + {"callback", UNIMPLEMENTED}, + {"smart_add", UNIMPLEMENTED}, + {"smart_remove", UNIMPLEMENTED}, + {"smart_removeall", UNIMPLEMENTED}, + {"smart_setcrit", UNIMPLEMENTED}, + {"smart_choose", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"and", UNIMPLEMENTED}, + {"nand", UNIMPLEMENTED}, + {"or", UNIMPLEMENTED}, + {"nor", UNIMPLEMENTED}, + {"xor", UNIMPLEMENTED}, + {"max", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, + {"min", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, + {"inc", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"dec", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"printreg", UNIMPLEMENTED}, + {"play_trk", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"kill_trk", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"push", UNIMPLEMENTED}, + {"push_mask", UNIMPLEMENTED}, + {"push_vars", UNIMPLEMENTED}, + {"call_mask", UNIMPLEMENTED}, + {"call_push", UNIMPLEMENTED}, + {"pop", UNIMPLEMENTED}, + {"test1", OPERAND_BYTES(0)}, + {"test2", OPERAND_BYTES(0)}, + {"test3", OPERAND_BYTES(0)}, + {"test4", OPERAND_BYTES(0)}, + {"ifeq", OPERAND_BYTES(4) | OPERAND(0, o_address)}, + {"ifne", OPERAND_BYTES(4) | OPERAND(0, o_address)}, + {"ifgt", OPERAND_BYTES(4) | OPERAND(0, o_address)}, + {"iflt", OPERAND_BYTES(4) | OPERAND(0, o_address)}, + {"ifge", OPERAND_BYTES(4) | OPERAND(0, o_address)}, + {"ifle", OPERAND_BYTES(4) | OPERAND(0, o_address)}, + {"smart_setlist", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"seqgroup_kill", OPERAND_BYTES(1) | OPERAND(0, o_byte)}, + {"seqgroup_wait", UNIMPLEMENTED}, + {"seqgroup_return", OPERAND_BYTES(1) | OPERAND(0, o_byte)}, + {"getsrcdatafield", OPERAND_BYTES(3) | OPERAND(0, o_variable) | OPERAND(1, o_variable) | OPERAND(2, o_variable)}, + {"seqgroup_trkid", OPERAND_BYTES(2) | OPERAND(0, o_byte) | OPERAND(1, o_byte)}, + {"setll", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"setlt", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"settl", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"waiteq", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"waitne", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"waitgt", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"waitlt", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"waitge", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"waitle", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"duck", OPERAND_BYTES(0)}, + {"unduck", OPERAND_BYTES(0)}, + {"testx", UNIMPLEMENTED}, + {"setlg", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, + {"setgl", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, + {"throw", UNIMPLEMENTED}, + {"setsrcdatafield", OPERAND_BYTES(3) | OPERAND(0, o_variable) | OPERAND(1, o_variable) | OPERAND(2, o_variable)}, + {"stop_trk", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"setchanreg", UNIMPLEMENTED}, + {"play_note", UNIMPLEMENTED}, + {"stop_note", UNIMPLEMENTED}, + {"kill_note", UNIMPLEMENTED}, + {"smart_index", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"note_on_loop", OPERAND_BYTES(1) | OPERAND(0, o_variable)} +}; + +#define TSOVariableCount 82 +static const variable_t TSOVariables[] = { + {"arg0", 0x00}, + {"arg1", 0x01}, + {"arg2", 0x02}, + {"arg3", 0x03}, + {"arg4", 0x04}, + {"v1", 0x05}, + {"v2", 0x06}, + {"v3", 0x07}, + {"v4", 0x08}, + {"v5", 0x09}, + {"v6", 0x0A}, + {"v7", 0x0B}, + {"v8", 0x0C}, + {"h1", 0x0D}, + {"h2", 0x0E}, + {"h3", 0x0F}, + {"argstype", 0x10}, + {"trackdatasource", 0x11}, + {"patch", 0x12}, + {"priority", 0x13}, + {"vol", 0x14}, + {"extvol", 0x15}, + {"pan", 0x16}, + {"pitch", 0x17}, + {"paused", 0x18}, + {"fxtype", 0x19}, + {"fxlevel", 0x1a}, + {"duckpri", 0x1b}, + {"Is3d", 0x1c}, + {"IsHeadRelative", 0x1d}, + {"MinDistance", 0x1e}, + {"MaxDistance", 0x1f}, + {"X", 0x20}, + {"Y", 0x21}, + {"Z", 0x22}, + {"attack", 0x23}, + {"decay", 0x24}, + {"IsStreamed", 0x25}, + {"bufsizemult", 0x26}, + {"fade_dest", 0x27}, + {"fade_var", 0x28}, + {"fade_speed", 0x29}, + {"fade_on", 0x2a}, + {"Preload", 0x2b}, + {"isplaying", 0x2c}, + {"whattodowithupdate", 0x2d}, + {"tempo", 0x2e}, + {"target", 0x2f}, + {"ctrlgroup", 0x30}, + {"interrupt", 0x31}, + {"ispositioned", 0x32}, + {"AppObjectId", 0x34}, + {"callbackarg", 0x35}, + {"pitchrandmin", 0x36}, + {"pitchrandmax", 0x37}, + {"spl", 0x38}, + {"sem", 0x39}, + {"starttrackid", 0x3a}, + {"endtrackid", 0x3b}, + {"startdelay", 0x3c}, + {"fadeinspeed", 0x3d}, + {"fadeoutspeed", 0x3e}, + {"hitlist", 0x3f}, + {"SimSpeed", 0x64}, + {"test_g1", 0x65}, + {"test_g2", 0x66}, + {"test_g3", 0x67}, + {"test_g4", 0x68}, + {"test_g5", 0x69}, + {"test_g6", 0x6a}, + {"test_g7", 0x6b}, + {"test_g8", 0x6c}, + {"test_g9", 0x6d}, + {"main_songnum", 0x6e}, + {"main_musichitlistid", 0x6f}, + {"campfire_nexttrack", 0x70}, + {"campfire_busy", 0x71}, + {"main_duckpri", 0x7b}, + {"main_vol", 0x7c}, + {"main_fxtype", 0x7d}, + {"main_fxlevel", 0x7e}, + {"main_pause", 0x7f}, +}; + +#define TS1VariableCount 87 +static const variable_t TS1Variables[] = { + {"arg0", 0x00}, + {"arg1", 0x01}, + {"arg2", 0x02}, + {"arg3", 0x03}, + {"arg4", 0x04}, + {"v1", 0x05}, + {"v2", 0x06}, + {"v3", 0x07}, + {"v4", 0x08}, + {"v5", 0x09}, + {"v6", 0x0a}, + {"v7", 0x0b}, + {"v8", 0x0c}, + {"h1", 0x0d}, + {"h2", 0x0e}, + {"h3", 0x0f}, + {"priority", 0x11}, + {"vol", 0x12}, + {"extvol", 0x13}, + {"pan", 0x14}, + {"pitch", 0x15}, + {"paused", 0x16}, + {"fxtype", 0x17}, + {"fxlevel", 0x18}, + {"duckpri", 0x19}, + {"Is3d", 0x1a}, + {"IsHeadRelative", 0x1b}, + {"MinDistance", 0x1c}, + {"MaxDistance", 0x1d}, + {"X", 0x1e}, + {"Y", 0x1f}, + {"Z", 0x20}, + {"filter_type", 0x21}, + {"filter_cutoff", 0x22}, + {"filter_level", 0x23}, + {"attack", 0x24}, + {"decay", 0x25}, + {"IsStreamed", 0x26}, + {"BufSizeMult", 0x27}, + {"fade_dest", 0x28}, + {"fade_var", 0x29}, + {"fade_speed", 0x2a}, + {"Preload", 0x2b}, + {"IsLooped", 0x2c}, + {"fade_on", 0x2d}, + {"isplaying", 0x2e}, + {"source", 0x2f}, + {"patch", 0x32}, + {"WhatToDoWithUpdate", 0x33}, + {"tempo", 0x34}, + {"target", 0x35}, + {"mutegroup", 0x36}, + {"interrupt", 0x37}, + {"IsPositioned", 0x38}, + {"Spl", 0x39}, + {"MultipleInstances", 0x3a}, + {"AssociatedTrack1", 0x3b}, + {"AssociatedTrack2", 0x3c}, + {"AssociatedTrack3", 0x3d}, + {"AssociatedTrack4", 0x3e}, + {"AssociatedTrack5", 0x3f}, + {"AssociatedTrack6", 0x40}, + {"AssociatedTrack7", 0x41}, + {"AssociatedTrack8", 0x42}, + {"SimSpeed", 0x64}, + {"test_g1", 0x65}, + {"test_g2", 0x66}, + {"test_g3", 0x67}, + {"test_g4", 0x68}, + {"test_g5", 0x69}, + {"test_g6", 0x6a}, + {"test_g7", 0x6b}, + {"test_g8", 0x6c}, + {"test_g9", 0x6d}, + {"main_songnum", 0x6e}, + {"main_musichitlistid", 0x6f}, + {"campfire_nexttrack", 0x70}, + {"campfire_busy", 0x71}, + {"main_duckpri", 0x7b}, + {"main_vol", 0x7c}, + {"main_fxtype", 0x7d}, + {"main_fxlevel", 0x7e}, + {"main_pause", 0x7f}, +}; + +#define ConstantCount 72 +static const variable_t Constants[] = { + {"duckpri_always", 0x0}, + {"duckpri_low", 0xa}, + {"duckpri_normal", 0x14}, + {"duckpri_high", 0x1e}, + {"duckpri_higher", 0x28}, + {"duckpri_evenhigher", 0x32}, + {"duckpri_never", 0x64}, + {"spl_infinite", 0x0}, + {"spl_loud", 0xa}, + {"spl_normal", 0x14}, + {"spl_quiet", 0x64}, + {"Instance", 0x0}, + {"Gender", 0x1}, + {"GroupMusic", 0x1}, + {"GroupDialogMain", 0x2}, + {"GroupDialogOverlay", 0x3}, + {"PchDishwasherClose", 0x32}, + {"PchDishwasherLoad", 0x33}, + {"PchDishwasherLoad2", 0x34}, + {"PchDishwasherOpen", 0x35}, + {"PchDishwasherTurnDial", 0x39}, + {"PchDishwasherTurnDial2", 0x3a}, + {"TrkRadioStationCountry", 0x104}, + {"TrkRadioStationBossaNova", 0x10e}, + {"TrkRadioStationClassical", 0x10d}, + {"TrkRadioStationRock", 0x118}, + {"kSndobPlay", 1}, + {"kSndobStop", 2}, + {"kSndobKill", 3}, + {"kSndobUpdate", 4}, + {"kSndobSetVolume", 5}, + {"kSndobSetPitch", 6}, + {"kSndobSetPan", 7}, + {"kSndobSetPosition", 8}, + {"kSndobSetFxType", 9}, + {"kSndobSetFxLevel", 10}, + {"kSndobPause", 11}, + {"kSndobUnpause", 12}, + {"kSndobLoad", 13}, + {"kSndobUnload", 14}, + {"kSndobCache", 15}, + {"kSndobUncache", 16}, + {"kSndobCancelNote", 19}, + {"kPlayPiano", 43}, + {"kSetMusicMode", 36}, + {"kLive", 0}, + {"kBuy", 1}, + {"kBuild", 2}, + {"kHood", 3}, + {"kFrontEnd", 4}, + {"kGroupSfx", 1}, + {"kGroupMusic", 2}, + {"kGroupVox", 3}, + {"kAction", 1000}, + {"kComedy", 1001}, + {"kRomance", 1002}, + {"kNews", 1003}, + {"kCountry", 1004}, + {"kRock", 1005}, + {"kJazz", 1006}, + {"kClassical", 1007}, + {"kArgsNormal", 0}, + {"kArgsVolPan", 1}, + {"kArgsIdVolPan", 2}, + {"kArgsXYZ", 3}, + {"kKillAll", 20}, + {"kPause", 21}, + {"kUnpause", 22}, + {"kKillInstance", 23}, + {"kTurnOnTv", 30}, + {"kTurnOffTv", 31}, + {"kUpdateSourceVolPan", 32}, +}; + +static const uint8_t ObjectHeader[] = { + 0x7F, 0x45, 0x4C, 0x46, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, + 0x06, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00 +}; \ No newline at end of file diff --git a/Libraries/FileHandler/tga/read_tga.c b/Libraries/FileHandler/tga/read_tga.c index 01fb27d..3087033 100644 --- a/Libraries/FileHandler/tga/read_tga.c +++ b/Libraries/FileHandler/tga/read_tga.c @@ -14,4 +14,37 @@ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ \ No newline at end of file +*/ + +#include +#include +#include +#include "read_tga.h" + +#ifndef read_uint32 + #define read_uint32(x) (unsigned)(((x)[0]<<(8*0)) | ((x)[1]<<(8*1)) | ((x)[2]<<(8*2)) | ((x)[3]<<(8*3))) + #define read_uint16(x) (unsigned)(((x)[0]<<(8*0)) | ((x)[1]<<(8*1))) +#endif + +int tga_read_header(tgaheader_t * TGAHeader, const uint8_t * Buffer, size_t FileSize){ + unsigned padding; + if(FileSize < ?) return 0; + TGAHeader->IDLength = read_uint8(Buffer); + TGAHeader->ColorMapType = read_uint8(Buffer+1); + TGAHeader->ImageType = read_uint8(Buffer+2); + + /* Color map */ + TGAHeader->FirstEntry = read_uint16(Buffer+3); + TGAHeader->ColorMapLength = read_uint16(Buffer+5); + TGAHeader->EntrySize = read_uint8(Buffer+7); + + /* Image */ + TGAHeader->XOrigin = read_uint16(Buffer+8); + TGAHeader->YOrigin = read_uint16(Buffer+10); + TGAHeader->Width = read_uint16(Buffer+12); + TGAHeader->Height = read_uint16(Buffer+14); + TGAHeader->ImageDepth = read_uint8(Buffer+16); + TGAHeader->Descriptor = read_uint8(Buffer+17); + + return 1; +} diff --git a/Libraries/FileHandler/tga/read_tga.h b/Libraries/FileHandler/tga/read_tga.h new file mode 100644 index 0000000..168d13e --- /dev/null +++ b/Libraries/FileHandler/tga/read_tga.h @@ -0,0 +1,17 @@ +/* + FileHandler - General-purpose file handling library for Niotso + read_tga.h - Copyright (c) 2012 Niotso Project + Author(s): Fatbag + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ \ No newline at end of file diff --git a/Libraries/FileHandler/tga/tsov2.txt b/Libraries/FileHandler/tga/tsov2.txt new file mode 100644 index 0000000..3261a93 --- /dev/null +++ b/Libraries/FileHandler/tga/tsov2.txt @@ -0,0 +1,10644 @@ +BASEID_TRACKDATA 15000 + +; +; generated by MakeTrax. +; + +; useful symbols: +; kSndobPlay = 1 +; tkd_Generic 1 +; tkd_GenericLooped 2 +; tkd_GenericHitList 3 + +INCLUDE defaultsyms.txt +INCLUDE SimsGlobals.txt + +LIST [Options] Version=1 +LIST [Options] LoadPriority=2 + +;LIST [EventMappingEquate] kSndobPlay=1 +; --- end of standard intro text --- + +SYMBOLFILE tsov2.hsm +INIFILE tsov2.ini + +# User data include +INCLUDE tsov2_userdata.txt + +BINARY +[ +Vox_huggee_good_tso + loadl v1 #16962 + loadl v2 #16963 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_tradee_reject_loop + loadl v1 #17238 + loadl v2 #17239 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_tease_sit + loadl v1 #17218 + loadl v2 #17219 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_silly_throwup + loadl v1 #17168 + loadl v2 #17169 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gametimer_break + loadl v1 #17391 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +jobobject_light_flash + loadl v1 #17427 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +tutorial_lpa_sfx + loadl v1 #15014 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_bunkbed_top_make + loadl v1 #15127 + loadl v2 #15128 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_insultee_tso + loadl v1 #16994 + loadl v2 #16995 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_boo_sit + loadl v1 #15119 + loadl v2 #15120 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobmech_success_vox + loadl v1 #16449 + loadl v2 #16450 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_handshakee + loadl v1 #16946 + loadl v2 #16947 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dance_swingee + loadl v1 #16733 + loadl v2 #16734 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_booer + loadl v1 #16623 + loadl v2 #16624 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +ui_call_rec_next + loadl v1 #17536 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Pinata_swingha_vox + loadl v1 #16478 + loadl v2 #16479 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_kisser_sweet + loadl v1 #17014 + loadl v2 #17015 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_game_repair + loadl v1 #15056 + loadl v2 #15057 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_afraida_loopa + loadl v1 #16518 + loadl v2 #16519 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +game_piece_put + loadl v1 #17381 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_insult_kneel + loadl v1 #16988 + loadl v2 #16989 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_afraida_loopb + loadl v1 #16520 + loadl v2 #16521 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobmech_fuse_slap + loadl v1 #17422 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +flower_throw_down + loadl v1 #17372 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_sexy_mgrowl + loadl v1 #17150 + loadl v2 #17151 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_afraida_loopc + loadl v1 #16522 + loadl v2 #16523 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Pinata_swingmc_vox + loadl v1 #16488 + loadl v2 #16489 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_talk_askint + loadl v1 #17212 + loadl v2 #17213 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vpoker_lpa_vox + loadl v1 #15237 + loadl v2 #15238 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_handshaker + loadl v1 #16948 + loadl v2 #16949 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dance_swinger + loadl v1 #16735 + loadl v2 #16736 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_teleport_swapskin + loadl v1 #15235 + loadl v2 #15236 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +pizza_appear_close + loadl v1 #17462 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +game_draw_place + loadl v1 #17378 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +chalkb_erasec_vox + loadl v1 #16399 + loadl v2 #16400 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +nails_file_a + loadl v1 #15280 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +nails_file_b + loadl v1 #15281 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +nails_file_c + loadl v1 #15282 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +joblogic_switch + loadl v1 #17417 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pizza_dough_throw + loadl v1 #17467 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_breaker_friendship + loadl v1 #16647 + loadl v2 #16648 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_tickler_extreme + loadl v1 #17230 + loadl v2 #17231 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Death_guts_putback + loadl v1 #17352 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +repair_piano_start + loadl v1 #17503 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_armkissee + loadl v1 #16557 + loadl v2 #16558 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_foot_stomp_missera + loadl v1 #16870 + loadl v2 #16871 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_eyepoker_tso + loadl v1 #16815 + loadl v2 #16816 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_foot_stomp_misserb + loadl v1 #16872 + loadl v2 #16873 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_cheerupee_pos + loadl v1 #16653 + loadl v2 #16654 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_flyhuggee_neg_tso + loadl v1 #16856 + loadl v2 #16857 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +trashcompact_open + loadl v1 #15275 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +map_read_unroll + loadl v1 #17441 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +map_read_reada + loadl v1 #17437 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +jobbody_success_vox + loadl v1 #16433 + loadl v2 #16434 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +map_read_readb + loadl v1 #17438 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_gmoneyer_reject + loadl v1 #16910 + loadl v2 #16911 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +map_read_readc + loadl v1 #17439 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_armkisser + loadl v1 #16559 + loadl v2 #16560 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +cardtable_dealer_spin + loadl v1 #17310 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_bunkbed_bottom_make + loadl v1 #15123 + loadl v2 #15124 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_typew_stop + loadl v1 #17506 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_angryc_loopa + loadl v1 #16551 + loadl v2 #16552 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gamecomp_hit_hard + loadl v1 #17386 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_angryc_loopb + loadl v1 #16553 + loadl v2 #16554 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_angryc_loopc + loadl v1 #16555 + loadl v2 #16556 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +spades_deal_lp + loadl v1 #15010 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vpoker_lpc_sfx + loadl v1 #15020 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pizza_oven_break + loadl v1 #17468 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_proposer_no + loadl v1 #17100 + loadl v2 #17101 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_visitor_kickee + loadl v1 #17258 + loadl v2 #17259 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_pout + loadl v1 #17088 + loadl v2 #17089 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_trader_rejecta_start + loadl v1 #17252 + loadl v2 #17253 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_breakee_friendship + loadl v1 #16645 + loadl v2 #16646 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +elevator_open + loadl v1 #15024 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +smokears + loadl v1 #17519 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_flirt_stand + loadl v1 #16854 + loadl v2 #16855 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_fight_sissyer_pushee + loadl v1 #16823 + loadl v2 #16824 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +door_turnstile_open + loadl v1 #17364 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +blackjack_stay_vox + loadl v1 #16395 + loadl v2 #16396 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Death_mhead_putback + loadl v1 #17354 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +compact_close + loadl v1 #17332 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +ctrunk_wlocker_close + loadl v1 #17342 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pizza_prep_dough + loadl v1 #17475 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Latin_feet + loadl v1 #17433 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_game_vote_ballot + loadl v1 #15155 + loadl v2 #15156 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_visitor_kicker + loadl v1 #17260 + loadl v2 #17261 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_giftgetter + loadl v1 #16898 + loadl v2 #16899 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_chess_start + loadl v1 #15181 + loadl v2 #15182 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_hatrack_consider + loadl v1 #15167 + loadl v2 #15168 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_eeeew + loadl v1 #16803 + loadl v2 #16804 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_fight_sissyer_pusher + loadl v1 #16825 + loadl v2 #16826 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_gnome_lp + loadl v1 #17496 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +chalkb_erasea + loadl v1 #17314 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +chalkb_eraseb + loadl v1 #17315 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +chalkb_erasec + loadl v1 #17316 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_drunk + loadl v1 #16801 + loadl v2 #16802 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_erased + loadl v1 #17317 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_dance_td + loadl v1 #16741 + loadl v2 #16742 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gem_pickaxe_tired_vox + loadl v1 #15077 + loadl v2 #15078 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gametimer_button + loadl v1 #17392 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_bawl + loadl v1 #16603 + loadl v2 #16604 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Door_stall_open + loadl v1 #15066 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pizza_appear_raise + loadl v1 #17464 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_dancee_slow_reject + loadl v1 #16745 + loadl v2 #16746 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_vogue + loadl v1 #17262 + loadl v2 #17263 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +spades_score_start_vox + loadl v1 #15111 + loadl v2 #15112 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +foodtray_give_voxnffod + loadl v1 #15309 + loadl v2 #15309 + loadl v3 #15309 + call #generic_fm_smartlists + end +] + +BINARY +[ +ctrunk_scifi_change + loadl v1 #17341 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_game_vote_start + loadl v1 #15159 + loadl v2 #15160 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +coin_toss + loadl v1 #17331 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +cannonball_pickup + loadl v1 #17303 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +tipjar_money_getf + loadl v1 #17524 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_tickler_wetself + loadl v1 #17232 + loadl v2 #17233 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_comp_start + loadl v1 #15183 + loadl v2 #15184 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +slotc_win + loadl v1 #17518 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +fart_sfx + loadl v1 #15256 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_proposee_yes + loadl v1 #17098 + loadl v2 #17099 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +mic_adjust + loadl v1 #17442 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_monologue + loadl v1 #17064 + loadl v2 #17065 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobmech_fuse_bang + loadl v1 #17421 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +jobmech_ponderc_vox + loadl v1 #16447 + loadl v2 #16448 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +sting_death + loadl v1 #15267 + call #userdata_sting_death + end +] + +BINARY +[ +foodtray_order_voxnffod + loadl v1 #15310 + loadl v2 #15310 + loadl v3 #15310 + call #generic_fm_smartlists + end +] + +BINARY +[ +tmarket_phone_putf + loadl v1 #17531 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +tipjar_money_gett + loadl v1 #17525 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_sit_shakefist + loadl v1 #17188 + loadl v2 #17189 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobbody_push_lever + loadl v1 #17411 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_insulter_tso + loadl v1 #16996 + loadl v2 #16997 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_roomater_kickout + loadl v1 #17118 + loadl v2 #17119 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tmarket_phone_puts + loadl v1 #17532 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +gamecomp_hit_soft + loadl v1 #17388 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_gymnastic + loadl v1 #16940 + loadl v2 #16941 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +blackjack_cards_shuffle + loadl v1 #17285 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_sword_swallow + loadl v1 #17208 + loadl v2 #17209 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Ctrunk_mlocker_open + loadl v1 #17339 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +roulette_spin_stop + loadl v1 #15262 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +typewriter_loop + loadl v1 #17533 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_yawn_stretch + loadl v1 #17272 + loadl v2 #17273 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_flyhugger_start_tso + loadl v1 #16864 + loadl v2 #16865 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_easel_start + loadl v1 #17494 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +ui_letter_send + loadl v1 #17540 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_boredc_loopa + loadl v1 #16637 + loadl v2 #16638 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gamecomp_target_hit + loadl v1 #17390 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_boredc_loopb + loadl v1 #16639 + loadl v2 #16640 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_boredc_loopc + loadl v1 #16641 + loadl v2 #16642 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_chin_ticklee_bat + loadl v1 #15131 + loadl v2 #15132 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Pinata_start_vox + loadl v1 #16474 + loadl v2 #16475 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +foodtray_greet_voxnffod + loadl v1 #15311 + loadl v2 #15311 + loadl v3 #15311 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_cheeruper_pos + loadl v1 #16657 + loadl v2 #16658 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_piledrivera + loadl v1 #17084 + loadl v2 #17085 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_piledriverb + loadl v1 #17086 + loadl v2 #17087 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_backrubber_refused + loadl v1 #16599 + loadl v2 #16600 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gem_pickaxe_lpc_vox + loadl v1 #15075 + loadl v2 #15076 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +door_vault_close + loadl v1 #17365 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +bunkbed_bottom_getout + loadl v1 #17291 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pinata_swing_hita + loadl v1 #17456 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +chalkb_write_final + loadl v1 #17319 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pinata_swing_hitb + loadl v1 #17457 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pinata_swing_hitc + loadl v1 #17458 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +spades_deal_idlea_vox + loadl v1 #15099 + loadl v2 #15100 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_game_draw_start + loadl v1 #15151 + loadl v2 #15152 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_groovyb_loopa + loadl v1 #16920 + loadl v2 #16921 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_groovyb_loopb + loadl v1 #16922 + loadl v2 #16923 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_groovyb_loopc + loadl v1 #16924 + loadl v2 #16925 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_brow_wipe + loadl v1 #16649 + loadl v2 #16650 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +ui_call_rec_first + loadl v1 #17535 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +chalkb_writef_vox + loadl v1 #16421 + loadl v2 #16422 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +pinata_coins_grab + loadl v1 #17454 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +dingbat_kiss + loadl v1 #17362 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +blackjack_cards_deal + loadl v1 #17282 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_repair_mbull_start + loadl v1 #15205 + loadl v2 #15206 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_heartee_pullout + loadl v1 #16954 + loadl v2 #16955 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_food_give_seated + loadl v1 #15145 + loadl v2 #15146 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_talk_normal + loadl v1 #15229 + loadl v2 #15230 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_sit_bored_sigh + loadl v1 #17176 + loadl v2 #17177 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_teleport_insideout + loadl v1 #15233 + loadl v2 #15234 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_mirror_stop + loadl v1 #15209 + loadl v2 #15210 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gamecomp_target_full + loadl v1 #17389 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_fight_sissyer_start + loadl v1 #16827 + loadl v2 #16828 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +slotb_lose + loadl v1 #17513 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_dance_hiphop + loadl v1 #16715 + loadl v2 #16716 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tmarketer_react_good_vox + loadl v1 #16514 + loadl v2 #16515 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_cheerupee_pup_pos + loadl v1 #15291 + loadl v2 #15292 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_sigh_weak + loadl v1 #17166 + loadl v2 #17167 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_laugh_happy + loadl v1 #17046 + loadl v2 #17047 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_tradee_rejecta_start + loadl v1 #17240 + loadl v2 #17241 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_proposer_tso + loadl v1 #17102 + loadl v2 #17103 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_dancee_slow_stop + loadl v1 #16747 + loadl v2 #16748 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobobject_sequencea + loadl v1 #17430 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +jobobject_sequenceb + loadl v1 #17431 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_game_cont_wina + loadl v1 #15048 + loadl v2 #15049 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobobject_sequencec + loadl v1 #17432 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_game_cont_winb + loadl v1 #15050 + loadl v2 #15051 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tutorial_lpc_vox + loadl v1 #15117 + loadl v2 #15118 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_game_cont_idlea + loadl v1 #16882 + loadl v2 #16883 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_game_cont_idleb + loadl v1 #16884 + loadl v2 #16885 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_game_cont_idlec + loadl v1 #16886 + loadl v2 #16887 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_fiver_react_bad + loadl v1 #16837 + loadl v2 #16838 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +map_reader_loopa_vox + loadl v1 #16466 + loadl v2 #16467 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_exmach_stop + loadl v1 #15195 + loadl v2 #15196 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +roulette_spin + loadl v1 #15261 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +repair_guitar_start + loadl v1 #17498 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_tease_stand + loadl v1 #17220 + loadl v2 #17221 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_typew_lp + loadl v1 #17504 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pizza_door_open + loadl v1 #17466 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +chalkb_writec_vox + loadl v1 #16415 + loadl v2 #16416 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_peck_acceptee + loadl v1 #17070 + loadl v2 #17071 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +pizza_prep_cheese + loadl v1 #17474 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +spades_cards_play_vox + loadl v1 #15097 + loadl v2 #15098 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_whisper_secret + loadl v1 #17264 + loadl v2 #17265 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +door_turnstile_close + loadl v1 #17363 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_fight_sissyee_cower + loadl v1 #16819 + loadl v2 #16820 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Ctrunk_Scifi_Button + loadl v1 #17340 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_dance_tangoee + loadl v1 #16737 + loadl v2 #16738 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +door_vault_open + loadl v1 #17367 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_scream_primal + loadl v1 #17142 + loadl v2 #17143 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_gnome_start + loadl v1 #15197 + loadl v2 #15198 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +blackjack_chip_place + loadl v1 #17287 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_peck_accepter + loadl v1 #17072 + loadl v2 #17073 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dance_discoee + loadl v1 #16705 + loadl v2 #16706 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vpoker_repair_start + loadl v1 #15022 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +chalkb_writea + loadl v1 #17320 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +tmarketee_react_good_vox + loadl v1 #16508 + loadl v2 #16509 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_writeb + loadl v1 #17321 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_coin_flippee_lose + loadl v1 #16665 + loadl v2 #16666 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +ui_call_send + loadl v1 #17537 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +chalkb_writec + loadl v1 #17322 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +lot_enter + loadl v1 #15025 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_chin_ticklee_back + loadl v1 #15129 + loadl v2 #15130 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_writed + loadl v1 #17323 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_dance_tangoer + loadl v1 #16739 + loadl v2 #16740 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_writee + loadl v1 #17324 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +blackjack_hitme + loadl v1 #17289 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +chalkb_writef + loadl v1 #17325 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_arrogc_loopb + loadl v1 #16573 + loadl v2 #16574 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_writeg + loadl v1 #17326 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_dance_belly + loadl v1 #16701 + loadl v2 #16702 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_arrogc_loopc + loadl v1 #16575 + loadl v2 #16576 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_writeh + loadl v1 #17327 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +scoreboard_repair + loadl v1 #15069 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +gem_pickaxe_get + loadl v1 #15001 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +chalkb_scratch_vox + loadl v1 #16407 + loadl v2 #16408 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +cardtable_dealer_pickup + loadl v1 #17307 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_dance_discoer + loadl v1 #16707 + loadl v2 #16708 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gem_pickaxe_lpb_sfx + loadl v1 #15003 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +foodtray_loop_voxnffod + loadl v1 #15308 + loadl v2 #15308 + loadl v3 #15308 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_evil_laugh + loadl v1 #16807 + loadl v2 #16808 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +game_vote_scribblea + loadl v1 #17383 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +game_vote_scribbleb + loadl v1 #17384 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +bunkbed_bottom_getin + loadl v1 #17290 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_puppeter_get_petted + loadl v1 #15303 + loadl v2 #15304 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +mic_tap + loadl v1 #17443 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +jar_seal + loadl v1 #17407 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +blackjack_cards_pickup + loadl v1 #17284 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_cheeruper_start + loadl v1 #16659 + loadl v2 #16660 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +pinata_swing_missa + loadl v1 #17459 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_inlovea_loopa + loadl v1 #16970 + loadl v2 #16971 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +map_nav_loopa + loadl v1 #15271 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pinata_swing_missb + loadl v1 #17460 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_inlovea_loopb + loadl v1 #16972 + loadl v2 #16973 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_backcracker_accept + loadl v1 #16589 + loadl v2 #16590 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +roulette_bet_place_sfx + loadl v1 #15259 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +map_nav_loopb + loadl v1 #15272 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pinata_swing_missc + loadl v1 #17461 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_inlovea_loopc + loadl v1 #16974 + loadl v2 #16975 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +map_nav_loopc + loadl v1 #15273 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_friend_makee + loadl v1 #16878 + loadl v2 #16879 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_giftgiver + loadl v1 #16900 + loadl v2 #16901 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +map_reader_defeated_vox + loadl v1 #0 + loadl v2 #16465 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +eyepoke + loadl v1 #17368 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_dance_jitteree + loadl v1 #16723 + loadl v2 #16724 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tmarket_paper_get + loadl v1 #17528 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_tantrum + loadl v1 #17214 + loadl v2 #17215 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_chin_tickler_bat + loadl v1 #15135 + loadl v2 #15136 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_mirror_lp + loadl v1 #17501 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +repair_mbull_lp + loadl v1 #17499 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_ticklee_extreme + loadl v1 #17224 + loadl v2 #17225 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_roomatee_invite + loadl v1 #17112 + loadl v2 #17113 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_grovelee_deny_tso + loadl v1 #16934 + loadl v2 #16935 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_sadc_loopa + loadl v1 #17132 + loadl v2 #17133 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_friend_maker + loadl v1 #16880 + loadl v2 #16881 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_sadc_loopb + loadl v1 #17134 + loadl v2 #17135 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_can_lp + loadl v1 #17485 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_sadc_loopc + loadl v1 #17136 + loadl v2 #17137 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_trader_accept_loop + loadl v1 #17244 + loadl v2 #17245 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_kneel_armpump + loadl v1 #17018 + loadl v2 #17019 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dance_groove + loadl v1 #16713 + loadl v2 #16714 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobbody_fail_vox + loadl v1 #16427 + loadl v2 #16428 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_piano_lp + loadl v1 #17502 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +tipjar_putt_vox + loadl v1 #16504 + loadl v2 #16505 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dance_jitterer + loadl v1 #16725 + loadl v2 #16726 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tipjar_getf_vox + loadl v1 #16498 + loadl v2 #16499 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_mbull_stop + loadl v1 #15207 + loadl v2 #15208 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +map_nav_loopc_vox + loadl v1 #16459 + loadl v2 #16460 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobobject_loop + loadl v1 #17428 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_hugger_refuse_tso + loadl v1 #16968 + loadl v2 #16969 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +map_nav_celebrate_vox + loadl v1 #16451 + loadl v2 #16452 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Backdrop_start + loadl v1 #17275 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_repair_dcage_start + loadl v1 #15187 + loadl v2 #15188 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tutorial_lpb_sfx + loadl v1 #15015 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_eyepokee + loadl v1 #16813 + loadl v2 #16814 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_airkisser_accept + loadl v1 #16537 + loadl v2 #16538 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_typew_start + loadl v1 #15215 + loadl v2 #15216 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_entrance + loadl v1 #16805 + loadl v2 #16806 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Pinata_swinghb_vox + loadl v1 #16480 + loadl v2 #16481 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_joke_tell + loadl v1 #17000 + loadl v2 #17001 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_compliment_stand + loadl v1 #16681 + loadl v2 #16682 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_flex_musclea + loadl v1 #16842 + loadl v2 #16843 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +npc_bj_cards_dhit_vox + loadl v1 #15253 + loadl v2 #15253 + loadl v3 #15253 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_flex_muscleb + loadl v1 #15247 + loadl v2 #15248 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_flex_musclec + loadl v1 #15141 + loadl v2 #15142 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tapdance_feet + loadl v1 #17523 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_juggler_stop + loadl v1 #17002 + loadl v2 #17003 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vpoker_lpb_vox + loadl v1 #15239 + loadl v2 #15240 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +cardtable_dealer_start + loadl v1 #17311 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pizza_appear_open + loadl v1 #17463 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_kneel_pout + loadl v1 #17036 + loadl v2 #17037 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_bored_check_watch + loadl v1 #16625 + loadl v2 #16626 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_stand_laugha + loadl v1 #17204 + loadl v2 #17205 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_stand_laughb + loadl v1 #17206 + loadl v2 #17207 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_afraidc_loopa + loadl v1 #0 + loadl v2 #16530 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_afraidc_loopb + loadl v1 #16531 + loadl v2 #16532 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +ui_letter_rec + loadl v1 #17539 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +blackjack_hitme_vox + loadl v1 #16393 + loadl v2 #16394 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_afraidc_loopc + loadl v1 #16533 + loadl v2 #16534 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gem_break + loadl v1 #15000 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +spades_pickup_hand_sfx + loadl v1 #15012 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_huggee_refuse_tso + loadl v1 #16964 + loadl v2 #16965 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +ui_call_q_full + loadl v1 #17534 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +crackback_crack + loadl v1 #17337 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +roulette_watcha_vox + loadl v1 #15091 + loadl v2 #15092 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_bkcase_lp + loadl v1 #17480 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Death_possess_in + loadl v1 #17356 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_giddy + loadl v1 #16888 + loadl v2 #16889 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_exmach_lp + loadl v1 #17495 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +joblogic_getpaper + loadl v1 #17413 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +joblogic_typeswitch + loadl v1 #17420 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +hatrack_hat_take + loadl v1 #17400 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +gem_start_vox + loadl v1 #15083 + loadl v2 #15084 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_comp_lp + loadl v1 #17490 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_sing_serenade_short + loadl v1 #17170 + loadl v2 #17171 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +npc_bj_chip_give_vox + loadl v1 #15255 + loadl v2 #15255 + loadl v3 #15255 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_ticklee_wetself + loadl v1 #17226 + loadl v2 #17227 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +giddy_footsteps + loadl v1 #17396 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +coin_catch + loadl v1 #15278 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_death_marblee_rej + loadl v1 #16761 + loadl v2 #16762 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_piano_start + loadl v1 #15211 + loadl v2 #15212 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +roulette_pay_sfx + loadl v1 #15260 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +tipjar_money_putf + loadl v1 #17526 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Pinata_swingma_vox + loadl v1 #16484 + loadl v2 #16485 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobmech_pipe_break + loadl v1 #17424 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_repair_guitar_start + loadl v1 #15201 + loadl v2 #15202 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dancee_reject + loadl v1 #16743 + loadl v2 #16744 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Death_mhead_remove + loadl v1 #17355 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_headspin + loadl v1 #16952 + loadl v2 #16953 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_erasea_vox + loadl v1 #16397 + loadl v2 #16398 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_kissee_sweet + loadl v1 #17008 + loadl v2 #17009 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dance_sultry_acceptee + loadl v1 #16731 + loadl v2 #16732 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_coin_flipper_start + loadl v1 #16671 + loadl v2 #16672 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tipjar_money_putt + loadl v1 #17527 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_roomatee_kickout + loadl v1 #17114 + loadl v2 #17115 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gem_repair_start_vox + loadl v1 #15079 + loadl v2 #15080 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +spades_cards_stop_sfx + loadl v1 #15008 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_angryb_loopa + loadl v1 #16545 + loadl v2 #16546 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_easel_lp + loadl v1 #17493 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_angryb_loopb + loadl v1 #16547 + loadl v2 #16548 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_hotdog_choose + loadl v1 #15312 + loadl v2 #15313 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_angryb_loopc + loadl v1 #16549 + loadl v2 #16550 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +heart_pullout + loadl v1 #17401 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +slotb_wheels_spin + loadl v1 #17514 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_hugger_good_tso + loadl v1 #16966 + loadl v2 #16967 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_peck_rejectee + loadl v1 #17076 + loadl v2 #17077 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +spades_score_lp_vox + loadl v1 #15109 + loadl v2 #15110 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_chess_lp + loadl v1 #17489 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +cannonball_load + loadl v1 #17301 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_compliment_appreciate + loadl v1 #16675 + loadl v2 #16676 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_kisser_passion_tso + loadl v1 #17010 + loadl v2 #17011 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_backcrackee_reject + loadl v1 #16587 + loadl v2 #16588 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_cheeruper_pup_neg + loadl v1 #15289 + loadl v2 #15290 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_shakefist + loadl v1 #17152 + loadl v2 #17153 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +blackjack_cards_check_vox + loadl v1 #16391 + loadl v2 #16392 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_peck_rejecter + loadl v1 #17078 + loadl v2 #17079 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_tickler_ext_reject + loadl v1 #17228 + loadl v2 #17229 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_backrubbee_stop + loadl v1 #16597 + loadl v2 #16598 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_model + loadl v1 #17062 + loadl v2 #17063 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tmarketee_sell_vox + loadl v1 #16510 + loadl v2 #16511 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vpoker_lpa_sfx + loadl v1 #15018 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_greet_wave_tso + loadl v1 #16912 + loadl v2 #16913 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_coin_flipper_lose + loadl v1 #16669 + loadl v2 #16670 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_chin_tickler_back + loadl v1 #15133 + loadl v2 #15134 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +pizza_repaira_vox + loadl v1 #16494 + loadl v2 #16495 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Pinata_celebrate_vox + loadl v1 #16472 + loadl v2 #16473 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_sit_sigh + loadl v1 #17190 + loadl v2 #17191 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_fivee_reject + loadl v1 #16835 + loadl v2 #16836 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_game_host_read + loadl v1 #15054 + loadl v2 #15055 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +hat_head_on + loadl v1 #17398 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_backrubbee_refused + loadl v1 #16595 + loadl v2 #16596 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +logo_intel_filtered + loadl v1 #15284 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +joblogic_handlepull + loadl v1 #17414 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_kissee_reject + loadl v1 #17006 + loadl v2 #17007 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_easel_stop + loadl v1 #15191 + loadl v2 #15192 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +hat_head_off + loadl v1 #17397 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Death_fhead_dribble + loadl v1 #17349 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_kneel_booa + loadl v1 #17020 + loadl v2 #17021 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_kneel_boob + loadl v1 #17022 + loadl v2 #17023 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_kneel_booc + loadl v1 #17024 + loadl v2 #17025 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_muscle_kiss + loadl v1 #15245 + loadl v2 #15246 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_gmoneyer_accept + loadl v1 #16908 + loadl v2 #16909 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_kneel_wipebrow + loadl v1 #17040 + loadl v2 #17041 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_tradee_accept_loop + loadl v1 #17234 + loadl v2 #17235 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_smokears + loadl v1 #17200 + loadl v2 #17201 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_primp_male + loadl v1 #17092 + loadl v2 #17093 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_spookee + loadl v1 #16773 + loadl v2 #16774 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_joke_respond_pos + loadl v1 #16998 + loadl v2 #16999 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_talk_subtle + loadl v1 #15231 + loadl v2 #15232 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Ctrunk_wlockerq_close + loadl v1 #17344 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_repair_mbull_lp + loadl v1 #15203 + loadl v2 #15204 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +backdrop_pull + loadl v1 #17274 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_ticklee_ext_reject + loadl v1 #17222 + loadl v2 #17223 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_gnome_stop + loadl v1 #15199 + loadl v2 #15200 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_typew_stop + loadl v1 #15217 + loadl v2 #15218 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +click_heels + loadl v1 #17328 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_giggle + loadl v1 #16902 + loadl v2 #16903 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_break_metal + loadl v1 #17483 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_sit_wipebrow + loadl v1 #17192 + loadl v2 #17193 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_spooker + loadl v1 #15042 + loadl v2 #15043 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_kickfloor + loadl v1 #17004 + loadl v2 #17005 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +foot_stomp + loadl v1 #15264 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Death_eyeball_remove + loadl v1 #17348 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pizza_prep_mush + loadl v1 #17476 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +npc_bj_win_declare_vox + loadl v1 #15254 + loadl v2 #15254 + loadl v3 #15254 + call #generic_fm_smartlists + end +] + +BINARY +[ +gem_stop_vox + loadl v1 #15085 + loadl v2 #15086 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_flirt_kneel + loadl v1 #16848 + loadl v2 #16849 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +bunkbed_top_getout + loadl v1 #17294 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +logo_intel + loadl v1 #15283 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_lookatme + loadl v1 #17052 + loadl v2 #17053 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobbody_paperget_vox + loadl v1 #16431 + loadl v2 #16432 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobmech_pondera_vox + loadl v1 #16443 + loadl v2 #16444 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jar_put_crate + loadl v1 #17406 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_sit_woohoo + loadl v1 #17194 + loadl v2 #17195 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dipkissee + loadl v1 #16797 + loadl v2 #16798 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gametimer_buzzer + loadl v1 #17393 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vpoker_repair_stop + loadl v1 #15274 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_sit_bored_stretch + loadl v1 #15058 + loadl v2 #15059 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +flower_stomp + loadl v1 #17371 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +jobmech_trans_bang + loadl v1 #17425 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +sissy_slap_shoulders + loadl v1 #15270 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Bunkbed_step_wood + loadl v1 #17292 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +spades_deal_idleb_vox + loadl v1 #15101 + loadl v2 #15102 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_easel_start + loadl v1 #15189 + loadl v2 #15190 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_boredb_loopa + loadl v1 #16631 + loadl v2 #16632 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_boredb_loopb + loadl v1 #16633 + loadl v2 #16634 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_boredb_loopc + loadl v1 #16635 + loadl v2 #16636 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dipkisser + loadl v1 #16799 + loadl v2 #16800 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_marbler_rej + loadl v1 #15034 + loadl v2 #15035 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +blackjack_chip_give + loadl v1 #17286 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_bunkbed_bottom_getup + loadl v1 #15121 + loadl v2 #15122 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobbody_getin_vox + loadl v1 #16429 + loadl v2 #16430 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_scream_startled + loadl v1 #17146 + loadl v2 #17147 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_writeg_vox + loadl v1 #16423 + loadl v2 #16424 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_groveler_accept_tso + loadl v1 #16936 + loadl v2 #16937 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +door_vault_lock + loadl v1 #17366 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +cardtable_dealer_brush + loadl v1 #17305 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Death_eyeball_collide + loadl v1 #17346 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Puzzle_twoper_close + loadl v1 #17478 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_groovya_loopa + loadl v1 #16914 + loadl v2 #16915 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_groovya_loopb + loadl v1 #16916 + loadl v2 #16917 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_groovya_loopc + loadl v1 #16918 + loadl v2 #16919 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_nails_file + loadl v1 #17068 + loadl v2 #17069 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +fridge_med_loop + loadl v1 #15249 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + loop +] + +BINARY +[ +vox_dance_popstar + loadl v1 #15137 + loadl v2 #15138 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_blowkiss + loadl v1 #16621 + loadl v2 #16622 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_benchpresseea + loadl v1 #16605 + loadl v2 #16606 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gem_pickaxe_lpa_vox + loadl v1 #15071 + loadl v2 #15072 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_benchpresseeb + loadl v1 #16607 + loadl v2 #16608 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +sissy_slap_head + loadl v1 #17511 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_grovelee_accept_tso + loadl v1 #16932 + loadl v2 #16933 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tutorial_start + loadl v1 #15017 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_berate_stand + loadl v1 #16619 + loadl v2 #16620 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_gift_appreciatee + loadl v1 #16890 + loadl v2 #16891 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +foodtray_start_voxnffod + loadl v1 #15307 + loadl v2 #15307 + loadl v3 #15307 + call #generic_fm_smartlists + end +] + +BINARY +[ +scoreboard_button + loadl v1 #17507 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +map_reader_loopb_vox + loadl v1 #16468 + loadl v2 #16469 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +pizza_oven_repaira + loadl v1 #17471 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +spades_deal_start_vox + loadl v1 #15105 + loadl v2 #15106 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +pizza_oven_repairb + loadl v1 #17472 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pizza_oven_put + loadl v1 #17470 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pizza_oven_repairc + loadl v1 #17473 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +balloons_pop + loadl v1 #15063 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +chalkb_writed_vox + loadl v1 #16417 + loadl v2 #16418 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_gift_appreciater + loadl v1 #16892 + loadl v2 #16893 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_trader_acceptb_start + loadl v1 #17248 + loadl v2 #17249 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_guts + loadl v1 #15030 + loadl v2 #15031 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Death_spooka + loadl v1 #17358 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +ctrunk_wlockerq_open + loadl v1 #17345 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +joblogic_success_vox + loadl v1 #16439 + loadl v2 #16440 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Death_spookb + loadl v1 #17359 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_sit_boo + loadl v1 #17174 + loadl v2 #17175 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_happy_woohoo + loadl v1 #16950 + loadl v2 #16951 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Conveyer_on + loadl v1 #17336 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_death_mheadless + loadl v1 #15036 + loadl v2 #15037 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dance_hustlee + loadl v1 #16717 + loadl v2 #16718 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +butt_kick + loadl v1 #17295 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_attackee_win + loadl v1 #16579 + loadl v2 #16580 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Ctrunk_mlocker_close + loadl v1 #17338 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +fruit_pot_stir + loadl v1 #15251 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +jobobject_paper_appear + loadl v1 #17429 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_dance_tapfunk + loadl v1 #15061 + loadl v2 #15062 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_proposee_no + loadl v1 #17094 + loadl v2 #17095 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_comp_stop + loadl v1 #15185 + loadl v2 #15186 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_sign_write_stop + loadl v1 #15219 + loadl v2 #15220 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_gmoneyee_reject + loadl v1 #16906 + loadl v2 #16907 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_talk_eng_sports + loadl v1 #15223 + loadl v2 #15224 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +piledrivea + loadl v1 #17452 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +piledriveb + loadl v1 #17453 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_dance_hustler + loadl v1 #16719 + loadl v2 #16720 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_piano_stop + loadl v1 #15213 + loadl v2 #15214 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gem_pickaxe_lpc_sfx + loadl v1 #15004 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_fight_sissyee_start + loadl v1 #16821 + loadl v2 #16822 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +cardtable_dealer_putdown + loadl v1 #17308 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +tutorial_lpa_vox + loadl v1 #15115 + loadl v2 #15116 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +fridge_cheap_loop + loadl v1 #15060 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + loop +] + +BINARY +[ +repair_dcage_lp + loadl v1 #17492 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +gametimer_repair_lp + loadl v1 #17394 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_backrubber_stop + loadl v1 #16601 + loadl v2 #16602 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gem_repair_stop_vox + loadl v1 #15081 + loadl v2 #15082 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +ui_letter_q_full + loadl v1 #17538 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_arrogb_loopa + loadl v1 #16567 + loadl v2 #16568 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobbody_pull_lever + loadl v1 #17410 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_arrogb_loopb + loadl v1 #16569 + loadl v2 #16570 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_meltdown + loadl v1 #17056 + loadl v2 #17057 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_arrogb_loopc + loadl v1 #16571 + loadl v2 #16572 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_complimentor_tso + loadl v1 #16689 + loadl v2 #16690 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_writea_vox + loadl v1 #16411 + loadl v2 #16412 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_shove_blockee + loadl v1 #17158 + loadl v2 #17159 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_proposee_think + loadl v1 #17096 + loadl v2 #17097 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +spades_collect_cards_sfx + loadl v1 #15009 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_insult_stand + loadl v1 #16992 + loadl v2 #16993 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_inlovec_loopb + loadl v1 #16982 + loadl v2 #16983 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_inlovec_loopc + loadl v1 #16984 + loadl v2 #16985 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +fruit_pot_put + loadl v1 #17375 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +game_piece_get + loadl v1 #17380 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_slapfightee + loadl v1 #17196 + loadl v2 #17197 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +trashcompact_close + loadl v1 #15276 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_berate + loadl v1 #16613 + loadl v2 #16614 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_fiver_react_good + loadl v1 #16839 + loadl v2 #0 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_foot_stomp_misseea + loadl v1 #16866 + loadl v2 #16867 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_foot_stomp_misseeb + loadl v1 #16868 + loadl v2 #16869 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +phone_ring_pizza + loadl v1 #17449 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_repair_can_start + loadl v1 #15173 + loadl v2 #15174 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_shove_blocker + loadl v1 #17160 + loadl v2 #17161 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +hatrack_hat_put + loadl v1 #17399 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vpoker_repair_vox + loadl v1 #15243 + loadl v2 #15244 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_guitar_lp + loadl v1 #17497 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_slapfighter + loadl v1 #17198 + loadl v2 #17199 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +fiver_clap + loadl v1 #17370 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_sit_laugha + loadl v1 #17180 + loadl v2 #17181 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_sit_laughb + loadl v1 #17182 + loadl v2 #17183 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +fruit_chop + loadl v1 #17374 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_sit_laughc + loadl v1 #17184 + loadl v2 #17185 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_fheadless + loadl v1 #15028 + loadl v2 #15029 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_sadb_loopa + loadl v1 #17126 + loadl v2 #17127 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_bunkbed_top_getup + loadl v1 #15125 + loadl v2 #15126 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +spades_deal_stop_vox + loadl v1 #15107 + loadl v2 #15108 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_sadb_loopb + loadl v1 #17128 + loadl v2 #17129 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_sadb_loopc + loadl v1 #17130 + loadl v2 #17131 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_pull_hair + loadl v1 #17106 + loadl v2 #17107 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +dice_repair + loadl v1 #15070 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +tutorial_lpc_sfx + loadl v1 #15016 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_gift_stompee + loadl v1 #16894 + loadl v2 #16895 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_possee + loadl v1 #16767 + loadl v2 #16768 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dance_freakee + loadl v1 #16709 + loadl v2 #16710 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_worship + loadl v1 #17270 + loadl v2 #17271 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_tease_kneel + loadl v1 #17216 + loadl v2 #17217 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Pinata_swinghc_vox + loadl v1 #16482 + loadl v2 #16483 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_compliment_sit + loadl v1 #16679 + loadl v2 #16680 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +cardtable_dealer_stop + loadl v1 #17312 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_game_gest + loadl v1 #15153 + loadl v2 #15154 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_berate_sit + loadl v1 #16617 + loadl v2 #16618 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_fivee_react_good + loadl v1 #16833 + loadl v2 #16834 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_gift_stomper + loadl v1 #16896 + loadl v2 #16897 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dance_jazz + loadl v1 #16721 + loadl v2 #16722 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_posser + loadl v1 #15038 + loadl v2 #15039 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vpoker_lpc_vox + loadl v1 #15241 + loadl v2 #15242 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dance_freaker + loadl v1 #16711 + loadl v2 #16712 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +spades_cards_play_sfx + loadl v1 #15007 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_eat_seated + loadl v1 #15139 + loadl v2 #15140 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_cheerupee_start + loadl v1 #16655 + loadl v2 #16656 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_marblee_acc + loadl v1 #16759 + loadl v2 #16760 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +pizza_oven_buzzer + loadl v1 #17469 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_cheeruper_pup_start + loadl v1 #15285 + loadl v2 #15286 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +moneyee_rub_hands + loadl v1 #15279 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_sit_armpump + loadl v1 #17172 + loadl v2 #17173 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_insult + loadl v1 #16986 + loadl v2 #16987 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_gametimer_repair_start + loadl v1 #15163 + loadl v2 #15164 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +money_count + loadl v1 #17444 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +roulette_watchb_vox + loadl v1 #15093 + loadl v2 #15094 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_break_glass + loadl v1 #17482 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +roulette_bet_change + loadl v1 #15258 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_scoreboard_repair + loadl v1 #17140 + loadl v2 #17141 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gamecomp_ball_collide + loadl v1 #17385 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +map_nav_loopa_vox + loadl v1 #16455 + loadl v2 #16456 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_flyhugger_pos_tso + loadl v1 #16862 + loadl v2 #16863 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dancer_invite_tso + loadl v1 #16751 + loadl v2 #16752 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +joblogic_type + loadl v1 #17418 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_cheerupee_pup_neg + loadl v1 #15293 + loadl v2 #15294 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_afraidb_loopa + loadl v1 #16524 + loadl v2 #16525 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_afraidb_loopb + loadl v1 #16526 + loadl v2 #16527 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_exmach_start + loadl v1 #15193 + loadl v2 #15194 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_afraidb_loopc + loadl v1 #16528 + loadl v2 #16529 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gem_repair_lp + loadl v1 #15005 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +sting_death_fish + loadl v1 #15268 + call #userdata_sting_death_fish + end +] + +BINARY +[ +slotc_lose + loadl v1 #17516 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_foot_stompee + loadl v1 #16874 + loadl v2 #16875 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_puppetee_pet + loadl v1 #15305 + loadl v2 #15306 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_cry + loadl v1 #16691 + loadl v2 #16692 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jar_get_pot + loadl v1 #17405 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_fight_sissyer_taunt + loadl v1 #16829 + loadl v2 #16830 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Death_guts_remove + loadl v1 #17353 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Game_comp_buzzer + loadl v1 #17376 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_sexy_fgrowl + loadl v1 #17148 + loadl v2 #17149 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tmarket_paper_put + loadl v1 #17529 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_dance_break + loadl v1 #16703 + loadl v2 #16704 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_flirt_male + loadl v1 #16850 + loadl v2 #16851 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_frustrate_vox + loadl v1 #16405 + loadl v2 #16406 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_attacker_win + loadl v1 #16583 + loadl v2 #16584 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_foot_stomper + loadl v1 #16876 + loadl v2 #16877 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Pinata_swingmb_vox + loadl v1 #16486 + loadl v2 #16487 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_fart + loadl v1 #16817 + loadl v2 #16818 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_bkcase_lp + loadl v1 #15169 + loadl v2 #15170 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +heart_stomp + loadl v1 #17402 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +compact_open + loadl v1 #17333 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_eyepoke_blockee + loadl v1 #16809 + loadl v2 #16810 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_shovee_tso + loadl v1 #17162 + loadl v2 #17163 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_groveler_deny_tso + loadl v1 #16938 + loadl v2 #16939 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dancee_stop + loadl v1 #16749 + loadl v2 #16750 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +lot_exit + loadl v1 #15026 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +repair_comp_start + loadl v1 #17491 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +jobmech_fail_vox + loadl v1 #16441 + loadl v2 #16442 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_shandshakee + loadl v1 #17154 + loadl v2 #17155 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_hat_admire + loadl v1 #15165 + loadl v2 #15166 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_euraka_vox + loadl v1 #16401 + loadl v2 #16402 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_tradee_acceptb_start + loadl v1 #17236 + loadl v2 #17237 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_talk_angry + loadl v1 #15221 + loadl v2 #15222 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_eyepoke_blocker + loadl v1 #16811 + loadl v2 #16812 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_kneel_bored_stretch + loadl v1 #17028 + loadl v2 #17029 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_can_lp + loadl v1 #15171 + loadl v2 #15172 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +sign_write_lp + loadl v1 #17509 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +map_nav_start_vox + loadl v1 #16461 + loadl v2 #16462 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_game_host_idleb + loadl v1 #15052 + loadl v2 #15053 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_shandshaker + loadl v1 #17156 + loadl v2 #17157 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_belch + loadl v1 #15269 + loadl v2 #15269 + loadl v3 #15269 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_kneel_cry + loadl v1 #17030 + loadl v2 #17031 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_game_buzzer_read_lp + loadl v1 #15149 + loadl v2 #15150 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_catcall + loadl v1 #16651 + loadl v2 #16652 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_complimentee_tso + loadl v1 #16685 + loadl v2 #16686 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +game_vote_ballot + loadl v1 #17382 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +game_draw_write + loadl v1 #17379 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_trader_rejectb_start + loadl v1 #17254 + loadl v2 #17255 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_scream_pup + loadl v1 #17144 + loadl v2 #17145 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_salute_herioc + loadl v1 #17138 + loadl v2 #17139 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dance_scat + loadl v1 #16729 + loadl v2 #16730 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_finale_vox + loadl v1 #16403 + loadl v2 #16404 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_angrya_loopa + loadl v1 #16539 + loadl v2 #16540 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_angrya_loopb + loadl v1 #16541 + loadl v2 #16542 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_handkiss_rejectee + loadl v1 #16942 + loadl v2 #16943 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_angrya_loopc + loadl v1 #16543 + loadl v2 #16544 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_backflip + loadl v1 #16593 + loadl v2 #16594 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_compliment_kneel + loadl v1 #16677 + loadl v2 #16678 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +sissy_slap_hands + loadl v1 #17510 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_attacker_tso + loadl v1 #16581 + loadl v2 #16582 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_piledriveea + loadl v1 #17080 + loadl v2 #17081 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_piledriveeb + loadl v1 #17082 + loadl v2 #17083 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +magic_repair + loadl v1 #15277 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vpoker_lpb_sfx + loadl v1 #15019 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +tipjar_gett_vox + loadl v1 #16500 + loadl v2 #16501 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +pizza_repairb_vox + loadl v1 #16496 + loadl v2 #16497 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_handkiss_rejecter + loadl v1 #16944 + loadl v2 #16945 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_kneel_woohoo + loadl v1 #17042 + loadl v2 #17043 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobbody_paper_slot + loadl v1 #17409 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +coin_catch_slap + loadl v1 #17330 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +repair_cboard_start + loadl v1 #17488 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +JobObject_Conveyor_Loop + loadl v1 #17426 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pizza_door_close + loadl v1 #17465 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +cardtable_cardscrape + loadl v1 #17304 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +fridge_exp_loop + loadl v1 #15250 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + loop +] + +BINARY +[ +vox_roomater_invite + loadl v1 #17116 + loadl v2 #17117 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +spades_score_stop_vox + loadl v1 #15113 + loadl v2 #15114 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_sit_cry + loadl v1 #17178 + loadl v2 #17179 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_coin_flippee_start + loadl v1 #16667 + loadl v2 #16668 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_break_elec + loadl v1 #17481 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_kneel_bored_sigh + loadl v1 #17026 + loadl v2 #17027 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +game_draw_draw + loadl v1 #17377 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_death_marbler_acc + loadl v1 #15032 + loadl v2 #15033 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +pizza_order_vox + loadl v1 #16490 + loadl v2 #16491 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Pinata_swingf_vox + loadl v1 #16476 + loadl v2 #16477 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_flyhugger_neg_tso + loadl v1 #16860 + loadl v2 #16861 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_attackee_lose + loadl v1 #16577 + loadl v2 #16578 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_complimenter_reject_tso + loadl v1 #16687 + loadl v2 #16688 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_hebejebe_a + loadl v1 #16958 + loadl v2 #16959 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +slotb_win + loadl v1 #17515 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vpoker_repair_lp + loadl v1 #15021 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_nails_blowon + loadl v1 #17066 + loadl v2 #17067 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +joblogic_type_load + loadl v1 #17419 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Dice_button_push + loadl v1 #17360 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +pizza_prep_vox + loadl v1 #16492 + loadl v2 #16493 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobmech_ponderb_vox + loadl v1 #16445 + loadl v2 #16446 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_backcrackee_accept + loadl v1 #16585 + loadl v2 #16586 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Jobbody_Light_Flash + loadl v1 #17408 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_rasp_tso + loadl v1 #17108 + loadl v2 #17109 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobbody_weary_vox + loadl v1 #16435 + loadl v2 #16436 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vpoker_start + loadl v1 #15023 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +map_read_rollup + loadl v1 #17440 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_refuse + loadl v1 #17110 + loadl v2 #17111 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Death_eyeball_putback + loadl v1 #17347 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +roulette_spin_start_vox + loadl v1 #15089 + loadl v2 #15089 + loadl v3 #15089 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dice_repair + loadl v1 #16795 + loadl v2 #16796 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_coinflip_talk + loadl v1 #16673 + loadl v2 #16674 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +spades_deal_idlec_vox + loadl v1 #15103 + loadl v2 #15104 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Conveyer_off + loadl v1 #17335 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +spades_score_lp_sfx + loadl v1 #15013 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +ui_online_sim + loadl v1 #17544 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_talk_eng_vacation + loadl v1 #15225 + loadl v2 #15226 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_can_stop + loadl v1 #17486 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Death_possess_out + loadl v1 #17357 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +chalkb_writeh_vox + loadl v1 #16425 + loadl v2 #16426 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_squarea + loadl v1 #16777 + loadl v2 #16778 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_squareb + loadl v1 #16779 + loadl v2 #16780 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_food_return_seated + loadl v1 #15147 + loadl v2 #15148 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_squarec + loadl v1 #16781 + loadl v2 #16782 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +bunkbed_top_getin + loadl v1 #17293 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_death_squared + loadl v1 #16783 + loadl v2 #16784 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tmarketer_react_bad_vox + loadl v1 #16512 + loadl v2 #16513 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_complimentee_reject_tso + loadl v1 #16683 + loadl v2 #16684 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_squaree + loadl v1 #16785 + loadl v2 #16786 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_shover_tso + loadl v1 #17164 + loadl v2 #17165 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_revitalee + loadl v1 #15040 + loadl v2 #15041 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_squaref + loadl v1 #16787 + loadl v2 #16788 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_squareg + loadl v1 #16789 + loadl v2 #16790 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_tude + loadl v1 #17256 + loadl v2 #17257 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_squareh + loadl v1 #16791 + loadl v2 #16792 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_death_squarei + loadl v1 #16793 + loadl v2 #16794 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_boreda_loopa + loadl v1 #16627 + loadl v2 #16628 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tmarketer_sell_vox + loadl v1 #16516 + loadl v2 #16517 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_boreda_loopb + loadl v1 #16629 + loadl v2 #16630 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gamecomp_hit_med + loadl v1 #17387 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +ui_online_prop + loadl v1 #17543 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_fist_shake + loadl v1 #16831 + loadl v2 #16832 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_airkissee_accept + loadl v1 #16535 + loadl v2 #16536 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_break_wood + loadl v1 #17484 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +map_nav_defeated_vox + loadl v1 #15064 + loadl v2 #15065 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gametimer_repair_start + loadl v1 #17395 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_groovyc_loopa + loadl v1 #16926 + loadl v2 #16927 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_trader_reject_loop + loadl v1 #17250 + loadl v2 #17251 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_groovyc_loopb + loadl v1 #16928 + loadl v2 #16929 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_groovyc_loopc + loadl v1 #16930 + loadl v2 #16931 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_make_enemy + loadl v1 #17054 + loadl v2 #17055 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +slotc_wheels_spin + loadl v1 #17517 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +blackjack_chip_take + loadl v1 #17288 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +repair_medcab_lp + loadl v1 #17500 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +cardtable_dealer_deal + loadl v1 #17306 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_kneel_sigh + loadl v1 #17038 + loadl v2 #17039 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +ui_offline_sim + loadl v1 #17542 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +gem_pickaxe_lpb_vox + loadl v1 #15073 + loadl v2 #15074 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tipjar_putf_vox + loadl v1 #16502 + loadl v2 #16503 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +cardtable_dealer_shuffle + loadl v1 #17309 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_dancer_reject + loadl v1 #16753 + loadl v2 #16754 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +map_reader_loopc_vox + loadl v1 #16470 + loadl v2 #16471 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_hotdog_receive + loadl v1 #15314 + loadl v2 #15315 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Death_fhead_remove + loadl v1 #17351 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +roulette_bet_place_vox + loadl v1 #15087 + loadl v2 #15088 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_whyme_cry + loadl v1 #17266 + loadl v2 #17267 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +joblogic_fail_vox + loadl v1 #16437 + loadl v2 #16438 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +stove_bubble + loadl v1 #15263 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + loop +] + +BINARY +[ +chalkb_writee_vox + loadl v1 #16419 + loadl v2 #16420 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jobmech_pipe_bang + loadl v1 #17423 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_insult_sit + loadl v1 #16990 + loadl v2 #16991 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_think_vox + loadl v1 #16409 + loadl v2 #16410 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +soccer_score + loadl v1 #17522 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +cardtable_dealer_unfold + loadl v1 #17313 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_ctrunk_app + loadl v1 #16693 + loadl v2 #16694 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +pizza_prep_pep + loadl v1 #17477 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_tradee_rejectb_start + loadl v1 #17242 + loadl v2 #17243 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_food_get_seated + loadl v1 #15143 + loadl v2 #15144 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +ctrunk_wlocker_open + loadl v1 #17343 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +piggyb_shakef + loadl v1 #17450 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_puppeter_converse + loadl v1 #15301 + loadl v2 #15302 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_latin_steps + loadl v1 #17044 + loadl v2 #17045 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gem_stop_sfx + loadl v1 #15006 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +joblogic_fist_pound + loadl v1 #17412 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_kneel_laugha + loadl v1 #17032 + loadl v2 #17033 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_kneel_laughb + loadl v1 #17034 + loadl v2 #17035 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_primp_female + loadl v1 #17090 + loadl v2 #17091 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_backcracker_reject + loadl v1 #16591 + loadl v2 #16592 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_flirt_sit + loadl v1 #16852 + loadl v2 #16853 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_trader_accepta_start + loadl v1 #17246 + loadl v2 #17247 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +cannonball_pack + loadl v1 #17302 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +blackjack_cards_hit + loadl v1 #17283 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +piggyb_shaket + loadl v1 #17451 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_repair_cboard_start + loadl v1 #15177 + loadl v2 #15178 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_talk_intense + loadl v1 #15227 + loadl v2 #15228 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_fiver_start + loadl v1 #16840 + loadl v2 #16841 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Door_stall_close + loadl v1 #15067 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_psychee + loadl v1 #15265 + loadl v2 #15266 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_kisser_reject + loadl v1 #17012 + loadl v2 #17013 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_kissmyding + loadl v1 #17016 + loadl v2 #17017 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +joblogic_putpaper + loadl v1 #17416 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_sit_pout + loadl v1 #17186 + loadl v2 #17187 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_break_enemy + loadl v1 #16643 + loadl v2 #16644 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_puppeter_enta + loadl v1 #15297 + loadl v2 #15298 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_puppeter_entb + loadl v1 #15299 + loadl v2 #15300 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_chin_ticklee + loadl v1 #16661 + loadl v2 #16662 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_writeb_vox + loadl v1 #16413 + loadl v2 #16414 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Death_fhead_putback + loadl v1 #17350 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_heels_click + loadl v1 #16960 + loadl v2 #16961 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +map_reader_celebrate_vox + loadl v1 #16463 + loadl v2 #16464 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_psycher + loadl v1 #15090 + loadl v2 #0 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_chin_tickler + loadl v1 #16663 + loadl v2 #16664 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_flyhuggee_pos_tso + loadl v1 #16858 + loadl v2 #16859 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_repair_cboard_stop + loadl v1 #15179 + loadl v2 #15180 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_arroga_loopa + loadl v1 #16561 + loadl v2 #16562 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +joblogic_pullpaper + loadl v1 #17415 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_arroga_loopb + loadl v1 #16563 + loadl v2 #16564 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Conveyer_loop + loadl v1 #17334 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_arroga_loopc + loadl v1 #16565 + loadl v2 #16566 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_ctrunk_dis + loadl v1 #16695 + loadl v2 #16696 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_hearter_pullout + loadl v1 #16956 + loadl v2 #16957 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_inloveb_loopa + loadl v1 #16976 + loadl v2 #16977 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_inloveb_loopb + loadl v1 #16978 + loadl v2 #16979 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_inloveb_loopc + loadl v1 #16980 + loadl v2 #16981 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_talk_anim + loadl v1 #17210 + loadl v2 #17211 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +gem_pickaxe_lpa_sfx + loadl v1 #15002 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +Vox_berate_kneel + loadl v1 #16615 + loadl v2 #16616 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_cheeruper_pup_pos + loadl v1 #15287 + loadl v2 #15288 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_ctrunk_rummagea + loadl v1 #16697 + loadl v2 #16698 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +tmarket_phone_get + loadl v1 #17530 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_ctrunk_rummageb + loadl v1 #16699 + loadl v2 #16700 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +roommate_poke + loadl v1 #15257 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_peck_psychee + loadl v1 #17074 + loadl v2 #0 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Puzzle_twoper_open + loadl v1 #17479 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_game_cont_losea + loadl v1 #15044 + loadl v2 #15045 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_game_cont_loseb + loadl v1 #15046 + loadl v2 #15047 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +spades_deal_start_sfx + loadl v1 #15011 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +npc_bj_cards_hit_vox + loadl v1 #15252 + loadl v2 #15252 + loadl v3 #15252 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_meyepokee + loadl v1 #17058 + loadl v2 #17059 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +ui_offline_prop + loadl v1 #17541 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_stand_boo + loadl v1 #17202 + loadl v2 #17203 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_gmoneyee_accept + loadl v1 #16904 + loadl v2 #16905 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +roulette_pay_vox + loadl v1 #15027 + loadl v2 #15027 + loadl v3 #15027 + call #generic_fm_smartlists + end +] + +BINARY +[ +finger_snap + loadl v1 #17369 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_sada_loopa + loadl v1 #17120 + loadl v2 #17121 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_peck_psycher + loadl v1 #17075 + loadl v2 #0 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_sada_loopb + loadl v1 #17122 + loadl v2 #17123 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_game_vote_stop + loadl v1 #15161 + loadl v2 #15162 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_puppeter_start + loadl v1 #15295 + loadl v2 #15296 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_sada_loopc + loadl v1 #17124 + loadl v2 #17125 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_benchpressera + loadl v1 #16609 + loadl v2 #16610 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_benchpresserb + loadl v1 #16611 + loadl v2 #16612 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +Vox_flirt_female + loadl v1 #16846 + loadl v2 #16847 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_meyepoker + loadl v1 #17060 + loadl v2 #17061 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_game_vote_lp + loadl v1 #15157 + loadl v2 #15158 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_typew_start + loadl v1 #17505 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +tmarketee_react_bad_vox + loadl v1 #16506 + loadl v2 #16507 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_dance_rap + loadl v1 #16727 + loadl v2 #16728 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +roulette_watchc_vox + loadl v1 #15095 + loadl v2 #15096 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +pinata_swing_final + loadl v1 #17455 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_repair_can_stop + loadl v1 #15175 + loadl v2 #15176 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_listen_blowoff + loadl v1 #17048 + loadl v2 #17049 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +jar_fill_fruit + loadl v1 #17404 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +vox_wiggle_sexy + loadl v1 #17268 + loadl v2 #17269 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +vox_listen_tso + loadl v1 #17050 + loadl v2 #17051 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +chalkb_hands_rub + loadl v1 #17318 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +map_nav_loopb_vox + loadl v1 #16457 + loadl v2 #16458 + loadl v3 #0 + call #generic_fm_smartlists + end +] + +BINARY +[ +repair_cboard_lp + loadl v1 #17487 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + +BINARY +[ +heart_throwdown + loadl v1 #17403 + smart_setlist v1 + smart_choose v1 + set patch v1 + set_loop + note_on v1 + wait_samp + end +] + + +BINARY +[ +; ENTP + 69 + 78 + 84 + 80 + + #20663 #Vox_huggee_good_tso + #20803 #vox_tradee_reject_loop + #20793 #Vox_tease_sit + #20768 #vox_silly_throwup + #24159 #gametimer_break + #24195 #jobobject_light_flash + #17809 #tutorial_lpa_sfx + #20039 #vox_bunkbed_top_make + #20679 #vox_insultee_tso + #20035 #vox_boo_sit + #20396 #jobmech_success_vox + #20655 #vox_handshakee + #20547 #vox_dance_swingee + #20488 #vox_booer + #24305 #ui_call_rec_next + #20415 #Pinata_swingha_vox + #20689 #Vox_kisser_sweet + #17839 #vox_game_repair + #20435 #vox_afraida_loopa + #24149 #game_piece_put + #20676 #Vox_insult_kneel + #20436 #vox_afraida_loopb + #24190 #jobmech_fuse_slap + #24140 #flower_throw_down + #20759 #vox_sexy_mgrowl + #20437 #vox_afraida_loopc + #20420 #Pinata_swingmc_vox + #20790 #vox_talk_askint + #20094 #vpoker_lpa_vox + #20656 #vox_handshaker + #20548 #vox_dance_swinger + #20093 #vox_teleport_swapskin + #24230 #pizza_appear_close + #24146 #game_draw_place + #20371 #chalkb_erasec_vox + #20365 #nails_file_a + #20366 #nails_file_b + #20398 #nails_file_c + #24185 #joblogic_switch + #24235 #pizza_dough_throw + #20500 #vox_breaker_friendship + #20799 #vox_tickler_extreme + #24120 #Death_guts_putback + #24271 #repair_piano_start + #20455 #vox_armkissee + #20617 #vox_foot_stomp_missera + #20588 #vox_eyepoker_tso + #20618 #vox_foot_stomp_misserb + #20507 #Vox_cheerupee_pos + #20610 #Vox_flyhuggee_neg_tso + #18376 #trashcompact_open + #24209 #map_read_unroll + #24205 #map_read_reada + #20388 #jobbody_success_vox + #24206 #map_read_readb + #20637 #vox_gmoneyer_reject + #24207 #map_read_readc + #20456 #vox_armkisser + #24078 #cardtable_dealer_spin + #20037 #vox_bunkbed_bottom_make + #24274 #repair_typew_stop + #20452 #vox_angryc_loopa + #24154 #gamecomp_hit_hard + #20453 #vox_angryc_loopb + #20454 #vox_angryc_loopc + #17805 #spades_deal_lp + #17815 #vpoker_lpc_sfx + #24236 #pizza_oven_break + #20733 #Vox_proposer_no + #20813 #vox_visitor_kickee + #20727 #vox_pout + #20810 #vox_trader_rejecta_start + #20499 #Vox_breakee_friendship + #17819 #elevator_open + #24287 #smokears + #20609 #Vox_flirt_stand + #20592 #Vox_fight_sissyer_pushee + #24132 #door_turnstile_open + #20369 #blackjack_stay_vox + #24122 #Death_mhead_putback + #24100 #compact_close + #24110 #ctrunk_wlocker_close + #24243 #pizza_prep_dough + #24201 #Latin_feet + #20053 #vox_game_vote_ballot + #20814 #vox_visitor_kicker + #20631 #Vox_giftgetter + #20066 #vox_repair_chess_start + #20059 #vox_hatrack_consider + #20582 #vox_eeeew + #20593 #Vox_fight_sissyer_pusher + #24264 #repair_gnome_lp + #24082 #chalkb_erasea + #24083 #chalkb_eraseb + #24084 #chalkb_erasec + #20581 #vox_drunk + #24085 #chalkb_erased + #20551 #vox_dance_td + #20013 #gem_pickaxe_tired_vox + #24160 #gametimer_button + #20478 #vox_bawl + #20101 #Door_stall_open + #24232 #pizza_appear_raise + #20553 #Vox_dancee_slow_reject + #20815 #vox_vogue + #20031 #spades_score_start_vox + #20924 #foodtray_give_voxnffod + #24109 #ctrunk_scifi_change + #20055 #vox_game_vote_start + #24099 #coin_toss + #24071 #cannonball_pickup + #24293 #tipjar_money_getf + #20800 #vox_tickler_wetself + #20067 #vox_repair_comp_start + #24286 #slotc_win + #20139 #fart_sfx + #20732 #Vox_proposee_yes + #24210 #mic_adjust + #20714 #vox_monologue + #24189 #jobmech_fuse_bang + #20395 #jobmech_ponderc_vox + #20352 #sting_death + #20925 #foodtray_order_voxnffod + #24300 #tmarket_phone_putf + #24294 #tipjar_money_gett + #20778 #vox_sit_shakefist + #24179 #jobbody_push_lever + #20680 #vox_insulter_tso + #20743 #vox_roomater_kickout + #24301 #tmarket_phone_puts + #24156 #gamecomp_hit_soft + #20652 #vox_gymnastic + #24053 #blackjack_cards_shuffle + #20788 #vox_sword_swallow + #24107 #Ctrunk_mlocker_open + #20156 #roulette_spin_stop + #24302 #typewriter_loop + #20820 #vox_yawn_stretch + #20614 #Vox_flyhugger_start_tso + #24262 #repair_easel_start + #24309 #ui_letter_send + #20495 #vox_boredc_loopa + #24158 #gamecomp_target_hit + #20496 #vox_boredc_loopb + #20497 #vox_boredc_loopc + #20041 #vox_chin_ticklee_bat + #20413 #Pinata_start_vox + #20926 #foodtray_greet_voxnffod + #20509 #Vox_cheeruper_pos + #20725 #vox_piledrivera + #20726 #vox_piledriverb + #20476 #Vox_backrubber_refused + #20012 #gem_pickaxe_lpc_vox + #24133 #door_vault_close + #24059 #bunkbed_bottom_getout + #24224 #pinata_swing_hita + #24087 #chalkb_write_final + #24225 #pinata_swing_hitb + #24226 #pinata_swing_hitc + #20025 #spades_deal_idlea_vox + #20051 #vox_game_draw_start + #20642 #vox_groovyb_loopa + #20643 #vox_groovyb_loopb + #20644 #vox_groovyb_loopc + #20501 #vox_brow_wipe + #24304 #ui_call_rec_first + #20382 #chalkb_writef_vox + #24222 #pinata_coins_grab + #24130 #dingbat_kiss + #24050 #blackjack_cards_deal + #20078 #vox_repair_mbull_start + #20659 #vox_heartee_pullout + #20048 #vox_food_give_seated + #20090 #vox_talk_normal + #20772 #vox_sit_bored_sigh + #20092 #vox_teleport_insideout + #20080 #vox_repair_mirror_stop + #24157 #gamecomp_target_full + #20594 #Vox_fight_sissyer_start + #24281 #slotb_lose + #20538 #vox_dance_hiphop + #20433 #tmarketer_react_good_vox + #20867 #vox_cheerupee_pup_pos + #20767 #vox_sigh_weak + #20705 #vox_laugh_happy + #20804 #vox_tradee_rejecta_start + #20734 #Vox_proposer_tso + #20554 #Vox_dancee_slow_stop + #24198 #jobobject_sequencea + #24199 #jobobject_sequenceb + #17835 #vox_game_cont_wina + #24200 #jobobject_sequencec + #17836 #vox_game_cont_winb + #20034 #tutorial_lpc_vox + #20623 #vox_game_cont_idlea + #20624 #vox_game_cont_idleb + #20625 #vox_game_cont_idlec + #20599 #vox_fiver_react_bad + #20405 #map_reader_loopa_vox + #20073 #vox_repair_exmach_stop + #20155 #roulette_spin + #24266 #repair_guitar_start + #20794 #Vox_tease_stand + #24272 #repair_typew_lp + #24234 #pizza_door_open + #20379 #chalkb_writec_vox + #20717 #vox_peck_acceptee + #24242 #pizza_prep_cheese + #20024 #spades_cards_play_vox + #20816 #Vox_whisper_secret + #24131 #door_turnstile_close + #20590 #Vox_fight_sissyee_cower + #24108 #Ctrunk_Scifi_Button + #20549 #vox_dance_tangoee + #24135 #door_vault_open + #20755 #vox_scream_primal + #20074 #vox_repair_gnome_start + #24055 #blackjack_chip_place + #20718 #vox_peck_accepter + #20533 #vox_dance_discoee + #17817 #vpoker_repair_start + #24088 #chalkb_writea + #20430 #tmarketee_react_good_vox + #24089 #chalkb_writeb + #20513 #vox_coin_flippee_lose + #24306 #ui_call_send + #24090 #chalkb_writec + #17820 #lot_enter + #20040 #vox_chin_ticklee_back + #24091 #chalkb_writed + #20550 #vox_dance_tangoer + #24092 #chalkb_writee + #24057 #blackjack_hitme + #24093 #chalkb_writef + #20463 #vox_arrogc_loopb + #24094 #chalkb_writeg + #20531 #vox_dance_belly + #20464 #vox_arrogc_loopc + #24095 #chalkb_writeh + #17855 #scoreboard_repair + #17796 #gem_pickaxe_get + #20375 #chalkb_scratch_vox + #24075 #cardtable_dealer_pickup + #20534 #vox_dance_discoer + #17798 #gem_pickaxe_lpb_sfx + #20923 #foodtray_loop_voxnffod + #20584 #vox_evil_laugh + #24151 #game_vote_scribblea + #24152 #game_vote_scribbleb + #24058 #bunkbed_bottom_getin + #20880 #vox_puppeter_get_petted + #24211 #mic_tap + #24175 #jar_seal + #24052 #blackjack_cards_pickup + #20510 #Vox_cheeruper_start + #24227 #pinata_swing_missa + #20667 #vox_inlovea_loopa + #20359 #map_nav_loopa + #24228 #pinata_swing_missb + #20668 #vox_inlovea_loopb + #20471 #vox_backcracker_accept + #20153 #roulette_bet_place_sfx + #20360 #map_nav_loopb + #24229 #pinata_swing_missc + #20669 #vox_inlovea_loopc + #20361 #map_nav_loopc + #20621 #vox_friend_makee + #20632 #Vox_giftgiver + #20404 #map_reader_defeated_vox + #24136 #eyepoke + #20542 #vox_dance_jitteree + #24297 #tmarket_paper_get + #20791 #Vox_tantrum + #20043 #vox_chin_tickler_bat + #24269 #repair_mirror_lp + #24267 #repair_mbull_lp + #20796 #vox_ticklee_extreme + #20740 #vox_roomatee_invite + #20649 #vox_grovelee_deny_tso + #20750 #vox_sadc_loopa + #20622 #vox_friend_maker + #20751 #vox_sadc_loopb + #24253 #repair_can_lp + #20752 #Vox_sadc_loopc + #20806 #vox_trader_accept_loop + #20691 #vox_kneel_armpump + #20537 #vox_dance_groove + #20385 #jobbody_fail_vox + #24270 #repair_piano_lp + #20428 #tipjar_putt_vox + #20543 #vox_dance_jitterer + #20425 #tipjar_getf_vox + #20079 #vox_repair_mbull_stop + #20401 #map_nav_loopc_vox + #24196 #jobobject_loop + #20666 #Vox_hugger_refuse_tso + #20397 #map_nav_celebrate_vox + #24043 #Backdrop_start + #20069 #vox_repair_dcage_start + #17810 #tutorial_lpb_sfx + #20587 #vox_eyepokee + #20445 #vox_airkisser_accept + #20083 #vox_repair_typew_start + #20583 #vox_entrance + #20416 #Pinata_swinghb_vox + #20682 #vox_joke_tell + #20521 #Vox_compliment_stand + #20603 #vox_flex_musclea + #20133 #npc_bj_cards_dhit_vox + #20099 #vox_flex_muscleb + #20046 #vox_flex_musclec + #24292 #tapdance_feet + #20683 #vox_juggler_stop + #20095 #vpoker_lpb_vox + #24079 #cardtable_dealer_start + #24231 #pizza_appear_open + #20700 #vox_kneel_pout + #20489 #vox_bored_check_watch + #20786 #vox_stand_laugha + #20787 #vox_stand_laughb + #20441 #vox_afraidc_loopa + #20442 #vox_afraidc_loopb + #24308 #ui_letter_rec + #20368 #blackjack_hitme_vox + #20443 #vox_afraidc_loopc + #17795 #gem_break + #17807 #spades_pickup_hand_sfx + #20664 #Vox_huggee_refuse_tso + #24303 #ui_call_q_full + #24105 #crackback_crack + #20021 #roulette_watcha_vox + #24248 #repair_bkcase_lp + #24124 #Death_possess_in + #20626 #vox_giddy + #24263 #repair_exmach_lp + #24181 #joblogic_getpaper + #24188 #joblogic_typeswitch + #24168 #hatrack_hat_take + #20016 #gem_start_vox + #24258 #repair_comp_lp + #20769 #Vox_sing_serenade_short + #20135 #npc_bj_chip_give_vox + #20797 #vox_ticklee_wetself + #24164 #giddy_footsteps + #20362 #coin_catch + #20561 #vox_death_marblee_rej + #20081 #vox_repair_piano_start + #20154 #roulette_pay_sfx + #24295 #tipjar_money_putf + #20418 #Pinata_swingma_vox + #24192 #jobmech_pipe_break + #20076 #vox_repair_guitar_start + #20552 #vox_dancee_reject + #24123 #Death_mhead_remove + #20658 #vox_headspin + #20370 #chalkb_erasea_vox + #20686 #Vox_kissee_sweet + #20546 #vox_dance_sultry_acceptee + #20516 #vox_coin_flipper_start + #24296 #tipjar_money_putt + #20741 #vox_roomatee_kickout + #20014 #gem_repair_start_vox + #17803 #spades_cards_stop_sfx + #20449 #vox_angryb_loopa + #24261 #repair_easel_lp + #20450 #vox_angryb_loopb + #20927 #vox_hotdog_choose + #20451 #vox_angryb_loopc + #24169 #heart_pullout + #24282 #slotb_wheels_spin + #20665 #Vox_hugger_good_tso + #20721 #vox_peck_rejectee + #20030 #spades_score_lp_vox + #24257 #repair_chess_lp + #24069 #cannonball_load + #20518 #Vox_compliment_appreciate + #20687 #Vox_kisser_passion_tso + #20470 #vox_backcrackee_reject + #20866 #vox_cheeruper_pup_neg + #20760 #vox_shakefist + #20367 #blackjack_cards_check_vox + #20722 #vox_peck_rejecter + #20798 #vox_tickler_ext_reject + #20475 #Vox_backrubbee_stop + #20713 #vox_model + #20431 #tmarketee_sell_vox + #17813 #vpoker_lpa_sfx + #20638 #vox_greet_wave_tso + #20515 #vox_coin_flipper_lose + #20042 #vox_chin_tickler_back + #20423 #pizza_repaira_vox + #20412 #Pinata_celebrate_vox + #20779 #vox_sit_sigh + #20598 #vox_fivee_reject + #17838 #vox_game_host_read + #24166 #hat_head_on + #20474 #Vox_backrubbee_refused + #20411 #logo_intel_filtered + #24182 #joblogic_handlepull + #20685 #Vox_kissee_reject + #20071 #vox_repair_easel_stop + #24165 #hat_head_off + #24117 #Death_fhead_dribble + #20692 #vox_kneel_booa + #20693 #vox_kneel_boob + #20694 #vox_kneel_booc + #20098 #vox_muscle_kiss + #20636 #vox_gmoneyer_accept + #20702 #vox_kneel_wipebrow + #20801 #vox_tradee_accept_loop + #20784 #Vox_smokears + #20729 #vox_primp_male + #20567 #vox_death_spookee + #20681 #vox_joke_respond_pos + #20091 #vox_talk_subtle + #24112 #Ctrunk_wlockerq_close + #20077 #vox_repair_mbull_lp + #24042 #backdrop_pull + #20795 #vox_ticklee_ext_reject + #20075 #vox_repair_gnome_stop + #20084 #vox_repair_typew_stop + #24096 #click_heels + #20633 #vox_giggle + #24251 #repair_break_metal + #20780 #vox_sit_wipebrow + #17832 #vox_death_spooker + #20684 #vox_kickfloor + #19455 #foot_stomp + #24116 #Death_eyeball_remove + #24244 #pizza_prep_mush + #20134 #npc_bj_win_declare_vox + #20017 #gem_stop_vox + #20606 #Vox_flirt_kneel + #24062 #bunkbed_top_getout + #20410 #logo_intel + #20708 #vox_lookatme + #20387 #jobbody_paperget_vox + #20393 #jobmech_pondera_vox + #24174 #jar_put_crate + #20781 #vox_sit_woohoo + #20579 #vox_dipkissee + #24161 #gametimer_buzzer + #20364 #vpoker_repair_stop + #17840 #vox_sit_bored_stretch + #24139 #flower_stomp + #24193 #jobmech_trans_bang + #20358 #sissy_slap_shoulders + #24060 #Bunkbed_step_wood + #20026 #spades_deal_idleb_vox + #20070 #vox_repair_easel_start + #20492 #vox_boredb_loopa + #20493 #vox_boredb_loopb + #20494 #vox_boredb_loopc + #20580 #vox_dipkisser + #17828 #vox_death_marbler_rej + #24054 #blackjack_chip_give + #20036 #vox_bunkbed_bottom_getup + #20386 #jobbody_getin_vox + #20757 #Vox_scream_startled + #20383 #chalkb_writeg_vox + #20650 #vox_groveler_accept_tso + #24134 #door_vault_lock + #24073 #cardtable_dealer_brush + #24114 #Death_eyeball_collide + #24246 #Puzzle_twoper_close + #20639 #vox_groovya_loopa + #20640 #vox_groovya_loopb + #20641 #vox_groovya_loopc + #20716 #vox_nails_file + #20350 #fridge_med_loop + #20044 #vox_dance_popstar + #20487 #Vox_blowkiss + #20479 #vox_benchpresseea + #19890 #gem_pickaxe_lpa_vox + #20480 #vox_benchpresseeb + #24279 #sissy_slap_head + #20648 #vox_grovelee_accept_tso + #17812 #tutorial_start + #20486 #Vox_berate_stand + #20627 #Vox_gift_appreciatee + #20922 #foodtray_start_voxnffod + #24275 #scoreboard_button + #20406 #map_reader_loopb_vox + #24239 #pizza_oven_repaira + #20028 #spades_deal_start_vox + #24240 #pizza_oven_repairb + #24238 #pizza_oven_put + #24241 #pizza_oven_repairc + #17823 #balloons_pop + #20380 #chalkb_writed_vox + #20628 #Vox_gift_appreciater + #20808 #vox_trader_acceptb_start + #17826 #vox_death_guts + #24126 #Death_spooka + #24113 #ctrunk_wlockerq_open + #20391 #joblogic_success_vox + #24127 #Death_spookb + #20771 #vox_sit_boo + #20657 #vox_happy_woohoo + #24104 #Conveyer_on + #17829 #vox_death_mheadless + #20539 #vox_dance_hustlee + #24063 #butt_kick + #20466 #vox_attackee_win + #24106 #Ctrunk_mlocker_close + #20105 #fruit_pot_stir + #24197 #jobobject_paper_appear + #17842 #vox_dance_tapfunk + #20730 #Vox_proposee_no + #20068 #vox_repair_comp_stop + #20085 #vox_sign_write_stop + #20635 #vox_gmoneyee_reject + #20087 #vox_talk_eng_sports + #24220 #piledrivea + #24221 #piledriveb + #20540 #vox_dance_hustler + #20082 #vox_repair_piano_stop + #17799 #gem_pickaxe_lpc_sfx + #20591 #Vox_fight_sissyee_start + #24076 #cardtable_dealer_putdown + #20033 #tutorial_lpa_vox + #20349 #fridge_cheap_loop + #24260 #repair_dcage_lp + #24162 #gametimer_repair_lp + #20477 #Vox_backrubber_stop + #20015 #gem_repair_stop_vox + #24307 #ui_letter_q_full + #20460 #vox_arrogb_loopa + #24178 #jobbody_pull_lever + #20461 #vox_arrogb_loopb + #20710 #vox_meltdown + #20462 #vox_arrogb_loopc + #20525 #vox_complimentor_tso + #20377 #chalkb_writea_vox + #20763 #vox_shove_blockee + #20731 #Vox_proposee_think + #17804 #spades_collect_cards_sfx + #20678 #Vox_insult_stand + #20673 #vox_inlovec_loopb + #20674 #vox_inlovec_loopc + #24143 #fruit_pot_put + #24148 #game_piece_get + #20782 #vox_slapfightee + #18377 #trashcompact_close + #20483 #vox_berate + #20600 #vox_fiver_react_good + #20615 #vox_foot_stomp_misseea + #20616 #vox_foot_stomp_misseeb + #24217 #phone_ring_pizza + #20062 #vox_repair_can_start + #20764 #vox_shove_blocker + #24167 #hatrack_hat_put + #20097 #vpoker_repair_vox + #24265 #repair_guitar_lp + #20783 #vox_slapfighter + #24138 #fiver_clap + #20774 #vox_sit_laugha + #20775 #vox_sit_laughb + #24142 #fruit_chop + #20776 #vox_sit_laughc + #17825 #vox_death_fheadless + #20747 #vox_sadb_loopa + #20038 #vox_bunkbed_top_getup + #20029 #spades_deal_stop_vox + #20748 #vox_sadb_loopb + #20749 #vox_sadb_loopc + #20737 #vox_pull_hair + #17856 #dice_repair + #17811 #tutorial_lpc_sfx + #20629 #Vox_gift_stompee + #20564 #vox_death_possee + #20535 #vox_dance_freakee + #20819 #vox_worship + #20792 #Vox_tease_kneel + #20417 #Pinata_swinghc_vox + #20520 #vox_compliment_sit + #24080 #cardtable_dealer_stop + #20052 #vox_game_gest + #20485 #Vox_berate_sit + #20597 #vox_fivee_react_good + #20630 #Vox_gift_stomper + #20541 #vox_dance_jazz + #17830 #vox_death_posser + #20096 #vpoker_lpc_vox + #20536 #vox_dance_freaker + #17802 #spades_cards_play_sfx + #20045 #vox_eat_seated + #20508 #Vox_cheerupee_start + #20560 #vox_death_marblee_acc + #24237 #pizza_oven_buzzer + #20864 #vox_cheeruper_pup_start + #20363 #moneyee_rub_hands + #20770 #vox_sit_armpump + #20675 #vox_insult + #20057 #vox_gametimer_repair_start + #24212 #money_count + #20022 #roulette_watchb_vox + #24250 #repair_break_glass + #20152 #roulette_bet_change + #20754 #vox_scoreboard_repair + #24153 #gamecomp_ball_collide + #20399 #map_nav_loopa_vox + #20613 #Vox_flyhugger_pos_tso + #20556 #vox_dancer_invite_tso + #24186 #joblogic_type + #20875 #vox_cheerupee_pup_neg + #20438 #vox_afraidb_loopa + #20439 #vox_afraidb_loopb + #20072 #vox_repair_exmach_start + #20440 #vox_afraidb_loopc + #17800 #gem_repair_lp + #20353 #sting_death_fish + #24284 #slotc_lose + #20619 #vox_foot_stompee + #20881 #vox_puppetee_pet + #20526 #vox_cry + #24173 #jar_get_pot + #20595 #Vox_fight_sissyer_taunt + #24121 #Death_guts_remove + #24144 #Game_comp_buzzer + #20758 #vox_sexy_fgrowl + #24298 #tmarket_paper_put + #20532 #vox_dance_break + #20607 #Vox_flirt_male + #20374 #chalkb_frustrate_vox + #20468 #vox_attacker_win + #20620 #vox_foot_stomper + #20419 #Pinata_swingmb_vox + #20589 #vox_fart + #20060 #vox_repair_bkcase_lp + #24170 #heart_stomp + #24101 #compact_open + #20585 #vox_eyepoke_blockee + #20765 #vox_shovee_tso + #20651 #vox_groveler_deny_tso + #20555 #vox_dancee_stop + #17821 #lot_exit + #24259 #repair_comp_start + #20392 #jobmech_fail_vox + #20761 #vox_shandshakee + #20058 #vox_hat_admire + #20372 #chalkb_euraka_vox + #20802 #vox_tradee_acceptb_start + #20086 #vox_talk_angry + #20586 #vox_eyepoke_blocker + #20696 #vox_kneel_bored_stretch + #20061 #vox_repair_can_lp + #24277 #sign_write_lp + #20402 #map_nav_start_vox + #17837 #vox_game_host_idleb + #20762 #vox_shandshaker + #20356 #vox_belch + #20697 #vox_kneel_cry + #20050 #vox_game_buzzer_read_lp + #20506 #Vox_catcall + #20523 #vox_complimentee_tso + #24150 #game_vote_ballot + #24147 #game_draw_write + #20811 #vox_trader_rejectb_start + #20756 #vox_scream_pup + #20753 #vox_salute_herioc + #20545 #vox_dance_scat + #20373 #chalkb_finale_vox + #20446 #vox_angrya_loopa + #20447 #vox_angrya_loopb + #20653 #vox_handkiss_rejectee + #20448 #vox_angrya_loopc + #20473 #vox_backflip + #20519 #Vox_compliment_kneel + #24278 #sissy_slap_hands + #20467 #vox_attacker_tso + #20723 #vox_piledriveea + #20724 #vox_piledriveeb + #18379 #magic_repair + #17814 #vpoker_lpb_sfx + #20426 #tipjar_gett_vox + #20424 #pizza_repairb_vox + #20654 #vox_handkiss_rejecter + #20703 #vox_kneel_woohoo + #24177 #jobbody_paper_slot + #24098 #coin_catch_slap + #24256 #repair_cboard_start + #24194 #JobObject_Conveyor_Loop + #24233 #pizza_door_close + #24072 #cardtable_cardscrape + #20351 #fridge_exp_loop + #20742 #vox_roomater_invite + #20032 #spades_score_stop_vox + #20773 #vox_sit_cry + #20514 #vox_coin_flippee_start + #24249 #repair_break_elec + #20695 #vox_kneel_bored_sigh + #24145 #game_draw_draw + #17827 #vox_death_marbler_acc + #20421 #pizza_order_vox + #20414 #Pinata_swingf_vox + #20612 #Vox_flyhugger_neg_tso + #20465 #vox_attackee_lose + #20524 #vox_complimenter_reject_tso + #20661 #vox_hebejebe_a + #24283 #slotb_win + #17816 #vpoker_repair_lp + #20715 #vox_nails_blowon + #24187 #joblogic_type_load + #24128 #Dice_button_push + #20422 #pizza_prep_vox + #20394 #jobmech_ponderb_vox + #20469 #vox_backcrackee_accept + #24176 #Jobbody_Light_Flash + #20738 #vox_rasp_tso + #20389 #jobbody_weary_vox + #17818 #vpoker_start + #24208 #map_read_rollup + #20739 #vox_refuse + #24115 #Death_eyeball_putback + #20019 #roulette_spin_start_vox + #20578 #vox_dice_repair + #20517 #vox_coinflip_talk + #20027 #spades_deal_idlec_vox + #24103 #Conveyer_off + #17808 #spades_score_lp_sfx + #24313 #ui_online_sim + #20088 #vox_talk_eng_vacation + #24254 #repair_can_stop + #24125 #Death_possess_out + #20384 #chalkb_writeh_vox + #20569 #vox_death_squarea + #20570 #vox_death_squareb + #20049 #vox_food_return_seated + #20571 #vox_death_squarec + #24061 #bunkbed_top_getin + #20572 #vox_death_squared + #20432 #tmarketer_react_bad_vox + #20522 #Vox_complimentee_reject_tso + #20573 #vox_death_squaree + #20766 #vox_shover_tso + #17831 #vox_death_revitalee + #20574 #vox_death_squaref + #20575 #vox_death_squareg + #20812 #vox_tude + #20576 #vox_death_squareh + #20577 #vox_death_squarei + #20490 #vox_boreda_loopa + #20434 #tmarketer_sell_vox + #20491 #vox_boreda_loopb + #24155 #gamecomp_hit_med + #24312 #ui_online_prop + #20596 #Vox_fist_shake + #20444 #vox_airkissee_accept + #24252 #repair_break_wood + #17824 #map_nav_defeated_vox + #24163 #gametimer_repair_start + #20645 #vox_groovyc_loopa + #20809 #vox_trader_reject_loop + #20646 #vox_groovyc_loopb + #20647 #vox_groovyc_loopc + #20709 #vox_make_enemy + #24285 #slotc_wheels_spin + #24056 #blackjack_chip_take + #24268 #repair_medcab_lp + #24074 #cardtable_dealer_deal + #20701 #vox_kneel_sigh + #24311 #ui_offline_sim + #20011 #gem_pickaxe_lpb_vox + #20427 #tipjar_putf_vox + #24077 #cardtable_dealer_shuffle + #20557 #vox_dancer_reject + #20407 #map_reader_loopc_vox + #20928 #vox_hotdog_receive + #24119 #Death_fhead_remove + #20018 #roulette_bet_place_vox + #20817 #vox_whyme_cry + #20390 #joblogic_fail_vox + #20348 #stove_bubble + #20381 #chalkb_writee_vox + #24191 #jobmech_pipe_bang + #20677 #Vox_insult_sit + #20376 #chalkb_think_vox + #24290 #soccer_score + #24081 #cardtable_dealer_unfold + #20527 #vox_ctrunk_app + #24245 #pizza_prep_pep + #20805 #vox_tradee_rejectb_start + #20047 #vox_food_get_seated + #24111 #ctrunk_wlocker_open + #24218 #piggyb_shakef + #20879 #vox_puppeter_converse + #20704 #vox_latin_steps + #17801 #gem_stop_sfx + #24180 #joblogic_fist_pound + #20698 #vox_kneel_laugha + #20699 #vox_kneel_laughb + #20728 #vox_primp_female + #20472 #vox_backcracker_reject + #20608 #Vox_flirt_sit + #20807 #vox_trader_accepta_start + #24070 #cannonball_pack + #24051 #blackjack_cards_hit + #24219 #piggyb_shaket + #20064 #vox_repair_cboard_start + #20089 #vox_talk_intense + #20601 #vox_fiver_start + #20102 #Door_stall_close + #19456 #vox_psychee + #20688 #Vox_kisser_reject + #20690 #vox_kissmyding + #24184 #joblogic_putpaper + #20777 #vox_sit_pout + #20498 #vox_break_enemy + #20877 #vox_puppeter_enta + #20878 #vox_puppeter_entb + #20511 #vox_chin_ticklee + #20378 #chalkb_writeb_vox + #24118 #Death_fhead_putback + #20662 #vox_heels_click + #20403 #map_reader_celebrate_vox + #20020 #vox_psycher + #20512 #vox_chin_tickler + #20611 #Vox_flyhuggee_pos_tso + #20065 #vox_repair_cboard_stop + #20457 #vox_arroga_loopa + #24183 #joblogic_pullpaper + #20458 #vox_arroga_loopb + #24102 #Conveyer_loop + #20459 #vox_arroga_loopc + #20528 #vox_ctrunk_dis + #20660 #vox_hearter_pullout + #20670 #vox_inloveb_loopa + #20671 #vox_inloveb_loopb + #20672 #vox_inloveb_loopc + #20789 #vox_talk_anim + #17797 #gem_pickaxe_lpa_sfx + #20484 #Vox_berate_kneel + #20865 #vox_cheeruper_pup_pos + #20529 #vox_ctrunk_rummagea + #24299 #tmarket_phone_get + #20530 #vox_ctrunk_rummageb + #20151 #roommate_poke + #20719 #vox_peck_psychee + #24247 #Puzzle_twoper_open + #17833 #vox_game_cont_losea + #17834 #vox_game_cont_loseb + #17806 #spades_deal_start_sfx + #20132 #npc_bj_cards_hit_vox + #20711 #vox_meyepokee + #24310 #ui_offline_prop + #20785 #vox_stand_boo + #20634 #vox_gmoneyee_accept + #17822 #roulette_pay_vox + #24137 #finger_snap + #20744 #vox_sada_loopa + #20720 #vox_peck_psycher + #20745 #vox_sada_loopb + #20056 #vox_game_vote_stop + #20876 #vox_puppeter_start + #20746 #vox_sada_loopc + #20481 #vox_benchpressera + #20482 #vox_benchpresserb + #20605 #Vox_flirt_female + #20712 #vox_meyepoker + #20054 #vox_game_vote_lp + #24273 #repair_typew_start + #20429 #tmarketee_react_bad_vox + #20544 #vox_dance_rap + #20023 #roulette_watchc_vox + #24223 #pinata_swing_final + #20063 #vox_repair_can_stop + #20706 #vox_listen_blowoff + #24172 #jar_fill_fruit + #20818 #vox_wiggle_sexy + #20707 #vox_listen_tso + #24086 #chalkb_hands_rub + #20400 #map_nav_loopb_vox + #24255 #repair_cboard_lp + #24171 #heart_throwdown + + + ; EENT + 69 + 69 + 78 + 84 +] + +BINARY +[ +;note_on equ 2 +;v1 equ 5 +;wait_samp equ 11 +;end equ 12 +;loop equ 32 + +Generic + note_on v1 + wait_samp + end + +GenericLooped + note_on v1 + wait_samp + loop + end + +GenericInterrupt + loadb interrupt 1 + note_on v1 + wait_samp + end + +; Heeeeeere's a useful one. v1 and v2 are female and male hitlist ID's, respectively +; This track chooses the smartlist based on gender, picks a patch from that smartlist, +; plays it. It also kills anything else the instance (person) is saying. +; New! Now works for kids! v3 = kid smartlist + +generic_fm_smartlists + ; Kill this actor's vocals + seqgroup_kill Instance + + ; If it's male then redo it for male + loadb v7 0 ;v7 = field ID (0 = gender) + getsrcdatafield v7 arg1 v7 ;arg1 = source ID + ; if gender is 0 then use v1 is correct (male) + ifeq #_gotit + ; otherwise set v1 to female list + set v1 v2 + ; if gender == 1 then v1 is correct (female) + loadb v6 1 + cmp v7 v6 + ifeq #_gotit + ; it's a kid - set v1 to kid smartlist + set v1 v3 +_gotit + ; v1 = smartlist id + test v1 + ifeq #generic_fm_smartlists_end + smart_setlist v1 + smart_choose v1 + set patch v1 + note_on v1 + wait_samp +generic_fm_smartlists_end + end +] + diff --git a/Tools/hitutils/elf.dat b/Tools/hitutils/elf.dat new file mode 100644 index 0000000..fcf6fa7 Binary files /dev/null and b/Tools/hitutils/elf.dat differ diff --git a/Tools/hitutils/elf.txt b/Tools/hitutils/elf.txt new file mode 100644 index 0000000..138edf9 --- /dev/null +++ b/Tools/hitutils/elf.txt @@ -0,0 +1,131 @@ +* Elf32_Word sh_name: +* Elf32_Word sh_type: +* Elf32_Word sh_flags: +* Elf32_Addr sh_addr: +* Elf32_Off sh_offset: (?? ?? ?? ??) +* Elf32_Word sh_size: (?? ?? ?? ??) +* Elf32_Word sh_link: +* Elf32_Word sh_info: +* Elf32_Word sh_addralign: 1 (01 00 00 00) +* Elf32_Word sh_entsize: + +ELF Header: +* e_ident: + * Elf32_Word EI_MAG0: (7F 45 4C 46) + * unsigned char EI_CLASS: ELFCLASS32 (01) + * unsigned char EI_DATA: ELFDATA2LSB (01) + * unsigned char EI_VERSION: EV_CURRENT (01) + * unsigned char EI_PAD[9]: (00 00 00 00 00 00 00 00 00) +* Elf32_Half e_type: ET_REL (01 00) +* Elf32_Half e_machine: EM_NONE (00 00) +* Elf32_Word e_version: EV_CURRENT (01 00 00 00) +* Elf32_Addr e_entry: 0 (00 00 00 00) +* Elf32_Off e_phoff: 0 (00 00 00 00) +* Elf32_Off e_shoff: 64 (40 00 00 00) +* Elf32_Word e_flags: 0x00000001 (01 00 00 00) +* Elf32_Half e_ehsize: 52 (34 00) +* Elf32_Half e_phentsize: 0 (00 00) +* Elf32_Half e_phnum: 0 (00 00) +* Elf32_Half e_shentsize: 40 (28 00) +* Elf32_Half e_shnum: 6 (06 00) +* Elf32_Half e_shstrndx: 2 (02 00) +* unsigned char padding[12] = (00 00 00 00 00 00 00 00 00 00 00 00) + +Section headers +0 (""): All 0s +1 (".text"): +* Elf32_Word sh_name: 1 (01 00 00 00) +* Elf32_Word sh_type: SHT_PROGBITS (01 00 00 00) +* Elf32_Word sh_flags: SHF_ALLOC | SHF_EXECINSTR (06 00 00 00) +* Elf32_Addr sh_addr: 0 (00 00 00 00) +* Elf32_Off sh_offset: (?? ?? ?? ??) +* Elf32_Word sh_size: (?? ?? ?? ??) +* Elf32_Word sh_link: 0 (00 00 00 00) +* Elf32_Word sh_info: 0 (00 00 00 00) +* Elf32_Word sh_addralign: 1 (01 00 00 00) +* Elf32_Word sh_entsize: 0 (00 00 00 00) +2 (".shstrtab"): +* Elf32_Word sh_name: 7 (07 00 00 00) +* Elf32_Word sh_type: SHT_STRTAB (03 00 00 00) +* Elf32_Word sh_flags: 0 (00 00 00 00) +* Elf32_Addr sh_addr: 0 (00 00 00 00) +* Elf32_Off sh_offset: (?? ?? ?? ??) +* Elf32_Word sh_size: (?? ?? ?? ??) +* Elf32_Word sh_link: 0 (00 00 00 00) +* Elf32_Word sh_info: 0 (00 00 00 00) +* Elf32_Word sh_addralign: 1 (01 00 00 00) +* Elf32_Word sh_entsize: 0 (00 00 00 00) +3 (".symtab"): +* Elf32_Word sh_name: 17 (11 00 00 00) +* Elf32_Word sh_type: SHT_SYMTAB (02 00 00 00) +* Elf32_Word sh_flags: 0 (00 00 00 00) +* Elf32_Addr sh_addr: 0 (00 00 00 00) +* Elf32_Off sh_offset: (?? ?? ?? ??) +* Elf32_Word sh_size: (?? ?? ?? ??) +* Elf32_Word sh_link: 4 (04 00 00 00) +* Elf32_Word sh_info: 5 (05 00 00 00) +* Elf32_Word sh_addralign: 1 (01 00 00 00) +* Elf32_Word sh_entsize: 16 (10 00 00 00) +4 (".strtab"): +* Elf32_Word sh_name: 25 (19 00 00 00) +* Elf32_Word sh_type: SHT_STRTAB (03 00 00 00) +* Elf32_Word sh_flags: 0 (00 00 00 00) +* Elf32_Addr sh_addr: 0 (00 00 00 00) +* Elf32_Off sh_offset: (?? ?? ?? ??) +* Elf32_Word sh_size: (?? ?? ?? ??) +* Elf32_Word sh_link: 0 (00 00 00 00) +* Elf32_Word sh_info: 0 (00 00 00 00) +* Elf32_Word sh_addralign: 1 (01 00 00 00) +* Elf32_Word sh_entsize: 0 (00 00 00 00) +5 (".rel.text"): +* Elf32_Word sh_name: 33 (21 00 00 00) +* Elf32_Word sh_type: SHT_REL (09 00 00 00) +* Elf32_Word sh_flags: 0 (00 00 00 00) +* Elf32_Addr sh_addr: 0 (00 00 00 00) +* Elf32_Off sh_offset: (?? ?? ?? ??) +* Elf32_Word sh_size: (?? ?? ?? ??) +* Elf32_Word sh_link: 3 (03 00 00 00) +* Elf32_Word sh_info: 1 (01 00 00 00) +* Elf32_Word sh_addralign: 1 (01 00 00 00) +* Elf32_Word sh_entsize: 8 (08 00 00 00) + +Symbol format: (4+4+4+1+1+2= 16 bytes) +Undefined symbol: +* Elf32_Word st_name: 0 (00 00 00 00) +* Elf32_Addr st_value: 0 (00 00 00 00) +* Elf32_Word st_size: 0 (00 00 00 00) +* unsigned char st_info: 0 (00) +* unsigned char st_other: 0 (00) +* Elf32_Half st_shndx: 0 (00 00) +Source file symbol: +* Elf32_Word st_name: 1 (01 00 00 00) +* Elf32_Addr st_value: 0 (00 00 00 00) +* Elf32_Word st_size: 0 (00 00 00 00) +* unsigned char st_info: ELF32_ST_INFO(STB_LOCAL, STT_FILE) (04) +* unsigned char st_other: 0 (00) +* Elf32_Half st_shndx: SHN_ABS (f1 ff) +Text section symbol: +* Elf32_Word st_name: 0 (00 00 00 00) +* Elf32_Addr st_value: 0 (00 00 00 00) +* Elf32_Word st_size: 0 (00 00 00 00) +* unsigned char st_info: ELF32_ST_INFO(STB_LOCAL, STT_SECTION) (03) +* unsigned char st_other: 0 (00) +* Elf32_Half st_shndx: 1 (01 00) +Undefined symbol: +* Elf32_Word st_name: (?? ?? ?? ??) +* Elf32_Addr st_value: 0 (00 00 00 00) +* Elf32_Word st_size: 0 (00 00 00 00) +* unsigned char st_info: ELF32_ST_INFO(STB_GLOBAL, STT_FUNC) (12) +* unsigned char st_other: 0 (00) +* Elf32_Half st_shndx: 0 (00 00) +Defined symbol: +* Elf32_Word st_name: (?? ?? ?? ??) +* Elf32_Addr st_value: (?? ?? ?? ??) +* Elf32_Word st_size: 0 (00 00 00 00) +* unsigned char st_info: ELF32_ST_INFO(STB_GLOBAL, STT_FUNC) (12) +* unsigned char st_other: 0 (00) +* Elf32_Half st_shndx: 1 (01 00) + +Relocation format: (4+4=8) +* Elf32_Addr r_offset: (?? ?? ?? ??) +* Elf32_Word r_info: ELF32_R_INFO(?, R_386_PC32) (?? ?? ?? ??) \ No newline at end of file diff --git a/Tools/hitutils/hitasm.c b/Tools/hitutils/hitasm.c index 50dcb8b..b79b5c5 100644 --- a/Tools/hitutils/hitasm.c +++ b/Tools/hitutils/hitasm.c @@ -16,17 +16,605 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include +#include #include +#include +#include +#include +#include "hitutils.h" + +static uint8_t ObjectHeader[] = { + 0x7F, 0x45, 0x4C, 0x46, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, + 0x06, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00 +}; + +enum { + txt, out, filecount +}; + +typedef struct { + uint8_t * Data; + size_t Position; + size_t Size; + char * Name; +} ByteWriterContext; + +static void bw_expand(ByteWriterContext *bwc){ + bwc->Data = realloc(bwc->Data, (bwc->Size <<= 1)); + if(!bwc->Data) + Shutdown_M("%sCould not allocate memory for %s section.\n", "hitasm: Error: ", bwc->Name); +} + +static void bw_write32(ByteWriterContext *bwc, uint32_t value){ + if(bwc->Size-bwc->Position < 4) + bw_expand(bwc); + write_uint32(bwc->Data+bwc->Position, value); + bwc->Position += 4; +} + +static void bw_write8(ByteWriterContext *bwc, uint8_t value){ + if(bwc->Size-bwc->Position < 1) + bw_expand(bwc); + bwc->Data[bwc->Position] = value; + bwc->Position += 1; +} + +static void bw_write_memory(ByteWriterContext *bwc, const uint8_t *ptr, size_t size){ + while(bwc->Size-bwc->Position < size) + bw_expand(bwc); + do bwc->Data[bwc->Position++] = *ptr++; + while(--size); +} + +static void bw_write_string(ByteWriterContext *bwc, const char *string){ + do bw_write8(bwc, *string); + while(*string++); +} + +typedef struct { + char * Token; + size_t Line, NextLine; + size_t Col, NextCol; + int GaveLastToken; + ByteReaderContext brc; +} ParserContext; + +enum { + TK_CROSSLINES = 1, + CN_LABELONLY = 1 +}; + +static FILE *hFile = NULL; +static char *path[filecount] = {NULL}; +static uint8_t *data[filecount] = {NULL}; +static ByteWriterContext TextSection = {0,0,1024,"text"}; +static ByteWriterContext SymbolTable = {0,0,1024,"symtab"}; +static ByteWriterContext StringTable = {0,0,1024,"strtab"}; +static ByteWriterContext RelocationTable = {0,0,1024,".rel.text"}; + +static uint8_t * add_symbol(const char * Name){ + bw_write32(&SymbolTable, StringTable.Position); + bw_write32(&SymbolTable, 0); + bw_write32(&SymbolTable, 0); + bw_write32(&SymbolTable, 18); + bw_write_string(&StringTable, Name); + return SymbolTable.Data + SymbolTable.Position - 16; +} + +static uint8_t * find_symbol_by_name(const char * Name, uint32_t * SymbolIndex){ + uint32_t p; + for(p=48; p>4; + return SymbolTable.Data + p; + } + } + + if(SymbolIndex) *SymbolIndex = p>>4; + return NULL; +} + +static __inline int whitespace(const uint8_t *Data){ + return (Data[0] == ' ' || Data[0] == '\t' || Data[0] == '\r' || Data[0] == '\n' || Data[0] == '\0'); +} + +static __inline int comment(const uint8_t *Data){ + return (Data[0] == ';' || (Data[0] == '#' && whitespace(Data+1))); +} + +static int parser_next_token(ParserContext *pc, int CrossLines){ + if(!pc->brc.Size) return 0; + + if(pc->GaveLastToken){ + pc->GaveLastToken = 0; + /* find the start of the next token */ + while(1){ + if(whitespace(pc->brc.Data)){ + if(pc->brc.Data[0] == '\n'){ + pc->NextLine++; pc->NextCol = 1; + }else if(pc->brc.Data[0] == '\t'){ + pc->NextCol += 4 - ((pc->NextCol-1)%4); + }else{ + pc->NextCol++; + } + }else if(comment(pc->brc.Data)){ + /* skip to the end of the line */ + pc->NextLine++; pc->NextCol = 1; + do { + if(!--pc->brc.Size) return 0; + pc->brc.Data++; + } while(pc->brc.Data[0] != '\n'); + }else break; + + if(!--pc->brc.Size) return 0; + pc->brc.Data++; + } + } + if(!CrossLines && pc->Line != pc->NextLine) return 0; + pc->Token = (char*)pc->brc.Data; + pc->Line = pc->NextLine; + pc->Col = pc->NextCol++; + pc->GaveLastToken = 1; + + /* mark the end of this token with a null character */ + while(1){ + if(!--pc->brc.Size) return 1; + pc->brc.Data++; + + if(whitespace(pc->brc.Data)){ + if(pc->brc.Data[0] == '\n'){ + pc->NextLine++; pc->NextCol = 1; + }else if(pc->brc.Data[0] == '\t'){ + pc->NextCol += 4 - ((pc->NextCol-1)%4); + }else{ + pc->NextCol++; + } + break; + }else if(comment(pc->brc.Data)){ + /* skip to the end of the line */ + pc->NextLine++; pc->NextCol = 1; + do { + if(!--pc->brc.Size) return 1; + pc->brc.Data++; + } while(pc->brc.Data[0] != '\n'); + break; + }else pc->NextCol++; + } + pc->brc.Size--; + pc->brc.Data[0] = '\0'; + pc->brc.Data++; + + return 1; +} + +static __inline void verify_eol(ParserContext *pc){ + if(parser_next_token(pc, 0)) + Shutdown_M("%s:%u:%u: error: expected newline before '%s'\n", + path[txt], pc->Line, pc->Col, pc->Token); +} + +static void verify_name(const ParserContext *pc, const char *thistoken, const char *nexttoken){ + const char *Name; + for(Name = pc->Token; *Name; Name++) + if((Name == pc->Token || *Name < '0' || *Name > '9') + && (*Name < 'A' || *Name > 'Z') && (*Name < '_' || *Name > '_') && (*Name < 'a' || *Name > 'z')) + Shutdown_M("%s:%u:%u: error: expected %s before '%c'\n", + path[txt], pc->Line, pc->Col, (Name == pc->Token) ? thistoken : nexttoken, *Name); +} + +static __inline void parser_add_symbol(const ParserContext *pc){ + uint8_t * Symbol; + verify_name(pc, "label or integer constant", "newline"); + + /* we're using the ELF st_size field (offset 8) to hold the line number temporarily */ + Symbol = find_symbol_by_name(pc->Token, NULL); + if(Symbol){ + if(read_uint32(Symbol+4)) + Shutdown_M("%s:%u:%u: error: label '%s' redefined (previous definition at %s:%u:1)\n", + path[txt], pc->Line, pc->Col, pc->Token, path[txt], read_uint32(Symbol+8)); + }else Symbol = add_symbol(pc->Token); + + write_uint32(Symbol+4, TextSection.Position); + write_uint32(Symbol+8, pc->Line); +} + +static __inline void parser_add_reference(const ParserContext *pc){ + uint32_t SymbolIndex; + verify_name(pc, "label", "operand or newline"); + + if(!find_symbol_by_name(pc->Token, &SymbolIndex)) + add_symbol(pc->Token); + + bw_write32(&RelocationTable, TextSection.Position); + bw_write32(&RelocationTable, (SymbolIndex<<8)|0x02); +} + +static uint32_t read_integer(const ParserContext *pc, uint32_t maxval){ + unsigned long value; + char * endptr; + + if(pc->Token[0] == '-') + Shutdown_M("%s:%u:%u: error: integer constant '%s' may not be negative\n", + path[txt], pc->Line, pc->Col, pc->Token); + if(pc->Token[0] < '0' || pc->Token[0] > '9') + Shutdown_M("%s:%u:%u: error: expected integer constant before '%s'\n", + path[txt], pc->Line, pc->Col, pc->Token); + if(pc->Token[0] == '0' && (pc->Token[1] == 'x' || pc->Token[1] == '0' || pc->Token[1] == 'o')) + Shutdown_M("%s:%u:%u: error: illegal %s prefix '%s%c' on integer constant '%s'\n", + path[txt], pc->Line, pc->Col, pc->Token[1] == 'x' ? "hexadecimal" : "octal", + pc->Token[1] != '0' ? "0" : "", pc->Token[1], pc->Token); + + value = strtoul(pc->Token, &endptr, 10); + if(*endptr == '.') + Shutdown_M("%s:%u:%u: error: illegal floating point constant '%s'\n", + path[txt], pc->Line, pc->Col, endptr, pc->Token); + if(*endptr != '\0') + Shutdown_M("%s:%u:%u: error: illegal suffix '%s' on integer constant '%s'\n", + path[txt], pc->Line, pc->Col, endptr, pc->Token); + if(value > (unsigned long) maxval || errno == ERANGE) + Shutdown_M("%s:%u:%u: error: integer constant '%s' is out of range\n", + path[txt], pc->Line, pc->Col, pc->Token); + + return (uint32_t)value; +} + +static uint32_t read_constant(ParserContext *pc, int Type, uint32_t maxval){ + unsigned i; + if(pc->Token[0] == '#') /* note that the tokens "#" and "" will never be returned by the parser */ + pc->Token++; + + if((pc->Token[0] >= '0' && pc->Token[0] <= '9') || pc->Token[0] == '-' || pc->Token[0] == '.'){ + if(Type == CN_LABELONLY) + Shutdown_M("%s:%u:%u: error: explicit address '%s' is forbidden\n", + path[txt], pc->Line, pc->Col, pc->Token); + return read_integer(pc, maxval); + } + + verify_name(pc, "constant or label", "operand or newline"); + for(i=0; iToken)){ + if(Constants[i].Value > maxval) + Shutdown_M("%s:%u:%u: error: integer constant '%s' (%u) is out of range\n", + path[txt], pc->Line, pc->Col, pc->Token, Constants[i].Value); + return Constants[i].Value; + } + } + + if(maxval != 0xFFFFFFFF) + Shutdown_M("%s:%u:%u: error: address referenced by label '%s' is out of range\n", + path[txt], pc->Line, pc->Col, pc->Token); + parser_add_reference(pc); + return 0; +} + +static __inline uint8_t read_instruction(const ParserContext *pc, uint32_t *operands){ + uint8_t i; + verify_name(pc, "instruction", "operand or newline"); + + for(i=0; iToken, Instructions[i].Name)){ + *operands = Instructions[i].Operands; + return i+1; + } + } + + return 0; +} + +static __inline uint8_t read_variable(const ParserContext *pc, const variable_t *Variables, size_t VariableCount){ + unsigned i; + verify_name(pc, "variable", "operand or newline"); + + for(i=0; iToken)) + return Variables[i].Value; + + Shutdown_M("%s:%u:%u: error: unrecognized variable '%s'\n", + path[txt], pc->Line, pc->Col, pc->Token); + return 0; +} + +static void Shutdown(){ + unsigned i; + for(i=0; i.\n" + "hitutils is maintained by the Niotso project.\n" + "Home page: \n"); + return 0; + } + for(i=1; i<(unsigned)argc-1; i++){ + if(!strcmp(argv[i], "-ts1")) SimsVersion = VERSION_TS1; + else if(!strcmp(argv[i], "-tso")) SimsVersion = VERSION_TSO; + else if(!strcmp(argv[i], "-f")) overwrite = 1; + else if(i != (unsigned)argc-2){ + if(!strcmp(argv[i], "-o")) path[out] = argv[++i]; + else break; + } + else break; + } + path[txt] = argv[i]; + for(i=0; i= '0' && pc.Token[0] <= '9') || pc.Token[0] == '-' || pc.Token[0] == '.' + || pc.Token[0] == '#' || !(opcode = read_instruction(&pc, &operands))){ + /* declare bytes (db and dd pseudo-instructions) */ + do { + if(pc.Token[0] != '#') + bw_write8(&TextSection, read_integer(&pc, 0x000000FF)); + else + bw_write32(&TextSection, read_constant(&pc, 0, 0xFFFFFFFF)); + } while(parser_next_token(&pc, 0)); + continue; + }else{ + const char * InstructionName = pc.Token; + + printf("Instruction: %s\n", pc.Token); + bw_write8(&TextSection, opcode); + + for(i=0; (operands >>= 4) != 0; i++){ + int type = operands & 15; + const char *position[] = {"one","two","three","four"}; + + if(!parser_next_token(&pc, 0)){ + int j; + for(j=i+1; (operands >>= 4) != 0; j++); + Shutdown_M("%s:%u:%u: error: instruction '%s' wants %s operands but only %s supplied\n", + path[txt], pc.Line, pc.Col, pc.Token, InstructionName, position[j], position[i]); + } + + printf("Operand: %s\n", pc.Token); + + if(type == o_byte) + bw_write8(&TextSection, read_constant(&pc, 0, 0x000000FF)); + else if(type == o_dword) + bw_write32(&TextSection, read_constant(&pc, 0, 0xFFFFFFFF)); + else if(type == o_address) + bw_write32(&TextSection, read_constant(&pc, CN_LABELONLY, 0xFFFFFFFF)); + else if(type == o_variable) + bw_write8(&TextSection, read_variable(&pc, Variables, VariableCount)); + else if(type == o_jump){ + /* TODO: Change this */ + bw_write32(&TextSection, read_constant(&pc, CN_LABELONLY, 0xFFFFFFFF)); + } + } + } + } + + verify_eol(&pc); + } + + if(InBinary) + Shutdown_M("%s:%u:%u: error: expected ']' for end of BINARY section before end of file\n", + path[txt], pc.Line, pc.Col); + + for(i=48+8; i.\n" - "hitutils is maintained by the Niotso project.\n" - "Home page: \n"); return 0; } \ No newline at end of file diff --git a/Tools/hitutils/hitdump.c b/Tools/hitutils/hitdump.c index 571b58f..4c5423b 100644 --- a/Tools/hitutils/hitdump.c +++ b/Tools/hitutils/hitdump.c @@ -21,326 +21,20 @@ #include #include #include - -#ifndef min - #define min(x,y) ((x) < (y) ? (x) : (y)) -#endif -#ifndef max - #define max(x,y) ((x) > (y) ? (x) : (y)) -#endif - -#ifndef read_int32 - #define read_uint32(x) (unsigned)(((x)[0]<<(8*0)) | ((x)[1]<<(8*1)) | ((x)[2]<<(8*2)) | ((x)[3]<<(8*3))) - #define read_uint16(x) (unsigned)(((x)[0]<<(8*0)) | ((x)[1]<<(8*1))) -#endif - -static void Shutdown_M(const char * Message, ...); +#include "hitutils.h" enum { hsm, hot, evt, hit, out, filecount }; -enum { - VERSION_TS1 = 1, VERSION_TSO -}; - -#define OPERAND_BYTES(x) (x) -#define OPERAND(x, y) ((y)<<((x)*4+4)) -#define UNIMPLEMENTED ((uint32_t)~0) - -enum operand_t { - o_byte = 1, - o_dword, - o_address, - o_variable, - o_jump -}; - -typedef struct { - const char * Name; - uint32_t Operands; -} instruction_t; - -typedef struct { - const char * Name; - uint32_t Value; -} global_t; - -static const uint8_t HITHeader[] = {'H','I','T','!',0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,'T','R','A','X'}; - -static const instruction_t Instructions[] = { - {"note", UNIMPLEMENTED}, - {"note_on", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, - {"note_off", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, - {"loadb", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_byte)}, - {"loadl", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, - {"set", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"call", OPERAND_BYTES(4) | OPERAND(0, o_address)}, - {"return", OPERAND_BYTES(0)}, - {"wait", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, - {"callentrypoint", UNIMPLEMENTED}, - {"wait_samp", OPERAND_BYTES(0)}, - {"end", OPERAND_BYTES(0)}, - {"jump", OPERAND_BYTES(1) | OPERAND(0, o_jump)}, - {"test", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, - {"nop", OPERAND_BYTES(0)}, - {"add", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"sub", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"div", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"mul", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"cmp", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"less", UNIMPLEMENTED}, - {"greater", UNIMPLEMENTED}, - {"not", UNIMPLEMENTED}, - {"rand", OPERAND_BYTES(3) | OPERAND(0, o_variable) | OPERAND(1, o_variable) | OPERAND(2, o_variable)}, - {"abs", UNIMPLEMENTED}, - {"limit", UNIMPLEMENTED}, - {"error", UNIMPLEMENTED}, - {"assert", UNIMPLEMENTED}, - {"add_to_group", UNIMPLEMENTED}, - {"remove_from_group", UNIMPLEMENTED}, - {"get_var", UNIMPLEMENTED}, - {"loop", OPERAND_BYTES(0)}, - {"set_loop", OPERAND_BYTES(0)}, - {"callback", UNIMPLEMENTED}, - {"smart_add", UNIMPLEMENTED}, - {"smart_remove", UNIMPLEMENTED}, - {"smart_removeall", UNIMPLEMENTED}, - {"smart_setcrit", UNIMPLEMENTED}, - {"smart_choose", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, - {"and", UNIMPLEMENTED}, - {"nand", UNIMPLEMENTED}, - {"or", UNIMPLEMENTED}, - {"nor", UNIMPLEMENTED}, - {"xor", UNIMPLEMENTED}, - {"max", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, - {"min", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, - {"inc", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, - {"dec", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, - {"printreg", UNIMPLEMENTED}, - {"play_trk", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, - {"kill_trk", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, - {"push", UNIMPLEMENTED}, - {"push_mask", UNIMPLEMENTED}, - {"push_vars", UNIMPLEMENTED}, - {"call_mask", UNIMPLEMENTED}, - {"call_push", UNIMPLEMENTED}, - {"pop", UNIMPLEMENTED}, - {"test1", OPERAND_BYTES(0)}, - {"test2", OPERAND_BYTES(0)}, - {"test3", OPERAND_BYTES(0)}, - {"test4", OPERAND_BYTES(0)}, - {"ifeq", OPERAND_BYTES(4) | OPERAND(0, o_address)}, - {"ifne", OPERAND_BYTES(4) | OPERAND(0, o_address)}, - {"ifgt", OPERAND_BYTES(4) | OPERAND(0, o_address)}, - {"iflt", OPERAND_BYTES(4) | OPERAND(0, o_address)}, - {"ifge", OPERAND_BYTES(4) | OPERAND(0, o_address)}, - {"ifle", OPERAND_BYTES(4) | OPERAND(0, o_address)}, - {"smart_setlist", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, - {"seqgroup_kill", OPERAND_BYTES(1) | OPERAND(0, o_byte)}, - {"seqgroup_wait", UNIMPLEMENTED}, - {"seqgroup_return", OPERAND_BYTES(1) | OPERAND(0, o_byte)}, - {"getsrcdatafield", OPERAND_BYTES(3) | OPERAND(0, o_variable) | OPERAND(1, o_variable) | OPERAND(2, o_variable)}, - {"seqgroup_trkid", OPERAND_BYTES(2) | OPERAND(0, o_byte) | OPERAND(1, o_byte)}, - {"setll", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"setlt", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"settl", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"waiteq", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"waitne", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"waitgt", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"waitlt", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"waitge", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"waitle", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"duck", OPERAND_BYTES(0)}, - {"unduck", OPERAND_BYTES(0)}, - {"testx", UNIMPLEMENTED}, - {"setlg", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, - {"setgl", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, - {"throw", UNIMPLEMENTED}, - {"setsrcdatafield", OPERAND_BYTES(3) | OPERAND(0, o_variable) | OPERAND(1, o_variable) | OPERAND(2, o_variable)}, - {"stop_trk", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, - {"setchanreg", UNIMPLEMENTED}, - {"play_note", UNIMPLEMENTED}, - {"stop_note", UNIMPLEMENTED}, - {"kill_note", UNIMPLEMENTED}, - {"smart_index", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, - {"note_on_loop", OPERAND_BYTES(1) | OPERAND(0, o_variable)} -}; - -static const char *Registers[] = { - "arg0", - "arg1", - "arg2", - "arg3", - "arg4", - "v1", - "v2", - "v3", - "v4", - "v5", - "v6", - "v7", - "v8", - "h1", - "h2", - "h3", - "h4" -}; - -#define TSOGlobalCount 66 -static const global_t TSOGlobals[] = { - {"argstype", 0x10}, - {"trackdatasource", 0x11}, - {"patch", 0x12}, - {"priority", 0x13}, - {"vol", 0x14}, - {"extvol", 0x15}, - {"pan", 0x16}, - {"pitch", 0x17}, - {"paused", 0x18}, - {"fxtype", 0x19}, - {"fxlevel", 0x1a}, - {"duckpri", 0x1b}, - {"Is3d", 0x1c}, - {"IsHeadRelative", 0x1d}, - {"MinDistance", 0x1e}, - {"MaxDistance", 0x1f}, - {"X", 0x20}, - {"Y", 0x21}, - {"Z", 0x22}, - {"attack", 0x23}, - {"decay", 0x24}, - {"IsStreamed", 0x25}, - {"bufsizemult", 0x26}, - {"fade_dest", 0x27}, - {"fade_var", 0x28}, - {"fade_speed", 0x29}, - {"fade_on", 0x2a}, - {"Preload", 0x2b}, - {"isplaying", 0x2c}, - {"whattodowithupdate", 0x2d}, - {"tempo", 0x2e}, - {"target", 0x2f}, - {"ctrlgroup", 0x30}, - {"interrupt", 0x31}, - {"ispositioned", 0x32}, - {"AppObjectId", 0x34}, - {"callbackarg", 0x35}, - {"pitchrandmin", 0x36}, - {"pitchrandmax", 0x37}, - {"spl", 0x38}, - {"sem", 0x39}, - {"starttrackid", 0x3a}, - {"endtrackid", 0x3b}, - {"startdelay", 0x3c}, - {"fadeinspeed", 0x3d}, - {"fadeoutspeed", 0x3e}, - {"hitlist", 0x3f}, - {"SimSpeed", 0x64}, - {"test_g1", 0x65}, - {"test_g2", 0x66}, - {"test_g3", 0x67}, - {"test_g4", 0x68}, - {"test_g5", 0x69}, - {"test_g6", 0x6a}, - {"test_g7", 0x6b}, - {"test_g8", 0x6c}, - {"test_g9", 0x6d}, - {"main_songnum", 0x6e}, - {"main_musichitlistid", 0x6f}, - {"campfire_nexttrack", 0x70}, - {"campfire_busy", 0x71}, - {"main_duckpri", 0x7b}, - {"main_vol", 0x7c}, - {"main_fxtype", 0x7d}, - {"main_fxlevel", 0x7e}, - {"main_pause", 0x7f} -}; - -#define TS1GlobalCount 71 -static const global_t TS1Globals[] = { - {"priority", 0x11}, - {"vol", 0x12}, - {"extvol", 0x13}, - {"pan", 0x14}, - {"pitch", 0x15}, - {"paused", 0x16}, - {"fxtype", 0x17}, - {"fxlevel", 0x18}, - {"duckpri", 0x19}, - {"Is3d", 0x1a}, - {"IsHeadRelative", 0x1b}, - {"MinDistance", 0x1c}, - {"MaxDistance", 0x1d}, - {"X", 0x1e}, - {"Y", 0x1f}, - {"Z", 0x20}, - {"filter_type", 0x21}, - {"filter_cutoff", 0x22}, - {"filter_level", 0x23}, - {"attack", 0x24}, - {"decay", 0x25}, - {"IsStreamed", 0x26}, - {"BufSizeMult", 0x27}, - {"fade_dest", 0x28}, - {"fade_var", 0x29}, - {"fade_speed", 0x2a}, - {"Preload", 0x2b}, - {"IsLooped", 0x2c}, - {"fade_on", 0x2d}, - {"isplaying", 0x2e}, - {"source", 0x2f}, - {"patch", 0x32}, - {"WhatToDoWithUpdate", 0x33}, - {"tempo", 0x34}, - {"target", 0x35}, - {"mutegroup", 0x36}, - {"interrupt", 0x37}, - {"IsPositioned", 0x38}, - {"Spl", 0x39}, - {"MultipleInstances", 0x3a}, - {"AssociatedTrack1", 0x3b}, - {"AssociatedTrack2", 0x3c}, - {"AssociatedTrack3", 0x3d}, - {"AssociatedTrack4", 0x3e}, - {"AssociatedTrack5", 0x3f}, - {"AssociatedTrack6", 0x40}, - {"AssociatedTrack7", 0x41}, - {"AssociatedTrack8", 0x42}, - {"SimSpeed", 0x64}, - {"test_g1", 0x65}, - {"test_g2", 0x66}, - {"test_g3", 0x67}, - {"test_g4", 0x68}, - {"test_g5", 0x69}, - {"test_g6", 0x6a}, - {"test_g7", 0x6b}, - {"test_g8", 0x6c}, - {"test_g9", 0x6d}, - {"main_songnum", 0x6e}, - {"main_musichitlistid", 0x6f}, - {"campfire_nexttrack", 0x70}, - {"campfire_busy", 0x71}, - {"main_duckpri", 0x7b}, - {"main_vol", 0x7c}, - {"main_fxtype", 0x7d}, - {"main_fxlevel", 0x7e}, - {"main_pause", 0x7f}, -}; - -static __inline const char * find_global(uint32_t x, const global_t * Globals, size_t GlobalCount){ +static __inline const char * find_variable(uint32_t x, const variable_t * Variables, size_t VariableCount){ size_t i; - for(i=0; i 96) + if(opcode == 0 || opcode > InstructionCount) Shutdown_M("%sIllegal opcode 0x%02X at address 0x%08X.\n", "hitdump: Error: ", opcode, addr); instruction = Instructions + opcode - 1; @@ -910,14 +594,12 @@ int main(int argc, char *argv[]){ else fprintf(hFile, " #%u", LogicalAddress); addr += 4; }else if(type == o_variable){ - int x = data[hit][addr]; - if(x > 16){ - const char * Global = find_global(x, Globals, GlobalCount); - if(Global == NULL) - Shutdown_M("%sInvalid %s operand 0x%02X for '%s' instruction at address 0x%08X (expected %s).\n", - "hitdump: Error: ", position[i], x, instruction->Name, addr, "argument, register, or global"); - fprintf(hFile, " %s", Global); - } else fprintf(hFile, " %s", Registers[x]); + unsigned x = data[hit][addr]; + const char * Variable = find_variable(x, Variables, VariableCount); + if(Variable == NULL) + Shutdown_M("%sInvalid %s operand 0x%02X for '%s' instruction at address 0x%08X (expected variable).\n", + "hitdump: Error: ", position[i], x, instruction->Name, addr); + fprintf(hFile, " %s", Variable); addr += 1; }else if(type == o_jump){ unsigned x = 0; @@ -934,14 +616,13 @@ int main(int argc, char *argv[]){ else fprintf(hFile, " #%u", x); addr += 4; }else{ + const char * Variable; x = data[hit][addr]; - if(x > 16){ - const char * Global = find_global(x, Globals, GlobalCount); - if(Global == NULL) - Shutdown_M("%sInvalid %s operand 0x%02X for '%s' instruction at address 0x%08X (expected %s).\n", - "hitdump: Error: ", position[i], x, instruction->Name, addr, "argument, register, or global"); - fprintf(hFile, " %s", Global); - } else fprintf(hFile, " %s", Registers[x]); + Variable = find_variable(x, Variables, VariableCount); + if(Variable == NULL) + Shutdown_M("%sInvalid %s operand 0x%02X for '%s' instruction at address 0x%08X (expected variable).\n", + "hitdump: Error: ", position[i], x, instruction->Name, addr); + fprintf(hFile, " %s", Variable); addr += (data[hit][addr] != 0x05 && data[hit][addr] != 0x06) ? 4 : 1; } } diff --git a/Tools/hitutils/hitutils.h b/Tools/hitutils/hitutils.h new file mode 100644 index 0000000..a1d1e56 --- /dev/null +++ b/Tools/hitutils/hitutils.h @@ -0,0 +1,452 @@ +/* + hitutils - The Sims HIT (dis)assembler and linker + hitutils.h - Copyright (c) 2012 Niotso Project + Author(s): Fatbag + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef min + #define min(x,y) ((x) < (y) ? (x) : (y)) +#endif +#ifndef max + #define max(x,y) ((x) > (y) ? (x) : (y)) +#endif + +#ifndef read_int32 + #define read_uint32(x) (unsigned)(((x)[0]<<(8*0)) | ((x)[1]<<(8*1)) | ((x)[2]<<(8*2)) | ((x)[3]<<(8*3))) + #define read_uint16(x) (unsigned)(((x)[0]<<(8*0)) | ((x)[1]<<(8*1))) +#endif + +#ifndef write_int32 + #define write_uint32(dest, src) do {\ + (dest)[0] = ((src)&0x000000FF)>>(8*0); \ + (dest)[1] = ((src)&0x0000FF00)>>(8*1); \ + (dest)[2] = ((src)&0x00FF0000)>>(8*2); \ + (dest)[3] = ((src)&0xFF000000)>>(8*3); \ + } while(0) + #define write_uint16(dest, src) do {\ + (dest)[0] = ((src)&0x00FF)>>(8*0); \ + (dest)[1] = ((src)&0xFF00)>>(8*1); \ + } while(0) +#endif + +extern char *strdup (const char *__s); + +static void Shutdown(); + +static void Shutdown_M(const char * Message, ...){ + va_list args; + va_start(args, Message); + vfprintf(stderr, Message, args); + va_end(args); + + Shutdown(); + exit(EXIT_FAILURE); +} + +enum { + VERSION_TS1 = 1, VERSION_TSO +}; + +#define OPERAND_BYTES(x) (x) +#define OPERAND(x, y) ((y)<<((x)*4+4)) +#define UNIMPLEMENTED ((uint32_t)~0) + +enum operand_t { + o_byte = 1, + o_dword, + o_address, + o_variable, + o_jump +}; + +typedef struct { + const char * Name; + uint32_t Operands; +} instruction_t; + +typedef struct { + const char * Name; + uint32_t Value; +} variable_t; + +typedef struct { + uint8_t * Data; + size_t Size; +} ByteReaderContext; + +static const uint8_t HITHeader[] = {'H','I','T','!',0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,'T','R','A','X'}; + +#define InstructionCount 96 +static const instruction_t Instructions[] = { + {"note", UNIMPLEMENTED}, + {"note_on", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"note_off", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"loadb", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_byte)}, + {"loadl", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, + {"set", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"call", OPERAND_BYTES(4) | OPERAND(0, o_address)}, + {"return", OPERAND_BYTES(0)}, + {"wait", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"callentrypoint", UNIMPLEMENTED}, + {"wait_samp", OPERAND_BYTES(0)}, + {"end", OPERAND_BYTES(0)}, + {"jump", OPERAND_BYTES(1) | OPERAND(0, o_jump)}, + {"test", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"nop", OPERAND_BYTES(0)}, + {"add", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"sub", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"div", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"mul", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"cmp", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"less", UNIMPLEMENTED}, + {"greater", UNIMPLEMENTED}, + {"not", UNIMPLEMENTED}, + {"rand", OPERAND_BYTES(3) | OPERAND(0, o_variable) | OPERAND(1, o_variable) | OPERAND(2, o_variable)}, + {"abs", UNIMPLEMENTED}, + {"limit", UNIMPLEMENTED}, + {"error", UNIMPLEMENTED}, + {"assert", UNIMPLEMENTED}, + {"add_to_group", UNIMPLEMENTED}, + {"remove_from_group", UNIMPLEMENTED}, + {"get_var", UNIMPLEMENTED}, + {"loop", OPERAND_BYTES(0)}, + {"set_loop", OPERAND_BYTES(0)}, + {"callback", UNIMPLEMENTED}, + {"smart_add", UNIMPLEMENTED}, + {"smart_remove", UNIMPLEMENTED}, + {"smart_removeall", UNIMPLEMENTED}, + {"smart_setcrit", UNIMPLEMENTED}, + {"smart_choose", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"and", UNIMPLEMENTED}, + {"nand", UNIMPLEMENTED}, + {"or", UNIMPLEMENTED}, + {"nor", UNIMPLEMENTED}, + {"xor", UNIMPLEMENTED}, + {"max", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, + {"min", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, + {"inc", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"dec", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"printreg", UNIMPLEMENTED}, + {"play_trk", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"kill_trk", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"push", UNIMPLEMENTED}, + {"push_mask", UNIMPLEMENTED}, + {"push_vars", UNIMPLEMENTED}, + {"call_mask", UNIMPLEMENTED}, + {"call_push", UNIMPLEMENTED}, + {"pop", UNIMPLEMENTED}, + {"test1", OPERAND_BYTES(0)}, + {"test2", OPERAND_BYTES(0)}, + {"test3", OPERAND_BYTES(0)}, + {"test4", OPERAND_BYTES(0)}, + {"ifeq", OPERAND_BYTES(4) | OPERAND(0, o_address)}, + {"ifne", OPERAND_BYTES(4) | OPERAND(0, o_address)}, + {"ifgt", OPERAND_BYTES(4) | OPERAND(0, o_address)}, + {"iflt", OPERAND_BYTES(4) | OPERAND(0, o_address)}, + {"ifge", OPERAND_BYTES(4) | OPERAND(0, o_address)}, + {"ifle", OPERAND_BYTES(4) | OPERAND(0, o_address)}, + {"smart_setlist", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"seqgroup_kill", OPERAND_BYTES(1) | OPERAND(0, o_byte)}, + {"seqgroup_wait", UNIMPLEMENTED}, + {"seqgroup_return", OPERAND_BYTES(1) | OPERAND(0, o_byte)}, + {"getsrcdatafield", OPERAND_BYTES(3) | OPERAND(0, o_variable) | OPERAND(1, o_variable) | OPERAND(2, o_variable)}, + {"seqgroup_trkid", OPERAND_BYTES(2) | OPERAND(0, o_byte) | OPERAND(1, o_byte)}, + {"setll", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"setlt", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"settl", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"waiteq", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"waitne", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"waitgt", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"waitlt", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"waitge", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"waitle", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"duck", OPERAND_BYTES(0)}, + {"unduck", OPERAND_BYTES(0)}, + {"testx", UNIMPLEMENTED}, + {"setlg", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, + {"setgl", OPERAND_BYTES(5) | OPERAND(0, o_variable) | OPERAND(1, o_dword)}, + {"throw", UNIMPLEMENTED}, + {"setsrcdatafield", OPERAND_BYTES(3) | OPERAND(0, o_variable) | OPERAND(1, o_variable) | OPERAND(2, o_variable)}, + {"stop_trk", OPERAND_BYTES(1) | OPERAND(0, o_variable)}, + {"setchanreg", UNIMPLEMENTED}, + {"play_note", UNIMPLEMENTED}, + {"stop_note", UNIMPLEMENTED}, + {"kill_note", UNIMPLEMENTED}, + {"smart_index", OPERAND_BYTES(2) | OPERAND(0, o_variable) | OPERAND(1, o_variable)}, + {"note_on_loop", OPERAND_BYTES(1) | OPERAND(0, o_variable)} +}; + +#define TSOVariableCount 82 +static const variable_t TSOVariables[] = { + {"arg0", 0x00}, + {"arg1", 0x01}, + {"arg2", 0x02}, + {"arg3", 0x03}, + {"arg4", 0x04}, + {"v1", 0x05}, + {"v2", 0x06}, + {"v3", 0x07}, + {"v4", 0x08}, + {"v5", 0x09}, + {"v6", 0x0A}, + {"v7", 0x0B}, + {"v8", 0x0C}, + {"h1", 0x0D}, + {"h2", 0x0E}, + {"h3", 0x0F}, + {"argstype", 0x10}, + {"trackdatasource", 0x11}, + {"patch", 0x12}, + {"priority", 0x13}, + {"vol", 0x14}, + {"extvol", 0x15}, + {"pan", 0x16}, + {"pitch", 0x17}, + {"paused", 0x18}, + {"fxtype", 0x19}, + {"fxlevel", 0x1a}, + {"duckpri", 0x1b}, + {"Is3d", 0x1c}, + {"IsHeadRelative", 0x1d}, + {"MinDistance", 0x1e}, + {"MaxDistance", 0x1f}, + {"X", 0x20}, + {"Y", 0x21}, + {"Z", 0x22}, + {"attack", 0x23}, + {"decay", 0x24}, + {"IsStreamed", 0x25}, + {"bufsizemult", 0x26}, + {"fade_dest", 0x27}, + {"fade_var", 0x28}, + {"fade_speed", 0x29}, + {"fade_on", 0x2a}, + {"Preload", 0x2b}, + {"isplaying", 0x2c}, + {"whattodowithupdate", 0x2d}, + {"tempo", 0x2e}, + {"target", 0x2f}, + {"ctrlgroup", 0x30}, + {"interrupt", 0x31}, + {"ispositioned", 0x32}, + {"AppObjectId", 0x34}, + {"callbackarg", 0x35}, + {"pitchrandmin", 0x36}, + {"pitchrandmax", 0x37}, + {"spl", 0x38}, + {"sem", 0x39}, + {"starttrackid", 0x3a}, + {"endtrackid", 0x3b}, + {"startdelay", 0x3c}, + {"fadeinspeed", 0x3d}, + {"fadeoutspeed", 0x3e}, + {"hitlist", 0x3f}, + {"SimSpeed", 0x64}, + {"test_g1", 0x65}, + {"test_g2", 0x66}, + {"test_g3", 0x67}, + {"test_g4", 0x68}, + {"test_g5", 0x69}, + {"test_g6", 0x6a}, + {"test_g7", 0x6b}, + {"test_g8", 0x6c}, + {"test_g9", 0x6d}, + {"main_songnum", 0x6e}, + {"main_musichitlistid", 0x6f}, + {"campfire_nexttrack", 0x70}, + {"campfire_busy", 0x71}, + {"main_duckpri", 0x7b}, + {"main_vol", 0x7c}, + {"main_fxtype", 0x7d}, + {"main_fxlevel", 0x7e}, + {"main_pause", 0x7f}, +}; + +#define TS1VariableCount 87 +static const variable_t TS1Variables[] = { + {"arg0", 0x00}, + {"arg1", 0x01}, + {"arg2", 0x02}, + {"arg3", 0x03}, + {"arg4", 0x04}, + {"v1", 0x05}, + {"v2", 0x06}, + {"v3", 0x07}, + {"v4", 0x08}, + {"v5", 0x09}, + {"v6", 0x0a}, + {"v7", 0x0b}, + {"v8", 0x0c}, + {"h1", 0x0d}, + {"h2", 0x0e}, + {"h3", 0x0f}, + {"priority", 0x11}, + {"vol", 0x12}, + {"extvol", 0x13}, + {"pan", 0x14}, + {"pitch", 0x15}, + {"paused", 0x16}, + {"fxtype", 0x17}, + {"fxlevel", 0x18}, + {"duckpri", 0x19}, + {"Is3d", 0x1a}, + {"IsHeadRelative", 0x1b}, + {"MinDistance", 0x1c}, + {"MaxDistance", 0x1d}, + {"X", 0x1e}, + {"Y", 0x1f}, + {"Z", 0x20}, + {"filter_type", 0x21}, + {"filter_cutoff", 0x22}, + {"filter_level", 0x23}, + {"attack", 0x24}, + {"decay", 0x25}, + {"IsStreamed", 0x26}, + {"BufSizeMult", 0x27}, + {"fade_dest", 0x28}, + {"fade_var", 0x29}, + {"fade_speed", 0x2a}, + {"Preload", 0x2b}, + {"IsLooped", 0x2c}, + {"fade_on", 0x2d}, + {"isplaying", 0x2e}, + {"source", 0x2f}, + {"patch", 0x32}, + {"WhatToDoWithUpdate", 0x33}, + {"tempo", 0x34}, + {"target", 0x35}, + {"mutegroup", 0x36}, + {"interrupt", 0x37}, + {"IsPositioned", 0x38}, + {"Spl", 0x39}, + {"MultipleInstances", 0x3a}, + {"AssociatedTrack1", 0x3b}, + {"AssociatedTrack2", 0x3c}, + {"AssociatedTrack3", 0x3d}, + {"AssociatedTrack4", 0x3e}, + {"AssociatedTrack5", 0x3f}, + {"AssociatedTrack6", 0x40}, + {"AssociatedTrack7", 0x41}, + {"AssociatedTrack8", 0x42}, + {"SimSpeed", 0x64}, + {"test_g1", 0x65}, + {"test_g2", 0x66}, + {"test_g3", 0x67}, + {"test_g4", 0x68}, + {"test_g5", 0x69}, + {"test_g6", 0x6a}, + {"test_g7", 0x6b}, + {"test_g8", 0x6c}, + {"test_g9", 0x6d}, + {"main_songnum", 0x6e}, + {"main_musichitlistid", 0x6f}, + {"campfire_nexttrack", 0x70}, + {"campfire_busy", 0x71}, + {"main_duckpri", 0x7b}, + {"main_vol", 0x7c}, + {"main_fxtype", 0x7d}, + {"main_fxlevel", 0x7e}, + {"main_pause", 0x7f}, +}; + +#define ConstantCount 72 +static const variable_t Constants[] = { + {"duckpri_always", 0x0}, + {"duckpri_low", 0xa}, + {"duckpri_normal", 0x14}, + {"duckpri_high", 0x1e}, + {"duckpri_higher", 0x28}, + {"duckpri_evenhigher", 0x32}, + {"duckpri_never", 0x64}, + {"spl_infinite", 0x0}, + {"spl_loud", 0xa}, + {"spl_normal", 0x14}, + {"spl_quiet", 0x64}, + {"Instance", 0x0}, + {"Gender", 0x1}, + {"GroupMusic", 0x1}, + {"GroupDialogMain", 0x2}, + {"GroupDialogOverlay", 0x3}, + {"PchDishwasherClose", 0x32}, + {"PchDishwasherLoad", 0x33}, + {"PchDishwasherLoad2", 0x34}, + {"PchDishwasherOpen", 0x35}, + {"PchDishwasherTurnDial", 0x39}, + {"PchDishwasherTurnDial2", 0x3a}, + {"TrkRadioStationCountry", 0x104}, + {"TrkRadioStationBossaNova", 0x10e}, + {"TrkRadioStationClassical", 0x10d}, + {"TrkRadioStationRock", 0x118}, + {"kSndobPlay", 1}, + {"kSndobStop", 2}, + {"kSndobKill", 3}, + {"kSndobUpdate", 4}, + {"kSndobSetVolume", 5}, + {"kSndobSetPitch", 6}, + {"kSndobSetPan", 7}, + {"kSndobSetPosition", 8}, + {"kSndobSetFxType", 9}, + {"kSndobSetFxLevel", 10}, + {"kSndobPause", 11}, + {"kSndobUnpause", 12}, + {"kSndobLoad", 13}, + {"kSndobUnload", 14}, + {"kSndobCache", 15}, + {"kSndobUncache", 16}, + {"kSndobCancelNote", 19}, + {"kPlayPiano", 43}, + {"kSetMusicMode", 36}, + {"kLive", 0}, + {"kBuy", 1}, + {"kBuild", 2}, + {"kHood", 3}, + {"kFrontEnd", 4}, + {"kGroupSfx", 1}, + {"kGroupMusic", 2}, + {"kGroupVox", 3}, + {"kAction", 1000}, + {"kComedy", 1001}, + {"kRomance", 1002}, + {"kNews", 1003}, + {"kCountry", 1004}, + {"kRock", 1005}, + {"kJazz", 1006}, + {"kClassical", 1007}, + {"kArgsNormal", 0}, + {"kArgsVolPan", 1}, + {"kArgsIdVolPan", 2}, + {"kArgsXYZ", 3}, + {"kKillAll", 20}, + {"kPause", 21}, + {"kUnpause", 22}, + {"kKillInstance", 23}, + {"kTurnOnTv", 30}, + {"kTurnOffTv", 31}, + {"kUpdateSourceVolPan", 32}, +}; + +static const char SHStringTable[] = + "\0.text" + "\0.shstrtab" + "\0.symtab" + "\0.strtab" + "\0.rel.text" +; + +static const uint8_t SymbolTableHeader[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xF1, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00 +}; \ No newline at end of file diff --git a/Tools/iff2html/image.c b/Tools/iff2html/image.c index ca7c0f0..6991658 100644 --- a/Tools/iff2html/image.c +++ b/Tools/iff2html/image.c @@ -19,8 +19,8 @@ #include #include #include -#include #include +#include /* Used for libpng */ #include "opngreduc.h" int WritePNG(const char * OutName, const IFFChunk * ChunkData, int ZBuffer, diff --git a/Tools/rtti-reader/rtti-reader.cpp b/Tools/rtti-reader/rtti-reader.cpp index f970a7d..b314425 100644 --- a/Tools/rtti-reader/rtti-reader.cpp +++ b/Tools/rtti-reader/rtti-reader.cpp @@ -26,8 +26,9 @@ #include #include #include -#include #include +#include +#include #ifndef read_int32 #define read_uint32(x) (unsigned)(((x)[0]<<(8*0)) | ((x)[1]<<(8*1)) | ((x)[2]<<(8*2)) | ((x)[3]<<(8*3))) @@ -408,7 +409,7 @@ int main(int argc, char *argv[]){ Shutdown_M("Unexpectedly reached end of binary"); DLL.lookat(DLL.rdata); - COL.VTableAddress = (DLL.find32(COLAddress)) ? DLL.brc.position + ImageBase + 4: (uint32_t)-1; + COL.VTableAddress = (DLL.find32(COLAddress)) ? DLL.brc.position + ImageBase + 4 : (uint32_t)-1; if(newclass){ if(!DLL.seek(COL.Fields.ClassDescriptorAddress - ImageBase)) @@ -517,7 +518,7 @@ int main(int argc, char *argv[]){ printf(";"); } - printf("\n\nCompleted RTTI report.\nDependencies provided for %u of %u classes.\n", RCL.Count, TotalClassCount); + printf("\n\nCompleted RTTI report.\nDependencies provided for %u of %u classes.\n", (unsigned)RCL.Count, TotalClassCount); return 0; } \ No newline at end of file