From bb7f00988a0af78faa93b343043f83946926b784 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 15 Jan 2023 16:15:28 +0100 Subject: [PATCH] - give Blood's sounds well defined names so they can be defined via SNDINFO. --- source/common/audio/sound/s_soundinternal.h | 1 + source/core/savegamehelp.cpp | 4 +- source/games/blood/src/seq.cpp | 2 +- source/games/blood/src/sfx.cpp | 11 +- source/games/blood/src/sound.cpp | 47 +- source/games/duke/src/sounds.cpp | 5 +- source/games/duke/src/sounds.h | 3 +- wadsrc/static/filter/blood/sndinfo.txt | 927 ++++++++++++++++++++ 8 files changed, 974 insertions(+), 26 deletions(-) create mode 100644 wadsrc/static/filter/blood/sndinfo.txt diff --git a/source/common/audio/sound/s_soundinternal.h b/source/common/audio/sound/s_soundinternal.h index 3f5f92373..822623529 100644 --- a/source/common/audio/sound/s_soundinternal.h +++ b/source/common/audio/sound/s_soundinternal.h @@ -97,6 +97,7 @@ constexpr FSoundID INVALID_SOUND = FSoundID::fromInt(-1); bool bUsed = false; bool bSingular = false; bool bTentative = true; + bool bExternal = false; TArray UserData; diff --git a/source/core/savegamehelp.cpp b/source/core/savegamehelp.cpp index 71953737f..fcafed6c6 100644 --- a/source/core/savegamehelp.cpp +++ b/source/core/savegamehelp.cpp @@ -106,8 +106,8 @@ static void SerializeGlobals(FSerializer& arc) static void SerializeSession(FSerializer& arc) { - // In Duke we now have reliable sound names. - if (isDukeEngine()) arc.SetUniqueSoundNames(); + // In Duke and Blood we now have reliable sound names. + if (isDukeEngine() || isBlood()) arc.SetUniqueSoundNames(); arc.ReadObjects(false); SerializeMap(arc); diff --git a/source/games/blood/src/seq.cpp b/source/games/blood/src/seq.cpp index 724da41f2..f8383ba38 100644 --- a/source/games/blood/src/seq.cpp +++ b/source/games/blood/src/seq.cpp @@ -386,7 +386,7 @@ void SEQINST::Update() if (snd.isvalid()) { auto udata = soundEngine->GetUserData(snd); - int relVol = udata ? udata[2] : 255; + int relVol = udata ? udata[0] : 255; sfxPlay3DSoundCP(actor, sndId, -1, 0, 0, (surfSfxMove[surf][2] != relVol) ? relVol : surfSfxMove[surf][3]); } } diff --git a/source/games/blood/src/sfx.cpp b/source/games/blood/src/sfx.cpp index c56ef3294..754f39750 100644 --- a/source/games/blood/src/sfx.cpp +++ b/source/games/blood/src/sfx.cpp @@ -147,13 +147,12 @@ void GameInterface::UpdateSounds() // //--------------------------------------------------------------------------- -FSoundID getSfx(FSoundID soundId, float& attenuation, int& pitch, int& relvol) +FSoundID getSfx(FSoundID soundId, float& attenuation, int& relvol) { auto udata = soundEngine->GetUserData(soundId); - if (pitch < 0) pitch = udata ? udata[0] : 0x10000; if (relvol < 0) relvol = 0; - else if (relvol == 0) relvol = udata && udata[2] ? udata[2] : 80; + else if (relvol == 0) relvol = udata && udata[0] ? udata[0] : 80; if (relvol > 255) relvol = 255; // Limit the attenuation. More than 2.0 is simply too much. attenuation = relvol > 0 ? clamp(80.f / relvol, 0.f, 2.f) : 1.f; @@ -177,7 +176,7 @@ void sfxPlay3DSound(const DVector3& pos, int soundId, sectortype* pSector) float attenuation; int pitch = -1; int relvol = 0; - sid = getSfx(sid, attenuation, pitch, relvol); + sid = getSfx(sid, attenuation, relvol); auto sfx = soundEngine->GetSfx(sid); EChanFlags flags = CHANF_OVERLAP; if (sfx && sfx->LoopStart >= 0) flags |= CHANF_LOOP; @@ -194,14 +193,14 @@ void sfxPlay3DSound(const DVector3& pos, int soundId, sectortype* pSector) void sfxPlay3DSoundCP(DBloodActor* pActor, int soundId, int playchannel, int playflags, int pitch, int volume) { - if (!SoundEnabled() || soundId < 0 || !pActor) return; + if (!SoundEnabled() || soundId <= 0 || !pActor) return; auto sid = soundEngine->FindSoundByResID(soundId); if (!sid.isvalid()) return; auto svec = GetSoundPos(pActor->spr.pos); float attenuation; - sid = getSfx(sid, attenuation, pitch, volume); + sid = getSfx(sid, attenuation, volume); if (volume == -1) volume = 80; if (playchannel >= 0) diff --git a/source/games/blood/src/sound.cpp b/source/games/blood/src/sound.cpp index 76ed757ad..4ab0445ee 100644 --- a/source/games/blood/src/sound.cpp +++ b/source/games/blood/src/sound.cpp @@ -62,24 +62,42 @@ void ByteSwapSFX(SFX* pSFX) // // S_AddBloodSFX // -// Registers a new sound with the name ".sfx" -// Actual sound data is searched for in the ns_bloodraw namespace. -// //========================================================================== static void S_AddBloodSFX(int lumpnum) { + FSoundID sfxnum; + + int resid = fileSystem.GetResourceId(lumpnum); + sfxinfo_t* soundfx = nullptr; + + sfxnum = soundEngine->FindSoundByResIDNoHash(resid); + if (sfxnum.isvalid()) + { + soundfx = soundEngine->GetWritableSfx(sfxnum); + if (soundfx->UserData.Size() == 0) + { + soundfx->UserData.Resize(1); + soundfx->UserData[1] = 80; // default for RelVol + } + if (!soundfx->bTentative) return; // sound was already defined. + } + auto sfxlump = fileSystem.ReadFile(lumpnum); SFX* sfx = (SFX*)sfxlump.GetMem(); ByteSwapSFX(sfx); + FStringf rawname("%s.raw", sfx->rawName); auto rawlump = fileSystem.FindFile(rawname); - FSoundID sfxnum; if (rawlump != -1) { - sfxnum = soundEngine->AddSoundLump(sfx->rawName, rawlump, 0, fileSystem.GetResourceId(lumpnum), 6); - auto soundfx = soundEngine->GetWritableSfx(sfxnum); + if (!sfxnum.isvalid()) + { + sfxnum = soundEngine->AddSoundLump(FStringf("SfxSound@%04d", resid), rawlump, 0, resid, 6); // use a generic name here in case sound replacements are being used. + soundfx = soundEngine->GetWritableSfx(sfxnum); + soundfx->UserData.Resize(1); + } if (sfx->format < 5 || sfx->format > 12) { // [0..4] + invalid formats soundfx->RawRate = 11025; @@ -92,14 +110,18 @@ static void S_AddBloodSFX(int lumpnum) { // [9..12] soundfx->RawRate = 44100; } + soundfx->NearLimit = 6; + soundfx->lumpnum = rawlump; soundfx->bLoadRAW = true; + soundfx->bExternal = true; + soundfx->bTentative = false; soundfx->LoopStart = LittleLong(sfx->loopStart); //S_sfx[sfxnum].Volume = sfx->relVol / 255.f; This cannot be done because this volume setting is optional. - soundfx->UserData.Resize(3); + // pitchrange is unused. + if (sfx->pitch != 0x10000) soundfx->DefPitch = sfx->pitch / 65536.f; + else soundfx->DefPitch = 0; int* udata = (int*)soundfx->UserData.Data(); - udata[0] = sfx->pitch; - udata[1] = sfx->pitchRange; - udata[2] = sfx->relVol; + udata[0] = sfx->relVol; } } @@ -122,8 +144,7 @@ void sndInit(void) auto type = fileSystem.GetResourceType(i); if (!stricmp(type, "SFX")) { - if (soundEngine->FindSoundByResID(fileSystem.GetResourceId(i)) == NO_SOUND) - S_AddBloodSFX(i); + S_AddBloodSFX(i); } else if (!stricmp(type, "WAV") || !stricmp(type, "OGG") || !stricmp(type, "FLAC") || !stricmp(type, "VOC")) { @@ -193,7 +214,7 @@ void sndStartSample(unsigned int nSound, int nVolume, int nChannel, bool bLoop, if (nVolume < 0) { auto udata = soundEngine->GetUserData(snd); - if (udata) nVolume = min(Scale(udata[2], 255, 100), 255); + if (udata) nVolume = min(Scale(udata[0], 255, 100), 255); else nVolume = 255; } if (bLoop) chanflags |= CHANF_LOOP; diff --git a/source/games/duke/src/sounds.cpp b/source/games/duke/src/sounds.cpp index a17f231cc..6e687cb41 100644 --- a/source/games/duke/src/sounds.cpp +++ b/source/games/duke/src/sounds.cpp @@ -209,7 +209,7 @@ int S_DefineSound(unsigned index, const char *filename, int minpitch, int maxpit if (sfx->UserData.Size() >= kMaxUserData) { auto& sndinf = sfx->UserData; - settable = !!(sndinf[kFlags] & SF_CONDEFINED); + settable = sfx->bExternal; } } if (!settable) @@ -229,8 +229,9 @@ int S_DefineSound(unsigned index, const char *filename, int minpitch, int maxpit sfx->ResourceId = index; sfx->UserData.Resize(kMaxUserData); + sfx->bExternal = true; auto& sndinf = sfx->UserData; - sndinf[kFlags] = (type & SF_CON_MASK) | SF_CONDEFINED; + sndinf[kFlags] = (type & SF_CON_MASK); // Take care of backslashes in sound names. Also double backslashes which occur in World Tour. FString fn = filename; diff --git a/source/games/duke/src/sounds.h b/source/games/duke/src/sounds.h index f9c25aaa9..54d8402f9 100644 --- a/source/games/duke/src/sounds.h +++ b/source/games/duke/src/sounds.h @@ -18,10 +18,9 @@ enum { SF_TALK = 4, SF_ADULT = 8, SF_GLOBAL = 16, - SF_CON_MASK = 31, - SF_CONDEFINED = 64, SF_DTAG = 128, + SF_CON_MASK = 159, }; enum esound_t diff --git a/wadsrc/static/filter/blood/sndinfo.txt b/wadsrc/static/filter/blood/sndinfo.txt new file mode 100644 index 000000000..d877718f3 --- /dev/null +++ b/wadsrc/static/filter/blood/sndinfo.txt @@ -0,0 +1,927 @@ +$conreserve AMB1 1 +$conreserve AMB2 2 +$conreserve AMB3 3 +$conreserve AMB4 4 +$conreserve AMB5 5 +$conreserve AMB6 6 +$conreserve AMB7 7 +$conreserve AMB8 8 +$conreserve AMB9 9 +$conreserve AMB10 10 +$conreserve AMB11 11 +$conreserve AMB12 12 +$conreserve AMB13 13 +$conreserve AMB14 14 +$conreserve AMB15 15 +$conreserve AMB16 16 +$conreserve AMB17 17 +$conreserve AMB18 18 +$conreserve AMB19 19 +$conreserve AMB20 20 +$conreserve AMB21 21 +$conreserve AMB22 22 +$conreserve AMB24 24 +$conreserve AMB25 25 +$conreserve AMB26 26 +$conreserve RAIN2 27 +$conreserve QAMB1 28 +$conreserve QAMB2 29 +$conreserve QAMB3 30 +$conreserve QAMB4 31 +$conreserve QAMB5 32 +$conreserve QAMB6 33 +$conreserve QAMB7 34 +$conreserve QAMB8 35 +$conreserve QAMB9 36 +$conreserve QAMB10 37 +$conreserve QAMB11 38 +$conreserve QAMB12 39 +$conreserve WATERLAP 40 +$conreserve WATER2 41 +$conreserve UNDERWAT 42 +$conreserve CHAIN1 43 +$conreserve CHAIN2 44 +$conreserve CHAIN4 46 +$conreserve CHAIN5 47 +$conreserve ERIEDRNE 48 +$conreserve SWAMP 49 +$conreserve TORCH 50 +$conreserve MTLDRN 52 +$conreserve HOWLING 54 +$conreserve GRGLNG 56 +$conreserve DRONE 57 +$conreserve 1WIND 58 +$conreserve CHANT 59 +$conreserve HRTBT 60 +$conreserve TRAIN1 61 +$conreserve CHAIN6 62 +$conreserve ICHANT 63 +$conreserve ELCLOOP1 64 +$conreserve MUZAK22 65 +$conreserve ERTHLOOP 66 +$conreserve FANLUP2 67 +$conreserve DORCREAK 100 +$conreserve DOOROPEN 101 +$conreserve RUSTDOOR 102 +$conreserve DOORSLID 103 +$conreserve GEARSTAR 104 +$conreserve ELEVMOVE 105 +$conreserve SLABMOVE 106 +$conreserve QAIRDOOR 107 +$conreserve QDOORMV1 110 +$conreserve QHYDRO1 111 +$conreserve QMEDPLAT 112 +$conreserve QPLAT1 113 +$conreserve CRYPTLP1 114 +$conreserve QTRAIN1 115 +$conreserve QWINCH2 116 +$conreserve CREAKSML 117 +$conreserve CREAKROT 118 +$conreserve CREAKSLD 119 +$conreserve SLIDOOR1 120 +$conreserve SLIDOOR2 121 +$conreserve FLSHDOR1 122 +$conreserve FLSHDOR2 123 +$conreserve CRYPTLP 124 +$conreserve GEARHALT 150 +$conreserve ELEVSTOP 151 +$conreserve ELEVSTRT 152 +$conreserve ELSTOP2 153 +$conreserve QBASESE2 155 +$conreserve QDDOOR2 156 +$conreserve QDRCLOS4 157 +$conreserve HYDRO2A 158 +$conreserve QPLAT2 159 +$conreserve QSTNDR2 160 +$conreserve DOORCLOS 162 +$conreserve ELSTOP3 163 +$conreserve HYDRO2 164 +$conreserve HYDRO3 165 +$conreserve HYDRO4 166 +$conreserve ELVSTR2 167 +$conreserve SLIDSTP1 168 +$conreserve SLIDSTP2 169 +$conreserve FLSHSTP1 170 +$conreserve FLSHSTP2 171 +$conreserve FART1 172 +$conreserve FART2 173 +$conreserve CRYPTSTP 174 +$conreserve SWITCH5 200 +$conreserve QBASETRY 201 +$conreserve BASEUSE 202 +$conreserve QLATCH2 203 +$conreserve RUNETRY 206 +$conreserve RUNEUSE 207 +$conreserve FLICK 208 +$conreserve SWTCHWRK 209 +$conreserve SWTCHBRK 210 +$conreserve SWITCH1 211 +$conreserve SWITCH2 212 +$conreserve SWITCH3 213 +$conreserve RUNETRY2 214 +$conreserve ICEVIO 218 +$conreserve CHANT1LP 219 +$conreserve CHANT2LP 220 +$conreserve 13CHA 221 +$conreserve 13CHU 222 +$conreserve 13DEATH 223 +$conreserve 13KILL 224 +$conreserve BUZZ2 225 +$conreserve SIREN1 226 +$conreserve FLYBY1 227 +$conreserve FLYBY2 228 +$conreserve MACHGUN2 229 +$conreserve MACHGUN3 230 +$conreserve TANK2 231 +$conreserve JEEP1 232 +$conreserve JEEP2 233 +$conreserve SHELL1 234 +$conreserve SHELL2 235 +$conreserve BCREAK1 236 +$conreserve BCREAK2 237 +$conreserve BCREAK3 238 +$conreserve BCREAK4 239 +$conreserve BRGLOOP 240 +$conreserve ICEMELO1 241 +$conreserve ICEMELO2 242 +$conreserve ICEMELO3 243 +$conreserve ICEMELLP 244 +$conreserve CRACK2 245 +$conreserve MOAN4 246 +$conreserve MOAN3 247 +$conreserve MOAN2LP 248 +$conreserve SPARK 249 +$conreserve ARC1 250 +$conreserve ARC2 251 +$conreserve ARC3 252 +$conreserve SEWAGE 253 +$conreserve THUNDER1 254 +$conreserve THUNDER2 255 +$conreserve QTHUNDER 256 +$conreserve CLOCK 257 +$conreserve GUST1 258 +$conreserve GUST2 259 +$conreserve GUST3 260 +$conreserve GUST4 261 +$conreserve CREAK 262 +$conreserve BUBRISE 263 +$conreserve ERTHRMBL 265 +$conreserve SINEWAVE 266 +$conreserve WHISPERS 267 +$conreserve MOANS 268 +$conreserve LAUGH 269 +$conreserve BELL 270 +$conreserve 1OWL 271 +$conreserve 2OWL 272 +$conreserve TRNCRASH 274 +$conreserve TRNBRAKE 275 +$conreserve TRNHRN 276 +$conreserve TRAINSTP 277 +$conreserve HUM 278 +$conreserve RIFF1 279 +$conreserve RIFF2 280 +$conreserve RIFF3 281 +$conreserve TICKET 282 +$conreserve HEYSTOP 283 +$conreserve PING 284 +$conreserve FLATLIN1 285 +$conreserve FLATLIN2 286 +$conreserve MOAN2 287 +$conreserve SCREAM 288 +$conreserve HELPME 289 +$conreserve SOBBING 290 +$conreserve ELECGEN2 291 +$conreserve TURBGEN2 292 +$conreserve SMALWOOF 293 +$conreserve SMALPAIN 294 +$conreserve AMBULONG 295 +$conreserve AMBUSHRT 296 +$conreserve BUZSLOW2 297 +$conreserve ELECPOP2 298 +$conreserve ELECPOP4 299 +$conreserve GLASHIT2 300 +$conreserve POTTERY 301 +$conreserve MGDIE 302 +$conreserve EXPLODCS 303 +$conreserve EXPLODCM 304 +$conreserve EXPLODCL 305 +$conreserve EXPLODFS 306 +$conreserve EXPLODFM 307 +$conreserve EXPLODFL 308 +$conreserve EXPLODUS 309 +$conreserve EXPLODUM 310 +$conreserve EXPLODUL 311 +$conreserve SPLNTWOD 312 +$conreserve SHATSTON 313 +$conreserve RENMETAL 314 +$conreserve SHRED1 315 +$conreserve SHRED2 316 +$conreserve BALLNPOP 317 +$conreserve HEADSQ 318 +$conreserve GIBSQ 319 +$conreserve NAPLMEX2 320 +$conreserve RESPAWN 350 +$conreserve BURN 351 +$conreserve SIZZLE 352 +$conreserve SIZZLE2 353 +$conreserve DRIP1 354 +$conreserve DRIP2 355 +$conreserve DRIP3 356 +$conreserve PUNT 357 +$conreserve BOULDERS 358 +$conreserve MGFIRE 359 +$conreserve PADLOCK 360 +$conreserve BURSTFLM 361 +$conreserve BLDSPRY1 362 +$conreserve RING 363 +$conreserve SNAKEHIS 364 +$conreserve SNAKEPIT 365 +$conreserve CASHREG 366 +$conreserve DIALTONE 367 +$conreserve BUSYSIG 368 +$conreserve TOILET 369 +$conreserve RECSCRAP 370 +$conreserve DRIP4 371 +$conreserve DRIP5 372 +$conreserve DRIP6 373 +$conreserve PAILKICK 374 +$conreserve SIZZLE1 375 +$conreserve SAWRUN 376 +$conreserve SAWCUT 377 +$conreserve SAWCOCK1 378 +$conreserve REAPPEAR 379 +$conreserve RESPAWN2 380 +$conreserve BLDSPT2 381 +$conreserve BLADEDRP 382 +$conreserve BDYPRTIM 383 +$conreserve BDYPTIM2 384 +$conreserve BLUDSPLT 385 +$conreserve ZIPOPEN 400 +$conreserve ZIPCLOSE 401 +$conreserve ZIPLIGHT 402 +$conreserve SHOTCOCK 410 +$conreserve SHOTFIRE 411 +$conreserve SHOTFIR2 412 +$conreserve SHOTLOAD 413 +$conreserve FLAREF 420 +$conreserve FLAREFUW 421 +$conreserve FLARAIR2 422 +$conreserve FLAR_WAT 423 +$conreserve TOMCOCK 430 +$conreserve _TOM 431 +$conreserve SPRAYCAN 440 +$conreserve SPRAYFIR 441 +$conreserve TNTFUSE 450 +$conreserve PROXARM 451 +$conreserve PROXDET 452 +$conreserve REMFIRE 453 +$conreserve REMDET 454 +$conreserve TNTTOSS 455 +$conreserve VOOSTAB 460 +$conreserve VOOCHANT 461 +$conreserve VOOBURN 462 +$conreserve VOOLAUGH 463 +$conreserve TESSNGFR 470 +$conreserve TESALTFR 471 +$conreserve ROTBAREL 472 +$conreserve SNGAIR2 473 +$conreserve ALTAIR2 474 +$conreserve TESALTF2 475 +$conreserve TESLA1 476 +$conreserve TALTAC3 477 +$conreserve TESLAZ1 478 +$conreserve TESLAZ2 479 +$conreserve BLASTER 480 +$conreserve BLASTARC 481 +$conreserve STAFFIRE 489 +$conreserve LLSNGFR3 490 +$conreserve LLALTFR2 491 +$conreserve LLCHARGE 492 +$conreserve SKULAIR4 493 +$conreserve LALTFR1 494 +$conreserve ACIDHIT1 495 +$conreserve ACIDHIT2 496 +$conreserve BEASTCLW 499 +$conreserve PSTONE 500 +$conreserve PMETAL 501 +$conreserve PWOOD 502 +$conreserve PFLESH 503 +$conreserve UPSTONE 504 +$conreserve UPMETAL 505 +$conreserve UPWOOD 506 +$conreserve UPFLESH 507 +$conreserve BSTONE 510 +$conreserve BMETAL 511 +$conreserve BWOOD 512 +$conreserve BFLESH 513 +$conreserve BWATER 514 +$conreserve RICOCHT1 515 +$conreserve RICOCHT2 516 +$conreserve RICOCHT3 517 +$conreserve TESSNGHT 518 +$conreserve TESALTHT 519 +$conreserve ELECDAM2 520 +$conreserve LLSNGHT2 521 +$conreserve LLALTHT 522 +$conreserve CLAW 530 +$conreserve LNDSTONE 600 +$conreserve LNDMETAL 601 +$conreserve LNDWOOD 602 +$conreserve LNDFLESH 603 +$conreserve LNDWATER 604 +$conreserve LNDDIRT 605 +$conreserve BODYHIT1 607 +$conreserve MTSHLS 608 +$conreserve SHTSHL 609 +$conreserve SHTSHL2 610 +$conreserve SHTSHL3 611 +$conreserve SHTSHL4 612 +$conreserve JUMP 700 +$conreserve LAND 701 +$conreserve HUNT1 702 +$conreserve HUNT2 703 +$conreserve HUNT3 704 +$conreserve HUNT4 705 +$conreserve UWBREATH 706 +$conreserve FRBREATH 707 +$conreserve SWIM 708 +$conreserve SWIMUW 709 +$conreserve PAIN1 710 +$conreserve PAIN2 711 +$conreserve PAIN3 712 +$conreserve PAIN4 713 +$conreserve PAIN5 714 +$conreserve PAIN6 715 +$conreserve DIE1 716 +$conreserve DIE2 717 +$conreserve DIE3 718 +$conreserve FALL 719 +$conreserve SUBMERGE 720 +$conreserve EMERGE 721 +$conreserve GASP 722 +$conreserve INHALE 723 +$conreserve UNDCHOKE 724 +$conreserve PLAY1100 725 +$conreserve PLAY1101 726 +$conreserve PLAY1102 727 +$conreserve PLAY1103 728 +$conreserve PLAY1104 729 +$conreserve PLAY1105 730 +$conreserve PLAY1106 731 +$conreserve PLAY1107 732 +$conreserve PLAY1108 733 +$conreserve PLAY1109 734 +$conreserve PLAY1110 735 +$conreserve PLAY1111 736 +$conreserve PLAY1112 737 +$conreserve PLAY1113 738 +$conreserve PLAY1114 739 +$conreserve PLAY1115 740 +$conreserve PLAY1116 741 +$conreserve PLAY1118 742 +$conreserve PLAY1119 743 +$conreserve PLAY1120 744 +$conreserve BST_FLSH 745 +$conreserve PLAYCHOK 746 +$conreserve PLAYCHK2 747 +$conreserve PICKUP 775 +$conreserve POWERUP 776 +$conreserve WEAPONUP 777 +$conreserve MESSAGE 778 +$conreserve PICKARMR 779 +$conreserve PICKHEAL 780 +$conreserve PICKKEY 781 +$conreserve AMMO 782 +$conreserve FFSTONE1 802 +$conreserve FFSTONE2 803 +$conreserve FFMETAL1 804 +$conreserve FFMETAL2 805 +$conreserve FFWOOD1 806 +$conreserve FFWOOD2 807 +$conreserve FFFLESH1 808 +$conreserve FFFLESH2 809 +$conreserve FFWATER1 810 +$conreserve FFWATER2 811 +$conreserve FFDIRT1 812 +$conreserve FFDIRT2 813 +$conreserve FFCLAY1 814 +$conreserve FFCLAY2 815 +$conreserve FFSNOW1 816 +$conreserve FFSNOW2 817 +$conreserve FFICE1 818 +$conreserve FFICE2 819 +$conreserve FFLEAF1 820 +$conreserve FFLEAF2 821 +$conreserve FFCLOTH1 822 +$conreserve FFCLOTH2 823 +$conreserve FFPLANT1 824 +$conreserve FFPLANT2 825 +$conreserve FFGOO1 826 +$conreserve FFGOO2 827 +$conreserve FFLAVA1 828 +$conreserve FFLAVA2 829 +$conreserve CULTTOSS 1000 +$conreserve CULTATT1 1001 +$conreserve CULTATT2 1002 +$conreserve CULTSPT1 1003 +$conreserve CULTSPT2 1004 +$conreserve CULTSPT3 1005 +$conreserve CULTSPT4 1006 +$conreserve CULTSPT5 1007 +$conreserve CULTROM1 1008 +$conreserve CULTROM2 1009 +$conreserve CULTROM3 1010 +$conreserve CULTROM4 1011 +$conreserve CULTROM5 1012 +$conreserve CULTPAN1 1013 +$conreserve CULTPAN2 1014 +$conreserve CULTPAN3 1015 +$conreserve CULTPAN4 1016 +$conreserve CULTPAN5 1017 +$conreserve CULTDIE1 1018 +$conreserve CULTDIE2 1019 +$conreserve CULTDIE3 1020 +$conreserve CULTGLO1 1021 +$conreserve CULTGLO2 1022 +$conreserve CULTGLO3 1023 +$conreserve CULTGLO4 1024 +$conreserve CULTFIR1 1031 +$conreserve CULTFIR2 1032 +$conreserve CULTFIR3 1033 +$conreserve TCLTTOSS 4000 +$conreserve TCLTATT1 4001 +$conreserve TCLTATT2 4002 +$conreserve TCLTSPT1 4003 +$conreserve TCLTSPT2 4004 +$conreserve TCLTSPT3 4005 +$conreserve TCLTSPT4 4006 +$conreserve TCLTSPT5 4007 +$conreserve TCLTROM1 4008 +$conreserve TCLTROM2 4009 +$conreserve TCLTROM3 4010 +$conreserve TCLTROM4 4011 +$conreserve TCLTROM5 4012 +$conreserve TCLTPAN1 4013 +$conreserve TCLTPAN2 4014 +$conreserve TCLTPAN3 4015 +$conreserve TCLTPAN4 4016 +$conreserve TCLTPAN5 4017 +$conreserve TCLTDIE1 4018 +$conreserve TCLTDIE2 4019 +$conreserve TCLTDIE3 4020 +$conreserve TCLTGLO1 4021 +$conreserve TCLTGLO2 4022 +$conreserve TCLTFIR1 4031 +$conreserve TCLTFIR2 4032 +$conreserve TCLTFIR3 4033 +$conreserve AZOMRISE 1100 +$conreserve AZOMSWIP 1101 +$conreserve AZOMSTND 1102 +$conreserve AZOMSPOT 1103 +$conreserve AZOMROAM 1104 +$conreserve AZOMMOAN 1105 +$conreserve AZOMPAIN 1106 +$conreserve AZOMDIE1 1107 +$conreserve AZOMDIE2 1108 +$conreserve AZOMDIE3 1109 +$conreserve FZOMSPOT 1200 +$conreserve FZOMROAM 1201 +$conreserve FZOMPAIN 1202 +$conreserve FZOMPUKE 1203 +$conreserve FZOMDIE1 1204 +$conreserve FZOMDIE2 1205 +$conreserve FZOMDIE3 1206 +$conreserve CLEAVER 1207 +$conreserve CERBSPOT 1300 +$conreserve CERBPAIN 1302 +$conreserve CERBDIE1 1303 +$conreserve CERBDIE2 1304 +$conreserve CERBDIE3 1305 +$conreserve HOUNDBIT 1306 +$conreserve HOUNDBT2 1307 +$conreserve HOUNDBT3 1308 +$conreserve FIRBALL 1309 +$conreserve GARGSPOT 1400 +$conreserve GARGROAM 1401 +$conreserve GARGPAIN 1402 +$conreserve GARGDIE1 1403 +$conreserve GARGDIE2 1404 +$conreserve GARGDIE3 1405 +$conreserve GARGCLAW 1406 +$conreserve GARGBLST 1407 +$conreserve GARGTHRO 1408 +$conreserve SARGSPOT 1450 +$conreserve SARGROAM 1451 +$conreserve SARGPAIN 1452 +$conreserve SARGDIE1 1453 +$conreserve SARGDIE2 1454 +$conreserve SARGDIE3 1455 +$conreserve SARGCLAW 1456 +$conreserve SARGBLST 1457 +$conreserve SARGTHRO 1458 +$conreserve EELSPOT 1500 +$conreserve EELROAM 1501 +$conreserve EELPAIN 1502 +$conreserve EELDIE1 1503 +$conreserve EELDIE2 1504 +$conreserve EELDIE3 1505 +$conreserve PHANSPOT 1600 +$conreserve PHANROAM 1601 +$conreserve PHANPAIN 1602 +$conreserve PHANDIE1 1603 +$conreserve PHANDIE3 1604 +$conreserve PHANDIE3A 1605 +$conreserve GILLSPOT 1700 +$conreserve GILLROAM 1701 +$conreserve GILLPAIN 1702 +$conreserve GILLDIE1 1703 +$conreserve GILLDIE2 1704 +$conreserve GILLDIE3 1705 +$conreserve SPIDSPOT 1800 +$conreserve SPIDROAM 1801 +$conreserve SPIDPAIN 1802 +$conreserve SPIDDIE1 1803 +$conreserve SPIDDIE2 1804 +$conreserve SPIDDIE3 1805 +$conreserve MSPIDIE 1850 +$conreserve MSPIPAN1 1851 +$conreserve MSPIPAN2 1852 +$conreserve MSPISPT1 1853 +$conreserve MSPISPT2 1854 +$conreserve HANDSPOT 1900 +$conreserve HANDROAM 1901 +$conreserve HANDPAIN 1902 +$conreserve HANDDIE1 1903 +$conreserve HANDDIE2 1904 +$conreserve HANDDIE3 1905 +$conreserve BATSPOT 2000 +$conreserve BATROAM 2001 +$conreserve BATPAIN 2002 +$conreserve BATDIE1 2003 +$conreserve BATDIE2 2004 +$conreserve BATDIE3 2005 +$conreserve BAT 2006 +$conreserve RATSPOT 2100 +$conreserve RATROAM 2101 +$conreserve RATPAIN 2102 +$conreserve RATDIE1 2103 +$conreserve RATDIE2 2104 +$conreserve RATDIE3 2105 +$conreserve PODSQUIS 2200 +$conreserve PODOPEN 2201 +$conreserve PODDIE1 2203 +$conreserve PODDIE2 2204 +$conreserve PODDIE3 2205 +$conreserve PODSWISH 2206 +$conreserve CERBSPOTA 2300 +$conreserve CERBROAM 2301 +$conreserve CERBPAIN2 2302 +$conreserve CERBPAIN3 2303 +$conreserve CERBDIE2A 2304 +$conreserve CERBDIE3A 2305 +$conreserve CERBDIE4 2306 +$conreserve TBBOW1 2350 +$conreserve TBBOW2 2351 +$conreserve TBKNEEL1 2352 +$conreserve TBKNEEL2 2353 +$conreserve TBKNEEL3 2354 +$conreserve TBKNEEL4 2355 +$conreserve TBWAIT1 2356 +$conreserve TBWAIT2 2357 +$conreserve TBLAUGH1 2360 +$conreserve TBLAUGH2 2361 +$conreserve TBLAUGH3 2362 +$conreserve TBLAUGH4 2363 +$conreserve TBLAUGH5 2364 +$conreserve TBSACRI1 2365 +$conreserve TBSACRI2 2366 +$conreserve TBSACRI3 2367 +$conreserve TBWORSH1 2368 +$conreserve TBWORSH2 2369 +$conreserve TBPAIN1 2370 +$conreserve TBPAIN2 2371 +$conreserve TBPAIN3 2372 +$conreserve TBPAIN4 2373 +$conreserve TBPAIN5 2374 +$conreserve TBPAIN6 2375 +$conreserve TBPAIN7 2377 +$conreserve TBDIES 2380 +$conreserve TCHNEVAP 2381 +$conreserve FLYBUZZ 2400 +$conreserve MFLY 2401 +$conreserve FPODCLOS 2450 +$conreserve FPODCOL2 2451 +$conreserve FPODEXP2 2452 +$conreserve FPODOPEN 2453 +$conreserve FPODSPIT 2454 +$conreserve FPODCLOS2 2470 +$conreserve PODCOL2 2471 +$conreserve PODEXP2 2472 +$conreserve NPODOPEN 2473 +$conreserve PODSPIT1 2474 +$conreserve PODSPIT2 2475 +$conreserve TENTDWN3 2500 +$conreserve TENTEXP 2501 +$conreserve TENTSWP4 2502 +$conreserve TENTUP3 2503 +$conreserve 1001 3000 +$conreserve 1002 3001 +$conreserve 1003 3002 +$conreserve 1004 3003 +$conreserve 1005 3004 +$conreserve 1006 3005 +$conreserve 1007 3006 +$conreserve 1008 3007 +$conreserve 1009 3008 +$conreserve 1010 3009 +$conreserve 1011 3010 +$conreserve 1012 3011 +$conreserve 1013 3012 +$conreserve 1014 3013 +$conreserve 1015 3014 +$conreserve 1016 3015 +$conreserve 1017 3016 +$conreserve 1018 3017 +$conreserve 1019 3018 +$conreserve 1020 3019 +$conreserve 1021 3020 +$conreserve 1022 3021 +$conreserve 1023 3022 +$conreserve 1024 3023 +$conreserve 1025 3024 +$conreserve 1026 3025 +$conreserve 1027 3026 +$conreserve 1028 3027 +$conreserve 1029 3028 +$conreserve 1030 3029 +$conreserve 1031 3030 +$conreserve 1032 3031 +$conreserve 1033 3032 +$conreserve 1034 3033 +$conreserve 1035 3034 +$conreserve 1036 3035 +$conreserve 1037 3036 +$conreserve 1038 3037 +$conreserve 1039 3038 +$conreserve 1040 3039 +$conreserve 1041 3040 +$conreserve 1042 3041 +$conreserve 1043 3042 +$conreserve 1044 3043 +$conreserve 1045 3044 +$conreserve 1046 3045 +$conreserve 1047 3046 +$conreserve 1048 3047 +$conreserve 1049 3048 +$conreserve 1050 3049 +$conreserve 1051 3050 +$conreserve 1052 3051 +$conreserve 1053 3052 +$conreserve 1054 3053 +$conreserve 1055 3054 +$conreserve 1056 3055 +$conreserve 1057 3056 +$conreserve 1059 3058 +$conreserve 1060 3059 +$conreserve 1061 3060 +$conreserve 1062 3061 +$conreserve 1063 3062 +$conreserve 1064 3063 +$conreserve 1065 3064 +$conreserve 1066 3065 +$conreserve 1067 3066 +$conreserve 1068 3067 +$conreserve 1069 3068 +$conreserve 1070 3069 +$conreserve 1071 3070 +$conreserve 1072 3071 +$conreserve 1073 3072 +$conreserve 1074 3073 +$conreserve 1075 3074 +$conreserve 1076 3075 +$conreserve 1077 3076 +$conreserve 1078 3077 +$conreserve 1079 3078 +$conreserve 1080 3079 +$conreserve 1081 3080 +$conreserve 1082 3081 +$conreserve 1083 3082 +$conreserve 1084 3083 +$conreserve 1085 3084 +$conreserve 1093 3100 +$conreserve 1094 3101 +$conreserve 1095 3102 +$conreserve 1097 3103 +$conreserve VO3011 3104 +$conreserve VO3024 3105 +$conreserve VO3026 3106 +$conreserve VO3030 3107 +$conreserve VO3033 3108 +$conreserve VO3034 3109 +$conreserve VO3035 3110 +$conreserve VO3039 3111 +$conreserve 2100 3200 +$conreserve 2101 3201 +$conreserve 2102 3202 +$conreserve 2103 3203 +$conreserve 2104 3204 +$conreserve 2105 3205 +$conreserve 2106 3206 +$conreserve 2107 3207 +$conreserve 2108 3208 +$conreserve 2109 3209 +$conreserve ZOMBIE 3210 +$conreserve 2111 3211 +$conreserve 2112 3212 +$conreserve 2113 3213 +$conreserve 2114 3214 +$conreserve 2116 3216 +$conreserve VO1 3300 +$conreserve VO2 3301 +$conreserve VO3 3302 +$conreserve VO4 3303 +$conreserve VO5 3304 +$conreserve VO6 3305 +$conreserve VO7 3306 +$conreserve VO8 3307 +$conreserve VO9 3308 +$conreserve VO10 3309 +$conreserve VO12 3310 +$conreserve VO13 3311 +$conreserve VO14 3312 +$conreserve VO15 3313 +$conreserve VO16 3314 +$conreserve VO17 3317 +$conreserve VO18 3318 +$conreserve VO19 3319 +$conreserve VO20 3320 +$conreserve VO21 3321 +$conreserve VO22 3322 +$conreserve VO23 3323 +$conreserve VO24 3324 +$conreserve VO25 3325 +$conreserve VO26 3326 +$conreserve VO27 3327 +$conreserve VO28 3328 +$conreserve VO29 3329 +$conreserve VO30 3330 +$conreserve VO31 3331 +$conreserve VO32 3332 +$conreserve VO33 3333 +$conreserve VO34 3334 +$conreserve VO35 3335 +$conreserve VO36 3336 +$conreserve VO37 3337 +$conreserve VO38 3338 +$conreserve VO39 3339 +$conreserve VO40 3340 +$conreserve VO41 3341 +$conreserve VO42 3342 +$conreserve VO43 3343 +$conreserve VO44 3344 +$conreserve ALIVE 3345 +$conreserve BONED 4100 +$conreserve CASTRA 4101 +$conreserve CREAMED 4102 +$conreserve DESTRO 4103 +$conreserve DICED 4104 +$conreserve DISEMBO 4105 +$conreserve FLATTE 4106 +$conreserve JUSTICE 4107 +$conreserve MADNESS 4108 +$conreserve DECIMAT 4109 +$conreserve KILLED 4110 +$conreserve MINCMEAT 4111 +$conreserve MASSACR 4112 +$conreserve MUTILA 4113 +$conreserve REAMED 4114 +$conreserve RIPPED 4115 +$conreserve SLAUGHT 4116 +$conreserve SLICED 4117 +$conreserve SMASHED 4118 +$conreserve SODOMIZ 4119 +$conreserve SPLATT 4120 +$conreserve SQUASH 4121 +$conreserve THROTTL 4122 +$conreserve WASTED 4123 +$conreserve 10 4124 +$conreserve OMNI24 4125 +$conreserve OMNI25 4126 +$conreserve OMNI26 4127 +$conreserve OMNI27 4128 +$conreserve OMNI32 4129 +$conreserve OMNI34 4130 +$conreserve OMNI35 4141 +$conreserve OMNI36 4132 +$conreserve OMNI37 4133 +$conreserve OMNI41 4134 +$conreserve OMNI43 4135 +$conreserve OMNI44 4136 +$conreserve OMNI5 4200 +$conreserve OMNI7 4202 +$conreserve OMNI8 4203 +$conreserve OMNI9 4204 +$conreserve OMNI12 4206 +$conreserve OMNI13 4207 +$conreserve OMNI16 4208 +$conreserve OMNI20 4210 +$conreserve OMNI21 4211 +$conreserve OMNI22 4212 +$conreserve OMNI23 4213 +$conreserve OMNI15A 4300 +$conreserve TAUNT0 4400 +$conreserve TAUNT1 4401 +$conreserve TAUNT2 4402 +$conreserve TAUNT3 4403 +$conreserve TAUNT4 4404 +$conreserve TAUNT5 4405 +$conreserve TAUNT6 4406 +$conreserve TAUNT7 4407 +$conreserve TAUNT8 4408 +$conreserve TAUNT9 4409 +$conreserve 3000 4500 +$conreserve 3001B 4502 +$conreserve 3002A 4503 +$conreserve 3002B 4504 +$conreserve 3002C 4505 +$conreserve 3002D 4506 +$conreserve 3003 4507 +$conreserve 3004B 4509 +$conreserve 3006 4511 +$conreserve 3007 4512 +$conreserve 3008 4513 +$conreserve 3009 4514 +$conreserve 3010 4515 +$conreserve 3011 4516 +$conreserve 3012 4517 +$conreserve 3013 4518 +$conreserve 3014 4519 +$conreserve 3015 4520 +$conreserve 3016A 4521 +$conreserve 3017 4523 +$conreserve 3018B 4525 +$conreserve 3019 4526 +$conreserve 3020 4527 +$conreserve 3021 4528 +$conreserve 3022B 4530 +$conreserve 3023A 4531 +$conreserve 3024 4533 +$conreserve 3025 4534 +$conreserve 3026 4535 +$conreserve 3027 4536 +$conreserve 3028 4537 +$conreserve 3029 4538 +$conreserve 3030 4539 +$conreserve 3031 4540 +$conreserve 3032 4541 +$conreserve 3033 4542 +$conreserve 3034 4543 +$conreserve 3035 4544 +$conreserve 3036 4545 +$conreserve 3037 4546 +$conreserve 3038 4547 +$conreserve 3039 4548 +$conreserve ICRYING 7000 +$conreserve ICRYING2 7001 +$conreserve IDONHME 7002 +$conreserve IGOAWAY2 7003 +$conreserve IGOAWAY3 7004 +$conreserve INOPLACE 7005 +$conreserve IPLEASE 7006 +$conreserve ISCREAM1 7007 +$conreserve ISCREAM2 7008 +$conreserve 8000 8000 +$conreserve 8001 8001 +$conreserve 8002 8002 +$conreserve 8003 8003 +$conreserve 8004 8004 +$conreserve 8005 8005 +$conreserve 8006 8006 +$conreserve 8007 8007 +$conreserve BEASTD4 9000 +$conreserve BEASTD3 9001 +$conreserve BEASTD2 9002 +$conreserve BEASTD1 9003 +$conreserve BEAST1 9004 +$conreserve BEAST2 9005 +$conreserve BEAST3 9006 +$conreserve CALEBM1 9007 +$conreserve CULTMO1 9008 +$conreserve ROAR1 9009 +$conreserve ROAR2 9010 +$conreserve ROAR3 9011 +$conreserve SLASH1 9012 +$conreserve SLASH2 9013 +$conreserve SLASH3 9014 +$conreserve T1005 10001 +$conreserve T1002 10000 +$conreserve STOMP3 9017 +$conreserve STOMP4 9016 +$conreserve STOM5 9015 +$conreserve T1006 10002 +$conreserve T1010 10003 +$conreserve T1011 10004 +$conreserve T1015 10005 +$conreserve T1051 10006 +$conreserve T1003 11000 +$conreserve T1013 11001