diff --git a/CMakeSettings.json b/CMakeSettings.json new file mode 100644 index 0000000000..8710296e4f --- /dev/null +++ b/CMakeSettings.json @@ -0,0 +1,47 @@ +{ + "configurations": [ + { + "name": "x64-Release", + "generator": "Ninja", + "configurationType": "Release", + "inheritEnvironments": [ "msvc_x64_x64" ], + "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", + "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "-v", + "ctestCommandArgs": "", + "variables": [ + { + "name": "ZDOOM_GENERATE_ASM", + "value": "True", + "type": "BOOL" + }, + { + "name": "ZDOOM_GENERATE_MAPFILE", + "value": "True", + "type": "BOOL" + }, + { + "name": "ZDOOM_OUTPUT_OLDSTYLE", + "value": "True", + "type": "BOOL" + }, + { + "name": "JPEG_INCLUDE_DIR", + "value": "c:\\Programming\\vcpkg\\packages\\libjpeg-turbo_x64-windows-static\\include\\", + "type": "PATH" + }, + { + "name": "JPEG_LIBRARY_DEBUG", + "value": "c:\\Programming\\vcpkg\\packages\\libjpeg-turbo_x64-windows-static\\lib\\jpeg.lib", + "type": "FILEPATH" + }, + { + "name": "JPEG_LIBRARY_RELEASE", + "value": "c:\\Programming\\vcpkg\\packages\\libjpeg-turbo_x64-windows-static\\lib\\jpeg.lib", + "type": "FILEPATH" + } + ] + } + ] +} \ No newline at end of file diff --git a/externs.txt b/externs.txt new file mode 100644 index 0000000000..e157f790a8 --- /dev/null +++ b/externs.txt @@ -0,0 +1,21073 @@ +Search "EXTRN" (20592 hits in 480 files) + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\a_action.cod (12 hits) + Line 17: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 63: EXTRN atexit:PROC + Line 64: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 65: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 66: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 67: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 68: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 69: EXTRN ?P_DropItem@@YAPEAVAActor@@PEAV1@PEAVPClassActor@@HH@Z:PROC ; P_DropItem + Line 70: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 71: EXTRN memmove:PROC + Line 72: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 73: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\a_decals.cod (65 hits) + Line 29: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 30: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 31: EXTRN ?DecalLibrary@@3VFDecalLib@@A:BYTE ; DecalLibrary + Line 190: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 191: EXTRN atexit:PROC + Line 192: EXTRN __std_terminate:PROC + Line 193: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 194: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 195: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 196: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 197: EXTRN c_sqrt:PROC + Line 198: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 199: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 200: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 201: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 202: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 203: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 204: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 205: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 206: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 207: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 208: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 209: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 210: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 211: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 212: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 213: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 214: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 215: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 216: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 217: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 218: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 219: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 220: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 221: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 222: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 223: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFTextureID@@PEAV2@@Z:PROC ; Serialize + Line 224: EXTRN ??_EDBaseDecal@@UEAAPEAXI@Z:PROC ; DBaseDecal::`vector deleting destructor' + Line 225: EXTRN ??_EDImpactDecal@@UEAAPEAXI@Z:PROC ; DImpactDecal::`vector deleting destructor' + Line 226: EXTRN ?Trace@@YA_NAEBU?$TVector3@N@@PEAUsector_t@@0NV?$TFlags@W4ActorFlag@@I@@IPEAVAActor@@AEAUFTraceResults@@IP6A?AW4ETraceStatus@@4PEAX@Z5@Z:PROC ; Trace + Line 227: EXTRN ?ApplyToDecal@FDecalTemplate@@QEBAXPEAVDBaseDecal@@PEAUside_t@@@Z:PROC ; FDecalTemplate::ApplyToDecal + Line 228: EXTRN ?GetDecalByNum@FDecalLib@@QEBAPEBVFDecalTemplate@@G@Z:PROC ; FDecalLib::GetDecalByNum + Line 229: EXTRN ?GetDecalByName@FDecalLib@@QEBAPEBVFDecalTemplate@@PEBD@Z:PROC ; FDecalLib::GetDecalByName + Line 230: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 231: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 232: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 233: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 234: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 235: EXTRN ?Net_WriteString@@YAXPEBD@Z:PROC ; Net_WriteString + Line 236: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 237: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 238: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 239: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 240: EXTRN ??$Serialize@Usector_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUsector_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 241: EXTRN ??$Serialize@Uside_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUside_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 242: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEATFRenderStyle@@PEAT2@@Z:PROC ; Serialize + Line 243: EXTRN ?FirstThinker@FLevelLocals@@QEAAPEAVDThinker@@H@Z:PROC ; FLevelLocals::FirstThinker + Line 244: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 245: EXTRN __CxxFrameHandler3:PROC + Line 246: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 247: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 248: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 249: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 250: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 251: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\a_dynlight.cod (45 hits) + Line 210: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 211: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 212: EXTRN atexit:PROC + Line 213: EXTRN __std_terminate:PROC + Line 214: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 215: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 216: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 217: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 218: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 219: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 220: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 221: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 222: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 223: EXTRN ??0FMemArena@@QEAA@_K@Z:PROC ; FMemArena::FMemArena + Line 224: EXTRN ??1FMemArena@@QEAA@XZ:PROC ; FMemArena::~FMemArena + Line 225: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 226: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 227: EXTRN ??0FRandom@@QEAA@XZ:PROC ; FRandom::FRandom + Line 228: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 229: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 230: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 231: EXTRN ?MatchString@@YAHPEBDPEAPEBD@Z:PROC ; MatchString + Line 232: EXTRN ?GetSpriteFrame@spritedef_t@@QEAA?AVFTextureID@@HHU?$TAngle@N@@PEA_N_N@Z:PROC ; spritedef_t::GetSpriteFrame + Line 233: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 234: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 235: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 236: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 237: EXTRN ?IsVisibleToPlayer@AActor@@QEBA_NXZ:PROC ; AActor::IsVisibleToPlayer + Line 238: EXTRN ?GetPortalOffsetPosition@FLevelLocals@@QEAA?AU?$TVector2@N@@NNNN@Z:PROC ; FLevelLocals::GetPortalOffsetPosition + Line 239: EXTRN ?PointInRenderSubsector@FLevelLocals@@QEAAPEAUsubsector_t@@HH@Z:PROC ; FLevelLocals::PointInRenderSubsector + Line 240: EXTRN ?Update@FCycler@@QEAAXN@Z:PROC ; FCycler::Update + Line 241: EXTRN ?SetParams@FCycler@@QEAAXNNN_N@Z:PROC ; FCycler::SetParams + Line 242: EXTRN ?ApplyProperties@FLightDefaults@@QEBAXPEAUFDynamicLight@@@Z:PROC ; FLightDefaults::ApplyProperties + Line 243: EXTRN __CxxFrameHandler3:PROC + Line 244: EXTRN memset:PROC + Line 245: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 246: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 247: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 248: EXTRN ?validcount@@3HA:DWORD ; validcount + Line 249: EXTRN ?dl_validcount@@3HA:DWORD ; dl_validcount + Line 250: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 251: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 252: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 253: EXTRN ?StateLights@@3V?$TArray@PEAVFLightDefaults@@PEAV1@@@A:BYTE ; StateLights + Line 254: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\a_dynlightdata.cod (19 hits) + Line 25: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 26: EXTRN atexit:PROC + Line 27: EXTRN __std_terminate:PROC + Line 28: EXTRN strncmp:PROC + Line 29: EXTRN toupper:PROC + Line 30: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 31: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 32: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 33: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 34: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 35: EXTRN ?GetReplacement@PClassActor@@QEAAPEAV1@_N@Z:PROC ; PClassActor::GetReplacement + Line 36: EXTRN ?SetParams@FCycler@@QEAAXNNN_N@Z:PROC ; FCycler::SetParams + Line 37: EXTRN __CxxFrameHandler3:PROC + Line 38: EXTRN memmove:PROC + Line 39: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 40: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 41: EXTRN ?ClassDataAllocator@@3VFMemArena@@A:BYTE ; ClassDataAllocator + Line 42: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 43: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\a_flashfader.cod (27 hits) + Line 13: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 57: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 58: EXTRN __std_terminate:PROC + Line 59: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 60: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 61: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 62: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 63: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 64: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 65: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 66: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 67: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 68: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 69: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 70: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 71: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 72: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 73: EXTRN ??_EDFlashFader@@UEAAPEAXI@Z:PROC ; DFlashFader::`vector deleting destructor' + Line 74: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 75: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 76: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 77: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 78: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAMPEAM@Z:PROC ; Serialize + Line 79: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 80: EXTRN __CxxFrameHandler3:PROC + Line 81: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 82: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\a_keys.cod (45 hits) + Line 65: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 66: EXTRN atexit:PROC + Line 67: EXTRN __std_terminate:PROC + Line 68: EXTRN qsort:PROC + Line 69: EXTRN stricmp:PROC + Line 70: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 71: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 72: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 73: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 74: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 75: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 76: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 77: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 78: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 79: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 80: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 81: EXTRN ?S_FindSkinnedSound@@YAHPEAVAActor@@VFSoundID@@@Z:PROC ; S_FindSkinnedSound + Line 82: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 83: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 84: EXTRN ?Close@FScanner@@QEAAXXZ:PROC ; FScanner::Close + Line 85: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 86: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 87: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 88: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 89: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 90: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 91: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 92: EXTRN ?MatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MatchString + Line 93: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 94: EXTRN ?CheckLocalView@AActor@@QEBA_NH@Z:PROC ; AActor::CheckLocalView + Line 95: EXTRN ?GetSpecies@AActor@@QEAA?AVFName@@XZ:PROC ; AActor::GetSpecies + Line 96: EXTRN ?C_MidPrint@@YAXPEAVFFont@@PEBD@Z:PROC ; C_MidPrint + Line 97: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 98: EXTRN __CxxFrameHandler3:PROC + Line 99: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 100: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 101: EXTRN ?GameNames@@3PAPEBDA:BYTE ; GameNames + Line 102: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 103: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 104: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 105: EXTRN ?AllActorClasses@PClassActor@@2V?$TArray@PEAVPClassActor@@PEAV1@@@A:BYTE ; PClassActor::AllActorClasses + Line 106: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 107: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 108: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 109: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\a_lightning.cod (42 hits) + Line 13: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 61: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 62: EXTRN atexit:PROC + Line 63: EXTRN __std_terminate:PROC + Line 64: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 65: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 66: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 67: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 68: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 69: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 70: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 71: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 72: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 73: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 74: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 75: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 76: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 77: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 78: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 79: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 80: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 81: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 82: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 83: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 84: EXTRN ??_EDLightningThinker@@UEAAPEAXI@Z:PROC ; DLightningThinker::`vector deleting destructor' + Line 85: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 86: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 87: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 88: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 89: EXTRN ?S_Sound@@YAXHVFSoundID@@MM@Z:PROC ; S_Sound + Line 90: EXTRN ?StartTypedScripts@FBehaviorContainer@@QEAAXGPEAVAActor@@_NH1@Z:PROC ; FBehaviorContainer::StartTypedScripts + Line 91: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 92: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 93: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 94: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 95: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 96: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAFPEAF@Z:PROC ; Serialize + Line 97: EXTRN ?E_WorldLightning@@YAXXZ:PROC ; E_WorldLightning + Line 98: EXTRN __CxxFrameHandler3:PROC + Line 99: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 100: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 101: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\a_morph.cod (3 hits) + Line 14: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 15: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 16: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\a_pickups.cod (21 hits) + Line 10: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 33: EXTRN atexit:PROC + Line 34: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 35: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 36: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 37: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 38: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 39: EXTRN ?FindFunction@PClass@@SAXPEAPEAVVMFunction@@VFName@@1@Z:PROC ; PClass::FindFunction + Line 40: EXTRN ?CheckCheatmode@@YA_N_N@Z:PROC ; CheckCheatmode + Line 41: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 42: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 43: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 44: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 45: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 46: EXTRN ?C_PrintInv@@YAXPEAVAActor@@@Z:PROC ; C_PrintInv + Line 47: EXTRN ?C_AimLine@@YAXPEAUFTranslatedLineTarget@@_N@Z:PROC ; C_AimLine + Line 48: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 49: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 50: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 51: EXTRN ?gametic@@3HA:DWORD ; gametic + Line 52: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\a_quake.cod (48 hits) + Line 14: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 80: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 81: EXTRN atexit:PROC + Line 82: EXTRN __std_terminate:PROC + Line 83: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 84: EXTRN c_sqrt:PROC + Line 85: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 86: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 87: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 88: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 89: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 90: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 91: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 92: EXTRN ?P_DamageMobj@@YAHPEAVAActor@@00HVFName@@HU?$TAngle@N@@@Z:PROC ; P_DamageMobj + Line 93: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 94: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 95: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 96: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 97: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 98: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 99: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 100: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 101: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 102: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 103: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 104: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 105: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 106: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 107: EXTRN ?S_StopSound@@YAXPEAVAActor@@H@Z:PROC ; S_StopSound + Line 108: EXTRN ?S_IsActorPlayingSomething@@YA_NPEAVAActor@@HH@Z:PROC ; S_IsActorPlayingSomething + Line 109: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 110: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 111: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 112: EXTRN ?PosRelative@AActor@@QEBA?AU?$TVector3@N@@PEBV1@@Z:PROC ; AActor::PosRelative + Line 113: EXTRN ??_EDEarthquake@@UEAAPEAXI@Z:PROC ; DEarthquake::`vector deleting destructor' + Line 114: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 115: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 116: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 117: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 118: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 119: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 120: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFSoundID@@PEAV2@@Z:PROC ; Serialize + Line 121: EXTRN __CxxFrameHandler3:PROC + Line 122: EXTRN memcmp:PROC + Line 123: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 124: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 125: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 126: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\a_specialspot.cod (30 hits) + Line 13: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 64: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 65: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 66: EXTRN atexit:PROC + Line 67: EXTRN __std_terminate:PROC + Line 68: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 69: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 70: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 71: EXTRN c_sqrt:PROC + Line 72: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 73: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 74: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 75: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 76: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 77: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 78: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 79: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 80: EXTRN ??_EDSpotState@@UEAAPEAXI@Z:PROC ; DSpotState::`vector deleting destructor' + Line 81: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 82: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 83: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 84: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 85: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 86: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 87: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 88: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 89: EXTRN ??$Serialize@VPClassActor@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAVPClassActor@@PEAPEAV1@@Z:PROC ; Serialize + Line 90: EXTRN __CxxFrameHandler3:PROC + Line 91: EXTRN memmove:PROC + Line 92: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\a_weapons.cod (51 hits) + Line 12: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 90: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 91: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 92: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 93: EXTRN atexit:PROC + Line 94: EXTRN __std_terminate:PROC + Line 95: EXTRN qsort:PROC + Line 96: EXTRN atoi:PROC + Line 97: EXTRN strtok:PROC + Line 98: EXTRN stricmp:PROC + Line 99: EXTRN strnicmp:PROC + Line 100: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 101: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 102: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 103: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 104: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 105: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 106: EXTRN ?LockBuffer@FString@@QEAAPEADXZ:PROC ; FString::LockBuffer + Line 107: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 108: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 109: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 110: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 111: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 112: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 113: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 114: EXTRN ?ReadByte@@YAHPEAPEAE@Z:PROC ; ReadByte + Line 115: EXTRN ?ReadWord@@YAHPEAPEAE@Z:PROC ; ReadWord + Line 116: EXTRN ?ReadStringConst@@YAPEBDPEAPEAE@Z:PROC ; ReadStringConst + Line 117: EXTRN ?WriteWord@@YAXFPEAPEAE@Z:PROC ; WriteWord + Line 118: EXTRN ?WriteString@@YAXPEBDPEAPEAE@Z:PROC ; WriteString + Line 119: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 120: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 121: EXTRN ?AddCommandString@@YAXPEBDH@Z:PROC ; AddCommandString + Line 122: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 123: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 124: EXTRN ?SetSection@FConfigFile@@QEAA_NPEBD_N@Z:PROC ; FConfigFile::SetSection + Line 125: EXTRN ?NextInSection@FConfigFile@@QEAA_NAEAPEBD0@Z:PROC ; FConfigFile::NextInSection + Line 126: EXTRN ?GetConfigPath@FGameConfigFile@@QEAA?AVFString@@_N@Z:PROC ; FGameConfigFile::GetConfigPath + Line 127: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 128: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 129: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 130: EXTRN __CxxFrameHandler3:PROC + Line 131: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 132: EXTRN ?AllActorClasses@PClassActor@@2V?$TArray@PEAVPClassActor@@PEAV1@@@A:BYTE ; PClassActor::AllActorClasses + Line 133: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 134: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 135: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 136: EXTRN ?Net_Arbitrator@@3HA:DWORD ; Net_Arbitrator + Line 137: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 138: EXTRN ?ParsingKeyConf@@3_NA:BYTE ; ParsingKeyConf + Line 139: EXTRN ?GameConfig@@3PEAVFGameConfigFile@@EA:QWORD ; GameConfig + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\actorptrselect.cod (2 hits) + Line 15: EXTRN ?P_BulletSlope@@YA?AU?$TAngle@N@@PEAVAActor@@PEAUFTranslatedLineTarget@@H@Z:PROC ; P_BulletSlope + Line 16: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\adlmidi.cod (61 hits) + Line 168: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 169: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 170: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 171: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 172: EXTRN __std_terminate:PROC + Line 173: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 174: EXTRN free:PROC + Line 175: EXTRN malloc:PROC + Line 176: EXTRN ??2@YAPEAX_KAEBUnothrow_t@std@@@Z:PROC ; operator new + Line 177: EXTRN __stdio_common_vsprintf:PROC + Line 178: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 179: EXTRN ?maxAdlBanks@@YAHXZ:PROC ; maxAdlBanks + Line 180: EXTRN ?cvt_ADLI_to_FMIns@@YAXAEAUadlinsdata2@@AEBUADL_Instrument@@@Z:PROC ; cvt_ADLI_to_FMIns + Line 181: EXTRN ?cvt_FMIns_to_ADLI@@YAXAEAUADL_Instrument@@AEBUadlinsdata2@@@Z:PROC ; cvt_FMIns_to_ADLI + Line 182: EXTRN ?adlCalculateFourOpChannels@@YAHPEAVMIDIplay@@_N@Z:PROC ; adlCalculateFourOpChannels + Line 183: EXTRN ?setupLocked@OPL3@@QEAA_NXZ:PROC ; OPL3::setupLocked + Line 184: EXTRN ?setEmbeddedBank@OPL3@@QEAAXI@Z:PROC ; OPL3::setEmbeddedBank + Line 185: EXTRN ?updateChannelCategories@OPL3@@QEAAXXZ:PROC ; OPL3::updateChannelCategories + Line 186: EXTRN ?commitDeepFlags@OPL3@@QEAAXXZ:PROC ; OPL3::commitDeepFlags + Line 187: EXTRN ?setVolumeScaleModel@OPL3@@QEAAXW4ADLMIDI_VolumeModels@@@Z:PROC ; OPL3::setVolumeScaleModel + Line 188: EXTRN ?getVolumeScaleModel@OPL3@@QEAA?AW4ADLMIDI_VolumeModels@@XZ:PROC ; OPL3::getVolumeScaleModel + Line 189: EXTRN ??0MIDIplay@@QEAA@K@Z:PROC ; MIDIplay::MIDIplay + Line 190: EXTRN ?applySetup@MIDIplay@@QEAAXXZ:PROC ; MIDIplay::applySetup + Line 191: EXTRN ?partialReset@MIDIplay@@QEAAXXZ:PROC ; MIDIplay::partialReset + Line 192: EXTRN ?resetMIDI@MIDIplay@@QEAAXXZ:PROC ; MIDIplay::resetMIDI + Line 193: EXTRN ?getErrorString@MIDIplay@@QEAAAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ:PROC ; MIDIplay::getErrorString + Line 194: EXTRN ?setErrorString@MIDIplay@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z:PROC ; MIDIplay::setErrorString + Line 195: EXTRN ?LoadBank@MIDIplay@@QEAA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z:PROC ; MIDIplay::LoadBank + Line 196: EXTRN ?LoadBank@MIDIplay@@QEAA_NPEBX_K@Z:PROC ; MIDIplay::LoadBank + Line 197: EXTRN ?TickIterators@MIDIplay@@QEAAXN@Z:PROC ; MIDIplay::TickIterators + Line 198: EXTRN ?realTime_ResetState@MIDIplay@@QEAAXXZ:PROC ; MIDIplay::realTime_ResetState + Line 199: EXTRN ?realTime_NoteOn@MIDIplay@@QEAA_NEEE@Z:PROC ; MIDIplay::realTime_NoteOn + Line 200: EXTRN ?realTime_NoteOff@MIDIplay@@QEAAXEE@Z:PROC ; MIDIplay::realTime_NoteOff + Line 201: EXTRN ?realTime_NoteAfterTouch@MIDIplay@@QEAAXEEE@Z:PROC ; MIDIplay::realTime_NoteAfterTouch + Line 202: EXTRN ?realTime_ChannelAfterTouch@MIDIplay@@QEAAXEE@Z:PROC ; MIDIplay::realTime_ChannelAfterTouch + Line 203: EXTRN ?realTime_Controller@MIDIplay@@QEAAXEEE@Z:PROC ; MIDIplay::realTime_Controller + Line 204: EXTRN ?realTime_PatchChange@MIDIplay@@QEAAXEE@Z:PROC ; MIDIplay::realTime_PatchChange + Line 205: EXTRN ?realTime_PitchBend@MIDIplay@@QEAAXEG@Z:PROC ; MIDIplay::realTime_PitchBend + Line 206: EXTRN ?realTime_PitchBend@MIDIplay@@QEAAXEEE@Z:PROC ; MIDIplay::realTime_PitchBend + Line 207: EXTRN ?realTime_BankChangeLSB@MIDIplay@@QEAAXEE@Z:PROC ; MIDIplay::realTime_BankChangeLSB + Line 208: EXTRN ?realTime_BankChangeMSB@MIDIplay@@QEAAXEE@Z:PROC ; MIDIplay::realTime_BankChangeMSB + Line 209: EXTRN ?realTime_BankChange@MIDIplay@@QEAAXEG@Z:PROC ; MIDIplay::realTime_BankChange + Line 210: EXTRN ?setDeviceId@MIDIplay@@QEAAXE@Z:PROC ; MIDIplay::setDeviceId + Line 211: EXTRN ?realTime_SysEx@MIDIplay@@QEAA_NPEBE_K@Z:PROC ; MIDIplay::realTime_SysEx + Line 212: EXTRN ?realTime_panic@MIDIplay@@QEAAXXZ:PROC ; MIDIplay::realTime_panic + Line 213: EXTRN ?describeChannels@MIDIplay@@QEAAXPEAD0_K@Z:PROC ; MIDIplay::describeChannels + Line 214: EXTRN ?adl_isEmulatorAvailable@@YA_NH@Z:PROC ; adl_isEmulatorAvailable + Line 215: EXTRN _CxxThrowException:PROC + Line 216: EXTRN __CxxFrameHandler3:PROC + Line 217: EXTRN __chkstk:PROC + Line 218: EXTRN memcpy:PROC + Line 219: EXTRN memmove:PROC + Line 220: EXTRN memset:PROC + Line 221: EXTRN ?nothrow@std@@3Unothrow_t@1@B:BYTE ; std::nothrow + Line 222: EXTRN ?adl@@3QBUadldata@@B:BYTE ; adl + Line 223: EXTRN ?adlins@@3QBUadlinsdata@@B:BYTE ; adlins + Line 224: EXTRN ?banks@@3QAY0BAA@$$CBGA:BYTE ; banks + Line 225: EXTRN ?banknames@@3QBQEBDB:BYTE ; banknames + Line 226: EXTRN ?ADLMIDI_ErrorString@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A:BYTE ; ADLMIDI_ErrorString + Line 227: EXTRN __ImageBase:BYTE + Line 228: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\adlmidi_load.cod (27 hits) + Line 45: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 46: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 47: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 48: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 49: EXTRN __std_terminate:PROC + Line 50: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 51: EXTRN __imp_MultiByteToWideChar:PROC + Line 52: EXTRN free:PROC + Line 53: EXTRN malloc:PROC + Line 54: EXTRN round:PROC + Line 55: EXTRN _wfopen:PROC + Line 56: EXTRN fclose:PROC + Line 57: EXTRN fread:PROC + Line 58: EXTRN fseek:PROC + Line 59: EXTRN ftell:PROC + Line 60: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 61: EXTRN ?setEmbeddedBank@OPL3@@QEAAXI@Z:PROC ; OPL3::setEmbeddedBank + Line 62: EXTRN ?applySetup@MIDIplay@@QEAAXXZ:PROC ; MIDIplay::applySetup + Line 63: EXTRN WOPL_Free:PROC + Line 64: EXTRN WOPL_LoadBankFromMem:PROC + Line 65: EXTRN _CxxThrowException:PROC + Line 66: EXTRN __CxxFrameHandler3:PROC + Line 67: EXTRN __chkstk:PROC + Line 68: EXTRN memcpy:PROC + Line 69: EXTRN memmove:PROC + Line 70: EXTRN memset:PROC + Line 71: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\adlmidi_midiplay.cod (42 hits) + Line 221: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 222: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 223: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 224: EXTRN __std_terminate:PROC + Line 225: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 226: EXTRN strchr:PROC + Line 227: EXTRN __acrt_iob_func:PROC + Line 228: EXTRN __stdio_common_vfprintf:PROC + Line 229: EXTRN __stdio_common_vsprintf:PROC + Line 230: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 231: EXTRN adl_getBanksCount:PROC + Line 232: EXTRN ??_EAdlInstrumentTester@@UEAAPEAXI@Z:PROC ; AdlInstrumentTester::`vector deleting destructor' + Line 233: EXTRN ?adlCalculateFourOpChannels@@YAHPEAVMIDIplay@@_N@Z:PROC ; adlCalculateFourOpChannels + Line 234: EXTRN ??0OPL3@@QEAA@XZ:PROC ; OPL3::OPL3 + Line 235: EXTRN ?writeReg@OPL3@@QEAAX_KGE@Z:PROC ; OPL3::writeReg + Line 236: EXTRN ?noteOff@OPL3@@QEAAX_K@Z:PROC ; OPL3::noteOff + Line 237: EXTRN ?noteOn@OPL3@@QEAAX_K0N@Z:PROC ; OPL3::noteOn + Line 238: EXTRN ?touchNote@OPL3@@QEAAX_KEE@Z:PROC ; OPL3::touchNote + Line 239: EXTRN ?setPatch@OPL3@@QEAAX_KAEBUadldata@@@Z:PROC ; OPL3::setPatch + Line 240: EXTRN ?setPan@OPL3@@QEAAX_KE@Z:PROC ; OPL3::setPan + Line 241: EXTRN ?silenceAll@OPL3@@QEAAXXZ:PROC ; OPL3::silenceAll + Line 242: EXTRN ?setVolumeScaleModel@OPL3@@QEAAXW4ADLMIDI_VolumeModels@@@Z:PROC ; OPL3::setVolumeScaleModel + Line 243: EXTRN ?reset@OPL3@@QEAAXHKPEAX@Z:PROC ; OPL3::reset + Line 244: EXTRN ?adl_getLowestEmulator@@YAHXZ:PROC ; adl_getLowestEmulator + Line 245: EXTRN _CxxThrowException:PROC + Line 246: EXTRN __CxxFrameHandler3:PROC + Line 247: EXTRN __chkstk:PROC + Line 248: EXTRN exp:PROC + Line 249: EXTRN log:PROC + Line 250: EXTRN memcmp:PROC + Line 251: EXTRN memcpy:PROC + Line 252: EXTRN memmove:PROC + Line 253: EXTRN memset:PROC + Line 254: EXTRN pow:PROC + Line 255: EXTRN sin:PROC + Line 256: EXTRN ?adl@@3QBUadldata@@B:BYTE ; adl + Line 257: EXTRN ?adlins@@3QBUadlinsdata@@B:BYTE ; adlins + Line 258: EXTRN ?banks@@3QAY0BAA@$$CBGA:BYTE ; banks + Line 259: EXTRN ?adlbanksetup@@3QBUAdlBankSetup@@B:BYTE ; adlbanksetup + Line 260: EXTRN ?m_emptyInstrument@OPL3@@2Uadlinsdata2@@B:BYTE ; OPL3::m_emptyInstrument + Line 261: EXTRN __ImageBase:BYTE + Line 262: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\adlmidi_opl3.cod (24 hits) + Line 74: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 75: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 76: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 77: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 78: EXTRN __std_terminate:PROC + Line 79: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 80: EXTRN abort:PROC + Line 81: EXTRN round:PROC + Line 82: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 83: EXTRN ?maxAdlBanks@@YAHXZ:PROC ; maxAdlBanks + Line 84: EXTRN ??0NukedOPL3@@QEAA@XZ:PROC ; NukedOPL3::NukedOPL3 + Line 85: EXTRN ??0NukedOPL3v174@@QEAA@XZ:PROC ; NukedOPL3v174::NukedOPL3v174 + Line 86: EXTRN ??0DosBoxOPL3@@QEAA@XZ:PROC ; DosBoxOPL3::DosBoxOPL3 + Line 87: EXTRN _CxxThrowException:PROC + Line 88: EXTRN __CxxFrameHandler3:PROC + Line 89: EXTRN __chkstk:PROC + Line 90: EXTRN memcpy:PROC + Line 91: EXTRN memmove:PROC + Line 92: EXTRN memset:PROC + Line 93: EXTRN ?adl@@3QBUadldata@@B:BYTE ; adl + Line 94: EXTRN ?adlins@@3QBUadlinsdata@@B:BYTE ; adlins + Line 95: EXTRN ?banks@@3QAY0BAA@$$CBGA:BYTE ; banks + Line 96: EXTRN __ImageBase:BYTE + Line 97: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\adlmidi_private.cod (8 hits) + Line 15: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 16: EXTRN atexit:PROC + Line 17: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 18: EXTRN ?updateChannelCategories@OPL3@@QEAAXXZ:PROC ; OPL3::updateChannelCategories + Line 19: EXTRN ?adl@@3QBUadldata@@B:BYTE ; adl + Line 20: EXTRN ?adlins@@3QBUadlinsdata@@B:BYTE ; adlins + Line 21: EXTRN ?banks@@3QAY0BAA@$$CBGA:BYTE ; banks + Line 22: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\am_map.cod (139 hits) + Line 118: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 119: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 120: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 121: EXTRN ?sv_cheats@@3VFBoolCVar@@A:BYTE ; sv_cheats + Line 122: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 868: EXTRN _purecall:PROC + Line 869: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 870: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 871: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 872: EXTRN atexit:PROC + Line 873: EXTRN __std_terminate:PROC + Line 874: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 875: EXTRN atof:PROC + Line 876: EXTRN stricmp:PROC + Line 877: EXTRN strnicmp:PROC + Line 878: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 879: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 880: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 881: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 882: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 883: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 884: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 885: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 886: EXTRN mysnprintf:PROC + Line 887: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 888: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 889: EXTRN ?OpenLumpNum@FScanner@@QEAAXH@Z:PROC ; FScanner::OpenLumpNum + Line 890: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 891: EXTRN ?GetToken@FScanner@@QEAA_NXZ:PROC ; FScanner::GetToken + Line 892: EXTRN ?TokenMustBe@FScanner@@QEAAXH@Z:PROC ; FScanner::TokenMustBe + Line 893: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 894: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 895: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 896: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 897: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 898: EXTRN ?G_SkillProperty@@YAHW4ESkillProperty@@@Z:PROC ; G_SkillProperty + Line 899: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 900: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 901: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 902: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 903: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 904: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 905: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 906: EXTRN ?P_GetLineSpecialInfo@@YAPEAUFLineSpecial@@H@Z:PROC ; P_GetLineSpecialInfo + Line 907: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 908: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 909: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 910: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 911: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 912: EXTRN ?ResetToDefault@FBaseCVar@@QEAAXXZ:PROC ; FBaseCVar::ResetToDefault + Line 913: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 914: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 915: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 916: EXTRN ??0FColorCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FColorCVar::FColorCVar + Line 917: EXTRN ?HSVtoRGB@@YAXPEAM00MMM@Z:PROC ; HSVtoRGB + Line 918: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 919: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFTextureID@@PEAV2@@Z:PROC ; Serialize + Line 920: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 921: EXTRN ?FillSimplePoly@DFrameBuffer@@QEAAXPEAVFTexture@@PEAU?$TVector2@M@@HNNNNU?$TAngle@N@@AEBUFColormap@@UPalEntry@@HHPEAI_K@Z:PROC ; DFrameBuffer::FillSimplePoly + Line 922: EXTRN ?Clear@DFrameBuffer@@QEAAXHHHHHI@Z:PROC ; DFrameBuffer::Clear + Line 923: EXTRN ?DrawLine@DFrameBuffer@@QEAAXHHHHHIE@Z:PROC ; DFrameBuffer::DrawLine + Line 924: EXTRN ?DrawPixel@DFrameBuffer@@QEAAXHHHI@Z:PROC ; DFrameBuffer::DrawPixel + Line 925: EXTRN ?DrawTexture@DFrameBuffer@@QEAAXPEAVFTexture@@NNHZZ:PROC ; DFrameBuffer::DrawTexture + Line 926: EXTRN ?V_GetColorFromString@@YAHPEBIPEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColorFromString + Line 927: EXTRN ?V_GetColorStringByName@@YA?AVFString@@PEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColorStringByName + Line 928: EXTRN ?FindInventory@AActor@@QEAAPEAV1@VFName@@_N@Z:PROC ; AActor::FindInventory + Line 929: EXTRN ?IsTeammate@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsTeammate + Line 930: EXTRN ?GetPortalTransition@AActor@@QEAA?AU?$TVector3@N@@NPEAPEAUsector_t@@@Z:PROC ; AActor::GetPortalTransition + Line 931: EXTRN ?CopyPlaneIfValid@secplane_t@@QEBA_NPEAU1@PEBU1@@Z:PROC ; secplane_t::CopyPlaneIfValid + Line 932: EXTRN ?P_GetPlaneLight@@YAPEAUlightlist_t@@PEAUsector_t@@PEAUsecplane_t@@_N@Z:PROC ; P_GetPlaneLight + Line 933: EXTRN ?AdjustFloorClip@@YAXPEBUsector_t@@@Z:PROC ; AdjustFloorClip + Line 934: EXTRN ?GetFloorLight@@YAHPEBUsector_t@@@Z:PROC ; GetFloorLight + Line 935: EXTRN ?C_DoKey@@YA_NPEAUevent_t@@PEAVFKeyBindings@@1@Z:PROC ; C_DoKey + Line 936: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 937: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 938: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 939: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 940: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 941: EXTRN ??$Serialize@UFLevelLocals@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUFLevelLocals@@PEAPEAU1@@Z:PROC ; Serialize + Line 942: EXTRN ?D_GetPlayerColor@@YAXHPEAM00PEAPEAUFPlayerColorSet@@@Z:PROC ; D_GetPlayerColor + Line 943: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 944: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 945: EXTRN ?CheckCheatmode@@YA_N_N@Z:PROC ; CheckCheatmode + Line 946: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 947: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 948: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 949: EXTRN ??_EDAutomapBase@@UEAAPEAXI@Z:PROC ; DAutomapBase::`vector deleting destructor' + Line 950: EXTRN ?P_GetMapColorForLock@@YAHH@Z:PROC ; P_GetMapColorForLock + Line 951: EXTRN ?P_GetMapColorForKey@@YAHPEAVAActor@@@Z:PROC ; P_GetMapColorForKey + Line 952: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 953: EXTRN ??_EDAutomap@@UEAAPEAXI@Z:PROC ; DAutomap::`vector deleting destructor' + Line 954: EXTRN _CxxThrowException:PROC + Line 955: EXTRN __CxxFrameHandler3:PROC + Line 956: EXTRN ceil:PROC + Line 957: EXTRN cos:PROC + Line 958: EXTRN memmove:PROC + Line 959: EXTRN memset:PROC + Line 960: EXTRN sin:PROC + Line 961: EXTRN sqrt:PROC + Line 962: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 963: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 964: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 965: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 966: EXTRN ?CleanXfac@@3HA:DWORD ; CleanXfac + Line 967: EXTRN ?CleanYfac@@3HA:DWORD ; CleanYfac + Line 968: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 969: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 970: EXTRN ?gameaction@@3W4gameaction_t@@A:DWORD ; gameaction + Line 971: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 972: EXTRN ?Bindings@@3VFKeyBindings@@A:BYTE ; Bindings + Line 973: EXTRN ?AutomapBindings@@3VFKeyBindings@@A:BYTE ; AutomapBindings + Line 974: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 975: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 976: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 977: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 978: EXTRN ?viewactive@@3_NA:BYTE ; viewactive + Line 979: EXTRN ?viewwindowx@@3HA:DWORD ; viewwindowx + Line 980: EXTRN ?viewwindowy@@3HA:DWORD ; viewwindowy + Line 981: EXTRN ?viewheight@@3HA:DWORD ; viewheight + Line 982: EXTRN ?viewwidth@@3HA:DWORD ; viewwidth + Line 983: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 984: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 985: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 986: EXTRN ?dmflags2@@3VFIntCVar@@A:BYTE ; dmflags2 + Line 987: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 988: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 989: EXTRN ?Button_AM_PanLeft@@3UFButtonStatus@@A:BYTE ; Button_AM_PanLeft + Line 990: EXTRN ?Button_AM_PanRight@@3UFButtonStatus@@A:BYTE ; Button_AM_PanRight + Line 991: EXTRN ?Button_AM_PanDown@@3UFButtonStatus@@A:BYTE ; Button_AM_PanDown + Line 992: EXTRN ?Button_AM_PanUp@@3UFButtonStatus@@A:BYTE ; Button_AM_PanUp + Line 993: EXTRN ?Button_AM_ZoomIn@@3UFButtonStatus@@A:BYTE ; Button_AM_ZoomIn + Line 994: EXTRN ?Button_AM_ZoomOut@@3UFButtonStatus@@A:BYTE ; Button_AM_ZoomOut + Line 995: EXTRN ?SpriteFrames@@3V?$TArray@Uspriteframe_t@@U1@@@A:BYTE ; SpriteFrames + Line 996: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 997: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 998: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 999: EXTRN __ImageBase:BYTE + Line 1000: EXTRN _fltused:DWORD + Line 1001: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\ancientzip.cod (14 hits) + Line 37: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 38: EXTRN qsort:PROC + Line 39: EXTRN strncpy:PROC + Line 40: EXTRN __std_exception_copy:PROC + Line 41: EXTRN __std_exception_destroy:PROC + Line 42: EXTRN ??_Eexception@std@@UEAAPEAXI@Z:PROC ; std::exception::`vector deleting destructor' + Line 43: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 44: EXTRN ??_ECDoomError@@UEAAPEAXI@Z:PROC ; CDoomError::`vector deleting destructor' + Line 45: EXTRN ??_ECRecoverableError@@UEAAPEAXI@Z:PROC ; CRecoverableError::`vector deleting destructor' + Line 46: EXTRN ??_ECExplosionError@@UEAAPEAXI@Z:PROC ; CExplosionError::`vector deleting destructor' + Line 47: EXTRN _CxxThrowException:PROC + Line 48: EXTRN __chkstk:PROC + Line 49: EXTRN memset:PROC + Line 50: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\anim_switches.cod (26 hits) + Line 34: EXTRN __std_terminate:PROC + Line 35: EXTRN qsort:PROC + Line 36: EXTRN stricmp:PROC + Line 37: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 38: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 39: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 40: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 41: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 42: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 43: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 44: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 45: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 46: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 47: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 48: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 49: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 50: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 51: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 52: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 53: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 54: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 55: EXTRN __CxxFrameHandler3:PROC + Line 56: EXTRN memcpy:PROC + Line 57: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 58: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 59: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\animations.cod (59 hits) + Line 83: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 84: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 85: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 86: EXTRN atexit:PROC + Line 87: EXTRN __std_terminate:PROC + Line 88: EXTRN free:PROC + Line 89: EXTRN atoi:PROC + Line 90: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 91: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 92: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 93: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 94: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 95: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 96: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 97: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 98: EXTRN ??HFTextureID@@QEAA?AV0@H@Z:PROC ; FTextureID::operator+ + Line 99: EXTRN ?IsNum@@YA_NPEBD@Z:PROC ; IsNum + Line 100: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 101: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 102: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 103: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFTextureID@@PEAV2@@Z:PROC ; Serialize + Line 104: EXTRN ??1FTexture@@UEAA@XZ:PROC ; FTexture::~FTexture + Line 105: EXTRN ?Get8BitPixels@FTexture@@UEAA?AV?$TArray@EE@@_N@Z:PROC ; FTexture::Get8BitPixels + Line 106: EXTRN ?GetBgraBitmap@FTexture@@UEAA?AVFBitmap@@PEAUPalEntry@@PEAH@Z:PROC ; FTexture::GetBgraBitmap + Line 107: EXTRN ?SetFrontSkyLayer@FTexture@@IEAAXXZ:PROC ; FTexture::SetFrontSkyLayer + Line 108: EXTRN ?SetScaledSize@FTexture@@IEAAXHH@Z:PROC ; FTexture::SetScaledSize + Line 109: EXTRN ??0FTexture@@IEAA@PEBDH@Z:PROC ; FTexture::FTexture + Line 110: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 111: EXTRN ?AreTexturesCompatible@FTextureManager@@QEAA_NVFTextureID@@0@Z:PROC ; FTextureManager::AreTexturesCompatible + Line 112: EXTRN ?AddTexture@FTextureManager@@QEAA?AVFTextureID@@PEAVFTexture@@@Z:PROC ; FTextureManager::AddTexture + Line 113: EXTRN ?ReplaceTexture@FTextureManager@@QEAAXVFTextureID@@PEAVFTexture@@_N@Z:PROC ; FTextureManager::ReplaceTexture + Line 114: EXTRN ?ProcessSwitchDef@FTextureManager@@AEAAXAEAVFScanner@@@Z:PROC ; FTextureManager::ProcessSwitchDef + Line 115: EXTRN ??_EFCanvasTexture@@UEAAPEAXI@Z:PROC ; FCanvasTexture::`vector deleting destructor' + Line 116: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 117: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 118: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 119: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 120: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 121: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 122: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 123: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 124: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 125: EXTRN ?CheckFloat@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckFloat + Line 126: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 127: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 128: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 129: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 130: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 131: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 132: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 133: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 134: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 135: EXTRN __CxxFrameHandler3:PROC + Line 136: EXTRN memcpy:PROC + Line 137: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 138: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 139: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 140: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 141: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\asin.cod (8 hits) + Line 18: EXTRN mtherr:PROC + Line 19: EXTRN polevl:PROC + Line 20: EXTRN p1evl:PROC + Line 21: EXTRN c_sqrt:PROC + Line 22: EXTRN PIO2:QWORD + Line 23: EXTRN PIO4:QWORD + Line 24: EXTRN NAN:QWORD + Line 25: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\ast.cod (22 hits) + Line 102: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 103: EXTRN ?TypeSInt8@@3PEAVPInt@@EA:QWORD ; TypeSInt8 + Line 104: EXTRN ?TypeUInt8@@3PEAVPInt@@EA:QWORD ; TypeUInt8 + Line 105: EXTRN ?TypeSInt16@@3PEAVPInt@@EA:QWORD ; TypeSInt16 + Line 106: EXTRN ?TypeSInt32@@3PEAVPInt@@EA:QWORD ; TypeSInt32 + Line 107: EXTRN ?TypeFloat32@@3PEAVPFloat@@EA:QWORD ; TypeFloat32 + Line 108: EXTRN ?TypeFloat64@@3PEAVPFloat@@EA:QWORD ; TypeFloat64 + Line 109: EXTRN ?TypeString@@3PEAVPString@@EA:QWORD ; TypeString + Line 110: EXTRN ?TypeName@@3PEAVPName@@EA:QWORD ; TypeName + Line 111: EXTRN ?TypeSound@@3PEAVPSound@@EA:QWORD ; TypeSound + Line 112: EXTRN ?TypeColor@@3PEAVPColor@@EA:QWORD ; TypeColor + Line 581: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 582: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 583: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 584: EXTRN ?AppendCStrPart@FString@@QEAAAEAV1@PEBD_K@Z:PROC ; FString::AppendCStrPart + Line 585: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 586: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 587: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 588: EXTRN mysnprintf:PROC + Line 589: EXTRN __CxxFrameHandler3:PROC + Line 590: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 591: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\atan.cod (10 hits) + Line 19: EXTRN polevl:PROC + Line 20: EXTRN p1evl:PROC + Line 21: EXTRN signbit:PROC + Line 22: EXTRN isnan:PROC + Line 23: EXTRN PI:QWORD + Line 24: EXTRN PIO2:QWORD + Line 25: EXTRN PIO4:QWORD + Line 26: EXTRN INFINITY:QWORD + Line 27: EXTRN NEGZERO:QWORD + Line 28: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\automaptexture.cod (20 hits) + Line 20: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 21: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 22: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 23: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 24: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 25: EXTRN ?CheckLumpName@FWadCollection@@QEAA_NHPEBD@Z:PROC ; FWadCollection::CheckLumpName + Line 26: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 27: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 28: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 29: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 30: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 31: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 32: EXTRN ??_EFAutomapTexture@@UEAAPEAXI@Z:PROC ; FAutomapTexture::`vector deleting destructor' + Line 33: EXTRN __CxxFrameHandler3:PROC + Line 34: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 35: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 36: EXTRN ?translationtables@@3PAV?$TAutoGrowArray@VFRemapTablePtr@@PEAUFRemapTable@@@@A:BYTE ; translationtables + Line 37: EXTRN ?GrayMap@ImageHelpers@@3PAEA:BYTE ; ImageHelpers::GrayMap + Line 38: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 39: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\b_bot.cod (80 hits) + Line 21: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 160: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 161: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 162: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 163: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 164: EXTRN atexit:PROC + Line 165: EXTRN __std_terminate:PROC + Line 166: EXTRN stricmp:PROC + Line 167: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 168: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 169: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 170: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 171: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 172: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 173: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 174: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 175: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 176: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 177: EXTRN ?CheckCheatmode@@YA_N_N@Z:PROC ; CheckCheatmode + Line 178: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 179: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 180: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 181: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 182: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 183: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 184: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 185: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 186: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 187: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 188: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 189: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 190: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 191: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 192: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 193: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 194: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 195: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 196: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 197: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 198: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 199: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 200: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 201: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 202: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 203: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 204: EXTRN ?Clear@FWeaponSlots@@QEAAXXZ:PROC ; FWeaponSlots::Clear + Line 205: EXTRN ?SpawnBot@FCajunMaster@@QEAA_NPEBDH@Z:PROC ; FCajunMaster::SpawnBot + Line 206: EXTRN ?Think@DBot@@AEAAXXZ:PROC ; DBot::Think + Line 207: EXTRN ??_EDBot@@UEAAPEAXI@Z:PROC ; DBot::`vector deleting destructor' + Line 208: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 209: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 210: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 211: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 212: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 213: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 214: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 215: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 216: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 217: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 218: EXTRN ??$Serialize@Vplayer_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAVplayer_t@@PEAPEAV1@@Z:PROC ; Serialize + Line 219: EXTRN ??1userinfo_t@@QEAA@XZ:PROC ; userinfo_t::~userinfo_t + Line 220: EXTRN ?Reset@userinfo_t@@QEAAXXZ:PROC ; userinfo_t::Reset + Line 221: EXTRN ??1player_t@@QEAA@XZ:PROC ; player_t::~player_t + Line 222: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 223: EXTRN __CxxFrameHandler3:PROC + Line 224: EXTRN memcmp:PROC + Line 225: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 226: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 227: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 228: EXTRN ?BotThinkCycles@@3Vcycle_t@@A:QWORD ; BotThinkCycles + Line 229: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 230: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 231: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 232: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 233: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 234: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 235: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 236: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 237: EXTRN __ImageBase:BYTE + Line 238: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\b_func.cod (40 hits) + Line 64: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 65: EXTRN atexit:PROC + Line 66: EXTRN __std_terminate:PROC + Line 67: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 68: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 69: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 70: EXTRN c_atan2:PROC + Line 71: EXTRN c_sqrt:PROC + Line 72: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 73: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 74: EXTRN ?P_RoughMonsterSearch@@YAPEAVAActor@@PEAV1@H_N1@Z:PROC ; P_RoughMonsterSearch + Line 75: EXTRN ?P_CheckPosition@@YA_NPEAVAActor@@AEBU?$TVector2@N@@AEAUFCheckPosition@@_N@Z:PROC ; P_CheckPosition + Line 76: EXTRN ?P_CheckSight@@YAHPEAVAActor@@0H@Z:PROC ; P_CheckSight + Line 77: EXTRN ?AddLineIntercepts@FPathTraverse@@MEAAXHH@Z:PROC ; FPathTraverse::AddLineIntercepts + Line 78: EXTRN ?AddThingIntercepts@FPathTraverse@@MEAAXHHAEAVFBlockThingsIterator@@_N@Z:PROC ; FPathTraverse::AddThingIntercepts + Line 79: EXTRN ?Next@FPathTraverse@@QEAAPEAUintercept_t@@XZ:PROC ; FPathTraverse::Next + Line 80: EXTRN ?init@FPathTraverse@@QEAAXNNNNHN@Z:PROC ; FPathTraverse::init + Line 81: EXTRN ??1FPathTraverse@@UEAA@XZ:PROC ; FPathTraverse::~FPathTraverse + Line 82: EXTRN ??_EFPathTraverse@@UEAAPEAXI@Z:PROC ; FPathTraverse::`vector deleting destructor' + Line 83: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 84: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 85: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 86: EXTRN ?ChangeStatNum@DThinker@@QEAAXH@Z:PROC ; DThinker::ChangeStatNum + Line 87: EXTRN ?StaticSpawn@AActor@@SAPEAV1@PEAVPClassActor@@AEBU?$TVector3@N@@W4replace_t@@_N@Z:PROC ; AActor::StaticSpawn + Line 88: EXTRN ?IsTeammate@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsTeammate + Line 89: EXTRN ?ClassForSpawn@@YAPEAVPClassActor@@VFName@@@Z:PROC ; ClassForSpawn + Line 90: EXTRN ?CleanAhead@FCajunMaster@@QEAA_NPEAVAActor@@NNPEAUticcmd_t@@@Z:PROC ; FCajunMaster::CleanAhead + Line 91: EXTRN ?IsDangerous@FCajunMaster@@QEAA_NPEAUsector_t@@@Z:PROC ; FCajunMaster::IsDangerous + Line 92: EXTRN ?WhatToGet@DBot@@QEAAXPEAVAActor@@@Z:PROC ; DBot::WhatToGet + Line 93: EXTRN __CxxFrameHandler3:PROC + Line 94: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 95: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 96: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 97: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 98: EXTRN ?BotInfo@@3V?$TMap@VFName@@UBotInfoData@@U?$THashTraits@VFName@@@@U?$TValueTraits@UBotInfoData@@@@@@A:BYTE ; BotInfo + Line 99: EXTRN ?BotSupportCycles@@3Vcycle_t@@A:QWORD ; BotSupportCycles + Line 100: EXTRN ?bot_observer@@3VFBoolCVar@@A:BYTE ; bot_observer + Line 101: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 102: EXTRN ?BotWTG@@3HA:DWORD ; BotWTG + Line 103: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\b_game.cod (75 hits) + Line 22: EXTRN ??_EStat_bots@@UEAAPEAXI@Z:PROC ; Stat_bots::`vector deleting destructor' + Line 106: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 107: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 108: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 109: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 110: EXTRN atexit:PROC + Line 111: EXTRN __std_terminate:PROC + Line 112: EXTRN atoi:PROC + Line 113: EXTRN stricmp:PROC + Line 114: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 115: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 116: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 117: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 118: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 119: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 120: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 121: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 122: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 123: EXTRN mysnprintf:PROC + Line 124: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 125: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 126: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 127: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 128: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 129: EXTRN ?ReadByte@@YAHPEAPEAE@Z:PROC ; ReadByte + Line 130: EXTRN ?ReadString@@YAPEADPEAPEAE@Z:PROC ; ReadString + Line 131: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 132: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 133: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 134: EXTRN ?OpenFile@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::OpenFile + Line 135: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 136: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 137: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 138: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 139: EXTRN ?MatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MatchString + Line 140: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 141: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 142: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 143: EXTRN ?LinkToWorld@AActor@@QEAAXPEAUFLinkContext@@_NPEAUsector_t@@@Z:PROC ; AActor::LinkToWorld + Line 144: EXTRN ?UnlinkFromWorld@AActor@@QEAAXPEAUFLinkContext@@@Z:PROC ; AActor::UnlinkFromWorld + Line 145: EXTRN ?ClearPlayer@FCajunMaster@@QEAAXH_N@Z:PROC ; FCajunMaster::ClearPlayer + Line 146: EXTRN ?Construct@DBot@@QEAAXXZ:PROC ; DBot::Construct + Line 147: EXTRN ?IsNum@@YA_NPEBD@Z:PROC ; IsNum + Line 148: EXTRN ?copystring@@YAPEADPEBD@Z:PROC ; copystring + Line 149: EXTRN ?M_GetCajunPath@@YA?AVFString@@PEBD@Z:PROC ; M_GetCajunPath + Line 150: EXTRN ?AttachToPlayer@DBaseStatusBar@@QEAAXPEAVplayer_t@@@Z:PROC ; DBaseStatusBar::AttachToPlayer + Line 151: EXTRN ?StartTypedScripts@FBehaviorContainer@@QEAAXGPEAVAActor@@_NH1@Z:PROC ; FBehaviorContainer::StartTypedScripts + Line 152: EXTRN ?IsValidTeam@FTeam@@QEAA_NI@Z:PROC ; FTeam::IsValidTeam + Line 153: EXTRN ?GetName@FTeam@@QEBAPEBDXZ:PROC ; FTeam::GetName + Line 154: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 155: EXTRN ?Net_WriteString@@YAXPEBD@Z:PROC ; Net_WriteString + Line 156: EXTRN ?D_ReadUserInfoStrings@@YAXHPEAPEAE_N@Z:PROC ; D_ReadUserInfoStrings + Line 157: EXTRN ?E_PlayerDisconnected@@YAXH@Z:PROC ; E_PlayerDisconnected + Line 158: EXTRN ?DoReborn@FLevelLocals@@QEAAXH_N@Z:PROC ; FLevelLocals::DoReborn + Line 159: EXTRN __CxxFrameHandler3:PROC + Line 160: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 161: EXTRN ?PerfToMillisec@@3NA:QWORD ; PerfToMillisec + Line 162: EXTRN ?RegistrationInfo@DBot@@2UClassReg@@A:BYTE ; DBot::RegistrationInfo + Line 163: EXTRN ?bot_next_color@@3VFIntCVar@@A:BYTE ; bot_next_color + Line 164: EXTRN ?bot_observer@@3VFBoolCVar@@A:BYTE ; bot_observer + Line 165: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 166: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 167: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 168: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 169: EXTRN ?teamplay@@3VFBoolCVar@@A:BYTE ; teamplay + Line 170: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 171: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 172: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 173: EXTRN ?Net_Arbitrator@@3HA:DWORD ; Net_Arbitrator + Line 174: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 175: EXTRN ?TeamLibrary@@3VFTeam@@A:BYTE ; TeamLibrary + Line 176: EXTRN ?Teams@@3V?$TArray@VFTeam@@V1@@@A:BYTE ; Teams + Line 177: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 178: EXTRN __ImageBase:BYTE + Line 179: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\b_move.cod (24 hits) + Line 51: EXTRN atexit:PROC + Line 52: EXTRN __std_terminate:PROC + Line 53: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 54: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 55: EXTRN c_atan:PROC + Line 56: EXTRN c_atan2:PROC + Line 57: EXTRN c_sqrt:PROC + Line 58: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 59: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 60: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 61: EXTRN ?SafeCheckPosition@FCajunMaster@@QEAA_NPEAVAActor@@NNAEAUFCheckPosition@@@Z:PROC ; FCajunMaster::SafeCheckPosition + Line 62: EXTRN ?Check_LOS@DBot@@QEAA_NPEAVAActor@@U?$TAngle@N@@@Z:PROC ; DBot::Check_LOS + Line 63: EXTRN ?Reachable@DBot@@AEAA_NPEAVAActor@@@Z:PROC ; DBot::Reachable + Line 64: EXTRN ?P_CheckKeys@@YAHPEAVAActor@@H_N1@Z:PROC ; P_CheckKeys + Line 65: EXTRN ?P_TestActivateLine@@YA_NPEAUline_t@@PEAVAActor@@HHPEAU?$TVector3@N@@@Z:PROC ; P_TestActivateLine + Line 66: EXTRN __CxxFrameHandler3:PROC + Line 67: EXTRN ?spechit@@3V?$TArray@Uspechit_t@@U1@@@A:BYTE ; spechit + Line 68: EXTRN ?BotInfo@@3V?$TMap@VFName@@UBotInfoData@@U?$THashTraits@VFName@@@@U?$TValueTraits@UBotInfoData@@@@@@A:BYTE ; BotInfo + Line 69: EXTRN ?xspeed@@3PANA:BYTE ; xspeed + Line 70: EXTRN ?yspeed@@3PANA:BYTE ; yspeed + Line 71: EXTRN ?opposite@@3PAW4dirtype_t@@A:BYTE ; opposite + Line 72: EXTRN ?diags@@3PAW4dirtype_t@@A:BYTE ; diags + Line 73: EXTRN __ImageBase:BYTE + Line 74: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\b_think.cod (37 hits) + Line 45: EXTRN atexit:PROC + Line 46: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 47: EXTRN c_atan2:PROC + Line 48: EXTRN c_sqrt:PROC + Line 49: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 50: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 51: EXTRN ?P_CheckSight@@YAHPEAVAActor@@0H@Z:PROC ; P_CheckSight + Line 52: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 53: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 54: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 55: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@HPEAVDThinker@@@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 56: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 57: EXTRN ?FindInventory@AActor@@QEAAPEAV1@PEAVPClassActor@@_N@Z:PROC ; AActor::FindInventory + Line 58: EXTRN ?IsFriend@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsFriend + Line 59: EXTRN ?Check_LOS@DBot@@QEAA_NPEAVAActor@@U?$TAngle@N@@@Z:PROC ; DBot::Check_LOS + Line 60: EXTRN ?Reachable@DBot@@AEAA_NPEAVAActor@@@Z:PROC ; DBot::Reachable + Line 61: EXTRN ?Dofire@DBot@@AEAAXPEAUticcmd_t@@@Z:PROC ; DBot::Dofire + Line 62: EXTRN ?Choose_Mate@DBot@@AEAAPEAVAActor@@XZ:PROC ; DBot::Choose_Mate + Line 63: EXTRN ?Find_enemy@DBot@@AEAAPEAVAActor@@XZ:PROC ; DBot::Find_enemy + Line 64: EXTRN ?Roam@DBot@@AEAAXPEAUticcmd_t@@@Z:PROC ; DBot::Roam + Line 65: EXTRN ?TurnToAng@DBot@@AEAAXXZ:PROC ; DBot::TurnToAng + Line 66: EXTRN ?Pitch@DBot@@AEAAXPEAVAActor@@@Z:PROC ; DBot::Pitch + Line 67: EXTRN ?P_GetRealMaxHealth@@YAHPEAVAActor@@H@Z:PROC ; P_GetRealMaxHealth + Line 68: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 69: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 70: EXTRN ?alwaysapplydmflags@@3VFBoolCVar@@A:BYTE ; alwaysapplydmflags + Line 71: EXTRN ?teamplay@@3VFBoolCVar@@A:BYTE ; teamplay + Line 72: EXTRN ?gametic@@3HA:DWORD ; gametic + Line 73: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 74: EXTRN ?dmflags@@3VFIntCVar@@A:BYTE ; dmflags + Line 75: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 76: EXTRN ?BotInfo@@3V?$TMap@VFName@@UBotInfoData@@U?$THashTraits@VFName@@@@U?$TValueTraits@UBotInfoData@@@@@@A:BYTE ; BotInfo + Line 77: EXTRN ?netcmds@@3PAY0CE@Uticcmd_t@@A:BYTE ; netcmds + Line 78: EXTRN ?ticdup@@3HA:DWORD ; ticdup + Line 79: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 80: EXTRN __ImageBase:BYTE + Line 81: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\base_sysfb.cod (44 hits) + Line 51: EXTRN _purecall:PROC + Line 52: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 53: EXTRN __imp_ShowWindow:PROC + Line 54: EXTRN __imp_MoveWindow:PROC + Line 55: EXTRN __imp_SetWindowPos:PROC + Line 56: EXTRN __imp_IsZoomed:PROC + Line 57: EXTRN __imp_GetDC:PROC + Line 58: EXTRN __imp_ReleaseDC:PROC + Line 59: EXTRN __imp_GetClientRect:PROC + Line 60: EXTRN __imp_GetWindowRect:PROC + Line 61: EXTRN __imp_AdjustWindowRectEx:PROC + Line 62: EXTRN __imp_GetWindowLongA:PROC + Line 63: EXTRN __imp_SetWindowLongA:PROC + Line 64: EXTRN __imp_EnumDisplaySettingsA:PROC + Line 65: EXTRN __imp_GetMonitorInfoA:PROC + Line 66: EXTRN ?_Xbad_function_call@std@@YAXXZ:PROC ; std::_Xbad_function_call + Line 67: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 68: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 69: EXTRN ??0DFrameBuffer@@QEAA@HH@Z:PROC ; DFrameBuffer::DFrameBuffer + Line 70: EXTRN ??1DFrameBuffer@@UEAA@XZ:PROC ; DFrameBuffer::~DFrameBuffer + Line 71: EXTRN ?SetSize@DFrameBuffer@@QEAAXHH@Z:PROC ; DFrameBuffer::SetSize + Line 72: EXTRN ?Update@DFrameBuffer@@UEAAXXZ:PROC ; DFrameBuffer::Update + Line 73: EXTRN ?SetVSync@DFrameBuffer@@UEAAX_N@Z:PROC ; DFrameBuffer::SetVSync + Line 74: EXTRN ?GetCaps@DFrameBuffer@@UEAAIXZ:PROC ; DFrameBuffer::GetCaps + Line 75: EXTRN ?WriteSavePic@DFrameBuffer@@UEAAXPEAVplayer_t@@PEAVFileWriter@@HH@Z:PROC ; DFrameBuffer::WriteSavePic + Line 76: EXTRN ?WipeStartScreen@DFrameBuffer@@UEAAPEAVFTexture@@XZ:PROC ; DFrameBuffer::WipeStartScreen + Line 77: EXTRN ?WipeEndScreen@DFrameBuffer@@UEAAPEAVFTexture@@XZ:PROC ; DFrameBuffer::WipeEndScreen + Line 78: EXTRN ?SetViewportRects@DFrameBuffer@@UEAAXPEAUIntRect@@@Z:PROC ; DFrameBuffer::SetViewportRects + Line 79: EXTRN ??_ESystemBaseFrameBuffer@@UEAAPEAXI@Z:PROC ; SystemBaseFrameBuffer::`vector deleting destructor' + Line 80: EXTRN ?I_GetEvent@@YAXXZ:PROC ; I_GetEvent + Line 81: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 82: EXTRN __CxxFrameHandler3:PROC + Line 83: EXTRN memset:PROC + Line 84: EXTRN ?fullscreen@@3VFBoolCVar@@A:BYTE ; fullscreen + Line 85: EXTRN ?win_x@@3VFIntCVar@@A:BYTE ; win_x + Line 86: EXTRN ?win_y@@3VFIntCVar@@A:BYTE ; win_y + Line 87: EXTRN ?win_w@@3VFIntCVar@@A:BYTE ; win_w + Line 88: EXTRN ?win_h@@3VFIntCVar@@A:BYTE ; win_h + Line 89: EXTRN ?win_maximized@@3VFBoolCVar@@A:BYTE ; win_maximized + Line 90: EXTRN ?Video@@3PEAVIVideo@@EA:QWORD ; Video + Line 91: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 92: EXTRN ?Window@@3PEAUHWND__@@EA:QWORD ; Window + Line 93: EXTRN ?vid_defwidth@@3VFIntCVar@@A:BYTE ; vid_defwidth + Line 94: EXTRN ?vid_defheight@@3VFIntCVar@@A:BYTE ; vid_defheight + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\bbannouncer.cod (19 hits) + Line 562: EXTRN atexit:PROC + Line 563: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 564: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 565: EXTRN ?S_Sound@@YAXHVFSoundID@@MM@Z:PROC ; S_Sound + Line 566: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 567: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 568: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 569: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 570: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 571: EXTRN ?CheckLocalView@AActor@@QEBA_NH@Z:PROC ; AActor::CheckLocalView + Line 572: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 573: EXTRN ?PronounMessage@@YAXPEBDPEADH00@Z:PROC ; PronounMessage + Line 574: EXTRN ?M_Random@@3VFRandom@@A:BYTE ; M_Random + Line 575: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 576: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 577: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 578: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 579: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 580: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\bitmap.cod (5 hits) + Line 137: EXTRN memset:PROC + Line 138: EXTRN ?IcePalette@@3QAY02$$CBEA:BYTE ; IcePalette + Line 139: EXTRN ?SpecialColormaps@@3V?$TArray@UFSpecialColormap@@U1@@@A:BYTE ; SpecialColormaps + Line 140: EXTRN __ImageBase:BYTE + Line 141: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\brightmaptexture.cod (15 hits) + Line 18: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 19: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 20: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 21: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 22: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 23: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 24: EXTRN ?CopyTranslatedPixels@FImageSource@@IEAAHPEAVFBitmap@@PEAUPalEntry@@@Z:PROC ; FImageSource::CopyTranslatedPixels + Line 25: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 26: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 27: EXTRN ??0FImageTexture@@QEAA@PEAVFImageSource@@PEBD@Z:PROC ; FImageTexture::FImageTexture + Line 28: EXTRN ??_EFBrightmapTexture@@UEAAPEAXI@Z:PROC ; FBrightmapTexture::`vector deleting destructor' + Line 29: EXTRN __CxxFrameHandler3:PROC + Line 30: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 31: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 32: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\buildtexture.cod (44 hits) + Line 24: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 25: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 26: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 27: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 28: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 29: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 30: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 31: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 32: EXTRN ?ToLower@FString@@QEAAXXZ:PROC ; FString::ToLower + Line 33: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 34: EXTRN ??0FStringf@@QEAA@PEBDZZ:PROC ; FStringf::FStringf + Line 35: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 36: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 37: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForFullName + Line 38: EXTRN ?ReadLump@FWadCollection@@QEAAXHPEAX@Z:PROC ; FWadCollection::ReadLump + Line 39: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 40: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 41: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 42: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 43: EXTRN ?GetNumLumps@FWadCollection@@QEBAHXZ:PROC ; FWadCollection::GetNumLumps + Line 44: EXTRN ?ExtractFilePath@@YA?AVFString@@PEBD@Z:PROC ; ExtractFilePath + Line 45: EXTRN ?ExtractFileBase@@YA?AVFString@@PEBD_N@Z:PROC ; ExtractFileBase + Line 46: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 47: EXTRN ?CopyPixelData@FBitmap@@QEAAXHHPEBEHHHHHPEAUPalEntry@@PEAUFCopyInfo@@@Z:PROC ; FBitmap::CopyPixelData + Line 48: EXTRN ??0FRemapTable@@QEAA@H@Z:PROC ; FRemapTable::FRemapTable + Line 49: EXTRN ??1FRemapTable@@QEAA@XZ:PROC ; FRemapTable::~FRemapTable + Line 50: EXTRN ?StoreTranslation@FRemapTable@@QEAAHH@Z:PROC ; FRemapTable::StoreTranslation + Line 51: EXTRN ?AddTexture@FTextureManager@@QEAA?AVFTextureID@@PEAVFTexture@@@Z:PROC ; FTextureManager::AddTexture + Line 52: EXTRN ?AddSimpleAnim@FTextureManager@@AEAAPEAUFAnimDef@@VFTextureID@@HII@Z:PROC ; FTextureManager::AddSimpleAnim + Line 53: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 54: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 55: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 56: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 57: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 58: EXTRN ??0FImageTexture@@QEAA@PEAVFImageSource@@PEBD@Z:PROC ; FImageTexture::FImageTexture + Line 59: EXTRN ??_EFBuildTexture@@UEAAPEAXI@Z:PROC ; FBuildTexture::`vector deleting destructor' + Line 60: EXTRN __CxxFrameHandler3:PROC + Line 61: EXTRN strcmp:PROC + Line 62: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 63: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 64: EXTRN ?translationtables@@3PAV?$TAutoGrowArray@VFRemapTablePtr@@PEAUFRemapTable@@@@A:BYTE ; translationtables + Line 65: EXTRN ?SpriteFrames@@3V?$TArray@Uspriteframe_t@@U1@@@A:BYTE ; SpriteFrames + Line 66: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 67: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\c_bind.cod (39 hits) + Line 382: EXTRN ?InMenu@DMenu@@2HA:DWORD ; DMenu::InMenu + Line 383: EXTRN ?IsAlias@FConsoleCommand@@UEAA_NXZ:PROC ; FConsoleCommand::IsAlias + Line 384: EXTRN ?Run@FUnsafeConsoleCommand@@UEAAXAEAVFCommandLine@@PEAVAActor@@H@Z:PROC ; FUnsafeConsoleCommand::Run + Line 385: EXTRN ??_EFUnsafeConsoleCommand@@UEAAPEAXI@Z:PROC ; FUnsafeConsoleCommand::`vector deleting destructor' + Line 2395: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 2396: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 2397: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 2398: EXTRN atexit:PROC + Line 2399: EXTRN __std_terminate:PROC + Line 2400: EXTRN atoi:PROC + Line 2401: EXTRN stricmp:PROC + Line 2402: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 2403: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 2404: EXTRN ?LockBuffer@FString@@QEAAPEADXZ:PROC ; FString::LockBuffer + Line 2405: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 2406: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 2407: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 2408: EXTRN mysnprintf:PROC + Line 2409: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 2410: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 2411: EXTRN ?AddCommandString@@YAXPEBDH@Z:PROC ; AddCommandString + Line 2412: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 2413: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 2414: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 2415: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 2416: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 2417: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 2418: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 2419: EXTRN ?ClearKey@FConfigFile@@QEAAXPEBD@Z:PROC ; FConfigFile::ClearKey + Line 2420: EXTRN ?SetValueForKey@FConfigFile@@QEAAXPEBD0_N@Z:PROC ; FConfigFile::SetValueForKey + Line 2421: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 2422: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 2423: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 2424: EXTRN ?I_msTime@@YA_KXZ:PROC ; I_msTime + Line 2425: EXTRN __CxxFrameHandler3:PROC + Line 2426: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 2427: EXTRN ?chatmodeon@@3HA:DWORD ; chatmodeon + Line 2428: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 2429: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\c_cmds.cod (110 hits) + Line 86: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 87: EXTRN ?Logfile@@3PEAU_iobuf@@EA:QWORD ; Logfile + Line 88: EXTRN ?IsAlias@FConsoleCommand@@UEAA_NXZ:PROC ; FConsoleCommand::IsAlias + Line 89: EXTRN ?Run@FUnsafeConsoleCommand@@UEAAXAEAVFCommandLine@@PEAVAActor@@H@Z:PROC ; FUnsafeConsoleCommand::Run + Line 90: EXTRN ??_EFUnsafeConsoleCommand@@UEAAPEAXI@Z:PROC ; FUnsafeConsoleCommand::`vector deleting destructor' + Line 616: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 617: EXTRN atexit:PROC + Line 618: EXTRN __std_terminate:PROC + Line 619: EXTRN exit:PROC + Line 620: EXTRN atoi:PROC + Line 621: EXTRN strtol:PROC + Line 622: EXTRN strtoll:PROC + Line 623: EXTRN strtoull:PROC + Line 624: EXTRN fclose:PROC + Line 625: EXTRN fopen:PROC + Line 626: EXTRN strncmp:PROC + Line 627: EXTRN stricmp:PROC + Line 628: EXTRN strnicmp:PROC + Line 629: EXTRN getcwd:PROC + Line 630: EXTRN chdir:PROC + Line 631: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 632: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 633: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 634: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 635: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 636: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 637: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 638: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 639: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 640: EXTRN ?StripRight@FString@@QEAAXPEBD@Z:PROC ; FString::StripRight + Line 641: EXTRN ?Substitute@FString@@QEAAXPEBD0@Z:PROC ; FString::Substitute + Line 642: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 643: EXTRN ?GetGitHash@@YAPEBDXZ:PROC ; GetGitHash + Line 644: EXTRN ?GetGitTime@@YAPEBDXZ:PROC ; GetGitTime + Line 645: EXTRN ?GetVersionString@@YAPEBDXZ:PROC ; GetVersionString + Line 646: EXTRN ?C_ToggleConsole@@YAXXZ:PROC ; C_ToggleConsole + Line 647: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 648: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 649: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 650: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 651: EXTRN ?C_ExecFile@@YA_NPEBD@Z:PROC ; C_ExecFile + Line 652: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 653: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 654: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 655: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 656: EXTRN ?I_FindFirst@@YAPEAXPEBDPEAUfindstate_t@@@Z:PROC ; I_FindFirst + Line 657: EXTRN ?I_FindNext@@YAHPEAXPEAUfindstate_t@@@Z:PROC ; I_FindNext + Line 658: EXTRN ?I_FindClose@@YAHPEAX@Z:PROC ; I_FindClose + Line 659: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 660: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 661: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 662: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 663: EXTRN ??AFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator[] + Line 664: EXTRN ?G_LoadGame@@YAXPEBD_N@Z:PROC ; G_LoadGame + Line 665: EXTRN ?G_SaveGame@@YAXPEBD0@Z:PROC ; G_SaveGame + Line 666: EXTRN ?CheckWarpTransMap@@YA_NAEAVFString@@_N@Z:PROC ; CheckWarpTransMap + Line 667: EXTRN ?G_DeferedInitNew@@YAXPEBDH@Z:PROC ; G_DeferedInitNew + Line 668: EXTRN ?FindLevelInfo@@YAPEAUlevel_info_t@@PEBD_N@Z:PROC ; FindLevelInfo + Line 669: EXTRN ?CalcMapName@@YA?AVFString@@HH@Z:PROC ; CalcMapName + Line 670: EXTRN ?G_SkillProperty@@YAHW4ESkillProperty@@@Z:PROC ; G_SkillProperty + Line 671: EXTRN ?CheckIfWadLoaded@FWadCollection@@QEAAHPEBD@Z:PROC ; FWadCollection::CheckIfWadLoaded + Line 672: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 673: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 674: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 675: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 676: EXTRN ?GetNumLumps@FWadCollection@@QEBAHXZ:PROC ; FWadCollection::GetNumLumps + Line 677: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 678: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 679: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 680: EXTRN ?GetTextureID@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::GetTextureID + Line 681: EXTRN ?IsMapActor@AActor@@QEAA_NXZ:PROC ; AActor::IsMapActor + Line 682: EXTRN ?InitSkyMap@@YAXPEAUFLevelLocals@@@Z:PROC ; InitSkyMap + Line 683: EXTRN ?P_CheckMapData@@YA_NPEBD@Z:PROC ; P_CheckMapData + Line 684: EXTRN ?DefaultExtension@@YAXAEAVFString@@PEBD@Z:PROC ; DefaultExtension + Line 685: EXTRN ?ExtractFilePath@@YA?AVFString@@PEBD@Z:PROC ; ExtractFilePath + Line 686: EXTRN ?copystring@@YAPEADPEBD@Z:PROC ; copystring + Line 687: EXTRN ?myasctime@@YAPEBDXZ:PROC ; myasctime + Line 688: EXTRN ?NicePath@@YA?AVFString@@PEBD@Z:PROC ; NicePath + Line 689: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 690: EXTRN ?Net_WriteWord@@YAXF@Z:PROC ; Net_WriteWord + Line 691: EXTRN ?Net_WriteLong@@YAXH@Z:PROC ; Net_WriteLong + Line 692: EXTRN ?Net_WriteString@@YAXPEBD@Z:PROC ; Net_WriteString + Line 693: EXTRN ?V_BreakLines@@YA?AV?$TArray@UFBrokenLines@@U1@@@PEAVFFont@@HPEBE_N@Z:PROC ; V_BreakLines + Line 694: EXTRN ?P_FindLineSpecial@@YAHPEBDPEAH1@Z:PROC ; P_FindLineSpecial + Line 695: EXTRN ?R_ResetViewInterpolation@@YAXXZ:PROC ; R_ResetViewInterpolation + Line 696: EXTRN ?C_AimLine@@YAXPEAUFTranslatedLineTarget@@_N@Z:PROC ; C_AimLine + Line 697: EXTRN ?C_PrintInfo@@YAXPEAVAActor@@_N@Z:PROC ; C_PrintInfo + Line 698: EXTRN __CxxFrameHandler3:PROC + Line 699: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 700: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 701: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 702: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 703: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 704: EXTRN ?usergame@@3_NA:BYTE ; usergame + Line 705: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 706: EXTRN ?dmflags2@@3VFIntCVar@@A:BYTE ; dmflags2 + Line 707: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 708: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 709: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 710: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 711: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 712: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 713: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 714: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 715: EXTRN ?ConFont@@3PEAVFFont@@EA:QWORD ; ConFont + Line 716: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 717: EXTRN ?insave@@3_NA:BYTE ; insave + Line 718: EXTRN ?chasedemo@@3VFBoolCVar@@A:BYTE ; chasedemo + Line 719: EXTRN ?r_renderercaps@@3IA:DWORD ; r_renderercaps + Line 720: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\c_console.cod (112 hits) + Line 61: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 62: EXTRN ?IsAlias@FConsoleCommand@@UEAA_NXZ:PROC ; FConsoleCommand::IsAlias + Line 63: EXTRN ?Run@FUnsafeConsoleCommand@@UEAAXAEAVFCommandLine@@PEAVAActor@@H@Z:PROC ; FUnsafeConsoleCommand::Run + Line 64: EXTRN ??_EFUnsafeConsoleCommand@@UEAAPEAXI@Z:PROC ; FUnsafeConsoleCommand::`vector deleting destructor' + Line 361: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 362: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 363: EXTRN atexit:PROC + Line 364: EXTRN __std_terminate:PROC + Line 365: EXTRN free:PROC + Line 366: EXTRN fflush:PROC + Line 367: EXTRN fputs:PROC + Line 368: EXTRN stricmp:PROC + Line 369: EXTRN strnicmp:PROC + Line 370: EXTRN tolower:PROC + Line 371: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 372: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 373: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 374: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 375: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 376: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 377: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 378: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 379: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 380: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 381: EXTRN ??HFString@@QEBA?AV0@AEBV0@@Z:PROC ; FString::operator+ + Line 382: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 383: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 384: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 385: EXTRN ?AppendCStrPart@FString@@QEAAAEAV1@PEBD_K@Z:PROC ; FString::AppendCStrPart + Line 386: EXTRN ?IndexOfAny@FString@@QEBAJPEBDJ@Z:PROC ; FString::IndexOfAny + Line 387: EXTRN ?StripLeftRight@FString@@QEAAXXZ:PROC ; FString::StripLeftRight + Line 388: EXTRN ?Insert@FString@@QEAAX_KAEBV1@@Z:PROC ; FString::Insert + Line 389: EXTRN ?Insert@FString@@QEAAX_KPEBD0@Z:PROC ; FString::Insert + Line 390: EXTRN ?VFormat@FString@@QEAAXPEBDPEAD@Z:PROC ; FString::VFormat + Line 391: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 392: EXTRN ?Remove@FString@@QEAAX_K0@Z:PROC ; FString::Remove + Line 393: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 394: EXTRN mysnprintf:PROC + Line 395: EXTRN ?P_FreeLevelData@@YAXXZ:PROC ; P_FreeLevelData + Line 396: EXTRN ?GetVersionString@@YAPEBDXZ:PROC ; GetVersionString + Line 397: EXTRN ?G_CheckDemoStatus@@YA_NXZ:PROC ; G_CheckDemoStatus + Line 398: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 399: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 400: EXTRN ?FindCVar@@YAPEAVFBaseCVar@@PEBDPEAPEAV1@@Z:PROC ; FindCVar + Line 401: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 402: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 403: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 404: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 405: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 406: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 407: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 408: EXTRN ?AddCommandString@@YAXPEBDH@Z:PROC ; AddCommandString + Line 409: EXTRN ?C_DoCommand@@YAXPEBDH@Z:PROC ; C_DoCommand + Line 410: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 411: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 412: EXTRN ?FindByName@FConsoleCommand@@SAPEAV1@PEBD@Z:PROC ; FConsoleCommand::FindByName + Line 413: EXTRN ?I_PrintStr@@YAXPEBD@Z:PROC ; I_PrintStr + Line 414: EXTRN ?I_PutInClipboard@@YAXPEBD@Z:PROC ; I_PutInClipboard + Line 415: EXTRN ?I_GetFromClipboard@@YA?AVFString@@_N@Z:PROC ; I_GetFromClipboard + Line 416: EXTRN ?V_SetBlend@@YAXHHHH@Z:PROC ; V_SetBlend + Line 417: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 418: EXTRN ?GetTextureID@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::GetTextureID + Line 419: EXTRN ?Clear@DFrameBuffer@@QEAAXHHHHHI@Z:PROC ; DFrameBuffer::Clear + Line 420: EXTRN ?DrawTexture@DFrameBuffer@@QEAAXPEAVFTexture@@NNHZZ:PROC ; DFrameBuffer::DrawTexture + Line 421: EXTRN ?DrawText@DFrameBuffer@@QEAAXPEAVFFont@@HNNPEBDHZZ:PROC ; DFrameBuffer::DrawText + Line 422: EXTRN ?DrawChar@DFrameBuffer@@QEAAXPEAVFFont@@HNNHHZZ:PROC ; DFrameBuffer::DrawChar + Line 423: EXTRN ?GetUIScale@@YAHH@Z:PROC ; GetUIScale + Line 424: EXTRN ?StringWidth@FFont@@QEBAHPEBE@Z:PROC ; FFont::StringWidth + Line 425: EXTRN ?V_BreakLines@@YA?AV?$TArray@UFBrokenLines@@U1@@@PEAVFFont@@HPEBE_N@Z:PROC ; V_BreakLines + Line 426: EXTRN ??0DHUDMessage@@QEAA@PEAVFFont@@PEBDMMHHW4EColorRange@@M@Z:PROC ; DHUDMessage::DHUDMessage + Line 427: EXTRN ?AttachMessage@DBaseStatusBar@@QEAAXPEAVDHUDMessageBase@@IH@Z:PROC ; DBaseStatusBar::AttachMessage + Line 428: EXTRN ?DetachMessage@DBaseStatusBar@@QEAAPEAVDHUDMessageBase@@I@Z:PROC ; DBaseStatusBar::DetachMessage + Line 429: EXTRN ?S_Start@@YAXXZ:PROC ; S_Start + Line 430: EXTRN ?strbin1@@YA?AVFString@@PEBD@Z:PROC ; strbin1 + Line 431: EXTRN ?D_QuitNetGame@@YAXXZ:PROC ; D_QuitNetGame + Line 432: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 433: EXTRN ??0FConsoleBuffer@@QEAA@XZ:PROC ; FConsoleBuffer::FConsoleBuffer + Line 434: EXTRN ??1FConsoleBuffer@@QEAA@XZ:PROC ; FConsoleBuffer::~FConsoleBuffer + Line 435: EXTRN ?AddText@FConsoleBuffer@@QEAAXHPEBDPEAU_iobuf@@@Z:PROC ; FConsoleBuffer::AddText + Line 436: EXTRN ?FormatText@FConsoleBuffer@@QEAAXPEAVFFont@@H@Z:PROC ; FConsoleBuffer::FormatText + Line 437: EXTRN ?ResizeBuffer@FConsoleBuffer@@QEAAXI@Z:PROC ; FConsoleBuffer::ResizeBuffer + Line 438: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 439: EXTRN ?FStringFormat@@YA?AVFString@@PEAUVMValue@@HPEAUVMReturn@@HH@Z:PROC ; FStringFormat + Line 440: EXTRN __CxxFrameHandler3:PROC + Line 441: EXTRN memmove:PROC + Line 442: EXTRN memset:PROC + Line 443: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 444: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 445: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 446: EXTRN ?Bindings@@3VFKeyBindings@@A:BYTE ; Bindings + Line 447: EXTRN ?CVars@@3PEAVFBaseCVar@@EA:QWORD ; CVars + Line 448: EXTRN ?chatmodeon@@3HA:DWORD ; chatmodeon + Line 449: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 450: EXTRN ?DisplayWidth@@3HA:DWORD ; DisplayWidth + Line 451: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 452: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 453: EXTRN ?ConFont@@3PEAVFFont@@EA:QWORD ; ConFont + Line 454: EXTRN ?RegistrationInfo@DHUDMessage@@2UClassReg@@A:BYTE ; DHUDMessage::RegistrationInfo + Line 455: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 456: EXTRN ?menuactive@@3W4EMenuState@@A:DWORD ; menuactive + Line 457: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 458: EXTRN ?gametic@@3HA:DWORD ; gametic + Line 459: EXTRN ?developer@@3VFIntCVar@@A:BYTE ; developer + Line 460: EXTRN ?gameaction@@3W4gameaction_t@@A:DWORD ; gameaction + Line 461: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 462: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 463: EXTRN ?advancedemo@@3_NA:BYTE ; advancedemo + Line 464: EXTRN ?Commands@@3PAPEAVFConsoleCommand@@A:BYTE ; Commands + Line 465: EXTRN ?show_messages@@3VFBoolCVar@@A:BYTE ; show_messages + Line 466: EXTRN ?gameisdead@@3_NA:BYTE ; gameisdead + Line 467: EXTRN __ImageBase:BYTE + Line 468: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\c_consolebuffer.cod (20 hits) + Line 41: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 42: EXTRN __std_terminate:PROC + Line 43: EXTRN fflush:PROC + Line 44: EXTRN fputc:PROC + Line 45: EXTRN fputs:PROC + Line 46: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 47: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 48: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 49: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 50: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 51: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 52: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 53: EXTRN ?AppendCStrPart@FString@@QEAAAEAV1@PEBD_K@Z:PROC ; FString::AppendCStrPart + Line 54: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 55: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 56: EXTRN ?V_BreakLines@@YA?AV?$TArray@UFBrokenLines@@U1@@@PEAVFFont@@HPEBE_N@Z:PROC ; V_BreakLines + Line 57: EXTRN __CxxFrameHandler3:PROC + Line 58: EXTRN memmove:PROC + Line 59: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 60: EXTRN ?PrintColors@@3PAHA:BYTE ; PrintColors + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\c_cvars.cod (72 hits) + Line 52: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 53: EXTRN ?InMenu@DMenu@@2HA:DWORD ; DMenu::InMenu + Line 386: EXTRN _purecall:PROC + Line 387: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 388: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 389: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 390: EXTRN atexit:PROC + Line 391: EXTRN __std_terminate:PROC + Line 392: EXTRN qsort:PROC + Line 393: EXTRN strtod:PROC + Line 394: EXTRN strtoll:PROC + Line 395: EXTRN strtoul:PROC + Line 396: EXTRN strchr:PROC + Line 397: EXTRN stricmp:PROC + Line 398: EXTRN strnicmp:PROC + Line 399: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 400: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 401: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 402: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 403: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 404: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 405: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 406: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 407: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 408: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 409: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 410: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 411: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 412: EXTRN mysnprintf:PROC + Line 413: EXTRN ?copystring@@YAPEADPEBD@Z:PROC ; copystring + Line 414: EXTRN ?ReplaceString@@YAXPEAPEADPEBD@Z:PROC ; ReplaceString + Line 415: EXTRN ?CheckWildcards@@YA_NPEBD0@Z:PROC ; CheckWildcards + Line 416: EXTRN ?FormatGUID@@YAXPEAD_KAEBU_GUID@@@Z:PROC ; FormatGUID + Line 417: EXTRN ?SetValueForKey@FConfigFile@@QEAAXPEBD0_N@Z:PROC ; FConfigFile::SetValueForKey + Line 418: EXTRN ?C_AddTabCommand@@YAXPEBD@Z:PROC ; C_AddTabCommand + Line 419: EXTRN ?C_RemoveTabCommand@@YAXPEBD@Z:PROC ; C_RemoveTabCommand + Line 420: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 421: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 422: EXTRN ?CheckCheatmode@@YA_N_N@Z:PROC ; CheckCheatmode + Line 423: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 424: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 425: EXTRN ??_EFBaseCVar@@UEAAPEAXI@Z:PROC ; FBaseCVar::`vector deleting destructor' + Line 426: EXTRN ??_EFBoolCVar@@UEAAPEAXI@Z:PROC ; FBoolCVar::`vector deleting destructor' + Line 427: EXTRN ??_EFIntCVar@@UEAAPEAXI@Z:PROC ; FIntCVar::`vector deleting destructor' + Line 428: EXTRN ??_EFFloatCVar@@UEAAPEAXI@Z:PROC ; FFloatCVar::`vector deleting destructor' + Line 429: EXTRN ??_EFStringCVar@@UEAAPEAXI@Z:PROC ; FStringCVar::`vector deleting destructor' + Line 430: EXTRN ??_EFColorCVar@@UEAAPEAXI@Z:PROC ; FColorCVar::`vector deleting destructor' + Line 431: EXTRN ??_EFFlagCVar@@UEAAPEAXI@Z:PROC ; FFlagCVar::`vector deleting destructor' + Line 432: EXTRN ??_EFMaskCVar@@UEAAPEAXI@Z:PROC ; FMaskCVar::`vector deleting destructor' + Line 433: EXTRN ??_EFGUIDCVar@@UEAAPEAXI@Z:PROC ; FGUIDCVar::`vector deleting destructor' + Line 434: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 435: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 436: EXTRN ?V_GetColorFromString@@YAHPEBIPEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColorFromString + Line 437: EXTRN ?V_GetColorStringByName@@YA?AVFString@@PEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColorStringByName + Line 438: EXTRN ?D_UserInfoChanged@@YAXPEAVFBaseCVar@@@Z:PROC ; D_UserInfoChanged + Line 439: EXTRN ?D_SendServerInfoChange@@YAXPEBVFBaseCVar@@TUCVarValue@@W4ECVarType@@@Z:PROC ; D_SendServerInfoChange + Line 440: EXTRN ?D_SendServerFlagChange@@YAXPEBVFBaseCVar@@H_N@Z:PROC ; D_SendServerFlagChange + Line 441: EXTRN ?ThrowAbortException@@YAXW4EVMAbortException@@PEBDZZ:PROC ; ThrowAbortException + Line 442: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 443: EXTRN __CxxFrameHandler3:PROC + Line 444: EXTRN memcpy:PROC + Line 445: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 446: EXTRN ?UnsafeExecutionContext@@3_NA:BYTE ; UnsafeExecutionContext + Line 447: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 448: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 449: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 450: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 451: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 452: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 453: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 454: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 455: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\c_dispatch.cod (73 hits) + Line 62: EXTRN ?CurrentMenu@@3PEAVDMenu@@EA:QWORD ; CurrentMenu + Line 421: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 422: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 423: EXTRN _purecall:PROC + Line 424: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 425: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 426: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 427: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 428: EXTRN atexit:PROC + Line 429: EXTRN __std_terminate:PROC + Line 430: EXTRN strtoll:PROC + Line 431: EXTRN strtoul:PROC + Line 432: EXTRN fclose:PROC + Line 433: EXTRN feof:PROC + Line 434: EXTRN fgets:PROC + Line 435: EXTRN fopen:PROC + Line 436: EXTRN strchr:PROC + Line 437: EXTRN strrchr:PROC + Line 438: EXTRN strnicmp:PROC + Line 439: EXTRN isspace:PROC + Line 440: EXTRN tolower:PROC + Line 441: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 442: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 443: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 444: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 445: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 446: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 447: EXTRN ?LockBuffer@FString@@QEAAPEADXZ:PROC ; FString::LockBuffer + Line 448: EXTRN ?UnlockBuffer@FString@@QEAAXXZ:PROC ; FString::UnlockBuffer + Line 449: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 450: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 451: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 452: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 453: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 454: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 455: EXTRN ?AppendCStrPart@FString@@QEAAAEAV1@PEBD_K@Z:PROC ; FString::AppendCStrPart + Line 456: EXTRN ?Mid@FString@@QEBA?AV1@_K0@Z:PROC ; FString::Mid + Line 457: EXTRN ?IndexOf@FString@@QEBAJDJ@Z:PROC ; FString::IndexOf + Line 458: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 459: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 460: EXTRN mysnprintf:PROC + Line 461: EXTRN ?FileExists@@YA_NPEBD@Z:PROC ; FileExists + Line 462: EXTRN ?copystring@@YAPEADPEBD@Z:PROC ; copystring + Line 463: EXTRN ?CheckWildcards@@YA_NPEBD0@Z:PROC ; CheckWildcards + Line 464: EXTRN ?C_AddTabCommand@@YAXPEBD@Z:PROC ; C_AddTabCommand + Line 465: EXTRN ?C_RemoveTabCommand@@YAXPEBD@Z:PROC ; C_RemoveTabCommand + Line 466: EXTRN ??_EFConsoleCommand@@UEAAPEAXI@Z:PROC ; FConsoleCommand::`vector deleting destructor' + Line 467: EXTRN ??_EFConsoleAlias@@UEAAPEAXI@Z:PROC ; FConsoleAlias::`vector deleting destructor' + Line 468: EXTRN ??_EFUnsafeConsoleAlias@@UEAAPEAXI@Z:PROC ; FUnsafeConsoleAlias::`vector deleting destructor' + Line 469: EXTRN ?GetArg@FArgs@@QEBAPEBDH@Z:PROC ; FArgs::GetArg + Line 470: EXTRN ?GetArgList@FArgs@@QEBAPEAVFString@@H@Z:PROC ; FArgs::GetArgList + Line 471: EXTRN ?NumArgs@FArgs@@QEBAHXZ:PROC ; FArgs::NumArgs + Line 472: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 473: EXTRN ?CmdSet@FBaseCVar@@QEAAXPEBD@Z:PROC ; FBaseCVar::CmdSet + Line 474: EXTRN ?FindCVarSub@@YAPEAVFBaseCVar@@PEBDH@Z:PROC ; FindCVarSub + Line 475: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 476: EXTRN ?SetValueForKey@FConfigFile@@QEAAXPEBD0_N@Z:PROC ; FConfigFile::SetValueForKey + Line 477: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 478: EXTRN ?D_AddFile@@YA_NAEAV?$TArray@VFString@@V1@@@PEBD_NH@Z:PROC ; D_AddFile + Line 479: EXTRN ??_EFDelayedCommand@@UEAAPEAXI@Z:PROC ; FDelayedCommand::`vector deleting destructor' + Line 480: EXTRN ??_EFWaitingCommand@@UEAAPEAXI@Z:PROC ; FWaitingCommand::`vector deleting destructor' + Line 481: EXTRN ??_EFStoredCommand@@UEAAPEAXI@Z:PROC ; FStoredCommand::`vector deleting destructor' + Line 482: EXTRN __CxxFrameHandler3:PROC + Line 483: EXTRN __chkstk:PROC + Line 484: EXTRN memcpy:PROC + Line 485: EXTRN memmove:PROC + Line 486: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 487: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 488: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 489: EXTRN ?StoredWarp@@3VFString@@A:QWORD ; StoredWarp + Line 490: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 491: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 492: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\c_expr.cod (17 hits) + Line 60: EXTRN atexit:PROC + Line 61: EXTRN atof:PROC + Line 62: EXTRN stricmp:PROC + Line 63: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 64: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 65: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 66: EXTRN mysnprintf:PROC + Line 67: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 68: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 69: EXTRN ?AddCommandString@@YAXPEBDH@Z:PROC ; AddCommandString + Line 70: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 71: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 72: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 73: EXTRN ?FindCVar@@YAPEAVFBaseCVar@@PEBDPEAPEAV1@@Z:PROC ; FindCVar + Line 74: EXTRN fmod:PROC + Line 75: EXTRN pow:PROC + Line 76: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\c_functions.cod (9 hits) + Line 22: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 23: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 24: EXTRN ?SpawnHealth@AActor@@QEBAHXZ:PROC ; AActor::SpawnHealth + Line 25: EXTRN ?PrintMiscActorInfo@@YAXPEAVAActor@@@Z:PROC ; PrintMiscActorInfo + Line 26: EXTRN ?P_AimLineAttack@@YA?AU?$TAngle@N@@PEAVAActor@@U1@NPEAUFTranslatedLineTarget@@1H00@Z:PROC ; P_AimLineAttack + Line 27: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 28: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 29: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 30: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\cmdlib.cod (38 hits) + Line 42: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 43: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 44: EXTRN atexit:PROC + Line 45: EXTRN _errno:PROC + Line 46: EXTRN _makepath_s:PROC + Line 47: EXTRN _splitpath_s:PROC + Line 48: EXTRN getenv:PROC + Line 49: EXTRN strchr:PROC + Line 50: EXTRN strrchr:PROC + Line 51: EXTRN strerror:PROC + Line 52: EXTRN strspn:PROC + Line 53: EXTRN stricmp:PROC + Line 54: EXTRN isalpha:PROC + Line 55: EXTRN tolower:PROC + Line 56: EXTRN _stat64i32:PROC + Line 57: EXTRN _mkdir:PROC + Line 58: EXTRN _findclose:PROC + Line 59: EXTRN _findfirst64i32:PROC + Line 60: EXTRN _findnext64i32:PROC + Line 61: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 62: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 63: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 64: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 65: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 66: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 67: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 68: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 69: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 70: EXTRN mysnprintf:PROC + Line 71: EXTRN asctime:PROC + Line 72: EXTRN _localtime64:PROC + Line 73: EXTRN _time64:PROC + Line 74: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 75: EXTRN ?Message@FScriptPosition@@QEBAXHPEBDZZ:PROC ; FScriptPosition::Message + Line 76: EXTRN __CxxFrameHandler3:PROC + Line 77: EXTRN memcpy:PROC + Line 78: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 79: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\codegen.cod (259 hits) + Line 39: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 40: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 935: EXTRN _purecall:PROC + Line 936: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 937: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 938: EXTRN atexit:PROC + Line 939: EXTRN __std_terminate:PROC + Line 940: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 941: EXTRN stricmp:PROC + Line 942: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 943: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 944: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 945: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 946: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 947: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 948: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 949: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 950: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 951: EXTRN ??HFString@@QEBA?AV0@AEBV0@@Z:PROC ; FString::operator+ + Line 952: EXTRN ?Right@FString@@QEBA?AV1@_K@Z:PROC ; FString::Right + Line 953: EXTRN ?IndexOf@FString@@QEBAJPEBDJ@Z:PROC ; FString::IndexOf + Line 954: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 955: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 956: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 957: EXTRN c_asin:PROC + Line 958: EXTRN c_acos:PROC + Line 959: EXTRN c_atan:PROC + Line 960: EXTRN c_atan2:PROC + Line 961: EXTRN c_tan:PROC + Line 962: EXTRN c_sqrt:PROC + Line 963: EXTRN c_sinh:PROC + Line 964: EXTRN c_cosh:PROC + Line 965: EXTRN c_tanh:PROC + Line 966: EXTRN c_exp:PROC + Line 967: EXTRN c_log:PROC + Line 968: EXTRN c_log10:PROC + Line 969: EXTRN c_pow:PROC + Line 970: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 971: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 972: EXTRN ??0FMemArena@@QEAA@_K@Z:PROC ; FMemArena::FMemArena + Line 973: EXTRN ??1FMemArena@@QEAA@XZ:PROC ; FMemArena::~FMemArena + Line 974: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 975: EXTRN ??0PField@@QEAA@VFName@@PEAVPType@@I_KH@Z:PROC ; PField::PField + Line 976: EXTRN ?GetVersion@PField@@QEAA?AUVersionInfo@@XZ:PROC ; PField::GetVersion + Line 977: EXTRN ?GetImplicitArgs@PFunction@@QEAAHXZ:PROC ; PFunction::GetImplicitArgs + Line 978: EXTRN ?FindSymbol@PSymbolTable@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PSymbolTable::FindSymbol + Line 979: EXTRN ?FindSymbolInTable@PSymbolTable@@QEAAPEAVPSymbol@@VFName@@AEAPEAU1@@Z:PROC ; PSymbolTable::FindSymbolInTable + Line 980: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 981: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 982: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 983: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 984: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 985: EXTRN ?Init@FRandom@@QEAAXI@Z:PROC ; FRandom::Init + Line 986: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 987: EXTRN ?StaticFindRNG@FRandom@@SAPEAV1@PEBD@Z:PROC ; FRandom::StaticFindRNG + Line 988: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 989: EXTRN ?MakeStateNameList@@YAAEAV?$TArray@VFName@@V1@@@PEBD@Z:PROC ; MakeStateNameList + Line 990: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 991: EXTRN ?FindCVar@@YAPEAVFBaseCVar@@PEBDPEAPEAV1@@Z:PROC ; FindCVar + Line 992: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 993: EXTRN ?TokenName@FScanner@@SA?AVFString@@HPEBD@Z:PROC ; FScanner::TokenName + Line 994: EXTRN ??0FScriptPosition@@QEAA@AEBU0@@Z:PROC ; FScriptPosition::FScriptPosition + Line 995: EXTRN ?Message@FScriptPosition@@QEBAXHPEBDZZ:PROC ; FScriptPosition::Message + Line 996: EXTRN ?V_GetColor@@YAHPEBIPEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColor + Line 997: EXTRN ?SideFromFlags@FScopeBarrier@@SAHH@Z:PROC ; FScopeBarrier::SideFromFlags + Line 998: EXTRN ?SideFromObjectFlags@FScopeBarrier@@SAHW4EScopeFlags@@@Z:PROC ; FScopeBarrier::SideFromObjectFlags + Line 999: EXTRN ?FlagsFromSide@FScopeBarrier@@SAHH@Z:PROC ; FScopeBarrier::FlagsFromSide + Line 1000: EXTRN ?StringFromSide@FScopeBarrier@@SAPEBDH@Z:PROC ; FScopeBarrier::StringFromSide + Line 1001: EXTRN ?ChangeSideInFlags@FScopeBarrier@@SAHHH@Z:PROC ; FScopeBarrier::ChangeSideInFlags + Line 1002: EXTRN ??0FScopeBarrier@@QEAA@HHPEBD@Z:PROC ; FScopeBarrier::FScopeBarrier + Line 1003: EXTRN ?ValidateNew@FScopeBarrier@@SAXPEAVPClass@@H@Z:PROC ; FScopeBarrier::ValidateNew + Line 1004: EXTRN ?ThrowAbortException@@YAXW4EVMAbortException@@PEBDZZ:PROC ; ThrowAbortException + Line 1005: EXTRN ?FindClassMemberFunction@@YAPEAVPFunction@@PEAVPContainerType@@0VFName@@AEAUFScriptPosition@@PEA_NAEBUVersionInfo@@_N@Z:PROC ; FindClassMemberFunction + Line 1006: EXTRN ?P_FindLineSpecial@@YAHPEBDPEAH1@Z:PROC ; P_FindLineSpecial + Line 1007: EXTRN ?P_ExecuteSpecial@@YAHHPEAUline_t@@PEAVAActor@@_NHHHHH@Z:PROC ; P_ExecuteSpecial + Line 1008: EXTRN ?AllocExtraStack@VMScriptFunction@@QEAAHPEAVPType@@@Z:PROC ; VMScriptFunction::AllocExtraStack + Line 1009: EXTRN ?Get@RegAvailability@VMFunctionBuilder@@QEAAHH@Z:PROC ; VMFunctionBuilder::RegAvailability::Get + Line 1010: EXTRN ?Return@RegAvailability@VMFunctionBuilder@@QEAAXHH@Z:PROC ; VMFunctionBuilder::RegAvailability::Return + Line 1011: EXTRN ?Reuse@RegAvailability@VMFunctionBuilder@@QEAA_NH@Z:PROC ; VMFunctionBuilder::RegAvailability::Reuse + Line 1012: EXTRN ?BeginStatement@VMFunctionBuilder@@QEAAXPEAVFxExpression@@@Z:PROC ; VMFunctionBuilder::BeginStatement + Line 1013: EXTRN ?EndStatement@VMFunctionBuilder@@QEAAXXZ:PROC ; VMFunctionBuilder::EndStatement + Line 1014: EXTRN ?GetConstantInt@VMFunctionBuilder@@QEAAIH@Z:PROC ; VMFunctionBuilder::GetConstantInt + Line 1015: EXTRN ?GetConstantFloat@VMFunctionBuilder@@QEAAIN@Z:PROC ; VMFunctionBuilder::GetConstantFloat + Line 1016: EXTRN ?GetConstantAddress@VMFunctionBuilder@@QEAAIPEAX@Z:PROC ; VMFunctionBuilder::GetConstantAddress + Line 1017: EXTRN ?GetConstantString@VMFunctionBuilder@@QEAAIVFString@@@Z:PROC ; VMFunctionBuilder::GetConstantString + Line 1018: EXTRN ?AllocConstantsInt@VMFunctionBuilder@@QEAAIIPEAH@Z:PROC ; VMFunctionBuilder::AllocConstantsInt + Line 1019: EXTRN ?AllocConstantsFloat@VMFunctionBuilder@@QEAAIIPEAN@Z:PROC ; VMFunctionBuilder::AllocConstantsFloat + Line 1020: EXTRN ?AllocConstantsAddress@VMFunctionBuilder@@QEAAIIPEAPEAX@Z:PROC ; VMFunctionBuilder::AllocConstantsAddress + Line 1021: EXTRN ?AllocConstantsString@VMFunctionBuilder@@QEAAIIPEAVFString@@@Z:PROC ; VMFunctionBuilder::AllocConstantsString + Line 1022: EXTRN ?GetAddress@VMFunctionBuilder@@QEAA_KXZ:PROC ; VMFunctionBuilder::GetAddress + Line 1023: EXTRN ?Emit@VMFunctionBuilder@@QEAA_KHHHH@Z:PROC ; VMFunctionBuilder::Emit + Line 1024: EXTRN ?Emit@VMFunctionBuilder@@QEAA_KHHF@Z:PROC ; VMFunctionBuilder::Emit + Line 1025: EXTRN ?Emit@VMFunctionBuilder@@QEAA_KHH@Z:PROC ; VMFunctionBuilder::Emit + Line 1026: EXTRN ?EmitLoadInt@VMFunctionBuilder@@QEAA_KHH@Z:PROC ; VMFunctionBuilder::EmitLoadInt + Line 1027: EXTRN ?EmitRetInt@VMFunctionBuilder@@QEAA_KH_NH@Z:PROC ; VMFunctionBuilder::EmitRetInt + Line 1028: EXTRN ?Backpatch@VMFunctionBuilder@@QEAAX_K0@Z:PROC ; VMFunctionBuilder::Backpatch + Line 1029: EXTRN ?BackpatchToHere@VMFunctionBuilder@@QEAAX_K@Z:PROC ; VMFunctionBuilder::BackpatchToHere + Line 1030: EXTRN ?BackpatchList@VMFunctionBuilder@@QEAAXAEAV?$TArray@_K_K@@_K@Z:PROC ; VMFunctionBuilder::BackpatchList + Line 1031: EXTRN ?BackpatchListToHere@VMFunctionBuilder@@QEAAXAEAV?$TArray@_K_K@@@Z:PROC ; VMFunctionBuilder::BackpatchListToHere + Line 1032: EXTRN ?AddParameter@FunctionCallEmitter@@QEAAXPEAVVMFunctionBuilder@@PEAVFxExpression@@@Z:PROC ; FunctionCallEmitter::AddParameter + Line 1033: EXTRN ?AddParameter@FunctionCallEmitter@@QEAAXAEAUExpEmit@@_N@Z:PROC ; FunctionCallEmitter::AddParameter + Line 1034: EXTRN ?AddParameterPointerConst@FunctionCallEmitter@@QEAAXPEAX@Z:PROC ; FunctionCallEmitter::AddParameterPointerConst + Line 1035: EXTRN ?AddParameterPointer@FunctionCallEmitter@@QEAAXH_N@Z:PROC ; FunctionCallEmitter::AddParameterPointer + Line 1036: EXTRN ?AddParameterFloatConst@FunctionCallEmitter@@QEAAXN@Z:PROC ; FunctionCallEmitter::AddParameterFloatConst + Line 1037: EXTRN ?AddParameterIntConst@FunctionCallEmitter@@QEAAXH@Z:PROC ; FunctionCallEmitter::AddParameterIntConst + Line 1038: EXTRN ?AddParameterStringConst@FunctionCallEmitter@@QEAAXAEBVFString@@@Z:PROC ; FunctionCallEmitter::AddParameterStringConst + Line 1039: EXTRN ?EmitCall@FunctionCallEmitter@@QEAA?AUExpEmit@@PEAVVMFunctionBuilder@@PEAV?$TArray@UExpEmit@@U1@@@@Z:PROC ; FunctionCallEmitter::EmitCall + Line 1040: EXTRN ?DescriptiveName@PType@@QEBAPEBDXZ:PROC ; PType::DescriptiveName + Line 1041: EXTRN ?NewArray@@YAPEAVPArray@@PEAVPType@@I@Z:PROC ; NewArray + Line 1042: EXTRN ?NewStaticArray@@YAPEAVPStaticArray@@PEAVPType@@@Z:PROC ; NewStaticArray + Line 1043: EXTRN ?NewPointer@@YAPEAVPPointer@@PEAVPType@@_N@Z:PROC ; NewPointer + Line 1044: EXTRN ?NewPointer@@YAPEAVPPointer@@PEAVPClass@@_N@Z:PROC ; NewPointer + Line 1045: EXTRN ?NewClassPointer@@YAPEAVPClassPointer@@PEAVPClass@@@Z:PROC ; NewClassPointer + Line 1046: EXTRN ?NewPrototype@@YAPEAVPPrototype@@AEBV?$TArray@PEAVPType@@PEAV1@@@0@Z:PROC ; NewPrototype + Line 1047: EXTRN ??_EFxExpression@@UEAAPEAXI@Z:PROC ; FxExpression::`vector deleting destructor' + Line 1048: EXTRN ??_EFxIdentifier@@UEAAPEAXI@Z:PROC ; FxIdentifier::`vector deleting destructor' + Line 1049: EXTRN ??_EFxMemberIdentifier@@UEAAPEAXI@Z:PROC ; FxMemberIdentifier::`vector deleting destructor' + Line 1050: EXTRN ??_EFxClassDefaults@@UEAAPEAXI@Z:PROC ; FxClassDefaults::`vector deleting destructor' + Line 1051: EXTRN ??_EFxConstant@@UEAAPEAXI@Z:PROC ; FxConstant::`vector deleting destructor' + Line 1052: EXTRN ??_EFxVectorValue@@UEAAPEAXI@Z:PROC ; FxVectorValue::`vector deleting destructor' + Line 1053: EXTRN ??_EFxBoolCast@@UEAAPEAXI@Z:PROC ; FxBoolCast::`vector deleting destructor' + Line 1054: EXTRN ??_EFxIntCast@@UEAAPEAXI@Z:PROC ; FxIntCast::`vector deleting destructor' + Line 1055: EXTRN ??_EFxFloatCast@@UEAAPEAXI@Z:PROC ; FxFloatCast::`vector deleting destructor' + Line 1056: EXTRN ??_EFxNameCast@@UEAAPEAXI@Z:PROC ; FxNameCast::`vector deleting destructor' + Line 1057: EXTRN ??_EFxStringCast@@UEAAPEAXI@Z:PROC ; FxStringCast::`vector deleting destructor' + Line 1058: EXTRN ??_EFxColorCast@@UEAAPEAXI@Z:PROC ; FxColorCast::`vector deleting destructor' + Line 1059: EXTRN ??_EFxSoundCast@@UEAAPEAXI@Z:PROC ; FxSoundCast::`vector deleting destructor' + Line 1060: EXTRN ??_EFxFontCast@@UEAAPEAXI@Z:PROC ; FxFontCast::`vector deleting destructor' + Line 1061: EXTRN ??_EFxTypeCast@@UEAAPEAXI@Z:PROC ; FxTypeCast::`vector deleting destructor' + Line 1062: EXTRN ??_EFxPlusSign@@UEAAPEAXI@Z:PROC ; FxPlusSign::`vector deleting destructor' + Line 1063: EXTRN ??_EFxMinusSign@@UEAAPEAXI@Z:PROC ; FxMinusSign::`vector deleting destructor' + Line 1064: EXTRN ??_EFxUnaryNotBitwise@@UEAAPEAXI@Z:PROC ; FxUnaryNotBitwise::`vector deleting destructor' + Line 1065: EXTRN ??_EFxUnaryNotBoolean@@UEAAPEAXI@Z:PROC ; FxUnaryNotBoolean::`vector deleting destructor' + Line 1066: EXTRN ??_EFxSizeAlign@@UEAAPEAXI@Z:PROC ; FxSizeAlign::`vector deleting destructor' + Line 1067: EXTRN ??_EFxPreIncrDecr@@UEAAPEAXI@Z:PROC ; FxPreIncrDecr::`vector deleting destructor' + Line 1068: EXTRN ??_EFxPostIncrDecr@@UEAAPEAXI@Z:PROC ; FxPostIncrDecr::`vector deleting destructor' + Line 1069: EXTRN ??_EFxAssign@@UEAAPEAXI@Z:PROC ; FxAssign::`vector deleting destructor' + Line 1070: EXTRN ??_EFxMultiAssign@@UEAAPEAXI@Z:PROC ; FxMultiAssign::`vector deleting destructor' + Line 1071: EXTRN ??_EFxAssignSelf@@UEAAPEAXI@Z:PROC ; FxAssignSelf::`vector deleting destructor' + Line 1072: EXTRN ??_EFxBinary@@UEAAPEAXI@Z:PROC ; FxBinary::`vector deleting destructor' + Line 1073: EXTRN ??_EFxAddSub@@UEAAPEAXI@Z:PROC ; FxAddSub::`vector deleting destructor' + Line 1074: EXTRN ??_EFxMulDiv@@UEAAPEAXI@Z:PROC ; FxMulDiv::`vector deleting destructor' + Line 1075: EXTRN ??_EFxPow@@UEAAPEAXI@Z:PROC ; FxPow::`vector deleting destructor' + Line 1076: EXTRN ??_EFxCompareRel@@UEAAPEAXI@Z:PROC ; FxCompareRel::`vector deleting destructor' + Line 1077: EXTRN ??_EFxCompareEq@@UEAAPEAXI@Z:PROC ; FxCompareEq::`vector deleting destructor' + Line 1078: EXTRN ??_EFxBitOp@@UEAAPEAXI@Z:PROC ; FxBitOp::`vector deleting destructor' + Line 1079: EXTRN ??_EFxShift@@UEAAPEAXI@Z:PROC ; FxShift::`vector deleting destructor' + Line 1080: EXTRN ??_EFxLtGtEq@@UEAAPEAXI@Z:PROC ; FxLtGtEq::`vector deleting destructor' + Line 1081: EXTRN ??_EFxConcat@@UEAAPEAXI@Z:PROC ; FxConcat::`vector deleting destructor' + Line 1082: EXTRN ??_EFxBinaryLogical@@UEAAPEAXI@Z:PROC ; FxBinaryLogical::`vector deleting destructor' + Line 1083: EXTRN ??_EFxDotCross@@UEAAPEAXI@Z:PROC ; FxDotCross::`vector deleting destructor' + Line 1084: EXTRN ??_EFxTypeCheck@@UEAAPEAXI@Z:PROC ; FxTypeCheck::`vector deleting destructor' + Line 1085: EXTRN ??_EFxDynamicCast@@UEAAPEAXI@Z:PROC ; FxDynamicCast::`vector deleting destructor' + Line 1086: EXTRN ??_EFxConditional@@UEAAPEAXI@Z:PROC ; FxConditional::`vector deleting destructor' + Line 1087: EXTRN ??_EFxAbs@@UEAAPEAXI@Z:PROC ; FxAbs::`vector deleting destructor' + Line 1088: EXTRN ??_EFxATan2@@UEAAPEAXI@Z:PROC ; FxATan2::`vector deleting destructor' + Line 1089: EXTRN ??_EFxNew@@UEAAPEAXI@Z:PROC ; FxNew::`vector deleting destructor' + Line 1090: EXTRN ??_EFxMinMax@@UEAAPEAXI@Z:PROC ; FxMinMax::`vector deleting destructor' + Line 1091: EXTRN ??_EFxRandom@@UEAAPEAXI@Z:PROC ; FxRandom::`vector deleting destructor' + Line 1092: EXTRN ??_EFxRandomPick@@UEAAPEAXI@Z:PROC ; FxRandomPick::`vector deleting destructor' + Line 1093: EXTRN ??_EFxFRandom@@UEAAPEAXI@Z:PROC ; FxFRandom::`vector deleting destructor' + Line 1094: EXTRN ??_EFxRandom2@@UEAAPEAXI@Z:PROC ; FxRandom2::`vector deleting destructor' + Line 1095: EXTRN ??_EFxRandomSeed@@UEAAPEAXI@Z:PROC ; FxRandomSeed::`vector deleting destructor' + Line 1096: EXTRN ??_EFxMemberBase@@UEAAPEAXI@Z:PROC ; FxMemberBase::`vector deleting destructor' + Line 1097: EXTRN ??_EFxGlobalVariable@@UEAAPEAXI@Z:PROC ; FxGlobalVariable::`vector deleting destructor' + Line 1098: EXTRN ??_EFxCVar@@UEAAPEAXI@Z:PROC ; FxCVar::`vector deleting destructor' + Line 1099: EXTRN ??_EFxStructMember@@UEAAPEAXI@Z:PROC ; FxStructMember::`vector deleting destructor' + Line 1100: EXTRN ??_EFxClassMember@@UEAAPEAXI@Z:PROC ; FxClassMember::`vector deleting destructor' + Line 1101: EXTRN ??_EFxLocalVariable@@UEAAPEAXI@Z:PROC ; FxLocalVariable::`vector deleting destructor' + Line 1102: EXTRN ??_EFxStackVariable@@UEAAPEAXI@Z:PROC ; FxStackVariable::`vector deleting destructor' + Line 1103: EXTRN ??_EFxStaticArrayVariable@@UEAAPEAXI@Z:PROC ; FxStaticArrayVariable::`vector deleting destructor' + Line 1104: EXTRN ??_EFxSelf@@UEAAPEAXI@Z:PROC ; FxSelf::`vector deleting destructor' + Line 1105: EXTRN ??_EFxArrayElement@@UEAAPEAXI@Z:PROC ; FxArrayElement::`vector deleting destructor' + Line 1106: EXTRN ??_EFxFunctionCall@@UEAAPEAXI@Z:PROC ; FxFunctionCall::`vector deleting destructor' + Line 1107: EXTRN ??_EFxMemberFunctionCall@@UEAAPEAXI@Z:PROC ; FxMemberFunctionCall::`vector deleting destructor' + Line 1108: EXTRN ??_EFxActionSpecialCall@@UEAAPEAXI@Z:PROC ; FxActionSpecialCall::`vector deleting destructor' + Line 1109: EXTRN ??_EFxFlopFunctionCall@@UEAAPEAXI@Z:PROC ; FxFlopFunctionCall::`vector deleting destructor' + Line 1110: EXTRN ??_EFxVectorBuiltin@@UEAAPEAXI@Z:PROC ; FxVectorBuiltin::`vector deleting destructor' + Line 1111: EXTRN ??_EFxStrLen@@UEAAPEAXI@Z:PROC ; FxStrLen::`vector deleting destructor' + Line 1112: EXTRN ??_EFxGetClass@@UEAAPEAXI@Z:PROC ; FxGetClass::`vector deleting destructor' + Line 1113: EXTRN ??_EFxGetParentClass@@UEAAPEAXI@Z:PROC ; FxGetParentClass::`vector deleting destructor' + Line 1114: EXTRN ??_EFxGetClassName@@UEAAPEAXI@Z:PROC ; FxGetClassName::`vector deleting destructor' + Line 1115: EXTRN ??_EFxGetDefaultByType@@UEAAPEAXI@Z:PROC ; FxGetDefaultByType::`vector deleting destructor' + Line 1116: EXTRN ??_EFxColorLiteral@@UEAAPEAXI@Z:PROC ; FxColorLiteral::`vector deleting destructor' + Line 1117: EXTRN ??_EFxVMFunctionCall@@UEAAPEAXI@Z:PROC ; FxVMFunctionCall::`vector deleting destructor' + Line 1118: EXTRN ??_EFxSequence@@UEAAPEAXI@Z:PROC ; FxSequence::`vector deleting destructor' + Line 1119: EXTRN ??_EFxCompoundStatement@@UEAAPEAXI@Z:PROC ; FxCompoundStatement::`vector deleting destructor' + Line 1120: EXTRN ??_EFxSwitchStatement@@UEAAPEAXI@Z:PROC ; FxSwitchStatement::`vector deleting destructor' + Line 1121: EXTRN ??_EFxCaseStatement@@UEAAPEAXI@Z:PROC ; FxCaseStatement::`vector deleting destructor' + Line 1122: EXTRN ??_EFxIfStatement@@UEAAPEAXI@Z:PROC ; FxIfStatement::`vector deleting destructor' + Line 1123: EXTRN ??_EFxLoopStatement@@UEAAPEAXI@Z:PROC ; FxLoopStatement::`vector deleting destructor' + Line 1124: EXTRN ??_EFxWhileLoop@@UEAAPEAXI@Z:PROC ; FxWhileLoop::`vector deleting destructor' + Line 1125: EXTRN ??_EFxDoWhileLoop@@UEAAPEAXI@Z:PROC ; FxDoWhileLoop::`vector deleting destructor' + Line 1126: EXTRN ??_EFxForLoop@@UEAAPEAXI@Z:PROC ; FxForLoop::`vector deleting destructor' + Line 1127: EXTRN ??_EFxJumpStatement@@UEAAPEAXI@Z:PROC ; FxJumpStatement::`vector deleting destructor' + Line 1128: EXTRN ??_EFxReturnStatement@@UEAAPEAXI@Z:PROC ; FxReturnStatement::`vector deleting destructor' + Line 1129: EXTRN ??_EFxClassTypeCast@@UEAAPEAXI@Z:PROC ; FxClassTypeCast::`vector deleting destructor' + Line 1130: EXTRN ??_EFxClassPtrCast@@UEAAPEAXI@Z:PROC ; FxClassPtrCast::`vector deleting destructor' + Line 1131: EXTRN ??_EFxStateByIndex@@UEAAPEAXI@Z:PROC ; FxStateByIndex::`vector deleting destructor' + Line 1132: EXTRN ??_EFxRuntimeStateIndex@@UEAAPEAXI@Z:PROC ; FxRuntimeStateIndex::`vector deleting destructor' + Line 1133: EXTRN ??_EFxMultiNameState@@UEAAPEAXI@Z:PROC ; FxMultiNameState::`vector deleting destructor' + Line 1134: EXTRN ??_EFxNop@@UEAAPEAXI@Z:PROC ; FxNop::`vector deleting destructor' + Line 1135: EXTRN ??_EFxLocalVariableDeclaration@@UEAAPEAXI@Z:PROC ; FxLocalVariableDeclaration::`vector deleting destructor' + Line 1136: EXTRN ??_EFxStaticArray@@UEAAPEAXI@Z:PROC ; FxStaticArray::`vector deleting destructor' + Line 1137: EXTRN ??_EFxLocalArrayDeclaration@@UEAAPEAXI@Z:PROC ; FxLocalArrayDeclaration::`vector deleting destructor' + Line 1138: EXTRN ?V_GetFont@@YAPEAVFFont@@PEBD@Z:PROC ; V_GetFont + Line 1139: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 1140: EXTRN ?utf8_decode@@YAHPEBDPEAH@Z:PROC ; utf8_decode + Line 1141: EXTRN __CxxFrameHandler3:PROC + Line 1142: EXTRN ceil:PROC + Line 1143: EXTRN floor:PROC + Line 1144: EXTRN fmod:PROC + Line 1145: EXTRN memcpy:PROC + Line 1146: EXTRN memmove:PROC + Line 1147: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 1148: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 1149: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 1150: EXTRN ?RegistrationInfo@PSymbolType@@2UClassReg@@A:BYTE ; PSymbolType::RegistrationInfo + Line 1151: EXTRN ?RegistrationInfo@PField@@2UClassReg@@A:BYTE ; PField::RegistrationInfo + Line 1152: EXTRN ?RegistrationInfo@PSymbolConst@@2UClassReg@@A:BYTE ; PSymbolConst::RegistrationInfo + Line 1153: EXTRN ?RegistrationInfo@PSymbolConstNumeric@@2UClassReg@@A:BYTE ; PSymbolConstNumeric::RegistrationInfo + Line 1154: EXTRN ?RegistrationInfo@PSymbolConstString@@2UClassReg@@A:BYTE ; PSymbolConstString::RegistrationInfo + Line 1155: EXTRN ?RegistrationInfo@PFunction@@2UClassReg@@A:BYTE ; PFunction::RegistrationInfo + Line 1156: EXTRN ?S_sfx@@3V?$TArray@Usfxinfo_t@@U1@@@A:BYTE ; S_sfx + Line 1157: EXTRN ?StateLabels@@3UFStateLabelStorage@@A:BYTE ; StateLabels + Line 1158: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 1159: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 1160: EXTRN ?TypeError@@3PEAVPErrorType@@EA:QWORD ; TypeError + Line 1161: EXTRN ?TypeAuto@@3PEAVPErrorType@@EA:QWORD ; TypeAuto + Line 1162: EXTRN ?TypeVoid@@3PEAVPVoidType@@EA:QWORD ; TypeVoid + Line 1163: EXTRN ?TypeSInt8@@3PEAVPInt@@EA:QWORD ; TypeSInt8 + Line 1164: EXTRN ?TypeUInt8@@3PEAVPInt@@EA:QWORD ; TypeUInt8 + Line 1165: EXTRN ?TypeSInt16@@3PEAVPInt@@EA:QWORD ; TypeSInt16 + Line 1166: EXTRN ?TypeUInt16@@3PEAVPInt@@EA:QWORD ; TypeUInt16 + Line 1167: EXTRN ?TypeSInt32@@3PEAVPInt@@EA:QWORD ; TypeSInt32 + Line 1168: EXTRN ?TypeUInt32@@3PEAVPInt@@EA:QWORD ; TypeUInt32 + Line 1169: EXTRN ?TypeBool@@3PEAVPBool@@EA:QWORD ; TypeBool + Line 1170: EXTRN ?TypeFloat32@@3PEAVPFloat@@EA:QWORD ; TypeFloat32 + Line 1171: EXTRN ?TypeFloat64@@3PEAVPFloat@@EA:QWORD ; TypeFloat64 + Line 1172: EXTRN ?TypeString@@3PEAVPString@@EA:QWORD ; TypeString + Line 1173: EXTRN ?TypeName@@3PEAVPName@@EA:QWORD ; TypeName + Line 1174: EXTRN ?TypeSound@@3PEAVPSound@@EA:QWORD ; TypeSound + Line 1175: EXTRN ?TypeColor@@3PEAVPColor@@EA:QWORD ; TypeColor + Line 1176: EXTRN ?TypeTextureID@@3PEAVPTextureID@@EA:QWORD ; TypeTextureID + Line 1177: EXTRN ?TypeSpriteID@@3PEAVPSpriteID@@EA:QWORD ; TypeSpriteID + Line 1178: EXTRN ?TypeVector2@@3PEAVPStruct@@EA:QWORD ; TypeVector2 + Line 1179: EXTRN ?TypeVector3@@3PEAVPStruct@@EA:QWORD ; TypeVector3 + Line 1180: EXTRN ?TypeColorStruct@@3PEAVPStruct@@EA:QWORD ; TypeColorStruct + Line 1181: EXTRN ?TypeStringStruct@@3PEAVPStruct@@EA:QWORD ; TypeStringStruct + Line 1182: EXTRN ?TypeState@@3PEAVPStatePointer@@EA:QWORD ; TypeState + Line 1183: EXTRN ?TypeFont@@3PEAVPPointer@@EA:QWORD ; TypeFont + Line 1184: EXTRN ?TypeStateLabel@@3PEAVPStateLabel@@EA:QWORD ; TypeStateLabel + Line 1185: EXTRN ?TypeNullPtr@@3PEAVPPointer@@EA:QWORD ; TypeNullPtr + Line 1186: EXTRN ?TypeVoidPtr@@3PEAVPPointer@@EA:QWORD ; TypeVoidPtr + Line 1187: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 1188: EXTRN ?pr_exrandom@@3VFRandom@@A:BYTE ; pr_exrandom + Line 1189: EXTRN ?pr_cajump@@3VFRandom@@A:BYTE ; pr_cajump + Line 1190: EXTRN __ImageBase:BYTE + Line 1191: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\colormaps.cod (18 hits) + Line 27: EXTRN atexit:PROC + Line 28: EXTRN __std_terminate:PROC + Line 29: EXTRN strncpy:PROC + Line 30: EXTRN strnicmp:PROC + Line 31: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 32: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 33: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 34: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 35: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 36: EXTRN ?GetLumpName@FWadCollection@@QEBAXPEADH@Z:PROC ; FWadCollection::GetLumpName + Line 37: EXTRN ?GetLumpNamespace@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpNamespace + Line 38: EXTRN ?GetNumLumps@FWadCollection@@QEBAHXZ:PROC ; FWadCollection::GetNumLumps + Line 39: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 40: EXTRN __CxxFrameHandler3:PROC + Line 41: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 42: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 43: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 44: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\colormatcher.cod (1 hit) + Line 14: EXTRN ?BestColor@@YAHPEBIHHHHH@Z:PROC ; BestColor + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\common.cod (24 hits) + Line 32: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 33: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 34: EXTRN atexit:PROC + Line 35: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 36: EXTRN free:PROC + Line 37: EXTRN malloc:PROC + Line 38: EXTRN realloc:PROC + Line 39: EXTRN atoi:PROC + Line 40: EXTRN strdup:PROC + Line 41: EXTRN isdigit:PROC + Line 42: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 43: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 44: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 45: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 46: EXTRN ??HFString@@QEBA?AV0@PEBD@Z:PROC ; FString::operator+ + Line 47: EXTRN ??0FRandom@@QEAA@XZ:PROC ; FRandom::FRandom + Line 48: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 49: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 50: EXTRN ?LookupFile@FSoundFontReader@@QEAA?AU?$pair@VFileReader@@VFString@@@std@@PEBD@Z:PROC ; FSoundFontReader::LookupFile + Line 51: EXTRN __CxxFrameHandler3:PROC + Line 52: EXTRN memcpy:PROC + Line 53: EXTRN memmove:PROC + Line 54: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 55: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\compatibility.cod (59 hits) + Line 97: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 98: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 494: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 495: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 496: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 497: EXTRN atexit:PROC + Line 498: EXTRN __std_terminate:PROC + Line 499: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 500: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 501: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 502: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 503: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 504: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 505: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 506: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 507: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 508: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 509: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 510: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 511: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 512: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 513: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 514: EXTRN ?MatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MatchString + Line 515: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 516: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 517: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 518: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 519: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 520: EXTRN ?CheckOverlap@sector_t@@QEAAXXZ:PROC ; sector_t::CheckOverlap + Line 521: EXTRN ?AddSectorTag@FTagManager@@QEAAXHH@Z:PROC ; FTagManager::AddSectorTag + Line 522: EXTRN ?AddLineID@FTagManager@@QEAAXHH@Z:PROC ; FTagManager::AddLineID + Line 523: EXTRN ?RemoveSectorTags@FTagManager@@QEAAXH@Z:PROC ; FTagManager::RemoveSectorTags + Line 524: EXTRN ?RemoveLineIDs@FTagManager@@QEAAXH@Z:PROC ; FTagManager::RemoveLineIDs + Line 525: EXTRN ?GetWadName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetWadName + Line 526: EXTRN ?GetNumForFullName@FWadCollection@@QEAAHPEBD@Z:PROC ; FWadCollection::GetNumForFullName + Line 527: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 528: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 529: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 530: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 531: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 532: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 533: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 534: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 535: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 536: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 537: EXTRN ?GetChecksum@MapData@@QEAAXQEAE@Z:PROC ; MapData::GetChecksum + Line 538: EXTRN ?P_OpenMapData@@YAPEAUMapData@@PEBD_N@Z:PROC ; P_OpenMapData + Line 539: EXTRN ??_EDLevelCompatibility@@UEAAPEAXI@Z:PROC ; DLevelCompatibility::`vector deleting destructor' + Line 540: EXTRN __CxxFrameHandler3:PROC + Line 541: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 542: EXTRN ?developer@@3VFIntCVar@@A:BYTE ; developer + Line 543: EXTRN ?compatflags@@3VFIntCVar@@A:BYTE ; compatflags + Line 544: EXTRN ?compatflags2@@3VFIntCVar@@A:BYTE ; compatflags2 + Line 545: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 546: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 547: EXTRN ?RegistrationInfo@PFunction@@2UClassReg@@A:BYTE ; PFunction::RegistrationInfo + Line 548: EXTRN ?AllClasses@PClass@@2V?$TArray@PEAVPClass@@PEAV1@@@A:BYTE ; PClass::AllClasses + Line 549: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 550: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\configfile.cod (43 hits) + Line 161: EXTRN free:PROC + Line 162: EXTRN bsearch:PROC + Line 163: EXTRN atof:PROC + Line 164: EXTRN atoi:PROC + Line 165: EXTRN strchr:PROC + Line 166: EXTRN strrchr:PROC + Line 167: EXTRN strcspn:PROC + Line 168: EXTRN strncmp:PROC + Line 169: EXTRN strncpy:PROC + Line 170: EXTRN strpbrk:PROC + Line 171: EXTRN isdigit:PROC + Line 172: EXTRN isspace:PROC + Line 173: EXTRN isalnum:PROC + Line 174: EXTRN ?ctl_cmsg@TimidityPlus@@YAXHHPEBDZZ:PROC ; TimidityPlus::ctl_cmsg + Line 175: EXTRN ?init_mblock@TimidityPlus@@YAXPEAUMBlockList@1@@Z:PROC ; TimidityPlus::init_mblock + Line 176: EXTRN ?new_segment@TimidityPlus@@YAPEAXPEAUMBlockList@1@_K@Z:PROC ; TimidityPlus::new_segment + Line 177: EXTRN ?reuse_mblock@TimidityPlus@@YAXPEAUMBlockList@1@@Z:PROC ; TimidityPlus::reuse_mblock + Line 178: EXTRN ?strdup_mblock@TimidityPlus@@YAPEADPEAUMBlockList@1@PEBD@Z:PROC ; TimidityPlus::strdup_mblock + Line 179: EXTRN ?AddPath@FSoundFontReader@@QEAAXPEBD@Z:PROC ; FSoundFontReader::AddPath + Line 180: EXTRN ?open_file@TimidityPlus@@YAPEAUtimidity_file@1@PEBDPEAVFSoundFontReader@@@Z:PROC ; TimidityPlus::open_file + Line 181: EXTRN ?tf_close@TimidityPlus@@YAXPEAUtimidity_file@1@@Z:PROC ; TimidityPlus::tf_close + Line 182: EXTRN ?tf_gets@TimidityPlus@@YAPEADPEADHPEAUtimidity_file@1@@Z:PROC ; TimidityPlus::tf_gets + Line 183: EXTRN ?safe_malloc@TimidityPlus@@YAPEAX_K@Z:PROC ; TimidityPlus::safe_malloc + Line 184: EXTRN ?safe_strdup@TimidityPlus@@YAPEADPEBD@Z:PROC ; TimidityPlus::safe_strdup + Line 185: EXTRN ?free_ptr_list@TimidityPlus@@YAXPEAXH@Z:PROC ; TimidityPlus::free_ptr_list + Line 186: EXTRN ?string_to_7bit_range@TimidityPlus@@YAHPEBDPEAH1@Z:PROC ; TimidityPlus::string_to_7bit_range + Line 187: EXTRN ?find_instrument_map_bank@Instruments@TimidityPlus@@QEAAHHHH@Z:PROC ; TimidityPlus::Instruments::find_instrument_map_bank + Line 188: EXTRN ?alloc_instrument_map_bank@Instruments@TimidityPlus@@QEAAHHHH@Z:PROC ; TimidityPlus::Instruments::alloc_instrument_map_bank + Line 189: EXTRN ?set_instrument_map@Instruments@TimidityPlus@@QEAAXHHHHH@Z:PROC ; TimidityPlus::Instruments::set_instrument_map + Line 190: EXTRN ?add_altassign_string@Instruments@TimidityPlus@@QEAAPEAUAlternateAssign@2@PEAU32@PEAPEADH@Z:PROC ; TimidityPlus::Instruments::add_altassign_string + Line 191: EXTRN ?copy_tone_bank_element@Instruments@TimidityPlus@@QEAAXPEAUToneBankElement@2@PEBU32@@Z:PROC ; TimidityPlus::Instruments::copy_tone_bank_element + Line 192: EXTRN ?free_tone_bank_element@Instruments@TimidityPlus@@QEAAXPEAUToneBankElement@2@@Z:PROC ; TimidityPlus::Instruments::free_tone_bank_element + Line 193: EXTRN ?add_soundfont@Instruments@TimidityPlus@@QEAAXPEADHHHH@Z:PROC ; TimidityPlus::Instruments::add_soundfont + Line 194: EXTRN ?remove_soundfont@Instruments@TimidityPlus@@QEAAXPEAD@Z:PROC ; TimidityPlus::Instruments::remove_soundfont + Line 195: EXTRN ?exclude_soundfont@Instruments@TimidityPlus@@QEAAHHHH@Z:PROC ; TimidityPlus::Instruments::exclude_soundfont + Line 196: EXTRN ?order_soundfont@Instruments@TimidityPlus@@QEAAHHHHH@Z:PROC ; TimidityPlus::Instruments::order_soundfont + Line 197: EXTRN ?string_to_quantity@TimidityPlus@@YAPEBDPEBDPEAUQuantity_@1@G@Z:PROC ; TimidityPlus::string_to_quantity + Line 198: EXTRN ?FixPathSeperator@@YAXPEAD@Z:PROC ; FixPathSeperator + Line 199: EXTRN memcpy:PROC + Line 200: EXTRN memmove:PROC + Line 201: EXTRN strcmp:PROC + Line 202: EXTRN __ImageBase:BYTE + Line 203: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\cosh.cod (7 hits) + Line 13: EXTRN mtherr:PROC + Line 14: EXTRN c_exp:PROC + Line 15: EXTRN isnan:PROC + Line 16: EXTRN MAXLOG:QWORD + Line 17: EXTRN INFINITY:QWORD + Line 18: EXTRN LOGE2:QWORD + Line 19: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\critsec.cod (6 hits) + Line 12: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 13: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 14: EXTRN __imp_InitializeCriticalSection:PROC + Line 15: EXTRN __imp_EnterCriticalSection:PROC + Line 16: EXTRN __imp_LeaveCriticalSection:PROC + Line 17: EXTRN __imp_DeleteCriticalSection:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\ct_chat.cod (46 hits) + Line 196: EXTRN atexit:PROC + Line 197: EXTRN strchr:PROC + Line 198: EXTRN strnicmp:PROC + Line 199: EXTRN isalpha:PROC + Line 200: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 201: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 202: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 203: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 204: EXTRN ?AppendCStrPart@FString@@QEAAAEAV1@PEBD_K@Z:PROC ; FString::AppendCStrPart + Line 205: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 206: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 207: EXTRN ?HU_DrawScores@@YAXPEAVplayer_t@@@Z:PROC ; HU_DrawScores + Line 208: EXTRN ?C_HideConsole@@YAXXZ:PROC ; C_HideConsole + Line 209: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 210: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 211: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 212: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 213: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 214: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 215: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 216: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 217: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 218: EXTRN ?DrawText@DFrameBuffer@@QEAAXPEAVFFont@@HNNPEBDHZZ:PROC ; DFrameBuffer::DrawText + Line 219: EXTRN ?GetUIScale@@YAHH@Z:PROC ; GetUIScale + Line 220: EXTRN ?FindInventory@AActor@@QEAAPEAV1@VFName@@_N@Z:PROC ; AActor::FindInventory + Line 221: EXTRN ?StringWidth@FFont@@QEBAHPEBE@Z:PROC ; FFont::StringWidth + Line 222: EXTRN ?I_PutInClipboard@@YAXPEBD@Z:PROC ; I_PutInClipboard + Line 223: EXTRN ?I_GetFromClipboard@@YA?AVFString@@_N@Z:PROC ; I_GetFromClipboard + Line 224: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 225: EXTRN ?Net_WriteString@@YAXPEBD@Z:PROC ; Net_WriteString + Line 226: EXTRN __CxxFrameHandler3:PROC + Line 227: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 228: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 229: EXTRN ?SB_ForceActive@@3_NA:BYTE ; SB_ForceActive + Line 230: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 231: EXTRN ?Button_ShowScores@@3UFButtonStatus@@A:BYTE ; Button_ShowScores + Line 232: EXTRN ?menuactive@@3W4EMenuState@@A:DWORD ; menuactive + Line 233: EXTRN ?viewactive@@3_NA:BYTE ; viewactive + Line 234: EXTRN ?viewheight@@3HA:DWORD ; viewheight + Line 235: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 236: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 237: EXTRN ?con_scaletext@@3VFIntCVar@@A:BYTE ; con_scaletext + Line 238: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 239: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 240: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 241: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\cycler.cod (10 hits) + Line 25: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 26: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 27: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 28: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 29: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 30: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 31: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 32: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 33: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 34: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\d_dehacked.cod (134 hits) + Line 253: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 254: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 255: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 256: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 257: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 258: EXTRN ?pr_statetics@FState@@2VFRandom@@A:BYTE ; FState::pr_statetics + Line 259: EXTRN ?AllActorClasses@PClassActor@@2V?$TArray@PEAVPClassActor@@PEAV1@@@A:BYTE ; PClassActor::AllActorClasses + Line 260: EXTRN ?StateLabels@@3UFStateLabelStorage@@A:BYTE ; StateLabels + Line 261: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 262: EXTRN ?DecalLibrary@@3VFDecalLib@@A:BYTE ; DecalLibrary + Line 1649: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 1650: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 1651: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 1652: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 1653: EXTRN atexit:PROC + Line 1654: EXTRN __std_terminate:PROC + Line 1655: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 1656: EXTRN atof:PROC + Line 1657: EXTRN atoi:PROC + Line 1658: EXTRN strtoll:PROC + Line 1659: EXTRN strtoull:PROC + Line 1660: EXTRN fclose:PROC + Line 1661: EXTRN fopen:PROC + Line 1662: EXTRN __stdio_common_vsscanf:PROC + Line 1663: EXTRN strchr:PROC + Line 1664: EXTRN strrchr:PROC + Line 1665: EXTRN strncmp:PROC + Line 1666: EXTRN strncpy:PROC + Line 1667: EXTRN strtok:PROC + Line 1668: EXTRN stricmp:PROC + Line 1669: EXTRN strnicmp:PROC + Line 1670: EXTRN isspace:PROC + Line 1671: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 1672: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 1673: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 1674: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 1675: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 1676: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 1677: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 1678: EXTRN ?LockBuffer@FString@@QEAAPEADXZ:PROC ; FString::LockBuffer + Line 1679: EXTRN ?UnlockBuffer@FString@@QEAAXXZ:PROC ; FString::UnlockBuffer + Line 1680: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 1681: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 1682: EXTRN ?StripRight@FString@@QEAAXXZ:PROC ; FString::StripRight + Line 1683: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 1684: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 1685: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 1686: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 1687: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 1688: EXTRN mysnprintf:PROC + Line 1689: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 1690: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 1691: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 1692: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 1693: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 1694: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 1695: EXTRN ?GetImplicitArgs@PFunction@@QEAAHXZ:PROC ; PFunction::GetImplicitArgs + Line 1696: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 1697: EXTRN ?CreateDerivedClass@PClass@@QEAAPEAV1@VFName@@I@Z:PROC ; PClass::CreateDerivedClass + Line 1698: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 1699: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 1700: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 1701: EXTRN ?StaticFindStateOwner@FState@@SAPEAVPClassActor@@PEBU1@@Z:PROC ; FState::StaticFindStateOwner + Line 1702: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 1703: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 1704: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 1705: EXTRN ?OpenLumpNum@FScanner@@QEAAXH@Z:PROC ; FScanner::OpenLumpNum + Line 1706: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 1707: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 1708: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 1709: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 1710: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 1711: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 1712: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 1713: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 1714: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 1715: EXTRN ??0FScriptPosition@@QEAA@VFString@@H@Z:PROC ; FScriptPosition::FScriptPosition + Line 1716: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 1717: EXTRN ?FindLevelInfo@@YAPEAUlevel_info_t@@PEBD_N@Z:PROC ; FindLevelInfo + Line 1718: EXTRN ?FileExists@@YA_NPEBD@Z:PROC ; FileExists + Line 1719: EXTRN ?ExtractFileBase@@YA?AVFString@@PEBD_N@Z:PROC ; ExtractFileBase + Line 1720: EXTRN ?IsNum@@YA_NPEBD@Z:PROC ; IsNum + Line 1721: EXTRN ?copystring@@YAPEADPEBD@Z:PROC ; copystring + Line 1722: EXTRN ??0FStringTable@@QEAA@XZ:PROC ; FStringTable::FStringTable + Line 1723: EXTRN ??1FStringTable@@QEAA@XZ:PROC ; FStringTable::~FStringTable + Line 1724: EXTRN ?LoadStrings@FStringTable@@QEAAX_N@Z:PROC ; FStringTable::LoadStrings + Line 1725: EXTRN ?MatchString@FStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::MatchString + Line 1726: EXTRN ?SetString@FStringTable@@QEAAXPEBD0@Z:PROC ; FStringTable::SetString + Line 1727: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 1728: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 1729: EXTRN ?ReadLump@FWadCollection@@QEAAXHPEAX@Z:PROC ; FWadCollection::ReadLump + Line 1730: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 1731: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 1732: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 1733: EXTRN ?GetLumpFullPath@FWadCollection@@QEBA?AVFString@@H@Z:PROC ; FWadCollection::GetLumpFullPath + Line 1734: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 1735: EXTRN ?GetNumLumps@FWadCollection@@QEBAHXZ:PROC ; FWadCollection::GetNumLumps + Line 1736: EXTRN ?IsSentient@AActor@@QEBA_NXZ:PROC ; AActor::IsSentient + Line 1737: EXTRN ?GetDecalByName@FDecalLib@@QEBAPEBVFDecalTemplate@@PEBD@Z:PROC ; FDecalLib::GetDecalByName + Line 1738: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 1739: EXTRN ?SetStateLabel@FStateDefinitions@@QEAAXPEBDPEAUFState@@E@Z:PROC ; FStateDefinitions::SetStateLabel + Line 1740: EXTRN ?InstallStates@FStateDefinitions@@QEAAXPEAVPClassActor@@PEAVAActor@@@Z:PROC ; FStateDefinitions::InstallStates + Line 1741: EXTRN ?MakeStateDefines@FStateDefinitions@@QEAAXPEBVPClassActor@@@Z:PROC ; FStateDefinitions::MakeStateDefines + Line 1742: EXTRN ?AddStateDefines@FStateDefinitions@@QEAAXPEBUFStateLabels@@@Z:PROC ; FStateDefinitions::AddStateDefines + Line 1743: EXTRN ?CreateAnonymousFunction@@YAPEAVPFunction@@PEAVPContainerType@@PEAVPType@@H@Z:PROC ; CreateAnonymousFunction + Line 1744: EXTRN ??0VMScriptFunction@@QEAA@VFName@@@Z:PROC ; VMScriptFunction::VMScriptFunction + Line 1745: EXTRN ?Free@ExpEmit@@QEAAXPEAVVMFunctionBuilder@@@Z:PROC ; ExpEmit::Free + Line 1746: EXTRN ?Get@RegAvailability@VMFunctionBuilder@@QEAAHH@Z:PROC ; VMFunctionBuilder::RegAvailability::Get + Line 1747: EXTRN ??0VMFunctionBuilder@@QEAA@H@Z:PROC ; VMFunctionBuilder::VMFunctionBuilder + Line 1748: EXTRN ??1VMFunctionBuilder@@QEAA@XZ:PROC ; VMFunctionBuilder::~VMFunctionBuilder + Line 1749: EXTRN ?MakeFunction@VMFunctionBuilder@@QEAAXPEAVVMScriptFunction@@@Z:PROC ; VMFunctionBuilder::MakeFunction + Line 1750: EXTRN ?Emit@VMFunctionBuilder@@QEAA_KHHHH@Z:PROC ; VMFunctionBuilder::Emit + Line 1751: EXTRN ?DumpFunction@@YAXPEAU_iobuf@@PEAVVMScriptFunction@@PEBDH@Z:PROC ; DumpFunction + Line 1752: EXTRN ?EncodeRegType@@YAHUExpEmit@@@Z:PROC ; EncodeRegType + Line 1753: EXTRN ?AddParameterPointerConst@FunctionCallEmitter@@QEAAXPEAX@Z:PROC ; FunctionCallEmitter::AddParameterPointerConst + Line 1754: EXTRN ?AddParameterPointer@FunctionCallEmitter@@QEAAXH_N@Z:PROC ; FunctionCallEmitter::AddParameterPointer + Line 1755: EXTRN ?AddParameterFloatConst@FunctionCallEmitter@@QEAAXN@Z:PROC ; FunctionCallEmitter::AddParameterFloatConst + Line 1756: EXTRN ?AddParameterIntConst@FunctionCallEmitter@@QEAAXH@Z:PROC ; FunctionCallEmitter::AddParameterIntConst + Line 1757: EXTRN ?EmitCall@FunctionCallEmitter@@QEAA?AUExpEmit@@PEAVVMFunctionBuilder@@PEAV?$TArray@UExpEmit@@U1@@@@Z:PROC ; FunctionCallEmitter::EmitCall + Line 1758: EXTRN ?NewClassType@@YAPEAVPClassType@@PEAVPClass@@@Z:PROC ; NewClassType + Line 1759: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 1760: EXTRN ?JitDumpLog@@YAXPEAU_iobuf@@PEAVVMScriptFunction@@@Z:PROC ; JitDumpLog + Line 1761: EXTRN __CxxFrameHandler3:PROC + Line 1762: EXTRN memcpy:PROC + Line 1763: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 1764: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + Line 1765: EXTRN ?ClassDataAllocator@@3VFMemArena@@A:BYTE ; ClassDataAllocator + Line 1766: EXTRN ?RegistrationInfo@PFunction@@2UClassReg@@A:BYTE ; PFunction::RegistrationInfo + Line 1767: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 1768: EXTRN ?TypeVoid@@3PEAVPVoidType@@EA:QWORD ; TypeVoid + Line 1769: EXTRN ?TypeState@@3PEAVPStatePointer@@EA:QWORD ; TypeState + Line 1770: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 1771: EXTRN __ImageBase:BYTE + Line 1772: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\d_iwad.cod (70 hits) + Line 112: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 113: EXTRN atexit:PROC + Line 114: EXTRN __std_terminate:PROC + Line 115: EXTRN exit:PROC + Line 116: EXTRN strrchr:PROC + Line 117: EXTRN strcspn:PROC + Line 118: EXTRN stricmp:PROC + Line 119: EXTRN strnicmp:PROC + Line 120: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 121: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 122: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 123: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 124: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 125: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 126: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 127: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 128: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 129: EXTRN ??HFString@@QEBA?AV0@PEBD@Z:PROC ; FString::operator+ + Line 130: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 131: EXTRN ?LastIndexOf@FString@@QEBAJD@Z:PROC ; FString::LastIndexOf + Line 132: EXTRN ?ReplaceChars@FString@@QEAAXDD@Z:PROC ; FString::ReplaceChars + Line 133: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 134: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 135: EXTRN ??0FStringf@@QEAA@PEBDZZ:PROC ; FStringf::FStringf + Line 136: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 137: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 138: EXTRN ?D_AddFile@@YA_NAEAV?$TArray@VFString@@V1@@@PEBD_NH@Z:PROC ; D_AddFile + Line 139: EXTRN ?FileExists@@YA_NPEBD@Z:PROC ; FileExists + Line 140: EXTRN ?DefaultExtension@@YAXAEAVFString@@PEBD@Z:PROC ; DefaultExtension + Line 141: EXTRN ?ExtractFileBase@@YA?AVFString@@PEBD_N@Z:PROC ; ExtractFileBase + Line 142: EXTRN ?NicePath@@YA?AVFString@@PEBD@Z:PROC ; NicePath + Line 143: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 144: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 145: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 146: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 147: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 148: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 149: EXTRN ?I_SetIWADInfo@@YAXXZ:PROC ; I_SetIWADInfo + Line 150: EXTRN ?I_PickIWad@@YAHPEAUWadStuff@@H_NH@Z:PROC ; I_PickIWad + Line 151: EXTRN ?I_GetSteamPath@@YA?AV?$TArray@VFString@@V1@@@XZ:PROC ; I_GetSteamPath + Line 152: EXTRN ?I_GetGogPaths@@YA?AV?$TArray@VFString@@V1@@@XZ:PROC ; I_GetGogPaths + Line 153: EXTRN ?I_FindFirst@@YAPEAXPEBDPEAUfindstate_t@@@Z:PROC ; I_FindFirst + Line 154: EXTRN ?I_FindNext@@YAHPEAXPEAUfindstate_t@@@Z:PROC ; I_FindNext + Line 155: EXTRN ?I_FindClose@@YAHPEAX@Z:PROC ; I_FindClose + Line 156: EXTRN ?CheckValue@FArgs@@QEBAPEBDPEBD@Z:PROC ; FArgs::CheckValue + Line 157: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 158: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 159: EXTRN ?OpenMem@FScanner@@QEAAXPEBD0H@Z:PROC ; FScanner::OpenMem + Line 160: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 161: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 162: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 163: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 164: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 165: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 166: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 167: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 168: EXTRN ?V_GetColor@@YAHPEBIAEAVFScanner@@@Z:PROC ; V_GetColor + Line 169: EXTRN ?SetSection@FConfigFile@@QEAA_NPEBD_N@Z:PROC ; FConfigFile::SetSection + Line 170: EXTRN ?NextInSection@FConfigFile@@QEAA_NAEAPEBD0@Z:PROC ; FConfigFile::NextInSection + Line 171: EXTRN ?CacheLump@FResourceLump@@QEAAPEAXXZ:PROC ; FResourceLump::CacheLump + Line 172: EXTRN ?OpenResourceFile@FResourceFile@@SAPEAV1@PEBD_N1@Z:PROC ; FResourceFile::OpenResourceFile + Line 173: EXTRN __CxxFrameHandler3:PROC + Line 174: EXTRN memmove:PROC + Line 175: EXTRN memset:PROC + Line 176: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 177: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 178: EXTRN ?DoomStartupInfo@@3UFStartupInfo@@A:BYTE ; DoomStartupInfo + Line 179: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 180: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 181: EXTRN ?GameConfig@@3PEAVFGameConfigFile@@EA:QWORD ; GameConfig + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\d_main.cod (387 hits) + Line 177: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 178: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 179: EXTRN ?IsAlias@FConsoleCommand@@UEAA_NXZ:PROC ; FConsoleCommand::IsAlias + Line 180: EXTRN ?Run@FUnsafeConsoleCommand@@UEAAXAEAVFCommandLine@@PEAVAActor@@H@Z:PROC ; FUnsafeConsoleCommand::Run + Line 181: EXTRN ??_EFUnsafeConsoleCommand@@UEAAPEAXI@Z:PROC ; FUnsafeConsoleCommand::`vector deleting destructor' + Line 182: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 183: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 184: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 185: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 186: EXTRN ?automapactive@@3_NA:BYTE ; automapactive + Line 187: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 188: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 189: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 190: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 191: EXTRN ?Net_Arbitrator@@3HA:DWORD ; Net_Arbitrator + Line 192: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 193: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 1209: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 1210: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 1211: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 1212: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 1213: EXTRN atexit:PROC + Line 1214: EXTRN __std_terminate:PROC + Line 1215: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 1216: EXTRN srand:PROC + Line 1217: EXTRN atof:PROC + Line 1218: EXTRN atoi:PROC + Line 1219: EXTRN strtod:PROC + Line 1220: EXTRN fopen:PROC + Line 1221: EXTRN __stdio_common_vfprintf:PROC + Line 1222: EXTRN strrchr:PROC + Line 1223: EXTRN stricmp:PROC + Line 1224: EXTRN __std_exception_copy:PROC + Line 1225: EXTRN __std_exception_destroy:PROC + Line 1226: EXTRN ??_Eexception@std@@UEAAPEAXI@Z:PROC ; std::exception::`vector deleting destructor' + Line 1227: EXTRN ??_Eruntime_error@std@@UEAAPEAXI@Z:PROC ; std::runtime_error::`vector deleting destructor' + Line 1228: EXTRN getcwd:PROC + Line 1229: EXTRN chdir:PROC + Line 1230: EXTRN ?_Xbad_function_call@std@@YAXXZ:PROC ; std::_Xbad_function_call + Line 1231: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 1232: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 1233: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 1234: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 1235: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 1236: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 1237: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 1238: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 1239: EXTRN ??HFString@@QEBA?AV0@PEBD@Z:PROC ; FString::operator+ + Line 1240: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 1241: EXTRN ?Left@FString@@QEBA?AV1@_K@Z:PROC ; FString::Left + Line 1242: EXTRN ?IndexOf@FString@@QEBAJDJ@Z:PROC ; FString::IndexOf + Line 1243: EXTRN ?ReplaceChars@FString@@QEAAXDD@Z:PROC ; FString::ReplaceChars + Line 1244: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 1245: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 1246: EXTRN ??_ECNoRunExit@@UEAAPEAXI@Z:PROC ; CNoRunExit::`vector deleting destructor' + Line 1247: EXTRN ?I_SetFrameTime@@YAXXZ:PROC ; I_SetFrameTime + Line 1248: EXTRN ?I_GetTimeFrac@@YANXZ:PROC ; I_GetTimeFrac + Line 1249: EXTRN ?I_FreezeTime@@YAX_N@Z:PROC ; I_FreezeTime + Line 1250: EXTRN ?I_msTime@@YA_KXZ:PROC ; I_msTime + Line 1251: EXTRN ?I_msTimeFS@@YA_KXZ:PROC ; I_msTimeFS + Line 1252: EXTRN ?StaticClearRandom@FRandom@@SAXXZ:PROC ; FRandom::StaticClearRandom + Line 1253: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 1254: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 1255: EXTRN mysnprintf:PROC + Line 1256: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 1257: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 1258: EXTRN ?EnableNoSet@FBaseCVar@@SAXXZ:PROC ; FBaseCVar::EnableNoSet + Line 1259: EXTRN ?EnableCallbacks@FBaseCVar@@SAXXZ:PROC ; FBaseCVar::EnableCallbacks + Line 1260: EXTRN ?DisableCallbacks@FBaseCVar@@SAXXZ:PROC ; FBaseCVar::DisableCallbacks + Line 1261: EXTRN ?FindCVar@@YAPEAVFBaseCVar@@PEBDPEAPEAV1@@Z:PROC ; FindCVar + Line 1262: EXTRN ?DestroyCVarsFlagged@@YAXI@Z:PROC ; DestroyCVarsFlagged + Line 1263: EXTRN ?C_CreateCVar@@YAPEAVFBaseCVar@@PEBDW4ECVarType@@I@Z:PROC ; C_CreateCVar + Line 1264: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 1265: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 1266: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 1267: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 1268: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 1269: EXTRN ??0FFlagCVar@@QEAA@PEBDAEAVFIntCVar@@I@Z:PROC ; FFlagCVar::FFlagCVar + Line 1270: EXTRN ??0FMaskCVar@@QEAA@PEBDAEAVFIntCVar@@I@Z:PROC ; FMaskCVar::FMaskCVar + Line 1271: EXTRN ?LoadStrings@FStringTable@@QEAAX_N@Z:PROC ; FStringTable::LoadStrings + Line 1272: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 1273: EXTRN ??AFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator[] + Line 1274: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 1275: EXTRN ?InitMultipleFiles@FWadCollection@@QEAAXAEAV?$TArray@VFString@@V1@@@@Z:PROC ; FWadCollection::InitMultipleFiles + Line 1276: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 1277: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDHH_N@Z:PROC ; FWadCollection::CheckNumForName + Line 1278: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForFullName + Line 1279: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 1280: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 1281: EXTRN ?S_Init@@YAXXZ:PROC ; S_Init + Line 1282: EXTRN ?S_InitData@@YAXXZ:PROC ; S_InitData + Line 1283: EXTRN ?S_Shutdown@@YAXXZ:PROC ; S_Shutdown + Line 1284: EXTRN ?S_Sound@@YAXHVFSoundID@@MM@Z:PROC ; S_Sound + Line 1285: EXTRN ?S_StopAllChannels@@YAXXZ:PROC ; S_StopAllChannels + Line 1286: EXTRN ?S_StartMusic@@YA_NPEBD@Z:PROC ; S_StartMusic + Line 1287: EXTRN ?S_ChangeMusic@@YA_NPEBDH_N1@Z:PROC ; S_ChangeMusic + Line 1288: EXTRN ?S_StopMusic@@YAX_N@Z:PROC ; S_StopMusic + Line 1289: EXTRN ?S_UpdateSounds@@YAXPEAVAActor@@@Z:PROC ; S_UpdateSounds + Line 1290: EXTRN ?S_ParseReverbDef@@YAXXZ:PROC ; S_ParseReverbDef + Line 1291: EXTRN ?S_ParseMusInfo@@YAXXZ:PROC ; S_ParseMusInfo + Line 1292: EXTRN ?SetLanguageIDs@@YAXXZ:PROC ; SetLanguageIDs + Line 1293: EXTRN ?I_Init@@YAXXZ:PROC ; I_Init + Line 1294: EXTRN ?I_MakeRNGSeed@@YAIXZ:PROC ; I_MakeRNGSeed + Line 1295: EXTRN ?I_StartFrame@@YAXXZ:PROC ; I_StartFrame + Line 1296: EXTRN ?I_StartTic@@YAXXZ:PROC ; I_StartTic + Line 1297: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 1298: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 1299: EXTRN ?I_SetCursor@@YA_NPEAVFTexture@@@Z:PROC ; I_SetCursor + Line 1300: EXTRN ?I_FindFirst@@YAPEAXPEBDPEAUfindstate_t@@@Z:PROC ; I_FindFirst + Line 1301: EXTRN ?I_FindNext@@YAHPEAXPEAUfindstate_t@@@Z:PROC ; I_FindNext + Line 1302: EXTRN ?I_FindClose@@YAHPEAX@Z:PROC ; I_FindClose + Line 1303: EXTRN ?Step@GC@@YAXXZ:PROC ; GC::Step + Line 1304: EXTRN ?FullGC@GC@@YAXXZ:PROC ; GC::FullGC + Line 1305: EXTRN ?DelSoftRootHead@GC@@YAXXZ:PROC ; GC::DelSoftRootHead + Line 1306: EXTRN ?RemoveUnusedSymbols@@YAXXZ:PROC ; RemoveUnusedSymbols + Line 1307: EXTRN ?StaticInit@PClass@@SAXXZ:PROC ; PClass::StaticInit + Line 1308: EXTRN ?StaticShutdown@PClass@@SAXXZ:PROC ; PClass::StaticShutdown + Line 1309: EXTRN ?V_SetBlend@@YAXHHHH@Z:PROC ; V_SetBlend + Line 1310: EXTRN ?R_DeinitTranslationTables@@YAXXZ:PROC ; R_DeinitTranslationTables + Line 1311: EXTRN ?R_ParseTrnslate@@YAXXZ:PROC ; R_ParseTrnslate + Line 1312: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 1313: EXTRN ?GetTextureID@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::GetTextureID + Line 1314: EXTRN ?Init@FTextureManager@@QEAAXXZ:PROC ; FTextureManager::Init + Line 1315: EXTRN ?UpdateAnimations@FTextureManager@@QEAAX_K@Z:PROC ; FTextureManager::UpdateAnimations + Line 1316: EXTRN ?GuesstimateNumTextures@FTextureManager@@QEAAHXZ:PROC ; FTextureManager::GuesstimateNumTextures + Line 1317: EXTRN ?PrintStat@FStat@@SAXXZ:PROC ; FStat::PrintStat + Line 1318: EXTRN ?V_OutputResized@@YAXHH@Z:PROC ; V_OutputResized + Line 1319: EXTRN ?InitPalette@DFrameBuffer@@QEAAXXZ:PROC ; DFrameBuffer::InitPalette + Line 1320: EXTRN ?DrawBlend@DFrameBuffer@@QEAAXPEAUsector_t@@@Z:PROC ; DFrameBuffer::DrawBlend + Line 1321: EXTRN ?Clear@DFrameBuffer@@QEAAXHHHHHI@Z:PROC ; DFrameBuffer::Clear + Line 1322: EXTRN ?DrawTexture@DFrameBuffer@@QEAAXPEAVFTexture@@NNHZZ:PROC ; DFrameBuffer::DrawTexture + Line 1323: EXTRN ?DrawText@DFrameBuffer@@QEAAXPEAVFFont@@HNNPEBDHZZ:PROC ; DFrameBuffer::DrawText + Line 1324: EXTRN ?DrawRateStuff@DFrameBuffer@@IEAAXXZ:PROC ; DFrameBuffer::DrawRateStuff + Line 1325: EXTRN ?V_Init@@YAX_N@Z:PROC ; V_Init + Line 1326: EXTRN ?V_Init2@@YAXXZ:PROC ; V_Init2 + Line 1327: EXTRN ?V_GetColor@@YAHPEBIAEAVFScanner@@@Z:PROC ; V_GetColor + Line 1328: EXTRN ?StringWidth@FFont@@QEBAHPEBE@Z:PROC ; FFont::StringWidth + Line 1329: EXTRN ?V_ClearFonts@@YAXXZ:PROC ; V_ClearFonts + Line 1330: EXTRN ?V_InitFonts@@YAXXZ:PROC ; V_InitFonts + Line 1331: EXTRN ?V_InitFontColors@@YAXXZ:PROC ; V_InitFontColors + Line 1332: EXTRN ?G_DeferedPlayDemo@@YAXPEBD@Z:PROC ; G_DeferedPlayDemo + Line 1333: EXTRN ?G_LoadGame@@YAXPEBD_N@Z:PROC ; G_LoadGame + Line 1334: EXTRN ?G_RecordDemo@@YAXPEBD@Z:PROC ; G_RecordDemo + Line 1335: EXTRN ?G_BeginRecording@@YAXPEBD@Z:PROC ; G_BeginRecording + Line 1336: EXTRN ?G_TimeDemo@@YAXPEBD@Z:PROC ; G_TimeDemo + Line 1337: EXTRN ?G_CheckDemoStatus@@YA_NXZ:PROC ; G_CheckDemoStatus + Line 1338: EXTRN ?G_Ticker@@YAXXZ:PROC ; G_Ticker + Line 1339: EXTRN ?G_Responder@@YA_NPEAUevent_t@@@Z:PROC ; G_Responder + Line 1340: EXTRN ?G_AddViewPitch@@YAXH_N@Z:PROC ; G_AddViewPitch + Line 1341: EXTRN ?G_AddViewAngle@@YAXH_N@Z:PROC ; G_AddViewAngle + Line 1342: EXTRN ?F_Drawer@@YAXXZ:PROC ; F_Drawer + Line 1343: EXTRN ?F_EndFinale@@YAXXZ:PROC ; F_EndFinale + Line 1344: EXTRN ?Create@Wiper@@SAPEAV1@H@Z:PROC ; Wiper::Create + Line 1345: EXTRN ??0FArgs@@QEAA@XZ:PROC ; FArgs::FArgs + Line 1346: EXTRN ?AppendArg@FArgs@@QEAAXVFString@@@Z:PROC ; FArgs::AppendArg + Line 1347: EXTRN ?RemoveArgs@FArgs@@QEAAXPEBD@Z:PROC ; FArgs::RemoveArgs + Line 1348: EXTRN ?CollectFiles@FArgs@@QEAAXPEBD0@Z:PROC ; FArgs::CollectFiles + Line 1349: EXTRN ?GatherFiles@FArgs@@QEBAPEAV1@PEBD@Z:PROC ; FArgs::GatherFiles + Line 1350: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 1351: EXTRN ?CheckParmList@FArgs@@QEBAHPEBDPEAPEAVFString@@H@Z:PROC ; FArgs::CheckParmList + Line 1352: EXTRN ?CheckValue@FArgs@@QEBAPEBDPEBD@Z:PROC ; FArgs::CheckValue + Line 1353: EXTRN ?GetArg@FArgs@@QEBAPEBDH@Z:PROC ; FArgs::GetArg + Line 1354: EXTRN ?TakeValue@FArgs@@QEAA?AVFString@@PEBD@Z:PROC ; FArgs::TakeValue + Line 1355: EXTRN ?NumArgs@FArgs@@QEBAHXZ:PROC ; FArgs::NumArgs + Line 1356: EXTRN ?M_FindResponseFile@@YAXXZ:PROC ; M_FindResponseFile + Line 1357: EXTRN ?M_LoadDefaults@@YAXXZ:PROC ; M_LoadDefaults + Line 1358: EXTRN ?M_SaveDefaults@@YA_NPEBD@Z:PROC ; M_SaveDefaults + Line 1359: EXTRN ?DestroyThinkers@FThinkerList@@QEAAXXZ:PROC ; FThinkerList::DestroyThinkers + Line 1360: EXTRN ?StaticInit@PClassActor@@SAXXZ:PROC ; PClassActor::StaticInit + Line 1361: EXTRN ?StaticSetActorNums@PClassActor@@SAXXZ:PROC ; PClassActor::StaticSetActorNums + Line 1362: EXTRN ?InitActorNumsFromMapinfo@@YAXXZ:PROC ; InitActorNumsFromMapinfo + Line 1363: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 1364: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 1365: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 1366: EXTRN ?OpenMem@FScanner@@QEAAXPEBD0H@Z:PROC ; FScanner::OpenMem + Line 1367: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 1368: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 1369: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 1370: EXTRN ?GetToken@FScanner@@QEAA_NXZ:PROC ; FScanner::GetToken + Line 1371: EXTRN ?MustGetAnyToken@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetAnyToken + Line 1372: EXTRN ?TokenMustBe@FScanner@@QEAAXH@Z:PROC ; FScanner::TokenMustBe + Line 1373: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 1374: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 1375: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 1376: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 1377: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 1378: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 1379: EXTRN ?CacheLump@FResourceLump@@QEAAPEAXXZ:PROC ; FResourceLump::CacheLump + Line 1380: EXTRN ?OpenResourceFile@FResourceFile@@SAPEAV1@PEBDAEAVFileReader@@_N2@Z:PROC ; FResourceFile::OpenResourceFile + Line 1381: EXTRN ?OpenDirectory@FResourceFile@@SAPEAV1@PEBD_N@Z:PROC ; FResourceFile::OpenDirectory + Line 1382: EXTRN ?CheckWarpTransMap@@YA_NAEAVFString@@_N@Z:PROC ; CheckWarpTransMap + Line 1383: EXTRN ?G_InitNew@@YAXPEBD_N@Z:PROC ; G_InitNew + Line 1384: EXTRN ?CalcMapName@@YA?AVFString@@HH@Z:PROC ; CalcMapName + Line 1385: EXTRN ?G_ParseMapInfo@@YAXVFString@@@Z:PROC ; G_ParseMapInfo + Line 1386: EXTRN ?P_SetupWeapons_ntohton@@YAXXZ:PROC ; P_SetupWeapons_ntohton + Line 1387: EXTRN ?D_GetFragCount@@YAHPEAVplayer_t@@@Z:PROC ; D_GetFragCount + Line 1388: EXTRN ?RemoveAllBots@FCajunMaster@@QEAAXPEAUFLevelLocals@@_N@Z:PROC ; FCajunMaster::RemoveAllBots + Line 1389: EXTRN ?M_Responder@@YA_NPEAUevent_t@@@Z:PROC ; M_Responder + Line 1390: EXTRN ?M_Ticker@@YAXXZ:PROC ; M_Ticker + Line 1391: EXTRN ?M_Drawer@@YAXXZ:PROC ; M_Drawer + Line 1392: EXTRN ?M_Init@@YAXXZ:PROC ; M_Init + Line 1393: EXTRN ?M_ClearMenus@@YAXXZ:PROC ; M_ClearMenus + Line 1394: EXTRN ?C_InitConsole@@YAXHH_N@Z:PROC ; C_InitConsole + Line 1395: EXTRN ?C_InitConback@@YAXXZ:PROC ; C_InitConback + Line 1396: EXTRN ?C_NewModeAdjust@@YAXXZ:PROC ; C_NewModeAdjust + Line 1397: EXTRN ?C_Ticker@@YAXXZ:PROC ; C_Ticker + Line 1398: EXTRN ?C_DrawConsole@@YAXXZ:PROC ; C_DrawConsole + Line 1399: EXTRN ?C_HideConsole@@YAXXZ:PROC ; C_HideConsole + Line 1400: EXTRN ?C_Responder@@YA_NPEAUevent_t@@@Z:PROC ; C_Responder + Line 1401: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 1402: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 1403: EXTRN ?ExecCommands@FExecList@@QEBAXXZ:PROC ; FExecList::ExecCommands + Line 1404: EXTRN ?AddPullins@FExecList@@QEBAXAEAV?$TArray@VFString@@V1@@@@Z:PROC ; FExecList::AddPullins + Line 1405: EXTRN ?CheckCheatmode@@YA_N_N@Z:PROC ; CheckCheatmode + Line 1406: EXTRN ?C_ParseCmdLineParams@@YAPEAUFExecList@@PEAU1@@Z:PROC ; C_ParseCmdLineParams + Line 1407: EXTRN ?AddCommandString@@YAXPEBDH@Z:PROC ; AddCommandString + Line 1408: EXTRN ?C_RunDelayedCommands@@YAXXZ:PROC ; C_RunDelayedCommands + Line 1409: EXTRN ?C_ParseExecFile@@YAPEAUFExecList@@PEBDPEAU1@@Z:PROC ; C_ParseExecFile + Line 1410: EXTRN ?C_ClearAliases@@YAXXZ:PROC ; C_ClearAliases + Line 1411: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 1412: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 1413: EXTRN ?execLogfile@@YAXPEBD_N@Z:PROC ; execLogfile + Line 1414: EXTRN ?I_WaitVBL@@YAXH@Z:PROC ; I_WaitVBL + Line 1415: EXTRN ?CT_Init@@YAXXZ:PROC ; CT_Init + Line 1416: EXTRN ?CT_Drawer@@YAXXZ:PROC ; CT_Drawer + Line 1417: EXTRN ?WI_Drawer@@YAXXZ:PROC ; WI_Drawer + Line 1418: EXTRN ?AM_StaticInit@@YAXXZ:PROC ; AM_StaticInit + Line 1419: EXTRN ?AM_ClearColorsets@@YAXXZ:PROC ; AM_ClearColorsets + Line 1420: EXTRN ?AM_Stop@@YAXXZ:PROC ; AM_Stop + Line 1421: EXTRN ?P_CheckMapData@@YA_NPEBD@Z:PROC ; P_CheckMapData + Line 1422: EXTRN ?P_FreeLevelData@@YAXXZ:PROC ; P_FreeLevelData + Line 1423: EXTRN ?P_Init@@YAXXZ:PROC ; P_Init + Line 1424: EXTRN ?R_SetFOV@@YAXAEAUFRenderViewpoint@@U?$TAngle@N@@@Z:PROC ; R_SetFOV + Line 1425: EXTRN ?R_Init@@YAXXZ:PROC ; R_Init + Line 1426: EXTRN ?R_ExecuteSetViewSize@@YAXAEAUFRenderViewpoint@@AEAUFViewWindow@@@Z:PROC ; R_ExecuteSetViewSize + Line 1427: EXTRN ?R_InitSkyMap@@YAXXZ:PROC ; R_InitSkyMap + Line 1428: EXTRN ?R_UpdateSky@@YAX_K@Z:PROC ; R_UpdateSky + Line 1429: EXTRN ??0FIWadManager@@QEAA@PEBD@Z:PROC ; FIWadManager::FIWadManager + Line 1430: EXTRN ?FindIWAD@FIWadManager@@QEAAPEBUFIWADInfo@@AEAV?$TArray@VFString@@V1@@@PEBD11@Z:PROC ; FIWadManager::FindIWAD + Line 1431: EXTRN ?D_LoadDehLumps@@YAHW4DehLumpSource@@@Z:PROC ; D_LoadDehLumps + Line 1432: EXTRN ?D_LoadDehFile@@YA_NPEBD@Z:PROC ; D_LoadDehFile + Line 1433: EXTRN ?FinishDehPatch@@YAXXZ:PROC ; FinishDehPatch + Line 1434: EXTRN ?FileExists@@YA_NPEBD@Z:PROC ; FileExists + Line 1435: EXTRN ?DirEntryExists@@YA_NPEBDPEA_N@Z:PROC ; DirEntryExists + Line 1436: EXTRN ?DefaultExtension@@YAXAEAVFString@@PEBD@Z:PROC ; DefaultExtension + Line 1437: EXTRN ?ExpandEnvVars@@YA?AVFString@@PEBD@Z:PROC ; ExpandEnvVars + Line 1438: EXTRN ?NicePath@@YA?AVFString@@PEBD@Z:PROC ; NicePath + Line 1439: EXTRN ?InitSpawnablesFromMapinfo@@YAXXZ:PROC ; InitSpawnablesFromMapinfo + Line 1440: EXTRN ?PO_LinkToSubsectors@@YAXPEAUFLevelLocals@@@Z:PROC ; PO_LinkToSubsectors + Line 1441: EXTRN ?P_FindParticleSubsectors@@YAXPEAUFLevelLocals@@@Z:PROC ; P_FindParticleSubsectors + Line 1442: EXTRN ?DoInterpolations@FInterpolator@@QEAAXN@Z:PROC ; FInterpolator::DoInterpolations + Line 1443: EXTRN ?RestoreInterpolations@FInterpolator@@QEAAXXZ:PROC ; FInterpolator::RestoreInterpolations + Line 1444: EXTRN ?ClearAllSubsectorLinks@FLevelLocals@@QEAAXXZ:PROC ; FLevelLocals::ClearAllSubsectorLinks + Line 1445: EXTRN ?SetCompatLineOnSide@FLevelLocals@@QEAAX_N@Z:PROC ; FLevelLocals::SetCompatLineOnSide + Line 1446: EXTRN ?ExitLevel@FLevelLocals@@QEAAXH_N@Z:PROC ; FLevelLocals::ExitLevel + Line 1447: EXTRN ?SetSection@FConfigFile@@QEAA_NPEBD_N@Z:PROC ; FConfigFile::SetSection + Line 1448: EXTRN ?NextInSection@FConfigFile@@QEAA_NAEAPEBD0@Z:PROC ; FConfigFile::NextInSection + Line 1449: EXTRN ?GetPosition@FConfigFile@@QEBAXAEAVPosition@1@@Z:PROC ; FConfigFile::GetPosition + Line 1450: EXTRN ?SetPosition@FConfigFile@@QEAAXAEBVPosition@1@@Z:PROC ; FConfigFile::SetPosition + Line 1451: EXTRN ?DoAutoloadSetup@FGameConfigFile@@QEAAXPEAVFIWadManager@@@Z:PROC ; FGameConfigFile::DoAutoloadSetup + Line 1452: EXTRN ?DoGameSetup@FGameConfigFile@@QEAAXPEBD@Z:PROC ; FGameConfigFile::DoGameSetup + Line 1453: EXTRN ?DoKeySetup@FGameConfigFile@@QEAAXPEBD@Z:PROC ; FGameConfigFile::DoKeySetup + Line 1454: EXTRN ?DoModSetup@FGameConfigFile@@QEAAXPEBD@Z:PROC ; FGameConfigFile::DoModSetup + Line 1455: EXTRN ?AddAutoexec@FGameConfigFile@@QEAAXPEAVFArgs@@PEBD@Z:PROC ; FGameConfigFile::AddAutoexec + Line 1456: EXTRN ?ShowPlayerName@DBaseStatusBar@@QEAAXXZ:PROC ; DBaseStatusBar::ShowPlayerName + Line 1457: EXTRN ?CallDraw@DBaseStatusBar@@QEAAXW4EHudState@@N@Z:PROC ; DBaseStatusBar::CallDraw + Line 1458: EXTRN ?DrawBottomStuff@DBaseStatusBar@@QEAAXW4EHudState@@@Z:PROC ; DBaseStatusBar::DrawBottomStuff + Line 1459: EXTRN ?DrawTopStuff@DBaseStatusBar@@QEAAXW4EHudState@@@Z:PROC ; DBaseStatusBar::DrawTopStuff + Line 1460: EXTRN ?AttachToPlayer@DBaseStatusBar@@QEAAXPEAVplayer_t@@@Z:PROC ; DBaseStatusBar::AttachToPlayer + Line 1461: EXTRN ?DrawAltHUD@DBaseStatusBar@@QEAAXXZ:PROC ; DBaseStatusBar::DrawAltHUD + Line 1462: EXTRN ?RefreshViewBorder@DBaseStatusBar@@QEAAXXZ:PROC ; DBaseStatusBar::RefreshViewBorder + Line 1463: EXTRN ?DrawCrosshair@DBaseStatusBar@@QEAAXXZ:PROC ; DBaseStatusBar::DrawCrosshair + Line 1464: EXTRN ?ST_Clear@@YAXXZ:PROC ; ST_Clear + Line 1465: EXTRN ?ReadAllDecals@FDecalLib@@QEAAXXZ:PROC ; FDecalLib::ReadAllDecals + Line 1466: EXTRN ?GetGitHash@@YAPEBDXZ:PROC ; GetGitHash + Line 1467: EXTRN ?GetVersionString@@YAPEBDXZ:PROC ; GetVersionString + Line 1468: EXTRN ?CreateInstance@FStartupScreen@@SAPEAV1@H@Z:PROC ; FStartupScreen::CreateInstance + Line 1469: EXTRN ??_EFStartupScreen@@UEAAPEAXI@Z:PROC ; FStartupScreen::`vector deleting destructor' + Line 1470: EXTRN ?ParseTeamInfo@FTeam@@QEAAXXZ:PROC ; FTeam::ParseTeamInfo + Line 1471: EXTRN ?Load@SBarInfo@@SAXXZ:PROC ; SBarInfo::Load + Line 1472: EXTRN ?NetUpdate@@YAXXZ:PROC ; NetUpdate + Line 1473: EXTRN ?D_QuitNetGame@@YAXXZ:PROC ; D_QuitNetGame + Line 1474: EXTRN ?TryRunTics@@YAXXZ:PROC ; TryRunTics + Line 1475: EXTRN ?Net_NewMakeTic@@YAXXZ:PROC ; Net_NewMakeTic + Line 1476: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 1477: EXTRN ?Net_WriteFloat@@YAXM@Z:PROC ; Net_WriteFloat + Line 1478: EXTRN ?Net_ClearBuffers@@YAXXZ:PROC ; Net_ClearBuffers + Line 1479: EXTRN ?cht_DoCheat@@YAXPEAVplayer_t@@H@Z:PROC ; cht_DoCheat + Line 1480: EXTRN ?I_UpdateDeviceList@@YAPEAUIJoystickConfig@@XZ:PROC ; I_UpdateDeviceList + Line 1481: EXTRN ?UpdateJoystickMenu@@YAXPEAUIJoystickConfig@@@Z:PROC ; UpdateJoystickMenu + Line 1482: EXTRN ?E_Shutdown@@YAX_N@Z:PROC ; E_Shutdown + Line 1483: EXTRN ?E_Responder@@YA_NPEBUevent_t@@@Z:PROC ; E_Responder + Line 1484: EXTRN ?MaybePrintMessage@CVMAbortException@@QEAAXXZ:PROC ; CVMAbortException::MaybePrintMessage + Line 1485: EXTRN ?StaticInit@PType@@SAXXZ:PROC ; PType::StaticInit + Line 1486: EXTRN ?UpdateVanillaTransparency@@YAXXZ:PROC ; UpdateVanillaTransparency + Line 1487: EXTRN ?UseVanillaTransparency@@YA_NXZ:PROC ; UseVanillaTransparency + Line 1488: EXTRN ?D_DoAnonStats@@YAXXZ:PROC ; D_DoAnonStats + Line 1489: EXTRN ?I_SetWindowTitle@@YAXPEBD@Z:PROC ; I_SetWindowTitle + Line 1490: EXTRN ?ReadStatistics@@YAXXZ:PROC ; ReadStatistics + Line 1491: EXTRN ?G_NewInit@@YAXXZ:PROC ; G_NewInit + Line 1492: EXTRN ?SetupPlayerClasses@@YAXXZ:PROC ; SetupPlayerClasses + Line 1493: EXTRN ?DeinitMenus@@YAXXZ:PROC ; DeinitMenus + Line 1494: EXTRN ?D_CheckNetGame@@YAXXZ:PROC ; D_CheckNetGame + Line 1495: EXTRN ?G_BuildTiccmd@@YAXPEAUticcmd_t@@@Z:PROC ; G_BuildTiccmd + Line 1496: EXTRN ?D_LoadWadSettings@@YAXXZ:PROC ; D_LoadWadSettings + Line 1497: EXTRN ?ParseGLDefs@@YAXXZ:PROC ; ParseGLDefs + Line 1498: EXTRN ?D_ConfirmSendStats@@YAXXZ:PROC ; D_ConfirmSendStats + Line 1499: EXTRN _CxxThrowException:PROC + Line 1500: EXTRN __CxxFrameHandler3:PROC + Line 1501: EXTRN memcpy:PROC + Line 1502: EXTRN memmove:PROC + Line 1503: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 1504: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 1505: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 1506: EXTRN ?rngseed@@3IA:DWORD ; rngseed + Line 1507: EXTRN ?staticrngseed@@3IA:DWORD ; staticrngseed + Line 1508: EXTRN ?use_staticrng@@3_NA:BYTE ; use_staticrng + Line 1509: EXTRN ?gameskill@@3VFIntCVar@@A:BYTE ; gameskill + Line 1510: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 1511: EXTRN ?menuactive@@3W4EMenuState@@A:DWORD ; menuactive + Line 1512: EXTRN ?paused@@3HA:DWORD ; paused + Line 1513: EXTRN ?pauseext@@3_NA:BYTE ; pauseext + Line 1514: EXTRN ?viewactive@@3_NA:BYTE ; viewactive + Line 1515: EXTRN ?nodrawers@@3_NA:BYTE ; nodrawers + Line 1516: EXTRN ?viewheight@@3HA:DWORD ; viewheight + Line 1517: EXTRN ?viewwidth@@3HA:DWORD ; viewwidth + Line 1518: EXTRN ?usergame@@3_NA:BYTE ; usergame + Line 1519: EXTRN ?demorecording@@3_NA:BYTE ; demorecording + Line 1520: EXTRN ?singledemo@@3_NA:BYTE ; singledemo + Line 1521: EXTRN ?gametic@@3HA:DWORD ; gametic + Line 1522: EXTRN ?setsizeneeded@@3_NA:BYTE ; setsizeneeded + Line 1523: EXTRN ?mouse_sensitivity@@3VFFloatCVar@@A:BYTE ; mouse_sensitivity + Line 1524: EXTRN ?LumpFilterIWAD@@3VFString@@A:QWORD ; LumpFilterIWAD + Line 1525: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 1526: EXTRN ?AllocBytes@GC@@3_KA:QWORD ; GC::AllocBytes + Line 1527: EXTRN ?Threshold@GC@@3_KA:QWORD ; GC::Threshold + Line 1528: EXTRN ?FinalGC@GC@@3_NA:BYTE ; GC::FinalGC + Line 1529: EXTRN ?bShutdown@PClass@@2_NA:BYTE ; PClass::bShutdown + Line 1530: EXTRN ?bVMOperational@PClass@@2_NA:BYTE ; PClass::bVMOperational + Line 1531: EXTRN ?CleanXfac@@3HA:DWORD ; CleanXfac + Line 1532: EXTRN ?CleanYfac@@3HA:DWORD ; CleanYfac + Line 1533: EXTRN ?vid_rendermode@@3VFIntCVar@@A:BYTE ; vid_rendermode + Line 1534: EXTRN ?fullscreen@@3VFBoolCVar@@A:BYTE ; fullscreen + Line 1535: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 1536: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 1537: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 1538: EXTRN ?GameConfig@@3PEAVFGameConfigFile@@EA:QWORD ; GameConfig + Line 1539: EXTRN ?savegamerestore@@3_NA:BYTE ; savegamerestore + Line 1540: EXTRN ?PainFlashes@@3V?$TArray@V?$tuple@PEAVPClass@@VFName@@UPalEntry@@@std@@V12@@@A:BYTE ; PainFlashes + Line 1541: EXTRN ?ColorSets@@3V?$TArray@V?$tuple@PEAVPClass@@HUFPlayerColorSet@@@std@@V12@@@A:BYTE ; ColorSets + Line 1542: EXTRN ?PlayerClasses@@3V?$TArray@VFPlayerClass@@V1@@@A:BYTE ; PlayerClasses + Line 1543: EXTRN ?ConsoleState@@3W4cstate_t@@A:DWORD ; ConsoleState + Line 1544: EXTRN ?Button_Mlook@@3UFButtonStatus@@A:BYTE ; Button_Mlook + Line 1545: EXTRN ?Button_Strafe@@3UFButtonStatus@@A:BYTE ; Button_Strafe + Line 1546: EXTRN ?GSnd@@3PEAVSoundRenderer@@EA:QWORD ; GSnd + Line 1547: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 1548: EXTRN ?r_viewwindow@@3UFViewWindow@@A:BYTE ; r_viewwindow + Line 1549: EXTRN ?r_NoInterpolate@@3_NA:BYTE ; r_NoInterpolate + Line 1550: EXTRN ?progdir@@3VFString@@A:QWORD ; progdir + Line 1551: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 1552: EXTRN ?r_dynlights@@3VFBoolCVar@@A:BYTE ; r_dynlights + Line 1553: EXTRN ?gl_lights@@3VFBoolCVar@@A:BYTE ; gl_lights + Line 1554: EXTRN ?DecalLibrary@@3VFDecalLib@@A:BYTE ; DecalLibrary + Line 1555: EXTRN ?StartScreen@@3PEAVFStartupScreen@@EA:QWORD ; StartScreen + Line 1556: EXTRN ?TeamLibrary@@3VFTeam@@A:BYTE ; TeamLibrary + Line 1557: EXTRN ?maketic@@3HA:DWORD ; maketic + Line 1558: EXTRN ?netcmds@@3PAY0CE@Uticcmd_t@@A:BYTE ; netcmds + Line 1559: EXTRN ?gameaction@@3W4gameaction_t@@A:DWORD ; gameaction + Line 1560: EXTRN ?ARegHead@@3QEAXEA:QWORD ; ARegHead + Line 1561: EXTRN ?ARegTail@@3QEAXEA:QWORD ; ARegTail + Line 1562: EXTRN ?stacktrace@CVMAbortException@@2VFString@@A:QWORD ; CVMAbortException::stacktrace + Line 1563: EXTRN ?r_UseVanillaTransparency@@3_NA:BYTE ; r_UseVanillaTransparency + Line 1564: EXTRN ?hud_althud@@3VFBoolCVar@@A:BYTE ; hud_althud + Line 1565: EXTRN ?vr_mode@@3VFIntCVar@@A:BYTE ; vr_mode + Line 1566: EXTRN ?turbo@@3VFFloatCVar@@A:BYTE ; turbo + Line 1567: EXTRN ?freelook@@3VFBoolCVar@@A:BYTE ; freelook + Line 1568: EXTRN ?m_pitch@@3VFFloatCVar@@A:BYTE ; m_pitch + Line 1569: EXTRN ?m_yaw@@3VFFloatCVar@@A:BYTE ; m_yaw + Line 1570: EXTRN ?invertmouse@@3VFBoolCVar@@A:BYTE ; invertmouse + Line 1571: EXTRN ?lookstrafe@@3VFBoolCVar@@A:BYTE ; lookstrafe + Line 1572: EXTRN ?screenblocks@@3VFIntCVar@@A:BYTE ; screenblocks + Line 1573: EXTRN ?setmodeneeded@@3_NA:BYTE ; setmodeneeded + Line 1574: EXTRN ?M_DemoNoPlay@@3_NA:BYTE ; M_DemoNoPlay + Line 1575: EXTRN ?insave@@3_NA:BYTE ; insave + Line 1576: EXTRN ?LightDefaults@@3V?$TDeletingArray@PEAVFLightDefaults@@PEAV1@@@A:BYTE ; LightDefaults + Line 1577: EXTRN __ImageBase:BYTE + Line 1578: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\d_net.cod (168 hits) + Line 248: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 249: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 250: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 251: EXTRN atexit:PROC + Line 252: EXTRN __std_terminate:PROC + Line 253: EXTRN exit:PROC + Line 254: EXTRN atoi:PROC + Line 255: EXTRN fclose:PROC + Line 256: EXTRN fopen:PROC + Line 257: EXTRN __stdio_common_vfprintf:PROC + Line 258: EXTRN strrchr:PROC + Line 259: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 260: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 261: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 262: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 263: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 264: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 265: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 266: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 267: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 268: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 269: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 270: EXTRN mysnprintf:PROC + Line 271: EXTRN ?I_StartTic@@YAXXZ:PROC ; I_StartTic + Line 272: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 273: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 274: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 275: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 276: EXTRN ?Step@GC@@YAXXZ:PROC ; GC::Step + Line 277: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 278: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 279: EXTRN ?WriteUserCmdMessage@@YAHPEAUusercmd_t@@PEBU1@PEAPEAE@Z:PROC ; WriteUserCmdMessage + Line 280: EXTRN ?SkipTicCmd@@YAHPEAPEAEH@Z:PROC ; SkipTicCmd + Line 281: EXTRN ?ReadTicCmd@@YAXPEAPEAEHH@Z:PROC ; ReadTicCmd + Line 282: EXTRN ?ReadByte@@YAHPEAPEAE@Z:PROC ; ReadByte + Line 283: EXTRN ?ReadWord@@YAHPEAPEAE@Z:PROC ; ReadWord + Line 284: EXTRN ?ReadLong@@YAHPEAPEAE@Z:PROC ; ReadLong + Line 285: EXTRN ?ReadFloat@@YAMPEAPEAE@Z:PROC ; ReadFloat + Line 286: EXTRN ?ReadString@@YAPEADPEAPEAE@Z:PROC ; ReadString + Line 287: EXTRN ?WriteByte@@YAXEPEAPEAE@Z:PROC ; WriteByte + Line 288: EXTRN ?WriteWord@@YAXFPEAPEAE@Z:PROC ; WriteWord + Line 289: EXTRN ?WriteLong@@YAXHPEAPEAE@Z:PROC ; WriteLong + Line 290: EXTRN ?WriteFloat@@YAXMPEAPEAE@Z:PROC ; WriteFloat + Line 291: EXTRN ?WriteString@@YAXPEBDPEAPEAE@Z:PROC ; WriteString + Line 292: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 293: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 294: EXTRN ?C_ReadCVars@@YAXPEAPEAE@Z:PROC ; C_ReadCVars + Line 295: EXTRN ?C_WriteCVars@@YAXPEAPEAEI_N@Z:PROC ; C_WriteCVars + Line 296: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 297: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 298: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 299: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 300: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 301: EXTRN ?S_Sound@@YAXHVFSoundID@@MM@Z:PROC ; S_Sound + Line 302: EXTRN ?S_ChangeMusic@@YA_NPEBDH_N1@Z:PROC ; S_ChangeMusic + Line 303: EXTRN ?S_PauseSound@@YAX_N0@Z:PROC ; S_PauseSound + Line 304: EXTRN ?S_ResumeSound@@YAX_N@Z:PROC ; S_ResumeSound + Line 305: EXTRN ?S_UpdateSounds@@YAXPEAVAActor@@@Z:PROC ; S_UpdateSounds + Line 306: EXTRN ?GetReplacement@PClassActor@@QEAAPEAV1@_N@Z:PROC ; PClassActor::GetReplacement + Line 307: EXTRN ?StaticSpawn@AActor@@SAPEAV1@PEAVPClassActor@@AEBU?$TVector3@N@@W4replace_t@@_N@Z:PROC ; AActor::StaticSpawn + Line 308: EXTRN ?UseInventory@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::UseInventory + Line 309: EXTRN ?DropInventory@AActor@@QEAAPEAV1@PEAV1@H@Z:PROC ; AActor::DropInventory + Line 310: EXTRN ?SpawnHealth@AActor@@QEBAHXZ:PROC ; AActor::SpawnHealth + Line 311: EXTRN ?AddToHash@AActor@@QEAAXXZ:PROC ; AActor::AddToHash + Line 312: EXTRN ?IsMapActor@AActor@@QEAA_NXZ:PROC ; AActor::IsMapActor + Line 313: EXTRN ?ClearCounters@AActor@@QEAAXXZ:PROC ; AActor::ClearCounters + Line 314: EXTRN ?AddSlot@FWeaponSlots@@QEAAXHPEAVPClassActor@@_N@Z:PROC ; FWeaponSlots::AddSlot + Line 315: EXTRN ?AddSlotDefault@FWeaponSlots@@QEAAXHPEAVPClassActor@@_N@Z:PROC ; FWeaponSlots::AddSlotDefault + Line 316: EXTRN ?Net_ReadWeapon@@YAPEAVPClassActor@@PEAPEAE@Z:PROC ; Net_ReadWeapon + Line 317: EXTRN ?D_SetupUserInfo@@YAXXZ:PROC ; D_SetupUserInfo + Line 318: EXTRN ?D_DoServerInfoChange@@YAXPEAPEAE_N@Z:PROC ; D_DoServerInfoChange + Line 319: EXTRN ?D_WriteUserInfoStrings@@YAXHPEAPEAE_N@Z:PROC ; D_WriteUserInfoStrings + Line 320: EXTRN ?D_ReadUserInfoStrings@@YAXHPEAPEAE_N@Z:PROC ; D_ReadUserInfoStrings + Line 321: EXTRN ?TryAddBot@FCajunMaster@@QEAAXPEAUFLevelLocals@@PEAPEAEH@Z:PROC ; FCajunMaster::TryAddBot + Line 322: EXTRN ?RemoveAllBots@FCajunMaster@@QEAAXPEAUFLevelLocals@@_N@Z:PROC ; FCajunMaster::RemoveAllBots + Line 323: EXTRN ?P_IsPlayerTotallyFrozen@@YA_NPEBVplayer_t@@@Z:PROC ; P_IsPlayerTotallyFrozen + Line 324: EXTRN ?M_Ticker@@YAXXZ:PROC ; M_Ticker + Line 325: EXTRN ?I_WaitVBL@@YAXH@Z:PROC ; I_WaitVBL + Line 326: EXTRN ?I_InitNetwork@@YA_NXZ:PROC ; I_InitNetwork + Line 327: EXTRN ?I_NetCmd@@YAXXZ:PROC ; I_NetCmd + Line 328: EXTRN ?G_CheckDemoStatus@@YA_NXZ:PROC ; G_CheckDemoStatus + Line 329: EXTRN ?G_Ticker@@YAXXZ:PROC ; G_Ticker + Line 330: EXTRN ?G_BuildSaveName@@YA?AVFString@@PEBDH@Z:PROC ; G_BuildSaveName + Line 331: EXTRN ?C_Ticker@@YAXXZ:PROC ; C_Ticker + Line 332: EXTRN ?C_MidPrint@@YAXPEAVFFont@@PEBD@Z:PROC ; C_MidPrint + Line 333: EXTRN ?CleanseString@@YAPEADPEAD@Z:PROC ; CleanseString + Line 334: EXTRN ?cht_DoMDK@@YAXPEAVplayer_t@@PEBD@Z:PROC ; cht_DoMDK + Line 335: EXTRN ?cht_DoCheat@@YAXPEAVplayer_t@@H@Z:PROC ; cht_DoCheat + Line 336: EXTRN ?cht_Give@@YAXPEAVplayer_t@@PEBDH@Z:PROC ; cht_Give + Line 337: EXTRN ?cht_Take@@YAXPEAVplayer_t@@PEBDH@Z:PROC ; cht_Take + Line 338: EXTRN ?cht_SetInv@@YAXPEAVplayer_t@@PEBDH_N@Z:PROC ; cht_SetInv + Line 339: EXTRN ?cht_Suicide@@YAXPEAVplayer_t@@@Z:PROC ; cht_Suicide + Line 340: EXTRN ?cht_Morph@@YA?AVFString@@PEAVplayer_t@@PEAVPClassActor@@_N@Z:PROC ; cht_Morph + Line 341: EXTRN ?P_PredictPlayer@@YAXPEAVplayer_t@@@Z:PROC ; P_PredictPlayer + Line 342: EXTRN ?P_UnPredictPlayer@@YAXXZ:PROC ; P_UnPredictPlayer + Line 343: EXTRN ?P_SpawnPlayerMissile@@YAPEAVAActor@@PEAV1@NNNPEAVPClassActor@@U?$TAngle@N@@PEAUFTranslatedLineTarget@@PEAPEAV1@_N5H@Z:PROC ; P_SpawnPlayerMissile + Line 344: EXTRN ?P_TeleportMove@@YA_NPEAVAActor@@AEBU?$TVector3@N@@_N2@Z:PROC ; P_TeleportMove + Line 345: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 346: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 347: EXTRN ?CheckCheatmode@@YA_N_N@Z:PROC ; CheckCheatmode + Line 348: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 349: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 350: EXTRN ?ReadNetVars@FGameConfigFile@@QEAAXXZ:PROC ; FGameConfigFile::ReadNetVars + Line 351: EXTRN ?SprayDecal@@YAXPEAVAActor@@PEBDN@Z:PROC ; SprayDecal + Line 352: EXTRN ?P_ConversationCommand@@YAXHHPEAPEAE@Z:PROC ; P_ConversationCommand + Line 353: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 354: EXTRN ?CheckValue@FArgs@@QEBAPEBDPEBD@Z:PROC ; FArgs::CheckValue + Line 355: EXTRN ?P_ExecuteSpecial@@YAHHPEAUline_t@@PEAVAActor@@_NHHHHH@Z:PROC ; P_ExecuteSpecial + Line 356: EXTRN ?P_StartScript@@YAHPEAUFLevelLocals@@PEAVAActor@@PEAUline_t@@HPEBDPEBHHH@Z:PROC ; P_StartScript + Line 357: EXTRN ?I_SetFPSLimit@@YAXH@Z:PROC ; I_SetFPSLimit + Line 358: EXTRN ?F_AdvanceIntermission@@YAXXZ:PROC ; F_AdvanceIntermission + Line 359: EXTRN ?GetPortalOffsetPosition@FLevelLocals@@QEAA?AU?$TVector2@N@@NNNN@Z:PROC ; FLevelLocals::GetPortalOffsetPosition + Line 360: EXTRN ?Massacre@FLevelLocals@@QEAAH_NVFName@@@Z:PROC ; FLevelLocals::Massacre + Line 361: EXTRN ?ChangeLevel@FLevelLocals@@QEAAXPEBDHHH@Z:PROC ; FLevelLocals::ChangeLevel + Line 362: EXTRN ?E_Console@@YAXHVFString@@HHH_N@Z:PROC ; E_Console + Line 363: EXTRN ?I_SetFrameTime@@YAXXZ:PROC ; I_SetFrameTime + Line 364: EXTRN ?I_GetTime@@YAHXZ:PROC ; I_GetTime + Line 365: EXTRN ?I_WaitForTic@@YAHH@Z:PROC ; I_WaitForTic + Line 366: EXTRN ?I_msTime@@YA_KXZ:PROC ; I_msTime + Line 367: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 368: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 369: EXTRN ?D_ProcessEvents@@YAXXZ:PROC ; D_ProcessEvents + Line 370: EXTRN ?G_BuildTiccmd@@YAXPEAUticcmd_t@@@Z:PROC ; G_BuildTiccmd + Line 371: EXTRN ?D_DoAdvanceDemo@@YAXXZ:PROC ; D_DoAdvanceDemo + Line 372: EXTRN __CxxFrameHandler3:PROC + Line 373: EXTRN memcpy:PROC + Line 374: EXTRN memset:PROC + Line 375: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 376: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + Line 377: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 378: EXTRN ?AllocBytes@GC@@3_KA:QWORD ; GC::AllocBytes + Line 379: EXTRN ?Threshold@GC@@3_KA:QWORD ; GC::Threshold + Line 380: EXTRN ?startmap@@3VFString@@A:QWORD ; startmap + Line 381: EXTRN ?autostart@@3_NA:BYTE ; autostart + Line 382: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 383: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 384: EXTRN ?paused@@3HA:DWORD ; paused + Line 385: EXTRN ?pauseext@@3_NA:BYTE ; pauseext + Line 386: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 387: EXTRN ?usergame@@3_NA:BYTE ; usergame + Line 388: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 389: EXTRN ?demorecording@@3_NA:BYTE ; demorecording + Line 390: EXTRN ?gametic@@3HA:DWORD ; gametic + Line 391: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 392: EXTRN ?debugfile@@3PEAU_iobuf@@EA:QWORD ; debugfile + Line 393: EXTRN ?singletics@@3_NA:BYTE ; singletics + Line 394: EXTRN ?Net_Arbitrator@@3HA:DWORD ; Net_Arbitrator + Line 395: EXTRN ?rngseed@@3IA:DWORD ; rngseed + Line 396: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 397: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 398: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 399: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 400: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 401: EXTRN ?GameConfig@@3PEAVFGameConfigFile@@EA:QWORD ; GameConfig + Line 402: EXTRN ?StartScreen@@3PEAVFStartupScreen@@EA:QWORD ; StartScreen + Line 403: EXTRN ?gameaction@@3W4gameaction_t@@A:DWORD ; gameaction + Line 404: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 405: EXTRN ?r_NoInterpolate@@3_NA:BYTE ; r_NoInterpolate + Line 406: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 407: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 408: EXTRN ?disableautosave@@3VFIntCVar@@A:BYTE ; disableautosave + Line 409: EXTRN ?autosavecount@@3VFIntCVar@@A:BYTE ; autosavecount + Line 410: EXTRN ?savedescription@@3VFString@@A:QWORD ; savedescription + Line 411: EXTRN ?savegamefile@@3VFString@@A:QWORD ; savegamefile + Line 412: EXTRN ?consistancy@@3PAY0CE@FA:BYTE ; consistancy + Line 413: EXTRN ?advancedemo@@3_NA:BYTE ; advancedemo + Line 414: EXTRN __ImageBase:BYTE + Line 415: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\d_netinfo.cod (90 hits) + Line 36: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 244: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 245: EXTRN atexit:PROC + Line 246: EXTRN __std_terminate:PROC + Line 247: EXTRN qsort:PROC + Line 248: EXTRN atoi:PROC + Line 249: EXTRN __stdio_common_vsprintf:PROC + Line 250: EXTRN strchr:PROC + Line 251: EXTRN stricmp:PROC + Line 252: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 253: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 254: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 255: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 256: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 257: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 258: EXTRN ?LockBuffer@FString@@QEAAPEADXZ:PROC ; FString::LockBuffer + Line 259: EXTRN ?UnlockBuffer@FString@@QEAAXXZ:PROC ; FString::UnlockBuffer + Line 260: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 261: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 262: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 263: EXTRN ?ToLower@FString@@QEAAXXZ:PROC ; FString::ToLower + Line 264: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 265: EXTRN mysnprintf:PROC + Line 266: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 267: EXTRN ?ForceSet@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@_N@Z:PROC ; FBaseCVar::ForceSet + Line 268: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 269: EXTRN ?FindCVar@@YAPEAVFBaseCVar@@PEBDPEAPEAV1@@Z:PROC ; FindCVar + Line 270: EXTRN ?C_CreateCVar@@YAPEAVFBaseCVar@@PEBDW4ECVarType@@I@Z:PROC ; C_CreateCVar + Line 271: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 272: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 273: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 274: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 275: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 276: EXTRN ??0FColorCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FColorCVar::FColorCVar + Line 277: EXTRN ?ReadByte@@YAHPEAPEAE@Z:PROC ; ReadByte + Line 278: EXTRN ?ReadLong@@YAHPEAPEAE@Z:PROC ; ReadLong + Line 279: EXTRN ?ReadFloat@@YAMPEAPEAE@Z:PROC ; ReadFloat + Line 280: EXTRN ?ReadString@@YAPEADPEAPEAE@Z:PROC ; ReadString + Line 281: EXTRN ?WriteByte@@YAXEPEAPEAE@Z:PROC ; WriteByte + Line 282: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 283: EXTRN ?Net_WriteLong@@YAXH@Z:PROC ; Net_WriteLong + Line 284: EXTRN ?Net_WriteFloat@@YAXM@Z:PROC ; Net_WriteFloat + Line 285: EXTRN ?Net_WriteString@@YAXPEBD@Z:PROC ; Net_WriteString + Line 286: EXTRN ?Net_WriteBytes@@YAXPEBEH@Z:PROC ; Net_WriteBytes + Line 287: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 288: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 289: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 290: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 291: EXTRN ?RGBtoHSV@@YAXMMMPEAM00@Z:PROC ; RGBtoHSV + Line 292: EXTRN ?HSVtoRGB@@YAXPEAM00MMM@Z:PROC ; HSVtoRGB + Line 293: EXTRN ?R_BuildPlayerTranslation@@YAXH@Z:PROC ; R_BuildPlayerTranslation + Line 294: EXTRN ?PrintMiscActorInfo@@YAXPEAVAActor@@@Z:PROC ; PrintMiscActorInfo + Line 295: EXTRN ?GetColorSet@@YAPEAUFPlayerColorSet@@PEAVPClassActor@@H@Z:PROC ; GetColorSet + Line 296: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 297: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 298: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 299: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 300: EXTRN ?R_FindSkin@@YAHPEBDH@Z:PROC ; R_FindSkin + Line 301: EXTRN ?GetPlayer@DBaseStatusBar@@QEAAHXZ:PROC ; DBaseStatusBar::GetPlayer + Line 302: EXTRN ?AttachToPlayer@DBaseStatusBar@@QEAAXPEAVplayer_t@@@Z:PROC ; DBaseStatusBar::AttachToPlayer + Line 303: EXTRN ?IsValidTeam@FTeam@@QEAA_NI@Z:PROC ; FTeam::IsValidTeam + Line 304: EXTRN ?GetName@FTeam@@QEBAPEBDXZ:PROC ; FTeam::GetName + Line 305: EXTRN ?GetPlayerColor@FTeam@@QEBAHXZ:PROC ; FTeam::GetPlayerColor + Line 306: EXTRN ?GetAllowCustomPlayerColor@FTeam@@QEBA_NXZ:PROC ; FTeam::GetAllowCustomPlayerColor + Line 307: EXTRN ?CleanseString@@YAPEADPEAD@Z:PROC ; CleanseString + Line 308: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 309: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 310: EXTRN ?GetKey@FSerializer@@QEAAPEBDXZ:PROC ; FSerializer::GetKey + Line 311: EXTRN ?StringPtr@FSerializer@@QEAAAEAV1@PEBDAEAPEBD@Z:PROC ; FSerializer::StringPtr + Line 312: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 313: EXTRN __CxxFrameHandler3:PROC + Line 314: EXTRN memcpy:PROC + Line 315: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 316: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 317: EXTRN ?CVars@@3PEAVFBaseCVar@@EA:QWORD ; CVars + Line 318: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 319: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 320: EXTRN ?alwaysapplydmflags@@3VFBoolCVar@@A:BYTE ; alwaysapplydmflags + Line 321: EXTRN ?teamplay@@3VFBoolCVar@@A:BYTE ; teamplay + Line 322: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 323: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 324: EXTRN ?dmflags2@@3VFIntCVar@@A:BYTE ; dmflags2 + Line 325: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 326: EXTRN ?PlayerClasses@@3V?$TArray@VFPlayerClass@@V1@@@A:BYTE ; PlayerClasses + Line 327: EXTRN ?Skins@@3V?$TArray@VFPlayerSkin@@V1@@@A:BYTE ; Skins + Line 328: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 329: EXTRN ?TeamLibrary@@3VFTeam@@A:BYTE ; TeamLibrary + Line 330: EXTRN ?Teams@@3V?$TArray@VFTeam@@V1@@@A:BYTE ; Teams + Line 331: EXTRN __ImageBase:BYTE + Line 332: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\d_protocol.cod (15 hits) + Line 43: EXTRN ?SetData@FDynamicBuffer@@QEAAXPEBEH@Z:PROC ; FDynamicBuffer::SetData + Line 44: EXTRN ?GetData@FDynamicBuffer@@QEAAPEAEPEAH@Z:PROC ; FDynamicBuffer::GetData + Line 45: EXTRN ?Net_DoCommand@@YAXHPEAPEAEH@Z:PROC ; Net_DoCommand + Line 46: EXTRN ?Net_SkipCommand@@YAXHPEAPEAE@Z:PROC ; Net_SkipCommand + Line 47: EXTRN ?copystring@@YAPEADPEBD@Z:PROC ; copystring + Line 48: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 49: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 50: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 51: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAFPEAF@Z:PROC ; Serialize + Line 52: EXTRN ?NetSpecs@@3PAY0CE@VFDynamicBuffer@@A:BYTE ; NetSpecs + Line 53: EXTRN ?netcmds@@3PAY0CE@Uticcmd_t@@A:BYTE ; netcmds + Line 54: EXTRN ?ticdup@@3HA:DWORD ; ticdup + Line 55: EXTRN ?demorecording@@3_NA:BYTE ; demorecording + Line 56: EXTRN ?gametic@@3HA:DWORD ; gametic + Line 57: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\dbopl.cod (19 hits) + Line 84: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 85: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 86: EXTRN atexit:PROC + Line 87: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 88: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 89: EXTRN __imp_InitializeCriticalSection:PROC + Line 90: EXTRN __imp_EnterCriticalSection:PROC + Line 91: EXTRN __imp_LeaveCriticalSection:PROC + Line 92: EXTRN __imp_DeleteCriticalSection:PROC + Line 93: EXTRN _CxxThrowException:PROC + Line 94: EXTRN __CxxFrameHandler3:PROC + Line 95: EXTRN __chkstk:PROC + Line 96: EXTRN memmove:PROC + Line 97: EXTRN memset:PROC + Line 98: EXTRN pow:PROC + Line 99: EXTRN sin:PROC + Line 100: EXTRN __ImageBase:BYTE + Line 101: EXTRN __isa_available:DWORD + Line 102: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\ddstexture.cod (17 hits) + Line 26: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 27: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 28: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 29: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 30: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 31: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 32: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 33: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 34: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 35: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 36: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 37: EXTRN ??_EFDDSTexture@@UEAAPEAXI@Z:PROC ; FDDSTexture::`vector deleting destructor' + Line 38: EXTRN __CxxFrameHandler3:PROC + Line 39: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 40: EXTRN ?RGB256k@@3TColorTable256k@@A:BYTE ; RGB256k + Line 41: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 42: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\decallib.cod (89 hits) + Line 47: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 356: EXTRN _purecall:PROC + Line 357: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 358: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 359: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 360: EXTRN atexit:PROC + Line 361: EXTRN __std_terminate:PROC + Line 362: EXTRN strtoul:PROC + Line 363: EXTRN stricmp:PROC + Line 364: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 365: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 366: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 367: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 368: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 369: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 370: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 371: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 372: EXTRN ??_EFDecalBase@@MEAAPEAXI@Z:PROC ; FDecalBase::`vector deleting destructor' + Line 373: EXTRN ??_EFDecalTemplate@@UEAAPEAXI@Z:PROC ; FDecalTemplate::`vector deleting destructor' + Line 374: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 375: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 376: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 377: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 378: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 379: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 380: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 381: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 382: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 383: EXTRN ?MustMatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MustMatchString + Line 384: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 385: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 386: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 387: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 388: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 389: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 390: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 391: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 392: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 393: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 394: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 395: EXTRN ?CreateTexture@FTextureManager@@QEAA?AVFTextureID@@HW4ETextureType@@@Z:PROC ; FTextureManager::CreateTexture + Line 396: EXTRN ?V_GetColor@@YAHPEBIAEAVFScanner@@@Z:PROC ; V_GetColor + Line 397: EXTRN ?IsNum@@YA_NPEBD@Z:PROC ; IsNum + Line 398: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 399: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 400: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 401: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 402: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 403: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 404: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 405: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 406: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 407: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 408: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 409: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 410: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 411: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 412: EXTRN ?SetShade@DBaseDecal@@QEAAXI@Z:PROC ; DBaseDecal::SetShade + Line 413: EXTRN ?SetShade@DBaseDecal@@QEAAXHHH@Z:PROC ; DBaseDecal::SetShade + Line 414: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 415: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 416: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 417: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 418: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 419: EXTRN ??_EFDecalGroup@@UEAAPEAXI@Z:PROC ; FDecalGroup::`vector deleting destructor' + Line 420: EXTRN ??_EFDecalAnimator@@UEAAPEAXI@Z:PROC ; FDecalAnimator::`vector deleting destructor' + Line 421: EXTRN ??_EDDecalThinker@@UEAAPEAXI@Z:PROC ; DDecalThinker::`vector deleting destructor' + Line 422: EXTRN ??_EFDecalFaderAnim@@UEAAPEAXI@Z:PROC ; FDecalFaderAnim::`vector deleting destructor' + Line 423: EXTRN ??_EDDecalFader@@UEAAPEAXI@Z:PROC ; DDecalFader::`vector deleting destructor' + Line 424: EXTRN ??_EFDecalColorerAnim@@UEAAPEAXI@Z:PROC ; FDecalColorerAnim::`vector deleting destructor' + Line 425: EXTRN ??_EDDecalColorer@@UEAAPEAXI@Z:PROC ; DDecalColorer::`vector deleting destructor' + Line 426: EXTRN ??_EFDecalStretcherAnim@@UEAAPEAXI@Z:PROC ; FDecalStretcherAnim::`vector deleting destructor' + Line 427: EXTRN ??_EDDecalStretcher@@UEAAPEAXI@Z:PROC ; DDecalStretcher::`vector deleting destructor' + Line 428: EXTRN ??_EFDecalSliderAnim@@UEAAPEAXI@Z:PROC ; FDecalSliderAnim::`vector deleting destructor' + Line 429: EXTRN ??_EDDecalSlider@@UEAAPEAXI@Z:PROC ; DDecalSlider::`vector deleting destructor' + Line 430: EXTRN ??_EFDecalCombinerAnim@@UEAAPEAXI@Z:PROC ; FDecalCombinerAnim::`vector deleting destructor' + Line 431: EXTRN __CxxFrameHandler3:PROC + Line 432: EXTRN memset:PROC + Line 433: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 434: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 435: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 436: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 437: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 438: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 439: EXTRN ?AllActorClasses@PClassActor@@2V?$TArray@PEAVPClassActor@@PEAV1@@@A:BYTE ; PClassActor::AllActorClasses + Line 440: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 441: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 442: EXTRN __ImageBase:BYTE + Line 443: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\dobject.cod (41 hits) + Line 163: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 164: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 165: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 166: EXTRN atexit:PROC + Line 167: EXTRN __std_terminate:PROC + Line 168: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 169: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 170: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 171: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 172: EXTRN ?Mark@GC@@YAXPEAPEAVDObject@@@Z:PROC ; GC::Mark + Line 173: EXTRN ??_EDObject@@UEAAPEAXI@Z:PROC ; DObject::`vector deleting destructor' + Line 174: EXTRN ?WriteAllFields@PClass@@QEBAXAEAVFSerializer@@PEBX@Z:PROC ; PClass::WriteAllFields + Line 175: EXTRN ?ReadAllFields@PClass@@QEBA_NAEAVFSerializer@@PEAX@Z:PROC ; PClass::ReadAllFields + Line 176: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 177: EXTRN ?BuildFlatPointers@PClass@@QEAAXXZ:PROC ; PClass::BuildFlatPointers + Line 178: EXTRN ?BuildArrayPointers@PClass@@QEAAXXZ:PROC ; PClass::BuildArrayPointers + Line 179: EXTRN ?DestroySpecials@PClass@@QEAAXPEAX@Z:PROC ; PClass::DestroySpecials + Line 180: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 181: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 182: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 183: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 184: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 185: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 186: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 187: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 188: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 189: EXTRN ?I_msTime@@YA_KXZ:PROC ; I_msTime + Line 190: EXTRN __CxxFrameHandler3:PROC + Line 191: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 192: EXTRN ?Gray@GC@@3PEAVDObject@@EA:QWORD ; GC::Gray + Line 193: EXTRN ?Root@GC@@3PEAVDObject@@EA:QWORD ; GC::Root + Line 194: EXTRN ?CurrentWhite@GC@@3IA:DWORD ; GC::CurrentWhite + Line 195: EXTRN ?SweepPos@GC@@3PEAPEAVDObject@@EA:QWORD ; GC::SweepPos + Line 196: EXTRN ?RegistrationInfo@PField@@2UClassReg@@A:BYTE ; PField::RegistrationInfo + Line 197: EXTRN ?AllClasses@PClass@@2V?$TArray@PEAVPClass@@PEAV1@@@A:BYTE ; PClass::AllClasses + Line 198: EXTRN ?bShutdown@PClass@@2_NA:BYTE ; PClass::bShutdown + Line 199: EXTRN ?bVMOperational@PClass@@2_NA:BYTE ; PClass::bVMOperational + Line 200: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 201: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 202: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 203: EXTRN ?save_full@@3_NA:BYTE ; save_full + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\dobjgc.cod (33 hits) + Line 26: EXTRN ??_EStat_gc@@UEAAPEAXI@Z:PROC ; Stat_gc::`vector deleting destructor' + Line 98: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 99: EXTRN atexit:PROC + Line 100: EXTRN atoi:PROC + Line 101: EXTRN stricmp:PROC + Line 102: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 103: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 104: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 105: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 106: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 107: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 108: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 109: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 110: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 111: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 112: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 113: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 114: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 115: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 116: EXTRN ?PropagateMark@player_t@@QEAA_KXZ:PROC ; player_t::PropagateMark + Line 117: EXTRN ?M_MarkMenus@@YAXXZ:PROC ; M_MarkMenus + Line 118: EXTRN ?Mark@FLevelLocals@@QEAAXXZ:PROC ; FLevelLocals::Mark + Line 119: EXTRN __CxxFrameHandler3:PROC + Line 120: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 121: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 122: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 123: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 124: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 125: EXTRN ?CurrentIntermission@DIntermissionController@@2PEAV1@EA:QWORD ; DIntermissionController::CurrentIntermission + Line 126: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 127: EXTRN ?E_FirstEventHandler@@3PEAVDStaticEventHandler@@EA:QWORD ; E_FirstEventHandler + Line 128: EXTRN ?E_LastEventHandler@@3PEAVDStaticEventHandler@@EA:QWORD ; E_LastEventHandler + Line 129: EXTRN ?NextToThink@@3PEAVDThinker@@EA:QWORD ; NextToThink + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\dobjtype.cod (53 hits) + Line 95: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 96: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 97: EXTRN atexit:PROC + Line 98: EXTRN __std_terminate:PROC + Line 99: EXTRN qsort:PROC + Line 100: EXTRN strncmp:PROC + Line 101: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 102: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 103: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 104: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 105: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 106: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 107: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 108: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 109: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 110: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 111: EXTRN ?FullGC@GC@@YAXXZ:PROC ; GC::FullGC + Line 112: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 113: EXTRN ?Release@DObject@@QEAAXXZ:PROC ; DObject::Release + Line 114: EXTRN ??0FMemArena@@QEAA@_K@Z:PROC ; FMemArena::FMemArena + Line 115: EXTRN ??1FMemArena@@QEAA@XZ:PROC ; FMemArena::~FMemArena + Line 116: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 117: EXTRN ?FreeAllBlocks@FMemArena@@QEAAXXZ:PROC ; FMemArena::FreeAllBlocks + Line 118: EXTRN ?FindSymbol@PSymbolTable@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PSymbolTable::FindSymbol + Line 119: EXTRN ?AddField@PSymbolTable@@QEAAPEAVPField@@VFName@@PEAVPType@@IAEAIPEAI@Z:PROC ; PSymbolTable::AddField + Line 120: EXTRN ?ReadFields@PSymbolTable@@QEBA_NAEAVFSerializer@@PEAXPEBD@Z:PROC ; PSymbolTable::ReadFields + Line 121: EXTRN ?WriteFields@PSymbolTable@@QEBAXAEAVFSerializer@@PEBX1@Z:PROC ; PSymbolTable::WriteFields + Line 122: EXTRN ?NewNamespace@FNamespaceManager@@QEAAPEAVPNamespace@@H@Z:PROC ; FNamespaceManager::NewNamespace + Line 123: EXTRN ?ReleaseSymbols@FNamespaceManager@@QEAAXXZ:PROC ; FNamespaceManager::ReleaseSymbols + Line 124: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 125: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 126: EXTRN ?GetKey@FSerializer@@QEAAPEBDXZ:PROC ; FSerializer::GetKey + Line 127: EXTRN ?JitRelease@@YAXXZ:PROC ; JitRelease + Line 128: EXTRN ?NewClassType@@YAPEAVPClassType@@PEAVPClass@@@Z:PROC ; NewClassType + Line 129: EXTRN ?Clear@FTypeTable@@QEAAXXZ:PROC ; FTypeTable::Clear + Line 130: EXTRN ?Clear@ScriptUtil@@SAXXZ:PROC ; ScriptUtil::Clear + Line 131: EXTRN __CxxFrameHandler3:PROC + Line 132: EXTRN memcpy:PROC + Line 133: EXTRN memset:PROC + Line 134: EXTRN strcmp:PROC + Line 135: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 136: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 137: EXTRN ?Root@GC@@3PEAVDObject@@EA:QWORD ; GC::Root + Line 138: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 139: EXTRN ?RegistrationInfo@PFunction@@2UClassReg@@A:BYTE ; PFunction::RegistrationInfo + Line 140: EXTRN ?Namespaces@@3UFNamespaceManager@@A:BYTE ; Namespaces + Line 141: EXTRN ?AllActorClasses@PClassActor@@2V?$TArray@PEAVPClassActor@@PEAV1@@@A:BYTE ; PClassActor::AllActorClasses + Line 142: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 143: EXTRN ?CRegHead@@3QEAXEA:QWORD ; CRegHead + Line 144: EXTRN ?CRegTail@@3QEAXEA:QWORD ; CRegTail + Line 145: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 146: EXTRN ?AllFunctions@VMFunction@@2V?$TArray@PEAVVMFunction@@PEAV1@@@A:BYTE ; VMFunction::AllFunctions + Line 147: EXTRN ?TypeTable@@3UFTypeTable@@A:BYTE ; TypeTable + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\doomstat.cod (18 hits) + Line 20: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 21: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 68: EXTRN atexit:PROC + Line 69: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 70: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 71: EXTRN ??0FStringTable@@QEAA@XZ:PROC ; FStringTable::FStringTable + Line 72: EXTRN ??1FStringTable@@QEAA@XZ:PROC ; FStringTable::~FStringTable + Line 73: EXTRN ?LoadStrings@FStringTable@@QEAAX_N@Z:PROC ; FStringTable::LoadStrings + Line 74: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 75: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 76: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 77: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 78: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 79: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 80: EXTRN ?SetLanguageIDs@@YAXXZ:PROC ; SetLanguageIDs + Line 81: EXTRN ?LookupLevelName@level_info_t@@QEAA?AVFString@@XZ:PROC ; level_info_t::LookupLevelName + Line 82: EXTRN __CxxFrameHandler3:PROC + Line 83: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\dosbox_opl3.cod (13 hits) + Line 48: EXTRN _purecall:PROC + Line 49: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 50: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 51: EXTRN ??_EOPLChipBase@@UEAAPEAXI@Z:PROC ; OPLChipBase::`vector deleting destructor' + Line 52: EXTRN ??_E?$OPLChipBaseT@VDosBoxOPL3@@@@UEAAPEAXI@Z:PROC ; OPLChipBaseT::`vector deleting destructor' + Line 53: EXTRN ??_E?$OPLChipBaseBufferedT@VDosBoxOPL3@@$0BAA@@@UEAAPEAXI@Z:PROC ; OPLChipBaseBufferedT::`vector deleting destructor' + Line 54: EXTRN ??_EDosBoxOPL3@@UEAAPEAXI@Z:PROC ; DosBoxOPL3::`vector deleting destructor' + Line 55: EXTRN ??0Chip@DBOPL@@QEAA@XZ:PROC ; DBOPL::Chip::Chip + Line 56: EXTRN ?WritePan@Handler@DBOPL@@QEAAXIE@Z:PROC ; DBOPL::Handler::WritePan + Line 57: EXTRN ?WriteReg@Handler@DBOPL@@QEAAXIE@Z:PROC ; DBOPL::Handler::WriteReg + Line 58: EXTRN ?GenerateArr@Handler@DBOPL@@QEAAXPEAFPEA_K@Z:PROC ; DBOPL::Handler::GenerateArr + Line 59: EXTRN ?Init@Handler@DBOPL@@QEAAX_K@Z:PROC ; DBOPL::Handler::Init + Line 60: EXTRN __CxxFrameHandler3:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\dsectoreffect.cod (29 hits) + Line 35: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 186: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 187: EXTRN __std_terminate:PROC + Line 188: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 189: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 190: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 191: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 192: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 193: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 194: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 195: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 196: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 197: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 198: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 199: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 200: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 201: EXTRN ?SetInterpolation@sector_t@@QEAAPEAVDInterpolation@@H_N@Z:PROC ; sector_t::SetInterpolation + Line 202: EXTRN ?CheckOverlap@sector_t@@QEAAXXZ:PROC ; sector_t::CheckOverlap + Line 203: EXTRN ?AdjustFloorClip@@YAXPEBUsector_t@@@Z:PROC ; AdjustFloorClip + Line 204: EXTRN ??_EDSectorEffect@@UEAAPEAXI@Z:PROC ; DSectorEffect::`vector deleting destructor' + Line 205: EXTRN ?P_ChangeSector@@YA_NPEAUsector_t@@HNH_N1@Z:PROC ; P_ChangeSector + Line 206: EXTRN ?DelRef@DInterpolation@@QEAAH_N@Z:PROC ; DInterpolation::DelRef + Line 207: EXTRN ?P_Scroll3dMidtex@@YA_NPEAUsector_t@@HN_N1@Z:PROC ; P_Scroll3dMidtex + Line 208: EXTRN ?P_MoveLinkedSectors@@YA_NPEAUsector_t@@HN_N1@Z:PROC ; P_MoveLinkedSectors + Line 209: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 210: EXTRN ??$Serialize@Usector_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUsector_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 211: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 212: EXTRN __CxxFrameHandler3:PROC + Line 213: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\dthinker.cod (57 hits) + Line 28: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 29: EXTRN ??_EStat_think@@UEAAPEAXI@Z:PROC ; Stat_think::`vector deleting destructor' + Line 163: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 164: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 165: EXTRN atexit:PROC + Line 166: EXTRN __std_terminate:PROC + Line 167: EXTRN atoi:PROC + Line 168: EXTRN stricmp:PROC + Line 169: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 170: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 171: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 172: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 173: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 174: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 175: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 176: EXTRN ?Step@GC@@YAXXZ:PROC ; GC::Step + Line 177: EXTRN ?FullGC@GC@@YAXXZ:PROC ; GC::FullGC + Line 178: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 179: EXTRN ?Mark@GC@@YAXPEAPEAVDObject@@@Z:PROC ; GC::Mark + Line 180: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 181: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 182: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 183: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 184: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 185: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 186: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 187: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 188: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 189: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 190: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 191: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 192: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 193: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 194: EXTRN ??$Serialize@UFLevelLocals@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUFLevelLocals@@PEAPEAU1@@Z:PROC ; Serialize + Line 195: EXTRN ?MaybePrintMessage@CVMAbortException@@QEAAXXZ:PROC ; CVMAbortException::MaybePrintMessage + Line 196: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 197: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 198: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 199: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 200: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 201: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 202: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 203: EXTRN ?Tick@FDynamicLight@@QEAAXXZ:PROC ; FDynamicLight::Tick + Line 204: EXTRN __CxxFrameHandler3:PROC + Line 205: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 206: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 207: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 208: EXTRN ?AllocBytes@GC@@3_KA:QWORD ; GC::AllocBytes + Line 209: EXTRN ?Threshold@GC@@3_KA:QWORD ; GC::Threshold + Line 210: EXTRN ?State@GC@@3W4EGCState@1@A:DWORD ; GC::State + Line 211: EXTRN ?PerfToMillisec@@3NA:QWORD ; PerfToMillisec + Line 212: EXTRN ?BotSupportCycles@@3Vcycle_t@@A:QWORD ; BotSupportCycles + Line 213: EXTRN ?stacktrace@CVMAbortException@@2VFString@@A:QWORD ; CVMAbortException::stacktrace + Line 214: EXTRN ?ActionCycles@@3Vcycle_t@@A:QWORD ; ActionCycles + Line 215: EXTRN ?BotWTG@@3HA:DWORD ; BotWTG + Line 216: EXTRN __ImageBase:BYTE + Line 217: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\dynarrays.cod (14 hits) + Line 255: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 770: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 771: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 772: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 773: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 774: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 775: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 776: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 777: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 778: EXTRN __CxxFrameHandler3:PROC + Line 779: EXTRN memmove:PROC + Line 780: EXTRN memset:PROC + Line 781: EXTRN ?State@GC@@3W4EGCState@1@A:DWORD ; GC::State + Line 782: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\edata.cod (40 hits) + Line 119: EXTRN __std_terminate:PROC + Line 120: EXTRN strchr:PROC + Line 121: EXTRN strtok:PROC + Line 122: EXTRN stricmp:PROC + Line 123: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 124: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 125: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 126: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 127: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 128: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 129: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 130: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 131: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 132: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 133: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 134: EXTRN ?OpenLumpNum@FScanner@@QEAAXH@Z:PROC ; FScanner::OpenLumpNum + Line 135: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 136: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 137: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 138: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 139: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 140: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 141: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 142: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 143: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 144: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 145: EXTRN ?R_ColormapNumForName@@YAIPEBD@Z:PROC ; R_ColormapNumForName + Line 146: EXTRN ?R_BlendForColormap@@YAII@Z:PROC ; R_BlendForColormap + Line 147: EXTRN ?SetColor@@YAXPEAUsector_t@@HH@Z:PROC ; SetColor + Line 148: EXTRN ?P_FindLineSpecial@@YAHPEBDPEAH1@Z:PROC ; P_FindLineSpecial + Line 149: EXTRN ?AddLineID@FTagManager@@QEAAXHH@Z:PROC ; FTagManager::AddLineID + Line 150: EXTRN ?P_FindTerrain@@YAHVFName@@@Z:PROC ; P_FindTerrain + Line 151: EXTRN ?LoadModule@FBehaviorContainer@@QEAAPEAVFBehavior@@HPEAVFileReader@@H@Z:PROC ; FBehaviorContainer::LoadModule + Line 152: EXTRN ?TranslateLineDef@FLevelLocals@@QEAAXPEAUline_t@@PEAUmaplinedef_t@@H@Z:PROC ; FLevelLocals::TranslateLineDef + Line 153: EXTRN __CxxFrameHandler3:PROC + Line 154: EXTRN memset:PROC + Line 155: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 156: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 157: EXTRN ?DoomEdMap@@3V?$TMap@HUFDoomEdEntry@@U?$THashTraits@H@@U?$TValueTraits@UFDoomEdEntry@@@@@@A:BYTE ; DoomEdMap + Line 158: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\effect.cod (14 hits) + Line 13: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 14: EXTRN ?set_dry_signal@Reverb@TimidityPlus@@QEAAXPEAHH@Z:PROC ; TimidityPlus::Reverb::set_dry_signal + Line 15: EXTRN ?mix_dry_signal@Reverb@TimidityPlus@@QEAAXPEAHH@Z:PROC ; TimidityPlus::Reverb::mix_dry_signal + Line 16: EXTRN ?init_pink_noise@Reverb@TimidityPlus@@QEAAXPEAUpink_noise@2@@Z:PROC ; TimidityPlus::Reverb::init_pink_noise + Line 17: EXTRN ?do_ch_reverb@Reverb@TimidityPlus@@QEAAXPEAHH@Z:PROC ; TimidityPlus::Reverb::do_ch_reverb + Line 18: EXTRN ?set_ch_reverb@Reverb@TimidityPlus@@QEAAXPEAHHH@Z:PROC ; TimidityPlus::Reverb::set_ch_reverb + Line 19: EXTRN ?init_reverb@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::init_reverb + Line 20: EXTRN ?init_ch_chorus@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::init_ch_chorus + Line 21: EXTRN ?init_ch_delay@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::init_ch_delay + Line 22: EXTRN ?init_eq_gs@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::init_eq_gs + Line 23: EXTRN memset:PROC + Line 24: EXTRN ?timidity_reverb@TimidityPlus@@3HA:DWORD ; TimidityPlus::timidity_reverb + Line 25: EXTRN ?timidity_chorus@TimidityPlus@@3HA:DWORD ; TimidityPlus::timidity_chorus + Line 26: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\emptytexture.cod (12 hits) + Line 19: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 20: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 21: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 22: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 23: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 24: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 25: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 26: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 27: EXTRN ??_EFEmptyTexture@@UEAAPEAXI@Z:PROC ; FEmptyTexture::`vector deleting destructor' + Line 28: EXTRN __CxxFrameHandler3:PROC + Line 29: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 30: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\events.cod (53 hits) + Line 138: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 884: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 885: EXTRN atexit:PROC + Line 886: EXTRN __std_terminate:PROC + Line 887: EXTRN atoi:PROC + Line 888: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 889: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 890: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 891: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 892: EXTRN ??0FString@@QEAA@D@Z:PROC ; FString::FString + Line 893: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 894: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 895: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 896: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 897: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 898: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 899: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 900: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 901: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 902: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 903: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 904: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 905: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 906: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 907: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 908: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 909: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 910: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 911: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 912: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 913: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 914: EXTRN ??_EDStaticEventHandler@@UEAAPEAXI@Z:PROC ; DStaticEventHandler::`vector deleting destructor' + Line 915: EXTRN ??_EDEventHandler@@UEAAPEAXI@Z:PROC ; DEventHandler::`vector deleting destructor' + Line 916: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 917: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 918: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 919: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 920: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 921: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 922: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 923: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 924: EXTRN ?Net_WriteLong@@YAXH@Z:PROC ; Net_WriteLong + Line 925: EXTRN ?Net_WriteString@@YAXPEBD@Z:PROC ; Net_WriteString + Line 926: EXTRN __CxxFrameHandler3:PROC + Line 927: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 928: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 929: EXTRN ?State@GC@@3W4EGCState@1@A:DWORD ; GC::State + Line 930: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 931: EXTRN ?savegamerestore@@3_NA:BYTE ; savegamerestore + Line 932: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 933: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 934: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 935: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\exp.cod (9 hits) + Line 11: EXTRN mtherr:PROC + Line 12: EXTRN polevl:PROC + Line 13: EXTRN ldexp:PROC + Line 14: EXTRN floor:PROC + Line 15: EXTRN LOG2E:QWORD + Line 16: EXTRN MAXLOG:QWORD + Line 17: EXTRN MINLOG:QWORD + Line 18: EXTRN MAXNUM:QWORD + Line 19: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\f_wipe.cod (27 hits) + Line 38: EXTRN _purecall:PROC + Line 39: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 40: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 41: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 42: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 43: EXTRN __std_terminate:PROC + Line 44: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 45: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 46: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 47: EXTRN ??1FTexture@@UEAA@XZ:PROC ; FTexture::~FTexture + Line 48: EXTRN ?Get8BitPixels@FTexture@@UEAA?AV?$TArray@EE@@_N@Z:PROC ; FTexture::Get8BitPixels + Line 49: EXTRN ??0FTexture@@IEAA@PEBDH@Z:PROC ; FTexture::FTexture + Line 50: EXTRN ?DrawTexture@DFrameBuffer@@QEAAXPEAVFTexture@@NNHZZ:PROC ; DFrameBuffer::DrawTexture + Line 51: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 52: EXTRN ??_EWiper@@UEAAPEAXI@Z:PROC ; Wiper::`vector deleting destructor' + Line 53: EXTRN ?CopyPixelDataRGB@FBitmap@@QEAAXHHPEBEHHHHHHPEAUFCopyInfo@@HHH@Z:PROC ; FBitmap::CopyPixelDataRGB + Line 54: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@PEAVFTexture@@_N1@Z:PROC ; FMaterial::ValidateTexture + Line 55: EXTRN ??_EFBurnTexture@@UEAAPEAXI@Z:PROC ; FBurnTexture::`vector deleting destructor' + Line 56: EXTRN ??_EWiper_Crossfade@@UEAAPEAXI@Z:PROC ; Wiper_Crossfade::`vector deleting destructor' + Line 57: EXTRN ??_EWiper_Melt@@UEAAPEAXI@Z:PROC ; Wiper_Melt::`vector deleting destructor' + Line 58: EXTRN ??_EWiper_Burn@@UEAAPEAXI@Z:PROC ; Wiper_Burn::`vector deleting destructor' + Line 59: EXTRN __CxxFrameHandler3:PROC + Line 60: EXTRN memmove:PROC + Line 61: EXTRN memset:PROC + Line 62: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 63: EXTRN ?M_Random@@3VFRandom@@A:BYTE ; M_Random + Line 64: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\fastsin.cod (2 hits) + Line 15: EXTRN c_sin:PROC + Line 16: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\fft4g.cod (4 hits) + Line 30: EXTRN __libm_sse2_sincos_:PROC + Line 31: EXTRN __libm_sse2_sincosf_:PROC + Line 32: EXTRN cosf:PROC + Line 33: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\file_7z.cod (43 hits) + Line 36: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 37: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 38: EXTRN _purecall:PROC + Line 39: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 40: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 41: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 42: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 43: EXTRN ??_V@YAXPEAX_K@Z:PROC ; operator delete[] + Line 44: EXTRN __std_terminate:PROC + Line 45: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 46: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 47: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 48: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 49: EXTRN ?ToLower@FString@@QEAAXXZ:PROC ; FString::ToLower + Line 50: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 51: EXTRN LookToRead2_CreateVTable:PROC + Line 52: EXTRN SzArEx_Init:PROC + Line 53: EXTRN SzArEx_Free:PROC + Line 54: EXTRN SzArEx_GetFileNameUtf16:PROC + Line 55: EXTRN SzArEx_Extract:PROC + Line 56: EXTRN SzArEx_Open:PROC + Line 57: EXTRN CrcGenerateTable:PROC + Line 58: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 59: EXTRN ??1FResourceLump@@UEAA@XZ:PROC ; FResourceLump::~FResourceLump + Line 60: EXTRN ?GetReader@FResourceLump@@UEAAPEAVFileReader@@XZ:PROC ; FResourceLump::GetReader + Line 61: EXTRN ?NewReader@FResourceLump@@UEAA?AVFileReader@@XZ:PROC ; FResourceLump::NewReader + Line 62: EXTRN ?LumpNameSetup@FResourceLump@@QEAAXVFString@@@Z:PROC ; FResourceLump::LumpNameSetup + Line 63: EXTRN ?CheckEmbedded@FResourceLump@@QEAAXXZ:PROC ; FResourceLump::CheckEmbedded + Line 64: EXTRN ?GetRawData@FResourceLump@@UEAA?AUFCompressedBuffer@@XZ:PROC ; FResourceLump::GetRawData + Line 65: EXTRN ??_EFResourceLump@@UEAAPEAXI@Z:PROC ; FResourceLump::`vector deleting destructor' + Line 66: EXTRN ??0FResourceFile@@IEAA@PEBDAEAVFileReader@@@Z:PROC ; FResourceFile::FResourceFile + Line 67: EXTRN ?PostProcessArchive@FResourceFile@@IEAAXPEAX_K@Z:PROC ; FResourceFile::PostProcessArchive + Line 68: EXTRN ??1FResourceFile@@UEAA@XZ:PROC ; FResourceFile::~FResourceFile + Line 69: EXTRN ?FindStrifeTeaserVoices@FResourceFile@@UEAAXXZ:PROC ; FResourceFile::FindStrifeTeaserVoices + Line 70: EXTRN ?FixPathSeperator@@YAXPEAD@Z:PROC ; FixPathSeperator + Line 71: EXTRN ??_EF7ZFile@@UEAAPEAXI@Z:PROC ; F7ZFile::`vector deleting destructor' + Line 72: EXTRN __CxxFrameHandler3:PROC + Line 73: EXTRN memcpy:PROC + Line 74: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 75: EXTRN k7zSignature:BYTE + Line 76: EXTRN g_CrcTable:BYTE + Line 77: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + Line 78: EXTRN ?g_Alloc@@3UISzAlloc@@A:BYTE ; g_Alloc + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\file_directory.cod (42 hits) + Line 30: EXTRN _purecall:PROC + Line 31: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 32: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 33: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 34: EXTRN _errno:PROC + Line 35: EXTRN free:PROC + Line 36: EXTRN _fullpath:PROC + Line 37: EXTRN strstr:PROC + Line 38: EXTRN strerror:PROC + Line 39: EXTRN _findclose:PROC + Line 40: EXTRN _findfirst64i32:PROC + Line 41: EXTRN _findnext64i32:PROC + Line 42: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 43: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 44: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 45: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 46: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 47: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 48: EXTRN ??HFString@@QEBA?AV0@PEBD@Z:PROC ; FString::operator+ + Line 49: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 50: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 51: EXTRN ?ToLower@FString@@QEAAXXZ:PROC ; FString::ToLower + Line 52: EXTRN ?ReplaceChars@FString@@QEAAXDD@Z:PROC ; FString::ReplaceChars + Line 53: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 54: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 55: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 56: EXTRN ??1FResourceLump@@UEAA@XZ:PROC ; FResourceLump::~FResourceLump + Line 57: EXTRN ?GetReader@FResourceLump@@UEAAPEAVFileReader@@XZ:PROC ; FResourceLump::GetReader + Line 58: EXTRN ?NewReader@FResourceLump@@UEAA?AVFileReader@@XZ:PROC ; FResourceLump::NewReader + Line 59: EXTRN ?LumpNameSetup@FResourceLump@@QEAAXVFString@@@Z:PROC ; FResourceLump::LumpNameSetup + Line 60: EXTRN ?CheckEmbedded@FResourceLump@@QEAAXXZ:PROC ; FResourceLump::CheckEmbedded + Line 61: EXTRN ?GetRawData@FResourceLump@@UEAA?AUFCompressedBuffer@@XZ:PROC ; FResourceLump::GetRawData + Line 62: EXTRN ??_EFResourceLump@@UEAAPEAXI@Z:PROC ; FResourceLump::`vector deleting destructor' + Line 63: EXTRN ??0FResourceFile@@IEAA@PEBD@Z:PROC ; FResourceFile::FResourceFile + Line 64: EXTRN ?PostProcessArchive@FResourceFile@@IEAAXPEAX_K@Z:PROC ; FResourceFile::PostProcessArchive + Line 65: EXTRN ??1FResourceFile@@UEAA@XZ:PROC ; FResourceFile::~FResourceFile + Line 66: EXTRN ?FindStrifeTeaserVoices@FResourceFile@@UEAAXXZ:PROC ; FResourceFile::FindStrifeTeaserVoices + Line 67: EXTRN ??_EFDirectoryLump@@UEAAPEAXI@Z:PROC ; FDirectoryLump::`vector deleting destructor' + Line 68: EXTRN ??_EFDirectory@@UEAAPEAXI@Z:PROC ; FDirectory::`vector deleting destructor' + Line 69: EXTRN __CxxFrameHandler3:PROC + Line 70: EXTRN memset:PROC + Line 71: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\file_grp.cod (26 hits) + Line 24: EXTRN _purecall:PROC + Line 25: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 26: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 27: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 28: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 29: EXTRN __std_terminate:PROC + Line 30: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 31: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 32: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 33: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 34: EXTRN ??1FResourceLump@@UEAA@XZ:PROC ; FResourceLump::~FResourceLump + Line 35: EXTRN ?GetReader@FResourceLump@@UEAAPEAVFileReader@@XZ:PROC ; FResourceLump::GetReader + Line 36: EXTRN ?NewReader@FResourceLump@@UEAA?AVFileReader@@XZ:PROC ; FResourceLump::NewReader + Line 37: EXTRN ?LumpNameSetup@FResourceLump@@QEAAXVFString@@@Z:PROC ; FResourceLump::LumpNameSetup + Line 38: EXTRN ?GetRawData@FResourceLump@@UEAA?AUFCompressedBuffer@@XZ:PROC ; FResourceLump::GetRawData + Line 39: EXTRN ??_EFResourceLump@@UEAAPEAXI@Z:PROC ; FResourceLump::`vector deleting destructor' + Line 40: EXTRN ??1FResourceFile@@UEAA@XZ:PROC ; FResourceFile::~FResourceFile + Line 41: EXTRN ?FindStrifeTeaserVoices@FResourceFile@@UEAAXXZ:PROC ; FResourceFile::FindStrifeTeaserVoices + Line 42: EXTRN ?GetReader@FUncompressedLump@@UEAAPEAVFileReader@@XZ:PROC ; FUncompressedLump::GetReader + Line 43: EXTRN ?FillCache@FUncompressedLump@@UEAAHXZ:PROC ; FUncompressedLump::FillCache + Line 44: EXTRN ??_EFUncompressedLump@@UEAAPEAXI@Z:PROC ; FUncompressedLump::`vector deleting destructor' + Line 45: EXTRN ??0FUncompressedFile@@IEAA@PEBDAEAVFileReader@@@Z:PROC ; FUncompressedFile::FUncompressedFile + Line 46: EXTRN ??_EFGrpFile@@UEAAPEAXI@Z:PROC ; FGrpFile::`vector deleting destructor' + Line 47: EXTRN __CxxFrameHandler3:PROC + Line 48: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 49: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\file_io.cod (10 hits) + Line 8: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 15: EXTRN atexit:PROC + Line 16: EXTRN _errno:PROC + Line 17: EXTRN malloc:PROC + Line 18: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 19: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 20: EXTRN ?_WM_ERROR@@YAXPEBDIH0H@Z:PROC ; _WM_ERROR + Line 21: EXTRN ?OpenSoundFont@FSoundFontManager@@QEAAPEAVFSoundFontReader@@PEBDH@Z:PROC ; FSoundFontManager::OpenSoundFont + Line 22: EXTRN __CxxFrameHandler3:PROC + Line 23: EXTRN ?sfmanager@@3VFSoundFontManager@@A:BYTE ; sfmanager + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\file_lump.cod (25 hits) + Line 23: EXTRN _purecall:PROC + Line 24: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 25: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 26: EXTRN __std_terminate:PROC + Line 27: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 28: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 29: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 30: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 31: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 32: EXTRN ??1FResourceLump@@UEAA@XZ:PROC ; FResourceLump::~FResourceLump + Line 33: EXTRN ?GetReader@FResourceLump@@UEAAPEAVFileReader@@XZ:PROC ; FResourceLump::GetReader + Line 34: EXTRN ?NewReader@FResourceLump@@UEAA?AVFileReader@@XZ:PROC ; FResourceLump::NewReader + Line 35: EXTRN ?GetRawData@FResourceLump@@UEAA?AUFCompressedBuffer@@XZ:PROC ; FResourceLump::GetRawData + Line 36: EXTRN ??_EFResourceLump@@UEAAPEAXI@Z:PROC ; FResourceLump::`vector deleting destructor' + Line 37: EXTRN ??1FResourceFile@@UEAA@XZ:PROC ; FResourceFile::~FResourceFile + Line 38: EXTRN ?FindStrifeTeaserVoices@FResourceFile@@UEAAXXZ:PROC ; FResourceFile::FindStrifeTeaserVoices + Line 39: EXTRN ?GetReader@FUncompressedLump@@UEAAPEAVFileReader@@XZ:PROC ; FUncompressedLump::GetReader + Line 40: EXTRN ?FillCache@FUncompressedLump@@UEAAHXZ:PROC ; FUncompressedLump::FillCache + Line 41: EXTRN ??_EFUncompressedLump@@UEAAPEAXI@Z:PROC ; FUncompressedLump::`vector deleting destructor' + Line 42: EXTRN ??0FUncompressedFile@@IEAA@PEBDAEAVFileReader@@@Z:PROC ; FUncompressedFile::FUncompressedFile + Line 43: EXTRN ?ExtractFileBase@@YA?AVFString@@PEBD_N@Z:PROC ; ExtractFileBase + Line 44: EXTRN ?uppercopy@@YAXPEADPEBD@Z:PROC ; uppercopy + Line 45: EXTRN ??_EFLumpFile@@UEAAPEAXI@Z:PROC ; FLumpFile::`vector deleting destructor' + Line 46: EXTRN __CxxFrameHandler3:PROC + Line 47: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\file_pak.cod (26 hits) + Line 25: EXTRN _purecall:PROC + Line 26: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 27: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 28: EXTRN __std_terminate:PROC + Line 29: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 30: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 31: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 32: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 33: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 34: EXTRN ??1FResourceLump@@UEAA@XZ:PROC ; FResourceLump::~FResourceLump + Line 35: EXTRN ?GetReader@FResourceLump@@UEAAPEAVFileReader@@XZ:PROC ; FResourceLump::GetReader + Line 36: EXTRN ?NewReader@FResourceLump@@UEAA?AVFileReader@@XZ:PROC ; FResourceLump::NewReader + Line 37: EXTRN ?LumpNameSetup@FResourceLump@@QEAAXVFString@@@Z:PROC ; FResourceLump::LumpNameSetup + Line 38: EXTRN ?CheckEmbedded@FResourceLump@@QEAAXXZ:PROC ; FResourceLump::CheckEmbedded + Line 39: EXTRN ?GetRawData@FResourceLump@@UEAA?AUFCompressedBuffer@@XZ:PROC ; FResourceLump::GetRawData + Line 40: EXTRN ??_EFResourceLump@@UEAAPEAXI@Z:PROC ; FResourceLump::`vector deleting destructor' + Line 41: EXTRN ??1FResourceFile@@UEAA@XZ:PROC ; FResourceFile::~FResourceFile + Line 42: EXTRN ?FindStrifeTeaserVoices@FResourceFile@@UEAAXXZ:PROC ; FResourceFile::FindStrifeTeaserVoices + Line 43: EXTRN ?GetReader@FUncompressedLump@@UEAAPEAVFileReader@@XZ:PROC ; FUncompressedLump::GetReader + Line 44: EXTRN ?FillCache@FUncompressedLump@@UEAAHXZ:PROC ; FUncompressedLump::FillCache + Line 45: EXTRN ??_EFUncompressedLump@@UEAAPEAXI@Z:PROC ; FUncompressedLump::`vector deleting destructor' + Line 46: EXTRN ??0FUncompressedFile@@IEAA@PEBDAEAVFileReader@@@Z:PROC ; FUncompressedFile::FUncompressedFile + Line 47: EXTRN ??_EFPakFile@@UEAAPEAXI@Z:PROC ; FPakFile::`vector deleting destructor' + Line 48: EXTRN __CxxFrameHandler3:PROC + Line 49: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 50: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\file_rff.cod (27 hits) + Line 34: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 35: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 36: EXTRN _purecall:PROC + Line 37: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 38: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 39: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 40: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 41: EXTRN ??_V@YAXPEAX_K@Z:PROC ; operator delete[] + Line 42: EXTRN strncpy:PROC + Line 43: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 44: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 45: EXTRN ??1FResourceLump@@UEAA@XZ:PROC ; FResourceLump::~FResourceLump + Line 46: EXTRN ?GetReader@FResourceLump@@UEAAPEAVFileReader@@XZ:PROC ; FResourceLump::GetReader + Line 47: EXTRN ?NewReader@FResourceLump@@UEAA?AVFileReader@@XZ:PROC ; FResourceLump::NewReader + Line 48: EXTRN ?LumpNameSetup@FResourceLump@@QEAAXVFString@@@Z:PROC ; FResourceLump::LumpNameSetup + Line 49: EXTRN ?GetRawData@FResourceLump@@UEAA?AUFCompressedBuffer@@XZ:PROC ; FResourceLump::GetRawData + Line 50: EXTRN ??_EFResourceLump@@UEAAPEAXI@Z:PROC ; FResourceLump::`vector deleting destructor' + Line 51: EXTRN ??0FResourceFile@@IEAA@PEBDAEAVFileReader@@@Z:PROC ; FResourceFile::FResourceFile + Line 52: EXTRN ??1FResourceFile@@UEAA@XZ:PROC ; FResourceFile::~FResourceFile + Line 53: EXTRN ?FindStrifeTeaserVoices@FResourceFile@@UEAAXXZ:PROC ; FResourceFile::FindStrifeTeaserVoices + Line 54: EXTRN ?GetReader@FUncompressedLump@@UEAAPEAVFileReader@@XZ:PROC ; FUncompressedLump::GetReader + Line 55: EXTRN ?FillCache@FUncompressedLump@@UEAAHXZ:PROC ; FUncompressedLump::FillCache + Line 56: EXTRN ??_EFUncompressedLump@@UEAAPEAXI@Z:PROC ; FUncompressedLump::`vector deleting destructor' + Line 57: EXTRN ??_EFRFFFile@@UEAAPEAXI@Z:PROC ; FRFFFile::`vector deleting destructor' + Line 58: EXTRN __CxxFrameHandler3:PROC + Line 59: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 60: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\file_wad.cod (31 hits) + Line 59: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 60: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 61: EXTRN _purecall:PROC + Line 62: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 63: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 64: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 65: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 66: EXTRN ??_V@YAXPEAX_K@Z:PROC ; operator delete[] + Line 67: EXTRN __std_terminate:PROC + Line 68: EXTRN isdigit:PROC + Line 69: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 70: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 71: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 72: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 73: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 74: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 75: EXTRN ?OpenDecompressor@FileReader@@QEAA_NAEAV1@_JH_N@Z:PROC ; FileReader::OpenDecompressor + Line 76: EXTRN ??1FResourceLump@@UEAA@XZ:PROC ; FResourceLump::~FResourceLump + Line 77: EXTRN ?GetReader@FResourceLump@@UEAAPEAVFileReader@@XZ:PROC ; FResourceLump::GetReader + Line 78: EXTRN ?NewReader@FResourceLump@@UEAA?AVFileReader@@XZ:PROC ; FResourceLump::NewReader + Line 79: EXTRN ?GetRawData@FResourceLump@@UEAA?AUFCompressedBuffer@@XZ:PROC ; FResourceLump::GetRawData + Line 80: EXTRN ??_EFResourceLump@@UEAAPEAXI@Z:PROC ; FResourceLump::`vector deleting destructor' + Line 81: EXTRN ??0FResourceFile@@IEAA@PEBDAEAVFileReader@@@Z:PROC ; FResourceFile::FResourceFile + Line 82: EXTRN ??1FResourceFile@@UEAA@XZ:PROC ; FResourceFile::~FResourceFile + Line 83: EXTRN ?uppercopy@@YAXPEADPEBD@Z:PROC ; uppercopy + Line 84: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 85: EXTRN ??_EFWadFile@@UEAAPEAXI@Z:PROC ; FWadFile::`vector deleting destructor' + Line 86: EXTRN __CxxFrameHandler3:PROC + Line 87: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 88: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + Line 89: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\file_zip.cod (53 hits) + Line 72: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 73: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 74: EXTRN _purecall:PROC + Line 75: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 76: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 77: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 78: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 79: EXTRN ??_V@YAXPEAX_K@Z:PROC ; operator delete[] + Line 80: EXTRN __std_terminate:PROC + Line 81: EXTRN free:PROC + Line 82: EXTRN malloc:PROC + Line 83: EXTRN remove:PROC + Line 84: EXTRN stricmp:PROC + Line 85: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 86: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 87: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 88: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 89: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 90: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 91: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 92: EXTRN ??HFString@@QEBA?AV0@PEBD@Z:PROC ; FString::operator+ + Line 93: EXTRN ?Mid@FString@@QEBA?AV1@_K0@Z:PROC ; FString::Mid + Line 94: EXTRN ?IndexOf@FString@@QEBAJAEBV1@J@Z:PROC ; FString::IndexOf + Line 95: EXTRN ?IndexOf@FString@@QEBAJPEBDJ@Z:PROC ; FString::IndexOf + Line 96: EXTRN ?ToLower@FString@@QEAAXXZ:PROC ; FString::ToLower + Line 97: EXTRN ?ReplaceChars@FString@@QEAAXDD@Z:PROC ; FString::ReplaceChars + Line 98: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 99: EXTRN _localtime64:PROC + Line 100: EXTRN _time64:PROC + Line 101: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 102: EXTRN ?OpenMemory@FileReader@@QEAA_NPEBX_J@Z:PROC ; FileReader::OpenMemory + Line 103: EXTRN ?OpenDecompressor@FileReader@@QEAA_NAEAV1@_JH_N@Z:PROC ; FileReader::OpenDecompressor + Line 104: EXTRN ?Open@FileWriter@@SAPEAV1@PEBD@Z:PROC ; FileWriter::Open + Line 105: EXTRN ??1FResourceLump@@UEAA@XZ:PROC ; FResourceLump::~FResourceLump + Line 106: EXTRN ?GetReader@FResourceLump@@UEAAPEAVFileReader@@XZ:PROC ; FResourceLump::GetReader + Line 107: EXTRN ?NewReader@FResourceLump@@UEAA?AVFileReader@@XZ:PROC ; FResourceLump::NewReader + Line 108: EXTRN ?LumpNameSetup@FResourceLump@@QEAAXVFString@@@Z:PROC ; FResourceLump::LumpNameSetup + Line 109: EXTRN ?CheckEmbedded@FResourceLump@@QEAAXXZ:PROC ; FResourceLump::CheckEmbedded + Line 110: EXTRN ?GetRawData@FResourceLump@@UEAA?AUFCompressedBuffer@@XZ:PROC ; FResourceLump::GetRawData + Line 111: EXTRN ??_EFResourceLump@@UEAAPEAXI@Z:PROC ; FResourceLump::`vector deleting destructor' + Line 112: EXTRN ??0FResourceFile@@IEAA@PEBDAEAVFileReader@@@Z:PROC ; FResourceFile::FResourceFile + Line 113: EXTRN ?PostProcessArchive@FResourceFile@@IEAAXPEAX_K@Z:PROC ; FResourceFile::PostProcessArchive + Line 114: EXTRN ??1FResourceFile@@UEAA@XZ:PROC ; FResourceFile::~FResourceFile + Line 115: EXTRN ?FindStrifeTeaserVoices@FResourceFile@@UEAAXXZ:PROC ; FResourceFile::FindStrifeTeaserVoices + Line 116: EXTRN ??_EFZipFile@@UEAAPEAXI@Z:PROC ; FZipFile::`vector deleting destructor' + Line 117: EXTRN ?Explode@FZipExploder@@QEAAHPEAEIAEAVFileReader@@IH@Z:PROC ; FZipExploder::Explode + Line 118: EXTRN ?ShrinkLoop@@YAHPEAEIAEAVFileReader@@I@Z:PROC ; ShrinkLoop + Line 119: EXTRN __CxxFrameHandler3:PROC + Line 120: EXTRN strcmp:PROC + Line 121: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 122: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 123: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + Line 124: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\files.cod (25 hits) + Line 54: EXTRN _purecall:PROC + Line 55: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 56: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 57: EXTRN __std_terminate:PROC + Line 58: EXTRN fclose:PROC + Line 59: EXTRN fgets:PROC + Line 60: EXTRN fopen:PROC + Line 61: EXTRN fread:PROC + Line 62: EXTRN fseek:PROC + Line 63: EXTRN ftell:PROC + Line 64: EXTRN fwrite:PROC + Line 65: EXTRN ?_Xbad_function_call@std@@YAXXZ:PROC ; std::_Xbad_function_call + Line 66: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 67: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 68: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 69: EXTRN ?VFormat@FString@@QEAAXPEBDPEAD@Z:PROC ; FString::VFormat + Line 70: EXTRN ??_EFileReaderInterface@@UEAAPEAXI@Z:PROC ; FileReaderInterface::`vector deleting destructor' + Line 71: EXTRN ??_EMemoryReader@@UEAAPEAXI@Z:PROC ; MemoryReader::`vector deleting destructor' + Line 72: EXTRN ??_EFileWriter@@UEAAPEAXI@Z:PROC ; FileWriter::`vector deleting destructor' + Line 73: EXTRN ??_EStdFileReader@@UEAAPEAXI@Z:PROC ; StdFileReader::`vector deleting destructor' + Line 74: EXTRN ??_EFileReaderRedirect@@UEAAPEAXI@Z:PROC ; FileReaderRedirect::`vector deleting destructor' + Line 75: EXTRN ??_EMemoryArrayReader@@UEAAPEAXI@Z:PROC ; MemoryArrayReader::`vector deleting destructor' + Line 76: EXTRN __CxxFrameHandler3:PROC + Line 77: EXTRN memcpy:PROC + Line 78: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\files_decompress.cod (30 hits) + Line 54: EXTRN _purecall:PROC + Line 55: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 56: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 57: EXTRN free:PROC + Line 58: EXTRN malloc:PROC + Line 59: EXTRN inflate:PROC + Line 60: EXTRN inflateEnd:PROC + Line 61: EXTRN inflateInit_:PROC + Line 62: EXTRN inflateInit2_:PROC + Line 63: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 64: EXTRN LzmaDec_Init:PROC + Line 65: EXTRN LzmaDec_Allocate:PROC + Line 66: EXTRN LzmaDec_Free:PROC + Line 67: EXTRN LzmaDec_DecodeToBuf:PROC + Line 68: EXTRN BZ2_bzDecompressInit:PROC + Line 69: EXTRN BZ2_bzDecompress:PROC + Line 70: EXTRN BZ2_bzDecompressEnd:PROC + Line 71: EXTRN ??_EFileReaderInterface@@UEAAPEAXI@Z:PROC ; FileReaderInterface::`vector deleting destructor' + Line 72: EXTRN ??_EDecompressorBase@@UEAAPEAXI@Z:PROC ; DecompressorBase::`vector deleting destructor' + Line 73: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 74: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 75: EXTRN ?M_ZLibError@@YA?AVFString@@H@Z:PROC ; M_ZLibError + Line 76: EXTRN ??_EDecompressorZ@@UEAAPEAXI@Z:PROC ; DecompressorZ::`vector deleting destructor' + Line 77: EXTRN ??_EDecompressorBZ2@@UEAAPEAXI@Z:PROC ; DecompressorBZ2::`vector deleting destructor' + Line 78: EXTRN ??_EDecompressorLZMA@@UEAAPEAXI@Z:PROC ; DecompressorLZMA::`vector deleting destructor' + Line 79: EXTRN ??_EDecompressorLZSS@@UEAAPEAXI@Z:PROC ; DecompressorLZSS::`vector deleting destructor' + Line 80: EXTRN __CxxFrameHandler3:PROC + Line 81: EXTRN memcpy:PROC + Line 82: EXTRN memmove:PROC + Line 83: EXTRN memset:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\filter.cod (8 hits) + Line 22: EXTRN free:PROC + Line 23: EXTRN ?safe_malloc@TimidityPlus@@YAPEAX_K@Z:PROC ; TimidityPlus::safe_malloc + Line 24: EXTRN __vdecl_sin2:PROC + Line 25: EXTRN exp:PROC + Line 26: EXTRN log:PROC + Line 27: EXTRN memcpy:PROC + Line 28: EXTRN sqrt:PROC + Line 29: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\flattexture.cod (19 hits) + Line 21: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 22: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 23: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 24: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 25: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 26: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 27: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 28: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 29: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 30: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 31: EXTRN ??_EFFlatTexture@@UEAAPEAXI@Z:PROC ; FFlatTexture::`vector deleting destructor' + Line 32: EXTRN __CxxFrameHandler3:PROC + Line 33: EXTRN memset:PROC + Line 34: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 35: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 36: EXTRN ?translationtables@@3PAV?$TAutoGrowArray@VFRemapTablePtr@@PEAUFRemapTable@@@@A:BYTE ; translationtables + Line 37: EXTRN ?GrayMap@ImageHelpers@@3PAEA:BYTE ; ImageHelpers::GrayMap + Line 38: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 39: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\flatvertices.cod (11 hits) + Line 33: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 34: EXTRN __std_terminate:PROC + Line 35: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 36: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 37: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 38: EXTRN ?BuildVertices@@YA?AV?$TArray@UVertexContainer@@U1@@@AEAV?$TArray@Usector_t@@U1@@@@Z:PROC ; BuildVertices + Line 39: EXTRN __CxxFrameHandler3:PROC + Line 40: EXTRN memcpy:PROC + Line 41: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 42: EXTRN __ImageBase:BYTE + Line 43: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\fmopl.cod (12 hits) + Line 33: EXTRN _purecall:PROC + Line 34: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 35: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 36: EXTRN ??_EOPLEmul@@UEAAPEAXI@Z:PROC ; OPLEmul::`vector deleting destructor' + Line 37: EXTRN ??_EYM3812@@UEAAPEAXI@Z:PROC ; YM3812::`vector deleting destructor' + Line 38: EXTRN floor:PROC + Line 39: EXTRN log:PROC + Line 40: EXTRN memset:PROC + Line 41: EXTRN pow:PROC + Line 42: EXTRN sin:PROC + Line 43: EXTRN __ImageBase:BYTE + Line 44: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\fontchars.cod (16 hits) + Line 26: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 27: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 28: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 29: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 30: EXTRN ?GetLumpName@FWadCollection@@QEBAXPEADH@Z:PROC ; FWadCollection::GetLumpName + Line 31: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 32: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 33: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 34: EXTRN ?GetPalettedPixels@FImageSource@@QEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::GetPalettedPixels + Line 35: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 36: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 37: EXTRN ??_EFFontChar1@@UEAAPEAXI@Z:PROC ; FFontChar1::`vector deleting destructor' + Line 38: EXTRN ??_EFFontChar2@@UEAAPEAXI@Z:PROC ; FFontChar2::`vector deleting destructor' + Line 39: EXTRN __CxxFrameHandler3:PROC + Line 40: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 41: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\freq.cod (20 hits) + Line 475: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 476: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 477: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 478: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 479: EXTRN ?rdft@TimidityPlus@@YAXHHPEAMPEAH0@Z:PROC ; TimidityPlus::rdft + Line 480: EXTRN _CxxThrowException:PROC + Line 481: EXTRN __CxxFrameHandler3:PROC + Line 482: EXTRN __vdecl_pow2:PROC + Line 483: EXTRN ceil:PROC + Line 484: EXTRN ceilf:PROC + Line 485: EXTRN exp:PROC + Line 486: EXTRN log:PROC + Line 487: EXTRN logf:PROC + Line 488: EXTRN memmove:PROC + Line 489: EXTRN memset:PROC + Line 490: EXTRN pow:PROC + Line 491: EXTRN sqrt:PROC + Line 492: EXTRN sqrtf:PROC + Line 493: EXTRN __ImageBase:BYTE + Line 494: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\g_doomedmap.cod (31 hits) + Line 198: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 199: EXTRN atexit:PROC + Line 200: EXTRN __std_terminate:PROC + Line 201: EXTRN qsort:PROC + Line 202: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 203: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 204: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 205: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 206: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 207: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 208: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 209: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 210: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 211: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 212: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 213: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 214: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 215: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 216: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 217: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 218: EXTRN ?MustMatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MustMatchString + Line 219: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 220: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 221: EXTRN ?ParseOpenBrace@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseOpenBrace + Line 222: EXTRN ?P_FindLineSpecial@@YAHPEBDPEAH1@Z:PROC ; P_FindLineSpecial + Line 223: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 224: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 225: EXTRN __CxxFrameHandler3:PROC + Line 226: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 227: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 228: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\g_game.cod (289 hits) + Line 166: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 167: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 168: EXTRN ?IsAlias@FConsoleCommand@@UEAA_NXZ:PROC ; FConsoleCommand::IsAlias + Line 169: EXTRN ?Run@FUnsafeConsoleCommand@@UEAAXAEAVFCommandLine@@PEAVAActor@@H@Z:PROC ; FUnsafeConsoleCommand::Run + Line 170: EXTRN ??_EFUnsafeConsoleCommand@@UEAAPEAXI@Z:PROC ; FUnsafeConsoleCommand::`vector deleting destructor' + Line 171: EXTRN ?AllActorClasses@PClassActor@@2V?$TArray@PEAVPClassActor@@PEAV1@@@A:BYTE ; PClassActor::AllActorClasses + Line 172: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 173: EXTRN ?RegistrationInfo@DHUDMessageFadeOut@@2UClassReg@@A:BYTE ; DHUDMessageFadeOut::RegistrationInfo + Line 174: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 175: EXTRN ?AllClasses@PClass@@2V?$TArray@PEAVPClass@@PEAV1@@@A:BYTE ; PClass::AllClasses + Line 176: EXTRN ?automapactive@@3_NA:BYTE ; automapactive + Line 177: EXTRN ?Net_Arbitrator@@3HA:DWORD ; Net_Arbitrator + Line 178: EXTRN ?Skins@@3V?$TArray@VFPlayerSkin@@V1@@@A:BYTE ; Skins + Line 179: EXTRN ?validcount@@3HA:DWORD ; validcount + Line 180: EXTRN ?PlayerClasses@@3V?$TArray@VFPlayerClass@@V1@@@A:BYTE ; PlayerClasses + Line 181: EXTRN ?globalfreeze@@3EA:BYTE ; globalfreeze + Line 1016: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 1017: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 1018: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 1019: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 1020: EXTRN atexit:PROC + Line 1021: EXTRN __std_terminate:PROC + Line 1022: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 1023: EXTRN atoi:PROC + Line 1024: EXTRN fclose:PROC + Line 1025: EXTRN remove:PROC + Line 1026: EXTRN stricmp:PROC + Line 1027: EXTRN strnicmp:PROC + Line 1028: EXTRN compress2:PROC + Line 1029: EXTRN uncompress:PROC + Line 1030: EXTRN crc32:PROC + Line 1031: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 1032: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 1033: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 1034: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 1035: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 1036: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 1037: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 1038: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 1039: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 1040: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 1041: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 1042: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 1043: EXTRN ?ReplaceChars@FString@@QEAAXDD@Z:PROC ; FString::ReplaceChars + Line 1044: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 1045: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 1046: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 1047: EXTRN ?I_GetTime@@YAHXZ:PROC ; I_GetTime + Line 1048: EXTRN ?I_FreezeTime@@YAX_N@Z:PROC ; I_FreezeTime + Line 1049: EXTRN ?GetVersionString@@YAPEBDXZ:PROC ; GetVersionString + Line 1050: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 1051: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 1052: EXTRN mysnprintf:PROC + Line 1053: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 1054: EXTRN ?ForceSet@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@_N@Z:PROC ; FBaseCVar::ForceSet + Line 1055: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 1056: EXTRN ?C_GetMassCVarString@@YA?AVFString@@I_N@Z:PROC ; C_GetMassCVarString + Line 1057: EXTRN ?C_ReadCVars@@YAXPEAPEAE@Z:PROC ; C_ReadCVars + Line 1058: EXTRN ?C_BackupCVars@@YAXXZ:PROC ; C_BackupCVars + Line 1059: EXTRN ?C_WriteCVars@@YAXPEAPEAEI_N@Z:PROC ; C_WriteCVars + Line 1060: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 1061: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 1062: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 1063: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 1064: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 1065: EXTRN ?C_RestoreCVars@@YAXXZ:PROC ; C_RestoreCVars + Line 1066: EXTRN ?C_ForgetCVars@@YAXXZ:PROC ; C_ForgetCVars + Line 1067: EXTRN ?StartChunk@@YAXHPEAPEAE@Z:PROC ; StartChunk + Line 1068: EXTRN ?FinishChunk@@YAXPEAPEAE@Z:PROC ; FinishChunk + Line 1069: EXTRN ?UnpackUserCmd@@YAHPEAUusercmd_t@@PEBU1@PEAPEAE@Z:PROC ; UnpackUserCmd + Line 1070: EXTRN ?WriteUserCmdMessage@@YAHPEAUusercmd_t@@PEBU1@PEAPEAE@Z:PROC ; WriteUserCmdMessage + Line 1071: EXTRN ?RunNetSpecs@@YAXHH@Z:PROC ; RunNetSpecs + Line 1072: EXTRN ?ReadByte@@YAHPEAPEAE@Z:PROC ; ReadByte + Line 1073: EXTRN ?ReadWord@@YAHPEAPEAE@Z:PROC ; ReadWord + Line 1074: EXTRN ?ReadLong@@YAHPEAPEAE@Z:PROC ; ReadLong + Line 1075: EXTRN ?WriteByte@@YAXEPEAPEAE@Z:PROC ; WriteByte + Line 1076: EXTRN ?WriteWord@@YAXFPEAPEAE@Z:PROC ; WriteWord + Line 1077: EXTRN ?WriteLong@@YAXHPEAPEAE@Z:PROC ; WriteLong + Line 1078: EXTRN ?D_SetupUserInfo@@YAXXZ:PROC ; D_SetupUserInfo + Line 1079: EXTRN ?D_WriteUserInfoStrings@@YAXHPEAPEAE_N@Z:PROC ; D_WriteUserInfoStrings + Line 1080: EXTRN ?D_ReadUserInfoStrings@@YAXHPEAPEAE_N@Z:PROC ; D_ReadUserInfoStrings + Line 1081: EXTRN ?I_BaseTiccmd@@YAPEAUticcmd_t@@XZ:PROC ; I_BaseTiccmd + Line 1082: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 1083: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 1084: EXTRN c_sqrt:PROC + Line 1085: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 1086: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 1087: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 1088: EXTRN ?FindFunction@PClass@@SAXPEAPEAVVMFunction@@VFName@@1@Z:PROC ; PClass::FindFunction + Line 1089: EXTRN ??4FRemapTable@@QEAAAEAU0@AEBU0@@Z:PROC ; FRemapTable::operator= + Line 1090: EXTRN ?UpdateNative@FRemapTable@@QEAAXXZ:PROC ; FRemapTable::UpdateNative + Line 1091: EXTRN ?TranslationToTable@@YAPEAUFRemapTable@@H@Z:PROC ; TranslationToTable + Line 1092: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 1093: EXTRN ?S_Sound@@YAXHVFSoundID@@MM@Z:PROC ; S_Sound + Line 1094: EXTRN ?S_UpdateSounds@@YAXPEAVAActor@@@Z:PROC ; S_UpdateSounds + Line 1095: EXTRN ?F_Responder@@YA_NPEAUevent_t@@@Z:PROC ; F_Responder + Line 1096: EXTRN ?F_Ticker@@YAXXZ:PROC ; F_Ticker + Line 1097: EXTRN ?F_StartIntermission@@YAXVFName@@E@Z:PROC ; F_StartIntermission + Line 1098: EXTRN ?F_EndFinale@@YAXXZ:PROC ; F_EndFinale + Line 1099: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 1100: EXTRN ?CheckValue@FArgs@@QEBAPEBDPEBD@Z:PROC ; FArgs::CheckValue + Line 1101: EXTRN ?M_ScreenShot@@YAXPEBD@Z:PROC ; M_ScreenShot + Line 1102: EXTRN ?M_ZLibError@@YA?AVFString@@H@Z:PROC ; M_ZLibError + Line 1103: EXTRN ?M_GetSavegamesPath@@YA?AVFString@@XZ:PROC ; M_GetSavegamesPath + Line 1104: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 1105: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 1106: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 1107: EXTRN ?StaticClearRandom@FRandom@@SAXXZ:PROC ; FRandom::StaticClearRandom + Line 1108: EXTRN ?StaticSumSeeds@FRandom@@SAIXZ:PROC ; FRandom::StaticSumSeeds + Line 1109: EXTRN ?StaticReadRNGState@FRandom@@SAXAEAVFSerializer@@@Z:PROC ; FRandom::StaticReadRNGState + Line 1110: EXTRN ?StaticWriteRNGState@FRandom@@SAXAEAVFSerializer@@@Z:PROC ; FRandom::StaticWriteRNGState + Line 1111: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 1112: EXTRN ?Open@FileWriter@@SAPEAV1@PEBD@Z:PROC ; FileWriter::Open + Line 1113: EXTRN ?Write@FileWriter@@UEAA_KPEBX_K@Z:PROC ; FileWriter::Write + Line 1114: EXTRN ?Tell@FileWriter@@UEAAJXZ:PROC ; FileWriter::Tell + Line 1115: EXTRN ?Seek@FileWriter@@UEAAJJH@Z:PROC ; FileWriter::Seek + Line 1116: EXTRN ??_EFileWriter@@UEAAPEAXI@Z:PROC ; FileWriter::`vector deleting destructor' + Line 1117: EXTRN ?Write@BufferWriter@@UEAA_KPEBX_K@Z:PROC ; BufferWriter::Write + Line 1118: EXTRN ??_EBufferWriter@@UEAAPEAXI@Z:PROC ; BufferWriter::`vector deleting destructor' + Line 1119: EXTRN ?CacheLump@FResourceLump@@QEAAPEAXXZ:PROC ; FResourceLump::CacheLump + Line 1120: EXTRN ?OpenResourceFile@FResourceFile@@SAPEAV1@PEBD_N1@Z:PROC ; FResourceFile::OpenResourceFile + Line 1121: EXTRN ?FindLump@FResourceFile@@QEAAPEAUFResourceLump@@PEBD@Z:PROC ; FResourceFile::FindLump + Line 1122: EXTRN ?G_InitNew@@YAXPEBD_N@Z:PROC ; G_InitNew + Line 1123: EXTRN ?G_ReadSnapshots@@YAXPEAVFResourceFile@@@Z:PROC ; G_ReadSnapshots + Line 1124: EXTRN ?G_WriteSnapshots@@YAXAEAV?$TArray@VFString@@V1@@@AEAV?$TArray@UFCompressedBuffer@@U1@@@@Z:PROC ; G_WriteSnapshots + Line 1125: EXTRN ?G_WriteVisited@@YAXAEAVFSerializer@@@Z:PROC ; G_WriteVisited + Line 1126: EXTRN ?G_ReadVisited@@YAXAEAVFSerializer@@@Z:PROC ; G_ReadVisited + Line 1127: EXTRN ?G_SkillProperty@@YAHW4ESkillProperty@@@Z:PROC ; G_SkillProperty + Line 1128: EXTRN ?FindInventory@AActor@@QEAAPEAV1@VFName@@_N@Z:PROC ; AActor::FindInventory + Line 1129: EXTRN ?IsTeammate@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsTeammate + Line 1130: EXTRN ?GetTag@AActor@@QEBAPEBDPEBD@Z:PROC ; AActor::GetTag + Line 1131: EXTRN ?Clear@FWeaponSlots@@QEAAXXZ:PROC ; FWeaponSlots::Clear + Line 1132: EXTRN ?P_SetupWeapons_ntohton@@YAXXZ:PROC ; P_SetupWeapons_ntohton + Line 1133: EXTRN ?P_WriteDemoWeaponsChunk@@YAXPEAPEAE@Z:PROC ; P_WriteDemoWeaponsChunk + Line 1134: EXTRN ?P_ReadDemoWeaponsChunk@@YAXPEAPEAE@Z:PROC ; P_ReadDemoWeaponsChunk + Line 1135: EXTRN ?Main@FCajunMaster@@QEAAXPEAUFLevelLocals@@@Z:PROC ; FCajunMaster::Main + Line 1136: EXTRN ?RemoveAllBots@FCajunMaster@@QEAAXPEAUFLevelLocals@@_N@Z:PROC ; FCajunMaster::RemoveAllBots + Line 1137: EXTRN ?Clear@DBot@@QEAAXXZ:PROC ; DBot::Clear + Line 1138: EXTRN ??1userinfo_t@@QEAA@XZ:PROC ; userinfo_t::~userinfo_t + Line 1139: EXTRN ??1player_t@@QEAA@XZ:PROC ; player_t::~player_t + Line 1140: EXTRN ?DestroyPSprites@player_t@@QEAAXXZ:PROC ; player_t::DestroyPSprites + Line 1141: EXTRN ?NotifyNewSave@FSavegameManager@@QEAAXAEBVFString@@0_N@Z:PROC ; FSavegameManager::NotifyNewSave + Line 1142: EXTRN ?M_StartControlPanel@@YAX_N@Z:PROC ; M_StartControlPanel + Line 1143: EXTRN ?M_SetMenu@@YAXVFName@@H@Z:PROC ; M_SetMenu + Line 1144: EXTRN ?P_ReadACSDefereds@@YAXAEAVFSerializer@@@Z:PROC ; P_ReadACSDefereds + Line 1145: EXTRN ?P_WriteACSDefereds@@YAXAEAVFSerializer@@@Z:PROC ; P_WriteACSDefereds + Line 1146: EXTRN ?P_Ticker@@YAXXZ:PROC ; P_Ticker + Line 1147: EXTRN ?D_PageTicker@@YAXXZ:PROC ; D_PageTicker + Line 1148: EXTRN ?D_AdvanceDemo@@YAXXZ:PROC ; D_AdvanceDemo + Line 1149: EXTRN ?WI_Ticker@@YAXXZ:PROC ; WI_Ticker + Line 1150: EXTRN ?CT_Responder@@YA_NPEAUevent_t@@@Z:PROC ; CT_Responder + Line 1151: EXTRN ?ST_Responder@@YA_NPEAUevent_t@@@Z:PROC ; ST_Responder + Line 1152: EXTRN ?AM_ToggleMap@@YAXXZ:PROC ; AM_ToggleMap + Line 1153: EXTRN ?C_FullConsole@@YAXXZ:PROC ; C_FullConsole + Line 1154: EXTRN ?C_HideConsole@@YAXXZ:PROC ; C_HideConsole + Line 1155: EXTRN ?C_AdjustBottom@@YAXXZ:PROC ; C_AdjustBottom + Line 1156: EXTRN ?C_DoKey@@YA_NPEAUevent_t@@PEAVFKeyBindings@@1@Z:PROC ; C_DoKey + Line 1157: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 1158: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 1159: EXTRN ?AddCommandString@@YAXPEBDH@Z:PROC ; AddCommandString + Line 1160: EXTRN ?C_RunDelayedCommands@@YAXXZ:PROC ; C_RunDelayedCommands + Line 1161: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 1162: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 1163: EXTRN ?CheckIfWadLoaded@FWadCollection@@QEAAHPEBD@Z:PROC ; FWadCollection::CheckIfWadLoaded + Line 1164: EXTRN ?GetWadName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetWadName + Line 1165: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 1166: EXTRN ?ReadLump@FWadCollection@@QEAAXHPEAX@Z:PROC ; FWadCollection::ReadLump + Line 1167: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 1168: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 1169: EXTRN ?P_CheckPosition@@YA_NPEAVAActor@@AEBU?$TVector2@N@@_N@Z:PROC ; P_CheckPosition + Line 1170: EXTRN ?P_PlayerStartStomp@@YAXPEAVAActor@@_N@Z:PROC ; P_PlayerStartStomp + Line 1171: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 1172: EXTRN ??0DHUDMessageFadeOut@@QEAA@PEAVFFont@@PEBDMMHHW4EColorRange@@MM@Z:PROC ; DHUDMessageFadeOut::DHUDMessageFadeOut + Line 1173: EXTRN ?AttachMessage@DBaseStatusBar@@QEAAXPEAVDHUDMessageBase@@IH@Z:PROC ; DBaseStatusBar::AttachMessage + Line 1174: EXTRN ?ShowPlayerName@DBaseStatusBar@@QEAAXXZ:PROC ; DBaseStatusBar::ShowPlayerName + Line 1175: EXTRN ?AttachToPlayer@DBaseStatusBar@@QEAAXPEAVplayer_t@@@Z:PROC ; DBaseStatusBar::AttachToPlayer + Line 1176: EXTRN ?M_CreateDummyPNG@@YA_NPEAVFileWriter@@@Z:PROC ; M_CreateDummyPNG + Line 1177: EXTRN ?M_AppendPNGText@@YA_NPEAVFileWriter@@PEBD1@Z:PROC ; M_AppendPNGText + Line 1178: EXTRN ?M_FinishPNG@@YA_NPEAVFileWriter@@@Z:PROC ; M_FinishPNG + Line 1179: EXTRN ?FileExists@@YA_NPEBD@Z:PROC ; FileExists + Line 1180: EXTRN ?DefaultExtension@@YAXAEAVFString@@PEBD@Z:PROC ; DefaultExtension + Line 1181: EXTRN ?myasctime@@YAPEBDXZ:PROC ; myasctime + Line 1182: EXTRN ?CreatePath@@YAXPEBD@Z:PROC ; CreatePath + Line 1183: EXTRN ?NicePath@@YA?AVFString@@PEBD@Z:PROC ; NicePath + Line 1184: EXTRN ?SetData@FDynamicBuffer@@QEAAXPEBEH@Z:PROC ; FDynamicBuffer::SetData + Line 1185: EXTRN ?GetData@FDynamicBuffer@@QEAAPEAEPEAH@Z:PROC ; FDynamicBuffer::GetData + Line 1186: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 1187: EXTRN ?Net_WriteLong@@YAXH@Z:PROC ; Net_WriteLong + Line 1188: EXTRN ?Net_WriteString@@YAXPEBD@Z:PROC ; Net_WriteString + Line 1189: EXTRN ?Net_DoCommand@@YAXHPEAPEAEH@Z:PROC ; Net_DoCommand + Line 1190: EXTRN ?D_Render@@YAXV?$function@$$A6AXXZ@std@@_N@Z:PROC ; D_Render + Line 1191: EXTRN ?P_ReadACSVars@@YAXAEAVFSerializer@@@Z:PROC ; P_ReadACSVars + Line 1192: EXTRN ?P_WriteACSVars@@YAXAEAVFSerializer@@@Z:PROC ; P_WriteACSVars + Line 1193: EXTRN ?StartTypedScripts@FBehaviorContainer@@QEAAXGPEAVAActor@@_NH1@Z:PROC ; FBehaviorContainer::StartTypedScripts + Line 1194: EXTRN ?StopMyScripts@FBehaviorContainer@@QEAAXPEAVAActor@@@Z:PROC ; FBehaviorContainer::StopMyScripts + Line 1195: EXTRN ?P_DisconnectEffect@@YAXPEAVAActor@@@Z:PROC ; P_DisconnectEffect + Line 1196: EXTRN ?I_GetAxes@@YAXQEAM@Z:PROC ; I_GetAxes + Line 1197: EXTRN ?OpenWriter@FSerializer@@QEAA_N_N@Z:PROC ; FSerializer::OpenWriter + Line 1198: EXTRN ?OpenReader@FSerializer@@QEAA_NPEBD_K@Z:PROC ; FSerializer::OpenReader + Line 1199: EXTRN ?Close@FSerializer@@QEAAXXZ:PROC ; FSerializer::Close + Line 1200: EXTRN ?GetCompressedOutput@FSerializer@@QEAA?AUFCompressedBuffer@@XZ:PROC ; FSerializer::GetCompressedOutput + Line 1201: EXTRN ?AddString@FSerializer@@QEAAAEAV1@PEBD0@Z:PROC ; FSerializer::AddString + Line 1202: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 1203: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 1204: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAEPEAE@Z:PROC ; Serialize + Line 1205: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFString@@PEAV2@@Z:PROC ; Serialize + Line 1206: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 1207: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 1208: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 1209: EXTRN ?SnapshotLevel@FLevelLocals@@QEAAXXZ:PROC ; FLevelLocals::SnapshotLevel + Line 1210: EXTRN ?SpawnPlayer@FLevelLocals@@QEAAPEAVAActor@@PEAUFPlayerStart@@HH@Z:PROC ; FLevelLocals::SpawnPlayer + Line 1211: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 1212: EXTRN ?IsFreelookAllowed@FLevelLocals@@QEBA_NXZ:PROC ; FLevelLocals::IsFreelookAllowed + Line 1213: EXTRN ?G_SerializeHub@@YAXAEAVFSerializer@@@Z:PROC ; G_SerializeHub + Line 1214: EXTRN ?E_UiTick@@YAXXZ:PROC ; E_UiTick + Line 1215: EXTRN ?E_PostUiTick@@YAXXZ:PROC ; E_PostUiTick + Line 1216: EXTRN ?E_PlayerDisconnected@@YAXH@Z:PROC ; E_PlayerDisconnected + Line 1217: EXTRN ?G_DoNewGame@@YAXXZ:PROC ; G_DoNewGame + Line 1218: EXTRN ?G_DoCompleted@@YAXXZ:PROC ; G_DoCompleted + Line 1219: EXTRN ?G_DoWorldDone@@YAXXZ:PROC ; G_DoWorldDone + Line 1220: EXTRN ?STAT_Serialize@@YAXAEAVFSerializer@@@Z:PROC ; STAT_Serialize + Line 1221: EXTRN ?WriteZip@@YA_NPEBDAEAV?$TArray@VFString@@V1@@@AEAV?$TArray@UFCompressedBuffer@@U1@@@@Z:PROC ; WriteZip + Line 1222: EXTRN _CxxThrowException:PROC + Line 1223: EXTRN __CxxFrameHandler3:PROC + Line 1224: EXTRN ceil:PROC + Line 1225: EXTRN floor:PROC + Line 1226: EXTRN memcpy:PROC + Line 1227: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 1228: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 1229: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 1230: EXTRN ?NextSkill@@3HA:DWORD ; NextSkill + Line 1231: EXTRN ?SaveVersion@@3HA:DWORD ; SaveVersion + Line 1232: EXTRN ?mouse_sensitivity@@3VFFloatCVar@@A:BYTE ; mouse_sensitivity + Line 1233: EXTRN ?singletics@@3_NA:BYTE ; singletics + Line 1234: EXTRN ?ToggleFullscreen@@3_NA:BYTE ; ToggleFullscreen + Line 1235: EXTRN ?dmflags@@3VFIntCVar@@A:BYTE ; dmflags + Line 1236: EXTRN ?dmflags2@@3VFIntCVar@@A:BYTE ; dmflags2 + Line 1237: EXTRN ?AllocBytes@GC@@3_KA:QWORD ; GC::AllocBytes + Line 1238: EXTRN ?Threshold@GC@@3_KA:QWORD ; GC::Threshold + Line 1239: EXTRN ?translationtables@@3PAV?$TAutoGrowArray@VFRemapTablePtr@@PEAUFRemapTable@@@@A:BYTE ; translationtables + Line 1240: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 1241: EXTRN ?rngseed@@3IA:DWORD ; rngseed + Line 1242: EXTRN ?savegamerestore@@3_NA:BYTE ; savegamerestore + Line 1243: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 1244: EXTRN ?savegameManager@@3UFSavegameManager@@A:BYTE ; savegameManager + Line 1245: EXTRN ?Bindings@@3VFKeyBindings@@A:BYTE ; Bindings + Line 1246: EXTRN ?DoubleBindings@@3VFKeyBindings@@A:BYTE ; DoubleBindings + Line 1247: EXTRN ?Button_Mlook@@3UFButtonStatus@@A:BYTE ; Button_Mlook + Line 1248: EXTRN ?Button_Klook@@3UFButtonStatus@@A:BYTE ; Button_Klook + Line 1249: EXTRN ?Button_Use@@3UFButtonStatus@@A:BYTE ; Button_Use + Line 1250: EXTRN ?Button_AltAttack@@3UFButtonStatus@@A:BYTE ; Button_AltAttack + Line 1251: EXTRN ?Button_Attack@@3UFButtonStatus@@A:BYTE ; Button_Attack + Line 1252: EXTRN ?Button_Speed@@3UFButtonStatus@@A:BYTE ; Button_Speed + Line 1253: EXTRN ?Button_MoveRight@@3UFButtonStatus@@A:BYTE ; Button_MoveRight + Line 1254: EXTRN ?Button_MoveLeft@@3UFButtonStatus@@A:BYTE ; Button_MoveLeft + Line 1255: EXTRN ?Button_Strafe@@3UFButtonStatus@@A:BYTE ; Button_Strafe + Line 1256: EXTRN ?Button_LookDown@@3UFButtonStatus@@A:BYTE ; Button_LookDown + Line 1257: EXTRN ?Button_LookUp@@3UFButtonStatus@@A:BYTE ; Button_LookUp + Line 1258: EXTRN ?Button_Back@@3UFButtonStatus@@A:BYTE ; Button_Back + Line 1259: EXTRN ?Button_Forward@@3UFButtonStatus@@A:BYTE ; Button_Forward + Line 1260: EXTRN ?Button_Right@@3UFButtonStatus@@A:BYTE ; Button_Right + Line 1261: EXTRN ?Button_Left@@3UFButtonStatus@@A:BYTE ; Button_Left + Line 1262: EXTRN ?Button_MoveDown@@3UFButtonStatus@@A:BYTE ; Button_MoveDown + Line 1263: EXTRN ?Button_MoveUp@@3UFButtonStatus@@A:BYTE ; Button_MoveUp + Line 1264: EXTRN ?Button_Jump@@3UFButtonStatus@@A:BYTE ; Button_Jump + Line 1265: EXTRN ?Button_ShowScores@@3UFButtonStatus@@A:BYTE ; Button_ShowScores + Line 1266: EXTRN ?Button_Crouch@@3UFButtonStatus@@A:BYTE ; Button_Crouch + Line 1267: EXTRN ?Button_Zoom@@3UFButtonStatus@@A:BYTE ; Button_Zoom + Line 1268: EXTRN ?Button_Reload@@3UFButtonStatus@@A:BYTE ; Button_Reload + Line 1269: EXTRN ?Button_User1@@3UFButtonStatus@@A:BYTE ; Button_User1 + Line 1270: EXTRN ?Button_User2@@3UFButtonStatus@@A:BYTE ; Button_User2 + Line 1271: EXTRN ?Button_User3@@3UFButtonStatus@@A:BYTE ; Button_User3 + Line 1272: EXTRN ?Button_User4@@3UFButtonStatus@@A:BYTE ; Button_User4 + Line 1273: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 1274: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 1275: EXTRN ?NetSpecs@@3PAY0CE@VFDynamicBuffer@@A:BYTE ; NetSpecs + Line 1276: EXTRN ?maketic@@3HA:DWORD ; maketic + Line 1277: EXTRN ?netcmds@@3PAY0CE@Uticcmd_t@@A:BYTE ; netcmds + Line 1278: EXTRN ?ticdup@@3HA:DWORD ; ticdup + Line 1279: EXTRN ?LocalViewAngle@@3IA:DWORD ; LocalViewAngle + Line 1280: EXTRN ?LocalViewPitch@@3HA:DWORD ; LocalViewPitch + Line 1281: EXTRN ?LocalKeyboardTurner@@3_NA:BYTE ; LocalKeyboardTurner + Line 1282: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 1283: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 1284: EXTRN ?sv_singleplayerrespawn@@3VFBoolCVar@@A:BYTE ; sv_singleplayerrespawn + Line 1285: EXTRN ?lenspot@@3PEAEEA:QWORD ; lenspot + Line 1286: EXTRN ?starttime@@3HA:DWORD ; starttime + Line 1287: EXTRN __ImageBase:BYTE + Line 1288: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\g_hub.cod (18 hits) + Line 31: EXTRN atexit:PROC + Line 32: EXTRN __std_terminate:PROC + Line 33: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 34: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 35: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 36: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 37: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 38: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 39: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 40: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 41: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 42: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 43: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 44: EXTRN __CxxFrameHandler3:PROC + Line 45: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 46: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 47: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 48: EXTRN ?save_full@@3_NA:BYTE ; save_full + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\g_level.cod (254 hits) + Line 67: EXTRN ?IsAlias@FConsoleCommand@@UEAA_NXZ:PROC ; FConsoleCommand::IsAlias + Line 68: EXTRN ?Run@FUnsafeConsoleCommand@@UEAAXAEAVFCommandLine@@PEAVAActor@@H@Z:PROC ; FUnsafeConsoleCommand::Run + Line 69: EXTRN ??_EFUnsafeConsoleCommand@@UEAAPEAXI@Z:PROC ; FUnsafeConsoleCommand::`vector deleting destructor' + Line 70: EXTRN ?gameaction@@3W4gameaction_t@@A:DWORD ; gameaction + Line 71: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 72: EXTRN ?multiplayernext@@3_NA:BYTE ; multiplayernext + Line 73: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 74: EXTRN ?newdemoname@@3VFString@@A:QWORD ; newdemoname + Line 75: EXTRN ?newdemomap@@3VFString@@A:QWORD ; newdemomap + Line 76: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 77: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 78: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 79: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 468: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 469: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 470: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 471: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 472: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 473: EXTRN atexit:PROC + Line 474: EXTRN __std_terminate:PROC + Line 475: EXTRN strtoll:PROC + Line 476: EXTRN strtoull:PROC + Line 477: EXTRN strstr:PROC + Line 478: EXTRN strncmp:PROC + Line 479: EXTRN stricmp:PROC + Line 480: EXTRN strnicmp:PROC + Line 481: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 482: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 483: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 484: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 485: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 486: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 487: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 488: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 489: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 490: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 491: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 492: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 493: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 494: EXTRN ?ToLower@FString@@QEAAXXZ:PROC ; FString::ToLower + Line 495: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 496: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 497: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 498: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAUacsdefered_t@@PEAU2@@Z:PROC ; Serialize + Line 499: EXTRN ?isValid@level_info_t@@QEAA_NXZ:PROC ; level_info_t::isValid + Line 500: EXTRN ?LookupLevelName@level_info_t@@QEAA?AVFString@@XZ:PROC ; level_info_t::LookupLevelName + Line 501: EXTRN ?CheckLevelRedirect@level_info_t@@QEAAPEAU1@XZ:PROC ; level_info_t::CheckLevelRedirect + Line 502: EXTRN ?CheckWarpTransMap@@YA_NAEAVFString@@_N@Z:PROC ; CheckWarpTransMap + Line 503: EXTRN ?FindClusterInfo@@YAPEAUcluster_info_t@@H@Z:PROC ; FindClusterInfo + Line 504: EXTRN ?FindLevelInfo@@YAPEAUlevel_info_t@@PEBD_N@Z:PROC ; FindLevelInfo + Line 505: EXTRN ?G_ClearSnapshots@@YAXXZ:PROC ; G_ClearSnapshots + Line 506: EXTRN ?P_RemoveDefereds@@YAXXZ:PROC ; P_RemoveDefereds + Line 507: EXTRN ?G_ClearHubInfo@@YAXXZ:PROC ; G_ClearHubInfo + Line 508: EXTRN ?G_SkillProperty@@YAHW4ESkillProperty@@@Z:PROC ; G_SkillProperty + Line 509: EXTRN ?Mark@GC@@YAXPEAPEAVDObject@@@Z:PROC ; GC::Mark + Line 510: EXTRN ?G_PlayerFinishLevel@@YAXHW4EFinishLevelType@@H@Z:PROC ; G_PlayerFinishLevel + Line 511: EXTRN ?S_ChangeMusic@@YA_NPEBDH_N1@Z:PROC ; S_ChangeMusic + Line 512: EXTRN ?S_ResumeSound@@YAX_N@Z:PROC ; S_ResumeSound + Line 513: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 514: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 515: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 516: EXTRN ?StaticClearRandom@FRandom@@SAXXZ:PROC ; FRandom::StaticClearRandom + Line 517: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 518: EXTRN ?ForceSet@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@_N@Z:PROC ; FBaseCVar::ForceSet + Line 519: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 520: EXTRN ?UnlatchCVars@@YAXXZ:PROC ; UnlatchCVars + Line 521: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 522: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 523: EXTRN ?C_RestoreCVars@@YAXXZ:PROC ; C_RestoreCVars + Line 524: EXTRN ?WI_Start@@YAXPEAUwbstartstruct_t@@@Z:PROC ; WI_Start + Line 525: EXTRN ?GetWadName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetWadName + Line 526: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 527: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 528: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 529: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 530: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 531: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 532: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 533: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 534: EXTRN ?StaticPointerSubstitution@DObject@@SAXPEAVAActor@@0@Z:PROC ; DObject::StaticPointerSubstitution + Line 535: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 536: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 537: EXTRN ?AM_Stop@@YAXXZ:PROC ; AM_Stop + Line 538: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 539: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 540: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 541: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 542: EXTRN ?ResetButtonStates@@YAXXZ:PROC ; ResetButtonStates + Line 543: EXTRN ?P_OpenMapData@@YAPEAUMapData@@PEBD_N@Z:PROC ; P_OpenMapData + Line 544: EXTRN ?P_CheckMapData@@YA_NPEBD@Z:PROC ; P_CheckMapData + Line 545: EXTRN ?P_SetupLevel@@YAXPEAUFLevelLocals@@H_N@Z:PROC ; P_SetupLevel + Line 546: EXTRN ?P_PlayerStartStomp@@YAXPEAVAActor@@_N@Z:PROC ; P_PlayerStartStomp + Line 547: EXTRN ?P_ResetSightCounters@@YAX_N@Z:PROC ; P_ResetSightCounters + Line 548: EXTRN ?P_FindFloorCeiling@@YAXPEAVAActor@@H@Z:PROC ; P_FindFloorCeiling + Line 549: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 550: EXTRN ?GetTextureID@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::GetTextureID + Line 551: EXTRN ?InitSkyMap@@YAXPEAUFLevelLocals@@@Z:PROC ; InitSkyMap + Line 552: EXTRN ?C_HideConsole@@YAXXZ:PROC ; C_HideConsole + Line 553: EXTRN ?C_FlushDisplay@@YAXXZ:PROC ; C_FlushDisplay + Line 554: EXTRN ?F_StartIntermission@@YAXVFName@@E@Z:PROC ; F_StartIntermission + Line 555: EXTRN ?F_StartFinale@@YAXPEBDHHI00HHH_NVFName@@@Z:PROC ; F_StartFinale + Line 556: EXTRN ?DestroyThinkers@FThinkerList@@QEAAXXZ:PROC ; FThinkerList::DestroyThinkers + Line 557: EXTRN ?MarkRoots@FThinkerCollection@@QEAAXXZ:PROC ; FThinkerCollection::MarkRoots + Line 558: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 559: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 560: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 561: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 562: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 563: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 564: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 565: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 566: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 567: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 568: EXTRN ?ChangeStatNum@DThinker@@QEAAXH@Z:PROC ; DThinker::ChangeStatNum + Line 569: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 570: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 571: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 572: EXTRN ?P_ClearACSVars@@YAX_N@Z:PROC ; P_ClearACSVars + Line 573: EXTRN ?LockLevelVarStrings@FBehaviorContainer@@QEAAXH@Z:PROC ; FBehaviorContainer::LockLevelVarStrings + Line 574: EXTRN ?UnlockLevelVarStrings@FBehaviorContainer@@QEAAXH@Z:PROC ; FBehaviorContainer::UnlockLevelVarStrings + Line 575: EXTRN ?StartTypedScripts@FBehaviorContainer@@QEAAXGPEAVAActor@@_NH1@Z:PROC ; FBehaviorContainer::StartTypedScripts + Line 576: EXTRN ?FindInventory@AActor@@QEAAPEAV1@VFName@@_N@Z:PROC ; AActor::FindInventory + Line 577: EXTRN ?AddToHash@AActor@@QEAAXXZ:PROC ; AActor::AddToHash + Line 578: EXTRN ?RemoveFromHash@AActor@@QEAAXXZ:PROC ; AActor::RemoveFromHash + Line 579: EXTRN ?LinkToWorld@AActor@@QEAAXPEAUFLinkContext@@_NPEAUsector_t@@@Z:PROC ; AActor::LinkToWorld + Line 580: EXTRN ?UnlinkFromWorld@AActor@@QEAAXPEAUFLinkContext@@@Z:PROC ; AActor::UnlinkFromWorld + Line 581: EXTRN ?SetState@AActor@@QEAA_NPEAUFState@@_N@Z:PROC ; AActor::SetState + Line 582: EXTRN ?DeleteAttachedLights@AActor@@QEAAXXZ:PROC ; AActor::DeleteAttachedLights + Line 583: EXTRN ?Clear@FWeaponSlots@@QEAAXXZ:PROC ; FWeaponSlots::Clear + Line 584: EXTRN ??1FCajunMaster@@QEAA@XZ:PROC ; FCajunMaster::~FCajunMaster + Line 585: EXTRN ?Init@FCajunMaster@@QEAAXXZ:PROC ; FCajunMaster::Init + Line 586: EXTRN ?End@FCajunMaster@@QEAAXXZ:PROC ; FCajunMaster::End + Line 587: EXTRN ?RemoveAllBots@FCajunMaster@@QEAAXPEAUFLevelLocals@@_N@Z:PROC ; FCajunMaster::RemoveAllBots + Line 588: EXTRN ?StartTravel@FCajunMaster@@QEAAXXZ:PROC ; FCajunMaster::StartTravel + Line 589: EXTRN ?FinishTravel@FCajunMaster@@QEAAXXZ:PROC ; FCajunMaster::FinishTravel + Line 590: EXTRN ?DetachAllMessages@DBaseStatusBar@@QEAAXXZ:PROC ; DBaseStatusBar::DetachAllMessages + Line 591: EXTRN ?AttachToPlayer@DBaseStatusBar@@QEAAXPEAVplayer_t@@@Z:PROC ; DBaseStatusBar::AttachToPlayer + Line 592: EXTRN ?ST_CreateStatusBar@@YAX_N@Z:PROC ; ST_CreateStatusBar + Line 593: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 594: EXTRN ?D_SetupUserInfo@@YAXXZ:PROC ; D_SetupUserInfo + Line 595: EXTRN ??1userinfo_t@@QEAA@XZ:PROC ; userinfo_t::~userinfo_t + Line 596: EXTRN ??1player_t@@QEAA@XZ:PROC ; player_t::~player_t + Line 597: EXTRN ?SetLogText@player_t@@QEAAXPEBD@Z:PROC ; player_t::SetLogText + Line 598: EXTRN ?SendPitchLimits@player_t@@QEBAXXZ:PROC ; player_t::SendPitchLimits + Line 599: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 600: EXTRN ?OpenWriter@FSerializer@@QEAA_N_N@Z:PROC ; FSerializer::OpenWriter + Line 601: EXTRN ?OpenReader@FSerializer@@QEAA_NPEAUFCompressedBuffer@@@Z:PROC ; FSerializer::OpenReader + Line 602: EXTRN ?Close@FSerializer@@QEAAXXZ:PROC ; FSerializer::Close + Line 603: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 604: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 605: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 606: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 607: EXTRN ?GetKey@FSerializer@@QEAAPEBDXZ:PROC ; FSerializer::GetKey + Line 608: EXTRN ?GetCompressedOutput@FSerializer@@QEAA?AUFCompressedBuffer@@XZ:PROC ; FSerializer::GetCompressedOutput + Line 609: EXTRN ?AddString@FSerializer@@QEAAAEAV1@PEBD0@Z:PROC ; FSerializer::AddString + Line 610: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 611: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFString@@PEAV2@@Z:PROC ; Serialize + Line 612: EXTRN ??$Serialize@VPClassActor@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAVPClassActor@@PEAPEAV1@@Z:PROC ; Serialize + Line 613: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 614: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 615: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 616: EXTRN ?E_WorldLoaded@@YAXXZ:PROC ; E_WorldLoaded + Line 617: EXTRN ?E_WorldUnloaded@@YAXXZ:PROC ; E_WorldUnloaded + Line 618: EXTRN ?E_WorldLoadedUnsafe@@YAXXZ:PROC ; E_WorldLoadedUnsafe + Line 619: EXTRN ?E_WorldUnloadedUnsafe@@YAXXZ:PROC ; E_WorldUnloadedUnsafe + Line 620: EXTRN ?E_PlayerEntered@@YAXH_N@Z:PROC ; E_PlayerEntered + Line 621: EXTRN ?E_NewGame@@YAXW4EventHandlerType@@@Z:PROC ; E_NewGame + Line 622: EXTRN ?I_SetMusicVolume@@YAXN@Z:PROC ; I_SetMusicVolume + Line 623: EXTRN ?P_InitParticles@@YAXPEAUFLevelLocals@@@Z:PROC ; P_InitParticles + Line 624: EXTRN ?P_ClearParticles@@YAXPEAUFLevelLocals@@@Z:PROC ; P_ClearParticles + Line 625: EXTRN ?Mark@FCanvasTextureInfo@@QEAAXXZ:PROC ; FCanvasTextureInfo::Mark + Line 626: EXTRN ?DoDeferedScripts@FLevelLocals@@QEAAXXZ:PROC ; FLevelLocals::DoDeferedScripts + Line 627: EXTRN ?SpawnPlayer@FLevelLocals@@QEAAPEAVAActor@@PEAUFPlayerStart@@HH@Z:PROC ; FLevelLocals::SpawnPlayer + Line 628: EXTRN ?Serialize@FLevelLocals@@QEAAXAEAVFSerializer@@_N@Z:PROC ; FLevelLocals::Serialize + Line 629: EXTRN ?DoReborn@FLevelLocals@@QEAAXH_N@Z:PROC ; FLevelLocals::DoReborn + Line 630: EXTRN ?PickPlayerStart@FLevelLocals@@QEAAPEAUFPlayerStart@@HH@Z:PROC ; FLevelLocals::PickPlayerStart + Line 631: EXTRN ?PointInRenderSubsector@FLevelLocals@@QEAAPEAUsubsector_t@@HH@Z:PROC ; FLevelLocals::PointInRenderSubsector + Line 632: EXTRN ?P_FreeStrifeConversations@@YAXXZ:PROC ; P_FreeStrifeConversations + Line 633: EXTRN ?G_LeavingHub@@YAXPEAUFLevelLocals@@HPEAUcluster_info_t@@PEAUwbstartstruct_t@@@Z:PROC ; G_LeavingHub + Line 634: EXTRN ?I_GetTime@@YAHXZ:PROC ; I_GetTime + Line 635: EXTRN ?STAT_StartNewGame@@YAXPEBD@Z:PROC ; STAT_StartNewGame + Line 636: EXTRN ?STAT_ChangeLevel@@YAXPEBDPEAUFLevelLocals@@@Z:PROC ; STAT_ChangeLevel + Line 637: EXTRN ?G_VerifySkill@@YAXXZ:PROC ; G_VerifySkill + Line 638: EXTRN ??_EDAutosaver@@UEAAPEAXI@Z:PROC ; DAutosaver::`vector deleting destructor' + Line 639: EXTRN ??_EDSectorMarker@@UEAAPEAXI@Z:PROC ; DSectorMarker::`vector deleting destructor' + Line 640: EXTRN __CxxFrameHandler3:PROC + Line 641: EXTRN memset:PROC + Line 642: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 643: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 644: EXTRN ?D_DrawIcon@@3PEBDEB:QWORD ; D_DrawIcon + Line 645: EXTRN ?wadlevelinfos@@3V?$TArray@Ulevel_info_t@@U1@@@A:BYTE ; wadlevelinfos + Line 646: EXTRN ?AllEpisodes@@3V?$TArray@UFEpisode@@U1@@@A:BYTE ; AllEpisodes + Line 647: EXTRN ?Gray@GC@@3PEAVDObject@@EA:QWORD ; GC::Gray + Line 648: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 649: EXTRN ?wipegamestate@@3W4gamestate_t@@A:DWORD ; wipegamestate + Line 650: EXTRN ?SendItemUse@@3PEBVAActor@@EB:QWORD ; SendItemUse + Line 651: EXTRN ?SendItemDrop@@3PEBVAActor@@EB:QWORD ; SendItemDrop + Line 652: EXTRN ?rngseed@@3IA:DWORD ; rngseed + Line 653: EXTRN ?staticrngseed@@3IA:DWORD ; staticrngseed + Line 654: EXTRN ?use_staticrng@@3_NA:BYTE ; use_staticrng + Line 655: EXTRN ?GameSpeed@@3W4EGameSpeed@@A:DWORD ; GameSpeed + Line 656: EXTRN ?gameskill@@3VFIntCVar@@A:BYTE ; gameskill + Line 657: EXTRN ?NextSkill@@3HA:DWORD ; NextSkill + Line 658: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 659: EXTRN ?alwaysapplydmflags@@3VFBoolCVar@@A:BYTE ; alwaysapplydmflags + Line 660: EXTRN ?teamplay@@3VFBoolCVar@@A:BYTE ; teamplay + Line 661: EXTRN ?teamdamage@@3VFFloatCVar@@A:BYTE ; teamdamage + Line 662: EXTRN ?SinglePlayerClass@@3PAHA:BYTE ; SinglePlayerClass + Line 663: EXTRN ?automapactive@@3_NA:BYTE ; automapactive + Line 664: EXTRN ?paused@@3HA:DWORD ; paused + Line 665: EXTRN ?viewactive@@3_NA:BYTE ; viewactive + Line 666: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 667: EXTRN ?usergame@@3_NA:BYTE ; usergame + Line 668: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 669: EXTRN ?demorecording@@3_NA:BYTE ; demorecording + Line 670: EXTRN ?SaveVersion@@3HA:DWORD ; SaveVersion + Line 671: EXTRN ?gametic@@3HA:DWORD ; gametic + Line 672: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 673: EXTRN ?setsizeneeded@@3_NA:BYTE ; setsizeneeded + Line 674: EXTRN ?Net_Arbitrator@@3HA:DWORD ; Net_Arbitrator + Line 675: EXTRN ?dmflags@@3VFIntCVar@@A:BYTE ; dmflags + Line 676: EXTRN ?dmflags2@@3VFIntCVar@@A:BYTE ; dmflags2 + Line 677: EXTRN ?compatflags@@3VFIntCVar@@A:BYTE ; compatflags + Line 678: EXTRN ?compatflags2@@3VFIntCVar@@A:BYTE ; compatflags2 + Line 679: EXTRN ?wminfo@@3Uwbstartstruct_t@@A:BYTE ; wminfo + Line 680: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 681: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 682: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 683: EXTRN ?BaseBlendA@@3MA:DWORD ; BaseBlendA + Line 684: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 685: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 686: EXTRN ?SBarInfoScript@@3PAPEAUSBarInfo@@A:BYTE ; SBarInfoScript + Line 687: EXTRN ?PlayerClasses@@3V?$TArray@VFPlayerClass@@V1@@@A:BYTE ; PlayerClasses + Line 688: EXTRN ?LocalViewAngle@@3IA:DWORD ; LocalViewAngle + Line 689: EXTRN ?LocalViewPitch@@3HA:DWORD ; LocalViewPitch + Line 690: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 691: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 692: EXTRN ?save_formatted@@3VFBoolCVar@@A:BYTE ; save_formatted + Line 693: EXTRN ?sv_gravity@@3VFFloatCVar@@A:BYTE ; sv_gravity + Line 694: EXTRN ?sv_aircontrol@@3VFFloatCVar@@A:BYTE ; sv_aircontrol + Line 695: EXTRN ?disableautosave@@3VFIntCVar@@A:BYTE ; disableautosave + Line 696: EXTRN ?playerclass@@3VFStringCVar@@A:BYTE ; playerclass + Line 697: EXTRN ?TheDefaultLevelInfo@@3Ulevel_info_t@@A:BYTE ; TheDefaultLevelInfo + Line 698: EXTRN ?timingdemo@@3_NA:BYTE ; timingdemo + Line 699: EXTRN ?BackupSaveName@@3VFString@@A:QWORD ; BackupSaveName + Line 700: EXTRN ?mousex@@3HA:DWORD ; mousex + Line 701: EXTRN ?mousey@@3HA:DWORD ; mousey + Line 702: EXTRN ?sendpause@@3_NA:BYTE ; sendpause + Line 703: EXTRN ?sendsave@@3_NA:BYTE ; sendsave + Line 704: EXTRN ?sendturn180@@3_NA:BYTE ; sendturn180 + Line 705: EXTRN ?SendLand@@3_NA:BYTE ; SendLand + Line 706: EXTRN ?NoWipe@@3HA:DWORD ; NoWipe + Line 707: EXTRN ?sv_singleplayerrespawn@@3VFBoolCVar@@A:BYTE ; sv_singleplayerrespawn + Line 708: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\g_mapinfo.cod (96 hits) + Line 267: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 2135: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 2136: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 2137: EXTRN atexit:PROC + Line 2138: EXTRN __std_terminate:PROC + Line 2139: EXTRN atoi:PROC + Line 2140: EXTRN strtoul:PROC + Line 2141: EXTRN strchr:PROC + Line 2142: EXTRN strstr:PROC + Line 2143: EXTRN stricmp:PROC + Line 2144: EXTRN strnicmp:PROC + Line 2145: EXTRN tolower:PROC + Line 2146: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 2147: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 2148: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 2149: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 2150: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 2151: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 2152: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 2153: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 2154: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 2155: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 2156: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 2157: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 2158: EXTRN ?ToUpper@FString@@QEAAXXZ:PROC ; FString::ToUpper + Line 2159: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 2160: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 2161: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 2162: EXTRN mysnprintf:PROC + Line 2163: EXTRN c_sqrt:PROC + Line 2164: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 2165: EXTRN ??0FScanner@@QEAA@AEBV0@@Z:PROC ; FScanner::FScanner + Line 2166: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 2167: EXTRN ??4FScanner@@QEAAAEAV0@AEBV0@@Z:PROC ; FScanner::operator= + Line 2168: EXTRN ?OpenLumpNum@FScanner@@QEAAXH@Z:PROC ; FScanner::OpenLumpNum + Line 2169: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 2170: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 2171: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 2172: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 2173: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 2174: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 2175: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 2176: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 2177: EXTRN ?CheckFloat@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckFloat + Line 2178: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 2179: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 2180: EXTRN ?MatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MatchString + Line 2181: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 2182: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 2183: EXTRN ?ParseGameInfo@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseGameInfo + Line 2184: EXTRN ?ParseSkill@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseSkill + Line 2185: EXTRN ?ParseIntermission@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseIntermission + Line 2186: EXTRN ?ParseDoomEdNums@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseDoomEdNums + Line 2187: EXTRN ?ParseSpawnNums@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseSpawnNums + Line 2188: EXTRN ?ParseConversationIDs@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseConversationIDs + Line 2189: EXTRN ?ParseAMColors@FMapInfoParser@@QEAAX_N@Z:PROC ; FMapInfoParser::ParseAMColors + Line 2190: EXTRN ?CheckEndSequence@FMapInfoParser@@QEAA?AVFName@@XZ:PROC ; FMapInfoParser::CheckEndSequence + Line 2191: EXTRN ?ParseDamageDefinition@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseDamageDefinition + Line 2192: EXTRN ?ParseUMapInfo@@YAHH@Z:PROC ; ParseUMapInfo + Line 2193: EXTRN ?CommitUMapinfo@@YAXPEAUlevel_info_t@@@Z:PROC ; CommitUMapinfo + Line 2194: EXTRN ?GetWadFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetWadFullName + Line 2195: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDHH_N@Z:PROC ; FWadCollection::CheckNumForName + Line 2196: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 2197: EXTRN ?GetNumForFullName@FWadCollection@@QEAAHPEBD@Z:PROC ; FWadCollection::GetNumForFullName + Line 2198: EXTRN ?FindLumpMulti@FWadCollection@@QEAAHPEAPEBDPEAH_N1@Z:PROC ; FWadCollection::FindLumpMulti + Line 2199: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 2200: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 2201: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 2202: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 2203: EXTRN ?V_GetColor@@YAHPEBIAEAVFScanner@@@Z:PROC ; V_GetColor + Line 2204: EXTRN ?P_FindLineSpecial@@YAHPEBDPEAH1@Z:PROC ; P_FindLineSpecial + Line 2205: EXTRN ?P_CheckMapData@@YA_NPEBD@Z:PROC ; P_CheckMapData + Line 2206: EXTRN ??AFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator[] + Line 2207: EXTRN ?UnlockAll@ACSStringPool@@QEAAXXZ:PROC ; ACSStringPool::UnlockAll + Line 2208: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 2209: EXTRN ?S_FindEnvironment@@YAPEAUReverbContainer@@PEBD@Z:PROC ; S_FindEnvironment + Line 2210: EXTRN ?FindInventory@AActor@@QEAAPEAV1@PEAVPClassActor@@_N@Z:PROC ; AActor::FindInventory + Line 2211: EXTRN ?DeinitIntermissions@@YAXXZ:PROC ; DeinitIntermissions + Line 2212: EXTRN __CxxFrameHandler3:PROC + Line 2213: EXTRN memmove:PROC + Line 2214: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 2215: EXTRN ?AllSkills@@3V?$TArray@UFSkillInfo@@U1@@@A:BYTE ; AllSkills + Line 2216: EXTRN ?DefaultSkill@@3HA:DWORD ; DefaultSkill + Line 2217: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 2218: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 2219: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 2220: EXTRN ?GlobalACSStrings@@3VACSStringPool@@A:BYTE ; GlobalACSStrings + Line 2221: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 2222: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 2223: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 2224: EXTRN ?YRegHead@@3QEAXEA:QWORD ; YRegHead + Line 2225: EXTRN ?YRegTail@@3QEAXEA:QWORD ; YRegTail + Line 2226: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 2227: EXTRN ?HexenMusic@@3V?$TMap@HVFString@@U?$THashTraits@H@@U?$TValueTraits@VFString@@@@@@A:BYTE ; HexenMusic + Line 2228: EXTRN __ImageBase:BYTE + Line 2229: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\g_skill.cod (47 hits) + Line 139: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 140: EXTRN atexit:PROC + Line 141: EXTRN __std_terminate:PROC + Line 142: EXTRN tolower:PROC + Line 143: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 144: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 145: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 146: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 147: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 148: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 149: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 150: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 151: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 152: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 153: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 154: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 155: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 156: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 157: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 158: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 159: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 160: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 161: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 162: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 163: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 164: EXTRN ?ParseOpenBrace@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseOpenBrace + Line 165: EXTRN ?ParseCloseBrace@FMapInfoParser@@QEAA_NXZ:PROC ; FMapInfoParser::ParseCloseBrace + Line 166: EXTRN ?CheckAssign@FMapInfoParser@@QEAA_NXZ:PROC ; FMapInfoParser::CheckAssign + Line 167: EXTRN ?ParseAssign@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseAssign + Line 168: EXTRN ?ParseComma@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseComma + Line 169: EXTRN ?SkipToNext@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::SkipToNext + Line 170: EXTRN ?CheckEndOfFile@FMapInfoParser@@QEAAXPEBD@Z:PROC ; FMapInfoParser::CheckEndOfFile + Line 171: EXTRN ?V_ParseFontColor@@YA?AW4EColorRange@@AEAPEBEHH@Z:PROC ; V_ParseFontColor + Line 172: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 173: EXTRN __CxxFrameHandler3:PROC + Line 174: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 175: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 176: EXTRN ?gameskill@@3VFIntCVar@@A:BYTE ; gameskill + Line 177: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 178: EXTRN ?infighting@@3VFIntCVar@@A:BYTE ; infighting + Line 179: EXTRN ?dmflags@@3VFIntCVar@@A:BYTE ; dmflags + Line 180: EXTRN ?dmflags2@@3VFIntCVar@@A:BYTE ; dmflags2 + Line 181: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 182: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 183: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 184: EXTRN __ImageBase:BYTE + Line 185: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gameconfigfile.cod (86 hits) + Line 161: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 162: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 163: EXTRN atexit:PROC + Line 164: EXTRN atof:PROC + Line 165: EXTRN strncpy:PROC + Line 166: EXTRN stricmp:PROC + Line 167: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 168: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 169: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 170: EXTRN ??HFString@@QEBA?AV0@PEBD@Z:PROC ; FString::operator+ + Line 171: EXTRN ?LastIndexOf@FString@@QEBAJD@Z:PROC ; FString::LastIndexOf + Line 172: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 173: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 174: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 175: EXTRN mysnprintf:PROC + Line 176: EXTRN ?Printf@FileWriter@@QEAA_KPEBDZZ:PROC ; FileWriter::Printf + Line 177: EXTRN ??0FConfigFile@@QEAA@XZ:PROC ; FConfigFile::FConfigFile + Line 178: EXTRN ??1FConfigFile@@UEAA@XZ:PROC ; FConfigFile::~FConfigFile + Line 179: EXTRN ?CreateSectionAtStart@FConfigFile@@QEAAXPEBD@Z:PROC ; FConfigFile::CreateSectionAtStart + Line 180: EXTRN ?MoveSectionToStart@FConfigFile@@QEAAXPEBD@Z:PROC ; FConfigFile::MoveSectionToStart + Line 181: EXTRN ?SetSectionNote@FConfigFile@@QEAAXPEBD0@Z:PROC ; FConfigFile::SetSectionNote + Line 182: EXTRN ?SetSection@FConfigFile@@QEAA_NPEBD_N@Z:PROC ; FConfigFile::SetSection + Line 183: EXTRN ?SetFirstSection@FConfigFile@@QEAA_NXZ:PROC ; FConfigFile::SetFirstSection + Line 184: EXTRN ?SetNextSection@FConfigFile@@QEAA_NXZ:PROC ; FConfigFile::SetNextSection + Line 185: EXTRN ?GetCurrentSection@FConfigFile@@QEBAPEBDXZ:PROC ; FConfigFile::GetCurrentSection + Line 186: EXTRN ?ClearCurrentSection@FConfigFile@@QEAAXXZ:PROC ; FConfigFile::ClearCurrentSection + Line 187: EXTRN ?DeleteCurrentSection@FConfigFile@@QEAA_NXZ:PROC ; FConfigFile::DeleteCurrentSection + Line 188: EXTRN ?SectionIsEmpty@FConfigFile@@QEAA_NXZ:PROC ; FConfigFile::SectionIsEmpty + Line 189: EXTRN ?NextInSection@FConfigFile@@QEAA_NAEAPEBD0@Z:PROC ; FConfigFile::NextInSection + Line 190: EXTRN ?GetValueForKey@FConfigFile@@QEBAPEBDPEBD@Z:PROC ; FConfigFile::GetValueForKey + Line 191: EXTRN ?SetValueForKey@FConfigFile@@QEAAXPEBD0_N@Z:PROC ; FConfigFile::SetValueForKey + Line 192: EXTRN ?ChangePathName@FConfigFile@@QEAAXPEBD@Z:PROC ; FConfigFile::ChangePathName + Line 193: EXTRN ?LoadConfigFile@FConfigFile@@QEAAXXZ:PROC ; FConfigFile::LoadConfigFile + Line 194: EXTRN ?ReadLine@FConfigFile@@MEBAPEADPEADHPEAX@Z:PROC ; FConfigFile::ReadLine + Line 195: EXTRN ?RenameSection@FConfigFile@@IEBAXPEBD0@Z:PROC ; FConfigFile::RenameSection + Line 196: EXTRN ??_EFGameConfigFile@@UEAAPEAXI@Z:PROC ; FGameConfigFile::`vector deleting destructor' + Line 197: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 198: EXTRN ?ResetToDefault@FBaseCVar@@QEAAXXZ:PROC ; FBaseCVar::ResetToDefault + Line 199: EXTRN ?FindCVar@@YAPEAVFBaseCVar@@PEBDPEAPEAV1@@Z:PROC ; FindCVar + Line 200: EXTRN ?C_ArchiveCVars@@YAXPEAVFConfigFile@@I@Z:PROC ; C_ArchiveCVars + Line 201: EXTRN ?SetGenericRepDefault@FBoolCVar@@UEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBoolCVar::SetGenericRepDefault + Line 202: EXTRN ?SetGenericRepDefault@FIntCVar@@UEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FIntCVar::SetGenericRepDefault + Line 203: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 204: EXTRN ?SetGenericRepDefault@FColorCVar@@UEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FColorCVar::SetGenericRepDefault + Line 205: EXTRN ?C_ArchiveAliases@@YAXPEAVFConfigFile@@@Z:PROC ; C_ArchiveAliases + Line 206: EXTRN ?C_SetAlias@@YAXPEBD0@Z:PROC ; C_SetAlias + Line 207: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 208: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 209: EXTRN ?ArchiveBindings@FKeyBindings@@QEAAXPEAVFConfigFile@@PEBD@Z:PROC ; FKeyBindings::ArchiveBindings + Line 210: EXTRN ?UnbindAll@FKeyBindings@@QEAAXXZ:PROC ; FKeyBindings::UnbindAll + Line 211: EXTRN ?DoBind@FKeyBindings@@QEAAXPEBD0@Z:PROC ; FKeyBindings::DoBind + Line 212: EXTRN ?C_SetDefaultBindings@@YAXXZ:PROC ; C_SetDefaultBindings + Line 213: EXTRN ?AppendArg@FArgs@@QEAAXVFString@@@Z:PROC ; FArgs::AppendArg + Line 214: EXTRN ?CheckValue@FArgs@@QEBAPEBDPEBD@Z:PROC ; FArgs::CheckValue + Line 215: EXTRN ?FileExists@@YA_NPEBD@Z:PROC ; FileExists + Line 216: EXTRN ?myasctime@@YAPEBDXZ:PROC ; myasctime + Line 217: EXTRN ?ExpandEnvVars@@YA?AVFString@@PEBD@Z:PROC ; ExpandEnvVars + Line 218: EXTRN ?GetVersionString@@YAPEBDXZ:PROC ; GetVersionString + Line 219: EXTRN ?M_SaveCustomKeys@@YAXPEAVFConfigFile@@PEAD1_K@Z:PROC ; M_SaveCustomKeys + Line 220: EXTRN ?M_GetAutoexecPath@@YA?AVFString@@XZ:PROC ; M_GetAutoexecPath + Line 221: EXTRN ?M_GetConfigPath@@YA?AVFString@@_N@Z:PROC ; M_GetConfigPath + Line 222: EXTRN __CxxFrameHandler3:PROC + Line 223: EXTRN strcmp:PROC + Line 224: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 225: EXTRN ?Bindings@@3VFKeyBindings@@A:BYTE ; Bindings + Line 226: EXTRN ?DoubleBindings@@3VFKeyBindings@@A:BYTE ; DoubleBindings + Line 227: EXTRN ?AutomapBindings@@3VFKeyBindings@@A:BYTE ; AutomapBindings + Line 228: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 229: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 230: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 231: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 232: EXTRN ?con_centernotify@@3VFBoolCVar@@A:BYTE ; con_centernotify + Line 233: EXTRN ?msg0color@@3VFIntCVar@@A:BYTE ; msg0color + Line 234: EXTRN ?color@@3VFColorCVar@@A:BYTE ; color + Line 235: EXTRN ?msgmidcolor@@3VFIntCVar@@A:BYTE ; msgmidcolor + Line 236: EXTRN ?msgmidcolor2@@3VFIntCVar@@A:BYTE ; msgmidcolor2 + Line 237: EXTRN ?snd_pitched@@3VFBoolCVar@@A:BYTE ; snd_pitched + Line 238: EXTRN ?am_wallcolor@@3VFColorCVar@@A:BYTE ; am_wallcolor + Line 239: EXTRN ?am_fdwallcolor@@3VFColorCVar@@A:BYTE ; am_fdwallcolor + Line 240: EXTRN ?am_cdwallcolor@@3VFColorCVar@@A:BYTE ; am_cdwallcolor + Line 241: EXTRN ?spc_amp@@3VFFloatCVar@@A:BYTE ; spc_amp + Line 242: EXTRN ?wi_percents@@3VFBoolCVar@@A:BYTE ; wi_percents + Line 243: EXTRN ?gl_texture_hqresizemode@@3VFIntCVar@@A:BYTE ; gl_texture_hqresizemode + Line 244: EXTRN ?gl_texture_hqresizemult@@3VFIntCVar@@A:BYTE ; gl_texture_hqresizemult + Line 245: EXTRN __ImageBase:BYTE + Line 246: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gens_opn2.cod (17 hits) + Line 48: EXTRN _purecall:PROC + Line 49: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 50: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 51: EXTRN ??_EOPNChipBase@@UEAAPEAXI@Z:PROC ; OPNChipBase::`vector deleting destructor' + Line 52: EXTRN ??_E?$OPNChipBaseT@VGensOPN2@@@@UEAAPEAXI@Z:PROC ; OPNChipBaseT::`vector deleting destructor' + Line 53: EXTRN ??_E?$OPNChipBaseBufferedT@VGensOPN2@@$0BAA@@@UEAAPEAXI@Z:PROC ; OPNChipBaseBufferedT::`vector deleting destructor' + Line 54: EXTRN ??_EGensOPN2@@UEAAPEAXI@Z:PROC ; GensOPN2::`vector deleting destructor' + Line 55: EXTRN ??1Ym2612_Emu@@QEAA@XZ:PROC ; Ym2612_Emu::~Ym2612_Emu + Line 56: EXTRN ?set_rate@Ym2612_Emu@@QEAAPEBDNN@Z:PROC ; Ym2612_Emu::set_rate + Line 57: EXTRN ?reset@Ym2612_Emu@@QEAAXXZ:PROC ; Ym2612_Emu::reset + Line 58: EXTRN ?write0@Ym2612_Emu@@QEAAXHH@Z:PROC ; Ym2612_Emu::write0 + Line 59: EXTRN ?write1@Ym2612_Emu@@QEAAXHH@Z:PROC ; Ym2612_Emu::write1 + Line 60: EXTRN ?write_pan@Ym2612_Emu@@QEAAXHH@Z:PROC ; Ym2612_Emu::write_pan + Line 61: EXTRN ?run@Ym2612_Emu@@QEAAXHPEAF@Z:PROC ; Ym2612_Emu::run + Line 62: EXTRN __CxxFrameHandler3:PROC + Line 63: EXTRN memset:PROC + Line 64: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gi.cod (38 hits) + Line 493: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 494: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 495: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 496: EXTRN atexit:PROC + Line 497: EXTRN __std_terminate:PROC + Line 498: EXTRN atoi:PROC + Line 499: EXTRN strchr:PROC + Line 500: EXTRN stricmp:PROC + Line 501: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 502: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 503: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 504: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 505: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 506: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 507: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 508: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 509: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 510: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 511: EXTRN ?GetToken@FScanner@@QEAA_NXZ:PROC ; FScanner::GetToken + Line 512: EXTRN ?TokenMustBe@FScanner@@QEAAXH@Z:PROC ; FScanner::TokenMustBe + Line 513: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 514: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 515: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 516: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 517: EXTRN ?MustGetValue@FScanner@@QEAAX_N@Z:PROC ; FScanner::MustGetValue + Line 518: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 519: EXTRN ?MustMatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MustMatchString + Line 520: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 521: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 522: EXTRN ?V_GetColorFromString@@YAHPEBIPEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColorFromString + Line 523: EXTRN ?V_GetColorStringByName@@YA?AVFString@@PEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColorStringByName + Line 524: EXTRN ?SkipToNext@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::SkipToNext + Line 525: EXTRN __CxxFrameHandler3:PROC + Line 526: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 527: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 528: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 529: EXTRN ?turbo@@3VFFloatCVar@@A:BYTE ; turbo + Line 530: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_buffers.cod (22 hits) + Line 41: EXTRN _purecall:PROC + Line 42: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 43: EXTRN ??_EIBuffer@@UEAAPEAXI@Z:PROC ; IBuffer::`vector deleting destructor' + Line 44: EXTRN ??_EGLBuffer@OpenGLRenderer@@MEAAPEAXI@Z:PROC ; OpenGLRenderer::GLBuffer::`vector deleting destructor' + Line 45: EXTRN __CxxFrameHandler3:PROC + Line 46: EXTRN _ptrc_glBufferStorage:QWORD + Line 47: EXTRN _ptrc_glBindBuffer:QWORD + Line 48: EXTRN _ptrc_glBufferData:QWORD + Line 49: EXTRN _ptrc_glBufferSubData:QWORD + Line 50: EXTRN _ptrc_glDeleteBuffers:QWORD + Line 51: EXTRN _ptrc_glGenBuffers:QWORD + Line 52: EXTRN _ptrc_glUnmapBuffer:QWORD + Line 53: EXTRN _ptrc_glDisableVertexAttribArray:QWORD + Line 54: EXTRN _ptrc_glEnableVertexAttribArray:QWORD + Line 55: EXTRN _ptrc_glVertexAttribPointer:QWORD + Line 56: EXTRN _ptrc_glBindBufferBase:QWORD + Line 57: EXTRN _ptrc_glBindBufferRange:QWORD + Line 58: EXTRN _ptrc_glMapBufferRange:QWORD + Line 59: EXTRN _ptrc_glCopyBufferSubData:QWORD + Line 60: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 61: EXTRN ?gl_RenderState@OpenGLRenderer@@3VFGLRenderState@1@A:BYTE ; OpenGLRenderer::gl_RenderState + Line 62: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_debug.cod (50 hits) + Line 17: EXTRN ??_EStat_gpu@OpenGLRenderer@@UEAAPEAXI@Z:PROC ; OpenGLRenderer::Stat_gpu::`vector deleting destructor' + Line 119: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 120: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 121: EXTRN atexit:PROC + Line 122: EXTRN _Init_thread_header:PROC + Line 123: EXTRN _Init_thread_abort:PROC + Line 124: EXTRN _Init_thread_footer:PROC + Line 125: EXTRN __std_terminate:PROC + Line 126: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 127: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 128: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 129: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 130: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 131: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 132: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 133: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 134: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 135: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 136: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 137: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 138: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 139: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 140: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 141: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 142: EXTRN _CxxThrowException:PROC + Line 143: EXTRN __CxxFrameHandler3:PROC + Line 144: EXTRN memcmp:PROC + Line 145: EXTRN memcpy:PROC + Line 146: EXTRN memmove:PROC + Line 147: EXTRN _Init_thread_epoch:DWORD + Line 148: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 149: EXTRN _ptrc_glDebugMessageCallback:QWORD + Line 150: EXTRN _ptrc_glDebugMessageControl:QWORD + Line 151: EXTRN _ptrc_glGetDebugMessageLog:QWORD + Line 152: EXTRN _ptrc_glObjectLabel:QWORD + Line 153: EXTRN _ptrc_glObjectPtrLabel:QWORD + Line 154: EXTRN _ptrc_glPopDebugGroup:QWORD + Line 155: EXTRN _ptrc_glPushDebugGroup:QWORD + Line 156: EXTRN _ptrc_glDisable:QWORD + Line 157: EXTRN _ptrc_glEnable:QWORD + Line 158: EXTRN _ptrc_glGetIntegerv:QWORD + Line 159: EXTRN _ptrc_glBeginQuery:QWORD + Line 160: EXTRN _ptrc_glDeleteQueries:QWORD + Line 161: EXTRN _ptrc_glEndQuery:QWORD + Line 162: EXTRN _ptrc_glGenQueries:QWORD + Line 163: EXTRN _ptrc_glGetQueryObjectuiv:QWORD + Line 164: EXTRN ?gl@@3URenderContext@@A:BYTE ; gl + Line 165: EXTRN __ImageBase:BYTE + Line 166: EXTRN _fltused:DWORD + Line 167: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_framebuffer.cod (136 hits) + Line 135: EXTRN _purecall:PROC + Line 136: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 137: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 138: EXTRN atexit:PROC + Line 139: EXTRN __std_terminate:PROC + Line 140: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 141: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 142: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 143: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 144: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 145: EXTRN ogl_LoadFunctions:PROC + Line 146: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 147: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 148: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 149: EXTRN ?GetUniqueIndex@FRemapTable@@QEAAHXZ:PROC ; FRemapTable::GetUniqueIndex + Line 150: EXTRN ?TranslationToTable@@YAPEAUFRemapTable@@H@Z:PROC ; TranslationToTable + Line 151: EXTRN ??_EIHardwareTexture@@UEAAPEAXI@Z:PROC ; IHardwareTexture::`vector deleting destructor' + Line 152: EXTRN ??0FWrapperTexture@@QEAA@HHH@Z:PROC ; FWrapperTexture::FWrapperTexture + Line 153: EXTRN ?Update@DFrameBuffer@@UEAAXXZ:PROC ; DFrameBuffer::Update + Line 154: EXTRN ?InitPalette@DFrameBuffer@@QEAAXXZ:PROC ; DFrameBuffer::InitPalette + Line 155: EXTRN ?GetCaps@DFrameBuffer@@UEAAIXZ:PROC ; DFrameBuffer::GetCaps + Line 156: EXTRN ?WriteSavePic@DFrameBuffer@@UEAAXPEAVplayer_t@@PEAVFileWriter@@HH@Z:PROC ; DFrameBuffer::WriteSavePic + Line 157: EXTRN ?SetViewportRects@DFrameBuffer@@UEAAXPEAUIntRect@@@Z:PROC ; DFrameBuffer::SetViewportRects + Line 158: EXTRN ??1SystemBaseFrameBuffer@@UEAA@XZ:PROC ; SystemBaseFrameBuffer::~SystemBaseFrameBuffer + Line 159: EXTRN ?GetClientWidth@SystemBaseFrameBuffer@@UEAAHXZ:PROC ; SystemBaseFrameBuffer::GetClientWidth + Line 160: EXTRN ?GetClientHeight@SystemBaseFrameBuffer@@UEAAHXZ:PROC ; SystemBaseFrameBuffer::GetClientHeight + Line 161: EXTRN ?IsFullscreen@SystemBaseFrameBuffer@@UEAA_NXZ:PROC ; SystemBaseFrameBuffer::IsFullscreen + Line 162: EXTRN ?ToggleFullscreen@SystemBaseFrameBuffer@@UEAAX_N@Z:PROC ; SystemBaseFrameBuffer::ToggleFullscreen + Line 163: EXTRN ?SetWindowSize@SystemBaseFrameBuffer@@UEAAXHH@Z:PROC ; SystemBaseFrameBuffer::SetWindowSize + Line 164: EXTRN ??0SystemGLFrameBuffer@@QEAA@PEAX_N@Z:PROC ; SystemGLFrameBuffer::SystemGLFrameBuffer + Line 165: EXTRN ?SetVSync@SystemGLFrameBuffer@@UEAAX_N@Z:PROC ; SystemGLFrameBuffer::SetVSync + Line 166: EXTRN ?SwapBuffers@SystemGLFrameBuffer@@QEAAXXZ:PROC ; SystemGLFrameBuffer::SwapBuffers + Line 167: EXTRN ??_EOpenGLFrameBuffer@OpenGLRenderer@@UEAAPEAXI@Z:PROC ; OpenGLRenderer::OpenGLFrameBuffer::`vector deleting destructor' + Line 168: EXTRN ?GetLayer@FMaterial@@QEAAPEAVIHardwareTexture@@HHPEAPEAVFTexture@@@Z:PROC ; FMaterial::GetLayer + Line 169: EXTRN ?Reset@FGLRenderState@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderState::Reset + Line 170: EXTRN ??_EIBuffer@@UEAAPEAXI@Z:PROC ; IBuffer::`vector deleting destructor' + Line 171: EXTRN ??_EIVertexBuffer@@UEAAPEAXI@Z:PROC ; IVertexBuffer::`vector deleting destructor' + Line 172: EXTRN ??_EIIndexBuffer@@UEAAPEAXI@Z:PROC ; IIndexBuffer::`vector deleting destructor' + Line 173: EXTRN ??_EIDataBuffer@@UEAAPEAXI@Z:PROC ; IDataBuffer::`vector deleting destructor' + Line 174: EXTRN ?BindCurrentFB@FGLRenderBuffers@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderBuffers::BindCurrentFB + Line 175: EXTRN ??0FGLRenderer@OpenGLRenderer@@QEAA@PEAVOpenGLFrameBuffer@1@@Z:PROC ; OpenGLRenderer::FGLRenderer::FGLRenderer + Line 176: EXTRN ??1FGLRenderer@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FGLRenderer::~FGLRenderer + Line 177: EXTRN ?Initialize@FGLRenderer@OpenGLRenderer@@QEAAXHH@Z:PROC ; OpenGLRenderer::FGLRenderer::Initialize + Line 178: EXTRN ?ResetSWScene@FGLRenderer@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderer::ResetSWScene + Line 179: EXTRN ?PostProcessScene@FGLRenderer@OpenGLRenderer@@QEAAXHAEBV?$function@$$A6AXXZ@std@@@Z:PROC ; OpenGLRenderer::FGLRenderer::PostProcessScene + Line 180: EXTRN ?ClearTonemapPalette@FGLRenderer@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderer::ClearTonemapPalette + Line 181: EXTRN ?BlurScene@FGLRenderer@OpenGLRenderer@@QEAAXM@Z:PROC ; OpenGLRenderer::FGLRenderer::BlurScene + Line 182: EXTRN ?Flush@FGLRenderer@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderer::Flush + Line 183: EXTRN ?WriteSavePic@FGLRenderer@OpenGLRenderer@@QEAAXPEAVplayer_t@@PEAVFileWriter@@HH@Z:PROC ; OpenGLRenderer::FGLRenderer::WriteSavePic + Line 184: EXTRN ?RenderView@FGLRenderer@OpenGLRenderer@@QEAAPEAUsector_t@@PEAVplayer_t@@@Z:PROC ; OpenGLRenderer::FGLRenderer::RenderView + Line 185: EXTRN ?BeginFrame@FGLRenderer@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderer::BeginFrame + Line 186: EXTRN ??1FHardwareTexture@OpenGLRenderer@@UEAA@XZ:PROC ; OpenGLRenderer::FHardwareTexture::~FHardwareTexture + Line 187: EXTRN ?UnbindAll@FHardwareTexture@OpenGLRenderer@@SAXXZ:PROC ; OpenGLRenderer::FHardwareTexture::UnbindAll + Line 188: EXTRN ?Bind@FHardwareTexture@OpenGLRenderer@@QEAAIH_N@Z:PROC ; OpenGLRenderer::FHardwareTexture::Bind + Line 189: EXTRN ?BindOrCreate@FHardwareTexture@OpenGLRenderer@@QEAA_NPEAVFTexture@@HHHH@Z:PROC ; OpenGLRenderer::FHardwareTexture::BindOrCreate + Line 190: EXTRN ?AllocateBuffer@FHardwareTexture@OpenGLRenderer@@UEAAXHHH@Z:PROC ; OpenGLRenderer::FHardwareTexture::AllocateBuffer + Line 191: EXTRN ?MapBuffer@FHardwareTexture@OpenGLRenderer@@UEAAPEAEXZ:PROC ; OpenGLRenderer::FHardwareTexture::MapBuffer + Line 192: EXTRN ?CreateTexture@FHardwareTexture@OpenGLRenderer@@UEAAIPEAEHHH_NHPEBD@Z:PROC ; OpenGLRenderer::FHardwareTexture::CreateTexture + Line 193: EXTRN ??_EFHardwareTexture@OpenGLRenderer@@UEAAPEAXI@Z:PROC ; OpenGLRenderer::FHardwareTexture::`vector deleting destructor' + Line 194: EXTRN ?SetTextureFilterMode@FSamplerManager@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FSamplerManager::SetTextureFilterMode + Line 195: EXTRN ?GetVRMode@VRMode@@SAPEBU1@_N@Z:PROC ; VRMode::GetVRMode + Line 196: EXTRN ?AdjustViewport@VRMode@@QEBAXPEAVDFrameBuffer@@@Z:PROC ; VRMode::AdjustViewport + Line 197: EXTRN ??_EFModelRenderer@@UEAAPEAXI@Z:PROC ; FModelRenderer::`vector deleting destructor' + Line 198: EXTRN ?BeginDrawModel@FGLModelRenderer@@UEAAXPEAVAActor@@PEAUFSpriteModelFrame@@AEBVVSMatrix@@_N@Z:PROC ; FGLModelRenderer::BeginDrawModel + Line 199: EXTRN ?EndDrawModel@FGLModelRenderer@@UEAAXPEAVAActor@@PEAUFSpriteModelFrame@@@Z:PROC ; FGLModelRenderer::EndDrawModel + Line 200: EXTRN ?CreateVertexBuffer@FGLModelRenderer@@UEAAPEAVIModelVertexBuffer@@_N0@Z:PROC ; FGLModelRenderer::CreateVertexBuffer + Line 201: EXTRN ?GetViewToWorldMatrix@FGLModelRenderer@@UEAA?AVVSMatrix@@XZ:PROC ; FGLModelRenderer::GetViewToWorldMatrix + Line 202: EXTRN ?BeginDrawHUDModel@FGLModelRenderer@@UEAAXPEAVAActor@@AEBVVSMatrix@@_N@Z:PROC ; FGLModelRenderer::BeginDrawHUDModel + Line 203: EXTRN ?EndDrawHUDModel@FGLModelRenderer@@UEAAXPEAVAActor@@@Z:PROC ; FGLModelRenderer::EndDrawHUDModel + Line 204: EXTRN ?SetInterpolation@FGLModelRenderer@@UEAAXN@Z:PROC ; FGLModelRenderer::SetInterpolation + Line 205: EXTRN ?SetMaterial@FGLModelRenderer@@UEAAXPEAVFTexture@@_NH@Z:PROC ; FGLModelRenderer::SetMaterial + Line 206: EXTRN ?DrawArrays@FGLModelRenderer@@UEAAXHH@Z:PROC ; FGLModelRenderer::DrawArrays + Line 207: EXTRN ?DrawElements@FGLModelRenderer@@UEAAXH_K@Z:PROC ; FGLModelRenderer::DrawElements + Line 208: EXTRN ??_EFGLModelRenderer@@UEAAPEAXI@Z:PROC ; FGLModelRenderer::`vector deleting destructor' + Line 209: EXTRN ??0FSkyVertexBuffer@@QEAA@XZ:PROC ; FSkyVertexBuffer::FSkyVertexBuffer + Line 210: EXTRN ??1FSkyVertexBuffer@@QEAA@XZ:PROC ; FSkyVertexBuffer::~FSkyVertexBuffer + Line 211: EXTRN ??0GLViewpointBuffer@@QEAA@XZ:PROC ; GLViewpointBuffer::GLViewpointBuffer + Line 212: EXTRN ??1GLViewpointBuffer@@QEAA@XZ:PROC ; GLViewpointBuffer::~GLViewpointBuffer + Line 213: EXTRN ??0FLightBuffer@@QEAA@XZ:PROC ; FLightBuffer::FLightBuffer + Line 214: EXTRN ??1FLightBuffer@@QEAA@XZ:PROC ; FLightBuffer::~FLightBuffer + Line 215: EXTRN ??0FShaderProgram@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FShaderProgram::FShaderProgram + Line 216: EXTRN ?Update@FGLDebug@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLDebug::Update + Line 217: EXTRN ?PushGroup@FGLDebug@OpenGLRenderer@@SAXAEBVFString@@@Z:PROC ; OpenGLRenderer::FGLDebug::PushGroup + Line 218: EXTRN ?PopGroup@FGLDebug@OpenGLRenderer@@SAXXZ:PROC ; OpenGLRenderer::FGLDebug::PopGroup + Line 219: EXTRN ??0GLBuffer@OpenGLRenderer@@IEAA@H@Z:PROC ; OpenGLRenderer::GLBuffer::GLBuffer + Line 220: EXTRN ??1GLBuffer@OpenGLRenderer@@MEAA@XZ:PROC ; OpenGLRenderer::GLBuffer::~GLBuffer + Line 221: EXTRN ?SetData@GLBuffer@OpenGLRenderer@@MEAAX_KPEBX_N@Z:PROC ; OpenGLRenderer::GLBuffer::SetData + Line 222: EXTRN ?SetSubData@GLBuffer@OpenGLRenderer@@MEAAX_K0PEBX@Z:PROC ; OpenGLRenderer::GLBuffer::SetSubData + Line 223: EXTRN ?Map@GLBuffer@OpenGLRenderer@@MEAAXXZ:PROC ; OpenGLRenderer::GLBuffer::Map + Line 224: EXTRN ?Unmap@GLBuffer@OpenGLRenderer@@MEAAXXZ:PROC ; OpenGLRenderer::GLBuffer::Unmap + Line 225: EXTRN ?Resize@GLBuffer@OpenGLRenderer@@MEAAX_K@Z:PROC ; OpenGLRenderer::GLBuffer::Resize + Line 226: EXTRN ?Lock@GLBuffer@OpenGLRenderer@@MEAAPEAXI@Z:PROC ; OpenGLRenderer::GLBuffer::Lock + Line 227: EXTRN ?Unlock@GLBuffer@OpenGLRenderer@@MEAAXXZ:PROC ; OpenGLRenderer::GLBuffer::Unlock + Line 228: EXTRN ?SetFormat@GLVertexBuffer@OpenGLRenderer@@UEAAXHH_KPEBUFVertexBufferAttribute@@@Z:PROC ; OpenGLRenderer::GLVertexBuffer::SetFormat + Line 229: EXTRN ??_EGLVertexBuffer@OpenGLRenderer@@UEAAPEAXI@Z:PROC ; OpenGLRenderer::GLVertexBuffer::`vector deleting destructor' + Line 230: EXTRN ??_EGLIndexBuffer@OpenGLRenderer@@UEAAPEAXI@Z:PROC ; OpenGLRenderer::GLIndexBuffer::`vector deleting destructor' + Line 231: EXTRN ?BindRange@GLDataBuffer@OpenGLRenderer@@UEAAX_K0@Z:PROC ; OpenGLRenderer::GLDataBuffer::BindRange + Line 232: EXTRN ?BindBase@GLDataBuffer@OpenGLRenderer@@UEAAXXZ:PROC ; OpenGLRenderer::GLDataBuffer::BindBase + Line 233: EXTRN ??_EGLDataBuffer@OpenGLRenderer@@UEAAPEAXI@Z:PROC ; OpenGLRenderer::GLDataBuffer::`vector deleting destructor' + Line 234: EXTRN ??0FFlatVertexBuffer@@QEAA@HH@Z:PROC ; FFlatVertexBuffer::FFlatVertexBuffer + Line 235: EXTRN ??1FFlatVertexBuffer@@QEAA@XZ:PROC ; FFlatVertexBuffer::~FFlatVertexBuffer + Line 236: EXTRN ?gl_LoadExtensions@@YAXXZ:PROC ; gl_LoadExtensions + Line 237: EXTRN ?gl_PrintStartupLog@@YAXXZ:PROC ; gl_PrintStartupLog + Line 238: EXTRN ?Draw2D@@YAXPEAVF2DDrawer@@AEAVFRenderState@@@Z:PROC ; Draw2D + Line 239: EXTRN ??_E?$_Ref_count_obj@VFGLDebug@OpenGLRenderer@@@std@@UEAAPEAXI@Z:PROC ; std::_Ref_count_obj::`vector deleting destructor' + Line 240: EXTRN __CxxFrameHandler3:PROC + Line 241: EXTRN memset:PROC + Line 242: EXTRN _ptrc_glBlendFunc:QWORD + Line 243: EXTRN _ptrc_glClear:QWORD + Line 244: EXTRN _ptrc_glClearColor:QWORD + Line 245: EXTRN _ptrc_glClearDepth:QWORD + Line 246: EXTRN _ptrc_glDepthFunc:QWORD + Line 247: EXTRN _ptrc_glDisable:QWORD + Line 248: EXTRN _ptrc_glEnable:QWORD + Line 249: EXTRN _ptrc_glFinish:QWORD + Line 250: EXTRN _ptrc_glGetIntegerv:QWORD + Line 251: EXTRN _ptrc_glPixelStorei:QWORD + Line 252: EXTRN _ptrc_glReadPixels:QWORD + Line 253: EXTRN _ptrc_glCopyTexSubImage2D:QWORD + Line 254: EXTRN _ptrc_glBindFramebuffer:QWORD + Line 255: EXTRN ?active@glcycle_t@@2_NA:BYTE ; glcycle_t::active + Line 256: EXTRN ?vid_rendermode@@3VFIntCVar@@A:BYTE ; vid_rendermode + Line 257: EXTRN ?fullscreen@@3VFBoolCVar@@A:BYTE ; fullscreen + Line 258: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 259: EXTRN ?gl@@3URenderContext@@A:BYTE ; gl + Line 260: EXTRN ?gl_RenderState@OpenGLRenderer@@3VFGLRenderState@1@A:BYTE ; OpenGLRenderer::gl_RenderState + Line 261: EXTRN ?lastbound@FHardwareTexture@OpenGLRenderer@@2PAIA:BYTE ; OpenGLRenderer::FHardwareTexture::lastbound + Line 262: EXTRN ?Finish@@3Vglcycle_t@@A:QWORD ; Finish + Line 263: EXTRN ?twoD@@3Vglcycle_t@@A:QWORD ; twoD + Line 264: EXTRN ?Flush3D@@3Vglcycle_t@@A:QWORD ; Flush3D + Line 265: EXTRN ?vid_vsync@@3VFBoolCVar@@A:BYTE ; vid_vsync + Line 266: EXTRN ?r_drawvoxels@@3VFBoolCVar@@A:BYTE ; r_drawvoxels + Line 267: EXTRN ?gl_tonemap@@3VFIntCVar@@A:BYTE ; gl_tonemap + Line 268: EXTRN ?gl_texture_usehires@@3VFBoolCVar@@A:BYTE ; gl_texture_usehires + Line 269: EXTRN ?vid_hdr_active@@3_NA:BYTE ; vid_hdr_active + Line 270: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_hwtexture.cod (40 hits) + Line 74: EXTRN _purecall:PROC + Line 75: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 76: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 77: EXTRN __std_terminate:PROC + Line 78: EXTRN calloc:PROC + Line 79: EXTRN free:PROC + Line 80: EXTRN ?GetUniqueIndex@FRemapTable@@QEAAHXZ:PROC ; FRemapTable::GetUniqueIndex + Line 81: EXTRN ?TranslationToTable@@YAPEAUFRemapTable@@H@Z:PROC ; TranslationToTable + Line 82: EXTRN ?Resize@IHardwareTexture@@QEAAXHHHHPEAE0@Z:PROC ; IHardwareTexture::Resize + Line 83: EXTRN ??_EIHardwareTexture@@UEAAPEAXI@Z:PROC ; IHardwareTexture::`vector deleting destructor' + Line 84: EXTRN ?CreateTexBuffer@FTexture@@QEAA?AUFTextureBuffer@@HH@Z:PROC ; FTexture::CreateTexBuffer + Line 85: EXTRN ?LabelObject@FGLDebug@OpenGLRenderer@@SAXIIPEBD@Z:PROC ; OpenGLRenderer::FGLDebug::LabelObject + Line 86: EXTRN ??_EFHardwareTexture@OpenGLRenderer@@UEAAPEAXI@Z:PROC ; OpenGLRenderer::FHardwareTexture::`vector deleting destructor' + Line 87: EXTRN ?Bind@FSamplerManager@OpenGLRenderer@@QEAAEHHH@Z:PROC ; OpenGLRenderer::FSamplerManager::Bind + Line 88: EXTRN __CxxFrameHandler3:PROC + Line 89: EXTRN _ptrc_glGetIntegerv:QWORD + Line 90: EXTRN _ptrc_glPixelStorei:QWORD + Line 91: EXTRN _ptrc_glTexImage2D:QWORD + Line 92: EXTRN _ptrc_glBindTexture:QWORD + Line 93: EXTRN _ptrc_glDeleteTextures:QWORD + Line 94: EXTRN _ptrc_glGenTextures:QWORD + Line 95: EXTRN _ptrc_glTexSubImage2D:QWORD + Line 96: EXTRN _ptrc_glActiveTexture:QWORD + Line 97: EXTRN _ptrc_glBindBuffer:QWORD + Line 98: EXTRN _ptrc_glBufferData:QWORD + Line 99: EXTRN _ptrc_glDeleteBuffers:QWORD + Line 100: EXTRN _ptrc_glGenBuffers:QWORD + Line 101: EXTRN _ptrc_glMapBuffer:QWORD + Line 102: EXTRN _ptrc_glUnmapBuffer:QWORD + Line 103: EXTRN _ptrc_glBindRenderbuffer:QWORD + Line 104: EXTRN _ptrc_glFramebufferRenderbuffer:QWORD + Line 105: EXTRN _ptrc_glFramebufferTexture2D:QWORD + Line 106: EXTRN _ptrc_glGenRenderbuffers:QWORD + Line 107: EXTRN _ptrc_glGenerateMipmap:QWORD + Line 108: EXTRN _ptrc_glRenderbufferStorage:QWORD + Line 109: EXTRN ?gl@@3URenderContext@@A:BYTE ; gl + Line 110: EXTRN ?gl_texture_filter@@3VFIntCVar@@A:BYTE ; gl_texture_filter + Line 111: EXTRN ?gl_RenderState@OpenGLRenderer@@3VFGLRenderState@1@A:BYTE ; OpenGLRenderer::gl_RenderState + Line 112: EXTRN ?GLRenderer@OpenGLRenderer@@3PEAVFGLRenderer@1@EA:QWORD ; OpenGLRenderer::GLRenderer + Line 113: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_interface.cod (22 hits) + Line 53: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 54: EXTRN atexit:PROC + Line 55: EXTRN __std_terminate:PROC + Line 56: EXTRN strtod:PROC + Line 57: EXTRN strstr:PROC + Line 58: EXTRN stricmp:PROC + Line 59: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 60: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 61: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 62: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 63: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 64: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 65: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 66: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 67: EXTRN ?CheckValue@FArgs@@QEBAPEBDPEBD@Z:PROC ; FArgs::CheckValue + Line 68: EXTRN __CxxFrameHandler3:PROC + Line 69: EXTRN _ptrc_glGetIntegerv:QWORD + Line 70: EXTRN _ptrc_glGetString:QWORD + Line 71: EXTRN _ptrc_glPixelStorei:QWORD + Line 72: EXTRN _ptrc_glGetStringi:QWORD + Line 73: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 74: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_load.cod (5 hits) + Line 3361: EXTRN strchr:PROC + Line 3362: EXTRN strncpy:PROC + Line 3363: EXTRN __imp_GetModuleHandleA:PROC + Line 3364: EXTRN __imp_GetProcAddress:PROC + Line 3365: EXTRN __imp_wglGetProcAddress:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_postprocess.cod (47 hits) + Line 54: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 55: EXTRN atexit:PROC + Line 56: EXTRN ?_Xbad_function_call@std@@YAXXZ:PROC ; std::_Xbad_function_call + Line 57: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 58: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 59: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 60: EXTRN ?SuperFastHash@@YAIPEBD_K@Z:PROC ; SuperFastHash + Line 61: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 62: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 63: EXTRN ?Clear@F2DDrawer@@QEAAXXZ:PROC ; F2DDrawer::Clear + Line 64: EXTRN ?Bind@GLVertexBuffer@OpenGLRenderer@@QEAAXPEAH@Z:PROC ; OpenGLRenderer::GLVertexBuffer::Bind + Line 65: EXTRN ?PushGroup@FGLDebug@OpenGLRenderer@@SAXAEBVFString@@@Z:PROC ; OpenGLRenderer::FGLDebug::PushGroup + Line 66: EXTRN ?PopGroup@FGLDebug@OpenGLRenderer@@SAXXZ:PROC ; OpenGLRenderer::FGLDebug::PopGroup + Line 67: EXTRN ?UpdateEffectTextures@FGLRenderBuffers@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderBuffers::UpdateEffectTextures + Line 68: EXTRN ?CompileEffectShaders@FGLRenderBuffers@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderBuffers::CompileEffectShaders + Line 69: EXTRN ?RenderEffect@FGLRenderBuffers@OpenGLRenderer@@QEAAXAEBVFString@@@Z:PROC ; OpenGLRenderer::FGLRenderBuffers::RenderEffect + Line 70: EXTRN ?BindCurrentTexture@FGLRenderBuffers@OpenGLRenderer@@QEAAXHHH@Z:PROC ; OpenGLRenderer::FGLRenderBuffers::BindCurrentTexture + Line 71: EXTRN ?BindCurrentFB@FGLRenderBuffers@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderBuffers::BindCurrentFB + Line 72: EXTRN ?BindOutputFB@FGLRenderBuffers@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderBuffers::BindOutputFB + Line 73: EXTRN ?BindEyeFB@FGLRenderBuffers@OpenGLRenderer@@QEAAXH_N@Z:PROC ; OpenGLRenderer::FGLRenderBuffers::BindEyeFB + Line 74: EXTRN ?BindDitherTexture@FGLRenderBuffers@OpenGLRenderer@@QEAAXH@Z:PROC ; OpenGLRenderer::FGLRenderBuffers::BindDitherTexture + Line 75: EXTRN ?PresentStereo@FGLRenderer@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderer::PresentStereo + Line 76: EXTRN ??0FGLPostProcessState@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FGLPostProcessState::FGLPostProcessState + Line 77: EXTRN ??1FGLPostProcessState@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FGLPostProcessState::~FGLPostProcessState + Line 78: EXTRN ?SaveTextureBindings@FGLPostProcessState@OpenGLRenderer@@QEAAXI@Z:PROC ; OpenGLRenderer::FGLPostProcessState::SaveTextureBindings + Line 79: EXTRN ?GetVRMode@VRMode@@SAPEBU1@_N@Z:PROC ; VRMode::GetVRMode + Line 80: EXTRN ?Run@FCustomPostProcessShaders@OpenGLRenderer@@QEAAXVFString@@@Z:PROC ; OpenGLRenderer::FCustomPostProcessShaders::Run + Line 81: EXTRN ?ViewportLinearScale@@YA_NXZ:PROC ; ViewportLinearScale + Line 82: EXTRN __CxxFrameHandler3:PROC + Line 83: EXTRN _ptrc_glClear:QWORD + Line 84: EXTRN _ptrc_glClearColor:QWORD + Line 85: EXTRN _ptrc_glDisable:QWORD + Line 86: EXTRN _ptrc_glEnable:QWORD + Line 87: EXTRN _ptrc_glScissor:QWORD + Line 88: EXTRN _ptrc_glTexParameteri:QWORD + Line 89: EXTRN _ptrc_glViewport:QWORD + Line 90: EXTRN _ptrc_glDrawArrays:QWORD + Line 91: EXTRN _ptrc_glActiveTexture:QWORD + Line 92: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 93: EXTRN ?Gamma@@3VFFloatCVar@@A:BYTE ; Gamma + Line 94: EXTRN ?hw_postprocess@@3VPostprocess@@A:BYTE ; hw_postprocess + Line 95: EXTRN ?vid_brightness@@3VFFloatCVar@@A:BYTE ; vid_brightness + Line 96: EXTRN ?vid_contrast@@3VFFloatCVar@@A:BYTE ; vid_contrast + Line 97: EXTRN ?vid_saturation@@3VFFloatCVar@@A:BYTE ; vid_saturation + Line 98: EXTRN ?gl_satformula@@3VFIntCVar@@A:BYTE ; gl_satformula + Line 99: EXTRN ?vid_hdr_active@@3_NA:BYTE ; vid_hdr_active + Line 100: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_postprocessshader.cod (54 hits) + Line 65: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 66: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 67: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 68: EXTRN atexit:PROC + Line 69: EXTRN __std_terminate:PROC + Line 70: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 71: EXTRN roundf:PROC + Line 72: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 73: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 74: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 75: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 76: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 77: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 78: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 79: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 80: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 81: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 82: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 83: EXTRN ?CreateTexBuffer@FTexture@@QEAA?AUFTextureBuffer@@HH@Z:PROC ; FTexture::CreateTexBuffer + Line 84: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 85: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 86: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 87: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 88: EXTRN ?PushGroup@FGLDebug@OpenGLRenderer@@SAXAEBVFString@@@Z:PROC ; OpenGLRenderer::FGLDebug::PushGroup + Line 89: EXTRN ?PopGroup@FGLDebug@OpenGLRenderer@@SAXXZ:PROC ; OpenGLRenderer::FGLDebug::PopGroup + Line 90: EXTRN ?BindCurrentTexture@FGLRenderBuffers@OpenGLRenderer@@QEAAXHHH@Z:PROC ; OpenGLRenderer::FGLRenderBuffers::BindCurrentTexture + Line 91: EXTRN ?BindNextFB@FGLRenderBuffers@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderBuffers::BindNextFB + Line 92: EXTRN ?NextTexture@FGLRenderBuffers@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderBuffers::NextTexture + Line 93: EXTRN ?RenderScreenQuad@FGLRenderer@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderer::RenderScreenQuad + Line 94: EXTRN ??0FGLPostProcessState@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FGLPostProcessState::FGLPostProcessState + Line 95: EXTRN ??1FGLPostProcessState@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FGLPostProcessState::~FGLPostProcessState + Line 96: EXTRN ?SaveTextureBindings@FGLPostProcessState@OpenGLRenderer@@QEAAXI@Z:PROC ; OpenGLRenderer::FGLPostProcessState::SaveTextureBindings + Line 97: EXTRN ??0FShaderProgram@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FShaderProgram::FShaderProgram + Line 98: EXTRN ??1FShaderProgram@OpenGLRenderer@@UEAA@XZ:PROC ; OpenGLRenderer::FShaderProgram::~FShaderProgram + Line 99: EXTRN _CxxThrowException:PROC + Line 100: EXTRN __CxxFrameHandler3:PROC + Line 101: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 102: EXTRN _ptrc_glTexImage2D:QWORD + Line 103: EXTRN _ptrc_glTexParameteri:QWORD + Line 104: EXTRN _ptrc_glBindTexture:QWORD + Line 105: EXTRN _ptrc_glDeleteTextures:QWORD + Line 106: EXTRN _ptrc_glGenTextures:QWORD + Line 107: EXTRN _ptrc_glActiveTexture:QWORD + Line 108: EXTRN _ptrc_glGetUniformLocation:QWORD + Line 109: EXTRN _ptrc_glUniform1f:QWORD + Line 110: EXTRN _ptrc_glUniform1i:QWORD + Line 111: EXTRN _ptrc_glUniform2f:QWORD + Line 112: EXTRN _ptrc_glUniform3f:QWORD + Line 113: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 114: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 115: EXTRN ?gl@@3URenderContext@@A:BYTE ; gl + Line 116: EXTRN ?GLRenderer@OpenGLRenderer@@3PEAVFGLRenderer@1@EA:QWORD ; OpenGLRenderer::GLRenderer + Line 117: EXTRN ?PostProcessShaders@@3V?$TArray@UPostProcessShader@@U1@@@A:BYTE ; PostProcessShaders + Line 118: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_postprocessstate.cod (14 hits) + Line 12: EXTRN __std_terminate:PROC + Line 13: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 14: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 15: EXTRN __CxxFrameHandler3:PROC + Line 16: EXTRN _ptrc_glDisable:QWORD + Line 17: EXTRN _ptrc_glEnable:QWORD + Line 18: EXTRN _ptrc_glGetBooleanv:QWORD + Line 19: EXTRN _ptrc_glGetIntegerv:QWORD + Line 20: EXTRN _ptrc_glBindTexture:QWORD + Line 21: EXTRN _ptrc_glActiveTexture:QWORD + Line 22: EXTRN _ptrc_glBlendFuncSeparate:QWORD + Line 23: EXTRN _ptrc_glBlendEquationSeparate:QWORD + Line 24: EXTRN _ptrc_glUseProgram:QWORD + Line 25: EXTRN _ptrc_glBindSampler:QWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_renderbuffers.cod (75 hits) + Line 146: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 147: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 148: EXTRN atexit:PROC + Line 149: EXTRN __std_terminate:PROC + Line 150: EXTRN __std_type_info_compare:PROC + Line 151: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 152: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 153: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 154: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 155: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 156: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 157: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 158: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 159: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 160: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 161: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 162: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 163: EXTRN ?SuperFastHash@@YAIPEBD_K@Z:PROC ; SuperFastHash + Line 164: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 165: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 166: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 167: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 168: EXTRN ?LabelObject@FGLDebug@OpenGLRenderer@@SAXIIPEBD@Z:PROC ; OpenGLRenderer::FGLDebug::LabelObject + Line 169: EXTRN ?PushGroup@FGLDebug@OpenGLRenderer@@SAXAEBVFString@@@Z:PROC ; OpenGLRenderer::FGLDebug::PushGroup + Line 170: EXTRN ?PopGroup@FGLDebug@OpenGLRenderer@@SAXXZ:PROC ; OpenGLRenderer::FGLDebug::PopGroup + Line 171: EXTRN ?RenderScreenQuad@FGLRenderer@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderer::RenderScreenQuad + Line 172: EXTRN ??0FGLPostProcessState@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FGLPostProcessState::FGLPostProcessState + Line 173: EXTRN ??1FGLPostProcessState@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FGLPostProcessState::~FGLPostProcessState + Line 174: EXTRN ?SaveTextureBindings@FGLPostProcessState@OpenGLRenderer@@QEAAXI@Z:PROC ; OpenGLRenderer::FGLPostProcessState::SaveTextureBindings + Line 175: EXTRN ??0FShaderProgram@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FShaderProgram::FShaderProgram + Line 176: EXTRN ??_E?$_Ref_count_resource@PEAVFShaderProgram@OpenGLRenderer@@U?$default_delete@VFShaderProgram@OpenGLRenderer@@@std@@@std@@UEAAPEAXI@Z:PROC ; std::_Ref_count_resource >::`vector deleting destructor' + Line 177: EXTRN __CxxFrameHandler3:PROC + Line 178: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 179: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 180: EXTRN _ptrc_glInvalidateFramebuffer:QWORD + Line 181: EXTRN _ptrc_glBlendFunc:QWORD + Line 182: EXTRN _ptrc_glClear:QWORD + Line 183: EXTRN _ptrc_glClearColor:QWORD + Line 184: EXTRN _ptrc_glClearDepth:QWORD + Line 185: EXTRN _ptrc_glClearStencil:QWORD + Line 186: EXTRN _ptrc_glDisable:QWORD + Line 187: EXTRN _ptrc_glEnable:QWORD + Line 188: EXTRN _ptrc_glGetBooleanv:QWORD + Line 189: EXTRN _ptrc_glGetDoublev:QWORD + Line 190: EXTRN _ptrc_glGetIntegerv:QWORD + Line 191: EXTRN _ptrc_glTexImage2D:QWORD + Line 192: EXTRN _ptrc_glTexParameteri:QWORD + Line 193: EXTRN _ptrc_glViewport:QWORD + Line 194: EXTRN _ptrc_glBindTexture:QWORD + Line 195: EXTRN _ptrc_glDeleteTextures:QWORD + Line 196: EXTRN _ptrc_glGenTextures:QWORD + Line 197: EXTRN _ptrc_glActiveTexture:QWORD + Line 198: EXTRN _ptrc_glBlendEquation:QWORD + Line 199: EXTRN _ptrc_glBindFramebuffer:QWORD + Line 200: EXTRN _ptrc_glBindRenderbuffer:QWORD + Line 201: EXTRN _ptrc_glBlitFramebuffer:QWORD + Line 202: EXTRN _ptrc_glCheckFramebufferStatus:QWORD + Line 203: EXTRN _ptrc_glDeleteFramebuffers:QWORD + Line 204: EXTRN _ptrc_glDeleteRenderbuffers:QWORD + Line 205: EXTRN _ptrc_glFramebufferRenderbuffer:QWORD + Line 206: EXTRN _ptrc_glFramebufferTexture2D:QWORD + Line 207: EXTRN _ptrc_glGenFramebuffers:QWORD + Line 208: EXTRN _ptrc_glGenRenderbuffers:QWORD + Line 209: EXTRN _ptrc_glRenderbufferStorage:QWORD + Line 210: EXTRN _ptrc_glRenderbufferStorageMultisample:QWORD + Line 211: EXTRN _ptrc_glTexImage2DMultisample:QWORD + Line 212: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 213: EXTRN ?gl@@3URenderContext@@A:BYTE ; gl + Line 214: EXTRN ?gl_shadowmap_quality@@3VFIntCVar@@A:BYTE ; gl_shadowmap_quality + Line 215: EXTRN ?gl_ssao@@3VFIntCVar@@A:BYTE ; gl_ssao + Line 216: EXTRN ?gl_debug_level@@3VFIntCVar@@A:BYTE ; gl_debug_level + Line 217: EXTRN ?hw_postprocess@@3VPostprocess@@A:BYTE ; hw_postprocess + Line 218: EXTRN ?GLRenderer@OpenGLRenderer@@3PEAVFGLRenderer@1@EA:QWORD ; OpenGLRenderer::GLRenderer + Line 219: EXTRN __ImageBase:BYTE + Line 220: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_renderer.cod (98 hits) + Line 43: EXTRN _purecall:PROC + Line 44: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 45: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 46: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 47: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 48: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 49: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 50: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 51: EXTRN ?FlushAll@FTextureManager@@QEAAXXZ:PROC ; FTextureManager::FlushAll + Line 52: EXTRN ?PerformUpdate@IShadowMap@@QEAA_NXZ:PROC ; IShadowMap::PerformUpdate + Line 53: EXTRN ?M_CreatePNG@@YA_NPEAVFileWriter@@PEBEPEBUPalEntry@@W4ESSType@@HHHM@Z:PROC ; M_CreatePNG + Line 54: EXTRN ?I_GetTimeFrac@@YANXZ:PROC ; I_GetTimeFrac + Line 55: EXTRN ?UpdateAll@FCanvasTextureInfo@@QEAAXV?$function@$$A6AXPEAVAActor@@PEAVFCanvasTexture@@N@Z@std@@@Z:PROC ; FCanvasTextureInfo::UpdateAll + Line 56: EXTRN ??0FRenderViewpoint@@QEAA@XZ:PROC ; FRenderViewpoint::FRenderViewpoint + Line 57: EXTRN ??0SWSceneDrawer@@QEAA@XZ:PROC ; SWSceneDrawer::SWSceneDrawer + Line 58: EXTRN ??1SWSceneDrawer@@QEAA@XZ:PROC ; SWSceneDrawer::~SWSceneDrawer + Line 59: EXTRN ?RenderView@SWSceneDrawer@@QEAAPEAUsector_t@@PEAVplayer_t@@@Z:PROC ; SWSceneDrawer::RenderView + Line 60: EXTRN ?ResetProfilingData@@YAXXZ:PROC ; ResetProfilingData + Line 61: EXTRN ?checkBenchActive@@YAXXZ:PROC ; checkBenchActive + Line 62: EXTRN ?LabelObject@FGLDebug@OpenGLRenderer@@SAXIIPEBD@Z:PROC ; OpenGLRenderer::FGLDebug::LabelObject + Line 63: EXTRN ?PushGroup@FGLDebug@OpenGLRenderer@@SAXAEBVFString@@@Z:PROC ; OpenGLRenderer::FGLDebug::PushGroup + Line 64: EXTRN ?PopGroup@FGLDebug@OpenGLRenderer@@SAXXZ:PROC ; OpenGLRenderer::FGLDebug::PopGroup + Line 65: EXTRN ?GetLayer@FMaterial@@QEAAPEAVIHardwareTexture@@HHPEAPEAVFTexture@@@Z:PROC ; FMaterial::GetLayer + Line 66: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@PEAVFTexture@@_N1@Z:PROC ; FMaterial::ValidateTexture + Line 67: EXTRN ?CheckTimer@FGLRenderState@OpenGLRenderer@@QEAAX_K@Z:PROC ; OpenGLRenderer::FGLRenderState::CheckTimer + Line 68: EXTRN ??0FShaderManager@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FShaderManager::FShaderManager + Line 69: EXTRN ??1FShaderManager@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FShaderManager::~FShaderManager + Line 70: EXTRN ??0FGLRenderBuffers@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FGLRenderBuffers::FGLRenderBuffers + Line 71: EXTRN ??1FGLRenderBuffers@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FGLRenderBuffers::~FGLRenderBuffers + Line 72: EXTRN ?Setup@FGLRenderBuffers@OpenGLRenderer@@QEAAXHHHH@Z:PROC ; OpenGLRenderer::FGLRenderBuffers::Setup + Line 73: EXTRN ?BindShadowMapFB@FGLRenderBuffers@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderBuffers::BindShadowMapFB + Line 74: EXTRN ?BindShadowMapTexture@FGLRenderBuffers@OpenGLRenderer@@QEAAXH@Z:PROC ; OpenGLRenderer::FGLRenderBuffers::BindShadowMapTexture + Line 75: EXTRN ?RenderScreenQuad@FGLRenderer@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderer::RenderScreenQuad + Line 76: EXTRN ?CopyToBackbuffer@FGLRenderer@OpenGLRenderer@@QEAAXPEBUIntRect@@_N@Z:PROC ; OpenGLRenderer::FGLRenderer::CopyToBackbuffer + Line 77: EXTRN ?RenderViewpoint@FGLRenderer@OpenGLRenderer@@QEAAPEAUsector_t@@AEAUFRenderViewpoint@@PEAVAActor@@PEAUIntRect@@MMM_N3@Z:PROC ; OpenGLRenderer::FGLRenderer::RenderViewpoint + Line 78: EXTRN ?Init@FPresentShaderBase@@MEAAXPEBD0@Z:PROC ; FPresentShaderBase::Init + Line 79: EXTRN ??_EFPresentShaderBase@@UEAAPEAXI@Z:PROC ; FPresentShaderBase::`vector deleting destructor' + Line 80: EXTRN ?Bind@FPresentShader@@UEAAXPEAVIRenderQueue@@@Z:PROC ; FPresentShader::Bind + Line 81: EXTRN ??_EFPresentShader@@UEAAPEAXI@Z:PROC ; FPresentShader::`vector deleting destructor' + Line 82: EXTRN ?Bind@FPresent3DCheckerShader@@UEAAXPEAVIRenderQueue@@@Z:PROC ; FPresent3DCheckerShader::Bind + Line 83: EXTRN ??_EFPresent3DCheckerShader@@UEAAPEAXI@Z:PROC ; FPresent3DCheckerShader::`vector deleting destructor' + Line 84: EXTRN ?Bind@FPresent3DColumnShader@@UEAAXPEAVIRenderQueue@@@Z:PROC ; FPresent3DColumnShader::Bind + Line 85: EXTRN ??_EFPresent3DColumnShader@@UEAAPEAXI@Z:PROC ; FPresent3DColumnShader::`vector deleting destructor' + Line 86: EXTRN ?Bind@FPresent3DRowShader@@UEAAXPEAVIRenderQueue@@@Z:PROC ; FPresent3DRowShader::Bind + Line 87: EXTRN ??_EFPresent3DRowShader@@UEAAPEAXI@Z:PROC ; FPresent3DRowShader::`vector deleting destructor' + Line 88: EXTRN ?Bind@FShadowMapShader@@QEAAXPEAVIRenderQueue@@@Z:PROC ; FShadowMapShader::Bind + Line 89: EXTRN ?hw_ClearFakeFlat@@YAXXZ:PROC ; hw_ClearFakeFlat + Line 90: EXTRN ??0FCustomPostProcessShaders@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FCustomPostProcessShaders::FCustomPostProcessShaders + Line 91: EXTRN ??1FCustomPostProcessShaders@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FCustomPostProcessShaders::~FCustomPostProcessShaders + Line 92: EXTRN ?Unbind@FHardwareTexture@OpenGLRenderer@@SAXH@Z:PROC ; OpenGLRenderer::FHardwareTexture::Unbind + Line 93: EXTRN ?BindToFrameBuffer@FHardwareTexture@OpenGLRenderer@@QEAAXHH@Z:PROC ; OpenGLRenderer::FHardwareTexture::BindToFrameBuffer + Line 94: EXTRN ?BindOrCreate@FHardwareTexture@OpenGLRenderer@@QEAA_NPEAVFTexture@@HHHH@Z:PROC ; OpenGLRenderer::FHardwareTexture::BindOrCreate + Line 95: EXTRN ??0FSamplerManager@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FSamplerManager::FSamplerManager + Line 96: EXTRN ??1FSamplerManager@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FSamplerManager::~FSamplerManager + Line 97: EXTRN ?Clear@FLightBuffer@@QEAAXXZ:PROC ; FLightBuffer::Clear + Line 98: EXTRN ?Clear@GLViewpointBuffer@@QEAAXXZ:PROC ; GLViewpointBuffer::Clear + Line 99: EXTRN ?FlushModels@@YAXXZ:PROC ; FlushModels + Line 100: EXTRN ??0FGLPostProcessState@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FGLPostProcessState::FGLPostProcessState + Line 101: EXTRN ??1FGLPostProcessState@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FGLPostProcessState::~FGLPostProcessState + Line 102: EXTRN __CxxFrameHandler3:PROC + Line 103: EXTRN memset:PROC + Line 104: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 105: EXTRN _ptrc_glDisable:QWORD + Line 106: EXTRN _ptrc_glFinish:QWORD + Line 107: EXTRN _ptrc_glGetIntegerv:QWORD + Line 108: EXTRN _ptrc_glReadPixels:QWORD + Line 109: EXTRN _ptrc_glViewport:QWORD + Line 110: EXTRN _ptrc_glDeleteQueries:QWORD + Line 111: EXTRN _ptrc_glGenQueries:QWORD + Line 112: EXTRN _ptrc_glBindFramebuffer:QWORD + Line 113: EXTRN _ptrc_glBindVertexArray:QWORD + Line 114: EXTRN _ptrc_glDeleteFramebuffers:QWORD + Line 115: EXTRN _ptrc_glDeleteVertexArrays:QWORD + Line 116: EXTRN _ptrc_glGenFramebuffers:QWORD + Line 117: EXTRN _ptrc_glGenVertexArrays:QWORD + Line 118: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 119: EXTRN ?active@glcycle_t@@2_NA:BYTE ; glcycle_t::active + Line 120: EXTRN ?UpdateCycles@IShadowMap@@2Vcycle_t@@A:QWORD ; IShadowMap::UpdateCycles + Line 121: EXTRN ?vid_rendermode@@3VFIntCVar@@A:BYTE ; vid_rendermode + Line 122: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 123: EXTRN ?Gamma@@3VFFloatCVar@@A:BYTE ; Gamma + Line 124: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 125: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 126: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 127: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 128: EXTRN ?r_viewwindow@@3UFViewWindow@@A:BYTE ; r_viewwindow + Line 129: EXTRN ?r_NoInterpolate@@3_NA:BYTE ; r_NoInterpolate + Line 130: EXTRN ?All@@3Vglcycle_t@@A:QWORD ; All + Line 131: EXTRN ?iter_dlightf@@3HA:DWORD ; iter_dlightf + Line 132: EXTRN ?iter_dlight@@3HA:DWORD ; iter_dlight + Line 133: EXTRN ?draw_dlight@@3HA:DWORD ; draw_dlight + Line 134: EXTRN ?draw_dlightf@@3HA:DWORD ; draw_dlightf + Line 135: EXTRN ?gl@@3URenderContext@@A:BYTE ; gl + Line 136: EXTRN ?gl_shadowmap_quality@@3VFIntCVar@@A:BYTE ; gl_shadowmap_quality + Line 137: EXTRN ?gl_RenderState@OpenGLRenderer@@3VFGLRenderState@1@A:BYTE ; OpenGLRenderer::gl_RenderState + Line 138: EXTRN ?cl_capfps@@3VFBoolCVar@@A:BYTE ; cl_capfps + Line 139: EXTRN ?NoInterpolateView@@3_NA:BYTE ; NoInterpolateView + Line 140: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_renderstate.cod (52 hits) + Line 29: EXTRN _purecall:PROC + Line 94: EXTRN ?loadIdentity@VSMatrix@@QEAAXXZ:PROC ; VSMatrix::loadIdentity + Line 95: EXTRN ?computeNormalMatrix@VSMatrix@@QEAAXPEBM@Z:PROC ; VSMatrix::computeNormalMatrix + Line 96: EXTRN ?GetLayer@FMaterial@@QEAAPEAVIHardwareTexture@@HHPEAPEAVFTexture@@@Z:PROC ; FMaterial::GetLayer + Line 97: EXTRN ?Bind@FShader@OpenGLRenderer@@QEAA_NXZ:PROC ; OpenGLRenderer::FShader::Bind + Line 98: EXTRN ?BindEffect@FShaderManager@OpenGLRenderer@@QEAAPEAVFShader@2@HW4EPassType@2@@Z:PROC ; OpenGLRenderer::FShaderManager::BindEffect + Line 99: EXTRN ?Get@FShaderManager@OpenGLRenderer@@QEAAPEAVFShader@2@I_NW4EPassType@2@@Z:PROC ; OpenGLRenderer::FShaderManager::Get + Line 100: EXTRN ?DoBindUBO@FLightBuffer@@QEAAHI@Z:PROC ; FLightBuffer::DoBindUBO + Line 101: EXTRN ?Unbind@FHardwareTexture@OpenGLRenderer@@SAXH@Z:PROC ; OpenGLRenderer::FHardwareTexture::Unbind + Line 102: EXTRN ?BindOrCreate@FHardwareTexture@OpenGLRenderer@@QEAA_NPEAVFTexture@@HHHH@Z:PROC ; OpenGLRenderer::FHardwareTexture::BindOrCreate + Line 103: EXTRN ?Bind@GLBuffer@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::GLBuffer::Bind + Line 104: EXTRN ?Bind@GLVertexBuffer@OpenGLRenderer@@QEAAXPEAH@Z:PROC ; OpenGLRenderer::GLVertexBuffer::Bind + Line 105: EXTRN ?Set2D@GLViewpointBuffer@@QEAAXAEAVFRenderState@@HH@Z:PROC ; GLViewpointBuffer::Set2D + Line 106: EXTRN _ptrc_glBlendFunc:QWORD + Line 107: EXTRN _ptrc_glClear:QWORD + Line 108: EXTRN _ptrc_glClearColor:QWORD + Line 109: EXTRN _ptrc_glClearDepth:QWORD + Line 110: EXTRN _ptrc_glClearStencil:QWORD + Line 111: EXTRN _ptrc_glColorMask:QWORD + Line 112: EXTRN _ptrc_glDepthFunc:QWORD + Line 113: EXTRN _ptrc_glDepthMask:QWORD + Line 114: EXTRN _ptrc_glDepthRange:QWORD + Line 115: EXTRN _ptrc_glDisable:QWORD + Line 116: EXTRN _ptrc_glEnable:QWORD + Line 117: EXTRN _ptrc_glFrontFace:QWORD + Line 118: EXTRN _ptrc_glIsEnabled:QWORD + Line 119: EXTRN _ptrc_glScissor:QWORD + Line 120: EXTRN _ptrc_glStencilFunc:QWORD + Line 121: EXTRN _ptrc_glStencilOp:QWORD + Line 122: EXTRN _ptrc_glViewport:QWORD + Line 123: EXTRN _ptrc_glDrawArrays:QWORD + Line 124: EXTRN _ptrc_glDrawElements:QWORD + Line 125: EXTRN _ptrc_glPolygonOffset:QWORD + Line 126: EXTRN _ptrc_glBlendEquation:QWORD + Line 127: EXTRN _ptrc_glDrawBuffers:QWORD + Line 128: EXTRN _ptrc_glUniform1f:QWORD + Line 129: EXTRN _ptrc_glUniform1i:QWORD + Line 130: EXTRN _ptrc_glUniform2fv:QWORD + Line 131: EXTRN _ptrc_glUniform4f:QWORD + Line 132: EXTRN _ptrc_glUniform4fv:QWORD + Line 133: EXTRN _ptrc_glUniformMatrix4fv:QWORD + Line 134: EXTRN _ptrc_glVertexAttrib4fv:QWORD + Line 135: EXTRN ?gl@@3URenderContext@@A:BYTE ; gl + Line 136: EXTRN ?gl_texture_usehires@@3VFBoolCVar@@A:BYTE ; gl_texture_usehires + Line 137: EXTRN ?gl_fogmode@@3VFIntCVar@@A:BYTE ; gl_fogmode + Line 138: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 139: EXTRN ?active@glcycle_t@@2_NA:BYTE ; glcycle_t::active + Line 140: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 141: EXTRN ?GLRenderer@OpenGLRenderer@@3PEAVFGLRenderer@1@EA:QWORD ; OpenGLRenderer::GLRenderer + Line 142: EXTRN ?drawcalls@@3Vglcycle_t@@A:QWORD ; drawcalls + Line 143: EXTRN __ImageBase:BYTE + Line 144: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_samplers.cod (15 hits) + Line 18: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 19: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 20: EXTRN ?LabelObject@FGLDebug@OpenGLRenderer@@SAXIIPEBD@Z:PROC ; OpenGLRenderer::FGLDebug::LabelObject + Line 21: EXTRN __CxxFrameHandler3:PROC + Line 22: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 23: EXTRN _ptrc_glBindSampler:QWORD + Line 24: EXTRN _ptrc_glDeleteSamplers:QWORD + Line 25: EXTRN _ptrc_glGenSamplers:QWORD + Line 26: EXTRN _ptrc_glSamplerParameterf:QWORD + Line 27: EXTRN _ptrc_glSamplerParameteri:QWORD + Line 28: EXTRN ?gl_texture_filter@@3VFIntCVar@@A:BYTE ; gl_texture_filter + Line 29: EXTRN ?gl_texture_filter_anisotropic@@3VFFloatCVar@@A:BYTE ; gl_texture_filter_anisotropic + Line 30: EXTRN ?vid_rendermode@@3VFIntCVar@@A:BYTE ; vid_rendermode + Line 31: EXTRN ?TexFilter@OpenGLRenderer@@3PAUTexFilter_s@1@A:BYTE ; OpenGLRenderer::TexFilter + Line 32: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_scene.cod (51 hits) + Line 43: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 44: EXTRN atexit:PROC + Line 45: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 46: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 47: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 48: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 49: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 50: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 51: EXTRN ?R_SetupFrame@@YAXAEAUFRenderViewpoint@@AEAUFViewWindow@@PEAVAActor@@@Z:PROC ; R_SetupFrame + Line 52: EXTRN ?SetAttenuationForLevel@FLightDefaults@@SAX_N@Z:PROC ; FLightDefaults::SetAttenuationForLevel + Line 53: EXTRN ?PushGroup@FGLDebug@OpenGLRenderer@@SAXAEBVFString@@@Z:PROC ; OpenGLRenderer::FGLDebug::PushGroup + Line 54: EXTRN ?PopGroup@FGLDebug@OpenGLRenderer@@SAXXZ:PROC ; OpenGLRenderer::FGLDebug::PopGroup + Line 55: EXTRN ?Apply@FGLRenderState@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderState::Apply + Line 56: EXTRN ?BindSceneFB@FGLRenderBuffers@OpenGLRenderer@@QEAAX_N@Z:PROC ; OpenGLRenderer::FGLRenderBuffers::BindSceneFB + Line 57: EXTRN ?BlitSceneToTexture@FGLRenderBuffers@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderBuffers::BlitSceneToTexture + Line 58: EXTRN ?BlitToEyeTexture@FGLRenderBuffers@OpenGLRenderer@@QEAAXH@Z:PROC ; OpenGLRenderer::FGLRenderBuffers::BlitToEyeTexture + Line 59: EXTRN ?Bind@GLViewpointBuffer@@QEAAHAEAVFRenderState@@I@Z:PROC ; GLViewpointBuffer::Bind + Line 60: EXTRN ?StartDrawInfo@HWDrawInfo@@SAPEAU1@PEAUFLevelLocals@@PEAU1@AEAUFRenderViewpoint@@PEAUHWViewpointUniforms@@@Z:PROC ; HWDrawInfo::StartDrawInfo + Line 61: EXTRN ?EndDrawInfo@HWDrawInfo@@QEAAPEAU1@XZ:PROC ; HWDrawInfo::EndDrawInfo + Line 62: EXTRN ?SetViewArea@HWDrawInfo@@QEAAXXZ:PROC ; HWDrawInfo::SetViewArea + Line 63: EXTRN ?SetFullbrightFlags@HWDrawInfo@@QEAAHPEAVplayer_t@@@Z:PROC ; HWDrawInfo::SetFullbrightFlags + Line 64: EXTRN ?CreateScene@HWDrawInfo@@QEAAXXZ:PROC ; HWDrawInfo::CreateScene + Line 65: EXTRN ?RenderScene@HWDrawInfo@@QEAAXAEAVFRenderState@@@Z:PROC ; HWDrawInfo::RenderScene + Line 66: EXTRN ?RenderTranslucent@HWDrawInfo@@QEAAXAEAVFRenderState@@@Z:PROC ; HWDrawInfo::RenderTranslucent + Line 67: EXTRN ?EndDrawScene@HWDrawInfo@@QEAAXPEAUsector_t@@AEAVFRenderState@@@Z:PROC ; HWDrawInfo::EndDrawScene + Line 68: EXTRN ?DrawEndScene2D@HWDrawInfo@@QEAAXPEAUsector_t@@AEAVFRenderState@@@Z:PROC ; HWDrawInfo::DrawEndScene2D + Line 69: EXTRN ?Set3DViewport@HWDrawInfo@@QEAAXAEAVFRenderState@@@Z:PROC ; HWDrawInfo::Set3DViewport + Line 70: EXTRN ?ProcessScene@HWDrawInfo@@QEAAX_NAEBV?$function@$$A6AXPEAUHWDrawInfo@@H@Z@std@@@Z:PROC ; HWDrawInfo::ProcessScene + Line 71: EXTRN ?SetupView@HWDrawInfo@@QEAAXAEAVFRenderState@@MMM_N1@Z:PROC ; HWDrawInfo::SetupView + Line 72: EXTRN ?RenderFirstSkyPortal@FPortalSceneState@@QEAA_NHPEAUHWDrawInfo@@AEAVFRenderState@@@Z:PROC ; FPortalSceneState::RenderFirstSkyPortal + Line 73: EXTRN ?EndFrame@FPortalSceneState@@QEAAXPEAUHWDrawInfo@@AEAVFRenderState@@@Z:PROC ; FPortalSceneState::EndFrame + Line 74: EXTRN ?GetProjection@VREyeInfo@@QEBA?AVVSMatrix@@MMM@Z:PROC ; VREyeInfo::GetProjection + Line 75: EXTRN ?GetViewShift@VREyeInfo@@QEBA?AU?$TVector3@N@@M@Z:PROC ; VREyeInfo::GetViewShift + Line 76: EXTRN ?GetVRMode@VRMode@@SAPEBU1@_N@Z:PROC ; VRMode::GetVRMode + Line 77: EXTRN ?PostProcessScene@FGLRenderer@OpenGLRenderer@@QEAAXHAEBV?$function@$$A6AXXZ@std@@@Z:PROC ; OpenGLRenderer::FGLRenderer::PostProcessScene + Line 78: EXTRN ?AmbientOccludeScene@FGLRenderer@OpenGLRenderer@@QEAAXM@Z:PROC ; OpenGLRenderer::FGLRenderer::AmbientOccludeScene + Line 79: EXTRN ?UpdateShadowMap@FGLRenderer@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderer::UpdateShadowMap + Line 80: EXTRN __CxxFrameHandler3:PROC + Line 81: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 82: EXTRN _ptrc_glDepthMask:QWORD + Line 83: EXTRN _ptrc_glViewport:QWORD + Line 84: EXTRN _ptrc_glDrawBuffers:QWORD + Line 85: EXTRN ?active@glcycle_t@@2_NA:BYTE ; glcycle_t::active + Line 86: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 87: EXTRN ?r_viewwindow@@3UFViewWindow@@A:BYTE ; r_viewwindow + Line 88: EXTRN ?PostProcess@@3Vglcycle_t@@A:QWORD ; PostProcess + Line 89: EXTRN ?gl_ssao@@3VFIntCVar@@A:BYTE ; gl_ssao + Line 90: EXTRN ?gl_ssao_portals@@3VFIntCVar@@A:BYTE ; gl_ssao_portals + Line 91: EXTRN ?gl_RenderState@OpenGLRenderer@@3VFGLRenderState@1@A:BYTE ; OpenGLRenderer::gl_RenderState + Line 92: EXTRN ?GLRenderer@OpenGLRenderer@@3PEAVFGLRenderer@1@EA:QWORD ; OpenGLRenderer::GLRenderer + Line 93: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_shader.cod (71 hits) + Line 614: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 615: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 616: EXTRN atexit:PROC + Line 617: EXTRN __std_terminate:PROC + Line 618: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 619: EXTRN strstr:PROC + Line 620: EXTRN __std_exception_copy:PROC + Line 621: EXTRN __std_exception_destroy:PROC + Line 622: EXTRN ??_Eexception@std@@UEAAPEAXI@Z:PROC ; std::exception::`vector deleting destructor' + Line 623: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 624: EXTRN ??_Eruntime_error@std@@UEAAPEAXI@Z:PROC ; std::runtime_error::`vector deleting destructor' + Line 625: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 626: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 627: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 628: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 629: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 630: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 631: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 632: EXTRN ??H@YA?AVFString@@PEBDAEBV0@@Z:PROC ; operator+ + Line 633: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 634: EXTRN ?IndexOf@FString@@QEBAJPEBDJ@Z:PROC ; FString::IndexOf + Line 635: EXTRN ?Substitute@FString@@QEAAXPEBD0@Z:PROC ; FString::Substitute + Line 636: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 637: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 638: EXTRN mysnprintf:PROC + Line 639: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 640: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 641: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 642: EXTRN ?Open@FileWriter@@SAPEAV1@PEBD@Z:PROC ; FileWriter::Open + Line 643: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 644: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 645: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForFullName + Line 646: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 647: EXTRN ?ExtractFileBase@@YA?AVFString@@PEBD_N@Z:PROC ; ExtractFileBase + Line 648: EXTRN ?CreatePath@@YAXPEBD@Z:PROC ; CreatePath + Line 649: EXTRN ?Init@MD5Context@@QEAAXXZ:PROC ; MD5Context::Init + Line 650: EXTRN ?Update@MD5Context@@QEAAXPEBEI@Z:PROC ; MD5Context::Update + Line 651: EXTRN ?Final@MD5Context@@QEAAXQEAE@Z:PROC ; MD5Context::Final + Line 652: EXTRN ?M_GetCachePath@@YA?AVFString@@_N@Z:PROC ; M_GetCachePath + Line 653: EXTRN ?RemoveLegacyUserUniforms@@YA?AVFString@@V1@@Z:PROC ; RemoveLegacyUserUniforms + Line 654: EXTRN ?LabelObject@FGLDebug@OpenGLRenderer@@SAXIIPEBD@Z:PROC ; OpenGLRenderer::FGLDebug::LabelObject + Line 655: EXTRN _CxxThrowException:PROC + Line 656: EXTRN __CxxFrameHandler3:PROC + Line 657: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 658: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 659: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 660: EXTRN _ptrc_glGetString:QWORD + Line 661: EXTRN _ptrc_glAttachShader:QWORD + Line 662: EXTRN _ptrc_glCompileShader:QWORD + Line 663: EXTRN _ptrc_glCreateProgram:QWORD + Line 664: EXTRN _ptrc_glCreateShader:QWORD + Line 665: EXTRN _ptrc_glDeleteProgram:QWORD + Line 666: EXTRN _ptrc_glDeleteShader:QWORD + Line 667: EXTRN _ptrc_glGetProgramInfoLog:QWORD + Line 668: EXTRN _ptrc_glGetProgramiv:QWORD + Line 669: EXTRN _ptrc_glGetShaderInfoLog:QWORD + Line 670: EXTRN _ptrc_glGetUniformLocation:QWORD + Line 671: EXTRN _ptrc_glLinkProgram:QWORD + Line 672: EXTRN _ptrc_glShaderSource:QWORD + Line 673: EXTRN _ptrc_glUniform1i:QWORD + Line 674: EXTRN _ptrc_glUseProgram:QWORD + Line 675: EXTRN _ptrc_glGetUniformBlockIndex:QWORD + Line 676: EXTRN _ptrc_glUniformBlockBinding:QWORD + Line 677: EXTRN _ptrc_glGetProgramBinary:QWORD + Line 678: EXTRN _ptrc_glProgramBinary:QWORD + Line 679: EXTRN ?usershaders@@3V?$TArray@UUserShaderDesc@@U1@@@A:BYTE ; usershaders + Line 680: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 681: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 682: EXTRN ?gl@@3URenderContext@@A:BYTE ; gl + Line 683: EXTRN ?GLRenderer@OpenGLRenderer@@3PEAVFGLRenderer@1@EA:QWORD ; OpenGLRenderer::GLRenderer + Line 684: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_shaderprogram.cod (52 hits) + Line 42: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 43: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 44: EXTRN _purecall:PROC + Line 45: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 46: EXTRN __std_terminate:PROC + Line 47: EXTRN roundf:PROC + Line 48: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 49: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 50: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 51: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 52: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 53: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 54: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 55: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 56: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 57: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 58: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 59: EXTRN ?LabelObject@FGLDebug@OpenGLRenderer@@SAXIIPEBD@Z:PROC ; OpenGLRenderer::FGLDebug::LabelObject + Line 60: EXTRN ??_EIShaderProgram@@UEAAPEAXI@Z:PROC ; IShaderProgram::`vector deleting destructor' + Line 61: EXTRN ??_EFShaderProgram@OpenGLRenderer@@UEAAPEAXI@Z:PROC ; OpenGLRenderer::FShaderProgram::`vector deleting destructor' + Line 62: EXTRN ?RemoveSamplerBindings@@YA?AVFString@@V1@AEAV?$TArray@U?$pair@VFString@@H@std@@U12@@@@Z:PROC ; RemoveSamplerBindings + Line 63: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 64: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForFullName + Line 65: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 66: EXTRN ?IsShaderCacheActive@OpenGLRenderer@@YA_NXZ:PROC ; OpenGLRenderer::IsShaderCacheActive + Line 67: EXTRN ?LoadCachedProgramBinary@OpenGLRenderer@@YA?AV?$TArray@EE@@AEBVFString@@0AEAI@Z:PROC ; OpenGLRenderer::LoadCachedProgramBinary + Line 68: EXTRN ?SaveCachedProgramBinary@OpenGLRenderer@@YAXAEBVFString@@0AEBV?$TArray@EE@@I@Z:PROC ; OpenGLRenderer::SaveCachedProgramBinary + Line 69: EXTRN __CxxFrameHandler3:PROC + Line 70: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 71: EXTRN _ptrc_glAttachShader:QWORD + Line 72: EXTRN _ptrc_glCompileShader:QWORD + Line 73: EXTRN _ptrc_glCreateProgram:QWORD + Line 74: EXTRN _ptrc_glCreateShader:QWORD + Line 75: EXTRN _ptrc_glDeleteProgram:QWORD + Line 76: EXTRN _ptrc_glDeleteShader:QWORD + Line 77: EXTRN _ptrc_glGetProgramInfoLog:QWORD + Line 78: EXTRN _ptrc_glGetProgramiv:QWORD + Line 79: EXTRN _ptrc_glGetShaderInfoLog:QWORD + Line 80: EXTRN _ptrc_glGetShaderiv:QWORD + Line 81: EXTRN _ptrc_glGetUniformLocation:QWORD + Line 82: EXTRN _ptrc_glLinkProgram:QWORD + Line 83: EXTRN _ptrc_glShaderSource:QWORD + Line 84: EXTRN _ptrc_glUniform1i:QWORD + Line 85: EXTRN _ptrc_glUseProgram:QWORD + Line 86: EXTRN _ptrc_glGetUniformBlockIndex:QWORD + Line 87: EXTRN _ptrc_glUniformBlockBinding:QWORD + Line 88: EXTRN _ptrc_glGetProgramBinary:QWORD + Line 89: EXTRN _ptrc_glProgramBinary:QWORD + Line 90: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 91: EXTRN ?gl@@3URenderContext@@A:BYTE ; gl + Line 92: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 93: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_stereo3d.cod (26 hits) + Line 30: EXTRN ?BindOutputFB@FGLRenderBuffers@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderBuffers::BindOutputFB + Line 31: EXTRN ?BindEyeTexture@FGLRenderBuffers@OpenGLRenderer@@QEAAXHH@Z:PROC ; OpenGLRenderer::FGLRenderBuffers::BindEyeTexture + Line 32: EXTRN ?ClearBorders@FGLRenderer@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderer::ClearBorders + Line 33: EXTRN ?RenderScreenQuad@FGLRenderer@OpenGLRenderer@@QEAAXXZ:PROC ; OpenGLRenderer::FGLRenderer::RenderScreenQuad + Line 34: EXTRN ?DrawPresentTexture@FGLRenderer@OpenGLRenderer@@QEAAXAEBUIntRect@@_N@Z:PROC ; OpenGLRenderer::FGLRenderer::DrawPresentTexture + Line 35: EXTRN ??0FGLPostProcessState@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FGLPostProcessState::FGLPostProcessState + Line 36: EXTRN ??1FGLPostProcessState@OpenGLRenderer@@QEAA@XZ:PROC ; OpenGLRenderer::FGLPostProcessState::~FGLPostProcessState + Line 37: EXTRN ?SaveTextureBindings@FGLPostProcessState@OpenGLRenderer@@QEAAXI@Z:PROC ; OpenGLRenderer::FGLPostProcessState::SaveTextureBindings + Line 38: EXTRN __CxxFrameHandler3:PROC + Line 39: EXTRN _ptrc_glColorMask:QWORD + Line 40: EXTRN _ptrc_glDrawBuffer:QWORD + Line 41: EXTRN _ptrc_glGetBooleanv:QWORD + Line 42: EXTRN _ptrc_glTexParameteri:QWORD + Line 43: EXTRN _ptrc_glViewport:QWORD + Line 44: EXTRN _ptrc_glActiveTexture:QWORD + Line 45: EXTRN _ptrc_glBindFramebuffer:QWORD + Line 46: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 47: EXTRN ?Gamma@@3VFFloatCVar@@A:BYTE ; Gamma + Line 48: EXTRN ?vr_mode@@3VFIntCVar@@A:BYTE ; vr_mode + Line 49: EXTRN ?vid_saturation@@3VFFloatCVar@@A:BYTE ; vid_saturation + Line 50: EXTRN ?vid_brightness@@3VFFloatCVar@@A:BYTE ; vid_brightness + Line 51: EXTRN ?vid_contrast@@3VFFloatCVar@@A:BYTE ; vid_contrast + Line 52: EXTRN ?gl_satformula@@3VFIntCVar@@A:BYTE ; gl_satformula + Line 53: EXTRN ?gl_dither_bpc@@3VFIntCVar@@A:BYTE ; gl_dither_bpc + Line 54: EXTRN __ImageBase:BYTE + Line 55: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gl_sysfb.cod (34 hits) + Line 12: EXTRN ?vid_vsync@@3VFBoolCVar@@A:BYTE ; vid_vsync + Line 63: EXTRN _purecall:PROC + Line 64: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 65: EXTRN atexit:PROC + Line 66: EXTRN strstr:PROC + Line 67: EXTRN __imp_wglGetProcAddress:PROC + Line 68: EXTRN __imp_SwapBuffers:PROC + Line 69: EXTRN __imp_GetDC:PROC + Line 70: EXTRN __imp_ReleaseDC:PROC + Line 71: EXTRN ?_Xbad_function_call@std@@YAXXZ:PROC ; std::_Xbad_function_call + Line 72: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 73: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 74: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 75: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 76: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 77: EXTRN ?Update@DFrameBuffer@@UEAAXXZ:PROC ; DFrameBuffer::Update + Line 78: EXTRN ?GetCaps@DFrameBuffer@@UEAAIXZ:PROC ; DFrameBuffer::GetCaps + Line 79: EXTRN ?WriteSavePic@DFrameBuffer@@UEAAXPEAVplayer_t@@PEAVFileWriter@@HH@Z:PROC ; DFrameBuffer::WriteSavePic + Line 80: EXTRN ?WipeStartScreen@DFrameBuffer@@UEAAPEAVFTexture@@XZ:PROC ; DFrameBuffer::WipeStartScreen + Line 81: EXTRN ?WipeEndScreen@DFrameBuffer@@UEAAPEAVFTexture@@XZ:PROC ; DFrameBuffer::WipeEndScreen + Line 82: EXTRN ?SetViewportRects@DFrameBuffer@@UEAAXPEAUIntRect@@@Z:PROC ; DFrameBuffer::SetViewportRects + Line 83: EXTRN ??0SystemBaseFrameBuffer@@QEAA@PEAX_N@Z:PROC ; SystemBaseFrameBuffer::SystemBaseFrameBuffer + Line 84: EXTRN ??1SystemBaseFrameBuffer@@UEAA@XZ:PROC ; SystemBaseFrameBuffer::~SystemBaseFrameBuffer + Line 85: EXTRN ?GetClientWidth@SystemBaseFrameBuffer@@UEAAHXZ:PROC ; SystemBaseFrameBuffer::GetClientWidth + Line 86: EXTRN ?GetClientHeight@SystemBaseFrameBuffer@@UEAAHXZ:PROC ; SystemBaseFrameBuffer::GetClientHeight + Line 87: EXTRN ?IsFullscreen@SystemBaseFrameBuffer@@UEAA_NXZ:PROC ; SystemBaseFrameBuffer::IsFullscreen + Line 88: EXTRN ?ToggleFullscreen@SystemBaseFrameBuffer@@UEAAX_N@Z:PROC ; SystemBaseFrameBuffer::ToggleFullscreen + Line 89: EXTRN ?SetWindowSize@SystemBaseFrameBuffer@@UEAAXHH@Z:PROC ; SystemBaseFrameBuffer::SetWindowSize + Line 90: EXTRN ??_ESystemGLFrameBuffer@@UEAAPEAXI@Z:PROC ; SystemGLFrameBuffer::`vector deleting destructor' + Line 91: EXTRN ?I_FPSLimit@@YAXXZ:PROC ; I_FPSLimit + Line 92: EXTRN ?InitHardware@Win32GLVideo@@QEAA_NPEAUHWND__@@H@Z:PROC ; Win32GLVideo::InitHardware + Line 93: EXTRN __CxxFrameHandler3:PROC + Line 94: EXTRN ?Video@@3PEAVIVideo@@EA:QWORD ; Video + Line 95: EXTRN ?Window@@3PEAUHWND__@@EA:QWORD ; Window + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gldefs.cod (72 hits) + Line 312: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 313: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 314: EXTRN atexit:PROC + Line 315: EXTRN _Init_thread_header:PROC + Line 316: EXTRN _Init_thread_footer:PROC + Line 317: EXTRN __std_terminate:PROC + Line 318: EXTRN strstr:PROC + Line 319: EXTRN strncpy:PROC + Line 320: EXTRN stricmp:PROC + Line 321: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 322: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 323: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 324: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 325: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 326: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 327: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 328: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 329: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 330: EXTRN ?ToUpper@FString@@QEAAXXZ:PROC ; FString::ToUpper + Line 331: EXTRN ?ToLower@FString@@QEAAXXZ:PROC ; FString::ToLower + Line 332: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 333: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 334: EXTRN ?SuperFastHash@@YAIPEBD_K@Z:PROC ; SuperFastHash + Line 335: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 336: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 337: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 338: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 339: EXTRN ?SavePos@FScanner@@QEAA?BUSavedPos@1@XZ:PROC ; FScanner::SavePos + Line 340: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 341: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 342: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 343: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 344: EXTRN ?GetToken@FScanner@@QEAA_NXZ:PROC ; FScanner::GetToken + Line 345: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 346: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 347: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 348: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 349: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 350: EXTRN ?CheckFloat@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckFloat + Line 351: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 352: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 353: EXTRN ?MatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MatchString + Line 354: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 355: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 356: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 357: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 358: EXTRN ?FindLumpMulti@FWadCollection@@QEAAHPEAPEBDPEAH_N1@Z:PROC ; FWadCollection::FindLumpMulti + Line 359: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 360: EXTRN ?FindTexture@FTextureManager@@QEAAPEAVFTexture@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::FindTexture + Line 361: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 362: EXTRN ?GetTextureID@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::GetTextureID + Line 363: EXTRN ?AddTexture@FTextureManager@@QEAA?AVFTextureID@@PEAVFTexture@@@Z:PROC ; FTextureManager::AddTexture + Line 364: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 365: EXTRN ?V_GetColor@@YAHPEBIPEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColor + Line 366: EXTRN ??0FLightDefaults@@QEAA@VFName@@W4ELightType@@@Z:PROC ; FLightDefaults::FLightDefaults + Line 367: EXTRN ??0FSkyBox@@QEAA@PEBD@Z:PROC ; FSkyBox::FSkyBox + Line 368: EXTRN ?AddLightDefaults@@YAXPEAVFLightDefaults@@N@Z:PROC ; AddLightDefaults + Line 369: EXTRN ?InitializeActorLights@@YAXAEAV?$TArray@VFLightAssociation@@V1@@@@Z:PROC ; InitializeActorLights + Line 370: EXTRN __CxxFrameHandler3:PROC + Line 371: EXTRN _Init_thread_epoch:DWORD + Line 372: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 373: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 374: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 375: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 376: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 377: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 378: EXTRN ?PostProcessShaders@@3V?$TArray@UPostProcessShader@@U1@@@A:BYTE ; PostProcessShaders + Line 379: EXTRN ?LightDefaults@@3V?$TDeletingArray@PEAVFLightDefaults@@PEAV1@@@A:BYTE ; LightDefaults + Line 380: EXTRN ?AttenuationIsSet@@3HA:DWORD ; AttenuationIsSet + Line 381: EXTRN __ImageBase:BYTE + Line 382: EXTRN _fltused:DWORD + Line 383: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\glnodes.cod (67 hits) + Line 16: EXTRN ?IsAlias@FConsoleCommand@@UEAA_NXZ:PROC ; FConsoleCommand::IsAlias + Line 17: EXTRN ?Run@FUnsafeConsoleCommand@@UEAAXAEAVFCommandLine@@PEAVAActor@@H@Z:PROC ; FUnsafeConsoleCommand::Run + Line 18: EXTRN ??_EFUnsafeConsoleCommand@@UEAAPEAXI@Z:PROC ; FUnsafeConsoleCommand::`vector deleting destructor' + Line 19: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 115: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 116: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 117: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 118: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 119: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 120: EXTRN atexit:PROC + Line 121: EXTRN __std_terminate:PROC + Line 122: EXTRN remove:PROC + Line 123: EXTRN strrchr:PROC + Line 124: EXTRN strncpy:PROC + Line 125: EXTRN strnicmp:PROC + Line 126: EXTRN compress:PROC + Line 127: EXTRN _rmdir:PROC + Line 128: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 129: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 130: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 131: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 132: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 133: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 134: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 135: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 136: EXTRN ?Left@FString@@QEBA?AV1@_K@Z:PROC ; FString::Left + Line 137: EXTRN ?Right@FString@@QEBA?AV1@_K@Z:PROC ; FString::Right + Line 138: EXTRN ?IndexOf@FString@@QEBAJDJ@Z:PROC ; FString::IndexOf + Line 139: EXTRN ?ReplaceChars@FString@@QEAAXDD@Z:PROC ; FString::ReplaceChars + Line 140: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 141: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 142: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 143: EXTRN c_sqrt:PROC + Line 144: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 145: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 146: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 147: EXTRN ?Open@FileWriter@@SAPEAV1@PEBD@Z:PROC ; FileWriter::Open + Line 148: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 149: EXTRN ?GetWadFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetWadFullName + Line 150: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDHH_N@Z:PROC ; FWadCollection::CheckNumForName + Line 151: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 152: EXTRN ?ReopenLumpReader@FWadCollection@@QEAA?AVFileReader@@H_N@Z:PROC ; FWadCollection::ReopenLumpReader + Line 153: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 154: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 155: EXTRN ?GetLumpFullPath@FWadCollection@@QEBA?AVFString@@H@Z:PROC ; FWadCollection::GetLumpFullPath + Line 156: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 157: EXTRN ?FindMapBounds@FLevel@FNodeBuilder@@QEAAXXZ:PROC ; FNodeBuilder::FLevel::FindMapBounds + Line 158: EXTRN ??0FNodeBuilder@@QEAA@AEAUFLevel@0@AEAV?$TArray@UFPolyStart@FNodeBuilder@@U12@@@1_N@Z:PROC ; FNodeBuilder::FNodeBuilder + Line 159: EXTRN ??1FNodeBuilder@@QEAA@XZ:PROC ; FNodeBuilder::~FNodeBuilder + Line 160: EXTRN ?Extract@FNodeBuilder@@QEAAXAEAUFLevelLocals@@@Z:PROC ; FNodeBuilder::Extract + Line 161: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 162: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 163: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 164: EXTRN ?OpenResourceFile@FResourceFile@@SAPEAV1@PEBD_N1@Z:PROC ; FResourceFile::OpenResourceFile + Line 165: EXTRN ?GetChecksum@MapData@@QEAAXQEAE@Z:PROC ; MapData::GetChecksum + Line 166: EXTRN ?M_GetCachePath@@YA?AVFString@@_N@Z:PROC ; M_GetCachePath + Line 167: EXTRN ?CreatePath@@YAXPEBD@Z:PROC ; CreatePath + Line 168: EXTRN ?ScanDirectory@@YAXAEAV?$TArray@UFFileList@@U1@@@PEBD@Z:PROC ; ScanDirectory + Line 169: EXTRN ?I_msTime@@YA_KXZ:PROC ; I_msTime + Line 170: EXTRN ?LoadExtendedNodes@MapLoader@@QEAA_NAEAVFileReader@@I@Z:PROC ; MapLoader::LoadExtendedNodes + Line 171: EXTRN ?GetPolySpots@MapLoader@@QEAAXPEAUMapData@@AEAV?$TArray@UFPolyStart@FNodeBuilder@@U12@@@1@Z:PROC ; MapLoader::GetPolySpots + Line 172: EXTRN __CxxFrameHandler3:PROC + Line 173: EXTRN memmove:PROC + Line 174: EXTRN memset:PROC + Line 175: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 176: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 177: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\gus_pat.cod (11 hits) + Line 35: EXTRN _errno:PROC + Line 36: EXTRN calloc:PROC + Line 37: EXTRN free:PROC + Line 38: EXTRN malloc:PROC + Line 39: EXTRN strerror:PROC + Line 40: EXTRN ?_WM_ERROR_NEW@@YAXPEBDZZ:PROC ; _WM_ERROR_NEW + Line 41: EXTRN ?_WM_ERROR@@YAXPEBDIH0H@Z:PROC ; _WM_ERROR + Line 42: EXTRN ?_WM_BufferFile@@YAPEAEPEBDPEAK@Z:PROC ; _WM_BufferFile + Line 43: EXTRN memcmp:PROC + Line 44: EXTRN ?_WM_SampleRate@@3GA:WORD ; _WM_SampleRate + Line 45: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hardware.cod (26 hits) + Line 73: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 74: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 75: EXTRN atexit:PROC + Line 76: EXTRN __imp_CloseHandle:PROC + Line 77: EXTRN __imp_WaitForSingleObject:PROC + Line 78: EXTRN __imp_CreateEventA:PROC + Line 79: EXTRN __imp_SetFocus:PROC + Line 80: EXTRN __imp_GetActiveWindow:PROC + Line 81: EXTRN __imp_GetFocus:PROC + Line 82: EXTRN __imp_SetForegroundWindow:PROC + Line 83: EXTRN __imp_timeSetEvent:PROC + Line 84: EXTRN __imp_timeKillEvent:PROC + Line 85: EXTRN putenv:PROC + Line 86: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 87: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 88: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 89: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 90: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 91: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 92: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 93: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 94: EXTRN ??0Win32GLVideo@@QEAA@XZ:PROC ; Win32GLVideo::Win32GLVideo + Line 95: EXTRN __CxxFrameHandler3:PROC + Line 96: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 97: EXTRN ?vid_maxfps@@3VFIntCVar@@A:BYTE ; vid_maxfps + Line 98: EXTRN ?Window@@3PEAUHWND__@@EA:QWORD ; Window + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\helperthread.cod (17 hits) + Line 21: EXTRN _purecall:PROC + Line 22: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 23: EXTRN __imp_CloseHandle:PROC + Line 24: EXTRN __imp_InitializeCriticalSection:PROC + Line 25: EXTRN __imp_EnterCriticalSection:PROC + Line 26: EXTRN __imp_LeaveCriticalSection:PROC + Line 27: EXTRN __imp_DeleteCriticalSection:PROC + Line 28: EXTRN __imp_SetEvent:PROC + Line 29: EXTRN __imp_ResetEvent:PROC + Line 30: EXTRN __imp_WaitForSingleObject:PROC + Line 31: EXTRN __imp_CreateEventA:PROC + Line 32: EXTRN __imp_WaitForMultipleObjects:PROC + Line 33: EXTRN __imp_CreateThread:PROC + Line 34: EXTRN __imp_ExitThread:PROC + Line 35: EXTRN __imp_MsgWaitForMultipleObjects:PROC + Line 36: EXTRN ??_EFHelperThread@@UEAAPEAXI@Z:PROC ; FHelperThread::`vector deleting destructor' + Line 37: EXTRN memset:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hirestex.cod (24 hits) + Line 93: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 94: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 95: EXTRN strstr:PROC + Line 96: EXTRN stricmp:PROC + Line 97: EXTRN _access:PROC + Line 98: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 99: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 100: EXTRN ?IndexOf@FString@@QEBAJPEBDJ@Z:PROC ; FString::IndexOf + Line 101: EXTRN ?ToLower@FString@@QEAAXXZ:PROC ; FString::ToLower + Line 102: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 103: EXTRN ?GetWadFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetWadFullName + Line 104: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 105: EXTRN ?AddExternalFile@FWadCollection@@QEAAHPEBD@Z:PROC ; FWadCollection::AddExternalFile + Line 106: EXTRN ?CreateTexture@FTexture@@SAPEAV1@PEBDHW4ETextureType@@@Z:PROC ; FTexture::CreateTexture + Line 107: EXTRN ?CheckTrans@FTexture@@QEAAXPEAEHH@Z:PROC ; FTexture::CheckTrans + Line 108: EXTRN ?AddTexture@FTextureManager@@QEAA?AVFTextureID@@PEAVFTexture@@@Z:PROC ; FTextureManager::AddTexture + Line 109: EXTRN ?CopyPixelDataRGB@FBitmap@@QEAAXHHPEBEHHHHHHPEAUFCopyInfo@@HHH@Z:PROC ; FBitmap::CopyPixelDataRGB + Line 110: EXTRN __CxxFrameHandler3:PROC + Line 111: EXTRN memset:PROC + Line 112: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 113: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 114: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 115: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 116: EXTRN ?progdir@@3VFString@@A:QWORD ; progdir + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hq2x.cod (2 hits) + Line 10: EXTRN ?RGBtoYUV@@3PEAIEA:QWORD ; RGBtoYUV + Line 11: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hq2x_asm.cod (3 hits) + Line 19: EXTRN ?Diff@HQnX_asm@@YA_NII@Z:PROC ; HQnX_asm::Diff + Line 20: EXTRN ?LUT16to32@HQnX_asm@@3PAHA:BYTE ; HQnX_asm::LUT16to32 + Line 21: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hq3x.cod (2 hits) + Line 10: EXTRN ?RGBtoYUV@@3PEAIEA:QWORD ; RGBtoYUV + Line 11: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hq3x_asm.cod (3 hits) + Line 16: EXTRN ?Diff@HQnX_asm@@YA_NII@Z:PROC ; HQnX_asm::Diff + Line 17: EXTRN ?LUT16to32@HQnX_asm@@3PAHA:BYTE ; HQnX_asm::LUT16to32 + Line 18: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hq4x.cod (2 hits) + Line 10: EXTRN ?RGBtoYUV@@3PEAIEA:QWORD ; RGBtoYUV + Line 11: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hq4x_asm.cod (5 hits) + Line 32: EXTRN _Init_thread_header:PROC + Line 33: EXTRN _Init_thread_footer:PROC + Line 34: EXTRN _Init_thread_epoch:DWORD + Line 35: EXTRN __ImageBase:BYTE + Line 36: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hqnx_asm_Image.cod (3 hits) + Line 14: EXTRN free:PROC + Line 15: EXTRN malloc:PROC + Line 16: EXTRN memcpy:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hqresize.cod (58 hits) + Line 18: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 129: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 130: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 131: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 132: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 133: EXTRN atexit:PROC + Line 134: EXTRN __std_terminate:PROC + Line 135: EXTRN free:PROC + Line 136: EXTRN malloc:PROC + Line 137: EXTRN __std_exception_copy:PROC + Line 138: EXTRN __std_exception_destroy:PROC + Line 139: EXTRN ??_Eexception@std@@UEAAPEAXI@Z:PROC ; std::exception::`vector deleting destructor' + Line 140: EXTRN ??_Ebad_alloc@std@@UEAAPEAXI@Z:PROC ; std::bad_alloc::`vector deleting destructor' + Line 141: EXTRN ??_Elogic_error@std@@UEAAPEAXI@Z:PROC ; std::logic_error::`vector deleting destructor' + Line 142: EXTRN ??_Einvalid_argument@std@@UEAAPEAXI@Z:PROC ; std::invalid_argument::`vector deleting destructor' + Line 143: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 144: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 145: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 146: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 147: EXTRN ??0FFlagCVar@@QEAA@PEBDAEAVFIntCVar@@I@Z:PROC ; FFlagCVar::FFlagCVar + Line 148: EXTRN ?FlushAll@FTextureManager@@QEAAXXZ:PROC ; FTextureManager::FlushAll + Line 149: EXTRN ?hqxInit@@YAXXZ:PROC ; hqxInit + Line 150: EXTRN ?hq2x_32@@YAXPEAI0HH@Z:PROC ; hq2x_32 + Line 151: EXTRN ?hq3x_32@@YAXPEAI0HH@Z:PROC ; hq3x_32 + Line 152: EXTRN ?hq4x_32@@YAXPEAI0HH@Z:PROC ; hq4x_32 + Line 153: EXTRN ??0CImage@HQnX_asm@@QEAA@XZ:PROC ; HQnX_asm::CImage::CImage + Line 154: EXTRN ??1CImage@HQnX_asm@@QEAA@XZ:PROC ; HQnX_asm::CImage::~CImage + Line 155: EXTRN ?SetImage@CImage@HQnX_asm@@QEAAHPEAEHHH@Z:PROC ; HQnX_asm::CImage::SetImage + Line 156: EXTRN ?Convert32To17@CImage@HQnX_asm@@QEAAHXZ:PROC ; HQnX_asm::CImage::Convert32To17 + Line 157: EXTRN ?hq2x_32@HQnX_asm@@YAXPEAHPEAEHHH@Z:PROC ; HQnX_asm::hq2x_32 + Line 158: EXTRN ?hq3x_32@HQnX_asm@@YAXPEAHPEAEHHH@Z:PROC ; HQnX_asm::hq3x_32 + Line 159: EXTRN ?hq4x_32@HQnX_asm@@YAXPEAHPEAEHHH@Z:PROC ; HQnX_asm::hq4x_32 + Line 160: EXTRN ?InitLUTs@HQnX_asm@@YAXXZ:PROC ; HQnX_asm::InitLUTs + Line 161: EXTRN ?scale@xbrz@@YAX_KPEBIPEAIHHW4ColorFormat@1@AEBUScalerCfg@1@HH@Z:PROC ; xbrz::scale + Line 162: EXTRN ?scale@xbrz_old@@YAX_KPEBIPEAIHHAEBUScalerCfg@1@HH@Z:PROC ; xbrz_old::scale + Line 163: EXTRN ?Free@Concurrency@@YAXPEAX@Z:PROC ; Concurrency::Free + Line 164: EXTRN ?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ:PROC ; Concurrency::details::_Context::_CurrentContext + Line 165: EXTRN ?_Yield@_Context@details@Concurrency@@SAXXZ:PROC ; Concurrency::details::_Context::_Yield + Line 166: EXTRN ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QEBA_NXZ:PROC ; Concurrency::details::_Context::_IsSynchronouslyBlocked + Line 167: EXTRN ?_GetNumberOfVirtualProcessors@_CurrentScheduler@details@Concurrency@@SAIXZ:PROC ; Concurrency::details::_CurrentScheduler::_GetNumberOfVirtualProcessors + Line 168: EXTRN ?_Value@_SpinCount@details@Concurrency@@SAIXZ:PROC ; Concurrency::details::_SpinCount::_Value + Line 169: EXTRN ?_UnderlyingYield@details@Concurrency@@YAXXZ:PROC ; Concurrency::details::_UnderlyingYield + Line 170: EXTRN ??_E_Chore@details@Concurrency@@MEAAPEAXI@Z:PROC ; Concurrency::details::_Chore::`vector deleting destructor' + Line 171: EXTRN ?_CheckTaskCollection@_UnrealizedChore@details@Concurrency@@IEAAXXZ:PROC ; Concurrency::details::_UnrealizedChore::_CheckTaskCollection + Line 172: EXTRN ??_E_UnrealizedChore@details@Concurrency@@UEAAPEAXI@Z:PROC ; Concurrency::details::_UnrealizedChore::`vector deleting destructor' + Line 173: EXTRN ??1_StructuredTaskCollection@details@Concurrency@@QEAA@XZ:PROC ; Concurrency::details::_StructuredTaskCollection::~_StructuredTaskCollection + Line 174: EXTRN ?_Schedule@_StructuredTaskCollection@details@Concurrency@@QEAAXPEAV_UnrealizedChore@23@@Z:PROC ; Concurrency::details::_StructuredTaskCollection::_Schedule + Line 175: EXTRN ?_RunAndWait@_StructuredTaskCollection@details@Concurrency@@QEAA?AW4_TaskCollectionStatus@23@PEAV_UnrealizedChore@23@@Z:PROC ; Concurrency::details::_StructuredTaskCollection::_RunAndWait + Line 176: EXTRN ??0_Cancellation_beacon@details@Concurrency@@QEAA@XZ:PROC ; Concurrency::details::_Cancellation_beacon::_Cancellation_beacon + Line 177: EXTRN ??1_Cancellation_beacon@details@Concurrency@@QEAA@XZ:PROC ; Concurrency::details::_Cancellation_beacon::~_Cancellation_beacon + Line 178: EXTRN ?_Confirm_cancel@_Cancellation_beacon@details@Concurrency@@QEAA_NXZ:PROC ; Concurrency::details::_Cancellation_beacon::_Confirm_cancel + Line 179: EXTRN ?_Trace_ppl_function@Concurrency@@YAXAEBU_GUID@@EW4ConcRT_EventType@1@@Z:PROC ; Concurrency::_Trace_ppl_function + Line 180: EXTRN _CxxThrowException:PROC + Line 181: EXTRN __CxxFrameHandler3:PROC + Line 182: EXTRN __chkstk:PROC + Line 183: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 184: EXTRN ?PPLParallelForEventGuid@Concurrency@@3U_GUID@@B:BYTE ; Concurrency::PPLParallelForEventGuid + Line 185: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hu_scores.cod (48 hits) + Line 113: EXTRN atexit:PROC + Line 114: EXTRN qsort:PROC + Line 115: EXTRN stricmp:PROC + Line 116: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 117: EXTRN mysnprintf:PROC + Line 118: EXTRN ?IsValidTeam@FTeam@@QEAA_NI@Z:PROC ; FTeam::IsValidTeam + Line 119: EXTRN ?GetTextColor@FTeam@@QEBAHXZ:PROC ; FTeam::GetTextColor + Line 120: EXTRN ?GetLogo@FTeam@@QEBA?AVFString@@XZ:PROC ; FTeam::GetLogo + Line 121: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 122: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 123: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 124: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 125: EXTRN ?HSVtoRGB@@YAXPEAM00MMM@Z:PROC ; HSVtoRGB + Line 126: EXTRN ?GetTextureID@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::GetTextureID + Line 127: EXTRN ?Dim@DFrameBuffer@@QEAAXUPalEntry@@MHHHHPEATFRenderStyle@@@Z:PROC ; DFrameBuffer::Dim + Line 128: EXTRN ?Clear@DFrameBuffer@@QEAAXHHHHHI@Z:PROC ; DFrameBuffer::Clear + Line 129: EXTRN ?DrawTexture@DFrameBuffer@@QEAAXPEAVFTexture@@NNHZZ:PROC ; DFrameBuffer::DrawTexture + Line 130: EXTRN ?DrawText@DFrameBuffer@@QEAAXPEAVFFont@@HNNPEBDHZZ:PROC ; DFrameBuffer::DrawText + Line 131: EXTRN ?D_GetPlayerColor@@YAXHPEAM00PEAPEAUFPlayerColorSet@@@Z:PROC ; D_GetPlayerColor + Line 132: EXTRN ?StringWidth@FFont@@QEBAHPEBE@Z:PROC ; FFont::StringWidth + Line 133: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 134: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 135: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 136: EXTRN __CxxFrameHandler3:PROC + Line 137: EXTRN ?TeamLibrary@@3VFTeam@@A:BYTE ; TeamLibrary + Line 138: EXTRN ?Teams@@3V?$TArray@VFTeam@@V1@@@A:BYTE ; Teams + Line 139: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 140: EXTRN ?CleanXfac@@3HA:DWORD ; CleanXfac + Line 141: EXTRN ?CleanYfac@@3HA:DWORD ; CleanYfac + Line 142: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 143: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 144: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 145: EXTRN ?teamplay@@3VFBoolCVar@@A:BYTE ; teamplay + Line 146: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 147: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 148: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 149: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 150: EXTRN ?BigFont@@3PEAVFFont@@EA:QWORD ; BigFont + Line 151: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 152: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 153: EXTRN ?netdelay@@3PAY0CE@HA:BYTE ; netdelay + Line 154: EXTRN ?nodeforplayer@@3PAHA:BYTE ; nodeforplayer + Line 155: EXTRN ?ticdup@@3HA:DWORD ; ticdup + Line 156: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 157: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 158: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 159: EXTRN ?timelimit@@3VFFloatCVar@@A:BYTE ; timelimit + Line 160: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hudmessages.cod (42 hits) + Line 39: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 249: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 250: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 251: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 252: EXTRN __std_terminate:PROC + Line 253: EXTRN modff:PROC + Line 254: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 255: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 256: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 257: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 258: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 259: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 260: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 261: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 262: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 263: EXTRN ?V_BreakLines@@YA?AV?$TArray@UFBrokenLines@@U1@@@PEAVFFont@@HPEBE_N@Z:PROC ; V_BreakLines + Line 264: EXTRN ??_EDHUDMessageBase@@UEAAPEAXI@Z:PROC ; DHUDMessageBase::`vector deleting destructor' + Line 265: EXTRN ??_EDHUDMessage@@UEAAPEAXI@Z:PROC ; DHUDMessage::`vector deleting destructor' + Line 266: EXTRN ??_EDHUDMessageFadeOut@@UEAAPEAXI@Z:PROC ; DHUDMessageFadeOut::`vector deleting destructor' + Line 267: EXTRN ??_EDHUDMessageFadeInOut@@UEAAPEAXI@Z:PROC ; DHUDMessageFadeInOut::`vector deleting destructor' + Line 268: EXTRN ??_EDHUDMessageTypeOnFadeOut@@UEAAPEAXI@Z:PROC ; DHUDMessageTypeOnFadeOut::`vector deleting destructor' + Line 269: EXTRN ?VirtualToRealCoordsInt@DFrameBuffer@@QEBAXAEAH000HH_N1@Z:PROC ; DFrameBuffer::VirtualToRealCoordsInt + Line 270: EXTRN ?DrawText@DFrameBuffer@@QEAAXPEAVFFont@@HNNPEBDHZZ:PROC ; DFrameBuffer::DrawText + Line 271: EXTRN ?GetUIScale@@YAHH@Z:PROC ; GetUIScale + Line 272: EXTRN ?copystring@@YAPEADPEBD@Z:PROC ; copystring + Line 273: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 274: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 275: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 276: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 277: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAMPEAM@Z:PROC ; Serialize + Line 278: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 279: EXTRN ??$Serialize@D@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEADPEAPEAD@Z:PROC ; Serialize + Line 280: EXTRN ??$Serialize@VFFont@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAVFFont@@PEAPEAV1@@Z:PROC ; Serialize + Line 281: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEATFRenderStyle@@PEAT2@@Z:PROC ; Serialize + Line 282: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 283: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 284: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 285: EXTRN __CxxFrameHandler3:PROC + Line 286: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 287: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 288: EXTRN ?con_scaletext@@3VFIntCVar@@A:BYTE ; con_scaletext + Line 289: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_aabbtree.cod (6 hits) + Line 32: EXTRN __std_terminate:PROC + Line 33: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 34: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 35: EXTRN __CxxFrameHandler3:PROC + Line 36: EXTRN memmove:PROC + Line 37: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_bsp.cod (93 hits) + Line 22: EXTRN ??_E?$_Ref_count_obj@U?$atomic@_N@std@@@std@@UEAAPEAXI@Z:PROC ; std::_Ref_count_obj >::`vector deleting destructor' + Line 198: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 199: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 200: EXTRN atexit:PROC + Line 201: EXTRN __std_terminate:PROC + Line 202: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 203: EXTRN terminate:PROC + Line 204: EXTRN __std_exception_copy:PROC + Line 205: EXTRN __std_exception_destroy:PROC + Line 206: EXTRN ??_Eexception@std@@UEAAPEAXI@Z:PROC ; std::exception::`vector deleting destructor' + Line 207: EXTRN ?__ExceptionPtrCreate@@YAXPEAX@Z:PROC ; __ExceptionPtrCreate + Line 208: EXTRN ?__ExceptionPtrDestroy@@YAXPEAX@Z:PROC ; __ExceptionPtrDestroy + Line 209: EXTRN ?__ExceptionPtrCopy@@YAXPEAXPEBX@Z:PROC ; __ExceptionPtrCopy + Line 210: EXTRN ?__ExceptionPtrAssign@@YAXPEAXPEBX@Z:PROC ; __ExceptionPtrAssign + Line 211: EXTRN ?__ExceptionPtrToBool@@YA_NPEBX@Z:PROC ; __ExceptionPtrToBool + Line 212: EXTRN ?__ExceptionPtrCurrentException@@YAXPEAX@Z:PROC ; __ExceptionPtrCurrentException + Line 213: EXTRN ?__ExceptionPtrCopyException@@YAXPEAXPEBX1@Z:PROC ; __ExceptionPtrCopyException + Line 214: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 215: EXTRN ??_Elogic_error@std@@UEAAPEAXI@Z:PROC ; std::logic_error::`vector deleting destructor' + Line 216: EXTRN ?_Execute_once@std@@YAHAEAUonce_flag@1@P6AHPEAX1PEAPEAX@Z1@Z:PROC ; std::_Execute_once + Line 217: EXTRN ?_Syserror_map@std@@YAPEBDH@Z:PROC ; std::_Syserror_map + Line 218: EXTRN ??_E_Generic_error_category@std@@UEAAPEAXI@Z:PROC ; std::_Generic_error_category::`vector deleting destructor' + Line 219: EXTRN ?_Xbad_function_call@std@@YAXXZ:PROC ; std::_Xbad_function_call + Line 220: EXTRN _Thrd_start:PROC + Line 221: EXTRN _Thrd_detach:PROC + Line 222: EXTRN _Thrd_join:PROC + Line 223: EXTRN _Thrd_id:PROC + Line 224: EXTRN _Mtx_init:PROC + Line 225: EXTRN _Mtx_destroy:PROC + Line 226: EXTRN _Mtx_init_in_situ:PROC + Line 227: EXTRN _Mtx_destroy_in_situ:PROC + Line 228: EXTRN _Mtx_lock:PROC + Line 229: EXTRN _Mtx_unlock:PROC + Line 230: EXTRN _Cnd_init:PROC + Line 231: EXTRN _Cnd_destroy:PROC + Line 232: EXTRN _Cnd_init_in_situ:PROC + Line 233: EXTRN _Cnd_destroy_in_situ:PROC + Line 234: EXTRN _Cnd_wait:PROC + Line 235: EXTRN _Cnd_broadcast:PROC + Line 236: EXTRN _Cnd_signal:PROC + Line 237: EXTRN _Cnd_register_at_thread_exit:PROC + Line 238: EXTRN _Cnd_unregister_at_thread_exit:PROC + Line 239: EXTRN _Cnd_do_broadcast_at_thread_exit:PROC + Line 240: EXTRN ?_Throw_C_error@std@@YAXH@Z:PROC ; std::_Throw_C_error + Line 241: EXTRN ?_Throw_Cpp_error@std@@YAXH@Z:PROC ; std::_Throw_Cpp_error + Line 242: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 243: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 244: EXTRN ?BuildPolyBSP@subsector_t@@QEAAXXZ:PROC ; subsector_t::BuildPolyBSP + Line 245: EXTRN ?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z:PROC ; std::_Throw_future_error + Line 246: EXTRN ?_Rethrow_future_exception@std@@YAXVexception_ptr@1@@Z:PROC ; std::_Rethrow_future_exception + Line 247: EXTRN ??_Efuture_error@std@@UEAAPEAXI@Z:PROC ; std::future_error::`vector deleting destructor' + Line 248: EXTRN ??_E_Future_error_category@std@@UEAAPEAXI@Z:PROC ; std::_Future_error_category::`vector deleting destructor' + Line 249: EXTRN ??_E?$_Associated_state@H@std@@UEAAPEAXI@Z:PROC ; std::_Associated_state::`vector deleting destructor' + Line 250: EXTRN ?hw_CheckClip@@YA_NPEAUside_t@@PEAUsector_t@@1@Z:PROC ; hw_CheckClip + Line 251: EXTRN ?hw_FakeFlat@@YAPEAUsector_t@@PEAU1@W4area_t@@_N0@Z:PROC ; hw_FakeFlat + Line 252: EXTRN ?hw_CheckViewArea@@YA?AW4area_t@@PEAUvertex_t@@0PEAUsector_t@@1@Z:PROC ; hw_CheckViewArea + Line 253: EXTRN ?IsRangeVisible@Clipper@@AEAA_NII@Z:PROC ; Clipper::IsRangeVisible + Line 254: EXTRN ?AddClipRange@Clipper@@AEAAXII@Z:PROC ; Clipper::AddClipRange + Line 255: EXTRN ?RemoveClipRange@Clipper@@AEAAXII@Z:PROC ; Clipper::RemoveClipRange + Line 256: EXTRN ?PointToPseudoAngle@Clipper@@QEAAINN@Z:PROC ; Clipper::PointToPseudoAngle + Line 257: EXTRN ?CheckBox@Clipper@@QEAA_NPEBM@Z:PROC ; Clipper::CheckBox + Line 258: EXTRN ?Process@GLWall@@QEAAXPEAUHWDrawInfo@@PEAUseg_t@@PEAUsector_t@@2@Z:PROC ; GLWall::Process + Line 259: EXTRN ?ProcessSector@GLFlat@@QEAAXPEAUHWDrawInfo@@PEAUsector_t@@H@Z:PROC ; GLFlat::ProcessSector + Line 260: EXTRN ?Process@GLSprite@@QEAAXPEAUHWDrawInfo@@PEAVAActor@@PEAUsector_t@@W4area_t@@H@Z:PROC ; GLSprite::Process + Line 261: EXTRN ?ProcessParticle@GLSprite@@QEAAXPEAUHWDrawInfo@@PEAUparticle_t@@PEAUsector_t@@@Z:PROC ; GLSprite::ProcessParticle + Line 262: EXTRN ?AddHackedSubsector@HWDrawInfo@@QEAAXPEAUsubsector_t@@@Z:PROC ; HWDrawInfo::AddHackedSubsector + Line 263: EXTRN ?PreparePlayerSprites@HWDrawInfo@@QEAAXPEAUsector_t@@W4area_t@@@Z:PROC ; HWDrawInfo::PreparePlayerSprites + Line 264: EXTRN ?AddSubsectorToPortal@HWDrawInfo@@QEAAXPEAUFSectorPortalGroup@@PEAUsubsector_t@@@Z:PROC ; HWDrawInfo::AddSubsectorToPortal + Line 265: EXTRN ?CheckUpdate@FFlatVertexBuffer@@QEAAXPEAUsector_t@@@Z:PROC ; FFlatVertexBuffer::CheckUpdate + Line 266: EXTRN ??_E?$_Packaged_state@$$A6AXH@Z@std@@UEAAPEAXI@Z:PROC ; std::_Packaged_state::`vector deleting destructor' + Line 267: EXTRN ??_E?$_Ref_count_obj@V?$packaged_task@$$A6AXH@Z@std@@@std@@UEAAPEAXI@Z:PROC ; std::_Ref_count_obj >::`vector deleting destructor' + Line 268: EXTRN _CxxThrowException:PROC + Line 269: EXTRN __CxxFrameHandler3:PROC + Line 270: EXTRN memcpy:PROC + Line 271: EXTRN memmove:PROC + Line 272: EXTRN memset:PROC + Line 273: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 274: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 275: EXTRN ?active@glcycle_t@@2_NA:BYTE ; glcycle_t::active + Line 276: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 277: EXTRN ?validcount@@3HA:DWORD ; validcount + Line 278: EXTRN ?starttime@Clipper@@0IA:DWORD ; Clipper::starttime + Line 279: EXTRN ?SetupWall@@3Vglcycle_t@@A:QWORD ; SetupWall + Line 280: EXTRN ?ClipWall@@3Vglcycle_t@@A:QWORD ; ClipWall + Line 281: EXTRN ?SetupFlat@@3Vglcycle_t@@A:QWORD ; SetupFlat + Line 282: EXTRN ?SetupSprite@@3Vglcycle_t@@A:QWORD ; SetupSprite + Line 283: EXTRN ?Bsp@@3Vglcycle_t@@A:QWORD ; Bsp + Line 284: EXTRN ?MTWait@@3Vglcycle_t@@A:QWORD ; MTWait + Line 285: EXTRN ?WTTotal@@3Vglcycle_t@@A:QWORD ; WTTotal + Line 286: EXTRN ?rendered_lines@@3HA:DWORD ; rendered_lines + Line 287: EXTRN __ImageBase:BYTE + Line 288: EXTRN _fltused:DWORD + Line 289: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_clipper.cod (4 hits) + Line 72: EXTRN ??0FMemArena@@QEAA@_K@Z:PROC ; FMemArena::FMemArena + Line 73: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 74: EXTRN __libm_sse2_sincos_:PROC + Line 75: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_clock.cod (34 hits) + Line 56: EXTRN ??_EStat_rendertimes@@UEAAPEAXI@Z:PROC ; Stat_rendertimes::`vector deleting destructor' + Line 57: EXTRN ??_EStat_renderstats@@UEAAPEAXI@Z:PROC ; Stat_renderstats::`vector deleting destructor' + Line 58: EXTRN ??_EStat_lightstats@@UEAAPEAXI@Z:PROC ; Stat_lightstats::`vector deleting destructor' + Line 145: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 146: EXTRN atexit:PROC + Line 147: EXTRN _Init_thread_header:PROC + Line 148: EXTRN _Init_thread_footer:PROC + Line 149: EXTRN fclose:PROC + Line 150: EXTRN fopen:PROC + Line 151: EXTRN fputs:PROC + Line 152: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 153: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 154: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 155: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 156: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 157: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 158: EXTRN ?C_HideConsole@@YAXXZ:PROC ; C_HideConsole + Line 159: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 160: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 161: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 162: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 163: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 164: EXTRN ?FindStat@FStat@@SAPEAV1@PEBD@Z:PROC ; FStat::FindStat + Line 165: EXTRN ?I_msTime@@YA_KXZ:PROC ; I_msTime + Line 166: EXTRN __CxxFrameHandler3:PROC + Line 167: EXTRN _Init_thread_epoch:DWORD + Line 168: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 169: EXTRN ?ConsoleState@@3W4cstate_t@@A:DWORD ; ConsoleState + Line 170: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 171: EXTRN ?PerfToMillisec@@3NA:QWORD ; PerfToMillisec + Line 172: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 173: EXTRN ?vid_fps@@3VFBoolCVar@@A:BYTE ; vid_fps + Line 174: EXTRN _fltused:DWORD + Line 175: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_cvars.cod (12 hits) + Line 40: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 41: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 209: EXTRN atexit:PROC + Line 210: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 211: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 212: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 213: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 214: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 215: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 216: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 217: EXTRN ?FlushAll@FTextureManager@@QEAAXXZ:PROC ; FTextureManager::FlushAll + Line 218: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_decal.cod (15 hits) + Line 22: EXTRN ?GetXY@DBaseDecal@@QEBAXPEAUside_t@@AEAN1@Z:PROC ; DBaseDecal::GetXY + Line 23: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@PEAVFTexture@@_N1@Z:PROC ; FMaterial::ValidateTexture + Line 24: EXTRN ?SetColor@HWDrawInfo@@QEAAXAEAVFRenderState@@HH_NAEBUFColormap@@M1@Z:PROC ; HWDrawInfo::SetColor + Line 25: EXTRN ?SetFog@HWDrawInfo@@QEAAXAEAVFRenderState@@HH_NPEBUFColormap@@1@Z:PROC ; HWDrawInfo::SetFog + Line 26: EXTRN ?GetDynSpriteLight@HWDrawInfo@@QEAAXPEAVAActor@@MMMPEAUFLightNode@@HPEAM@Z:PROC ; HWDrawInfo::GetDynSpriteLight + Line 27: EXTRN ?AddDecal@HWDrawInfo@@QEAAPEAUGLDecal@@_N@Z:PROC ; HWDrawInfo::AddDecal + Line 28: EXTRN ?AllocVertices@FFlatVertexBuffer@@QEAA?AU?$pair@PEAUFFlatVertex@@I@std@@I@Z:PROC ; FFlatVertexBuffer::AllocVertices + Line 29: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 30: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 31: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 32: EXTRN ?gl_weaponlight@@3VFIntCVar@@A:BYTE ; gl_weaponlight + Line 33: EXTRN ?gl_light_sprites@@3VFBoolCVar@@A:BYTE ; gl_light_sprites + Line 34: EXTRN ?gl_mask_sprite_threshold@@3VFFloatCVar@@A:BYTE ; gl_mask_sprite_threshold + Line 35: EXTRN ?rendered_decals@@3HA:DWORD ; rendered_decals + Line 36: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_draw2d.cod (17 hits) + Line 24: EXTRN atexit:PROC + Line 25: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 26: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 27: EXTRN ?GetUniqueIndex@FRemapTable@@QEAAHXZ:PROC ; FRemapTable::GetUniqueIndex + Line 28: EXTRN ?ScreenToWindowX@DFrameBuffer@@QEAAHH@Z:PROC ; DFrameBuffer::ScreenToWindowX + Line 29: EXTRN ?ScreenToWindowY@DFrameBuffer@@QEAAHH@Z:PROC ; DFrameBuffer::ScreenToWindowY + Line 30: EXTRN ?Set2D@GLViewpointBuffer@@QEAAXAEAVFRenderState@@HH@Z:PROC ; GLViewpointBuffer::Set2D + Line 31: EXTRN ?translate@VSMatrix@@QEAAXMMM@Z:PROC ; VSMatrix::translate + Line 32: EXTRN ?scale@VSMatrix@@QEAAXMMM@Z:PROC ; VSMatrix::scale + Line 33: EXTRN ?loadIdentity@VSMatrix@@QEAAXXZ:PROC ; VSMatrix::loadIdentity + Line 34: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@PEAVFTexture@@_N1@Z:PROC ; FMaterial::ValidateTexture + Line 35: EXTRN __CxxFrameHandler3:PROC + Line 36: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 37: EXTRN ?active@glcycle_t@@2_NA:BYTE ; glcycle_t::active + Line 38: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 39: EXTRN ?twoD@@3Vglcycle_t@@A:QWORD ; twoD + Line 40: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_drawinfo.cod (82 hits) + Line 101: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 102: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 103: EXTRN _purecall:PROC + Line 104: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 105: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 106: EXTRN atexit:PROC + Line 107: EXTRN __std_terminate:PROC + Line 108: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 109: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 110: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 111: EXTRN ?_Xbad_function_call@std@@YAXXZ:PROC ; std::_Xbad_function_call + Line 112: EXTRN ??1FMemArena@@QEAA@XZ:PROC ; FMemArena::~FMemArena + Line 113: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 114: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 115: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 116: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 117: EXTRN ?AspectMultiplier@@YAHM@Z:PROC ; AspectMultiplier + Line 118: EXTRN ??0FRenderViewpoint@@QEAA@XZ:PROC ; FRenderViewpoint::FRenderViewpoint + Line 119: EXTRN ?SetViewAngle@FRenderViewpoint@@QEAAXAEBUFViewWindow@@@Z:PROC ; FRenderViewpoint::SetViewAngle + Line 120: EXTRN ?R_GetGlobVis@@YANAEBUFViewWindow@@N@Z:PROC ; R_GetGlobVis + Line 121: EXTRN ?PointInRenderSubsector@FLevelLocals@@QEAAPEAUsubsector_t@@HH@Z:PROC ; FLevelLocals::PointInRenderSubsector + Line 122: EXTRN ?translate@VSMatrix@@QEAAXMMM@Z:PROC ; VSMatrix::translate + Line 123: EXTRN ?scale@VSMatrix@@QEAAXMMM@Z:PROC ; VSMatrix::scale + Line 124: EXTRN ?rotate@VSMatrix@@QEAAXMMMM@Z:PROC ; VSMatrix::rotate + Line 125: EXTRN ?loadIdentity@VSMatrix@@QEAAXXZ:PROC ; VSMatrix::loadIdentity + Line 126: EXTRN ?computeNormalMatrix@VSMatrix@@QEAAXPEBM@Z:PROC ; VSMatrix::computeNormalMatrix + Line 127: EXTRN ?ResetRenderDataAllocator@@YAXXZ:PROC ; ResetRenderDataAllocator + Line 128: EXTRN ?Reset@HWDrawList@@QEAAXXZ:PROC ; HWDrawList::Reset + Line 129: EXTRN ?SortWalls@HWDrawList@@QEAAXXZ:PROC ; HWDrawList::SortWalls + Line 130: EXTRN ?SortFlats@HWDrawList@@QEAAXXZ:PROC ; HWDrawList::SortFlats + Line 131: EXTRN ?Draw@HWDrawList@@QEAAXPEAUHWDrawInfo@@AEAVFRenderState@@_N@Z:PROC ; HWDrawList::Draw + Line 132: EXTRN ?DrawWalls@HWDrawList@@QEAAXPEAUHWDrawInfo@@AEAVFRenderState@@_N@Z:PROC ; HWDrawList::DrawWalls + Line 133: EXTRN ?DrawFlats@HWDrawList@@QEAAXPEAUHWDrawInfo@@AEAVFRenderState@@_N@Z:PROC ; HWDrawList::DrawFlats + Line 134: EXTRN ?DrawSorted@HWDrawList@@QEAAXPEAUHWDrawInfo@@AEAVFRenderState@@@Z:PROC ; HWDrawList::DrawSorted + Line 135: EXTRN ?RenderBSP@HWDrawInfo@@QEAAXPEAX@Z:PROC ; HWDrawInfo::RenderBSP + Line 136: EXTRN ?DispatchRenderHacks@HWDrawInfo@@QEAAXXZ:PROC ; HWDrawInfo::DispatchRenderHacks + Line 137: EXTRN ?HandleMissingTextures@HWDrawInfo@@QEAAXW4area_t@@@Z:PROC ; HWDrawInfo::HandleMissingTextures + Line 138: EXTRN ?PrepareUnhandledMissingTextures@HWDrawInfo@@QEAAXXZ:PROC ; HWDrawInfo::PrepareUnhandledMissingTextures + Line 139: EXTRN ?HandleHackedSubsectors@HWDrawInfo@@QEAAXXZ:PROC ; HWDrawInfo::HandleHackedSubsectors + Line 140: EXTRN ?DrawDecals@HWDrawInfo@@QEAAXAEAVFRenderState@@AEAV?$TArray@PEAUGLDecal@@PEAU1@@@@Z:PROC ; HWDrawInfo::DrawDecals + Line 141: EXTRN ?DrawPlayerSprites@HWDrawInfo@@QEAAX_NAEAVFRenderState@@@Z:PROC ; HWDrawInfo::DrawPlayerSprites + Line 142: EXTRN ?SetupStencil@HWPortal@@QEAAXPEAUHWDrawInfo@@AEAVFRenderState@@_N@Z:PROC ; HWPortal::SetupStencil + Line 143: EXTRN ?RemoveStencil@HWPortal@@QEAAXPEAUHWDrawInfo@@AEAVFRenderState@@_N@Z:PROC ; HWPortal::RemoveStencil + Line 144: EXTRN ??_EHWPortal@@UEAAPEAXI@Z:PROC ; HWPortal::`vector deleting destructor' + Line 145: EXTRN ?StartFrame@FPortalSceneState@@QEAAXXZ:PROC ; FPortalSceneState::StartFrame + Line 146: EXTRN ??_EHWScenePortalBase@@UEAAPEAXI@Z:PROC ; HWScenePortalBase::`vector deleting destructor' + Line 147: EXTRN ?Setup@HWSectorStackPortal@@MEAA_NPEAUHWDrawInfo@@AEAVFRenderState@@PEAVClipper@@@Z:PROC ; HWSectorStackPortal::Setup + Line 148: EXTRN ?Shutdown@HWSectorStackPortal@@MEAAXPEAUHWDrawInfo@@AEAVFRenderState@@@Z:PROC ; HWSectorStackPortal::Shutdown + Line 149: EXTRN ?GetName@HWSectorStackPortal@@MEAAPEBDXZ:PROC ; HWSectorStackPortal::GetName + Line 150: EXTRN ??_EHWSectorStackPortal@@UEAAPEAXI@Z:PROC ; HWSectorStackPortal::`vector deleting destructor' + Line 151: EXTRN ?IsHUDModelForPlayerAvailable@@YA_NPEAVplayer_t@@@Z:PROC ; IsHUDModelForPlayerAvailable + Line 152: EXTRN ?Bind@GLViewpointBuffer@@QEAAHAEAVFRenderState@@I@Z:PROC ; GLViewpointBuffer::Bind + Line 153: EXTRN ?SetViewpoint@GLViewpointBuffer@@QEAAHAEAVFRenderState@@PEAUHWViewpointUniforms@@@Z:PROC ; GLViewpointBuffer::SetViewpoint + Line 154: EXTRN ?GetVRMode@VRMode@@SAPEBU1@_N@Z:PROC ; VRMode::GetVRMode + Line 155: EXTRN ?GetHUDSpriteProjection@VRMode@@QEBA?AVVSMatrix@@XZ:PROC ; VRMode::GetHUDSpriteProjection + Line 156: EXTRN ?AngleToPseudo@Clipper@@CAII@Z:PROC ; Clipper::AngleToPseudo + Line 157: EXTRN ?AddClipRange@Clipper@@AEAAXII@Z:PROC ; Clipper::AddClipRange + Line 158: EXTRN ??0Clipper@@QEAA@XZ:PROC ; Clipper::Clipper + Line 159: EXTRN ?Clear@Clipper@@QEAAXXZ:PROC ; Clipper::Clear + Line 160: EXTRN __CxxFrameHandler3:PROC + Line 161: EXTRN memset:PROC + Line 162: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 163: EXTRN ?active@glcycle_t@@2_NA:BYTE ; glcycle_t::active + Line 164: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 165: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 166: EXTRN ?viewheight@@3HA:DWORD ; viewheight + Line 167: EXTRN ?r_viewwindow@@3UFViewWindow@@A:BYTE ; r_viewwindow + Line 168: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 169: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 170: EXTRN ?RenderDataAllocator@@3VFMemArena@@A:BYTE ; RenderDataAllocator + Line 171: EXTRN ?ProcessAll@@3Vglcycle_t@@A:QWORD ; ProcessAll + Line 172: EXTRN ?RenderAll@@3Vglcycle_t@@A:QWORD ; RenderAll + Line 173: EXTRN ?gl_enhanced_nightvision@@3VFBoolCVar@@A:BYTE ; gl_enhanced_nightvision + Line 174: EXTRN ?gl_texture@@3VFBoolCVar@@A:BYTE ; gl_texture + Line 175: EXTRN ?gl_fogmode@@3VFIntCVar@@A:BYTE ; gl_fogmode + Line 176: EXTRN ?gl_lightmode@@3VFIntCVar@@A:BYTE ; gl_lightmode + Line 177: EXTRN ?gl_mask_threshold@@3VFFloatCVar@@A:BYTE ; gl_mask_threshold + Line 178: EXTRN ?gl_mask_sprite_threshold@@3VFFloatCVar@@A:BYTE ; gl_mask_sprite_threshold + Line 179: EXTRN ?gl_enhanced_nv_stealth@@3VFIntCVar@@A:BYTE ; gl_enhanced_nv_stealth + Line 180: EXTRN ?gl_shadowmap_filter@@3VFIntCVar@@A:BYTE ; gl_shadowmap_filter + Line 181: EXTRN ?r_visibility@@3VFFloatCVar@@A:BYTE ; r_visibility + Line 182: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_drawlist.cod (33 hits) + Line 51: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 52: EXTRN ??3@YAXPEAX@Z:PROC ; operator delete + Line 53: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 54: EXTRN atexit:PROC + Line 55: EXTRN _Init_thread_header:PROC + Line 56: EXTRN _Init_thread_footer:PROC + Line 57: EXTRN __std_terminate:PROC + Line 58: EXTRN ??2@YAPEAX_KAEBUnothrow_t@std@@@Z:PROC ; operator new + Line 59: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 60: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 61: EXTRN ??0FMemArena@@QEAA@_K@Z:PROC ; FMemArena::FMemArena + Line 62: EXTRN ??1FMemArena@@QEAA@XZ:PROC ; FMemArena::~FMemArena + Line 63: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 64: EXTRN ?FreeAll@FMemArena@@QEAAXXZ:PROC ; FMemArena::FreeAll + Line 65: EXTRN ?MakeVertices@GLWall@@QEAAXPEAUHWDrawInfo@@_N@Z:PROC ; GLWall::MakeVertices + Line 66: EXTRN ?DrawWall@GLWall@@QEAAXPEAUHWDrawInfo@@AEAVFRenderState@@_N@Z:PROC ; GLWall::DrawWall + Line 67: EXTRN ?DrawFlat@GLFlat@@QEAAXPEAUHWDrawInfo@@AEAVFRenderState@@_N@Z:PROC ; GLFlat::DrawFlat + Line 68: EXTRN ?CreateVertices@GLSprite@@QEAAXPEAUHWDrawInfo@@@Z:PROC ; GLSprite::CreateVertices + Line 69: EXTRN ?DrawSprite@GLSprite@@QEAAXPEAUHWDrawInfo@@AEAVFRenderState@@_N@Z:PROC ; GLSprite::DrawSprite + Line 70: EXTRN __CxxFrameHandler3:PROC + Line 71: EXTRN __chkstk:PROC + Line 72: EXTRN _Init_thread_epoch:DWORD + Line 73: EXTRN ?nothrow@std@@3Unothrow_t@1@B:BYTE ; std::nothrow + Line 74: EXTRN ?active@glcycle_t@@2_NA:BYTE ; glcycle_t::active + Line 75: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 76: EXTRN ?RenderWall@@3Vglcycle_t@@A:QWORD ; RenderWall + Line 77: EXTRN ?RenderFlat@@3Vglcycle_t@@A:QWORD ; RenderFlat + Line 78: EXTRN ?RenderSprite@@3Vglcycle_t@@A:QWORD ; RenderSprite + Line 79: EXTRN ?gl_billboard_mode@@3VFIntCVar@@A:BYTE ; gl_billboard_mode + Line 80: EXTRN ?gl_billboard_faces_camera@@3VFBoolCVar@@A:BYTE ; gl_billboard_faces_camera + Line 81: EXTRN ?gl_billboard_particles@@3VFBoolCVar@@A:BYTE ; gl_billboard_particles + Line 82: EXTRN _fltused:DWORD + Line 83: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_drawlistadd.cod (9 hits) + Line 17: EXTRN ?GetTranslucency@FTexture@@QEAA_NXZ:PROC ; FTexture::GetTranslucency + Line 18: EXTRN ?MakeVertices@GLWall@@QEAAXPEAUHWDrawInfo@@_N@Z:PROC ; GLWall::MakeVertices + Line 19: EXTRN ?ProcessDecals@GLWall@@QEAAXPEAUHWDrawInfo@@@Z:PROC ; GLWall::ProcessDecals + Line 20: EXTRN ?NewWall@HWDrawList@@QEAAPEAVGLWall@@XZ:PROC ; HWDrawList::NewWall + Line 21: EXTRN ?NewFlat@HWDrawList@@QEAAPEAVGLFlat@@XZ:PROC ; HWDrawList::NewFlat + Line 22: EXTRN ?NewSprite@HWDrawList@@QEAAPEAVGLSprite@@XZ:PROC ; HWDrawList::NewSprite + Line 23: EXTRN sqrtf:PROC + Line 24: EXTRN ?passflag@GLWall@@2QBDB:BYTE ; GLWall::passflag + Line 25: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_dynlightdata.cod (16 hits) + Line 36: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 37: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 38: EXTRN atexit:PROC + Line 39: EXTRN __std_terminate:PROC + Line 40: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 41: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 42: EXTRN c_sqrt:PROC + Line 43: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 44: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 45: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 46: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 47: EXTRN __tlregdtor:PROC + Line 48: EXTRN __CxxFrameHandler3:PROC + Line 49: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 50: EXTRN _fltused:DWORD + Line 51: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_fakeflat.cod (11 hits) + Line 17: EXTRN atexit:PROC + Line 18: EXTRN ??0FMemArena@@QEAA@_K@Z:PROC ; FMemArena::FMemArena + Line 19: EXTRN ??1FMemArena@@QEAA@XZ:PROC ; FMemArena::~FMemArena + Line 20: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 21: EXTRN ?FreeAll@FMemArena@@QEAAXXZ:PROC ; FMemArena::FreeAll + Line 22: EXTRN ?CopyPlaneIfValid@secplane_t@@QEBA_NPEAU1@PEBU1@@Z:PROC ; secplane_t::CopyPlaneIfValid + Line 23: EXTRN ?AdjustFloorClip@@YAXPEBUsector_t@@@Z:PROC ; AdjustFloorClip + Line 24: EXTRN memset:PROC + Line 25: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 26: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 27: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_flats.cod (33 hits) + Line 37: EXTRN ?GetTranslucency@FTexture@@QEAA_NXZ:PROC ; FTexture::GetTranslucency + Line 38: EXTRN ?GetColormap@F3DFloor@@QEAA?AUFColormap@@XZ:PROC ; F3DFloor::GetColormap + Line 39: EXTRN ?P_GetPlaneLight@@YAPEAUlightlist_t@@PEAUsector_t@@PEAUsecplane_t@@_N@Z:PROC ; P_GetPlaneLight + Line 40: EXTRN ?ValidatePortal@sector_t@@QEAAPEAUFSectorPortal@@H@Z:PROC ; sector_t::ValidatePortal + Line 41: EXTRN ?GetFloorLight@@YAHPEBUsector_t@@@Z:PROC ; GetFloorLight + Line 42: EXTRN ?GetCeilingLight@@YAHPEBUsector_t@@@Z:PROC ; GetCeilingLight + Line 43: EXTRN ?translate@VSMatrix@@QEAAXMMM@Z:PROC ; VSMatrix::translate + Line 44: EXTRN ?scale@VSMatrix@@QEAAXMMM@Z:PROC ; VSMatrix::scale + Line 45: EXTRN ?rotate@VSMatrix@@QEAAXMMMM@Z:PROC ; VSMatrix::rotate + Line 46: EXTRN ?loadIdentity@VSMatrix@@QEAAXXZ:PROC ; VSMatrix::loadIdentity + Line 47: EXTRN ?GetLight@FDynLightData@@QEAA_NHAEAVPlane@@PEAUFDynamicLight@@_N@Z:PROC ; FDynLightData::GetLight + Line 48: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@VFTextureID@@_N11@Z:PROC ; FMaterial::ValidateTexture + Line 49: EXTRN ?SetColor@HWDrawInfo@@QEAAXAEAVFRenderState@@HH_NAEBUFColormap@@M1@Z:PROC ; HWDrawInfo::SetColor + Line 50: EXTRN ?SetFog@HWDrawInfo@@QEAAXAEAVFRenderState@@HH_NPEBUFColormap@@1@Z:PROC ; HWDrawInfo::SetFog + Line 51: EXTRN ?AddFlat@HWDrawInfo@@QEAAXPEAVGLFlat@@_N@Z:PROC ; HWDrawInfo::AddFlat + Line 52: EXTRN ?AllocVertices@FFlatVertexBuffer@@QEAA?AU?$pair@PEAUFFlatVertex@@I@std@@I@Z:PROC ; FFlatVertexBuffer::AllocVertices + Line 53: EXTRN ?UploadLights@FLightBuffer@@QEAAHAEAUFDynLightData@@@Z:PROC ; FLightBuffer::UploadLights + Line 54: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 55: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 56: EXTRN ?gl_plane_reflection_i@@3_NA:BYTE ; gl_plane_reflection_i + Line 57: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 58: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 59: EXTRN ?lightdata@@3UFDynLightData@@A:BYTE ; lightdata + Line 60: EXTRN ?gl_weaponlight@@3VFIntCVar@@A:BYTE ; gl_weaponlight + Line 61: EXTRN ?gl_mask_threshold@@3VFFloatCVar@@A:BYTE ; gl_mask_threshold + Line 62: EXTRN ?iter_dlightf@@3HA:DWORD ; iter_dlightf + Line 63: EXTRN ?draw_dlightf@@3HA:DWORD ; draw_dlightf + Line 64: EXTRN ?rendered_flats@@3HA:DWORD ; rendered_flats + Line 65: EXTRN ?flatvertices@@3HA:DWORD ; flatvertices + Line 66: EXTRN ?flatprimitives@@3HA:DWORD ; flatprimitives + Line 67: EXTRN __ImageBase:BYTE + Line 68: EXTRN _fltused:DWORD + Line 69: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_lightbuffer.cod (5 hits) + Line 17: EXTRN strstr:PROC + Line 18: EXTRN memcpy:PROC + Line 19: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 20: EXTRN __ImageBase:BYTE + Line 21: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_lighting.cod (7 hits) + Line 50: EXTRN atexit:PROC + Line 51: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 52: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 53: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 54: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 55: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 56: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_material.cod (18 hits) + Line 29: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 30: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 31: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 32: EXTRN __std_terminate:PROC + Line 33: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 34: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 35: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 36: EXTRN ?GetUniqueIndex@FRemapTable@@QEAAHXZ:PROC ; FRemapTable::GetUniqueIndex + Line 37: EXTRN ?TranslationToTable@@YAPEAUFRemapTable@@H@Z:PROC ; TranslationToTable + Line 38: EXTRN ?CreateDefaultBrightmap@FTexture@@QEAAXXZ:PROC ; FTexture::CreateDefaultBrightmap + Line 39: EXTRN ?CreateTexBuffer@FTexture@@QEAA?AUFTextureBuffer@@HH@Z:PROC ; FTexture::CreateTexBuffer + Line 40: EXTRN __CxxFrameHandler3:PROC + Line 41: EXTRN memmove:PROC + Line 42: EXTRN ?usershaders@@3V?$TArray@UUserShaderDesc@@U1@@@A:BYTE ; usershaders + Line 43: EXTRN ?r_spriteadjustHW@@3HA:DWORD ; r_spriteadjustHW + Line 44: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 45: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 46: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_models.cod (14 hits) + Line 39: EXTRN _purecall:PROC + Line 40: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 41: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 42: EXTRN atexit:PROC + Line 43: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 44: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 45: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@PEAVFTexture@@_N1@Z:PROC ; FMaterial::ValidateTexture + Line 46: EXTRN ?inverseMatrix@VSMatrix@@QEAA_NAEAV1@@Z:PROC ; VSMatrix::inverseMatrix + Line 47: EXTRN ??_EIModelVertexBuffer@@UEAAPEAXI@Z:PROC ; IModelVertexBuffer::`vector deleting destructor' + Line 48: EXTRN ??_EFModelVertexBuffer@@UEAAPEAXI@Z:PROC ; FModelVertexBuffer::`vector deleting destructor' + Line 49: EXTRN __CxxFrameHandler3:PROC + Line 50: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 51: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 52: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_portal.cod (58 hits) + Line 9: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 112: EXTRN _purecall:PROC + Line 113: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 114: EXTRN atexit:PROC + Line 115: EXTRN __std_terminate:PROC + Line 116: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 117: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 118: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 119: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 120: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 121: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 122: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 123: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 124: EXTRN c_atan2:PROC + Line 125: EXTRN c_sqrt:PROC + Line 126: EXTRN ?GetFloorLight@@YAHPEBUsector_t@@@Z:PROC ; GetFloorLight + Line 127: EXTRN ?GetCeilingLight@@YAHPEBUsector_t@@@Z:PROC ; GetCeilingLight + Line 128: EXTRN ?P_ClipLineToPortal@@YA_NPEAUline_t@@0U?$TVector2@N@@_N2@Z:PROC ; P_ClipLineToPortal + Line 129: EXTRN ?P_TranslatePortalXY@@YAXPEAUline_t@@AEAN1@Z:PROC ; P_TranslatePortalXY + Line 130: EXTRN ?P_TranslatePortalAngle@@YAXPEAUline_t@@AEAU?$TAngle@N@@@Z:PROC ; P_TranslatePortalAngle + Line 131: EXTRN ?P_TranslatePortalZ@@YAXPEAUline_t@@AEAN@Z:PROC ; P_TranslatePortalZ + Line 132: EXTRN ?SetColor@HWDrawInfo@@QEAAXAEAVFRenderState@@HH_NAEBUFColormap@@M1@Z:PROC ; HWDrawInfo::SetColor + Line 133: EXTRN ?SetFog@HWDrawInfo@@QEAAXAEAVFRenderState@@HH_NPEBUFColormap@@1@Z:PROC ; HWDrawInfo::SetFog + Line 134: EXTRN ?SetViewArea@HWDrawInfo@@QEAAXXZ:PROC ; HWDrawInfo::SetViewArea + Line 135: EXTRN ?RenderPortal@HWDrawInfo@@QEAAXPEAVHWPortal@@AEAVFRenderState@@_N@Z:PROC ; HWDrawInfo::RenderPortal + Line 136: EXTRN ?ProcessActorsInPortal@HWDrawInfo@@QEAAXPEAUFLinePortalSpan@@W4area_t@@@Z:PROC ; HWDrawInfo::ProcessActorsInPortal + Line 137: EXTRN ?UpdateCurrentMapSection@HWDrawInfo@@QEAAXXZ:PROC ; HWDrawInfo::UpdateCurrentMapSection + Line 138: EXTRN ?SetupView@HWDrawInfo@@QEAAXAEAVFRenderState@@MMM_N1@Z:PROC ; HWDrawInfo::SetupView + Line 139: EXTRN ?FrustumAngle@HWDrawInfo@@QEAAIXZ:PROC ; HWDrawInfo::FrustumAngle + Line 140: EXTRN ?hw_SetPlaneTextureRotation@@YA_NPEBUGLSectorPlane@@PEAVFMaterial@@AEAVVSMatrix@@@Z:PROC ; hw_SetPlaneTextureRotation + Line 141: EXTRN ?PointInRenderSubsector@FLevelLocals@@QEAAPEAUsubsector_t@@HH@Z:PROC ; FLevelLocals::PointInRenderSubsector + Line 142: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@VFTextureID@@_N11@Z:PROC ; FMaterial::ValidateTexture + Line 143: EXTRN ?init@GLSkyInfo@@QEAAXPEAUHWDrawInfo@@HUPalEntry@@@Z:PROC ; GLSkyInfo::init + Line 144: EXTRN ??_EHWPortal@@UEAAPEAXI@Z:PROC ; HWPortal::`vector deleting destructor' + Line 145: EXTRN ??_EHWHorizonPortal@@UEAAPEAXI@Z:PROC ; HWHorizonPortal::`vector deleting destructor' + Line 146: EXTRN ?DrawContents@HWSkyPortal@@MEAAXPEAUHWDrawInfo@@AEAVFRenderState@@@Z:PROC ; HWSkyPortal::DrawContents + Line 147: EXTRN ?GetName@HWSkyPortal@@MEAAPEBDXZ:PROC ; HWSkyPortal::GetName + Line 148: EXTRN ??_EHWSkyPortal@@UEAAPEAXI@Z:PROC ; HWSkyPortal::`vector deleting destructor' + Line 149: EXTRN ?AngleToPseudo@Clipper@@CAII@Z:PROC ; Clipper::AngleToPseudo + Line 150: EXTRN ?AddClipRange@Clipper@@AEAAXII@Z:PROC ; Clipper::AddClipRange + Line 151: EXTRN ?RemoveClipRange@Clipper@@AEAAXII@Z:PROC ; Clipper::RemoveClipRange + Line 152: EXTRN ?Clear@Clipper@@QEAAXXZ:PROC ; Clipper::Clear + Line 153: EXTRN ?SetSilhouette@Clipper@@QEAAXXZ:PROC ; Clipper::SetSilhouette + Line 154: EXTRN ?PointToPseudoAngle@Clipper@@QEAAINN@Z:PROC ; Clipper::PointToPseudoAngle + Line 155: EXTRN ?AllocVertices@FFlatVertexBuffer@@QEAA?AU?$pair@PEAUFFlatVertex@@I@std@@I@Z:PROC ; FFlatVertexBuffer::AllocVertices + Line 156: EXTRN __CxxFrameHandler3:PROC + Line 157: EXTRN memmove:PROC + Line 158: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 159: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 160: EXTRN ?active@glcycle_t@@2_NA:BYTE ; glcycle_t::active + Line 161: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 162: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 163: EXTRN ?PortalAll@@3Vglcycle_t@@A:QWORD ; PortalAll + Line 164: EXTRN ?rendered_portals@@3HA:DWORD ; rendered_portals + Line 165: EXTRN ?gl_weaponlight@@3VFIntCVar@@A:BYTE ; gl_weaponlight + Line 166: EXTRN ?r_mirror_recursions@@3VFIntCVar@@A:BYTE ; r_mirror_recursions + Line 167: EXTRN ?gl_portals@@3VFBoolCVar@@A:BYTE ; gl_portals + Line 168: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_postprocess.cod (71 hits) + Line 236: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 237: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 238: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 239: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 240: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 241: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 242: EXTRN atexit:PROC + Line 243: EXTRN __std_terminate:PROC + Line 244: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 245: EXTRN log2:PROC + Line 246: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 247: EXTRN __std_type_info_compare:PROC + Line 248: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 249: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 250: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 251: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 252: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 253: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 254: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 255: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 256: EXTRN ??HFString@@QEBA?AV0@PEBD@Z:PROC ; FString::operator+ + Line 257: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 258: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 259: EXTRN ?SuperFastHash@@YAIPEBD_K@Z:PROC ; SuperFastHash + Line 260: EXTRN ?PTM_BestColor@@YAHPEBIHHH_NMHH@Z:PROC ; PTM_BestColor + Line 261: EXTRN ??_EPPEffectManager@@UEAAPEAXI@Z:PROC ; PPEffectManager::`vector deleting destructor' + Line 262: EXTRN ??_EPPBloom@@UEAAPEAXI@Z:PROC ; PPBloom::`vector deleting destructor' + Line 263: EXTRN ??_EPPLensDistort@@UEAAPEAXI@Z:PROC ; PPLensDistort::`vector deleting destructor' + Line 264: EXTRN ??_EPPFXAA@@UEAAPEAXI@Z:PROC ; PPFXAA::`vector deleting destructor' + Line 265: EXTRN ??_EPPCameraExposure@@UEAAPEAXI@Z:PROC ; PPCameraExposure::`vector deleting destructor' + Line 266: EXTRN ??_EPPColormap@@UEAAPEAXI@Z:PROC ; PPColormap::`vector deleting destructor' + Line 267: EXTRN ??_EPPTonemap@@UEAAPEAXI@Z:PROC ; PPTonemap::`vector deleting destructor' + Line 268: EXTRN ??_EPPAmbientOcclusion@@UEAAPEAXI@Z:PROC ; PPAmbientOcclusion::`vector deleting destructor' + Line 269: EXTRN _CxxThrowException:PROC + Line 270: EXTRN __CxxFrameHandler3:PROC + Line 271: EXTRN __chkstk:PROC + Line 272: EXTRN ceil:PROC + Line 273: EXTRN cos:PROC + Line 274: EXTRN expf:PROC + Line 275: EXTRN memset:PROC + Line 276: EXTRN sin:PROC + Line 277: EXTRN sqrtf:PROC + Line 278: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 279: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 280: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 281: EXTRN ?SpecialColormaps@@3V?$TArray@UFSpecialColormap@@U1@@@A:BYTE ; SpecialColormaps + Line 282: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 283: EXTRN ?gl_multisample@@3VFIntCVar@@A:BYTE ; gl_multisample + Line 284: EXTRN ?gl_bloom@@3VFBoolCVar@@A:BYTE ; gl_bloom + Line 285: EXTRN ?gl_bloom_amount@@3VFFloatCVar@@A:BYTE ; gl_bloom_amount + Line 286: EXTRN ?gl_tonemap@@3VFIntCVar@@A:BYTE ; gl_tonemap + Line 287: EXTRN ?gl_lens@@3VFBoolCVar@@A:BYTE ; gl_lens + Line 288: EXTRN ?gl_lens_k@@3VFFloatCVar@@A:BYTE ; gl_lens_k + Line 289: EXTRN ?gl_lens_kcube@@3VFFloatCVar@@A:BYTE ; gl_lens_kcube + Line 290: EXTRN ?gl_lens_chromatic@@3VFFloatCVar@@A:BYTE ; gl_lens_chromatic + Line 291: EXTRN ?gl_ssao@@3VFIntCVar@@A:BYTE ; gl_ssao + Line 292: EXTRN ?gl_ssao_strength@@3VFFloatCVar@@A:BYTE ; gl_ssao_strength + Line 293: EXTRN ?gl_ssao_debug@@3VFIntCVar@@A:BYTE ; gl_ssao_debug + Line 294: EXTRN ?gl_ssao_bias@@3VFFloatCVar@@A:BYTE ; gl_ssao_bias + Line 295: EXTRN ?gl_ssao_radius@@3VFFloatCVar@@A:BYTE ; gl_ssao_radius + Line 296: EXTRN ?gl_exposure_scale@@3VFFloatCVar@@A:BYTE ; gl_exposure_scale + Line 297: EXTRN ?gl_exposure_min@@3VFFloatCVar@@A:BYTE ; gl_exposure_min + Line 298: EXTRN ?gl_exposure_base@@3VFFloatCVar@@A:BYTE ; gl_exposure_base + Line 299: EXTRN ?gl_exposure_speed@@3VFFloatCVar@@A:BYTE ; gl_exposure_speed + Line 300: EXTRN ?gl_fxaa@@3VFIntCVar@@A:BYTE ; gl_fxaa + Line 301: EXTRN ?gl_ssao_blur@@3VFFloatCVar@@A:BYTE ; gl_ssao_blur + Line 302: EXTRN ?gl_ssao_exponent@@3VFFloatCVar@@A:BYTE ; gl_ssao_exponent + Line 303: EXTRN ?gl_paltonemap_powtable@@3VFFloatCVar@@A:BYTE ; gl_paltonemap_powtable + Line 304: EXTRN ?gl_paltonemap_reverselookup@@3VFBoolCVar@@A:BYTE ; gl_paltonemap_reverselookup + Line 305: EXTRN ?gl_menu_blur@@3VFFloatCVar@@A:BYTE ; gl_menu_blur + Line 306: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_postprocess_cvars.cod (8 hits) + Line 31: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 164: EXTRN atexit:PROC + Line 165: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 166: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 167: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 168: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 169: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 170: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_postprocessshader.cod (12 hits) + Line 24: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 25: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 86: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 87: EXTRN atexit:PROC + Line 88: EXTRN __std_terminate:PROC + Line 89: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 90: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 91: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 92: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 93: EXTRN ?SuperFastHash@@YAIPEBD_K@Z:PROC ; SuperFastHash + Line 94: EXTRN __CxxFrameHandler3:PROC + Line 95: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_precache.cod (29 hits) + Line 17: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 18: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 19: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 20: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 21: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 22: EXTRN ??_V@YAXPEAX_K@Z:PROC ; operator delete[] + Line 23: EXTRN __std_terminate:PROC + Line 24: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 25: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 26: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 27: EXTRN ?GetUniqueIndex@FRemapTable@@QEAAHXZ:PROC ; FRemapTable::GetUniqueIndex + Line 28: EXTRN ?TranslationToTable@@YAPEAUFRemapTable@@H@Z:PROC ; TranslationToTable + Line 29: EXTRN ?DestroyVertexBuffer@FModel@@QEAAXXZ:PROC ; FModel::DestroyVertexBuffer + Line 30: EXTRN ?FindModelFrame@@YAPEAUFSpriteModelFrame@@PEBVPClass@@HH_N@Z:PROC ; FindModelFrame + Line 31: EXTRN ?Precache@FMaterial@@QEAAXXZ:PROC ; FMaterial::Precache + Line 32: EXTRN ?PrecacheList@FMaterial@@QEAAXAEAV?$TMap@H_NU?$THashTraits@H@@U?$TValueTraits@_N@@@@@Z:PROC ; FMaterial::PrecacheList + Line 33: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@PEAVFTexture@@_N1@Z:PROC ; FMaterial::ValidateTexture + Line 34: EXTRN ?BeginPrecaching@FImageSource@@SAXXZ:PROC ; FImageSource::BeginPrecaching + Line 35: EXTRN ?EndPrecaching@FImageSource@@SAXXZ:PROC ; FImageSource::EndPrecaching + Line 36: EXTRN ?RegisterForPrecache@FImageSource@@SAXPEAV1@@Z:PROC ; FImageSource::RegisterForPrecache + Line 37: EXTRN __CxxFrameHandler3:PROC + Line 38: EXTRN memmove:PROC + Line 39: EXTRN memset:PROC + Line 40: EXTRN ?SpriteFrames@@3V?$TArray@Uspriteframe_t@@U1@@@A:BYTE ; SpriteFrames + Line 41: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 42: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 43: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 44: EXTRN ?Models@@3V?$TDeletingArray@PEAVFModel@@PEAV1@@@A:BYTE ; Models + Line 45: EXTRN ?gl_precache@@3VFBoolCVar@@A:BYTE ; gl_precache + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_presentshader.cod (16 hits) + Line 52: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 53: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 54: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 55: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 56: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 57: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 58: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 59: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 60: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 61: EXTRN _CxxThrowException:PROC + Line 62: EXTRN __CxxFrameHandler3:PROC + Line 63: EXTRN memmove:PROC + Line 64: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 65: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 66: EXTRN __ImageBase:BYTE + Line 67: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_renderhacks.cod (25 hits) + Line 45: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 46: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 47: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 48: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 49: EXTRN ?ValidatePortal@sector_t@@QEAAPEAUFSectorPortal@@H@Z:PROC ; sector_t::ValidatePortal + Line 50: EXTRN ?GetFloorLight@@YAHPEBUsector_t@@@Z:PROC ; GetFloorLight + Line 51: EXTRN ?GetCeilingLight@@YAHPEBUsector_t@@@Z:PROC ; GetCeilingLight + Line 52: EXTRN ?PointInRenderSubsector@FLevelLocals@@QEAAPEAUsubsector_t@@HH@Z:PROC ; FLevelLocals::PointInRenderSubsector + Line 53: EXTRN ?ProcessLowerMiniseg@GLWall@@QEAAXPEAUHWDrawInfo@@PEAUseg_t@@PEAUsector_t@@2@Z:PROC ; GLWall::ProcessLowerMiniseg + Line 54: EXTRN ?ProcessSector@GLFlat@@QEAAXPEAUHWDrawInfo@@PEAUsector_t@@H@Z:PROC ; GLFlat::ProcessSector + Line 55: EXTRN ?GetLight@FDynLightData@@QEAA_NHAEAVPlane@@PEAUFDynamicLight@@_N@Z:PROC ; FDynLightData::GetLight + Line 56: EXTRN ?AllocVertices@FFlatVertexBuffer@@QEAA?AU?$pair@PEAUFFlatVertex@@I@std@@I@Z:PROC ; FFlatVertexBuffer::AllocVertices + Line 57: EXTRN ?UploadLights@FLightBuffer@@QEAAHAEAUFDynLightData@@@Z:PROC ; FLightBuffer::UploadLights + Line 58: EXTRN ?hw_FakeFlat@@YAPEAUsector_t@@PEAU1@W4area_t@@_N0@Z:PROC ; hw_FakeFlat + Line 59: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 60: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 61: EXTRN ?validcount@@3HA:DWORD ; validcount + Line 62: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 63: EXTRN ?RenderDataAllocator@@3VFMemArena@@A:BYTE ; RenderDataAllocator + Line 64: EXTRN ?iter_dlightf@@3HA:DWORD ; iter_dlightf + Line 65: EXTRN ?draw_dlightf@@3HA:DWORD ; draw_dlightf + Line 66: EXTRN ?rendered_lines@@3HA:DWORD ; rendered_lines + Line 67: EXTRN ?lightdata@@3UFDynLightData@@A:BYTE ; lightdata + Line 68: EXTRN _fltused:DWORD + Line 69: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_renderstate.cod (6 hits) + Line 24: EXTRN ?CalcLightLevel@HWDrawInfo@@QEAAHHH_NH@Z:PROC ; HWDrawInfo::CalcLightLevel + Line 25: EXTRN ?CalcLightColor@HWDrawInfo@@QEAA?AUPalEntry@@HU2@H@Z:PROC ; HWDrawInfo::CalcLightColor + Line 26: EXTRN ?GetFogDensity@HWDrawInfo@@QEAAMHUPalEntry@@HH@Z:PROC ; HWDrawInfo::GetFogDensity + Line 27: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 28: EXTRN ?gl_fogmode@@3VFIntCVar@@A:BYTE ; gl_fogmode + Line 29: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_shaderpatcher.cod (12 hits) + Line 21: EXTRN strtol:PROC + Line 22: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 23: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 24: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 25: EXTRN ?LockBuffer@FString@@QEAAPEADXZ:PROC ; FString::LockBuffer + Line 26: EXTRN ?UnlockBuffer@FString@@QEAAXXZ:PROC ; FString::UnlockBuffer + Line 27: EXTRN ?IndexOf@FString@@QEBAJPEBDJ@Z:PROC ; FString::IndexOf + Line 28: EXTRN ?IndexOf@FString@@QEBAJDJ@Z:PROC ; FString::IndexOf + Line 29: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 30: EXTRN __CxxFrameHandler3:PROC + Line 31: EXTRN strcmp:PROC + Line 32: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_shadowmap.cod (26 hits) + Line 17: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 18: EXTRN ??_EStat_shadowmap@@UEAAPEAXI@Z:PROC ; Stat_shadowmap::`vector deleting destructor' + Line 59: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 60: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 61: EXTRN atexit:PROC + Line 62: EXTRN __std_terminate:PROC + Line 63: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 64: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 65: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 66: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 67: EXTRN ??0LevelAABBTree@hwrenderer@@QEAA@PEAUFLevelLocals@@@Z:PROC ; hwrenderer::LevelAABBTree::LevelAABBTree + Line 68: EXTRN ?RayTest@LevelAABBTree@hwrenderer@@QEAANAEBU?$TVector3@N@@0@Z:PROC ; hwrenderer::LevelAABBTree::RayTest + Line 69: EXTRN ?Update@LevelAABBTree@hwrenderer@@QEAA_NXZ:PROC ; hwrenderer::LevelAABBTree::Update + Line 70: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 71: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 72: EXTRN ??_EIShadowMap@@UEAAPEAXI@Z:PROC ; IShadowMap::`vector deleting destructor' + Line 73: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 74: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 75: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 76: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 77: EXTRN __CxxFrameHandler3:PROC + Line 78: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 79: EXTRN ?PerfToMillisec@@3NA:QWORD ; PerfToMillisec + Line 80: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 81: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 82: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_shadowmapshader.cod (16 hits) + Line 48: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 49: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 50: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 51: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 52: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 53: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 54: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 55: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 56: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 57: EXTRN _CxxThrowException:PROC + Line 58: EXTRN __CxxFrameHandler3:PROC + Line 59: EXTRN memmove:PROC + Line 60: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 61: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 62: EXTRN __ImageBase:BYTE + Line 63: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_sky.cod (11 hits) + Line 28: EXTRN atexit:PROC + Line 29: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 30: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 31: EXTRN ?ValidatePortal@sector_t@@QEAAPEAUFSectorPortal@@H@Z:PROC ; sector_t::ValidatePortal + Line 32: EXTRN ?PutPortal@GLWall@@QEAAXPEAUHWDrawInfo@@HH@Z:PROC ; GLWall::PutPortal + Line 33: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@VFTextureID@@_N11@Z:PROC ; FMaterial::ValidateTexture + Line 34: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 35: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 36: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 37: EXTRN ?gl_plane_reflection_i@@3_NA:BYTE ; gl_plane_reflection_i + Line 38: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_skydome.cod (16 hits) + Line 37: EXTRN __std_terminate:PROC + Line 38: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 39: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 40: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 41: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 42: EXTRN ?translate@VSMatrix@@QEAAXMMM@Z:PROC ; VSMatrix::translate + Line 43: EXTRN ?scale@VSMatrix@@QEAAXMMM@Z:PROC ; VSMatrix::scale + Line 44: EXTRN ?rotate@VSMatrix@@QEAAXMMMM@Z:PROC ; VSMatrix::rotate + Line 45: EXTRN ?loadIdentity@VSMatrix@@QEAAXXZ:PROC ; VSMatrix::loadIdentity + Line 46: EXTRN __CxxFrameHandler3:PROC + Line 47: EXTRN floorf:PROC + Line 48: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 49: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 50: EXTRN ?skyoffset@@3VFFloatCVar@@A:BYTE ; skyoffset + Line 51: EXTRN _fltused:DWORD + Line 52: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_skyportal.cod (8 hits) + Line 19: EXTRN ?GetSkyCapColor@FTexture@@QEAA?AUPalEntry@@_N@Z:PROC ; FTexture::GetSkyCapColor + Line 20: EXTRN ?rotate@VSMatrix@@QEAAXMMMM@Z:PROC ; VSMatrix::rotate + Line 21: EXTRN ?loadIdentity@VSMatrix@@QEAAXXZ:PROC ; VSMatrix::loadIdentity + Line 22: EXTRN ?SetupMatrices@FSkyVertexBuffer@@QEAAXPEAUHWDrawInfo@@PEAVFMaterial@@MM_NHAEAVVSMatrix@@3@Z:PROC ; FSkyVertexBuffer::SetupMatrices + Line 23: EXTRN ?SetupView@HWDrawInfo@@QEAAXAEAVFRenderState@@MMM_N1@Z:PROC ; HWDrawInfo::SetupView + Line 24: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@PEAVFTexture@@_N1@Z:PROC ; FMaterial::ValidateTexture + Line 25: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 26: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_spritelight.cod (15 hits) + Line 28: EXTRN __std_terminate:PROC + Line 29: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 30: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 31: EXTRN c_sqrt:PROC + Line 32: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 33: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 34: EXTRN ?ShadowTest@IShadowMap@@QEAA_NPEAUFDynamicLight@@AEBU?$TVector3@N@@@Z:PROC ; IShadowMap::ShadowTest + Line 35: EXTRN ?AddLightToList@FDynLightData@@QEAAXHPEAUFDynamicLight@@_N@Z:PROC ; FDynLightData::AddLightToList + Line 36: EXTRN __tlregdtor:PROC + Line 37: EXTRN __CxxFrameHandler3:PROC + Line 38: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 39: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 40: EXTRN ?dl_validcount@@3HA:DWORD ; dl_validcount + Line 41: EXTRN _fltused:DWORD + Line 42: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_sprites.cod (85 hits) + Line 79: EXTRN _purecall:PROC + Line 80: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 81: EXTRN __std_terminate:PROC + Line 82: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 83: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 84: EXTRN c_atan2:PROC + Line 85: EXTRN c_sqrt:PROC + Line 86: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 87: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 88: EXTRN ?CheckSpriteGlow@sector_t@@QEAAHHAEBU?$TVector3@N@@@Z:PROC ; sector_t::CheckSpriteGlow + Line 89: EXTRN ?GetFloorLight@@YAHPEBUsector_t@@@Z:PROC ; GetFloorLight + Line 90: EXTRN ?GetCeilingLight@@YAHPEBUsector_t@@@Z:PROC ; GetCeilingLight + Line 91: EXTRN ?CheckFuzz@FRenderStyle@@QEAAXXZ:PROC ; FRenderStyle::CheckFuzz + Line 92: EXTRN ?IsVisible@FRenderStyle@@QEBA_NN@Z:PROC ; FRenderStyle::IsVisible + Line 93: EXTRN ?GetTranslucency@FTexture@@QEAA_NXZ:PROC ; FTexture::GetTranslucency + Line 94: EXTRN ?GetSpriteFrame@spritedef_t@@QEAA?AVFTextureID@@HHU?$TAngle@N@@PEA_N_N@Z:PROC ; spritedef_t::GetSpriteFrame + Line 95: EXTRN ?P_TranslatePortalXY@@YAXPEAUline_t@@AEAN1@Z:PROC ; P_TranslatePortalXY + Line 96: EXTRN ?P_TranslatePortalAngle@@YAXPEAUline_t@@AEAU?$TAngle@N@@@Z:PROC ; P_TranslatePortalAngle + Line 97: EXTRN ?P_TranslatePortalZ@@YAXPEAUline_t@@AEAN@Z:PROC ; P_TranslatePortalZ + Line 98: EXTRN ?IsVisibleToPlayer@AActor@@QEBA_NXZ:PROC ; AActor::IsVisibleToPlayer + Line 99: EXTRN ?IsInsideVisibleAngles@AActor@@QEBA_NXZ:PROC ; AActor::IsInsideVisibleAngles + Line 100: EXTRN ?P_CheckPlayerSprite@@YAXPEAVAActor@@AEAHAEAU?$TVector2@N@@@Z:PROC ; P_CheckPlayerSprite + Line 101: EXTRN ?RenderModel@FModelRenderer@@QEAAXMMMPEAUFSpriteModelFrame@@PEAVAActor@@N@Z:PROC ; FModelRenderer::RenderModel + Line 102: EXTRN ??_EFModelRenderer@@UEAAPEAXI@Z:PROC ; FModelRenderer::`vector deleting destructor' + Line 103: EXTRN ?FindModelFrame@@YAPEAUFSpriteModelFrame@@PEBVPClass@@HH_N@Z:PROC ; FindModelFrame + Line 104: EXTRN ?BeginDrawModel@FGLModelRenderer@@UEAAXPEAVAActor@@PEAUFSpriteModelFrame@@AEBVVSMatrix@@_N@Z:PROC ; FGLModelRenderer::BeginDrawModel + Line 105: EXTRN ?EndDrawModel@FGLModelRenderer@@UEAAXPEAVAActor@@PEAUFSpriteModelFrame@@@Z:PROC ; FGLModelRenderer::EndDrawModel + Line 106: EXTRN ?CreateVertexBuffer@FGLModelRenderer@@UEAAPEAVIModelVertexBuffer@@_N0@Z:PROC ; FGLModelRenderer::CreateVertexBuffer + Line 107: EXTRN ?GetViewToWorldMatrix@FGLModelRenderer@@UEAA?AVVSMatrix@@XZ:PROC ; FGLModelRenderer::GetViewToWorldMatrix + Line 108: EXTRN ?BeginDrawHUDModel@FGLModelRenderer@@UEAAXPEAVAActor@@AEBVVSMatrix@@_N@Z:PROC ; FGLModelRenderer::BeginDrawHUDModel + Line 109: EXTRN ?EndDrawHUDModel@FGLModelRenderer@@UEAAXPEAVAActor@@@Z:PROC ; FGLModelRenderer::EndDrawHUDModel + Line 110: EXTRN ?SetInterpolation@FGLModelRenderer@@UEAAXN@Z:PROC ; FGLModelRenderer::SetInterpolation + Line 111: EXTRN ?SetMaterial@FGLModelRenderer@@UEAAXPEAVFTexture@@_NH@Z:PROC ; FGLModelRenderer::SetMaterial + Line 112: EXTRN ?DrawArrays@FGLModelRenderer@@UEAAXHH@Z:PROC ; FGLModelRenderer::DrawArrays + Line 113: EXTRN ?DrawElements@FGLModelRenderer@@UEAAXH_K@Z:PROC ; FGLModelRenderer::DrawElements + Line 114: EXTRN ??_EFGLModelRenderer@@UEAAPEAXI@Z:PROC ; FGLModelRenderer::`vector deleting destructor' + Line 115: EXTRN ?hw_GetDynModelLight@@YAXPEAVAActor@@AEAUFDynLightData@@@Z:PROC ; hw_GetDynModelLight + Line 116: EXTRN ?SetColor@HWDrawInfo@@QEAAXAEAVFRenderState@@HH_NAEBUFColormap@@M1@Z:PROC ; HWDrawInfo::SetColor + Line 117: EXTRN ?SetFog@HWDrawInfo@@QEAAXAEAVFRenderState@@HH_NPEBUFColormap@@1@Z:PROC ; HWDrawInfo::SetFog + Line 118: EXTRN ?GetFogDensity@HWDrawInfo@@QEAAMHUPalEntry@@HH@Z:PROC ; HWDrawInfo::GetFogDensity + Line 119: EXTRN ?GetDynSpriteLight@HWDrawInfo@@QEAAXPEAVAActor@@PEAUparticle_t@@PEAM@Z:PROC ; HWDrawInfo::GetDynSpriteLight + Line 120: EXTRN ?AddSprite@HWDrawInfo@@QEAAXPEAVGLSprite@@_N@Z:PROC ; HWDrawInfo::AddSprite + Line 121: EXTRN ?hw_FakeFlat@@YAPEAUsector_t@@PEAU1@W4area_t@@_N0@Z:PROC ; hw_FakeFlat + Line 122: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@VFTextureID@@_N11@Z:PROC ; FMaterial::ValidateTexture + Line 123: EXTRN ?AllocVertices@FFlatVertexBuffer@@QEAA?AU?$pair@PEAUFFlatVertex@@I@std@@I@Z:PROC ; FFlatVertexBuffer::AllocVertices + Line 124: EXTRN ?UploadLights@FLightBuffer@@QEAAHAEAUFDynLightData@@@Z:PROC ; FLightBuffer::UploadLights + Line 125: EXTRN __CxxFrameHandler3:PROC + Line 126: EXTRN __libm_sse2_sincos_:PROC + Line 127: EXTRN __libm_sse2_sincosf_:PROC + Line 128: EXTRN atan2f:PROC + Line 129: EXTRN cosf:PROC + Line 130: EXTRN expf:PROC + Line 131: EXTRN sinf:PROC + Line 132: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 133: EXTRN ?paused@@3HA:DWORD ; paused + Line 134: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 135: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 136: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 137: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 138: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 139: EXTRN ?validcount@@3HA:DWORD ; validcount + Line 140: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 141: EXTRN ?r_UseVanillaTransparency@@3_NA:BYTE ; r_UseVanillaTransparency + Line 142: EXTRN ?gl_enhanced_nightvision@@3VFBoolCVar@@A:BYTE ; gl_enhanced_nightvision + Line 143: EXTRN ?gl_weaponlight@@3VFIntCVar@@A:BYTE ; gl_weaponlight + Line 144: EXTRN ?gl_light_sprites@@3VFBoolCVar@@A:BYTE ; gl_light_sprites + Line 145: EXTRN ?gl_light_particles@@3VFBoolCVar@@A:BYTE ; gl_light_particles + Line 146: EXTRN ?gl_mask_sprite_threshold@@3VFFloatCVar@@A:BYTE ; gl_mask_sprite_threshold + Line 147: EXTRN ?gl_usecolorblending@@3VFBoolCVar@@A:BYTE ; gl_usecolorblending + Line 148: EXTRN ?gl_sprite_blend@@3VFBoolCVar@@A:BYTE ; gl_sprite_blend + Line 149: EXTRN ?gl_spriteclip@@3VFIntCVar@@A:BYTE ; gl_spriteclip + Line 150: EXTRN ?gl_sclipthreshold@@3VFFloatCVar@@A:BYTE ; gl_sclipthreshold + Line 151: EXTRN ?gl_sclipfactor@@3VFFloatCVar@@A:BYTE ; gl_sclipfactor + Line 152: EXTRN ?gl_particles_style@@3VFIntCVar@@A:BYTE ; gl_particles_style + Line 153: EXTRN ?gl_billboard_mode@@3VFIntCVar@@A:BYTE ; gl_billboard_mode + Line 154: EXTRN ?gl_billboard_faces_camera@@3VFBoolCVar@@A:BYTE ; gl_billboard_faces_camera + Line 155: EXTRN ?gl_billboard_particles@@3VFBoolCVar@@A:BYTE ; gl_billboard_particles + Line 156: EXTRN ?gl_fuzztype@@3VFIntCVar@@A:BYTE ; gl_fuzztype + Line 157: EXTRN ?rendered_sprites@@3HA:DWORD ; rendered_sprites + Line 158: EXTRN ?lightdata@@3UFDynLightData@@A:BYTE ; lightdata + Line 159: EXTRN ?r_renderercaps@@3IA:DWORD ; r_renderercaps + Line 160: EXTRN ?r_debug_disable_vis_filter@@3VFBoolCVar@@A:BYTE ; r_debug_disable_vis_filter + Line 161: EXTRN ?transsouls@@3VFFloatCVar@@A:BYTE ; transsouls + Line 162: EXTRN _fltused:DWORD + Line 163: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_stereo_cvars.cod (6 hits) + Line 41: EXTRN atexit:PROC + Line 42: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 43: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 44: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 45: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 46: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_vertexbuilder.cod (12 hits) + Line 84: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 85: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 86: EXTRN __std_terminate:PROC + Line 87: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 88: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 89: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 90: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 91: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 92: EXTRN _CxxThrowException:PROC + Line 93: EXTRN __CxxFrameHandler3:PROC + Line 94: EXTRN memmove:PROC + Line 95: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_viewpointbuffer.cod (9 hits) + Line 22: EXTRN __std_terminate:PROC + Line 23: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 24: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 25: EXTRN ?ortho@VSMatrix@@QEAAXMMMMMM@Z:PROC ; VSMatrix::ortho + Line 26: EXTRN ?computeNormalMatrix@VSMatrix@@QEAAXPEBM@Z:PROC ; VSMatrix::computeNormalMatrix + Line 27: EXTRN ?SetDefaults@HWViewpointUniforms@@QEAAXXZ:PROC ; HWViewpointUniforms::SetDefaults + Line 28: EXTRN __CxxFrameHandler3:PROC + Line 29: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 30: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_vrmodes.cod (17 hits) + Line 59: EXTRN atexit:PROC + Line 60: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 61: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 62: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 63: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 64: EXTRN ?loadIdentity@VSMatrix@@QEAAXXZ:PROC ; VSMatrix::loadIdentity + Line 65: EXTRN ?perspective@VSMatrix@@QEAAXMMMM@Z:PROC ; VSMatrix::perspective + Line 66: EXTRN ?ortho@VSMatrix@@QEAAXMMMMMM@Z:PROC ; VSMatrix::ortho + Line 67: EXTRN ?frustum@VSMatrix@@QEAAXMMMMMM@Z:PROC ; VSMatrix::frustum + Line 68: EXTRN atanf:PROC + Line 69: EXTRN cosf:PROC + Line 70: EXTRN sinf:PROC + Line 71: EXTRN tanf:PROC + Line 72: EXTRN ?vid_rendermode@@3VFIntCVar@@A:BYTE ; vid_rendermode + Line 73: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 74: EXTRN __ImageBase:BYTE + Line 75: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_walls.cod (100 hits) + Line 120: EXTRN _purecall:PROC + Line 121: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 122: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 123: EXTRN _Init_thread_header:PROC + Line 124: EXTRN _Init_thread_footer:PROC + Line 125: EXTRN __std_terminate:PROC + Line 126: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 127: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 128: EXTRN c_sqrt:PROC + Line 129: EXTRN ?_Xbad_function_call@std@@YAXXZ:PROC ; std::_Xbad_function_call + Line 130: EXTRN ?GetRawTexture@FTexture@@QEAAPEAV1@XZ:PROC ; FTexture::GetRawTexture + Line 131: EXTRN ?GetTranslucency@FTexture@@QEAA_NXZ:PROC ; FTexture::GetTranslucency + Line 132: EXTRN ?RowOffset@FTexCoordInfo@@QEBAMM@Z:PROC ; FTexCoordInfo::RowOffset + Line 133: EXTRN ?TextureOffset@FTexCoordInfo@@QEBAMM@Z:PROC ; FTexCoordInfo::TextureOffset + Line 134: EXTRN ?TextureAdjustWidth@FTexCoordInfo@@QEBAMXZ:PROC ; FTexCoordInfo::TextureAdjustWidth + Line 135: EXTRN ?GetFromTexture@FTexCoordInfo@@QEAAXPEAVFTexture@@MM_N@Z:PROC ; FTexCoordInfo::GetFromTexture + Line 136: EXTRN ?RecalcVertexHeights@vertex_t@@QEAAXXZ:PROC ; vertex_t::RecalcVertexHeights + Line 137: EXTRN ?P_GetPlaneLight@@YAPEAUlightlist_t@@PEAUsector_t@@PEAUsecplane_t@@_N@Z:PROC ; P_GetPlaneLight + Line 138: EXTRN ?GetWallGlow@sector_t@@QEAA_NPEAM0@Z:PROC ; sector_t::GetWallGlow + Line 139: EXTRN ?GetLightLevel@side_t@@QEBAH_NH0PEAH@Z:PROC ; side_t::GetLightLevel + Line 140: EXTRN ?GetFloorLight@@YAHPEBUsector_t@@@Z:PROC ; GetFloorLight + Line 141: EXTRN ?GetCeilingLight@@YAHPEBUsector_t@@@Z:PROC ; GetCeilingLight + Line 142: EXTRN ?GetLight@FDynLightData@@QEAA_NHAEAVPlane@@PEAUFDynamicLight@@_N@Z:PROC ; FDynLightData::GetLight + Line 143: EXTRN ?GetAreas@FMaterial@@QEBAHPEAPEAUFloatRect@@@Z:PROC ; FMaterial::GetAreas + Line 144: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@PEAVFTexture@@_N1@Z:PROC ; FMaterial::ValidateTexture + Line 145: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@VFTextureID@@_N11@Z:PROC ; FMaterial::ValidateTexture + Line 146: EXTRN ?SetColor@HWDrawInfo@@QEAAXAEAVFRenderState@@HH_NAEBUFColormap@@M1@Z:PROC ; HWDrawInfo::SetColor + Line 147: EXTRN ?SetFog@HWDrawInfo@@QEAAXAEAVFRenderState@@HH_NPEBUFColormap@@1@Z:PROC ; HWDrawInfo::SetFog + Line 148: EXTRN ?CheckFog@HWDrawInfo@@QEAA_NPEAUsector_t@@0@Z:PROC ; HWDrawInfo::CheckFog + Line 149: EXTRN ?FindPortal@HWDrawInfo@@QEAAPEAVHWPortal@@PEBX@Z:PROC ; HWDrawInfo::FindPortal + Line 150: EXTRN ?AddUpperMissingTexture@HWDrawInfo@@QEAAXPEAUside_t@@PEAUsubsector_t@@M@Z:PROC ; HWDrawInfo::AddUpperMissingTexture + Line 151: EXTRN ?AddLowerMissingTexture@HWDrawInfo@@QEAAXPEAUside_t@@PEAUsubsector_t@@M@Z:PROC ; HWDrawInfo::AddLowerMissingTexture + Line 152: EXTRN ?ProcessActorsInPortal@HWDrawInfo@@QEAAXPEAUFLinePortalSpan@@W4area_t@@@Z:PROC ; HWDrawInfo::ProcessActorsInPortal + Line 153: EXTRN ?AddWall@HWDrawInfo@@QEAAXPEAVGLWall@@@Z:PROC ; HWDrawInfo::AddWall + Line 154: EXTRN ?AddMirrorSurface@HWDrawInfo@@QEAAXPEAVGLWall@@@Z:PROC ; HWDrawInfo::AddMirrorSurface + Line 155: EXTRN ?MakeVertices@GLWall@@QEAAXPEAUHWDrawInfo@@_N@Z:PROC ; GLWall::MakeVertices + Line 156: EXTRN ?SkyPlane@GLWall@@QEAAXPEAUHWDrawInfo@@PEAUsector_t@@H_N@Z:PROC ; GLWall::SkyPlane + Line 157: EXTRN ?SkyLine@GLWall@@QEAAXPEAUHWDrawInfo@@PEAUsector_t@@PEAUline_t@@@Z:PROC ; GLWall::SkyLine + Line 158: EXTRN ?SkyNormal@GLWall@@QEAAXPEAUHWDrawInfo@@PEAUsector_t@@PEAUvertex_t@@2@Z:PROC ; GLWall::SkyNormal + Line 159: EXTRN ?SkyTop@GLWall@@QEAAXPEAUHWDrawInfo@@PEAUseg_t@@PEAUsector_t@@2PEAUvertex_t@@3@Z:PROC ; GLWall::SkyTop + Line 160: EXTRN ?SkyBottom@GLWall@@QEAAXPEAUHWDrawInfo@@PEAUseg_t@@PEAUsector_t@@2PEAUvertex_t@@3@Z:PROC ; GLWall::SkyBottom + Line 161: EXTRN ?ProcessDecals@GLWall@@QEAAXPEAUHWDrawInfo@@@Z:PROC ; GLWall::ProcessDecals + Line 162: EXTRN ?DrawDecalsForMirror@GLWall@@QEAAXPEAUHWDrawInfo@@AEAVFRenderState@@AEAV?$TArray@PEAUGLDecal@@PEAU1@@@@Z:PROC ; GLWall::DrawDecalsForMirror + Line 163: EXTRN ??_EHWPortal@@UEAAPEAXI@Z:PROC ; HWPortal::`vector deleting destructor' + Line 164: EXTRN ??_EHWScenePortalBase@@UEAAPEAXI@Z:PROC ; HWScenePortalBase::`vector deleting destructor' + Line 165: EXTRN ?ClipSeg@HWLinePortal@@UEAAHPEAUseg_t@@AEBU?$TVector3@N@@@Z:PROC ; HWLinePortal::ClipSeg + Line 166: EXTRN ?ClipSubsector@HWLinePortal@@UEAAHPEAUsubsector_t@@@Z:PROC ; HWLinePortal::ClipSubsector + Line 167: EXTRN ?ClipPoint@HWLinePortal@@UEAAHAEBU?$TVector2@N@@@Z:PROC ; HWLinePortal::ClipPoint + Line 168: EXTRN ??_EHWLinePortal@@UEAAPEAXI@Z:PROC ; HWLinePortal::`vector deleting destructor' + Line 169: EXTRN ?Setup@HWMirrorPortal@@MEAA_NPEAUHWDrawInfo@@AEAVFRenderState@@PEAVClipper@@@Z:PROC ; HWMirrorPortal::Setup + Line 170: EXTRN ?Shutdown@HWMirrorPortal@@MEAAXPEAUHWDrawInfo@@AEAVFRenderState@@@Z:PROC ; HWMirrorPortal::Shutdown + Line 171: EXTRN ?GetName@HWMirrorPortal@@MEAAPEBDXZ:PROC ; HWMirrorPortal::GetName + Line 172: EXTRN ??_EHWMirrorPortal@@UEAAPEAXI@Z:PROC ; HWMirrorPortal::`vector deleting destructor' + Line 173: EXTRN ?Setup@HWLineToLinePortal@@MEAA_NPEAUHWDrawInfo@@AEAVFRenderState@@PEAVClipper@@@Z:PROC ; HWLineToLinePortal::Setup + Line 174: EXTRN ?GetName@HWLineToLinePortal@@MEAAPEBDXZ:PROC ; HWLineToLinePortal::GetName + Line 175: EXTRN ?RenderAttached@HWLineToLinePortal@@MEAAXPEAUHWDrawInfo@@@Z:PROC ; HWLineToLinePortal::RenderAttached + Line 176: EXTRN ??_EHWLineToLinePortal@@UEAAPEAXI@Z:PROC ; HWLineToLinePortal::`vector deleting destructor' + Line 177: EXTRN ?Setup@HWSkyboxPortal@@MEAA_NPEAUHWDrawInfo@@AEAVFRenderState@@PEAVClipper@@@Z:PROC ; HWSkyboxPortal::Setup + Line 178: EXTRN ?Shutdown@HWSkyboxPortal@@MEAAXPEAUHWDrawInfo@@AEAVFRenderState@@@Z:PROC ; HWSkyboxPortal::Shutdown + Line 179: EXTRN ?GetName@HWSkyboxPortal@@MEAAPEBDXZ:PROC ; HWSkyboxPortal::GetName + Line 180: EXTRN ??_EHWSkyboxPortal@@UEAAPEAXI@Z:PROC ; HWSkyboxPortal::`vector deleting destructor' + Line 181: EXTRN ?Setup@HWSectorStackPortal@@MEAA_NPEAUHWDrawInfo@@AEAVFRenderState@@PEAVClipper@@@Z:PROC ; HWSectorStackPortal::Setup + Line 182: EXTRN ?Shutdown@HWSectorStackPortal@@MEAAXPEAUHWDrawInfo@@AEAVFRenderState@@@Z:PROC ; HWSectorStackPortal::Shutdown + Line 183: EXTRN ?GetName@HWSectorStackPortal@@MEAAPEBDXZ:PROC ; HWSectorStackPortal::GetName + Line 184: EXTRN ??_EHWSectorStackPortal@@UEAAPEAXI@Z:PROC ; HWSectorStackPortal::`vector deleting destructor' + Line 185: EXTRN ?Setup@HWPlaneMirrorPortal@@MEAA_NPEAUHWDrawInfo@@AEAVFRenderState@@PEAVClipper@@@Z:PROC ; HWPlaneMirrorPortal::Setup + Line 186: EXTRN ?Shutdown@HWPlaneMirrorPortal@@MEAAXPEAUHWDrawInfo@@AEAVFRenderState@@@Z:PROC ; HWPlaneMirrorPortal::Shutdown + Line 187: EXTRN ?GetName@HWPlaneMirrorPortal@@MEAAPEBDXZ:PROC ; HWPlaneMirrorPortal::GetName + Line 188: EXTRN ??_EHWPlaneMirrorPortal@@UEAAPEAXI@Z:PROC ; HWPlaneMirrorPortal::`vector deleting destructor' + Line 189: EXTRN ??0HWHorizonPortal@@QEAA@PEAUFPortalSceneState@@PEAUGLHorizonInfo@@AEAUFRenderViewpoint@@_N@Z:PROC ; HWHorizonPortal::HWHorizonPortal + Line 190: EXTRN ?DrawContents@HWEEHorizonPortal@@MEAAXPEAUHWDrawInfo@@AEAVFRenderState@@@Z:PROC ; HWEEHorizonPortal::DrawContents + Line 191: EXTRN ?GetName@HWEEHorizonPortal@@MEAAPEBDXZ:PROC ; HWEEHorizonPortal::GetName + Line 192: EXTRN ??_EHWEEHorizonPortal@@UEAAPEAXI@Z:PROC ; HWEEHorizonPortal::`vector deleting destructor' + Line 193: EXTRN ?DrawContents@HWSkyPortal@@MEAAXPEAUHWDrawInfo@@AEAVFRenderState@@@Z:PROC ; HWSkyPortal::DrawContents + Line 194: EXTRN ?GetName@HWSkyPortal@@MEAAPEBDXZ:PROC ; HWSkyPortal::GetName + Line 195: EXTRN ??_EHWSkyPortal@@UEAAPEAXI@Z:PROC ; HWSkyPortal::`vector deleting destructor' + Line 196: EXTRN ?UploadLights@FLightBuffer@@QEAAHAEAUFDynLightData@@@Z:PROC ; FLightBuffer::UploadLights + Line 197: EXTRN __CxxFrameHandler3:PROC + Line 198: EXTRN memcmp:PROC + Line 199: EXTRN _Init_thread_epoch:DWORD + Line 200: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 201: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 202: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 203: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 204: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 205: EXTRN ?lightdata@@3UFDynLightData@@A:BYTE ; lightdata + Line 206: EXTRN ?gl_weaponlight@@3VFIntCVar@@A:BYTE ; gl_weaponlight + Line 207: EXTRN ?gl_fogmode@@3VFIntCVar@@A:BYTE ; gl_fogmode + Line 208: EXTRN ?gl_mirror_envmap@@3VFBoolCVar@@A:BYTE ; gl_mirror_envmap + Line 209: EXTRN ?gl_mirrors@@3VFBoolCVar@@A:BYTE ; gl_mirrors + Line 210: EXTRN ?gl_seamless@@3VFBoolCVar@@A:BYTE ; gl_seamless + Line 211: EXTRN ?gl_mask_threshold@@3VFFloatCVar@@A:BYTE ; gl_mask_threshold + Line 212: EXTRN ?gl_mask_sprite_threshold@@3VFFloatCVar@@A:BYTE ; gl_mask_sprite_threshold + Line 213: EXTRN ?iter_dlight@@3HA:DWORD ; iter_dlight + Line 214: EXTRN ?draw_dlight@@3HA:DWORD ; draw_dlight + Line 215: EXTRN ?render_texsplit@@3HA:DWORD ; render_texsplit + Line 216: EXTRN ?vertexcount@@3HA:DWORD ; vertexcount + Line 217: EXTRN __ImageBase:BYTE + Line 218: EXTRN _fltused:DWORD + Line 219: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_walls_vertex.cod (4 hits) + Line 20: EXTRN ?AllocVertices@FFlatVertexBuffer@@QEAA?AU?$pair@PEAUFFlatVertex@@I@std@@I@Z:PROC ; FFlatVertexBuffer::AllocVertices + Line 21: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 22: EXTRN ?gl_seamless@@3VFBoolCVar@@A:BYTE ; gl_seamless + Line 23: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\hw_weapon.cod (60 hits) + Line 39: EXTRN _purecall:PROC + Line 40: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 41: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 42: EXTRN ?CheckSpriteGlow@sector_t@@QEAAHHAEBU?$TVector3@N@@@Z:PROC ; sector_t::CheckSpriteGlow + Line 43: EXTRN ?IsVisible@FRenderStyle@@QEBA_NN@Z:PROC ; FRenderStyle::IsVisible + Line 44: EXTRN ?GetSpriteFrame@spritedef_t@@QEAA?AVFTextureID@@HHU?$TAngle@N@@PEA_N_N@Z:PROC ; spritedef_t::GetSpriteFrame + Line 45: EXTRN ?GetTranslucency@FTexture@@QEAA_NXZ:PROC ; FTexture::GetTranslucency + Line 46: EXTRN ?AlterWeaponSprite@AActor@@QEAAXPEAUvisstyle_t@@@Z:PROC ; AActor::AlterWeaponSprite + Line 47: EXTRN ?GetRenderStyle@DPSprite@@QEAA?AU?$pair@TFRenderStyle@@M@std@@TFRenderStyle@@N@Z:PROC ; DPSprite::GetRenderStyle + Line 48: EXTRN ?GetYAdjust@DPSprite@@QEAAM_N@Z:PROC ; DPSprite::GetYAdjust + Line 49: EXTRN ?P_BobWeapon@@YAXPEAVplayer_t@@PEAM1N@Z:PROC ; P_BobWeapon + Line 50: EXTRN ?FindPSprite@player_t@@QEAAPEAVDPSprite@@H@Z:PROC ; player_t::FindPSprite + Line 51: EXTRN ?RenderHUDModel@FModelRenderer@@QEAAXPEAVDPSprite@@MM@Z:PROC ; FModelRenderer::RenderHUDModel + Line 52: EXTRN ??_EFModelRenderer@@UEAAPEAXI@Z:PROC ; FModelRenderer::`vector deleting destructor' + Line 53: EXTRN ?FindModelFrame@@YAPEAUFSpriteModelFrame@@PEBVPClass@@HH_N@Z:PROC ; FindModelFrame + Line 54: EXTRN ?IsHUDModelForPlayerAvailable@@YA_NPEAVplayer_t@@@Z:PROC ; IsHUDModelForPlayerAvailable + Line 55: EXTRN ?hw_FakeFlat@@YAPEAUsector_t@@PEAU1@W4area_t@@_N0@Z:PROC ; hw_FakeFlat + Line 56: EXTRN ?BeginDrawModel@FGLModelRenderer@@UEAAXPEAVAActor@@PEAUFSpriteModelFrame@@AEBVVSMatrix@@_N@Z:PROC ; FGLModelRenderer::BeginDrawModel + Line 57: EXTRN ?EndDrawModel@FGLModelRenderer@@UEAAXPEAVAActor@@PEAUFSpriteModelFrame@@@Z:PROC ; FGLModelRenderer::EndDrawModel + Line 58: EXTRN ?CreateVertexBuffer@FGLModelRenderer@@UEAAPEAVIModelVertexBuffer@@_N0@Z:PROC ; FGLModelRenderer::CreateVertexBuffer + Line 59: EXTRN ?GetViewToWorldMatrix@FGLModelRenderer@@UEAA?AVVSMatrix@@XZ:PROC ; FGLModelRenderer::GetViewToWorldMatrix + Line 60: EXTRN ?BeginDrawHUDModel@FGLModelRenderer@@UEAAXPEAVAActor@@AEBVVSMatrix@@_N@Z:PROC ; FGLModelRenderer::BeginDrawHUDModel + Line 61: EXTRN ?EndDrawHUDModel@FGLModelRenderer@@UEAAXPEAVAActor@@@Z:PROC ; FGLModelRenderer::EndDrawHUDModel + Line 62: EXTRN ?SetInterpolation@FGLModelRenderer@@UEAAXN@Z:PROC ; FGLModelRenderer::SetInterpolation + Line 63: EXTRN ?SetMaterial@FGLModelRenderer@@UEAAXPEAVFTexture@@_NH@Z:PROC ; FGLModelRenderer::SetMaterial + Line 64: EXTRN ?DrawArrays@FGLModelRenderer@@UEAAXHH@Z:PROC ; FGLModelRenderer::DrawArrays + Line 65: EXTRN ?DrawElements@FGLModelRenderer@@UEAAXH_K@Z:PROC ; FGLModelRenderer::DrawElements + Line 66: EXTRN ??_EFGLModelRenderer@@UEAAPEAXI@Z:PROC ; FGLModelRenderer::`vector deleting destructor' + Line 67: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@VFTextureID@@_N11@Z:PROC ; FMaterial::ValidateTexture + Line 68: EXTRN ?SetColor@HWDrawInfo@@QEAAXAEAVFRenderState@@HH_NAEBUFColormap@@M1@Z:PROC ; HWDrawInfo::SetColor + Line 69: EXTRN ?CalcLightLevel@HWDrawInfo@@QEAAHHH_NH@Z:PROC ; HWDrawInfo::CalcLightLevel + Line 70: EXTRN ?GetDynSpriteLight@HWDrawInfo@@QEAAXPEAVAActor@@PEAUparticle_t@@PEAM@Z:PROC ; HWDrawInfo::GetDynSpriteLight + Line 71: EXTRN ?hw_GetDynModelLight@@YAXPEAVAActor@@AEAUFDynLightData@@@Z:PROC ; hw_GetDynModelLight + Line 72: EXTRN ?AllocVertices@FFlatVertexBuffer@@QEAA?AU?$pair@PEAUFFlatVertex@@I@std@@I@Z:PROC ; FFlatVertexBuffer::AllocVertices + Line 73: EXTRN ?UploadLights@FLightBuffer@@QEAAHAEAUFDynLightData@@@Z:PROC ; FLightBuffer::UploadLights + Line 74: EXTRN __CxxFrameHandler3:PROC + Line 75: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 76: EXTRN ?CrosshairImage@@3PEAVFTexture@@EA:QWORD ; CrosshairImage + Line 77: EXTRN ?viewwindowx@@3HA:DWORD ; viewwindowx + Line 78: EXTRN ?viewwindowy@@3HA:DWORD ; viewwindowy + Line 79: EXTRN ?viewwidth@@3HA:DWORD ; viewwidth + Line 80: EXTRN ?viewheight@@3HA:DWORD ; viewheight + Line 81: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 82: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 83: EXTRN ?r_viewwindow@@3UFViewWindow@@A:BYTE ; r_viewwindow + Line 84: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 85: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 86: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 87: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 88: EXTRN ?lightdata@@3UFDynLightData@@A:BYTE ; lightdata + Line 89: EXTRN ?gl_weaponlight@@3VFIntCVar@@A:BYTE ; gl_weaponlight + Line 90: EXTRN ?screenblocks@@3VFIntCVar@@A:BYTE ; screenblocks + Line 91: EXTRN ?gl_light_sprites@@3VFBoolCVar@@A:BYTE ; gl_light_sprites + Line 92: EXTRN ?gl_mask_sprite_threshold@@3VFFloatCVar@@A:BYTE ; gl_mask_sprite_threshold + Line 93: EXTRN ?gl_fuzztype@@3VFIntCVar@@A:BYTE ; gl_fuzztype + Line 94: EXTRN ?transsouls@@3VFFloatCVar@@A:BYTE ; transsouls + Line 95: EXTRN ?r_drawplayersprites@@3VFBoolCVar@@A:BYTE ; r_drawplayersprites + Line 96: EXTRN ?r_deathcamera@@3VFBoolCVar@@A:BYTE ; r_deathcamera + Line 97: EXTRN _fltused:DWORD + Line 98: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_cd.cod (32 hits) + Line 57: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 58: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 59: EXTRN atexit:PROC + Line 60: EXTRN toupper:PROC + Line 61: EXTRN __imp_SetThreadPriority:PROC + Line 62: EXTRN __imp_DispatchMessageA:PROC + Line 63: EXTRN __imp_PeekMessageA:PROC + Line 64: EXTRN __imp_DefWindowProcA:PROC + Line 65: EXTRN __imp_RegisterClassA:PROC + Line 66: EXTRN __imp_UnregisterClassA:PROC + Line 67: EXTRN __imp_CreateWindowExA:PROC + Line 68: EXTRN __imp_DestroyWindow:PROC + Line 69: EXTRN __imp_GetWindowLongPtrA:PROC + Line 70: EXTRN __imp_SetWindowLongPtrA:PROC + Line 71: EXTRN __imp_mciSendCommandA:PROC + Line 72: EXTRN strtoul:PROC + Line 73: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 74: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 75: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 76: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 77: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 78: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 79: EXTRN ??0FHelperThread@@QEAA@XZ:PROC ; FHelperThread::FHelperThread + Line 80: EXTRN ??1FHelperThread@@UEAA@XZ:PROC ; FHelperThread::~FHelperThread + Line 81: EXTRN ?DestroyThread@FHelperThread@@QEAAXXZ:PROC ; FHelperThread::DestroyThread + Line 82: EXTRN ?LaunchThread@FHelperThread@@QEAA_NXZ:PROC ; FHelperThread::LaunchThread + Line 83: EXTRN ?SendMessageA@FHelperThread@@QEAAKKKKK_N@Z:PROC ; FHelperThread::SendMessageA + Line 84: EXTRN ??_EFCDThread@@UEAAPEAXI@Z:PROC ; FCDThread::`vector deleting destructor' + Line 85: EXTRN __CxxFrameHandler3:PROC + Line 86: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 87: EXTRN ?g_hInst@@3PEAUHINSTANCE__@@EA:QWORD ; g_hInst + Line 88: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_crash.cod (72 hits) + Line 123: EXTRN strrchr:PROC + Line 124: EXTRN strstr:PROC + Line 125: EXTRN stricmp:PROC + Line 126: EXTRN __imp_RtlVirtualUnwind:PROC + Line 127: EXTRN __imp_CreateFileA:PROC + Line 128: EXTRN __imp_GetFileSize:PROC + Line 129: EXTRN __imp_ReadFile:PROC + Line 130: EXTRN __imp_SetFilePointer:PROC + Line 131: EXTRN __imp_WriteFile:PROC + Line 132: EXTRN __imp_GetTempPathA:PROC + Line 133: EXTRN __imp_GetTempFileNameA:PROC + Line 134: EXTRN __imp_CloseHandle:PROC + Line 135: EXTRN __imp_HeapAlloc:PROC + Line 136: EXTRN __imp_GetProcessHeap:PROC + Line 137: EXTRN __imp_WaitForSingleObject:PROC + Line 138: EXTRN __imp_GetCurrentProcess:PROC + Line 139: EXTRN __imp_GetCurrentProcessId:PROC + Line 140: EXTRN __imp_CreateThread:PROC + Line 141: EXTRN __imp_GetCurrentThreadId:PROC + Line 142: EXTRN __imp_GetExitCodeThread:PROC + Line 143: EXTRN __imp_GetVersionExA:PROC + Line 144: EXTRN __imp_VirtualQuery:PROC + Line 145: EXTRN __imp_FreeLibrary:PROC + Line 146: EXTRN __imp_GetModuleFileNameA:PROC + Line 147: EXTRN __imp_GetModuleHandleA:PROC + Line 148: EXTRN __imp_GetProcAddress:PROC + Line 149: EXTRN __imp_LoadLibraryA:PROC + Line 150: EXTRN __imp_BitBlt:PROC + Line 151: EXTRN __imp_CreateBitmap:PROC + Line 152: EXTRN __imp_CreateCompatibleBitmap:PROC + Line 153: EXTRN __imp_CreateCompatibleDC:PROC + Line 154: EXTRN __imp_DeleteDC:PROC + Line 155: EXTRN __imp_DeleteObject:PROC + Line 156: EXTRN __imp_GetMapMode:PROC + Line 157: EXTRN __imp_GetStockObject:PROC + Line 158: EXTRN __imp_SelectObject:PROC + Line 159: EXTRN __imp_SetBkColor:PROC + Line 160: EXTRN __imp_SetMapMode:PROC + Line 161: EXTRN __imp_GetObjectA:PROC + Line 162: EXTRN __imp_DPtoLP:PROC + Line 163: EXTRN __imp_SendMessageA:PROC + Line 164: EXTRN __imp_CallWindowProcA:PROC + Line 165: EXTRN __imp_ShowWindow:PROC + Line 166: EXTRN __imp_SetWindowPos:PROC + Line 167: EXTRN __imp_CreateDialogParamA:PROC + Line 168: EXTRN __imp_DialogBoxParamA:PROC + Line 169: EXTRN __imp_EndDialog:PROC + Line 170: EXTRN __imp_GetDlgItem:PROC + Line 171: EXTRN __imp_BeginPaint:PROC + Line 172: EXTRN __imp_EndPaint:PROC + Line 173: EXTRN __imp_GetUpdateRect:PROC + Line 174: EXTRN __imp_SetWindowTextA:PROC + Line 175: EXTRN __imp_GetWindowRect:PROC + Line 176: EXTRN __imp_MessageBoxA:PROC + Line 177: EXTRN __imp_ScreenToClient:PROC + Line 178: EXTRN __imp_GetWindowLongPtrA:PROC + Line 179: EXTRN __imp_SetWindowLongPtrA:PROC + Line 180: EXTRN __imp_GetSaveFileNameA:PROC + Line 181: EXTRN __imp_ShellExecuteA:PROC + Line 182: EXTRN __stdio_common_vsprintf:PROC + Line 183: EXTRN mysnprintf:PROC + Line 184: EXTRN _localtime64:PROC + Line 185: EXTRN _time64:PROC + Line 186: EXTRN deflate:PROC + Line 187: EXTRN deflateEnd:PROC + Line 188: EXTRN crc32:PROC + Line 189: EXTRN deflateInit2_:PROC + Line 190: EXTRN ?I_FlushBufferedConsoleStuff@@YAXXZ:PROC ; I_FlushBufferedConsoleStuff + Line 191: EXTRN __C_specific_handler:PROC + Line 192: EXTRN memcpy:PROC + Line 193: EXTRN memset:PROC + Line 194: EXTRN ?g_hInst@@3PEAUHINSTANCE__@@EA:QWORD ; g_hInst + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_dijoy.cod (69 hits) + Line 118: EXTRN _purecall:PROC + Line 119: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 120: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 121: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 122: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 123: EXTRN atexit:PROC + Line 124: EXTRN __std_terminate:PROC + Line 125: EXTRN strstr:PROC + Line 126: EXTRN wcsstr:PROC + Line 127: EXTRN free:PROC + Line 128: EXTRN malloc:PROC + Line 129: EXTRN qsort:PROC + Line 130: EXTRN __imp_CoSetProxyBlanket:PROC + Line 131: EXTRN __imp_CoCreateInstance:PROC + Line 132: EXTRN __imp_SysAllocString:PROC + Line 133: EXTRN __imp_SysFreeString:PROC + Line 134: EXTRN __stdio_common_vswscanf:PROC + Line 135: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 136: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 137: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 138: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 139: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 140: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 141: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 142: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 143: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 144: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 145: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 146: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 147: EXTRN ??1IJoystickConfig@@UEAA@XZ:PROC ; IJoystickConfig::~IJoystickConfig + Line 148: EXTRN ?M_LoadJoystickConfig@@YA_NPEAUIJoystickConfig@@@Z:PROC ; M_LoadJoystickConfig + Line 149: EXTRN ?M_SaveJoystickConfig@@YAXPEAUIJoystickConfig@@@Z:PROC ; M_SaveJoystickConfig + Line 150: EXTRN ?Joy_GenerateButtonEvents@@YAXHHHH@Z:PROC ; Joy_GenerateButtonEvents + Line 151: EXTRN ?Joy_XYAxesToButtons@@YAHNN@Z:PROC ; Joy_XYAxesToButtons + Line 152: EXTRN ?Joy_RemoveDeadZone@@YANNNPEAE@Z:PROC ; Joy_RemoveDeadZone + Line 153: EXTRN ?UpdateJoystickMenu@@YAXPEAUIJoystickConfig@@@Z:PROC ; UpdateJoystickMenu + Line 154: EXTRN ??1FInputDevice@@UEAA@XZ:PROC ; FInputDevice::~FInputDevice + Line 155: EXTRN ?ProcessInput@FInputDevice@@UEAAXXZ:PROC ; FInputDevice::ProcessInput + Line 156: EXTRN ?ProcessRawInput@FInputDevice@@UEAA_NPEAUtagRAWINPUT@@H@Z:PROC ; FInputDevice::ProcessRawInput + Line 157: EXTRN ?WndProcHook@FInputDevice@@UEAA_NPEAUHWND__@@I_K_JPEA_J@Z:PROC ; FInputDevice::WndProcHook + Line 158: EXTRN ?I_IsPS2Adapter@@YA_NK@Z:PROC ; I_IsPS2Adapter + Line 159: EXTRN ?D_PostEvent@@YAXPEBUevent_t@@@Z:PROC ; D_PostEvent + Line 160: EXTRN ?FormatGUID@@YAXPEAD_KAEBU_GUID@@@Z:PROC ; FormatGUID + Line 161: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 162: EXTRN ??_EFDInputJoystick@@UEAAPEAXI@Z:PROC ; FDInputJoystick::`vector deleting destructor' + Line 163: EXTRN ??_EFDInputJoystickManager@@UEAAPEAXI@Z:PROC ; FDInputJoystickManager::`vector deleting destructor' + Line 164: EXTRN __CxxFrameHandler3:PROC + Line 165: EXTRN __chkstk:PROC + Line 166: EXTRN memcmp:PROC + Line 167: EXTRN memmove:PROC + Line 168: EXTRN memset:PROC + Line 169: EXTRN GUID_XAxis:BYTE + Line 170: EXTRN GUID_YAxis:BYTE + Line 171: EXTRN GUID_ZAxis:BYTE + Line 172: EXTRN GUID_RxAxis:BYTE + Line 173: EXTRN GUID_RyAxis:BYTE + Line 174: EXTRN GUID_RzAxis:BYTE + Line 175: EXTRN GUID_Slider:BYTE + Line 176: EXTRN GUID_Button:BYTE + Line 177: EXTRN GUID_POV:BYTE + Line 178: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 179: EXTRN ?use_joystick@@3VFBoolCVar@@A:BYTE ; use_joystick + Line 180: EXTRN ?JoyDevices@@3PAPEAVFJoystickCollection@@A:BYTE ; JoyDevices + Line 181: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 182: EXTRN ?MyGetRawInputDeviceInfoA@@3P6AIPEAXI0PEAI@ZEA:QWORD ; MyGetRawInputDeviceInfoA + Line 183: EXTRN ?MyGetRawInputDeviceList@@3P6AIPEAUtagRAWINPUTDEVICELIST@@PEAII@ZEA:QWORD ; MyGetRawInputDeviceList + Line 184: EXTRN ?g_pdi@@3PEAUIDirectInput8A@@EA:QWORD ; g_pdi + Line 185: EXTRN ?Window@@3PEAUHWND__@@EA:QWORD ; Window + Line 186: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_input.cod (75 hits) + Line 4166: EXTRN _purecall:PROC + Line 4167: EXTRN atexit:PROC + Line 4168: EXTRN __imp_GetLastError:PROC + Line 4169: EXTRN __imp_SleepEx:PROC + Line 4170: EXTRN __imp_GetCurrentProcess:PROC + Line 4171: EXTRN __imp_SetPriorityClass:PROC + Line 4172: EXTRN __imp_FreeLibrary:PROC + Line 4173: EXTRN __imp_GetModuleHandleA:PROC + Line 4174: EXTRN __imp_GetProcAddress:PROC + Line 4175: EXTRN __imp_LoadLibraryA:PROC + Line 4176: EXTRN __imp_GlobalAlloc:PROC + Line 4177: EXTRN __imp_GlobalUnlock:PROC + Line 4178: EXTRN __imp_GlobalLock:PROC + Line 4179: EXTRN __imp_TranslateMessage:PROC + Line 4180: EXTRN __imp_DispatchMessageA:PROC + Line 4181: EXTRN __imp_PeekMessageA:PROC + Line 4182: EXTRN __imp_DefWindowProcA:PROC + Line 4183: EXTRN __imp_PostQuitMessage:PROC + Line 4184: EXTRN __imp_OpenClipboard:PROC + Line 4185: EXTRN __imp_CloseClipboard:PROC + Line 4186: EXTRN __imp_SetClipboardData:PROC + Line 4187: EXTRN __imp_GetClipboardData:PROC + Line 4188: EXTRN __imp_EmptyClipboard:PROC + Line 4189: EXTRN __imp_IsClipboardFormatAvailable:PROC + Line 4190: EXTRN __imp_GetKeyState:PROC + Line 4191: EXTRN __imp_MapVirtualKeyA:PROC + Line 4192: EXTRN __imp_SetCapture:PROC + Line 4193: EXTRN __imp_ReleaseCapture:PROC + Line 4194: EXTRN __imp_InvalidateRect:PROC + Line 4195: EXTRN __imp_AdjustWindowRectEx:PROC + Line 4196: EXTRN __imp_SetCursor:PROC + Line 4197: EXTRN exit:PROC + Line 4198: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 4199: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 4200: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 4201: EXTRN ?ResetButtonTriggers@@YAXXZ:PROC ; ResetButtonTriggers + Line 4202: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 4203: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 4204: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 4205: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 4206: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 4207: EXTRN ?AllKeysUp@FKeyboard@@QEAAXXZ:PROC ; FKeyboard::AllKeysUp + Line 4208: EXTRN ?I_StartupMouse@@YAXXZ:PROC ; I_StartupMouse + Line 4209: EXTRN ?I_CheckNativeMouse@@YAX_N@Z:PROC ; I_CheckNativeMouse + Line 4210: EXTRN ?I_StartupKeyboard@@YAXXZ:PROC ; I_StartupKeyboard + Line 4211: EXTRN ?I_StartupXInput@@YAXXZ:PROC ; I_StartupXInput + Line 4212: EXTRN ?I_StartupDirectInputJoystick@@YAXXZ:PROC ; I_StartupDirectInputJoystick + Line 4213: EXTRN ?I_StartupRawPS2@@YAXXZ:PROC ; I_StartupRawPS2 + Line 4214: EXTRN ?ScaleCoordsFromWindow@DFrameBuffer@@QEAAXAEAF0@Z:PROC ; DFrameBuffer::ScaleCoordsFromWindow + Line 4215: EXTRN ?S_SetSoundPaused@@YAXH@Z:PROC ; S_SetSoundPaused + Line 4216: EXTRN ?D_PostEvent@@YAXPEBUevent_t@@@Z:PROC ; D_PostEvent + Line 4217: EXTRN ?E_CheckUiProcessors@@YA_NXZ:PROC ; E_CheckUiProcessors + Line 4218: EXTRN __CxxFrameHandler3:PROC + Line 4219: EXTRN __chkstk:PROC + Line 4220: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 4221: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 4222: EXTRN ?menuactive@@3W4EMenuState@@A:DWORD ; menuactive + Line 4223: EXTRN ?ToggleFullscreen@@3_NA:BYTE ; ToggleFullscreen + Line 4224: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 4225: EXTRN ?use_joystick@@3VFBoolCVar@@A:BYTE ; use_joystick + Line 4226: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 4227: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 4228: EXTRN ?ConsoleState@@3W4cstate_t@@A:DWORD ; ConsoleState + Line 4229: EXTRN ?g_hInst@@3PEAUHINSTANCE__@@EA:QWORD ; g_hInst + Line 4230: EXTRN ?SessionID@@3KA:DWORD ; SessionID + Line 4231: EXTRN ?Mouse@@3PEAVFMouse@@EA:QWORD ; Mouse + Line 4232: EXTRN ?Keyboard@@3PEAVFKeyboard@@EA:QWORD ; Keyboard + Line 4233: EXTRN ?Window@@3PEAUHWND__@@EA:QWORD ; Window + Line 4234: EXTRN ?language@@3VFStringCVar@@A:BYTE ; language + Line 4235: EXTRN ?use_mouse@@3VFBoolCVar@@A:BYTE ; use_mouse + Line 4236: EXTRN ?CursorState@@3_NA:BYTE ; CursorState + Line 4237: EXTRN ?AppActive@@3_NA:BYTE ; AppActive + Line 4238: EXTRN ?chatmodeon@@3HA:DWORD ; chatmodeon + Line 4239: EXTRN __ImageBase:BYTE + Line 4240: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_keyboard.cod (25 hits) + Line 39: EXTRN _purecall:PROC + Line 40: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 41: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 42: EXTRN atexit:PROC + Line 43: EXTRN __std_terminate:PROC + Line 44: EXTRN __imp_GetForegroundWindow:PROC + Line 45: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 46: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 47: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 48: EXTRN ??1FInputDevice@@UEAA@XZ:PROC ; FInputDevice::~FInputDevice + Line 49: EXTRN ?ProcessInput@FInputDevice@@UEAAXXZ:PROC ; FInputDevice::ProcessInput + Line 50: EXTRN ?ProcessRawInput@FInputDevice@@UEAA_NPEAUtagRAWINPUT@@H@Z:PROC ; FInputDevice::ProcessRawInput + Line 51: EXTRN ?WndProcHook@FInputDevice@@UEAA_NPEAUHWND__@@I_K_JPEA_J@Z:PROC ; FInputDevice::WndProcHook + Line 52: EXTRN ??_EFKeyboard@@UEAAPEAXI@Z:PROC ; FKeyboard::`vector deleting destructor' + Line 53: EXTRN ?D_PostEvent@@YAXPEBUevent_t@@@Z:PROC ; D_PostEvent + Line 54: EXTRN ??_EFDInputKeyboard@@UEAAPEAXI@Z:PROC ; FDInputKeyboard::`vector deleting destructor' + Line 55: EXTRN ??_EFRawKeyboard@@UEAAPEAXI@Z:PROC ; FRawKeyboard::`vector deleting destructor' + Line 56: EXTRN __CxxFrameHandler3:PROC + Line 57: EXTRN GUID_SysKeyboard:BYTE + Line 58: EXTRN c_dfDIKeyboard:BYTE + Line 59: EXTRN ?MyRegisterRawInputDevices@@3P6AHPEBUtagRAWINPUTDEVICE@@II@ZEA:QWORD ; MyRegisterRawInputDevices + Line 60: EXTRN ?Window@@3PEAUHWND__@@EA:QWORD ; Window + Line 61: EXTRN ?g_pdi@@3PEAUIDirectInput8A@@EA:QWORD ; g_pdi + Line 62: EXTRN ?g_pdi3@@3PEAUIDirectInputA@@EA:QWORD ; g_pdi3 + Line 63: EXTRN ?GUICapture@@3_NA:BYTE ; GUICapture + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_main.cod (139 hits) + Line 174: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 175: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 176: EXTRN atexit:PROC + Line 177: EXTRN __std_terminate:PROC + Line 178: EXTRN strrchr:PROC + Line 179: EXTRN __imp_RtlCaptureContext:PROC + Line 180: EXTRN __imp_GetStdHandle:PROC + Line 181: EXTRN __imp_GetCommandLineA:PROC + Line 182: EXTRN __imp_GetFileInformationByHandle:PROC + Line 183: EXTRN __imp_WriteFile:PROC + Line 184: EXTRN __imp_CloseHandle:PROC + Line 185: EXTRN __imp_DuplicateHandle:PROC + Line 186: EXTRN __imp_SetUnhandledExceptionFilter:PROC + Line 187: EXTRN __imp_GetLastError:PROC + Line 188: EXTRN __imp_HeapAlloc:PROC + Line 189: EXTRN __imp_GetProcessHeap:PROC + Line 190: EXTRN __imp_Sleep:PROC + Line 191: EXTRN __imp_QueueUserAPC:PROC + Line 192: EXTRN __imp_GetCurrentProcess:PROC + Line 193: EXTRN __imp_GetCurrentProcessId:PROC + Line 194: EXTRN __imp_ExitProcess:PROC + Line 195: EXTRN __imp_GetCurrentThread:PROC + Line 196: EXTRN __imp_GetCurrentThreadId:PROC + Line 197: EXTRN __imp_FreeLibrary:PROC + Line 198: EXTRN __imp_GetModuleFileNameA:PROC + Line 199: EXTRN __imp_GetModuleHandleA:PROC + Line 200: EXTRN __imp_GetProcAddress:PROC + Line 201: EXTRN __imp_LoadLibraryA:PROC + Line 202: EXTRN __imp_MulDiv:PROC + Line 203: EXTRN __imp_CreateFontIndirectA:PROC + Line 204: EXTRN __imp_CreateSolidBrush:PROC + Line 205: EXTRN __imp_DeleteObject:PROC + Line 206: EXTRN __imp_GetDeviceCaps:PROC + Line 207: EXTRN __imp_GetStockObject:PROC + Line 208: EXTRN __imp_GetTextExtentPoint32A:PROC + Line 209: EXTRN __imp_SelectObject:PROC + Line 210: EXTRN __imp_SetBkMode:PROC + Line 211: EXTRN __imp_StretchDIBits:PROC + Line 212: EXTRN __imp_SetTextColor:PROC + Line 213: EXTRN __imp_SetTextAlign:PROC + Line 214: EXTRN __imp_GetTextMetricsA:PROC + Line 215: EXTRN __imp_TextOutA:PROC + Line 216: EXTRN __imp_GetMessageA:PROC + Line 217: EXTRN __imp_TranslateMessage:PROC + Line 218: EXTRN __imp_DispatchMessageA:PROC + Line 219: EXTRN __imp_PeekMessageA:PROC + Line 220: EXTRN __imp_SendMessageA:PROC + Line 221: EXTRN __imp_SendMessageW:PROC + Line 222: EXTRN __imp_DefWindowProcA:PROC + Line 223: EXTRN __imp_PostQuitMessage:PROC + Line 224: EXTRN __imp_RegisterClassA:PROC + Line 225: EXTRN __imp_CreateWindowExA:PROC + Line 226: EXTRN __imp_ShowWindow:PROC + Line 227: EXTRN __imp_MoveWindow:PROC + Line 228: EXTRN __imp_SetWindowPos:PROC + Line 229: EXTRN __imp_CreateDialogParamA:PROC + Line 230: EXTRN __imp_GetDlgItem:PROC + Line 231: EXTRN __imp_GetSystemMetrics:PROC + Line 232: EXTRN __imp_DrawIcon:PROC + Line 233: EXTRN __imp_GetDC:PROC + Line 234: EXTRN __imp_ReleaseDC:PROC + Line 235: EXTRN __imp_InvalidateRect:PROC + Line 236: EXTRN __imp_SetWindowTextA:PROC + Line 237: EXTRN __imp_GetWindowTextLengthA:PROC + Line 238: EXTRN __imp_GetClientRect:PROC + Line 239: EXTRN __imp_MessageBoxA:PROC + Line 240: EXTRN __imp_FillRect:PROC + Line 241: EXTRN __imp_SetRect:PROC + Line 242: EXTRN __imp_GetWindowLongA:PROC + Line 243: EXTRN __imp_SetWindowLongA:PROC + Line 244: EXTRN __imp_GetWindowLongPtrA:PROC + Line 245: EXTRN __imp_SetWindowLongPtrA:PROC + Line 246: EXTRN __imp_GetParent:PROC + Line 247: EXTRN __imp_LoadCursorA:PROC + Line 248: EXTRN __imp_LoadIconA:PROC + Line 249: EXTRN __imp_LoadImageA:PROC + Line 250: EXTRN __imp_IsDialogMessageA:PROC + Line 251: EXTRN __imp_MapDialogRect:PROC + Line 252: EXTRN __imp_EnumDisplaySettingsA:PROC + Line 253: EXTRN __imp_AllocConsole:PROC + Line 254: EXTRN __imp_SetConsoleMode:PROC + Line 255: EXTRN __imp_ReadConsoleA:PROC + Line 256: EXTRN __imp_FlushConsoleInputBuffer:PROC + Line 257: EXTRN __imp_timeGetDevCaps:PROC + Line 258: EXTRN __imp_timeBeginPeriod:PROC + Line 259: EXTRN exit:PROC + Line 260: EXTRN __p___argc:PROC + Line 261: EXTRN __p___argv:PROC + Line 262: EXTRN __imp_CoUninitialize:PROC + Line 263: EXTRN __imp_CoInitialize:PROC + Line 264: EXTRN __imp_InitCommonControls:PROC + Line 265: EXTRN _set_new_handler:PROC + Line 266: EXTRN ?I_ShutdownGraphics@@YAXXZ:PROC ; I_ShutdownGraphics + Line 267: EXTRN ?LockBuffer@FString@@QEAAPEADXZ:PROC ; FString::LockBuffer + Line 268: EXTRN ?UnlockBuffer@FString@@QEAAXXZ:PROC ; FString::UnlockBuffer + Line 269: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 270: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 271: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 272: EXTRN mysnprintf:PROC + Line 273: EXTRN ?I_DetectOS@@YAXXZ:PROC ; I_DetectOS + Line 274: EXTRN ?I_Quit@@YAXXZ:PROC ; I_Quit + Line 275: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 276: EXTRN ??0FArgs@@QEAA@HPEAPEAD@Z:PROC ; FArgs::FArgs + Line 277: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 278: EXTRN ?D_DoomMain@@YAXXZ:PROC ; D_DoomMain + Line 279: EXTRN ?Load@FModule@@QEAA_NV?$initializer_list@PEBD@std@@@Z:PROC ; FModule::Load + Line 280: EXTRN ?Unload@FModule@@QEAAXXZ:PROC ; FModule::Unload + Line 281: EXTRN ?C_InitConsole@@YAXHH_N@Z:PROC ; C_InitConsole + Line 282: EXTRN ?GetGitHash@@YAPEBDXZ:PROC ; GetGitHash + Line 283: EXTRN ?GetGitTime@@YAPEBDXZ:PROC ; GetGitTime + Line 284: EXTRN ?GetVersionString@@YAPEBDXZ:PROC ; GetVersionString + Line 285: EXTRN ?I_InitInput@@YA_NPEAX@Z:PROC ; I_InitInput + Line 286: EXTRN ?I_ShutdownInput@@YAXXZ:PROC ; I_ShutdownInput + Line 287: EXTRN ?GetWadName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetWadName + Line 288: EXTRN ?FixPathSeperator@@YAXPEAD@Z:PROC ; FixPathSeperator + Line 289: EXTRN ?S_StopMusic@@YAX_N@Z:PROC ; S_StopMusic + Line 290: EXTRN ?WndProc@@YA_JPEAUHWND__@@I_K_J@Z:PROC ; WndProc + Line 291: EXTRN ?CreateCrashLog@@YAXPEADKPEAUHWND__@@@Z:PROC ; CreateCrashLog + Line 292: EXTRN ?DisplayCrashLog@@YAXXZ:PROC ; DisplayCrashLog + Line 293: EXTRN ?ST_Util_BitsForBitmap@@YAPEAEPEAUtagBITMAPINFO@@@Z:PROC ; ST_Util_BitsForBitmap + Line 294: EXTRN ?I_FlushBufferedConsoleStuff@@YAXXZ:PROC ; I_FlushBufferedConsoleStuff + Line 295: EXTRN __CxxFrameHandler3:PROC + Line 296: EXTRN memset:PROC + Line 297: EXTRN strcmp:PROC + Line 298: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 299: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + Line 300: EXTRN ?DoomStartupInfo@@3UFStartupInfo@@A:BYTE ; DoomStartupInfo + Line 301: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 302: EXTRN ?progdir@@3VFString@@A:QWORD ; progdir + Line 303: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 304: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 305: EXTRN ?viewactive@@3_NA:BYTE ; viewactive + Line 306: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 307: EXTRN ?stacktrace@CVMAbortException@@2VFString@@A:QWORD ; CVMAbortException::stacktrace + Line 308: EXTRN ?StartScreen@@3PEAVFStartupScreen@@EA:QWORD ; StartScreen + Line 309: EXTRN ?CrashPointers@@3U_EXCEPTION_POINTERS@@A:BYTE ; CrashPointers + Line 310: EXTRN ?StartupBitmap@@3PEAUtagBITMAPINFO@@EA:QWORD ; StartupBitmap + Line 311: EXTRN ?TimerPeriod@@3IA:DWORD ; TimerPeriod + Line 312: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_module.cod (4 hits) + Line 12: EXTRN __imp_FreeLibrary:PROC + Line 13: EXTRN __imp_GetModuleHandleA:PROC + Line 14: EXTRN __imp_GetProcAddress:PROC + Line 15: EXTRN __imp_LoadLibraryA:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_mouse.cod (45 hits) + Line 93: EXTRN _purecall:PROC + Line 94: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 95: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 96: EXTRN atexit:PROC + Line 97: EXTRN __std_terminate:PROC + Line 98: EXTRN __imp_GetKeyState:PROC + Line 99: EXTRN __imp_GetForegroundWindow:PROC + Line 100: EXTRN __imp_GetClientRect:PROC + Line 101: EXTRN __imp_GetWindowRect:PROC + Line 102: EXTRN __imp_SetCursorPos:PROC + Line 103: EXTRN __imp_SetCursor:PROC + Line 104: EXTRN __imp_GetCursorPos:PROC + Line 105: EXTRN __imp_ClientToScreen:PROC + Line 106: EXTRN __imp_ClipCursor:PROC + Line 107: EXTRN __imp_GetClassLongPtrA:PROC + Line 108: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 109: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 110: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 111: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 112: EXTRN ??1FInputDevice@@UEAA@XZ:PROC ; FInputDevice::~FInputDevice + Line 113: EXTRN ?ProcessInput@FInputDevice@@UEAAXXZ:PROC ; FInputDevice::ProcessInput + Line 114: EXTRN ?ProcessRawInput@FInputDevice@@UEAA_NPEAUtagRAWINPUT@@H@Z:PROC ; FInputDevice::ProcessRawInput + Line 115: EXTRN ?WndProcHook@FInputDevice@@UEAA_NPEAUHWND__@@I_K_JPEA_J@Z:PROC ; FInputDevice::WndProcHook + Line 116: EXTRN ??_EFMouse@@UEAAPEAXI@Z:PROC ; FMouse::`vector deleting destructor' + Line 117: EXTRN ?D_PostEvent@@YAXPEBUevent_t@@@Z:PROC ; D_PostEvent + Line 118: EXTRN ?E_CheckRequireMouse@@YA_NXZ:PROC ; E_CheckRequireMouse + Line 119: EXTRN ??_EFRawMouse@@UEAAPEAXI@Z:PROC ; FRawMouse::`vector deleting destructor' + Line 120: EXTRN ??_EFDInputMouse@@UEAAPEAXI@Z:PROC ; FDInputMouse::`vector deleting destructor' + Line 121: EXTRN ??_EFWin32Mouse@@UEAAPEAXI@Z:PROC ; FWin32Mouse::`vector deleting destructor' + Line 122: EXTRN __CxxFrameHandler3:PROC + Line 123: EXTRN GUID_SysMouse:BYTE + Line 124: EXTRN c_dfDIMouse:BYTE + Line 125: EXTRN c_dfDIMouse2:BYTE + Line 126: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 127: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 128: EXTRN ?MyRegisterRawInputDevices@@3P6AHPEBUtagRAWINPUTDEVICE@@II@ZEA:QWORD ; MyRegisterRawInputDevices + Line 129: EXTRN ?menuactive@@3W4EMenuState@@A:DWORD ; menuactive + Line 130: EXTRN ?paused@@3HA:DWORD ; paused + Line 131: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 132: EXTRN ?m_use_mouse@@3VFIntCVar@@A:BYTE ; m_use_mouse + Line 133: EXTRN ?Window@@3PEAUHWND__@@EA:QWORD ; Window + Line 134: EXTRN ?g_pdi@@3PEAUIDirectInput8A@@EA:QWORD ; g_pdi + Line 135: EXTRN ?g_pdi3@@3PEAUIDirectInputA@@EA:QWORD ; g_pdi3 + Line 136: EXTRN ?GUICapture@@3_NA:BYTE ; GUICapture + Line 137: EXTRN ?BlockMouseMove@@3HA:DWORD ; BlockMouseMove + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_music.cod (75 hits) + Line 39: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 40: EXTRN ?IsAlias@FConsoleCommand@@UEAA_NXZ:PROC ; FConsoleCommand::IsAlias + Line 41: EXTRN ?Run@FUnsafeConsoleCommand@@UEAAXAEAVFCommandLine@@PEAVAActor@@H@Z:PROC ; FUnsafeConsoleCommand::Run + Line 42: EXTRN ??_EFUnsafeConsoleCommand@@UEAAPEAXI@Z:PROC ; FUnsafeConsoleCommand::`vector deleting destructor' + Line 43: EXTRN ?snd_mididevice@@3VFIntCVar@@A:BYTE ; snd_mididevice + Line 44: EXTRN ??_EStat_music@@UEAAPEAXI@Z:PROC ; Stat_music::`vector deleting destructor' + Line 45: EXTRN ?mus_playing@@3UMusPlayingInfo@@A:BYTE ; mus_playing + Line 46: EXTRN ?GSnd@@3PEAVSoundRenderer@@EA:QWORD ; GSnd + Line 212: EXTRN _purecall:PROC + Line 213: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 214: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 215: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 216: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 217: EXTRN atexit:PROC + Line 218: EXTRN __std_terminate:PROC + Line 219: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 220: EXTRN strtod:PROC + Line 221: EXTRN strtol:PROC + Line 222: EXTRN stricmp:PROC + Line 223: EXTRN inflate:PROC + Line 224: EXTRN inflateEnd:PROC + Line 225: EXTRN inflateInit2_:PROC + Line 226: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 227: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 228: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 229: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 230: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 231: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 232: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 233: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 234: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 235: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 236: EXTRN ??_EMusInfo@@UEAAPEAXI@Z:PROC ; MusInfo::`vector deleting destructor' + Line 237: EXTRN ?S_ChangeMusic@@YA_NPEBDH_N1@Z:PROC ; S_ChangeMusic + Line 238: EXTRN ?S_RestartMusic@@YAXXZ:PROC ; S_RestartMusic + Line 239: EXTRN ?S_StopMusic@@YAX_N@Z:PROC ; S_StopMusic + Line 240: EXTRN ?OpenMemoryArray@FileReader@@QEAA_NV?$function@$$A6A_NAEAV?$TArray@EE@@@Z@std@@@Z:PROC ; FileReader::OpenMemoryArray + Line 241: EXTRN ?Open@FileWriter@@SAPEAV1@PEBD@Z:PROC ; FileWriter::Open + Line 242: EXTRN ?WildMidi_Shutdown@@YAHXZ:PROC ; WildMidi_Shutdown + Line 243: EXTRN ?CreateSMF@MIDISource@@QEAAXAEAV?$TArray@EE@@H@Z:PROC ; MIDISource::CreateSMF + Line 244: EXTRN ??0MUSSong2@@QEAA@AEAVFileReader@@@Z:PROC ; MUSSong2::MUSSong2 + Line 245: EXTRN ??0MIDISong2@@QEAA@AEAVFileReader@@@Z:PROC ; MIDISong2::MIDISong2 + Line 246: EXTRN ??0HMISong@@QEAA@AEAVFileReader@@@Z:PROC ; HMISong::HMISong + Line 247: EXTRN ??0XMISong@@QEAA@AEAVFileReader@@@Z:PROC ; XMISong::XMISong + Line 248: EXTRN ?I_InitMusicWin32@@YAXXZ:PROC ; I_InitMusicWin32 + Line 249: EXTRN ?TimidityPP_Shutdown@@YAXXZ:PROC ; TimidityPP_Shutdown + Line 250: EXTRN ??0MIDIStreamer@@QEAA@W4EMidiDevice@@PEBD@Z:PROC ; MIDIStreamer::MIDIStreamer + Line 251: EXTRN ?SetMIDISource@MIDIStreamer@@QEAAXPEAVMIDISource@@@Z:PROC ; MIDIStreamer::SetMIDISource + Line 252: EXTRN ?DumpWave@MIDIStreamer@@QEAA_NPEBDHH@Z:PROC ; MIDIStreamer::DumpWave + Line 253: EXTRN ?DumpOPL@MIDIStreamer@@QEAA_NPEBDH@Z:PROC ; MIDIStreamer::DumpOPL + Line 254: EXTRN ??0OPLMUSSong@@QEAA@AEAVFileReader@@PEBD@Z:PROC ; OPLMUSSong::OPLMUSSong + Line 255: EXTRN ??0CDSong@@QEAA@HH@Z:PROC ; CDSong::CDSong + Line 256: EXTRN ??0CDDAFile@@QEAA@AEAVFileReader@@@Z:PROC ; CDDAFile::CDDAFile + Line 257: EXTRN ?MOD_OpenSong@@YAPEAVMusInfo@@AEAVFileReader@@@Z:PROC ; MOD_OpenSong + Line 258: EXTRN ?GME_CheckFormat@@YAPEBDI@Z:PROC ; GME_CheckFormat + Line 259: EXTRN ?GME_OpenSong@@YAPEAVMusInfo@@AEAVFileReader@@PEBD@Z:PROC ; GME_OpenSong + Line 260: EXTRN ?SndFile_OpenSong@@YAPEAVMusInfo@@AEAVFileReader@@@Z:PROC ; SndFile_OpenSong + Line 261: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 262: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 263: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 264: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 265: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 266: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 267: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 268: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 269: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 270: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 271: EXTRN ?FreeAll@Timidity@@YAXXZ:PROC ; Timidity::FreeAll + Line 272: EXTRN ?MUSHeaderSearch@@YAHPEBEH@Z:PROC ; MUSHeaderSearch + Line 273: EXTRN ?I_InitSoundFonts@@YAXXZ:PROC ; I_InitSoundFonts + Line 274: EXTRN dumb_exit:PROC + Line 275: EXTRN __CxxFrameHandler3:PROC + Line 276: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 277: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 278: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_net.cod (47 hits) + Line 116: EXTRN exit:PROC + Line 117: EXTRN atoi:PROC + Line 118: EXTRN strchr:PROC + Line 119: EXTRN compress2:PROC + Line 120: EXTRN uncompress:PROC + Line 121: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 122: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 123: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 124: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 125: EXTRN bind:PROC + Line 126: EXTRN closesocket:PROC + Line 127: EXTRN ioctlsocket:PROC + Line 128: EXTRN htons:PROC + Line 129: EXTRN inet_addr:PROC + Line 130: EXTRN inet_ntoa:PROC + Line 131: EXTRN ntohl:PROC + Line 132: EXTRN recvfrom:PROC + Line 133: EXTRN sendto:PROC + Line 134: EXTRN socket:PROC + Line 135: EXTRN gethostbyname:PROC + Line 136: EXTRN WSAStartup:PROC + Line 137: EXTRN WSACleanup:PROC + Line 138: EXTRN WSAGetLastError:PROC + Line 139: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 140: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 141: EXTRN mysnprintf:PROC + Line 142: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 143: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 144: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 145: EXTRN ?popterm@@YAXXZ:PROC ; popterm + Line 146: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 147: EXTRN ?CheckValue@FArgs@@QEBAPEBDPEBD@Z:PROC ; FArgs::CheckValue + Line 148: EXTRN ?GetArg@FArgs@@QEBAPEBDH@Z:PROC ; FArgs::GetArg + Line 149: EXTRN ?NumArgs@FArgs@@QEBAHXZ:PROC ; FArgs::NumArgs + Line 150: EXTRN ?M_ZLibError@@YA?AVFString@@H@Z:PROC ; M_ZLibError + Line 151: EXTRN __CxxFrameHandler3:PROC + Line 152: EXTRN memcpy:PROC + Line 153: EXTRN memset:PROC + Line 154: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 155: EXTRN ?doomcom@@3Udoomcom_t@@A:BYTE ; doomcom + Line 156: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 157: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 158: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 159: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 160: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 161: EXTRN ?StartScreen@@3PEAVFStartupScreen@@EA:QWORD ; StartScreen + Line 162: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_rawps2.cod (49 hits) + Line 195: EXTRN _purecall:PROC + Line 196: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 197: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 198: EXTRN atexit:PROC + Line 199: EXTRN __std_terminate:PROC + Line 200: EXTRN strchr:PROC + Line 201: EXTRN strrchr:PROC + Line 202: EXTRN strstr:PROC + Line 203: EXTRN free:PROC + Line 204: EXTRN malloc:PROC + Line 205: EXTRN qsort:PROC + Line 206: EXTRN strtoul:PROC + Line 207: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 208: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 209: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 210: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 211: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 212: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 213: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 214: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 215: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 216: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 217: EXTRN ??1IJoystickConfig@@UEAA@XZ:PROC ; IJoystickConfig::~IJoystickConfig + Line 218: EXTRN ?M_LoadJoystickConfig@@YA_NPEAUIJoystickConfig@@@Z:PROC ; M_LoadJoystickConfig + Line 219: EXTRN ?M_SaveJoystickConfig@@YAXPEAUIJoystickConfig@@@Z:PROC ; M_SaveJoystickConfig + Line 220: EXTRN ?Joy_GenerateButtonEvents@@YAXHHHH@Z:PROC ; Joy_GenerateButtonEvents + Line 221: EXTRN ?Joy_GenerateButtonEvents@@YAXHHHPEBH@Z:PROC ; Joy_GenerateButtonEvents + Line 222: EXTRN ?Joy_XYAxesToButtons@@YAHNN@Z:PROC ; Joy_XYAxesToButtons + Line 223: EXTRN ?Joy_RemoveDeadZone@@YANNNPEAE@Z:PROC ; Joy_RemoveDeadZone + Line 224: EXTRN ?UpdateJoystickMenu@@YAXPEAUIJoystickConfig@@@Z:PROC ; UpdateJoystickMenu + Line 225: EXTRN ??1FInputDevice@@UEAA@XZ:PROC ; FInputDevice::~FInputDevice + Line 226: EXTRN ?ProcessInput@FInputDevice@@UEAAXXZ:PROC ; FInputDevice::ProcessInput + Line 227: EXTRN ?ProcessRawInput@FInputDevice@@UEAA_NPEAUtagRAWINPUT@@H@Z:PROC ; FInputDevice::ProcessRawInput + Line 228: EXTRN ?WndProcHook@FInputDevice@@UEAA_NPEAUHWND__@@I_K_JPEA_J@Z:PROC ; FInputDevice::WndProcHook + Line 229: EXTRN ?D_PostEvent@@YAXPEBUevent_t@@@Z:PROC ; D_PostEvent + Line 230: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 231: EXTRN ??_EFRawPS2Controller@@UEAAPEAXI@Z:PROC ; FRawPS2Controller::`vector deleting destructor' + Line 232: EXTRN ??_EFRawPS2Manager@@UEAAPEAXI@Z:PROC ; FRawPS2Manager::`vector deleting destructor' + Line 233: EXTRN __CxxFrameHandler3:PROC + Line 234: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 235: EXTRN ?use_joystick@@3VFBoolCVar@@A:BYTE ; use_joystick + Line 236: EXTRN ?JoyDevices@@3PAPEAVFJoystickCollection@@A:BYTE ; JoyDevices + Line 237: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 238: EXTRN ?MyGetRawInputDeviceInfoA@@3P6AIPEAXI0PEAI@ZEA:QWORD ; MyGetRawInputDeviceInfoA + Line 239: EXTRN ?MyGetRawInputDeviceList@@3P6AIPEAUtagRAWINPUTDEVICELIST@@PEAII@ZEA:QWORD ; MyGetRawInputDeviceList + Line 240: EXTRN ?MyRegisterRawInputDevices@@3P6AHPEBUtagRAWINPUTDEVICE@@II@ZEA:QWORD ; MyRegisterRawInputDevices + Line 241: EXTRN ?Window@@3PEAUHWND__@@EA:QWORD ; Window + Line 242: EXTRN __ImageBase:BYTE + Line 243: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_sound.cod (66 hits) + Line 25: EXTRN ??_EStat_sound@@UEAAPEAXI@Z:PROC ; Stat_sound::`vector deleting destructor' + Line 182: EXTRN _purecall:PROC + Line 183: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 184: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 185: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 186: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 187: EXTRN atexit:PROC + Line 188: EXTRN calloc:PROC + Line 189: EXTRN strncmp:PROC + Line 190: EXTRN stricmp:PROC + Line 191: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 192: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 193: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 194: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 195: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 196: EXTRN ??_ESoundDecoder@@UEAAPEAXI@Z:PROC ; SoundDecoder::`vector deleting destructor' + Line 197: EXTRN ??_ESoundStream@@UEAAPEAXI@Z:PROC ; SoundStream::`vector deleting destructor' + Line 198: EXTRN ??_ESoundRenderer@@UEAAPEAXI@Z:PROC ; SoundRenderer::`vector deleting destructor' + Line 199: EXTRN ?IsOpenALPresent@@YA_NXZ:PROC ; IsOpenALPresent + Line 200: EXTRN ?S_EvictAllChannels@@YAXXZ:PROC ; S_EvictAllChannels + Line 201: EXTRN ?S_StopAllChannels@@YAXXZ:PROC ; S_StopAllChannels + Line 202: EXTRN ?S_RestartMusic@@YAXXZ:PROC ; S_RestartMusic + Line 203: EXTRN ?S_RestoreEvictedChannels@@YAXXZ:PROC ; S_RestoreEvictedChannels + Line 204: EXTRN ?S_UnloadSound@@YAXPEAUsfxinfo_t@@@Z:PROC ; S_UnloadSound + Line 205: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 206: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 207: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 208: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 209: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 210: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 211: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 212: EXTRN ?OpenMemory@FileReader@@QEAA_NPEBX_J@Z:PROC ; FileReader::OpenMemory + Line 213: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 214: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 215: EXTRN ??0OpenALSoundRenderer@@QEAA@XZ:PROC ; OpenALSoundRenderer::OpenALSoundRenderer + Line 216: EXTRN ?getInfo@MPG123Decoder@@UEAAXPEAHPEAW4ChannelConfig@@PEAW4SampleType@@@Z:PROC ; MPG123Decoder::getInfo + Line 217: EXTRN ?read@MPG123Decoder@@UEAA_KPEAD_K@Z:PROC ; MPG123Decoder::read + Line 218: EXTRN ?seek@MPG123Decoder@@UEAA_N_K_N1@Z:PROC ; MPG123Decoder::seek + Line 219: EXTRN ?getSampleOffset@MPG123Decoder@@UEAA_KXZ:PROC ; MPG123Decoder::getSampleOffset + Line 220: EXTRN ?getSampleLength@MPG123Decoder@@UEAA_KXZ:PROC ; MPG123Decoder::getSampleLength + Line 221: EXTRN ??1MPG123Decoder@@UEAA@XZ:PROC ; MPG123Decoder::~MPG123Decoder + Line 222: EXTRN ?open@MPG123Decoder@@MEAA_NAEAVFileReader@@@Z:PROC ; MPG123Decoder::open + Line 223: EXTRN ??_EMPG123Decoder@@UEAAPEAXI@Z:PROC ; MPG123Decoder::`vector deleting destructor' + Line 224: EXTRN ?getInfo@SndFileDecoder@@UEAAXPEAHPEAW4ChannelConfig@@PEAW4SampleType@@@Z:PROC ; SndFileDecoder::getInfo + Line 225: EXTRN ?read@SndFileDecoder@@UEAA_KPEAD_K@Z:PROC ; SndFileDecoder::read + Line 226: EXTRN ?readAll@SndFileDecoder@@UEAA?AV?$TArray@EE@@XZ:PROC ; SndFileDecoder::readAll + Line 227: EXTRN ?seek@SndFileDecoder@@UEAA_N_K_N1@Z:PROC ; SndFileDecoder::seek + Line 228: EXTRN ?getSampleOffset@SndFileDecoder@@UEAA_KXZ:PROC ; SndFileDecoder::getSampleOffset + Line 229: EXTRN ?getSampleLength@SndFileDecoder@@UEAA_KXZ:PROC ; SndFileDecoder::getSampleLength + Line 230: EXTRN ??1SndFileDecoder@@UEAA@XZ:PROC ; SndFileDecoder::~SndFileDecoder + Line 231: EXTRN ?open@SndFileDecoder@@MEAA_NAEAVFileReader@@@Z:PROC ; SndFileDecoder::open + Line 232: EXTRN ??_ESndFileDecoder@@UEAAPEAXI@Z:PROC ; SndFileDecoder::`vector deleting destructor' + Line 233: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 234: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 235: EXTRN ?I_InitMusic@@YAXXZ:PROC ; I_InitMusic + Line 236: EXTRN ?I_ShutdownMusic@@YAX_N@Z:PROC ; I_ShutdownMusic + Line 237: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 238: EXTRN ??_ENullSoundRenderer@@UEAAPEAXI@Z:PROC ; NullSoundRenderer::`vector deleting destructor' + Line 239: EXTRN __CxxFrameHandler3:PROC + Line 240: EXTRN memcpy:PROC + Line 241: EXTRN memset:PROC + Line 242: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + Line 243: EXTRN ?S_sfx@@3V?$TArray@Usfxinfo_t@@U1@@@A:BYTE ; S_sfx + Line 244: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 245: EXTRN __ImageBase:BYTE + Line 246: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_soundfont.cod (46 hits) + Line 69: EXTRN _purecall:PROC + Line 70: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 71: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 72: EXTRN atexit:PROC + Line 73: EXTRN stricmp:PROC + Line 74: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 75: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 76: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 77: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 78: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 79: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 80: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 81: EXTRN ??HFString@@QEBA?AV0@PEBD@Z:PROC ; FString::operator+ + Line 82: EXTRN ??HFString@@QEBA?AV0@D@Z:PROC ; FString::operator+ + Line 83: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 84: EXTRN ?ReplaceChars@FString@@QEAAXDD@Z:PROC ; FString::ReplaceChars + Line 85: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 86: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 87: EXTRN ??0FStringf@@QEAA@PEBDZZ:PROC ; FStringf::FStringf + Line 88: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 89: EXTRN ?OpenMemory@FileReader@@QEAA_NPEBX_J@Z:PROC ; FileReader::OpenMemory + Line 90: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 91: EXTRN ?ReopenLumpReader@FWadCollection@@QEAA?AVFileReader@@H_N@Z:PROC ; FWadCollection::ReopenLumpReader + Line 92: EXTRN ??_EFSoundFontReader@@UEAAPEAXI@Z:PROC ; FSoundFontReader::`vector deleting destructor' + Line 93: EXTRN ??_EFSF2Reader@@UEAAPEAXI@Z:PROC ; FSF2Reader::`vector deleting destructor' + Line 94: EXTRN ??_EFZipPatReader@@UEAAPEAXI@Z:PROC ; FZipPatReader::`vector deleting destructor' + Line 95: EXTRN ??_EFLumpPatchSetReader@@UEAAPEAXI@Z:PROC ; FLumpPatchSetReader::`vector deleting destructor' + Line 96: EXTRN ??_EFPatchSetReader@@UEAAPEAXI@Z:PROC ; FPatchSetReader::`vector deleting destructor' + Line 97: EXTRN ?FileExists@@YA_NPEBD@Z:PROC ; FileExists + Line 98: EXTRN ?ExtractFilePath@@YA?AVFString@@PEBD@Z:PROC ; ExtractFilePath + Line 99: EXTRN ?ExtractFileBase@@YA?AVFString@@PEBD_N@Z:PROC ; ExtractFileBase + Line 100: EXTRN ?NicePath@@YA?AVFString@@PEBD@Z:PROC ; NicePath + Line 101: EXTRN ?IsAbsPath@@YA_NPEBD@Z:PROC ; IsAbsPath + Line 102: EXTRN ?I_FindFirst@@YAPEAXPEBDPEAUfindstate_t@@@Z:PROC ; I_FindFirst + Line 103: EXTRN ?I_FindNext@@YAHPEAXPEAUfindstate_t@@@Z:PROC ; I_FindNext + Line 104: EXTRN ?I_FindClose@@YAHPEAX@Z:PROC ; I_FindClose + Line 105: EXTRN ?SetSection@FConfigFile@@QEAA_NPEBD_N@Z:PROC ; FConfigFile::SetSection + Line 106: EXTRN ?NextInSection@FConfigFile@@QEAA_NAEAPEBD0@Z:PROC ; FConfigFile::NextInSection + Line 107: EXTRN ?OpenResourceFile@FResourceFile@@SAPEAV1@PEBD_N1@Z:PROC ; FResourceFile::OpenResourceFile + Line 108: EXTRN ?FindLump@FResourceFile@@QEAAPEAUFResourceLump@@PEBD@Z:PROC ; FResourceFile::FindLump + Line 109: EXTRN __CxxFrameHandler3:PROC + Line 110: EXTRN memmove:PROC + Line 111: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 112: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 113: EXTRN ?progdir@@3VFString@@A:QWORD ; progdir + Line 114: EXTRN ?GameConfig@@3PEAVFGameConfigFile@@EA:QWORD ; GameConfig + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_specialpaths.cod (29 hits) + Line 49: EXTRN __imp_CreateFileA:PROC + Line 50: EXTRN __imp_CloseHandle:PROC + Line 51: EXTRN __imp_GetUserNameA:PROC + Line 52: EXTRN __imp_WideCharToMultiByte:PROC + Line 53: EXTRN __imp_GetACP:PROC + Line 54: EXTRN __imp_CoTaskMemFree:PROC + Line 55: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 56: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 57: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 58: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 59: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 60: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 61: EXTRN ?Substitute@FString@@QEAAXPEBD0@Z:PROC ; FString::Substitute + Line 62: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 63: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 64: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 65: EXTRN ?FileExists@@YA_NPEBD@Z:PROC ; FileExists + Line 66: EXTRN ?CreatePath@@YAXPEBD@Z:PROC ; CreatePath + Line 67: EXTRN __CxxFrameHandler3:PROC + Line 68: EXTRN FOLDERID_Documents:BYTE + Line 69: EXTRN FOLDERID_RoamingAppData:BYTE + Line 70: EXTRN FOLDERID_LocalAppData:BYTE + Line 71: EXTRN FOLDERID_Pictures:BYTE + Line 72: EXTRN FOLDERID_SavedGames:BYTE + Line 73: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 74: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + Line 75: EXTRN ?progdir@@3VFString@@A:QWORD ; progdir + Line 76: EXTRN ?SHGetFolderPathA@OptWin32@@3V?$TOptProc@$1?Shell32Module@@3VFModule@@AP6AJPEAUHWND__@@HPEAXKPEAD@Z@@A:BYTE ; OptWin32::SHGetFolderPathA + Line 77: EXTRN ?SHGetKnownFolderPath@OptWin32@@3V?$TOptProc@$1?Shell32Module@@3VFModule@@AP6AJAEBU_GUID@@KPEAXPEAPEA_W@Z@@A:BYTE ; OptWin32::SHGetKnownFolderPath + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_system.cod (149 hits) + Line 190: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 191: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 192: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 193: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 194: EXTRN atexit:PROC + Line 195: EXTRN __std_terminate:PROC + Line 196: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 197: EXTRN exit:PROC + Line 198: EXTRN strtoul:PROC + Line 199: EXTRN fflush:PROC + Line 200: EXTRN __stdio_common_vfprintf:PROC + Line 201: EXTRN __stdio_common_vsprintf:PROC + Line 202: EXTRN strrchr:PROC + Line 203: EXTRN strncpy:PROC + Line 204: EXTRN stricmp:PROC + Line 205: EXTRN _time64:PROC + Line 206: EXTRN __std_exception_copy:PROC + Line 207: EXTRN __std_exception_destroy:PROC + Line 208: EXTRN ??_Eexception@std@@UEAAPEAXI@Z:PROC ; std::exception::`vector deleting destructor' + Line 209: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 210: EXTRN tolower:PROC + Line 211: EXTRN __imp_FindClose:PROC + Line 212: EXTRN __imp_FindFirstFileA:PROC + Line 213: EXTRN __imp_FindNextFileA:PROC + Line 214: EXTRN __imp_WriteFile:PROC + Line 215: EXTRN __imp_OutputDebugStringA:PROC + Line 216: EXTRN __imp_GetLastError:PROC + Line 217: EXTRN __imp_QueryPerformanceCounter:PROC + Line 218: EXTRN __imp_QueryPerformanceFrequency:PROC + Line 219: EXTRN __imp_GetCurrentProcess:PROC + Line 220: EXTRN __imp_GetCurrentThread:PROC + Line 221: EXTRN __imp_SetThreadPriority:PROC + Line 222: EXTRN __imp_SetPriorityClass:PROC + Line 223: EXTRN __imp_GetVersionExA:PROC + Line 224: EXTRN __imp_GetModuleHandleA:PROC + Line 225: EXTRN __imp_GetProcAddress:PROC + Line 226: EXTRN __imp_LocalFree:PROC + Line 227: EXTRN __imp_GetProcessAffinityMask:PROC + Line 228: EXTRN __imp_SetThreadAffinityMask:PROC + Line 229: EXTRN __imp_FormatMessageA:PROC + Line 230: EXTRN __imp_GetNumaProcessorNode:PROC + Line 231: EXTRN __imp_CreateBitmap:PROC + Line 232: EXTRN __imp_CreateCompatibleBitmap:PROC + Line 233: EXTRN __imp_CreateCompatibleDC:PROC + Line 234: EXTRN __imp_DeleteDC:PROC + Line 235: EXTRN __imp_DeleteObject:PROC + Line 236: EXTRN __imp_GetDeviceCaps:PROC + Line 237: EXTRN __imp_GetStockObject:PROC + Line 238: EXTRN __imp_Rectangle:PROC + Line 239: EXTRN __imp_SelectObject:PROC + Line 240: EXTRN __imp_SetPixelV:PROC + Line 241: EXTRN __imp_CreateDIBSection:PROC + Line 242: EXTRN __imp_SendMessageA:PROC + Line 243: EXTRN __imp_SendMessageW:PROC + Line 244: EXTRN __imp_DialogBoxParamA:PROC + Line 245: EXTRN __imp_EndDialog:PROC + Line 246: EXTRN __imp_GetDlgItem:PROC + Line 247: EXTRN __imp_SetDlgItemTextA:PROC + Line 248: EXTRN __imp_SendDlgItemMessageA:PROC + Line 249: EXTRN __imp_SetFocus:PROC + Line 250: EXTRN __imp_GetAsyncKeyState:PROC + Line 251: EXTRN __imp_SetForegroundWindow:PROC + Line 252: EXTRN __imp_GetDC:PROC + Line 253: EXTRN __imp_ReleaseDC:PROC + Line 254: EXTRN __imp_SetWindowTextA:PROC + Line 255: EXTRN __imp_GetWindowTextA:PROC + Line 256: EXTRN __imp_GetWindowTextLengthA:PROC + Line 257: EXTRN __imp_GetClientRect:PROC + Line 258: EXTRN __imp_MessageBoxA:PROC + Line 259: EXTRN __imp_SetCursor:PROC + Line 260: EXTRN __imp_GetCursorPos:PROC + Line 261: EXTRN __imp_ClientToScreen:PROC + Line 262: EXTRN __imp_SetClassLongPtrA:PROC + Line 263: EXTRN __imp_LoadCursorA:PROC + Line 264: EXTRN __imp_DestroyCursor:PROC + Line 265: EXTRN __imp_CreateIconIndirect:PROC + Line 266: EXTRN __imp_GetLocaleInfoA:PROC + Line 267: EXTRN __imp_SetConsoleTextAttribute:PROC + Line 268: EXTRN __imp_RegCloseKey:PROC + Line 269: EXTRN __imp_RegOpenKeyExA:PROC + Line 270: EXTRN __imp_RegQueryValueExA:PROC + Line 271: EXTRN __imp_timeEndPeriod:PROC + Line 272: EXTRN __imp_CryptAcquireContextA:PROC + Line 273: EXTRN __imp_CryptReleaseContext:PROC + Line 274: EXTRN __imp_CryptGenRandom:PROC + Line 275: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 276: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 277: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 278: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 279: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 280: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 281: EXTRN ?LockNewBuffer@FString@@QEAAPEAD_K@Z:PROC ; FString::LockNewBuffer + Line 282: EXTRN ?UnlockBuffer@FString@@QEAAXXZ:PROC ; FString::UnlockBuffer + Line 283: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 284: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 285: EXTRN ??HFString@@QEBA?AV0@PEBD@Z:PROC ; FString::operator+ + Line 286: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 287: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 288: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 289: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 290: EXTRN myvsnprintf:PROC + Line 291: EXTRN _Thrd_hardware_concurrency:PROC + Line 292: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 293: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 294: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 295: EXTRN ?C_DeinitConsole@@YAXXZ:PROC ; C_DeinitConsole + Line 296: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 297: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 298: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 299: EXTRN ?RGBtoHSV@@YAXMMMPEAM00@Z:PROC ; RGBtoHSV + Line 300: EXTRN ?HSVtoRGB@@YAXPEAM00MMM@Z:PROC ; HSVtoRGB + Line 301: EXTRN ?CheckCPUID@@YAXPEAUCPUInfo@@@Z:PROC ; CheckCPUID + Line 302: EXTRN ?DumpCPUInfo@@YAXPEBUCPUInfo@@@Z:PROC ; DumpCPUInfo + Line 303: EXTRN ??_ECDoomError@@UEAAPEAXI@Z:PROC ; CDoomError::`vector deleting destructor' + Line 304: EXTRN ??_ECRecoverableError@@UEAAPEAXI@Z:PROC ; CRecoverableError::`vector deleting destructor' + Line 305: EXTRN ??_ECFatalError@@UEAAPEAXI@Z:PROC ; CFatalError::`vector deleting destructor' + Line 306: EXTRN ?GetVersionString@@YAPEBDXZ:PROC ; GetVersionString + Line 307: EXTRN ?I_InitSound@@YAXXZ:PROC ; I_InitSound + Line 308: EXTRN ?I_ShutdownSound@@YAXXZ:PROC ; I_ShutdownSound + Line 309: EXTRN ?G_CheckDemoStatus@@YA_NXZ:PROC ; G_CheckDemoStatus + Line 310: EXTRN ?I_GetEvent@@YAXXZ:PROC ; I_GetEvent + Line 311: EXTRN ?V_LogColorFromColorRange@@YA?AUPalEntry@@W4EColorRange@@@Z:PROC ; V_LogColorFromColorRange + Line 312: EXTRN ?V_ParseFontColor@@YA?AW4EColorRange@@AEAPEBEHH@Z:PROC ; V_ParseFontColor + Line 313: EXTRN ?CopyPixelDataRGB@FBitmap@@QEAAXHHPEBEHHHHHHPEAUFCopyInfo@@HHH@Z:PROC ; FBitmap::CopyPixelDataRGB + Line 314: EXTRN _CxxThrowException:PROC + Line 315: EXTRN __CxxFrameHandler3:PROC + Line 316: EXTRN memset:PROC + Line 317: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 318: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 319: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + Line 320: EXTRN ?CPU@@3UCPUInfo@@A:BYTE ; CPU + Line 321: EXTRN ?fullscreen@@3VFBoolCVar@@A:BYTE ; fullscreen + Line 322: EXTRN ?GameConfig@@3PEAVFGameConfigFile@@EA:QWORD ; GameConfig + Line 323: EXTRN ?demorecording@@3_NA:BYTE ; demorecording + Line 324: EXTRN ?GetLongPathNameA@OptWin32@@3V?$TOptProc@$1?Kernel32Module@@3VFModule@@AP6AKPEBDPEADK@Z@@A:BYTE ; OptWin32::GetLongPathNameA + Line 325: EXTRN ?language@@3VFStringCVar@@A:BYTE ; language + Line 326: EXTRN ?queryiwad@@3VFBoolCVar@@A:BYTE ; queryiwad + Line 327: EXTRN ?disableautoload@@3VFBoolCVar@@A:BYTE ; disableautoload + Line 328: EXTRN ?autoloadlights@@3VFBoolCVar@@A:BYTE ; autoloadlights + Line 329: EXTRN ?autoloadbrightmaps@@3VFBoolCVar@@A:BYTE ; autoloadbrightmaps + Line 330: EXTRN ?Window@@3PEAUHWND__@@EA:QWORD ; Window + Line 331: EXTRN ?ConWindow@@3PEAUHWND__@@EA:QWORD ; ConWindow + Line 332: EXTRN ?StdOut@@3PEAXEA:QWORD ; StdOut + Line 333: EXTRN ?FancyStdOut@@3_NA:BYTE ; FancyStdOut + Line 334: EXTRN ?g_hInst@@3PEAUHINSTANCE__@@EA:QWORD ; g_hInst + Line 335: EXTRN ?Logfile@@3PEAU_iobuf@@EA:QWORD ; Logfile + Line 336: EXTRN ?NativeMouse@@3_NA:BYTE ; NativeMouse + Line 337: EXTRN ?ConWindowHidden@@3_NA:BYTE ; ConWindowHidden + Line 338: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_time.cod (11 hits) + Line 11: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 44: EXTRN atexit:PROC + Line 45: EXTRN _Xtime_get_ticks:PROC + Line 46: EXTRN _Query_perf_counter:PROC + Line 47: EXTRN _Query_perf_frequency:PROC + Line 48: EXTRN _Thrd_sleep:PROC + Line 49: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 50: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 51: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 52: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 53: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\i_xinput.cod (36 hits) + Line 120: EXTRN _purecall:PROC + Line 121: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 122: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 123: EXTRN atexit:PROC + Line 124: EXTRN __std_terminate:PROC + Line 125: EXTRN __imp_FreeLibrary:PROC + Line 126: EXTRN __imp_GetProcAddress:PROC + Line 127: EXTRN __imp_LoadLibraryA:PROC + Line 128: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 129: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 130: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 131: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 132: EXTRN mysnprintf:PROC + Line 133: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 134: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 135: EXTRN ??1IJoystickConfig@@UEAA@XZ:PROC ; IJoystickConfig::~IJoystickConfig + Line 136: EXTRN ?M_LoadJoystickConfig@@YA_NPEAUIJoystickConfig@@@Z:PROC ; M_LoadJoystickConfig + Line 137: EXTRN ?M_SaveJoystickConfig@@YAXPEAUIJoystickConfig@@@Z:PROC ; M_SaveJoystickConfig + Line 138: EXTRN ?Joy_GenerateButtonEvents@@YAXHHHH@Z:PROC ; Joy_GenerateButtonEvents + Line 139: EXTRN ?Joy_XYAxesToButtons@@YAHNN@Z:PROC ; Joy_XYAxesToButtons + Line 140: EXTRN ?Joy_RemoveDeadZone@@YANNNPEAE@Z:PROC ; Joy_RemoveDeadZone + Line 141: EXTRN ?UpdateJoystickMenu@@YAXPEAUIJoystickConfig@@@Z:PROC ; UpdateJoystickMenu + Line 142: EXTRN ??1FInputDevice@@UEAA@XZ:PROC ; FInputDevice::~FInputDevice + Line 143: EXTRN ?ProcessInput@FInputDevice@@UEAAXXZ:PROC ; FInputDevice::ProcessInput + Line 144: EXTRN ?ProcessRawInput@FInputDevice@@UEAA_NPEAUtagRAWINPUT@@H@Z:PROC ; FInputDevice::ProcessRawInput + Line 145: EXTRN ?WndProcHook@FInputDevice@@UEAA_NPEAUHWND__@@I_K_JPEA_J@Z:PROC ; FInputDevice::WndProcHook + Line 146: EXTRN ?D_PostEvent@@YAXPEBUevent_t@@@Z:PROC ; D_PostEvent + Line 147: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 148: EXTRN ??_EFXInputController@@UEAAPEAXI@Z:PROC ; FXInputController::`vector deleting destructor' + Line 149: EXTRN ??_EFXInputManager@@UEAAPEAXI@Z:PROC ; FXInputManager::`vector deleting destructor' + Line 150: EXTRN __CxxFrameHandler3:PROC + Line 151: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 152: EXTRN ?use_joystick@@3VFBoolCVar@@A:BYTE ; use_joystick + Line 153: EXTRN ?JoyDevices@@3PAPEAVFJoystickCollection@@A:BYTE ; JoyDevices + Line 154: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 155: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\image.cod (34 hits) + Line 38: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 39: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 40: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 41: EXTRN atexit:PROC + Line 42: EXTRN __std_terminate:PROC + Line 43: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 44: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 45: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 46: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 47: EXTRN ??0FMemArena@@QEAA@_K@Z:PROC ; FMemArena::FMemArena + Line 48: EXTRN ??1FMemArena@@QEAA@XZ:PROC ; FMemArena::~FMemArena + Line 49: EXTRN ?GetPalette@DFrameBuffer@@QEAAPEAUPalEntry@@XZ:PROC ; DFrameBuffer::GetPalette + Line 50: EXTRN ?CopyPixelData@FBitmap@@QEAAXHHPEBEHHHHHPEAUPalEntry@@PEAUFCopyInfo@@@Z:PROC ; FBitmap::CopyPixelData + Line 51: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 52: EXTRN ?GetLumpName@FWadCollection@@QEBAXAEAVFString@@H@Z:PROC ; FWadCollection::GetLumpName + Line 53: EXTRN ?IMGZImage_TryCreate@@YAPEAVFImageSource@@AEAVFileReader@@H@Z:PROC ; IMGZImage_TryCreate + Line 54: EXTRN ?PNGImage_TryCreate@@YAPEAVFImageSource@@AEAVFileReader@@H@Z:PROC ; PNGImage_TryCreate + Line 55: EXTRN ?JPEGImage_TryCreate@@YAPEAVFImageSource@@AEAVFileReader@@H@Z:PROC ; JPEGImage_TryCreate + Line 56: EXTRN ?DDSImage_TryCreate@@YAPEAVFImageSource@@AEAVFileReader@@H@Z:PROC ; DDSImage_TryCreate + Line 57: EXTRN ?PCXImage_TryCreate@@YAPEAVFImageSource@@AEAVFileReader@@H@Z:PROC ; PCXImage_TryCreate + Line 58: EXTRN ?TGAImage_TryCreate@@YAPEAVFImageSource@@AEAVFileReader@@H@Z:PROC ; TGAImage_TryCreate + Line 59: EXTRN ?RawPageImage_TryCreate@@YAPEAVFImageSource@@AEAVFileReader@@H@Z:PROC ; RawPageImage_TryCreate + Line 60: EXTRN ?FlatImage_TryCreate@@YAPEAVFImageSource@@AEAVFileReader@@H@Z:PROC ; FlatImage_TryCreate + Line 61: EXTRN ?PatchImage_TryCreate@@YAPEAVFImageSource@@AEAVFileReader@@H@Z:PROC ; PatchImage_TryCreate + Line 62: EXTRN ?EmptyImage_TryCreate@@YAPEAVFImageSource@@AEAVFileReader@@H@Z:PROC ; EmptyImage_TryCreate + Line 63: EXTRN ?AutomapImage_TryCreate@@YAPEAVFImageSource@@AEAVFileReader@@H@Z:PROC ; AutomapImage_TryCreate + Line 64: EXTRN __CxxFrameHandler3:PROC + Line 65: EXTRN memcpy:PROC + Line 66: EXTRN memmove:PROC + Line 67: EXTRN memset:PROC + Line 68: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 69: EXTRN ?vid_rendermode@@3VFIntCVar@@A:BYTE ; vid_rendermode + Line 70: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 71: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\imagetexture.cod (11 hits) + Line 18: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 19: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 20: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 21: EXTRN ?GetLumpName@FWadCollection@@QEBAXAEAVFString@@H@Z:PROC ; FWadCollection::GetLumpName + Line 22: EXTRN ??1FTexture@@UEAA@XZ:PROC ; FTexture::~FTexture + Line 23: EXTRN ??0FTexture@@IEAA@PEBDH@Z:PROC ; FTexture::FTexture + Line 24: EXTRN ?GetPalettedPixels@FImageSource@@QEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::GetPalettedPixels + Line 25: EXTRN ?GetCachedBitmap@FImageSource@@QEAA?AVFBitmap@@PEAUPalEntry@@HPEAH@Z:PROC ; FImageSource::GetCachedBitmap + Line 26: EXTRN ??_EFImageTexture@@UEAAPEAXI@Z:PROC ; FImageTexture::`vector deleting destructor' + Line 27: EXTRN __CxxFrameHandler3:PROC + Line 28: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\imgztexture.cod (20 hits) + Line 19: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 20: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 21: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 22: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 23: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 24: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 25: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 26: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 27: EXTRN ?CopyTranslatedPixels@FImageSource@@IEAAHPEAVFBitmap@@PEAUPalEntry@@@Z:PROC ; FImageSource::CopyTranslatedPixels + Line 28: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 29: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 30: EXTRN ?checkIMGZPalette@@YA_NAEAVFileReader@@@Z:PROC ; checkIMGZPalette + Line 31: EXTRN ??_EFIMGZTexture@@UEAAPEAXI@Z:PROC ; FIMGZTexture::`vector deleting destructor' + Line 32: EXTRN __CxxFrameHandler3:PROC + Line 33: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 34: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 35: EXTRN ?translationtables@@3PAV?$TAutoGrowArray@VFRemapTablePtr@@PEAUFRemapTable@@@@A:BYTE ; translationtables + Line 36: EXTRN ?GrayMap@ImageHelpers@@3PAEA:BYTE ; ImageHelpers::GrayMap + Line 37: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 38: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\info.cod (95 hits) + Line 161: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 162: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 163: EXTRN atexit:PROC + Line 164: EXTRN __std_terminate:PROC + Line 165: EXTRN atoi:PROC + Line 166: EXTRN toupper:PROC + Line 167: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 168: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 169: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 170: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 171: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 172: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 173: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 174: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 175: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 176: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 177: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 178: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 179: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 180: EXTRN ?AddField@PClass@@QEAAPEAVPField@@VFName@@PEAVPType@@I@Z:PROC ; PClass::AddField + Line 181: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 182: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 183: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 184: EXTRN ?StaticGetStateName@FState@@SA?AVFString@@PEBU1@@Z:PROC ; FState::StaticGetStateName + Line 185: EXTRN ?Destroy@FStateLabels@@QEAAXXZ:PROC ; FStateLabels::Destroy + Line 186: EXTRN ??1FCommandLine@@QEAA@XZ:PROC ; FCommandLine::~FCommandLine + Line 187: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 188: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 189: EXTRN ?CheckCheatmode@@YA_N_N@Z:PROC ; CheckCheatmode + Line 190: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 191: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 192: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 193: EXTRN ?Net_WriteWord@@YAXF@Z:PROC ; Net_WriteWord + Line 194: EXTRN ?Net_WriteLong@@YAXH@Z:PROC ; Net_WriteLong + Line 195: EXTRN ?Net_WriteString@@YAXPEBD@Z:PROC ; Net_WriteString + Line 196: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 197: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 198: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 199: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 200: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 201: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 202: EXTRN ?MustGetAnyToken@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetAnyToken + Line 203: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 204: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 205: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 206: EXTRN ?ParseOpenBrace@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseOpenBrace + Line 207: EXTRN ?SetReplacement@FSkillInfo@@QEAAXVFName@@0@Z:PROC ; FSkillInfo::SetReplacement + Line 208: EXTRN ?GetReplacement@FSkillInfo@@QEAA?AVFName@@V2@@Z:PROC ; FSkillInfo::GetReplacement + Line 209: EXTRN ?SetReplacedBy@FSkillInfo@@QEAAXVFName@@0@Z:PROC ; FSkillInfo::SetReplacedBy + Line 210: EXTRN ?GetReplacedBy@FSkillInfo@@QEAA?AVFName@@V2@@Z:PROC ; FSkillInfo::GetReplacedBy + Line 211: EXTRN ?MaybePrintMessage@CVMAbortException@@QEAAXXZ:PROC ; CVMAbortException::MaybePrintMessage + Line 212: EXTRN ?ThrowAbortException@@YAXW4EVMAbortException@@PEBDZZ:PROC ; ThrowAbortException + Line 213: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 214: EXTRN ?FindVMFunction@@YAPEAVVMFunction@@PEAVPClass@@PEBD@Z:PROC ; FindVMFunction + Line 215: EXTRN ?E_InitStaticHandlers@@YAX_N@Z:PROC ; E_InitStaticHandlers + Line 216: EXTRN ?E_CheckReplacement@@YA_NPEAVPClassActor@@PEAPEAV1@@Z:PROC ; E_CheckReplacement + Line 217: EXTRN ??1PType@@UEAA@XZ:PROC ; PType::~PType + Line 218: EXTRN ?WriteValue@PType@@UEBAXAEAVFSerializer@@PEBDPEBX@Z:PROC ; PType::WriteValue + Line 219: EXTRN ?ReadValue@PType@@UEBA_NAEAVFSerializer@@PEBDPEAX@Z:PROC ; PType::ReadValue + Line 220: EXTRN ?SetPointer@PType@@UEAAXPEAXIPEAV?$TArray@_K_K@@@Z:PROC ; PType::SetPointer + Line 221: EXTRN ?SetPointerArray@PType@@UEAAXPEAXIPEAV?$TArray@_K_K@@@Z:PROC ; PType::SetPointerArray + Line 222: EXTRN ?SetValue@PType@@UEAAXPEAXH@Z:PROC ; PType::SetValue + Line 223: EXTRN ?SetValue@PType@@UEAAXPEAXN@Z:PROC ; PType::SetValue + Line 224: EXTRN ?GetValueInt@PType@@UEBAHPEAX@Z:PROC ; PType::GetValueInt + Line 225: EXTRN ?GetValueFloat@PType@@UEBANPEAX@Z:PROC ; PType::GetValueFloat + Line 226: EXTRN ?IsMatch@PType@@UEBA_N_J0@Z:PROC ; PType::IsMatch + Line 227: EXTRN ?GetTypeIDs@PType@@UEBAXAEA_J0@Z:PROC ; PType::GetTypeIDs + Line 228: EXTRN ??0PCompoundType@@IEAA@II@Z:PROC ; PCompoundType::PCompoundType + Line 229: EXTRN ?AddType@FTypeTable@@QEAAXPEAVPType@@VFName@@@Z:PROC ; FTypeTable::AddType + Line 230: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 231: EXTRN ?LoadActors@@YAXXZ:PROC ; LoadActors + Line 232: EXTRN ?InitBotStuff@@YAXXZ:PROC ; InitBotStuff + Line 233: EXTRN ?ClearStrifeTypes@@YAXXZ:PROC ; ClearStrifeTypes + Line 234: EXTRN ??_EPActorInfo@@UEAAPEAXI@Z:PROC ; PActorInfo::`vector deleting destructor' + Line 235: EXTRN _CxxThrowException:PROC + Line 236: EXTRN __CxxFrameHandler3:PROC + Line 237: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 238: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 239: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 240: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + Line 241: EXTRN ?gameskill@@3VFIntCVar@@A:BYTE ; gameskill + Line 242: EXTRN ?ClassDataAllocator@@3VFMemArena@@A:BYTE ; ClassDataAllocator + Line 243: EXTRN ?DoomEdMap@@3V?$TMap@HUFDoomEdEntry@@U?$THashTraits@H@@U?$TValueTraits@UFDoomEdEntry@@@@@@A:BYTE ; DoomEdMap + Line 244: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 245: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 246: EXTRN ?AllSkills@@3V?$TArray@UFSkillInfo@@U1@@@A:BYTE ; AllSkills + Line 247: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 248: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 249: EXTRN ?SpawnableThings@@3V?$TMap@HPEAVPClassActor@@U?$THashTraits@H@@U?$TValueTraits@PEAVPClassActor@@@@@@A:BYTE ; SpawnableThings + Line 250: EXTRN ?StrifeTypes@@3V?$TMap@HPEAVPClassActor@@U?$THashTraits@H@@U?$TValueTraits@PEAVPClassActor@@@@@@A:BYTE ; StrifeTypes + Line 251: EXTRN ?stacktrace@CVMAbortException@@2VFString@@A:QWORD ; CVMAbortException::stacktrace + Line 252: EXTRN ?TypeState@@3PEAVPStatePointer@@EA:QWORD ; TypeState + Line 253: EXTRN ?TypeTable@@3UFTypeTable@@A:BYTE ; TypeTable + Line 254: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 255: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\init.cod (2 hits) + Line 25: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 26: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\instrum.cod (43 hits) + Line 116: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 117: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 118: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 119: EXTRN free:PROC + Line 120: EXTRN atoi:PROC + Line 121: EXTRN __stdio_common_vsprintf:PROC + Line 122: EXTRN strchr:PROC + Line 123: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 124: EXTRN ?ctl_cmsg@TimidityPlus@@YAXHHPEBDZZ:PROC ; TimidityPlus::ctl_cmsg + Line 125: EXTRN ?OpenSoundFont@FSoundFontManager@@QEAAPEAVFSoundFontReader@@PEBDH@Z:PROC ; FSoundFontManager::OpenSoundFont + Line 126: EXTRN ?open_file@TimidityPlus@@YAPEAUtimidity_file@1@PEBDPEAVFSoundFontReader@@@Z:PROC ; TimidityPlus::open_file + Line 127: EXTRN ?tf_close@TimidityPlus@@YAXPEAUtimidity_file@1@@Z:PROC ; TimidityPlus::tf_close + Line 128: EXTRN ?skip@TimidityPlus@@YAXPEAUtimidity_file@1@_K@Z:PROC ; TimidityPlus::skip + Line 129: EXTRN ?tf_getc@TimidityPlus@@YAHPEAUtimidity_file@1@@Z:PROC ; TimidityPlus::tf_getc + Line 130: EXTRN ?tf_read@TimidityPlus@@YAJPEAXHHPEAUtimidity_file@1@@Z:PROC ; TimidityPlus::tf_read + Line 131: EXTRN ?safe_malloc@TimidityPlus@@YAPEAX_K@Z:PROC ; TimidityPlus::safe_malloc + Line 132: EXTRN ?safe_strdup@TimidityPlus@@YAPEADPEBD@Z:PROC ; TimidityPlus::safe_strdup + Line 133: EXTRN ?free_ptr_list@TimidityPlus@@YAXPEAXH@Z:PROC ; TimidityPlus::free_ptr_list + Line 134: EXTRN ?extract_sample_file@Instruments@TimidityPlus@@AEAAPEAUInstrument@2@PEAD@Z:PROC ; TimidityPlus::Instruments::extract_sample_file + Line 135: EXTRN ?init_load_soundfont@Instruments@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Instruments::init_load_soundfont + Line 136: EXTRN ?load_soundfont_inst@Instruments@TimidityPlus@@QEAAPEAUInstrument@2@HHHH@Z:PROC ; TimidityPlus::Instruments::load_soundfont_inst + Line 137: EXTRN ?extract_soundfont@Instruments@TimidityPlus@@QEAAPEAUInstrument@2@PEADHHH@Z:PROC ; TimidityPlus::Instruments::extract_soundfont + Line 138: EXTRN ?free_soundfonts@Instruments@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Instruments::free_soundfonts + Line 139: EXTRN ?read_config_file@Instruments@TimidityPlus@@QEAAHPEBDHH@Z:PROC ; TimidityPlus::Instruments::read_config_file + Line 140: EXTRN ?initialize_resampler_coeffs@TimidityPlus@@YAXXZ:PROC ; TimidityPlus::initialize_resampler_coeffs + Line 141: EXTRN ?pre_resample@TimidityPlus@@YAXPEAUSample@1@@Z:PROC ; TimidityPlus::pre_resample + Line 142: EXTRN ?init_tables@TimidityPlus@@YAXXZ:PROC ; TimidityPlus::init_tables + Line 143: EXTRN ?quantity_to_int@TimidityPlus@@YAHPEBUQuantity_@1@H@Z:PROC ; TimidityPlus::quantity_to_int + Line 144: EXTRN ?assign_pitch_to_freq@TimidityPlus@@YAHM@Z:PROC ; TimidityPlus::assign_pitch_to_freq + Line 145: EXTRN ?freq_fourier@Freq@TimidityPlus@@QEAAMPEAUSample@2@PEAH@Z:PROC ; TimidityPlus::Freq::freq_fourier + Line 146: EXTRN __CxxFrameHandler3:PROC + Line 147: EXTRN memcmp:PROC + Line 148: EXTRN memcpy:PROC + Line 149: EXTRN memmove:PROC + Line 150: EXTRN memset:PROC + Line 151: EXTRN pow:PROC + Line 152: EXTRN ?timidity_surround_chorus@TimidityPlus@@3_NA:BYTE ; TimidityPlus::timidity_surround_chorus + Line 153: EXTRN ?playback_rate@TimidityPlus@@3HA:DWORD ; TimidityPlus::playback_rate + Line 154: EXTRN ?control_ratio@TimidityPlus@@3HA:DWORD ; TimidityPlus::control_ratio + Line 155: EXTRN ?sfmanager@@3VFSoundFontManager@@A:BYTE ; sfmanager + Line 156: EXTRN ?static_layer_items@TimidityPlus@@3QBU_LayerItem@1@B:BYTE ; TimidityPlus::static_layer_items + Line 157: EXTRN ?freq_table@TimidityPlus@@3PAHA:BYTE ; TimidityPlus::freq_table + Line 158: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\instrum_dls.cod (14 hits) + Line 122: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 123: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 124: EXTRN free:PROC + Line 125: EXTRN malloc:PROC + Line 126: EXTRN __acrt_iob_func:PROC + Line 127: EXTRN fread:PROC + Line 128: EXTRN __stdio_common_vfprintf:PROC + Line 129: EXTRN mysnprintf:PROC + Line 130: EXTRN ?safe_malloc@Timidity@@YAPEAX_K@Z:PROC ; Timidity::safe_malloc + Line 131: EXTRN ?convert_sample_data@Timidity@@YAXPEAUSample@1@PEBX@Z:PROC ; Timidity::convert_sample_data + Line 132: EXTRN memset:PROC + Line 133: EXTRN pow:PROC + Line 134: EXTRN __ImageBase:BYTE + Line 135: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\instrum_font.cod (10 hits) + Line 25: EXTRN _purecall:PROC + Line 26: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 27: EXTRN stricmp:PROC + Line 28: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 29: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 30: EXTRN ??_EFontFile@Timidity@@UEAAPEAXI@Z:PROC ; Timidity::FontFile::`vector deleting destructor' + Line 31: EXTRN ?ReadSF2@@YAPEAUSFFile@@PEBDAEAVFileReader@@@Z:PROC ; ReadSF2 + Line 32: EXTRN ?LookupFile@FSoundFontReader@@QEAA?AU?$pair@VFileReader@@VFString@@@std@@PEBD@Z:PROC ; FSoundFontReader::LookupFile + Line 33: EXTRN __CxxFrameHandler3:PROC + Line 34: EXTRN ?gus_sfreader@Timidity@@3V?$unique_ptr@VFSoundFontReader@@U?$default_delete@VFSoundFontReader@@@std@@@std@@A:QWORD ; Timidity::gus_sfreader + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\instrum_sf2.cod (27 hits) + Line 23: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 425: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 426: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 427: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 428: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 429: EXTRN __std_terminate:PROC + Line 430: EXTRN _errno:PROC + Line 431: EXTRN strerror:PROC + Line 432: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 433: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 434: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 435: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 436: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 437: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 438: EXTRN ?safe_malloc@Timidity@@YAPEAX_K@Z:PROC ; Timidity::safe_malloc + Line 439: EXTRN ??0Instrument@Timidity@@QEAA@XZ:PROC ; Timidity::Instrument::Instrument + Line 440: EXTRN ??1Instrument@Timidity@@QEAA@XZ:PROC ; Timidity::Instrument::~Instrument + Line 441: EXTRN ??0FontFile@Timidity@@QEAA@VFString@@@Z:PROC ; Timidity::FontFile::FontFile + Line 442: EXTRN ??1FontFile@Timidity@@UEAA@XZ:PROC ; Timidity::FontFile::~FontFile + Line 443: EXTRN ??_ESFFile@@UEAAPEAXI@Z:PROC ; SFFile::`vector deleting destructor' + Line 444: EXTRN ?LookupFile@FSoundFontReader@@QEAA?AU?$pair@VFileReader@@VFString@@@std@@PEBD@Z:PROC ; FSoundFontReader::LookupFile + Line 445: EXTRN _CxxThrowException:PROC + Line 446: EXTRN __CxxFrameHandler3:PROC + Line 447: EXTRN memset:PROC + Line 448: EXTRN pow:PROC + Line 449: EXTRN ?gus_sfreader@Timidity@@3V?$unique_ptr@VFSoundFontReader@@U?$default_delete@VFSoundFontReader@@@std@@@std@@A:QWORD ; Timidity::gus_sfreader + Line 450: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\intermission.cod (77 hits) + Line 35: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 209: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 210: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 211: EXTRN atexit:PROC + Line 212: EXTRN __std_terminate:PROC + Line 213: EXTRN strtoul:PROC + Line 214: EXTRN stricmp:PROC + Line 215: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 216: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 217: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 218: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 219: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 220: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 221: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 222: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 223: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 224: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 225: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 226: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 227: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 228: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 229: EXTRN ?V_SetBlend@@YAXHHHH@Z:PROC ; V_SetBlend + Line 230: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 231: EXTRN ?FlatFill@DFrameBuffer@@QEAAXHHHHPEAVFTexture@@_N@Z:PROC ; DFrameBuffer::FlatFill + Line 232: EXTRN ?Clear@DFrameBuffer@@QEAAXHHHHHI@Z:PROC ; DFrameBuffer::Clear + Line 233: EXTRN ?DrawTexture@DFrameBuffer@@QEAAXPEAVFTexture@@NNHZZ:PROC ; DFrameBuffer::DrawTexture + Line 234: EXTRN ?FillBorder@DFrameBuffer@@QEAAXPEAVFTexture@@@Z:PROC ; DFrameBuffer::FillBorder + Line 235: EXTRN ?DrawText@DFrameBuffer@@QEAAXPEAVFFont@@HNNPEBDHZZ:PROC ; DFrameBuffer::DrawText + Line 236: EXTRN ?DrawChar@DFrameBuffer@@QEAAXPEAVFFont@@HNNHHZZ:PROC ; DFrameBuffer::DrawChar + Line 237: EXTRN ?D_StartTitle@@YAXXZ:PROC ; D_StartTitle + Line 238: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 239: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 240: EXTRN ?S_Sound@@YAXHVFSoundID@@MM@Z:PROC ; S_Sound + Line 241: EXTRN ?S_StopSound@@YAXH@Z:PROC ; S_StopSound + Line 242: EXTRN ?S_StopAllChannels@@YAXXZ:PROC ; S_StopAllChannels + Line 243: EXTRN ?S_ChangeMusic@@YA_NPEBDH_N1@Z:PROC ; S_ChangeMusic + Line 244: EXTRN ?S_ChangeCDMusic@@YA_NHI_N@Z:PROC ; S_ChangeCDMusic + Line 245: EXTRN ?S_FindSkinnedSound@@YAHPEAVAActor@@VFSoundID@@@Z:PROC ; S_FindSkinnedSound + Line 246: EXTRN ?GetColorTranslation@FFont@@QEBAPEAUFRemapTable@@W4EColorRange@@PEAUPalEntry@@@Z:PROC ; FFont::GetColorTranslation + Line 247: EXTRN ?StringWidth@FFont@@QEBAHPEBE@Z:PROC ; FFont::StringWidth + Line 248: EXTRN ??_EDIntermissionScreen@@UEAAPEAXI@Z:PROC ; DIntermissionScreen::`vector deleting destructor' + Line 249: EXTRN ??_EDIntermissionScreenFader@@UEAAPEAXI@Z:PROC ; DIntermissionScreenFader::`vector deleting destructor' + Line 250: EXTRN ??_EDIntermissionScreenText@@UEAAPEAXI@Z:PROC ; DIntermissionScreenText::`vector deleting destructor' + Line 251: EXTRN ??_EDIntermissionScreenCast@@UEAAPEAXI@Z:PROC ; DIntermissionScreenCast::`vector deleting destructor' + Line 252: EXTRN ??_EDIntermissionScreenScroller@@UEAAPEAXI@Z:PROC ; DIntermissionScreenScroller::`vector deleting destructor' + Line 253: EXTRN ??_EDIntermissionController@@UEAAPEAXI@Z:PROC ; DIntermissionController::`vector deleting destructor' + Line 254: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 255: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 256: EXTRN ?P_ResumeConversation@@YAXXZ:PROC ; P_ResumeConversation + Line 257: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 258: EXTRN __CxxFrameHandler3:PROC + Line 259: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 260: EXTRN ?State@GC@@3W4EGCState@1@A:DWORD ; GC::State + Line 261: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 262: EXTRN ?wipegamestate@@3W4gamestate_t@@A:DWORD ; wipegamestate + Line 263: EXTRN ?gameaction@@3W4gameaction_t@@A:DWORD ; gameaction + Line 264: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 265: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 266: EXTRN ?CleanXfac@@3HA:DWORD ; CleanXfac + Line 267: EXTRN ?CleanYfac@@3HA:DWORD ; CleanYfac + Line 268: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 269: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 270: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 271: EXTRN ?pr_statetics@FState@@2VFRandom@@A:BYTE ; FState::pr_statetics + Line 272: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 273: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 274: EXTRN ?automapactive@@3_NA:BYTE ; automapactive + Line 275: EXTRN ?viewactive@@3_NA:BYTE ; viewactive + Line 276: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 277: EXTRN ?PlayerClasses@@3V?$TArray@VFPlayerClass@@V1@@@A:BYTE ; PlayerClasses + Line 278: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 279: EXTRN ?SpriteFrames@@3V?$TArray@Uspriteframe_t@@U1@@@A:BYTE ; SpriteFrames + Line 280: EXTRN ?Skins@@3V?$TArray@VFPlayerSkin@@V1@@@A:BYTE ; Skins + Line 281: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 282: EXTRN ?Bindings@@3VFKeyBindings@@A:BYTE ; Bindings + Line 283: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 284: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\intermission_parse.cod (55 hits) + Line 131: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 132: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 133: EXTRN __std_terminate:PROC + Line 134: EXTRN strnicmp:PROC + Line 135: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 136: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 137: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 138: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 139: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 140: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 141: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 142: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 143: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 144: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 145: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 146: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 147: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 148: EXTRN ?V_FindFontColor@@YA?AW4EColorRange@@VFName@@@Z:PROC ; V_FindFontColor + Line 149: EXTRN ??_EFIntermissionAction@@UEAAPEAXI@Z:PROC ; FIntermissionAction::`vector deleting destructor' + Line 150: EXTRN ??_EFIntermissionActionFader@@UEAAPEAXI@Z:PROC ; FIntermissionActionFader::`vector deleting destructor' + Line 151: EXTRN ??_EFIntermissionActionWiper@@UEAAPEAXI@Z:PROC ; FIntermissionActionWiper::`vector deleting destructor' + Line 152: EXTRN ??_EFIntermissionActionTextscreen@@UEAAPEAXI@Z:PROC ; FIntermissionActionTextscreen::`vector deleting destructor' + Line 153: EXTRN ??_EFIntermissionActionCast@@UEAAPEAXI@Z:PROC ; FIntermissionActionCast::`vector deleting destructor' + Line 154: EXTRN ??_EFIntermissionActionScroller@@UEAAPEAXI@Z:PROC ; FIntermissionActionScroller::`vector deleting destructor' + Line 155: EXTRN ?F_StartIntermission@@YAXPEAUFIntermissionDescriptor@@_NE@Z:PROC ; F_StartIntermission + Line 156: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 157: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 158: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 159: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 160: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 161: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 162: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 163: EXTRN ?MatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MatchString + Line 164: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 165: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 166: EXTRN ?ParseAssign@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseAssign + Line 167: EXTRN ?ParseComma@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseComma + Line 168: EXTRN ?CheckNumber@FMapInfoParser@@QEAA_NXZ:PROC ; FMapInfoParser::CheckNumber + Line 169: EXTRN ?SkipToNext@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::SkipToNext + Line 170: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 171: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 172: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 173: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 174: EXTRN __CxxFrameHandler3:PROC + Line 175: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 176: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 177: EXTRN ?IntermissionDescriptors@@3V?$TMap@VFName@@PEAUFIntermissionDescriptor@@U?$THashTraits@VFName@@@@U?$TValueTraits@PEAUFIntermissionDescriptor@@@@@@A:BYTE ; IntermissionDescriptors + Line 178: EXTRN ?RegistrationInfo@DIntermissionScreen@@2UClassReg@@A:BYTE ; DIntermissionScreen::RegistrationInfo + Line 179: EXTRN ?RegistrationInfo@DIntermissionScreenFader@@2UClassReg@@A:BYTE ; DIntermissionScreenFader::RegistrationInfo + Line 180: EXTRN ?RegistrationInfo@DIntermissionScreenText@@2UClassReg@@A:BYTE ; DIntermissionScreenText::RegistrationInfo + Line 181: EXTRN ?RegistrationInfo@DIntermissionScreenCast@@2UClassReg@@A:BYTE ; DIntermissionScreenCast::RegistrationInfo + Line 182: EXTRN ?RegistrationInfo@DIntermissionScreenScroller@@2UClassReg@@A:BYTE ; DIntermissionScreenScroller::RegistrationInfo + Line 183: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 184: EXTRN __ImageBase:BYTE + Line 185: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\isnan.cod (1 hit) + Line 11: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\jit.cod (279 hits) + Line 219: EXTRN ?x86OpData@asmjit@@3UX86OpData@1@B:BYTE ; asmjit::x86OpData + Line 1169: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 1170: EXTRN ??3@YAXPEAX@Z:PROC ; operator delete + Line 1171: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 1172: EXTRN __std_terminate:PROC + Line 1173: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 1174: EXTRN fclose:PROC + Line 1175: EXTRN fwrite:PROC + Line 1176: EXTRN ??2@YAPEAX_KAEBUnothrow_t@std@@@Z:PROC ; operator new + Line 1177: EXTRN __std_exception_copy:PROC + Line 1178: EXTRN __std_exception_destroy:PROC + Line 1179: EXTRN ??_Eexception@std@@UEAAPEAXI@Z:PROC ; std::exception::`vector deleting destructor' + Line 1180: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 1181: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 1182: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 1183: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 1184: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 1185: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 1186: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 1187: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 1188: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 1189: EXTRN ?ThrowAbortException@@YAXW4EVMAbortException@@PEBDZZ:PROC ; ThrowAbortException + Line 1190: EXTRN ?AllocFrame@VMFrameStack@@QEAAPEAUVMFrame@@PEAVVMScriptFunction@@@Z:PROC ; VMFrameStack::AllocFrame + Line 1191: EXTRN ?PopFrame@VMFrameStack@@QEAAPEAUVMFrame@@XZ:PROC ; VMFrameStack::PopFrame + Line 1192: EXTRN ?VMFillParams@@YAXPEAUVMValue@@PEAUVMFrame@@H@Z:PROC ; VMFillParams + Line 1193: EXTRN ?PCToLine@VMScriptFunction@@QEAAHPEBTVMOP@@@Z:PROC ; VMScriptFunction::PCToLine + Line 1194: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 1195: EXTRN ??0StringLogger@asmjit@@QEAA@XZ:PROC ; asmjit::StringLogger::StringLogger + Line 1196: EXTRN ??1StringLogger@asmjit@@UEAA@XZ:PROC ; asmjit::StringLogger::~StringLogger + Line 1197: EXTRN ??0ErrorHandler@asmjit@@QEAA@XZ:PROC ; asmjit::ErrorHandler::ErrorHandler + Line 1198: EXTRN ??1ErrorHandler@asmjit@@UEAA@XZ:PROC ; asmjit::ErrorHandler::~ErrorHandler + Line 1199: EXTRN ??0CodeHolder@asmjit@@QEAA@XZ:PROC ; asmjit::CodeHolder::CodeHolder + Line 1200: EXTRN ??1CodeHolder@asmjit@@QEAA@XZ:PROC ; asmjit::CodeHolder::~CodeHolder + Line 1201: EXTRN ?init@CodeHolder@asmjit@@QEAAIAEBVCodeInfo@2@@Z:PROC ; asmjit::CodeHolder::init + Line 1202: EXTRN ?setLogger@CodeHolder@asmjit@@QEAAXPEAVLogger@2@@Z:PROC ; asmjit::CodeHolder::setLogger + Line 1203: EXTRN ?setErrorHandler@CodeHolder@asmjit@@QEAAIPEAVErrorHandler@2@@Z:PROC ; asmjit::CodeHolder::setErrorHandler + Line 1204: EXTRN ?emit@CodeEmitter@asmjit@@QEAAII@Z:PROC ; asmjit::CodeEmitter::emit + Line 1205: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@@Z:PROC ; asmjit::CodeEmitter::emit + Line 1206: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@0@Z:PROC ; asmjit::CodeEmitter::emit + Line 1207: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@H@Z:PROC ; asmjit::CodeEmitter::emit + Line 1208: EXTRN ?setCursor@CodeBuilder@asmjit@@QEAAPEAVCBNode@2@PEAV32@@Z:PROC ; asmjit::CodeBuilder::setCursor + Line 1209: EXTRN ?_setArg@CCFuncCall@asmjit@@QEAA_NIAEBUOperand_@2@@Z:PROC ; asmjit::CCFuncCall::_setArg + Line 1210: EXTRN ?_setRet@CCFuncCall@asmjit@@QEAA_NIAEBUOperand_@2@@Z:PROC ; asmjit::CCFuncCall::_setRet + Line 1211: EXTRN ?addFunc@CodeCompiler@asmjit@@QEAAPEAVCCFunc@2@AEBUFuncSignature@2@@Z:PROC ; asmjit::CodeCompiler::addFunc + Line 1212: EXTRN ?endFunc@CodeCompiler@asmjit@@QEAAPEAVCBSentinel@2@XZ:PROC ; asmjit::CodeCompiler::endFunc + Line 1213: EXTRN ?addCall@CodeCompiler@asmjit@@QEAAPEAVCCFuncCall@2@IAEBUOperand_@2@AEBUFuncSignature@2@@Z:PROC ; asmjit::CodeCompiler::addCall + Line 1214: EXTRN ?setArg@CodeCompiler@asmjit@@QEAAIIAEBVReg@2@@Z:PROC ; asmjit::CodeCompiler::setArg + Line 1215: EXTRN ?_newReg@CodeCompiler@asmjit@@QEAAIAEAVReg@2@IPEBDPEAD@Z:PROC ; asmjit::CodeCompiler::_newReg + Line 1216: EXTRN ?_newStack@CodeCompiler@asmjit@@QEAAIAEAVMem@2@IIPEBD@Z:PROC ; asmjit::CodeCompiler::_newStack + Line 1217: EXTRN ??0X86Compiler@asmjit@@QEAA@PEAVCodeHolder@1@@Z:PROC ; asmjit::X86Compiler::X86Compiler + Line 1218: EXTRN ??1X86Compiler@asmjit@@UEAA@XZ:PROC ; asmjit::X86Compiler::~X86Compiler + Line 1219: EXTRN ?EmitLI@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLI + Line 1220: EXTRN ?EmitLK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLK + Line 1221: EXTRN ?EmitLKF@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLKF + Line 1222: EXTRN ?EmitLKS@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLKS + Line 1223: EXTRN ?EmitLKP@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLKP + Line 1224: EXTRN ?EmitLK_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLK_R + Line 1225: EXTRN ?EmitLKF_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLKF_R + Line 1226: EXTRN ?EmitLKS_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLKS_R + Line 1227: EXTRN ?EmitLKP_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLKP_R + Line 1228: EXTRN ?EmitLFP@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLFP + Line 1229: EXTRN ?EmitMETA@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMETA + Line 1230: EXTRN ?EmitCLSS@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitCLSS + Line 1231: EXTRN ?EmitLB@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLB + Line 1232: EXTRN ?EmitLB_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLB_R + Line 1233: EXTRN ?EmitLH@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLH + Line 1234: EXTRN ?EmitLH_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLH_R + Line 1235: EXTRN ?EmitLW@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLW + Line 1236: EXTRN ?EmitLW_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLW_R + Line 1237: EXTRN ?EmitLBU@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLBU + Line 1238: EXTRN ?EmitLBU_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLBU_R + Line 1239: EXTRN ?EmitLHU@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLHU + Line 1240: EXTRN ?EmitLHU_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLHU_R + Line 1241: EXTRN ?EmitLSP@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLSP + Line 1242: EXTRN ?EmitLSP_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLSP_R + Line 1243: EXTRN ?EmitLDP@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLDP + Line 1244: EXTRN ?EmitLDP_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLDP_R + Line 1245: EXTRN ?EmitLS@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLS + Line 1246: EXTRN ?EmitLS_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLS_R + Line 1247: EXTRN ?EmitLO@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLO + Line 1248: EXTRN ?EmitLO_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLO_R + Line 1249: EXTRN ?EmitLP@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLP + Line 1250: EXTRN ?EmitLP_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLP_R + Line 1251: EXTRN ?EmitLV2@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLV2 + Line 1252: EXTRN ?EmitLV2_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLV2_R + Line 1253: EXTRN ?EmitLV3@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLV3 + Line 1254: EXTRN ?EmitLV3_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLV3_R + Line 1255: EXTRN ?EmitLCS@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLCS + Line 1256: EXTRN ?EmitLCS_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLCS_R + Line 1257: EXTRN ?EmitLBIT@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLBIT + Line 1258: EXTRN ?EmitSB@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSB + Line 1259: EXTRN ?EmitSB_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSB_R + Line 1260: EXTRN ?EmitSH@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSH + Line 1261: EXTRN ?EmitSH_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSH_R + Line 1262: EXTRN ?EmitSW@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSW + Line 1263: EXTRN ?EmitSW_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSW_R + Line 1264: EXTRN ?EmitSSP@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSSP + Line 1265: EXTRN ?EmitSSP_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSSP_R + Line 1266: EXTRN ?EmitSDP@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSDP + Line 1267: EXTRN ?EmitSDP_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSDP_R + Line 1268: EXTRN ?EmitSS@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSS + Line 1269: EXTRN ?EmitSS_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSS_R + Line 1270: EXTRN ?EmitSP@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSP + Line 1271: EXTRN ?EmitSP_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSP_R + Line 1272: EXTRN ?EmitSO@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSO + Line 1273: EXTRN ?EmitSO_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSO_R + Line 1274: EXTRN ?EmitSV2@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSV2 + Line 1275: EXTRN ?EmitSV2_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSV2_R + Line 1276: EXTRN ?EmitSV3@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSV3 + Line 1277: EXTRN ?EmitSV3_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSV3_R + Line 1278: EXTRN ?EmitSBIT@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSBIT + Line 1279: EXTRN ?EmitMOVE@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMOVE + Line 1280: EXTRN ?EmitMOVEF@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMOVEF + Line 1281: EXTRN ?EmitMOVES@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMOVES + Line 1282: EXTRN ?EmitMOVEA@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMOVEA + Line 1283: EXTRN ?EmitMOVEV2@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMOVEV2 + Line 1284: EXTRN ?EmitMOVEV3@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMOVEV3 + Line 1285: EXTRN ?EmitCAST@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitCAST + Line 1286: EXTRN ?EmitCASTB@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitCASTB + Line 1287: EXTRN ?EmitDYNCAST_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDYNCAST_R + Line 1288: EXTRN ?EmitDYNCAST_K@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDYNCAST_K + Line 1289: EXTRN ?EmitDYNCASTC_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDYNCASTC_R + Line 1290: EXTRN ?EmitDYNCASTC_K@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDYNCASTC_K + Line 1291: EXTRN ?EmitTEST@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitTEST + Line 1292: EXTRN ?EmitTESTN@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitTESTN + Line 1293: EXTRN ?EmitJMP@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitJMP + Line 1294: EXTRN ?EmitIJMP@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitIJMP + Line 1295: EXTRN ?EmitPARAM@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitPARAM + Line 1296: EXTRN ?EmitPARAMI@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitPARAMI + Line 1297: EXTRN ?EmitCALL@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitCALL + Line 1298: EXTRN ?EmitCALL_K@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitCALL_K + Line 1299: EXTRN ?EmitVTBL@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitVTBL + Line 1300: EXTRN ?EmitSCOPE@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSCOPE + Line 1301: EXTRN ?EmitRESULT@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitRESULT + Line 1302: EXTRN ?EmitRET@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitRET + Line 1303: EXTRN ?EmitRETI@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitRETI + Line 1304: EXTRN ?EmitTHROW@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitTHROW + Line 1305: EXTRN ?EmitBOUND@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitBOUND + Line 1306: EXTRN ?EmitBOUND_K@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitBOUND_K + Line 1307: EXTRN ?EmitBOUND_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitBOUND_R + Line 1308: EXTRN ?EmitCONCAT@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitCONCAT + Line 1309: EXTRN ?EmitLENS@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLENS + Line 1310: EXTRN ?EmitCMPS@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitCMPS + Line 1311: EXTRN ?EmitSLL_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSLL_RR + Line 1312: EXTRN ?EmitSLL_RI@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSLL_RI + Line 1313: EXTRN ?EmitSLL_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSLL_KR + Line 1314: EXTRN ?EmitSRL_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSRL_RR + Line 1315: EXTRN ?EmitSRL_RI@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSRL_RI + Line 1316: EXTRN ?EmitSRL_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSRL_KR + Line 1317: EXTRN ?EmitSRA_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSRA_RR + Line 1318: EXTRN ?EmitSRA_RI@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSRA_RI + Line 1319: EXTRN ?EmitSRA_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSRA_KR + Line 1320: EXTRN ?EmitADD_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitADD_RR + Line 1321: EXTRN ?EmitADD_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitADD_RK + Line 1322: EXTRN ?EmitADDI@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitADDI + Line 1323: EXTRN ?EmitSUB_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSUB_RR + Line 1324: EXTRN ?EmitSUB_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSUB_RK + Line 1325: EXTRN ?EmitSUB_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSUB_KR + Line 1326: EXTRN ?EmitMUL_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMUL_RR + Line 1327: EXTRN ?EmitMUL_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMUL_RK + Line 1328: EXTRN ?EmitDIV_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDIV_RR + Line 1329: EXTRN ?EmitDIV_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDIV_RK + Line 1330: EXTRN ?EmitDIV_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDIV_KR + Line 1331: EXTRN ?EmitDIVU_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDIVU_RR + Line 1332: EXTRN ?EmitDIVU_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDIVU_RK + Line 1333: EXTRN ?EmitDIVU_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDIVU_KR + Line 1334: EXTRN ?EmitMOD_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMOD_RR + Line 1335: EXTRN ?EmitMOD_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMOD_RK + Line 1336: EXTRN ?EmitMOD_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMOD_KR + Line 1337: EXTRN ?EmitMODU_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMODU_RR + Line 1338: EXTRN ?EmitMODU_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMODU_RK + Line 1339: EXTRN ?EmitMODU_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMODU_KR + Line 1340: EXTRN ?EmitAND_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitAND_RR + Line 1341: EXTRN ?EmitAND_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitAND_RK + Line 1342: EXTRN ?EmitOR_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitOR_RR + Line 1343: EXTRN ?EmitOR_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitOR_RK + Line 1344: EXTRN ?EmitXOR_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitXOR_RR + Line 1345: EXTRN ?EmitXOR_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitXOR_RK + Line 1346: EXTRN ?EmitMIN_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMIN_RR + Line 1347: EXTRN ?EmitMIN_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMIN_RK + Line 1348: EXTRN ?EmitMAX_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMAX_RR + Line 1349: EXTRN ?EmitMAX_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMAX_RK + Line 1350: EXTRN ?EmitMINU_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMINU_RR + Line 1351: EXTRN ?EmitMINU_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMINU_RK + Line 1352: EXTRN ?EmitMAXU_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMAXU_RR + Line 1353: EXTRN ?EmitMAXU_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMAXU_RK + Line 1354: EXTRN ?EmitABS@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitABS + Line 1355: EXTRN ?EmitNEG@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitNEG + Line 1356: EXTRN ?EmitNOT@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitNOT + Line 1357: EXTRN ?EmitEQ_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitEQ_R + Line 1358: EXTRN ?EmitEQ_K@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitEQ_K + Line 1359: EXTRN ?EmitLT_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLT_RR + Line 1360: EXTRN ?EmitLT_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLT_RK + Line 1361: EXTRN ?EmitLT_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLT_KR + Line 1362: EXTRN ?EmitLE_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLE_RR + Line 1363: EXTRN ?EmitLE_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLE_RK + Line 1364: EXTRN ?EmitLE_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLE_KR + Line 1365: EXTRN ?EmitLTU_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLTU_RR + Line 1366: EXTRN ?EmitLTU_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLTU_RK + Line 1367: EXTRN ?EmitLTU_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLTU_KR + Line 1368: EXTRN ?EmitLEU_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLEU_RR + Line 1369: EXTRN ?EmitLEU_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLEU_RK + Line 1370: EXTRN ?EmitLEU_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLEU_KR + Line 1371: EXTRN ?EmitADDF_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitADDF_RR + Line 1372: EXTRN ?EmitADDF_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitADDF_RK + Line 1373: EXTRN ?EmitSUBF_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSUBF_RR + Line 1374: EXTRN ?EmitSUBF_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSUBF_RK + Line 1375: EXTRN ?EmitSUBF_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSUBF_KR + Line 1376: EXTRN ?EmitMULF_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMULF_RR + Line 1377: EXTRN ?EmitMULF_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMULF_RK + Line 1378: EXTRN ?EmitDIVF_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDIVF_RR + Line 1379: EXTRN ?EmitDIVF_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDIVF_RK + Line 1380: EXTRN ?EmitDIVF_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDIVF_KR + Line 1381: EXTRN ?EmitMODF_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMODF_RR + Line 1382: EXTRN ?EmitMODF_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMODF_RK + Line 1383: EXTRN ?EmitMODF_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMODF_KR + Line 1384: EXTRN ?EmitPOWF_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitPOWF_RR + Line 1385: EXTRN ?EmitPOWF_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitPOWF_RK + Line 1386: EXTRN ?EmitPOWF_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitPOWF_KR + Line 1387: EXTRN ?EmitMINF_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMINF_RR + Line 1388: EXTRN ?EmitMINF_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMINF_RK + Line 1389: EXTRN ?EmitMAXF_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMAXF_RR + Line 1390: EXTRN ?EmitMAXF_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMAXF_RK + Line 1391: EXTRN ?EmitATAN2@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitATAN2 + Line 1392: EXTRN ?EmitFLOP@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitFLOP + Line 1393: EXTRN ?EmitEQF_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitEQF_R + Line 1394: EXTRN ?EmitEQF_K@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitEQF_K + Line 1395: EXTRN ?EmitLTF_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLTF_RR + Line 1396: EXTRN ?EmitLTF_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLTF_RK + Line 1397: EXTRN ?EmitLTF_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLTF_KR + Line 1398: EXTRN ?EmitLEF_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLEF_RR + Line 1399: EXTRN ?EmitLEF_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLEF_RK + Line 1400: EXTRN ?EmitLEF_KR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLEF_KR + Line 1401: EXTRN ?EmitNEGV2@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitNEGV2 + Line 1402: EXTRN ?EmitADDV2_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitADDV2_RR + Line 1403: EXTRN ?EmitSUBV2_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSUBV2_RR + Line 1404: EXTRN ?EmitDOTV2_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDOTV2_RR + Line 1405: EXTRN ?EmitMULVF2_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMULVF2_RR + Line 1406: EXTRN ?EmitMULVF2_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMULVF2_RK + Line 1407: EXTRN ?EmitDIVVF2_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDIVVF2_RR + Line 1408: EXTRN ?EmitDIVVF2_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDIVVF2_RK + Line 1409: EXTRN ?EmitLENV2@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLENV2 + Line 1410: EXTRN ?EmitEQV2_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitEQV2_R + Line 1411: EXTRN ?EmitEQV2_K@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitEQV2_K + Line 1412: EXTRN ?EmitNEGV3@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitNEGV3 + Line 1413: EXTRN ?EmitADDV3_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitADDV3_RR + Line 1414: EXTRN ?EmitSUBV3_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSUBV3_RR + Line 1415: EXTRN ?EmitDOTV3_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDOTV3_RR + Line 1416: EXTRN ?EmitCROSSV_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitCROSSV_RR + Line 1417: EXTRN ?EmitMULVF3_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMULVF3_RR + Line 1418: EXTRN ?EmitMULVF3_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitMULVF3_RK + Line 1419: EXTRN ?EmitDIVVF3_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDIVVF3_RR + Line 1420: EXTRN ?EmitDIVVF3_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitDIVVF3_RK + Line 1421: EXTRN ?EmitLENV3@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitLENV3 + Line 1422: EXTRN ?EmitEQV3_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitEQV3_R + Line 1423: EXTRN ?EmitEQV3_K@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitEQV3_K + Line 1424: EXTRN ?EmitADDA_RR@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitADDA_RR + Line 1425: EXTRN ?EmitADDA_RK@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitADDA_RK + Line 1426: EXTRN ?EmitSUBA@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitSUBA + Line 1427: EXTRN ?EmitEQA_R@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitEQA_R + Line 1428: EXTRN ?EmitEQA_K@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitEQA_K + Line 1429: EXTRN ??_EAsmJitException@@UEAAPEAXI@Z:PROC ; AsmJitException::`vector deleting destructor' + Line 1430: EXTRN ??_EThrowingErrorHandler@@UEAAPEAXI@Z:PROC ; ThrowingErrorHandler::`vector deleting destructor' + Line 1431: EXTRN ?AddJitFunction@@YAPEAXPEAVCodeHolder@asmjit@@PEAVJitCompiler@@@Z:PROC ; AddJitFunction + Line 1432: EXTRN ?GetHostCodeInfo@@YA?AVCodeInfo@asmjit@@XZ:PROC ; GetHostCodeInfo + Line 1433: EXTRN _CxxThrowException:PROC + Line 1434: EXTRN __CxxFrameHandler3:PROC + Line 1435: EXTRN __chkstk:PROC + Line 1436: EXTRN ?nothrow@std@@3Unothrow_t@1@B:BYTE ; std::nothrow + Line 1437: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 1438: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 1439: EXTRN ?GlobalVMStack@@3VVMFrameStack@@A:BYTE ; GlobalVMStack + Line 1440: EXTRN ?TypeFloat64@@3PEAVPFloat@@EA:QWORD ; TypeFloat64 + Line 1441: EXTRN ?TypeString@@3PEAVPString@@EA:QWORD ; TypeString + Line 1442: EXTRN ?TypeVector2@@3PEAVPStruct@@EA:QWORD ; TypeVector2 + Line 1443: EXTRN ?TypeVector3@@3PEAVPStruct@@EA:QWORD ; TypeVector3 + Line 1444: EXTRN ?VMCalls@@3PAHA:BYTE ; VMCalls + Line 1445: EXTRN __ImageBase:BYTE + Line 1446: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\jit_call.cod (31 hits) + Line 8: EXTRN ?x86OpData@asmjit@@3UX86OpData@1@B:BYTE ; asmjit::x86OpData + Line 90: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 91: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 92: EXTRN atexit:PROC + Line 93: EXTRN __std_terminate:PROC + Line 94: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 95: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 96: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 97: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 98: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 99: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 100: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 101: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 102: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 103: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 104: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@@Z:PROC ; asmjit::CodeEmitter::emit + Line 105: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@0@Z:PROC ; asmjit::CodeEmitter::emit + Line 106: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@H@Z:PROC ; asmjit::CodeEmitter::emit + Line 107: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@_J@Z:PROC ; asmjit::CodeEmitter::emit + Line 108: EXTRN ?setCursor@CodeBuilder@asmjit@@QEAAPEAVCBNode@2@PEAV32@@Z:PROC ; asmjit::CodeBuilder::setCursor + Line 109: EXTRN ?_setArg@CCFuncCall@asmjit@@QEAA_NIAEBUOperand_@2@@Z:PROC ; asmjit::CCFuncCall::_setArg + Line 110: EXTRN ?_setRet@CCFuncCall@asmjit@@QEAA_NIAEBUOperand_@2@@Z:PROC ; asmjit::CCFuncCall::_setRet + Line 111: EXTRN ?addCall@CodeCompiler@asmjit@@QEAAPEAVCCFuncCall@2@IAEBUOperand_@2@AEBUFuncSignature@2@@Z:PROC ; asmjit::CodeCompiler::addCall + Line 112: EXTRN ?_newReg@CodeCompiler@asmjit@@QEAAIAEAVReg@2@IPEBDPEAD@Z:PROC ; asmjit::CodeCompiler::_newReg + Line 113: EXTRN ?EmitThrowExceptionLabel@JitCompiler@@AEAA?AVLabel@asmjit@@W4EVMAbortException@@@Z:PROC ; JitCompiler::EmitThrowExceptionLabel + Line 114: EXTRN ?CheckVMFrame@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::CheckVMFrame + Line 115: EXTRN ?GetCallReturns@JitCompiler@@AEAA?AVX86Gp@asmjit@@XZ:PROC ; JitCompiler::GetCallReturns + Line 116: EXTRN _CxxThrowException:PROC + Line 117: EXTRN __CxxFrameHandler3:PROC + Line 118: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 119: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\jit_flow.cod (25 hits) + Line 8: EXTRN ?x86OpData@asmjit@@3UX86OpData@1@B:BYTE ; asmjit::x86OpData + Line 45: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 46: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 47: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 48: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 49: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 50: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 51: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 52: EXTRN ?ValidateCall@FScopeBarrier@@SAXPEAVPClass@@PEAVVMFunction@@H@Z:PROC ; FScopeBarrier::ValidateCall + Line 53: EXTRN ?ThrowAbortException@@YAXW4EVMAbortException@@PEBDZZ:PROC ; ThrowAbortException + Line 54: EXTRN ?PCToLine@VMScriptFunction@@QEAAHPEBTVMOP@@@Z:PROC ; VMScriptFunction::PCToLine + Line 55: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@@Z:PROC ; asmjit::CodeEmitter::emit + Line 56: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@0@Z:PROC ; asmjit::CodeEmitter::emit + Line 57: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@H@Z:PROC ; asmjit::CodeEmitter::emit + Line 58: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@_J@Z:PROC ; asmjit::CodeEmitter::emit + Line 59: EXTRN ?setCursor@CodeBuilder@asmjit@@QEAAPEAVCBNode@2@PEAV32@@Z:PROC ; asmjit::CodeBuilder::setCursor + Line 60: EXTRN ?_setArg@CCFuncCall@asmjit@@QEAA_NIAEBUOperand_@2@@Z:PROC ; asmjit::CCFuncCall::_setArg + Line 61: EXTRN ?addRet@CodeCompiler@asmjit@@QEAAPEAVCCFuncRet@2@AEBUOperand_@2@0@Z:PROC ; asmjit::CodeCompiler::addRet + Line 62: EXTRN ?addCall@CodeCompiler@asmjit@@QEAAPEAVCCFuncCall@2@IAEBUOperand_@2@AEBUFuncSignature@2@@Z:PROC ; asmjit::CodeCompiler::addCall + Line 63: EXTRN ?_newReg@CodeCompiler@asmjit@@QEAAIAEAVReg@2@IPEBDPEAD@Z:PROC ; asmjit::CodeCompiler::_newReg + Line 64: EXTRN ?EmitPopFrame@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::EmitPopFrame + Line 65: EXTRN ?EmitThrowException@JitCompiler@@AEAAXW4EVMAbortException@@@Z:PROC ; JitCompiler::EmitThrowException + Line 66: EXTRN ?EmitThrowExceptionLabel@JitCompiler@@AEAA?AVLabel@asmjit@@W4EVMAbortException@@@Z:PROC ; JitCompiler::EmitThrowExceptionLabel + Line 67: EXTRN _CxxThrowException:PROC + Line 68: EXTRN __CxxFrameHandler3:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\jit_load.cod (20 hits) + Line 8: EXTRN ?x86OpData@asmjit@@3UX86OpData@1@B:BYTE ; asmjit::x86OpData + Line 66: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 67: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 68: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 69: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 70: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 71: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 72: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 73: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@@Z:PROC ; asmjit::CodeEmitter::emit + Line 74: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@0@Z:PROC ; asmjit::CodeEmitter::emit + Line 75: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@H@Z:PROC ; asmjit::CodeEmitter::emit + Line 76: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@_J@Z:PROC ; asmjit::CodeEmitter::emit + Line 77: EXTRN ?_setArg@CCFuncCall@asmjit@@QEAA_NIAEBUOperand_@2@@Z:PROC ; asmjit::CCFuncCall::_setArg + Line 78: EXTRN ?addCall@CodeCompiler@asmjit@@QEAAPEAVCCFuncCall@2@IAEBUOperand_@2@AEBUFuncSignature@2@@Z:PROC ; asmjit::CodeCompiler::addCall + Line 79: EXTRN ?_newReg@CodeCompiler@asmjit@@QEAAIAEAVReg@2@IPEBDPEAD@Z:PROC ; asmjit::CodeCompiler::_newReg + Line 80: EXTRN ?EmitNullPointerThrow@JitCompiler@@AEAAXHW4EVMAbortException@@@Z:PROC ; JitCompiler::EmitNullPointerThrow + Line 81: EXTRN ?EmitThrowExceptionLabel@JitCompiler@@AEAA?AVLabel@asmjit@@W4EVMAbortException@@@Z:PROC ; JitCompiler::EmitThrowExceptionLabel + Line 82: EXTRN ?CheckVMFrame@JitCompiler@@AEAAXXZ:PROC ; JitCompiler::CheckVMFrame + Line 83: EXTRN _CxxThrowException:PROC + Line 84: EXTRN __CxxFrameHandler3:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\jit_math.cod (52 hits) + Line 8: EXTRN ?x86OpData@asmjit@@3UX86OpData@1@B:BYTE ; asmjit::x86OpData + Line 186: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 187: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 188: EXTRN __std_terminate:PROC + Line 189: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 190: EXTRN stricmp:PROC + Line 191: EXTRN fabs:PROC + Line 192: EXTRN ceil:PROC + Line 193: EXTRN floor:PROC + Line 194: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 195: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 196: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 197: EXTRN ??HFString@@QEBA?AV0@AEBV0@@Z:PROC ; FString::operator+ + Line 198: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 199: EXTRN c_asin:PROC + Line 200: EXTRN c_acos:PROC + Line 201: EXTRN c_atan:PROC + Line 202: EXTRN c_atan2:PROC + Line 203: EXTRN c_tan:PROC + Line 204: EXTRN c_sqrt:PROC + Line 205: EXTRN c_sinh:PROC + Line 206: EXTRN c_cosh:PROC + Line 207: EXTRN c_tanh:PROC + Line 208: EXTRN c_exp:PROC + Line 209: EXTRN c_log:PROC + Line 210: EXTRN c_log10:PROC + Line 211: EXTRN c_pow:PROC + Line 212: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 213: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 214: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 215: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@@Z:PROC ; asmjit::CodeEmitter::emit + Line 216: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@0@Z:PROC ; asmjit::CodeEmitter::emit + Line 217: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@00@Z:PROC ; asmjit::CodeEmitter::emit + Line 218: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@H@Z:PROC ; asmjit::CodeEmitter::emit + Line 219: EXTRN ?_setArg@CCFuncCall@asmjit@@QEAA_NIAEBUOperand_@2@@Z:PROC ; asmjit::CCFuncCall::_setArg + Line 220: EXTRN ?_setRet@CCFuncCall@asmjit@@QEAA_NIAEBUOperand_@2@@Z:PROC ; asmjit::CCFuncCall::_setRet + Line 221: EXTRN ?addCall@CodeCompiler@asmjit@@QEAAPEAVCCFuncCall@2@IAEBUOperand_@2@AEBUFuncSignature@2@@Z:PROC ; asmjit::CodeCompiler::addCall + Line 222: EXTRN ?_newReg@CodeCompiler@asmjit@@QEAAIAEAVReg@2@IPEBDPEAD@Z:PROC ; asmjit::CodeCompiler::_newReg + Line 223: EXTRN ?_newConst@CodeCompiler@asmjit@@QEAAIAEAVMem@2@IPEBX_K@Z:PROC ; asmjit::CodeCompiler::_newConst + Line 224: EXTRN ?EmitThrowException@JitCompiler@@AEAAXW4EVMAbortException@@@Z:PROC ; JitCompiler::EmitThrowException + Line 225: EXTRN ?EmitThrowExceptionLabel@JitCompiler@@AEAA?AVLabel@asmjit@@W4EVMAbortException@@@Z:PROC ; JitCompiler::EmitThrowExceptionLabel + Line 226: EXTRN ?CheckRegD@JitCompiler@@AEAA?AVX86Gp@asmjit@@HH@Z:PROC ; JitCompiler::CheckRegD + Line 227: EXTRN ?CheckRegF@JitCompiler@@AEAA?AVX86Xmm@asmjit@@HH@Z:PROC ; JitCompiler::CheckRegF + Line 228: EXTRN ?CheckRegF@JitCompiler@@AEAA?AVX86Xmm@asmjit@@HHH@Z:PROC ; JitCompiler::CheckRegF + Line 229: EXTRN ?CheckRegF@JitCompiler@@AEAA?AVX86Xmm@asmjit@@HHHH@Z:PROC ; JitCompiler::CheckRegF + Line 230: EXTRN ?CheckRegS@JitCompiler@@AEAA?AVX86Gp@asmjit@@HH@Z:PROC ; JitCompiler::CheckRegS + Line 231: EXTRN _CxxThrowException:PROC + Line 232: EXTRN __CxxFrameHandler3:PROC + Line 233: EXTRN floor:PROC + Line 234: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 235: EXTRN __ImageBase:BYTE + Line 236: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\jit_move.cod (29 hits) + Line 8: EXTRN ?x86OpData@asmjit@@3UX86OpData@1@B:BYTE ; asmjit::x86OpData + Line 74: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 75: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 76: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 77: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 78: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 79: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 80: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 81: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 82: EXTRN ?ToLong@FString@@QEBAJH@Z:PROC ; FString::ToLong + Line 83: EXTRN ?ToDouble@FString@@QEBANXZ:PROC ; FString::ToDouble + Line 84: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 85: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@@Z:PROC ; asmjit::CodeEmitter::emit + Line 86: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@0@Z:PROC ; asmjit::CodeEmitter::emit + Line 87: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@H@Z:PROC ; asmjit::CodeEmitter::emit + Line 88: EXTRN ?_setArg@CCFuncCall@asmjit@@QEAA_NIAEBUOperand_@2@@Z:PROC ; asmjit::CCFuncCall::_setArg + Line 89: EXTRN ?_setRet@CCFuncCall@asmjit@@QEAA_NIAEBUOperand_@2@@Z:PROC ; asmjit::CCFuncCall::_setRet + Line 90: EXTRN ?addCall@CodeCompiler@asmjit@@QEAAPEAVCCFuncCall@2@IAEBUOperand_@2@AEBUFuncSignature@2@@Z:PROC ; asmjit::CodeCompiler::addCall + Line 91: EXTRN ?_newReg@CodeCompiler@asmjit@@QEAAIAEAVReg@2@IPEBDPEAD@Z:PROC ; asmjit::CodeCompiler::_newReg + Line 92: EXTRN ?V_GetColor@@YAHPEBIPEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColor + Line 93: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 94: EXTRN _CxxThrowException:PROC + Line 95: EXTRN __CxxFrameHandler3:PROC + Line 96: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 97: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 98: EXTRN ?S_sfx@@3V?$TArray@Usfxinfo_t@@U1@@@A:BYTE ; S_sfx + Line 99: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 100: EXTRN __ImageBase:BYTE + Line 101: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\jit_runtime.cod (45 hits) + Line 8: EXTRN ?x86OpData@asmjit@@3UX86OpData@1@B:BYTE ; asmjit::x86OpData + Line 32: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 33: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 34: EXTRN atexit:PROC + Line 35: EXTRN __std_terminate:PROC + Line 36: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 37: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 38: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 39: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 40: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 41: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 42: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 43: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 44: EXTRN __imp_RtlCaptureContext:PROC + Line 45: EXTRN __imp_RtlAddFunctionTable:PROC + Line 46: EXTRN __imp_RtlDeleteFunctionTable:PROC + Line 47: EXTRN __imp_RtlLookupFunctionEntry:PROC + Line 48: EXTRN __imp_RtlVirtualUnwind:PROC + Line 49: EXTRN __imp_GetCurrentProcess:PROC + Line 50: EXTRN ?init@FuncFrameLayout@asmjit@@QEAAIAEBVFuncDetail@2@AEBUFuncFrameInfo@2@@Z:PROC ; asmjit::FuncFrameLayout::init + Line 51: EXTRN ??0CodeHolder@asmjit@@QEAA@XZ:PROC ; asmjit::CodeHolder::CodeHolder + Line 52: EXTRN ??1CodeHolder@asmjit@@QEAA@XZ:PROC ; asmjit::CodeHolder::~CodeHolder + Line 53: EXTRN ?init@CodeHolder@asmjit@@QEAAIAEBVCodeInfo@2@@Z:PROC ; asmjit::CodeHolder::init + Line 54: EXTRN ?getCodeSize@CodeHolder@asmjit@@QEBA_KXZ:PROC ; asmjit::CodeHolder::getCodeSize + Line 55: EXTRN ?relocate@CodeHolder@asmjit@@QEBA_KPEAX_K@Z:PROC ; asmjit::CodeHolder::relocate + Line 56: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@@Z:PROC ; asmjit::CodeEmitter::emit + Line 57: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@0@Z:PROC ; asmjit::CodeEmitter::emit + Line 58: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@H@Z:PROC ; asmjit::CodeEmitter::emit + Line 59: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@_J@Z:PROC ; asmjit::CodeEmitter::emit + Line 60: EXTRN ?allocVirtualMemory@OSUtils@asmjit@@SAPEAX_KPEA_KI@Z:PROC ; asmjit::OSUtils::allocVirtualMemory + Line 61: EXTRN ?releaseVirtualMemory@OSUtils@asmjit@@SAIPEAX_K@Z:PROC ; asmjit::OSUtils::releaseVirtualMemory + Line 62: EXTRN ??0JitRuntime@asmjit@@QEAA@XZ:PROC ; asmjit::JitRuntime::JitRuntime + Line 63: EXTRN ??1JitRuntime@asmjit@@UEAA@XZ:PROC ; asmjit::JitRuntime::~JitRuntime + Line 64: EXTRN ??0X86Assembler@asmjit@@QEAA@PEAVCodeHolder@1@@Z:PROC ; asmjit::X86Assembler::X86Assembler + Line 65: EXTRN ??1X86Assembler@asmjit@@UEAA@XZ:PROC ; asmjit::X86Assembler::~X86Assembler + Line 66: EXTRN ?Codegen@JitCompiler@@QEAAPEAVCCFunc@asmjit@@XZ:PROC ; JitCompiler::Codegen + Line 67: EXTRN __imp_SymCleanup:PROC + Line 68: EXTRN __imp_SymGetLineFromAddr64:PROC + Line 69: EXTRN __imp_SymInitialize:PROC + Line 70: EXTRN __imp_SymGetSymFromAddr64:PROC + Line 71: EXTRN __CxxFrameHandler3:PROC + Line 72: EXTRN memcpy:PROC + Line 73: EXTRN memset:PROC + Line 74: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 75: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\jit_store.cod (17 hits) + Line 8: EXTRN ?x86OpData@asmjit@@3UX86OpData@1@B:BYTE ; asmjit::x86OpData + Line 56: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 57: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 58: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 59: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 60: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 61: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 62: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 63: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@0@Z:PROC ; asmjit::CodeEmitter::emit + Line 64: EXTRN ?emit@CodeEmitter@asmjit@@QEAAIIAEBUOperand_@2@H@Z:PROC ; asmjit::CodeEmitter::emit + Line 65: EXTRN ?_setArg@CCFuncCall@asmjit@@QEAA_NIAEBUOperand_@2@@Z:PROC ; asmjit::CCFuncCall::_setArg + Line 66: EXTRN ?addCall@CodeCompiler@asmjit@@QEAAPEAVCCFuncCall@2@IAEBUOperand_@2@AEBUFuncSignature@2@@Z:PROC ; asmjit::CodeCompiler::addCall + Line 67: EXTRN ?_newReg@CodeCompiler@asmjit@@QEAAIAEAVReg@2@IPEBDPEAD@Z:PROC ; asmjit::CodeCompiler::_newReg + Line 68: EXTRN ?EmitNullPointerThrow@JitCompiler@@AEAAXHW4EVMAbortException@@@Z:PROC ; JitCompiler::EmitNullPointerThrow + Line 69: EXTRN _CxxThrowException:PROC + Line 70: EXTRN __CxxFrameHandler3:PROC + Line 71: EXTRN ?State@GC@@3W4EGCState@1@A:DWORD ; GC::State + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\joystickmenu.cod (23 hits) + Line 188: EXTRN atexit:PROC + Line 189: EXTRN __std_terminate:PROC + Line 190: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 191: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 192: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 193: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 194: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 195: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 196: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 197: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 198: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 199: EXTRN ?GetItem@DOptionMenuDescriptor@@QEAAPEAVDMenuItemBase@@VFName@@@Z:PROC ; DOptionMenuDescriptor::GetItem + Line 200: EXTRN ?SetValue@DMenuItemBase@@QEAA_NHH@Z:PROC ; DMenuItemBase::SetValue + Line 201: EXTRN ?CreateOptionMenuItemJoyConfigMenu@@YAPEAVDMenuItemBase@@PEBDPEAUIJoystickConfig@@@Z:PROC ; CreateOptionMenuItemJoyConfigMenu + Line 202: EXTRN ?I_GetJoysticks@@YAXAEAV?$TArray@PEAUIJoystickConfig@@PEAU1@@@@Z:PROC ; I_GetJoysticks + Line 203: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 204: EXTRN __CxxFrameHandler3:PROC + Line 205: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 206: EXTRN ?CurrentMenu@@3PEAVDMenu@@EA:QWORD ; CurrentMenu + Line 207: EXTRN ?RegistrationInfo@DOptionMenuDescriptor@@2UClassReg@@A:BYTE ; DOptionMenuDescriptor::RegistrationInfo + Line 208: EXTRN ?MenuDescriptors@@3V?$TMap@VFName@@PEAVDMenuDescriptor@@U?$THashTraits@VFName@@@@U?$TValueTraits@PEAVDMenuDescriptor@@@@@@A:BYTE ; MenuDescriptors + Line 209: EXTRN ?use_joystick@@3VFBoolCVar@@A:BYTE ; use_joystick + Line 210: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\jpegtexture.cod (39 hits) + Line 41: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 42: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 43: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 44: EXTRN __std_terminate:PROC + Line 45: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 46: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 47: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 48: EXTRN jpeg_std_error:PROC + Line 49: EXTRN jpeg_CreateDecompress:PROC + Line 50: EXTRN jpeg_destroy_decompress:PROC + Line 51: EXTRN jpeg_read_header:PROC + Line 52: EXTRN jpeg_start_decompress:PROC + Line 53: EXTRN jpeg_read_scanlines:PROC + Line 54: EXTRN jpeg_finish_decompress:PROC + Line 55: EXTRN jpeg_resync_to_restart:PROC + Line 56: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 57: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 58: EXTRN ?GetLumpFullPath@FWadCollection@@QEBA?AVFString@@H@Z:PROC ; FWadCollection::GetLumpFullPath + Line 59: EXTRN ?CopyPixelDataRGB@FBitmap@@QEAAXHHPEBEHHHHHHPEAUFCopyInfo@@HHH@Z:PROC ; FBitmap::CopyPixelDataRGB + Line 60: EXTRN ?CopyPixelData@FBitmap@@QEAAXHHPEBEHHHHHPEAUPalEntry@@PEAUFCopyInfo@@@Z:PROC ; FBitmap::CopyPixelData + Line 61: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 62: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 63: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 64: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 65: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 66: EXTRN ??_EFJPEGTexture@@UEAAPEAXI@Z:PROC ; FJPEGTexture::`vector deleting destructor' + Line 67: EXTRN _CxxThrowException:PROC + Line 68: EXTRN __CxxFrameHandler3:PROC + Line 69: EXTRN __chkstk:PROC + Line 70: EXTRN memset:PROC + Line 71: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 72: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 73: EXTRN ?RGB256k@@3TColorTable256k@@A:BYTE ; RGB256k + Line 74: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 75: EXTRN ?translationtables@@3PAV?$TAutoGrowArray@VFRemapTablePtr@@PEAUFRemapTable@@@@A:BYTE ; translationtables + Line 76: EXTRN ?GrayMap@ImageHelpers@@3PAEA:BYTE ; ImageHelpers::GrayMap + Line 77: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 78: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + Line 79: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\keysections.cod (33 hits) + Line 38: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 39: EXTRN atexit:PROC + Line 40: EXTRN __std_terminate:PROC + Line 41: EXTRN stricmp:PROC + Line 42: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 43: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 44: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 45: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 46: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 47: EXTRN mysnprintf:PROC + Line 48: EXTRN ?ArchiveBindings@FKeyBindings@@QEAAXPEAVFConfigFile@@PEBD@Z:PROC ; FKeyBindings::ArchiveBindings + Line 49: EXTRN ?DoBind@FKeyBindings@@QEAAXPEBD0@Z:PROC ; FKeyBindings::DoBind + Line 50: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 51: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 52: EXTRN ?AddCommandString@@YAXPEBDH@Z:PROC ; AddCommandString + Line 53: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 54: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 55: EXTRN ?SetSection@FConfigFile@@QEAA_NPEBD_N@Z:PROC ; FConfigFile::SetSection + Line 56: EXTRN ?ClearCurrentSection@FConfigFile@@QEAAXXZ:PROC ; FConfigFile::ClearCurrentSection + Line 57: EXTRN ?NextInSection@FConfigFile@@QEAA_NAEAPEBD0@Z:PROC ; FConfigFile::NextInSection + Line 58: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 59: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 60: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 61: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 62: EXTRN __CxxFrameHandler3:PROC + Line 63: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 64: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 65: EXTRN ?Bindings@@3VFKeyBindings@@A:BYTE ; Bindings + Line 66: EXTRN ?DoubleBindings@@3VFKeyBindings@@A:BYTE ; DoubleBindings + Line 67: EXTRN ?ParsingKeyConf@@3_NA:BYTE ; ParsingKeyConf + Line 68: EXTRN ?GameConfig@@3PEAVFGameConfigFile@@EA:QWORD ; GameConfig + Line 69: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 70: EXTRN ?KeyConfWeapons@@3V?$TArray@VFString@@V1@@@A:BYTE ; KeyConfWeapons + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\loadsavemenu.cod (61 hits) + Line 367: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 368: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 369: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 370: EXTRN atexit:PROC + Line 371: EXTRN __std_terminate:PROC + Line 372: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 373: EXTRN remove:PROC + Line 374: EXTRN strncmp:PROC + Line 375: EXTRN strncpy:PROC + Line 376: EXTRN stricmp:PROC + Line 377: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 378: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 379: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 380: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 381: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 382: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 383: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 384: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 385: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 386: EXTRN ?I_FindFirst@@YAPEAXPEBDPEAUfindstate_t@@@Z:PROC ; I_FindFirst + Line 387: EXTRN ?I_FindNext@@YAHPEAXPEAUfindstate_t@@@Z:PROC ; I_FindNext + Line 388: EXTRN ?I_FindClose@@YAHPEAX@Z:PROC ; I_FindClose + Line 389: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 390: EXTRN ?OpenMemoryArray@FileReader@@QEAA_NV?$function@$$A6A_NAEAV?$TArray@EE@@@Z@std@@@Z:PROC ; FileReader::OpenMemoryArray + Line 391: EXTRN ?CacheLump@FResourceLump@@QEAAPEAXXZ:PROC ; FResourceLump::CacheLump + Line 392: EXTRN ?ReleaseCache@FResourceLump@@QEAAHXZ:PROC ; FResourceLump::ReleaseCache + Line 393: EXTRN ?OpenResourceFile@FResourceFile@@SAPEAV1@PEBD_N1@Z:PROC ; FResourceFile::OpenResourceFile + Line 394: EXTRN ?FindLump@FResourceFile@@QEAAPEAUFResourceLump@@PEBD@Z:PROC ; FResourceFile::FindLump + Line 395: EXTRN ?DrawTexture@DFrameBuffer@@QEAAXPEAVFTexture@@NNHZZ:PROC ; DFrameBuffer::DrawTexture + Line 396: EXTRN ?DrawText@DFrameBuffer@@QEAAXPEAVFFont@@HNNPEBDHZZ:PROC ; DFrameBuffer::DrawText + Line 397: EXTRN ?M_ClearMenus@@YAXXZ:PROC ; M_ClearMenus + Line 398: EXTRN ?G_LoadGame@@YAXPEBD_N@Z:PROC ; G_LoadGame + Line 399: EXTRN ?G_SaveGame@@YAXPEBD0@Z:PROC ; G_SaveGame + Line 400: EXTRN ?G_BuildSaveName@@YA?AVFString@@PEBDH@Z:PROC ; G_BuildSaveName + Line 401: EXTRN ?G_CheckSaveGameWads@@YA_NAEAVFSerializer@@_N@Z:PROC ; G_CheckSaveGameWads + Line 402: EXTRN ??1PNGHandle@@QEAA@XZ:PROC ; PNGHandle::~PNGHandle + Line 403: EXTRN ?M_VerifyPNG@@YAPEAUPNGHandle@@AEAVFileReader@@@Z:PROC ; M_VerifyPNG + Line 404: EXTRN ?M_GetPNGText@@YAPEADPEAUPNGHandle@@PEBD@Z:PROC ; M_GetPNGText + Line 405: EXTRN ?M_GetPNGText@@YA_NPEAUPNGHandle@@PEBDPEAD_K@Z:PROC ; M_GetPNGText + Line 406: EXTRN ?PNGTexture_CreateFromFile@@YAPEAVFTexture@@PEAUPNGHandle@@AEBVFString@@@Z:PROC ; PNGTexture_CreateFromFile + Line 407: EXTRN ?GetWadName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetWadName + Line 408: EXTRN ?V_BreakLines@@YA?AV?$TArray@UFBrokenLines@@U1@@@PEAVFFont@@HPEBE_N@Z:PROC ; V_BreakLines + Line 409: EXTRN ??AFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator[] + Line 410: EXTRN ?OpenReader@FSerializer@@QEAA_NPEBD_K@Z:PROC ; FSerializer::OpenReader + Line 411: EXTRN ?Close@FSerializer@@QEAAXXZ:PROC ; FSerializer::Close + Line 412: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 413: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFString@@PEAV2@@Z:PROC ; Serialize + Line 414: EXTRN ?FileExists@@YA_NPEBD@Z:PROC ; FileExists + Line 415: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 416: EXTRN __CxxFrameHandler3:PROC + Line 417: EXTRN memcpy:PROC + Line 418: EXTRN memmove:PROC + Line 419: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 420: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 421: EXTRN ?CleanXfac@@3HA:DWORD ; CleanXfac + Line 422: EXTRN ?CleanYfac@@3HA:DWORD ; CleanYfac + Line 423: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 424: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 425: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 426: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 427: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\log.cod (9 hits) + Line 16: EXTRN mtherr:PROC + Line 17: EXTRN frexp:PROC + Line 18: EXTRN ldexp:PROC + Line 19: EXTRN polevl:PROC + Line 20: EXTRN p1evl:PROC + Line 21: EXTRN isnan:PROC + Line 22: EXTRN INFINITY:QWORD + Line 23: EXTRN NAN:QWORD + Line 24: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\log10.cod (9 hits) + Line 17: EXTRN mtherr:PROC + Line 18: EXTRN frexp:PROC + Line 19: EXTRN ldexp:PROC + Line 20: EXTRN polevl:PROC + Line 21: EXTRN p1evl:PROC + Line 22: EXTRN isnan:PROC + Line 23: EXTRN INFINITY:QWORD + Line 24: EXTRN NAN:QWORD + Line 25: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\m_alloc.cod (6 hits) + Line 15: EXTRN free:PROC + Line 16: EXTRN malloc:PROC + Line 17: EXTRN _msize:PROC + Line 18: EXTRN realloc:PROC + Line 19: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 20: EXTRN ?AllocBytes@GC@@3_KA:QWORD ; GC::AllocBytes + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\m_argv.cod (17 hits) + Line 34: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 35: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 36: EXTRN __std_terminate:PROC + Line 37: EXTRN stricmp:PROC + Line 38: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 39: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 40: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 41: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 42: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 43: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 44: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 45: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 46: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 47: EXTRN ?I_GetLongPathName@@YA?AVFString@@V1@@Z:PROC ; I_GetLongPathName + Line 48: EXTRN __CxxFrameHandler3:PROC + Line 49: EXTRN memmove:PROC + Line 50: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\m_bbox.cod (2 hits) + Line 13: EXTRN ?P_VanillaPointOnLineSide@@YAHNNPEBUline_t@@@Z:PROC ; P_VanillaPointOnLineSide + Line 14: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\m_cheat.cod (65 hits) + Line 21: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 200: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 201: EXTRN atexit:PROC + Line 202: EXTRN __std_terminate:PROC + Line 203: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 204: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 205: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 206: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 207: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 208: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 209: EXTRN mysnprintf:PROC + Line 210: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 211: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 212: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 213: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 214: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 215: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 216: EXTRN ?FindFunction@PClass@@SAXPEAPEAVVMFunction@@VFName@@1@Z:PROC ; PClass::FindFunction + Line 217: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 218: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 219: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 220: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 221: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 222: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 223: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 224: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 225: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 226: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 227: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 228: EXTRN ?FindInventory@AActor@@QEAAPEAV1@PEAVPClassActor@@_N@Z:PROC ; AActor::FindInventory + Line 229: EXTRN ?FindInventory@AActor@@QEAAPEAV1@VFName@@_N@Z:PROC ; AActor::FindInventory + Line 230: EXTRN ?GiveInventoryType@AActor@@QEAAPEAV1@PEAVPClassActor@@@Z:PROC ; AActor::GiveInventoryType + Line 231: EXTRN ?Resurrect@player_t@@QEAA_NXZ:PROC ; player_t::Resurrect + Line 232: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 233: EXTRN ?P_AimLineAttack@@YA?AU?$TAngle@N@@PEAVAActor@@U1@NPEAUFTranslatedLineTarget@@1H00@Z:PROC ; P_AimLineAttack + Line 234: EXTRN ?P_LineAttack@@YAPEAVAActor@@PEAV1@U?$TAngle@N@@N1HVFName@@2HPEAUFTranslatedLineTarget@@PEAHNNN@Z:PROC ; P_LineAttack + Line 235: EXTRN ?P_DamageMobj@@YAHPEAVAActor@@00HVFName@@HU?$TAngle@N@@@Z:PROC ; P_DamageMobj + Line 236: EXTRN ?P_GiveBody@@YA_NPEAVAActor@@HH@Z:PROC ; P_GiveBody + Line 237: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 238: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 239: EXTRN ?CheckCheatmode@@YA_N_N@Z:PROC ; CheckCheatmode + Line 240: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 241: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 242: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 243: EXTRN ?Net_WriteString@@YAXPEBD@Z:PROC ; Net_WriteString + Line 244: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 245: EXTRN ?R_ResetViewInterpolation@@YAXXZ:PROC ; R_ResetViewInterpolation + Line 246: EXTRN ?Massacre@FLevelLocals@@QEAAH_NVFName@@@Z:PROC ; FLevelLocals::Massacre + Line 247: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 248: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 249: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 250: EXTRN ??_EDSuicider@@UEAAPEAXI@Z:PROC ; DSuicider::`vector deleting destructor' + Line 251: EXTRN __CxxFrameHandler3:PROC + Line 252: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 253: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 254: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 255: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 256: EXTRN ?deh@@3UDehInfo@@A:BYTE ; deh + Line 257: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 258: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 259: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 260: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 261: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 262: EXTRN __ImageBase:BYTE + Line 263: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\m_joy.cod (23 hits) + Line 9: EXTRN ?joy_ps2raw@@3VFBoolCVar@@A:BYTE ; joy_ps2raw + Line 10: EXTRN ?joy_dinput@@3VFBoolCVar@@A:BYTE ; joy_dinput + Line 11: EXTRN ?joy_xinput@@3VFBoolCVar@@A:BYTE ; joy_xinput + Line 37: EXTRN atexit:PROC + Line 38: EXTRN atof:PROC + Line 39: EXTRN atoi:PROC + Line 40: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 41: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 42: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 43: EXTRN mysnprintf:PROC + Line 44: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 45: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 46: EXTRN ?SetSection@FConfigFile@@QEAA_NPEBD_N@Z:PROC ; FConfigFile::SetSection + Line 47: EXTRN ?ClearCurrentSection@FConfigFile@@QEAAXXZ:PROC ; FConfigFile::ClearCurrentSection + Line 48: EXTRN ?DeleteCurrentSection@FConfigFile@@QEAA_NXZ:PROC ; FConfigFile::DeleteCurrentSection + Line 49: EXTRN ?SectionIsEmpty@FConfigFile@@QEAA_NXZ:PROC ; FConfigFile::SectionIsEmpty + Line 50: EXTRN ?GetValueForKey@FConfigFile@@QEBAPEBDPEBD@Z:PROC ; FConfigFile::GetValueForKey + Line 51: EXTRN ?SetValueForKey@FConfigFile@@QEAAXPEBD0_N@Z:PROC ; FConfigFile::SetValueForKey + Line 52: EXTRN ?D_PostEvent@@YAXPEBUevent_t@@@Z:PROC ; D_PostEvent + Line 53: EXTRN __CxxFrameHandler3:PROC + Line 54: EXTRN atan2:PROC + Line 55: EXTRN ?GameConfig@@3PEAVFGameConfigFile@@EA:QWORD ; GameConfig + Line 56: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\m_misc.cod (67 hits) + Line 20: EXTRN ?IsAlias@FConsoleCommand@@UEAA_NXZ:PROC ; FConsoleCommand::IsAlias + Line 21: EXTRN ?Run@FUnsafeConsoleCommand@@UEAAXAEAVFCommandLine@@PEAVAActor@@H@Z:PROC ; FUnsafeConsoleCommand::Run + Line 22: EXTRN ??_EFUnsafeConsoleCommand@@UEAAPEAXI@Z:PROC ; FUnsafeConsoleCommand::`vector deleting destructor' + Line 113: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 114: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 115: EXTRN atexit:PROC + Line 116: EXTRN __std_terminate:PROC + Line 117: EXTRN _errno:PROC + Line 118: EXTRN strerror:PROC + Line 119: EXTRN stricmp:PROC + Line 120: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 121: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 122: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 123: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 124: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 125: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 126: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 127: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 128: EXTRN ?LastIndexOfAny@FString@@QEBAJPEBD@Z:PROC ; FString::LastIndexOfAny + Line 129: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 130: EXTRN _localtime64:PROC + Line 131: EXTRN _time64:PROC + Line 132: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 133: EXTRN mysnprintf:PROC + Line 134: EXTRN ?GetVersionString@@YAPEBDXZ:PROC ; GetVersionString + Line 135: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 136: EXTRN ?I_WriteIniFailed@@YA_NXZ:PROC ; I_WriteIniFailed + Line 137: EXTRN ??0FArgs@@QEAA@XZ:PROC ; FArgs::FArgs + Line 138: EXTRN ?AppendArg@FArgs@@QEAAXVFString@@@Z:PROC ; FArgs::AppendArg + Line 139: EXTRN ?RemoveArg@FArgs@@QEAAXH@Z:PROC ; FArgs::RemoveArg + Line 140: EXTRN ?CheckValue@FArgs@@QEBAPEBDPEBD@Z:PROC ; FArgs::CheckValue + Line 141: EXTRN ?GetArg@FArgs@@QEBAPEBDH@Z:PROC ; FArgs::GetArg + Line 142: EXTRN ?NumArgs@FArgs@@QEBAHXZ:PROC ; FArgs::NumArgs + Line 143: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 144: EXTRN ?Open@FileWriter@@SAPEAV1@PEBD@Z:PROC ; FileWriter::Open + Line 145: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 146: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 147: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 148: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 149: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 150: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 151: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 152: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 153: EXTRN ?GetFlashedPalette@DFrameBuffer@@QEAAXQEAUPalEntry@@@Z:PROC ; DFrameBuffer::GetFlashedPalette + Line 154: EXTRN ?M_GetScreenshotsPath@@YA?AVFString@@XZ:PROC ; M_GetScreenshotsPath + Line 155: EXTRN ?M_CreatePNG@@YA_NPEAVFileWriter@@PEBEPEBUPalEntry@@W4ESSType@@HHHM@Z:PROC ; M_CreatePNG + Line 156: EXTRN ?M_AppendPNGText@@YA_NPEAVFileWriter@@PEBD1@Z:PROC ; M_AppendPNGText + Line 157: EXTRN ?M_FinishPNG@@YA_NPEAVFileWriter@@@Z:PROC ; M_FinishPNG + Line 158: EXTRN ?FileExists@@YA_NPEBD@Z:PROC ; FileExists + Line 159: EXTRN ?DefaultExtension@@YAXAEAVFString@@PEBD@Z:PROC ; DefaultExtension + Line 160: EXTRN ?CreatePath@@YAXPEBD@Z:PROC ; CreatePath + Line 161: EXTRN ?NicePath@@YA?AVFString@@PEBD@Z:PROC ; NicePath + Line 162: EXTRN ?G_ScreenShot@@YAXPEAD@Z:PROC ; G_ScreenShot + Line 163: EXTRN ?ChangePathName@FConfigFile@@QEAAXPEBD@Z:PROC ; FConfigFile::ChangePathName + Line 164: EXTRN ?WriteConfigFile@FConfigFile@@QEBA_NXZ:PROC ; FConfigFile::WriteConfigFile + Line 165: EXTRN ??0FGameConfigFile@@QEAA@XZ:PROC ; FGameConfigFile::FGameConfigFile + Line 166: EXTRN ?DoGlobalSetup@FGameConfigFile@@QEAAXXZ:PROC ; FGameConfigFile::DoGlobalSetup + Line 167: EXTRN ?ArchiveGlobalData@FGameConfigFile@@QEAAXXZ:PROC ; FGameConfigFile::ArchiveGlobalData + Line 168: EXTRN ?ArchiveGameData@FGameConfigFile@@QEAAXPEBD@Z:PROC ; FGameConfigFile::ArchiveGameData + Line 169: EXTRN __CxxFrameHandler3:PROC + Line 170: EXTRN __chkstk:PROC + Line 171: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 172: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 173: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 174: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 175: EXTRN ?longsavemessages@@3VFBoolCVar@@A:BYTE ; longsavemessages + Line 176: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\m_png.cod (27 hits) + Line 43: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 44: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 45: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 46: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 47: EXTRN atexit:PROC + Line 48: EXTRN __std_terminate:PROC + Line 49: EXTRN strncmp:PROC + Line 50: EXTRN strncpy:PROC + Line 51: EXTRN deflate:PROC + Line 52: EXTRN deflateEnd:PROC + Line 53: EXTRN inflate:PROC + Line 54: EXTRN inflateEnd:PROC + Line 55: EXTRN crc32:PROC + Line 56: EXTRN deflateInit_:PROC + Line 57: EXTRN inflateInit_:PROC + Line 58: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 59: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 60: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 61: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 62: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 63: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 64: EXTRN __CxxFrameHandler3:PROC + Line 65: EXTRN __chkstk:PROC + Line 66: EXTRN memcpy:PROC + Line 67: EXTRN memset:PROC + Line 68: EXTRN __ImageBase:BYTE + Line 69: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\m_random.cod (29 hits) + Line 49: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 50: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 51: EXTRN atexit:PROC + Line 52: EXTRN __std_terminate:PROC + Line 53: EXTRN atoi:PROC + Line 54: EXTRN stricmp:PROC + Line 55: EXTRN crc32:PROC + Line 56: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 57: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 58: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 59: EXTRN ?InitByArray@FRandom@@QEAAXPEAIH@Z:PROC ; FRandom::InitByArray + Line 60: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 61: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 62: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 63: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 64: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 65: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 66: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 67: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 68: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 69: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 70: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 71: EXTRN __CxxFrameHandler3:PROC + Line 72: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 73: EXTRN ?pr_spawnmobj@@3VFRandom@@A:BYTE ; pr_spawnmobj + Line 74: EXTRN ?pr_acs@@3VFRandom@@A:BYTE ; pr_acs + Line 75: EXTRN ?pr_chase@@3VFRandom@@A:BYTE ; pr_chase + Line 76: EXTRN ?pr_exrandom@@3VFRandom@@A:BYTE ; pr_exrandom + Line 77: EXTRN ?pr_damagemobj@@3VFRandom@@A:BYTE ; pr_damagemobj + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\mame_opn2.cod (12 hits) + Line 43: EXTRN _purecall:PROC + Line 44: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 45: EXTRN ??_EOPNChipBase@@UEAAPEAXI@Z:PROC ; OPNChipBase::`vector deleting destructor' + Line 46: EXTRN ??_E?$OPNChipBaseT@VMameOPN2@@@@UEAAPEAXI@Z:PROC ; OPNChipBaseT::`vector deleting destructor' + Line 47: EXTRN ??_EMameOPN2@@UEAAPEAXI@Z:PROC ; MameOPN2::`vector deleting destructor' + Line 48: EXTRN ym2612_init:PROC + Line 49: EXTRN ym2612_shutdown:PROC + Line 50: EXTRN ym2612_reset_chip:PROC + Line 51: EXTRN ym2612_pre_generate:PROC + Line 52: EXTRN ym2612_generate_one_native:PROC + Line 53: EXTRN ym2612_write:PROC + Line 54: EXTRN ym2612_write_pan:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\mame_ym2612fm.cod (8 hits) + Line 33: EXTRN free:PROC + Line 34: EXTRN malloc:PROC + Line 35: EXTRN log:PROC + Line 36: EXTRN memset:PROC + Line 37: EXTRN pow:PROC + Line 38: EXTRN sin:PROC + Line 39: EXTRN __ImageBase:BYTE + Line 40: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\maploader.cod (138 hits) + Line 206: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 207: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 208: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 209: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 210: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 211: EXTRN ??_V@YAXPEAX_K@Z:PROC ; operator delete[] + Line 212: EXTRN atexit:PROC + Line 213: EXTRN __std_terminate:PROC + Line 214: EXTRN strtol:PROC + Line 215: EXTRN strtoll:PROC + Line 216: EXTRN strtoul:PROC + Line 217: EXTRN strncmp:PROC + Line 218: EXTRN strncpy:PROC + Line 219: EXTRN strnicmp:PROC + Line 220: EXTRN isxdigit:PROC + Line 221: EXTRN __std_exception_copy:PROC + Line 222: EXTRN __std_exception_destroy:PROC + Line 223: EXTRN ??_Eexception@std@@UEAAPEAXI@Z:PROC ; std::exception::`vector deleting destructor' + Line 224: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 225: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 226: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 227: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 228: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 229: EXTRN ?CopyCStrPart@FString@@QEAAAEAV1@PEBD_K@Z:PROC ; FString::CopyCStrPart + Line 230: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 231: EXTRN ?SuperFastHash@@YAIPEBD_K@Z:PROC ; SuperFastHash + Line 232: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 233: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 234: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 235: EXTRN ??HFTextureID@@QEAA?AV0@H@Z:PROC ; FTextureID::operator+ + Line 236: EXTRN c_atan2:PROC + Line 237: EXTRN c_sqrt:PROC + Line 238: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 239: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 240: EXTRN ?AddToBox@FBoundingBox@@QEAAXAEBU?$TVector2@N@@@Z:PROC ; FBoundingBox::AddToBox + Line 241: EXTRN ?R_ColormapNumForName@@YAIPEBD@Z:PROC ; R_ColormapNumForName + Line 242: EXTRN ?P_Recalculate3DFloors@@YAXPEAUsector_t@@@Z:PROC ; P_Recalculate3DFloors + Line 243: EXTRN ?CheckOverlap@sector_t@@QEAAXXZ:PROC ; sector_t::CheckOverlap + Line 244: EXTRN ?AdjustLine@line_t@@QEAAXXZ:PROC ; line_t::AdjustLine + Line 245: EXTRN ?AdjustFloorClip@@YAXPEBUsector_t@@@Z:PROC ; AdjustFloorClip + Line 246: EXTRN ?FindMapBounds@FLevel@FNodeBuilder@@QEAAXXZ:PROC ; FNodeBuilder::FLevel::FindMapBounds + Line 247: EXTRN ??0FNodeBuilder@@QEAA@AEAUFLevel@0@AEAV?$TArray@UFPolyStart@FNodeBuilder@@U12@@@1_N@Z:PROC ; FNodeBuilder::FNodeBuilder + Line 248: EXTRN ??1FNodeBuilder@@QEAA@XZ:PROC ; FNodeBuilder::~FNodeBuilder + Line 249: EXTRN ?Extract@FNodeBuilder@@QEAAXAEAUFLevelLocals@@@Z:PROC ; FNodeBuilder::Extract + Line 250: EXTRN ?GetOldVertexTable@FNodeBuilder@@QEAAPEBHXZ:PROC ; FNodeBuilder::GetOldVertexTable + Line 251: EXTRN ?OpenDecompressor@FileReader@@QEAA_NAEAV1@_JH_N@Z:PROC ; FileReader::OpenDecompressor + Line 252: EXTRN ?isValid@level_info_t@@QEAA_NXZ:PROC ; level_info_t::isValid + Line 253: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 254: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 255: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 256: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 257: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 258: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 259: EXTRN ?InitPortalGroups@@YAXPEAUFLevelLocals@@@Z:PROC ; InitPortalGroups + Line 260: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 261: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 262: EXTRN ?LoadModule@FBehaviorContainer@@QEAAPEAVFBehavior@@HPEAVFileReader@@H@Z:PROC ; FBehaviorContainer::LoadModule + Line 263: EXTRN ?LoadDefaultModules@FBehaviorContainer@@QEAAXXZ:PROC ; FBehaviorContainer::LoadDefaultModules + Line 264: EXTRN ?UnloadModules@FBehaviorContainer@@QEAAXXZ:PROC ; FBehaviorContainer::UnloadModules + Line 265: EXTRN ?CheckAllGood@FBehaviorContainer@@QEAA_NXZ:PROC ; FBehaviorContainer::CheckAllGood + Line 266: EXTRN ?SectorHasTags@FTagManager@@AEBA_NPEBUsector_t@@@Z:PROC ; FTagManager::SectorHasTags + Line 267: EXTRN ?GetFirstSectorTag@FTagManager@@AEBAHH@Z:PROC ; FTagManager::GetFirstSectorTag + Line 268: EXTRN ?SectorHasTag@FTagManager@@AEBA_NHH@Z:PROC ; FTagManager::SectorHasTag + Line 269: EXTRN ?LineHasID@FTagManager@@AEBA_NHH@Z:PROC ; FTagManager::LineHasID + Line 270: EXTRN ?HashTags@FTagManager@@AEAAXXZ:PROC ; FTagManager::HashTags + Line 271: EXTRN ?AddSectorTag@FTagManager@@QEAAXHH@Z:PROC ; FTagManager::AddSectorTag + Line 272: EXTRN ?AddLineID@FTagManager@@QEAAXHH@Z:PROC ; FTagManager::AddLineID + Line 273: EXTRN ?RemoveSectorTags@FTagManager@@QEAAXH@Z:PROC ; FTagManager::RemoveSectorTags + Line 274: EXTRN ?S_FindEnvironment@@YAPEAUReverbContainer@@H@Z:PROC ; S_FindEnvironment + Line 275: EXTRN ?AddToHash@AActor@@QEAAXXZ:PROC ; AActor::AddToHash + Line 276: EXTRN ?P_InitHealthGroups@@YAXPEAUFLevelLocals@@@Z:PROC ; P_InitHealthGroups + Line 277: EXTRN ?CreateSections@@YAXPEAUFLevelLocals@@@Z:PROC ; CreateSections + Line 278: EXTRN ?TranslateLineDef@FLevelLocals@@QEAAXPEAUline_t@@PEAUmaplinedef_t@@H@Z:PROC ; FLevelLocals::TranslateLineDef + Line 279: EXTRN ?FinalizePortals@FLevelLocals@@QEAAXXZ:PROC ; FLevelLocals::FinalizePortals + Line 280: EXTRN ?SpawnMapThing@FLevelLocals@@QEAAPEAVAActor@@HPEAUFMapThing@@H@Z:PROC ; FLevelLocals::SpawnMapThing + Line 281: EXTRN ?ClearDynamic3DFloorData@FLevelLocals@@QEAAXXZ:PROC ; FLevelLocals::ClearDynamic3DFloorData + Line 282: EXTRN ?CheckCompatibility@MapLoader@@AEAA?AVFName@@PEAUMapData@@@Z:PROC ; MapLoader::CheckCompatibility + Line 283: EXTRN ?SetCompatibilityParams@MapLoader@@AEAAXVFName@@@Z:PROC ; MapLoader::SetCompatibilityParams + Line 284: EXTRN ?ProcessEDMapthing@MapLoader@@AEAAXPEAUFMapThing@@H@Z:PROC ; MapLoader::ProcessEDMapthing + Line 285: EXTRN ?ProcessEDLinedef@MapLoader@@AEAAXPEAUline_t@@H@Z:PROC ; MapLoader::ProcessEDLinedef + Line 286: EXTRN ?InitRenderInfo@MapLoader@@AEAAXXZ:PROC ; MapLoader::InitRenderInfo + Line 287: EXTRN ?FixMinisegReferences@MapLoader@@AEAAXXZ:PROC ; MapLoader::FixMinisegReferences + Line 288: EXTRN ?FixHoles@MapLoader@@AEAAXXZ:PROC ; MapLoader::FixHoles + Line 289: EXTRN ?SpawnSpecials@MapLoader@@AEAAXXZ:PROC ; MapLoader::SpawnSpecials + Line 290: EXTRN ?Spawn3DFloors@MapLoader@@AEAAXXZ:PROC ; MapLoader::Spawn3DFloors + Line 291: EXTRN ?PO_Init@MapLoader@@AEAAXXZ:PROC ; MapLoader::PO_Init + Line 292: EXTRN ?LoadMapinfoACSLump@MapLoader@@QEAAXXZ:PROC ; MapLoader::LoadMapinfoACSLump + Line 293: EXTRN ?LoadGLNodes@MapLoader@@QEAA_NPEAUMapData@@@Z:PROC ; MapLoader::LoadGLNodes + Line 294: EXTRN ?CheckNodes@MapLoader@@QEAA_NPEAUMapData@@_NH@Z:PROC ; MapLoader::CheckNodes + Line 295: EXTRN ?ParseTextMap@MapLoader@@QEAAXPEAUMapData@@AEAV?$TMap@VFString@@UFMissingCount@@U?$THashTraits@VFString@@@@U?$TValueTraits@UFMissingCount@@@@@@@Z:PROC ; MapLoader::ParseTextMap + Line 296: EXTRN ?SetRenderSector@MapLoader@@QEAAXXZ:PROC ; MapLoader::SetRenderSector + Line 297: EXTRN ?SpawnSlopeMakers@MapLoader@@QEAAXPEAUFMapThing@@0PEBH@Z:PROC ; MapLoader::SpawnSlopeMakers + Line 298: EXTRN ?SetSlopes@MapLoader@@QEAAXXZ:PROC ; MapLoader::SetSlopes + Line 299: EXTRN ?CopySlopes@MapLoader@@QEAAXXZ:PROC ; MapLoader::CopySlopes + Line 300: EXTRN ?P_LoadTranslator@@YAXPEBD@Z:PROC ; P_LoadTranslator + Line 301: EXTRN ?P_TranslateSectorSpecial@@YAHH@Z:PROC ; P_TranslateSectorSpecial + Line 302: EXTRN ??_ECDoomError@@UEAAPEAXI@Z:PROC ; CDoomError::`vector deleting destructor' + Line 303: EXTRN ??_ECRecoverableError@@UEAAPEAXI@Z:PROC ; CRecoverableError::`vector deleting destructor' + Line 304: EXTRN ??0FMemLump@@QEAA@XZ:PROC ; FMemLump::FMemLump + Line 305: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 306: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 307: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 308: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 309: EXTRN ?GetLumpName@FWadCollection@@QEBAXPEADH@Z:PROC ; FWadCollection::GetLumpName + Line 310: EXTRN ?P_LoadStrifeConversations@@YAXPEAUFLevelLocals@@PEAUMapData@@PEBD@Z:PROC ; P_LoadStrifeConversations + Line 311: EXTRN ?I_msTime@@YA_KXZ:PROC ; I_msTime + Line 312: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 313: EXTRN ?CheckValue@FArgs@@QEBAPEBDPEBD@Z:PROC ; FArgs::CheckValue + Line 314: EXTRN ?T_LoadScripts@@YAXPEAUFLevelLocals@@PEAUMapData@@@Z:PROC ; T_LoadScripts + Line 315: EXTRN ?CreateVBO@FFlatVertexBuffer@@QEAAXAEAV?$TArray@Usector_t@@U1@@@@Z:PROC ; FFlatVertexBuffer::CreateVBO + Line 316: EXTRN _CxxThrowException:PROC + Line 317: EXTRN __CxxFrameHandler3:PROC + Line 318: EXTRN __chkstk:PROC + Line 319: EXTRN memmove:PROC + Line 320: EXTRN memset:PROC + Line 321: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 322: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 323: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 324: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 325: EXTRN ?savegamerestore@@3_NA:BYTE ; savegamerestore + Line 326: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 327: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 328: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 329: EXTRN ?RegistrationInfo@PField@@2UClassReg@@A:BYTE ; PField::RegistrationInfo + Line 330: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 331: EXTRN ?DefaultEnvironments@@3PAPEAUReverbContainer@@A:BYTE ; DefaultEnvironments + Line 332: EXTRN ?DoomEdMap@@3V?$TMap@HUFDoomEdEntry@@U?$THashTraits@H@@U?$TValueTraits@UFDoomEdEntry@@@@@@A:BYTE ; DoomEdMap + Line 333: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 334: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 335: EXTRN ?developer@@3VFIntCVar@@A:BYTE ; developer + Line 336: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 337: EXTRN ?TypeBool@@3PEAVPBool@@EA:QWORD ; TypeBool + Line 338: EXTRN ?TypeString@@3PEAVPString@@EA:QWORD ; TypeString + Line 339: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 340: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 341: EXTRN ?SWRenderer@@3PEAUFRenderer@@EA:QWORD ; SWRenderer + Line 342: EXTRN __ImageBase:BYTE + Line 343: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\matrix.cod (5 hits) + Line 38: EXTRN __libm_sse2_sincosf_:PROC + Line 39: EXTRN cosf:PROC + Line 40: EXTRN sinf:PROC + Line 41: EXTRN tan:PROC + Line 42: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\mblock.cod (3 hits) + Line 13: EXTRN free:PROC + Line 14: EXTRN ?safe_malloc@TimidityPlus@@YAPEAX_K@Z:PROC ; TimidityPlus::safe_malloc + Line 15: EXTRN memcpy:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\md5.cod (13 hits) + Line 25: EXTRN atexit:PROC + Line 26: EXTRN _errno:PROC + Line 27: EXTRN strerror:PROC + Line 28: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 29: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 30: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 31: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 32: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 33: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 34: EXTRN __CxxFrameHandler3:PROC + Line 35: EXTRN __chkstk:PROC + Line 36: EXTRN memcpy:PROC + Line 37: EXTRN memset:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\md5check.cod (7 hits) + Line 1181: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 1182: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 1183: EXTRN mysnprintf:PROC + Line 1184: EXTRN ?Init@MD5Context@@QEAAXXZ:PROC ; MD5Context::Init + Line 1185: EXTRN ?Update@MD5Context@@QEAAXPEBEI@Z:PROC ; MD5Context::Update + Line 1186: EXTRN ?Final@MD5Context@@QEAAXQEAE@Z:PROC ; MD5Context::Final + Line 1187: EXTRN memcmp:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\memarena.cod (12 hits) + Line 28: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 29: EXTRN fwrite:PROC + Line 30: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 31: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 32: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 33: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 34: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 35: EXTRN ?SuperFastHash@@YAIPEBD_K@Z:PROC ; SuperFastHash + Line 36: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 37: EXTRN __CxxFrameHandler3:PROC + Line 38: EXTRN memcmp:PROC + Line 39: EXTRN memset:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\menu.cod (103 hits) + Line 193: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 1152: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 1153: EXTRN atexit:PROC + Line 1154: EXTRN __std_terminate:PROC + Line 1155: EXTRN strncpy:PROC + Line 1156: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 1157: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 1158: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 1159: EXTRN ??0FString@@QEAA@D@Z:PROC ; FString::FString + Line 1160: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 1161: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 1162: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 1163: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 1164: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 1165: EXTRN ?C_SetCVarsToDefaults@@YAXXZ:PROC ; C_SetCVarsToDefaults + Line 1166: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 1167: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 1168: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 1169: EXTRN ??0FColorCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FColorCVar::FColorCVar + Line 1170: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 1171: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 1172: EXTRN ?C_DoCommand@@YAXPEBDH@Z:PROC ; C_DoCommand + Line 1173: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 1174: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 1175: EXTRN ?PressKey@FButtonStatus@@QEAA_NH@Z:PROC ; FButtonStatus::PressKey + Line 1176: EXTRN ?ReleaseKey@FButtonStatus@@QEAA_NH@Z:PROC ; FButtonStatus::ReleaseKey + Line 1177: EXTRN ?ResetButtonStates@@YAXXZ:PROC ; ResetButtonStates + Line 1178: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 1179: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 1180: EXTRN ?Mark@GC@@YAXPEAPEAVDObject@@@Z:PROC ; GC::Mark + Line 1181: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 1182: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 1183: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 1184: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 1185: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 1186: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 1187: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 1188: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 1189: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 1190: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 1191: EXTRN ?S_Sound@@YAXHVFSoundID@@MM@Z:PROC ; S_Sound + Line 1192: EXTRN ?G_DeferedInitNew@@YAXPEAUFGameStartup@@@Z:PROC ; G_DeferedInitNew + Line 1193: EXTRN ?Dim@DFrameBuffer@@QEAAXUPalEntry@@MHHHHPEATFRenderStyle@@@Z:PROC ; DFrameBuffer::Dim + Line 1194: EXTRN ?GetPrintableDisplayName@@YA?AVFString@@PEAVPClassActor@@@Z:PROC ; GetPrintableDisplayName + Line 1195: EXTRN ?C_ToggleConsole@@YAXXZ:PROC ; C_ToggleConsole + Line 1196: EXTRN ?C_HideConsole@@YAXXZ:PROC ; C_HideConsole + Line 1197: EXTRN ?C_SetDefaultBindings@@YAXXZ:PROC ; C_SetDefaultBindings + Line 1198: EXTRN ?P_CheckTickerPaused@@YA_NXZ:PROC ; P_CheckTickerPaused + Line 1199: EXTRN ?G_ScreenShot@@YAXPEAD@Z:PROC ; G_ScreenShot + Line 1200: EXTRN ?I_SetMouseCapture@@YAXXZ:PROC ; I_SetMouseCapture + Line 1201: EXTRN ?I_ReleaseMouseCapture@@YAXXZ:PROC ; I_ReleaseMouseCapture + Line 1202: EXTRN ?DoGlobalSetup@FGameConfigFile@@QEAAXXZ:PROC ; FGameConfigFile::DoGlobalSetup + Line 1203: EXTRN ?DoGameSetup@FGameConfigFile@@QEAAXPEBD@Z:PROC ; FGameConfigFile::DoGameSetup + Line 1204: EXTRN ?DoModSetup@FGameConfigFile@@QEAAXPEBD@Z:PROC ; FGameConfigFile::DoModSetup + Line 1205: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 1206: EXTRN ?R_SetViewSize@@YAXH@Z:PROC ; R_SetViewSize + Line 1207: EXTRN ??_EDMenuDescriptor@@UEAAPEAXI@Z:PROC ; DMenuDescriptor::`vector deleting destructor' + Line 1208: EXTRN ??_EDListMenuDescriptor@@UEAAPEAXI@Z:PROC ; DListMenuDescriptor::`vector deleting destructor' + Line 1209: EXTRN ??_EDOptionMenuDescriptor@@UEAAPEAXI@Z:PROC ; DOptionMenuDescriptor::`vector deleting destructor' + Line 1210: EXTRN ??_EDMenu@@UEAAPEAXI@Z:PROC ; DMenu::`vector deleting destructor' + Line 1211: EXTRN ??_EDMenuItemBase@@UEAAPEAXI@Z:PROC ; DMenuItemBase::`vector deleting destructor' + Line 1212: EXTRN ?M_CreateMenus@@YAXXZ:PROC ; M_CreateMenus + Line 1213: EXTRN ?M_ParseMenuDefs@@YAXXZ:PROC ; M_ParseMenuDefs + Line 1214: EXTRN ?M_StartupSkillMenu@@YAXPEAUFGameStartup@@@Z:PROC ; M_StartupSkillMenu + Line 1215: EXTRN ?M_StartMessage@@YAXPEBDHVFName@@@Z:PROC ; M_StartMessage + Line 1216: EXTRN ?MaybePrintMessage@CVMAbortException@@QEAAXXZ:PROC ; CVMAbortException::MaybePrintMessage + Line 1217: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 1218: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 1219: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 1220: EXTRN ??0FUiEvent@@QEAA@PEBUevent_t@@@Z:PROC ; FUiEvent::FUiEvent + Line 1221: EXTRN ??0FInputEvent@@QEAA@PEBUevent_t@@@Z:PROC ; FInputEvent::FInputEvent + Line 1222: EXTRN ?ActivateEndGameMenu@@YAXXZ:PROC ; ActivateEndGameMenu + Line 1223: EXTRN __CxxFrameHandler3:PROC + Line 1224: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 1225: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 1226: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 1227: EXTRN ?devparm@@3_NA:BYTE ; devparm + Line 1228: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 1229: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 1230: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 1231: EXTRN ?usergame@@3_NA:BYTE ; usergame + Line 1232: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 1233: EXTRN ?State@GC@@3W4EGCState@1@A:DWORD ; GC::State + Line 1234: EXTRN ?RegistrationInfo@PField@@2UClassReg@@A:BYTE ; PField::RegistrationInfo + Line 1235: EXTRN ?RegistrationInfo@PFunction@@2UClassReg@@A:BYTE ; PFunction::RegistrationInfo + Line 1236: EXTRN ?AllSkills@@3V?$TArray@UFSkillInfo@@U1@@@A:BYTE ; AllSkills + Line 1237: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 1238: EXTRN ?PlayerClasses@@3V?$TArray@VFPlayerClass@@V1@@@A:BYTE ; PlayerClasses + Line 1239: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 1240: EXTRN ?ConsoleState@@3W4cstate_t@@A:DWORD ; ConsoleState + Line 1241: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 1242: EXTRN ?gameaction@@3W4gameaction_t@@A:DWORD ; gameaction + Line 1243: EXTRN ?chatmodeon@@3HA:DWORD ; chatmodeon + Line 1244: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 1245: EXTRN ?GameConfig@@3PEAVFGameConfigFile@@EA:QWORD ; GameConfig + Line 1246: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 1247: EXTRN ?MenuDescriptors@@3V?$TMap@VFName@@PEAVDMenuDescriptor@@U?$THashTraits@VFName@@@@U?$TValueTraits@PEAVDMenuDescriptor@@@@@@A:BYTE ; MenuDescriptors + Line 1248: EXTRN ?stacktrace@CVMAbortException@@2VFString@@A:QWORD ; CVMAbortException::stacktrace + Line 1249: EXTRN ?DefaultListMenuClass@@3PEAVPClass@@EA:QWORD ; DefaultListMenuClass + Line 1250: EXTRN ?DefaultOptionMenuClass@@3PEAVPClass@@EA:QWORD ; DefaultOptionMenuClass + Line 1251: EXTRN ?screenblocks@@3VFIntCVar@@A:BYTE ; screenblocks + Line 1252: EXTRN __ImageBase:BYTE + Line 1253: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\menudef.cod (117 hits) + Line 237: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 238: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 239: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 240: EXTRN atexit:PROC + Line 241: EXTRN __std_terminate:PROC + Line 242: EXTRN strtod:PROC + Line 243: EXTRN strtoll:PROC + Line 244: EXTRN stricmp:PROC + Line 245: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 246: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 247: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 248: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 249: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 250: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 251: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 252: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 253: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 254: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 255: EXTRN ?ReplaceChars@FString@@QEAAXPEBDD@Z:PROC ; FString::ReplaceChars + Line 256: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 257: EXTRN ??0FStringf@@QEAA@PEBDZZ:PROC ; FStringf::FStringf + Line 258: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 259: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 260: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 261: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 262: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 263: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 264: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 265: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 266: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 267: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 268: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 269: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 270: EXTRN ?FindCVar@@YAPEAVFBaseCVar@@PEBDPEAPEAV1@@Z:PROC ; FindCVar + Line 271: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 272: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 273: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 274: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 275: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 276: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 277: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 278: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 279: EXTRN ?GetNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::GetNumber + Line 280: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 281: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 282: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 283: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 284: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 285: EXTRN ?GetTextColor@FSkillInfo@@QEBAHXZ:PROC ; FSkillInfo::GetTextColor + Line 286: EXTRN ?V_GetColor@@YAHPEBIAEAVFScanner@@@Z:PROC ; V_GetColor + Line 287: EXTRN ?GetPrintableDisplayName@@YA?AVFString@@PEAVPClassActor@@@Z:PROC ; GetPrintableDisplayName + Line 288: EXTRN ?FindFont@FFont@@SAPEAV1@VFName@@@Z:PROC ; FFont::FindFont + Line 289: EXTRN ?V_FindFontColor@@YA?AW4EColorRange@@VFName@@@Z:PROC ; V_FindFontColor + Line 290: EXTRN ?V_GetFont@@YAPEAVFFont@@PEBD@Z:PROC ; V_GetFont + Line 291: EXTRN ?ClearSaveGames@FSavegameManager@@QEAAXXZ:PROC ; FSavegameManager::ClearSaveGames + Line 292: EXTRN ?StaticType@DMenuDescriptor@@UEBAPEAVPClass@@XZ:PROC ; DMenuDescriptor::StaticType + Line 293: EXTRN ??_EDMenuDescriptor@@UEAAPEAXI@Z:PROC ; DMenuDescriptor::`vector deleting destructor' + Line 294: EXTRN ?StaticType@DListMenuDescriptor@@UEBAPEAVPClass@@XZ:PROC ; DListMenuDescriptor::StaticType + Line 295: EXTRN ?PropagateMark@DListMenuDescriptor@@UEAA_KXZ:PROC ; DListMenuDescriptor::PropagateMark + Line 296: EXTRN ??_EDListMenuDescriptor@@UEAAPEAXI@Z:PROC ; DListMenuDescriptor::`vector deleting destructor' + Line 297: EXTRN ?StaticType@DOptionMenuDescriptor@@UEBAPEAVPClass@@XZ:PROC ; DOptionMenuDescriptor::StaticType + Line 298: EXTRN ?GetItem@DOptionMenuDescriptor@@QEAAPEAVDMenuItemBase@@VFName@@@Z:PROC ; DOptionMenuDescriptor::GetItem + Line 299: EXTRN ?PropagateMark@DOptionMenuDescriptor@@UEAA_KXZ:PROC ; DOptionMenuDescriptor::PropagateMark + Line 300: EXTRN ??_EDOptionMenuDescriptor@@UEAAPEAXI@Z:PROC ; DOptionMenuDescriptor::`vector deleting destructor' + Line 301: EXTRN ?CreateOptionMenuItemStaticText@@YAPEAVDMenuItemBase@@PEBDH@Z:PROC ; CreateOptionMenuItemStaticText + Line 302: EXTRN ?CreateOptionMenuItemSubmenu@@YAPEAVDMenuItemBase@@PEBDVFName@@H@Z:PROC ; CreateOptionMenuItemSubmenu + Line 303: EXTRN ?CreateOptionMenuItemControl@@YAPEAVDMenuItemBase@@PEBDVFName@@PEAVFKeyBindings@@@Z:PROC ; CreateOptionMenuItemControl + Line 304: EXTRN ?CreateListMenuItemPatch@@YAPEAVDMenuItemBase@@NNHHVFTextureID@@VFName@@H@Z:PROC ; CreateListMenuItemPatch + Line 305: EXTRN ?CreateListMenuItemText@@YAPEAVDMenuItemBase@@NNHHPEBDPEAVFFont@@UPalEntry@@2VFName@@H@Z:PROC ; CreateListMenuItemText + Line 306: EXTRN ?CreateOptionMenuItemCommand@@YAPEAVDMenuItemBase@@PEBDVFName@@_N@Z:PROC ; CreateOptionMenuItemCommand + Line 307: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDHH_N@Z:PROC ; FWadCollection::CheckNumForName + Line 308: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 309: EXTRN ?I_BuildMIDIMenuList@@YAXPEAUFOptionValues@@@Z:PROC ; I_BuildMIDIMenuList + Line 310: EXTRN ?IsOpenALPresent@@YA_NXZ:PROC ; IsOpenALPresent + Line 311: EXTRN ?strbin1@@YA?AVFString@@PEBD@Z:PROC ; strbin1 + Line 312: EXTRN ?VMCallWithDefaults@@YAHPEAVVMFunction@@AEAV?$TArray@UVMValue@@U1@@@PEAUVMReturn@@H@Z:PROC ; VMCallWithDefaults + Line 313: EXTRN ?DescriptiveName@PType@@QEBAPEBDXZ:PROC ; PType::DescriptiveName + Line 314: EXTRN ?NewPointer@@YAPEAVPPointer@@PEAVPType@@_N@Z:PROC ; NewPointer + Line 315: EXTRN ?NewPointer@@YAPEAVPPointer@@PEAVPClass@@_N@Z:PROC ; NewPointer + Line 316: EXTRN ?NewStruct@@YAPEAVPStruct@@VFName@@PEAVPTypeBase@@_N@Z:PROC ; NewStruct + Line 317: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 318: EXTRN ?I_BuildALDeviceList@@YAXPEAUFOptionValues@@@Z:PROC ; I_BuildALDeviceList + Line 319: EXTRN ?I_BuildALResamplersList@@YAXPEAUFOptionValues@@@Z:PROC ; I_BuildALResamplersList + Line 320: EXTRN adl_getBanksCount:PROC + Line 321: EXTRN adl_getBankNames:PROC + Line 322: EXTRN __CxxFrameHandler3:PROC + Line 323: EXTRN memmove:PROC + Line 324: EXTRN memset:PROC + Line 325: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 326: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 327: EXTRN ?State@GC@@3W4EGCState@1@A:DWORD ; GC::State + Line 328: EXTRN ?RegistrationInfo@PFunction@@2UClassReg@@A:BYTE ; PFunction::RegistrationInfo + Line 329: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 330: EXTRN ?AllSkills@@3V?$TArray@UFSkillInfo@@U1@@@A:BYTE ; AllSkills + Line 331: EXTRN ?DefaultSkill@@3HA:DWORD ; DefaultSkill + Line 332: EXTRN ?AllEpisodes@@3V?$TArray@UFEpisode@@U1@@@A:BYTE ; AllEpisodes + Line 333: EXTRN ?PlayerClasses@@3V?$TArray@VFPlayerClass@@V1@@@A:BYTE ; PlayerClasses + Line 334: EXTRN ?savegameManager@@3UFSavegameManager@@A:BYTE ; savegameManager + Line 335: EXTRN ?CurrentMenu@@3PEAVDMenu@@EA:QWORD ; CurrentMenu + Line 336: EXTRN ?RegistrationInfo@DListMenuDescriptor@@2UClassReg@@A:BYTE ; DListMenuDescriptor::RegistrationInfo + Line 337: EXTRN ?RegistrationInfo@DOptionMenuDescriptor@@2UClassReg@@A:BYTE ; DOptionMenuDescriptor::RegistrationInfo + Line 338: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 339: EXTRN ?Bindings@@3VFKeyBindings@@A:BYTE ; Bindings + Line 340: EXTRN ?KeySections@@3V?$TArray@UFKeySection@@U1@@@A:BYTE ; KeySections + Line 341: EXTRN ?GameNames@@3PAPEBDA:BYTE ; GameNames + Line 342: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 343: EXTRN ?TypeBool@@3PEAVPBool@@EA:QWORD ; TypeBool + Line 344: EXTRN ?TypeString@@3PEAVPString@@EA:QWORD ; TypeString + Line 345: EXTRN ?TypeName@@3PEAVPName@@EA:QWORD ; TypeName + Line 346: EXTRN ?TypeColor@@3PEAVPColor@@EA:QWORD ; TypeColor + Line 347: EXTRN ?TypeTextureID@@3PEAVPTextureID@@EA:QWORD ; TypeTextureID + Line 348: EXTRN ?TypeFont@@3PEAVPPointer@@EA:QWORD ; TypeFont + Line 349: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 350: EXTRN ?sfmanager@@3VFSoundFontManager@@A:BYTE ; sfmanager + Line 351: EXTRN ?restart@@3HA:DWORD ; restart + Line 352: EXTRN _fltused:DWORD + Line 353: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\messagebox.cod (42 hits) + Line 96: EXTRN atexit:PROC + Line 97: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 98: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 99: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 100: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 101: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 102: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 103: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 104: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 105: EXTRN ?S_Sound@@YAXHVFSoundID@@MM@Z:PROC ; S_Sound + Line 106: EXTRN ?M_ActivateMenu@@YAXPEAVDMenu@@@Z:PROC ; M_ActivateMenu + Line 107: EXTRN ?M_ClearMenus@@YAXXZ:PROC ; M_ClearMenus + Line 108: EXTRN ?M_StartControlPanel@@YAX_N@Z:PROC ; M_StartControlPanel + Line 109: EXTRN ?M_SetMenu@@YAXVFName@@H@Z:PROC ; M_SetMenu + Line 110: EXTRN ?D_StartTitle@@YAXXZ:PROC ; D_StartTitle + Line 111: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 112: EXTRN ?I_WaitVBL@@YAXH@Z:PROC ; I_WaitVBL + Line 113: EXTRN ?ST_Endoom@@YAXXZ:PROC ; ST_Endoom + Line 114: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 115: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 116: EXTRN ?G_LoadGame@@YAXPEBD_N@Z:PROC ; G_LoadGame + Line 117: EXTRN ?G_SaveGame@@YAXPEBD0@Z:PROC ; G_SaveGame + Line 118: EXTRN ?G_CheckDemoStatus@@YA_NXZ:PROC ; G_CheckDemoStatus + Line 119: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 120: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 121: EXTRN __CxxFrameHandler3:PROC + Line 122: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 123: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 124: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 125: EXTRN ?menuactive@@3W4EMenuState@@A:DWORD ; menuactive + Line 126: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 127: EXTRN ?usergame@@3_NA:BYTE ; usergame + Line 128: EXTRN ?gametic@@3HA:DWORD ; gametic + Line 129: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 130: EXTRN ?snd_menuvolume@@3VFFloatCVar@@A:BYTE ; snd_menuvolume + Line 131: EXTRN ?savegameManager@@3UFSavegameManager@@A:BYTE ; savegameManager + Line 132: EXTRN ?CurrentMenu@@3PEAVDMenu@@EA:QWORD ; CurrentMenu + Line 133: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 134: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 135: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 136: EXTRN ?saveloadconfirmation@@3VFBoolCVar@@A:BYTE ; saveloadconfirmation + Line 137: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\midisource.cod (6 hits) + Line 43: EXTRN ?_Xbad_function_call@std@@YAXXZ:PROC ; std::_Xbad_function_call + Line 44: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 45: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 46: EXTRN __CxxFrameHandler3:PROC + Line 47: EXTRN memcpy:PROC + Line 48: EXTRN memset:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\midisource_hmi.cod (23 hits) + Line 48: EXTRN _purecall:PROC + Line 49: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 50: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 51: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 52: EXTRN __std_terminate:PROC + Line 53: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 54: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 55: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 56: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 57: EXTRN ?VolumeControllerChange@MIDISource@@IEAAHHH@Z:PROC ; MIDISource::VolumeControllerChange + Line 58: EXTRN ?SetTempo@MIDISource@@IEAAXH@Z:PROC ; MIDISource::SetTempo + Line 59: EXTRN ?CheckCaps@MIDISource@@UEAAXH@Z:PROC ; MIDISource::CheckCaps + Line 60: EXTRN ?PrecacheData@MIDISource@@UEAA?AV?$TArray@GG@@XZ:PROC ; MIDISource::PrecacheData + Line 61: EXTRN ?SetMIDISubsong@MIDISource@@UEAA_NH@Z:PROC ; MIDISource::SetMIDISubsong + Line 62: EXTRN ??_EMIDISource@@UEAAPEAXI@Z:PROC ; MIDISource::`vector deleting destructor' + Line 63: EXTRN ??_EHMISong@@UEAAPEAXI@Z:PROC ; HMISong::`vector deleting destructor' + Line 64: EXTRN __CxxFrameHandler3:PROC + Line 65: EXTRN memcmp:PROC + Line 66: EXTRN memcpy:PROC + Line 67: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 68: EXTRN ?MIDI_EventLengths@@3PADA:BYTE ; MIDI_EventLengths + Line 69: EXTRN ?MIDI_CommonLengths@@3PADA:BYTE ; MIDI_CommonLengths + Line 70: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\midisource_mus.cod (17 hits) + Line 30: EXTRN _purecall:PROC + Line 31: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 32: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 33: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 34: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 35: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 36: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 37: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 38: EXTRN ?VolumeControllerChange@MIDISource@@IEAAHHH@Z:PROC ; MIDISource::VolumeControllerChange + Line 39: EXTRN ?CheckCaps@MIDISource@@UEAAXH@Z:PROC ; MIDISource::CheckCaps + Line 40: EXTRN ?PrecacheData@MIDISource@@UEAA?AV?$TArray@GG@@XZ:PROC ; MIDISource::PrecacheData + Line 41: EXTRN ?SetMIDISubsong@MIDISource@@UEAA_NH@Z:PROC ; MIDISource::SetMIDISubsong + Line 42: EXTRN ??_EMIDISource@@UEAAPEAXI@Z:PROC ; MIDISource::`vector deleting destructor' + Line 43: EXTRN ??_EMUSSong2@@UEAAPEAXI@Z:PROC ; MUSSong2::`vector deleting destructor' + Line 44: EXTRN __CxxFrameHandler3:PROC + Line 45: EXTRN memcpy:PROC + Line 46: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\midisource_smf.cod (22 hits) + Line 34: EXTRN _purecall:PROC + Line 35: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 36: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 37: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 38: EXTRN __std_terminate:PROC + Line 39: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 40: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 41: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 42: EXTRN ?VolumeControllerChange@MIDISource@@IEAAHHH@Z:PROC ; MIDISource::VolumeControllerChange + Line 43: EXTRN ?SetTempo@MIDISource@@IEAAXH@Z:PROC ; MIDISource::SetTempo + Line 44: EXTRN ?ClampLoopCount@MIDISource@@IEAAHH@Z:PROC ; MIDISource::ClampLoopCount + Line 45: EXTRN ?CheckCaps@MIDISource@@UEAAXH@Z:PROC ; MIDISource::CheckCaps + Line 46: EXTRN ?PrecacheData@MIDISource@@UEAA?AV?$TArray@GG@@XZ:PROC ; MIDISource::PrecacheData + Line 47: EXTRN ?SetMIDISubsong@MIDISource@@UEAA_NH@Z:PROC ; MIDISource::SetMIDISubsong + Line 48: EXTRN ??_EMIDISource@@UEAAPEAXI@Z:PROC ; MIDISource::`vector deleting destructor' + Line 49: EXTRN ??_EMIDISong2@@UEAAPEAXI@Z:PROC ; MIDISong2::`vector deleting destructor' + Line 50: EXTRN __CxxFrameHandler3:PROC + Line 51: EXTRN memcpy:PROC + Line 52: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 53: EXTRN ?MIDI_EventLengths@@3PADA:BYTE ; MIDI_EventLengths + Line 54: EXTRN ?MIDI_CommonLengths@@3PADA:BYTE ; MIDI_CommonLengths + Line 55: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\midisource_xmi.cod (26 hits) + Line 39: EXTRN _purecall:PROC + Line 40: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 41: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 42: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 43: EXTRN __std_terminate:PROC + Line 44: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 45: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 46: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 47: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 48: EXTRN ?VolumeControllerChange@MIDISource@@IEAAHHH@Z:PROC ; MIDISource::VolumeControllerChange + Line 49: EXTRN ?ClampLoopCount@MIDISource@@IEAAHH@Z:PROC ; MIDISource::ClampLoopCount + Line 50: EXTRN ?CheckCaps@MIDISource@@UEAAXH@Z:PROC ; MIDISource::CheckCaps + Line 51: EXTRN ?PrecacheData@MIDISource@@UEAA?AV?$TArray@GG@@XZ:PROC ; MIDISource::PrecacheData + Line 52: EXTRN ?SetMIDISubsong@MIDISource@@UEAA_NH@Z:PROC ; MIDISource::SetMIDISubsong + Line 53: EXTRN ??_EMIDISource@@UEAAPEAXI@Z:PROC ; MIDISource::`vector deleting destructor' + Line 54: EXTRN ?AddNoteOff@NoteOffQueue@@QEAAXIEE@Z:PROC ; NoteOffQueue::AddNoteOff + Line 55: EXTRN ?AdvanceTime@NoteOffQueue@@QEAAXI@Z:PROC ; NoteOffQueue::AdvanceTime + Line 56: EXTRN ?Pop@NoteOffQueue@@QEAA_NAEAUAutoNoteOff@@@Z:PROC ; NoteOffQueue::Pop + Line 57: EXTRN ??_EXMISong@@UEAAPEAXI@Z:PROC ; XMISong::`vector deleting destructor' + Line 58: EXTRN __CxxFrameHandler3:PROC + Line 59: EXTRN memcpy:PROC + Line 60: EXTRN memset:PROC + Line 61: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 62: EXTRN ?MIDI_EventLengths@@3PADA:BYTE ; MIDI_EventLengths + Line 63: EXTRN ?MIDI_CommonLengths@@3PADA:BYTE ; MIDI_CommonLengths + Line 64: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\mix.cod (25 hits) + Line 64: EXTRN atexit:PROC + Line 65: EXTRN ?free_voice@Player@TimidityPlus@@QEAAXH@Z:PROC ; TimidityPlus::Player::free_voice + Line 66: EXTRN ?recompute_voice_filter@Player@TimidityPlus@@QEAAXH@Z:PROC ; TimidityPlus::Player::recompute_voice_filter + Line 67: EXTRN ?recompute_freq@Player@TimidityPlus@@QEAAXH@Z:PROC ; TimidityPlus::Player::recompute_freq + Line 68: EXTRN ?resample_voice@Resampler@TimidityPlus@@QEAAPEAHHPEAH@Z:PROC ; TimidityPlus::Resampler::resample_voice + Line 69: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 70: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 71: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 72: EXTRN __chkstk:PROC + Line 73: EXTRN memset:PROC + Line 74: EXTRN pow:PROC + Line 75: EXTRN sin:PROC + Line 76: EXTRN ?timidity_modulation_envelope@TimidityPlus@@3_NA:BYTE ; TimidityPlus::timidity_modulation_envelope + Line 77: EXTRN ?playback_rate@TimidityPlus@@3HA:DWORD ; TimidityPlus::playback_rate + Line 78: EXTRN ?control_ratio@TimidityPlus@@3HA:DWORD ; TimidityPlus::control_ratio + Line 79: EXTRN ?attack_vol_table@TimidityPlus@@3PANA:BYTE ; TimidityPlus::attack_vol_table + Line 80: EXTRN ?sc_eg_attack_table@TimidityPlus@@3PAMA:BYTE ; TimidityPlus::sc_eg_attack_table + Line 81: EXTRN ?sc_eg_decay_table@TimidityPlus@@3PAMA:BYTE ; TimidityPlus::sc_eg_decay_table + Line 82: EXTRN ?sc_eg_release_table@TimidityPlus@@3PAMA:BYTE ; TimidityPlus::sc_eg_release_table + Line 83: EXTRN ?sb_vol_table@TimidityPlus@@3PANA:BYTE ; TimidityPlus::sb_vol_table + Line 84: EXTRN ?modenv_vol_table@TimidityPlus@@3PANA:BYTE ; TimidityPlus::modenv_vol_table + Line 85: EXTRN ?chamberlin_filter_db_to_q_table@TimidityPlus@@3QBMB:BYTE ; TimidityPlus::chamberlin_filter_db_to_q_table + Line 86: EXTRN __ImageBase:BYTE + Line 87: EXTRN __isa_available:DWORD + Line 88: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\models.cod (108 hits) + Line 129: EXTRN _purecall:PROC + Line 130: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 131: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 132: EXTRN atexit:PROC + Line 133: EXTRN __std_terminate:PROC + Line 134: EXTRN stricmp:PROC + Line 135: EXTRN strnicmp:PROC + Line 136: EXTRN toupper:PROC + Line 137: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 138: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 139: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 140: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 141: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 142: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 143: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 144: EXTRN ??HFString@@QEBA?AV0@PEBD@Z:PROC ; FString::operator+ + Line 145: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 146: EXTRN ?LastIndexOf@FString@@QEBAJD@Z:PROC ; FString::LastIndexOf + Line 147: EXTRN ?LastIndexOf@FString@@QEBAJPEBD@Z:PROC ; FString::LastIndexOf + Line 148: EXTRN ?Substitute@FString@@QEAAXPEBD0@Z:PROC ; FString::Substitute + Line 149: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 150: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 151: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 152: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 153: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 154: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 155: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 156: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 157: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 158: EXTRN ?FixPathSeperator@@YAXPEAD@Z:PROC ; FixPathSeperator + Line 159: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 160: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 161: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 162: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 163: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 164: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 165: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 166: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 167: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 168: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 169: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 170: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 171: EXTRN get_crc_table:PROC + Line 172: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 173: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 174: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 175: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 176: EXTRN ?FindPSprite@player_t@@QEAAPEAVDPSprite@@H@Z:PROC ; player_t::FindPSprite + Line 177: EXTRN ?translate@VSMatrix@@QEAAXMMM@Z:PROC ; VSMatrix::translate + Line 178: EXTRN ?scale@VSMatrix@@QEAAXMMM@Z:PROC ; VSMatrix::scale + Line 179: EXTRN ?rotate@VSMatrix@@QEAAXMMMM@Z:PROC ; VSMatrix::rotate + Line 180: EXTRN ?loadIdentity@VSMatrix@@QEAAXXZ:PROC ; VSMatrix::loadIdentity + Line 181: EXTRN ?R_LoadKVX@@YAPEAUFVoxel@@H@Z:PROC ; R_LoadKVX + Line 182: EXTRN ??_EFModel@@UEAAPEAXI@Z:PROC ; FModel::`vector deleting destructor' + Line 183: EXTRN ??1FDMDModel@@UEAA@XZ:PROC ; FDMDModel::~FDMDModel + Line 184: EXTRN ?Load@FDMDModel@@UEAA_NPEBDH0H@Z:PROC ; FDMDModel::Load + Line 185: EXTRN ?FindFrame@FDMDModel@@UEAAHPEBD@Z:PROC ; FDMDModel::FindFrame + Line 186: EXTRN ?RenderFrame@FDMDModel@@UEAAXPEAVFModelRenderer@@PEAVFTexture@@HHNH@Z:PROC ; FDMDModel::RenderFrame + Line 187: EXTRN ?LoadGeometry@FDMDModel@@UEAAXXZ:PROC ; FDMDModel::LoadGeometry + Line 188: EXTRN ?AddSkins@FDMDModel@@UEAAXPEAE@Z:PROC ; FDMDModel::AddSkins + Line 189: EXTRN ?BuildVertexBuffer@FDMDModel@@UEAAXPEAVFModelRenderer@@@Z:PROC ; FDMDModel::BuildVertexBuffer + Line 190: EXTRN ??_EFDMDModel@@UEAAPEAXI@Z:PROC ; FDMDModel::`vector deleting destructor' + Line 191: EXTRN ??1FMD2Model@@UEAA@XZ:PROC ; FMD2Model::~FMD2Model + Line 192: EXTRN ?Load@FMD2Model@@UEAA_NPEBDH0H@Z:PROC ; FMD2Model::Load + Line 193: EXTRN ?LoadGeometry@FMD2Model@@UEAAXXZ:PROC ; FMD2Model::LoadGeometry + Line 194: EXTRN ??_EFMD2Model@@UEAAPEAXI@Z:PROC ; FMD2Model::`vector deleting destructor' + Line 195: EXTRN ?Load@FMD3Model@@UEAA_NPEBDH0H@Z:PROC ; FMD3Model::Load + Line 196: EXTRN ?FindFrame@FMD3Model@@UEAAHPEBD@Z:PROC ; FMD3Model::FindFrame + Line 197: EXTRN ?RenderFrame@FMD3Model@@UEAAXPEAVFModelRenderer@@PEAVFTexture@@HHNH@Z:PROC ; FMD3Model::RenderFrame + Line 198: EXTRN ?BuildVertexBuffer@FMD3Model@@UEAAXPEAVFModelRenderer@@@Z:PROC ; FMD3Model::BuildVertexBuffer + Line 199: EXTRN ?AddSkins@FMD3Model@@UEAAXPEAE@Z:PROC ; FMD3Model::AddSkins + Line 200: EXTRN ??_EFMD3Model@@UEAAPEAXI@Z:PROC ; FMD3Model::`vector deleting destructor' + Line 201: EXTRN ??0FVoxelModel@@QEAA@PEAUFVoxel@@_N@Z:PROC ; FVoxelModel::FVoxelModel + Line 202: EXTRN ?Load@FUE1Model@@UEAA_NPEBDH0H@Z:PROC ; FUE1Model::Load + Line 203: EXTRN ?FindFrame@FUE1Model@@UEAAHPEBD@Z:PROC ; FUE1Model::FindFrame + Line 204: EXTRN ?RenderFrame@FUE1Model@@UEAAXPEAVFModelRenderer@@PEAVFTexture@@HHNH@Z:PROC ; FUE1Model::RenderFrame + Line 205: EXTRN ?BuildVertexBuffer@FUE1Model@@UEAAXPEAVFModelRenderer@@@Z:PROC ; FUE1Model::BuildVertexBuffer + Line 206: EXTRN ?AddSkins@FUE1Model@@UEAAXPEAE@Z:PROC ; FUE1Model::AddSkins + Line 207: EXTRN ??1FUE1Model@@UEAA@XZ:PROC ; FUE1Model::~FUE1Model + Line 208: EXTRN ??_EFUE1Model@@UEAAPEAXI@Z:PROC ; FUE1Model::`vector deleting destructor' + Line 209: EXTRN ??1FOBJModel@@UEAA@XZ:PROC ; FOBJModel::~FOBJModel + Line 210: EXTRN ?Load@FOBJModel@@UEAA_NPEBDH0H@Z:PROC ; FOBJModel::Load + Line 211: EXTRN ?FindFrame@FOBJModel@@UEAAHPEBD@Z:PROC ; FOBJModel::FindFrame + Line 212: EXTRN ?RenderFrame@FOBJModel@@UEAAXPEAVFModelRenderer@@PEAVFTexture@@HHNH@Z:PROC ; FOBJModel::RenderFrame + Line 213: EXTRN ?BuildVertexBuffer@FOBJModel@@UEAAXPEAVFModelRenderer@@@Z:PROC ; FOBJModel::BuildVertexBuffer + Line 214: EXTRN ?AddSkins@FOBJModel@@UEAAXPEAE@Z:PROC ; FOBJModel::AddSkins + Line 215: EXTRN ??_EFOBJModel@@UEAAPEAXI@Z:PROC ; FOBJModel::`vector deleting destructor' + Line 216: EXTRN ?I_GetTime@@YAHXZ:PROC ; I_GetTime + Line 217: EXTRN ?I_GetTimeFrac@@YANXZ:PROC ; I_GetTimeFrac + Line 218: EXTRN __CxxFrameHandler3:PROC + Line 219: EXTRN __libm_sse2_sincos_:PROC + Line 220: EXTRN atan:PROC + Line 221: EXTRN memset:PROC + Line 222: EXTRN strcmp:PROC + Line 223: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 224: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 225: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 226: EXTRN ?ConsoleState@@3W4cstate_t@@A:DWORD ; ConsoleState + Line 227: EXTRN ?menuactive@@3W4EMenuState@@A:DWORD ; menuactive + Line 228: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 229: EXTRN ?SpriteFrames@@3V?$TArray@Uspriteframe_t@@U1@@@A:BYTE ; SpriteFrames + Line 230: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 231: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 232: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 233: EXTRN ?Voxels@@3V?$TDeletingArray@PEAUFVoxel@@PEAU1@@@A:BYTE ; Voxels + Line 234: EXTRN ?VoxelDefs@@3V?$TDeletingArray@PEAUFVoxelDef@@PEAU1@@@A:BYTE ; VoxelDefs + Line 235: EXTRN ?r_drawvoxels@@3VFBoolCVar@@A:BYTE ; r_drawvoxels + Line 236: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\models_md2.cod (17 hits) + Line 33: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 34: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 35: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 36: EXTRN stricmp:PROC + Line 37: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 38: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 39: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 40: EXTRN ?LoadSkin@@YA?AVFTextureID@@PEBD0@Z:PROC ; LoadSkin + Line 41: EXTRN ??1FModel@@UEAA@XZ:PROC ; FModel::~FModel + Line 42: EXTRN ??_EFDMDModel@@UEAAPEAXI@Z:PROC ; FDMDModel::`vector deleting destructor' + Line 43: EXTRN __CxxFrameHandler3:PROC + Line 44: EXTRN cosf:PROC + Line 45: EXTRN memcpy:PROC + Line 46: EXTRN sinf:PROC + Line 47: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 48: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 49: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\models_md3.cod (16 hits) + Line 22: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 23: EXTRN __std_terminate:PROC + Line 24: EXTRN strncpy:PROC + Line 25: EXTRN stricmp:PROC + Line 26: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 27: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 28: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 29: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 30: EXTRN ?FixPathSeperator@@YAXPEAD@Z:PROC ; FixPathSeperator + Line 31: EXTRN ?LoadSkin@@YA?AVFTextureID@@PEBD0@Z:PROC ; LoadSkin + Line 32: EXTRN __CxxFrameHandler3:PROC + Line 33: EXTRN cos:PROC + Line 34: EXTRN sin:PROC + Line 35: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 36: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 37: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\models_obj.cod (45 hits) + Line 56: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 57: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 58: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 59: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 60: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 61: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 62: EXTRN ??_V@YAXPEAX_K@Z:PROC ; operator delete[] + Line 63: EXTRN __std_terminate:PROC + Line 64: EXTRN atoi:PROC + Line 65: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 66: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 67: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 68: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 69: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 70: EXTRN ?LockBuffer@FString@@QEAAPEADXZ:PROC ; FString::LockBuffer + Line 71: EXTRN ?UnlockBuffer@FString@@QEAAXXZ:PROC ; FString::UnlockBuffer + Line 72: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 73: EXTRN ?IndexOf@FString@@QEBAJPEBDJ@Z:PROC ; FString::IndexOf + Line 74: EXTRN ?IndexOf@FString@@QEBAJDJ@Z:PROC ; FString::IndexOf + Line 75: EXTRN ?IndexOfAny@FString@@QEBAJPEBDJ@Z:PROC ; FString::IndexOfAny + Line 76: EXTRN ?ReplaceChars@FString@@QEAAXDD@Z:PROC ; FString::ReplaceChars + Line 77: EXTRN ?Split@FString@@QEBA?AV?$TArray@VFString@@V1@@@PEBDW4EmptyTokenType@1@@Z:PROC ; FString::Split + Line 78: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 79: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 80: EXTRN ?GetLumpFullPath@FWadCollection@@QEBA?AVFString@@H@Z:PROC ; FWadCollection::GetLumpFullPath + Line 81: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 82: EXTRN ?OpenString@FScanner@@QEAAXPEBDVFString@@@Z:PROC ; FScanner::OpenString + Line 83: EXTRN ?Close@FScanner@@QEAAXXZ:PROC ; FScanner::Close + Line 84: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 85: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 86: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 87: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 88: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 89: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 90: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 91: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 92: EXTRN ?LoadSkin@@YA?AVFTextureID@@PEBD0@Z:PROC ; LoadSkin + Line 93: EXTRN ??1FModel@@UEAA@XZ:PROC ; FModel::~FModel + Line 94: EXTRN ??_EFOBJModel@@UEAAPEAXI@Z:PROC ; FOBJModel::`vector deleting destructor' + Line 95: EXTRN __CxxFrameHandler3:PROC + Line 96: EXTRN memcpy:PROC + Line 97: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 98: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 99: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 100: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\models_ue1.cod (23 hits) + Line 37: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 38: EXTRN __std_terminate:PROC + Line 39: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 40: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 41: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 42: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 43: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 44: EXTRN ?IndexOf@FString@@QEBAJPEBDJ@Z:PROC ; FString::IndexOf + Line 45: EXTRN ?Substitute@FString@@QEAAXPEBD0@Z:PROC ; FString::Substitute + Line 46: EXTRN ??0FMemLump@@QEAA@XZ:PROC ; FMemLump::FMemLump + Line 47: EXTRN ??4FMemLump@@QEAAAEAV0@AEBV0@@Z:PROC ; FMemLump::operator= + Line 48: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 49: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 50: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 51: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 52: EXTRN c_sqrt:PROC + Line 53: EXTRN ??1FModel@@UEAA@XZ:PROC ; FModel::~FModel + Line 54: EXTRN ??_EFUE1Model@@UEAAPEAXI@Z:PROC ; FUE1Model::`vector deleting destructor' + Line 55: EXTRN __CxxFrameHandler3:PROC + Line 56: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 57: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 58: EXTRN __isa_available:DWORD + Line 59: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\models_voxel.cod (31 hits) + Line 44: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 45: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 46: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 47: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 48: EXTRN __std_terminate:PROC + Line 49: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 50: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 51: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 52: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 53: EXTRN ?CopyPixelData@FBitmap@@QEAAXHHPEBEHHHHHPEAUPalEntry@@PEAUFCopyInfo@@@Z:PROC ; FBitmap::CopyPixelData + Line 54: EXTRN ?AddTexture@FTextureManager@@QEAA?AVFTextureID@@PEAVFTexture@@@Z:PROC ; FTextureManager::AddTexture + Line 55: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 56: EXTRN ??1FVoxelMipLevel@@QEAA@XZ:PROC ; FVoxelMipLevel::~FVoxelMipLevel + Line 57: EXTRN ?GetSlabData@FVoxelMipLevel@@QEBAPEAE_N@Z:PROC ; FVoxelMipLevel::GetSlabData + Line 58: EXTRN ??0FModel@@QEAA@XZ:PROC ; FModel::FModel + Line 59: EXTRN ??1FModel@@UEAA@XZ:PROC ; FModel::~FModel + Line 60: EXTRN ??_EFVoxelModel@@UEAAPEAXI@Z:PROC ; FVoxelModel::`vector deleting destructor' + Line 61: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 62: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 63: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 64: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 65: EXTRN ??0FImageTexture@@QEAA@PEAVFImageSource@@PEBD@Z:PROC ; FImageTexture::FImageTexture + Line 66: EXTRN ??_EFVoxelTexture@@UEAAPEAXI@Z:PROC ; FVoxelTexture::`vector deleting destructor' + Line 67: EXTRN __CxxFrameHandler3:PROC + Line 68: EXTRN memcpy:PROC + Line 69: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 70: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 71: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 72: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 73: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + Line 74: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\mpg123_decoder.cod (13 hits) + Line 102: EXTRN _purecall:PROC + Line 103: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 104: EXTRN atexit:PROC + Line 105: EXTRN __std_terminate:PROC + Line 106: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 107: EXTRN ?readAll@SoundDecoder@@UEAA?AV?$TArray@EE@@XZ:PROC ; SoundDecoder::readAll + Line 108: EXTRN ??_ESoundDecoder@@UEAAPEAXI@Z:PROC ; SoundDecoder::`vector deleting destructor' + Line 109: EXTRN ??_EMPG123Decoder@@UEAAPEAXI@Z:PROC ; MPG123Decoder::`vector deleting destructor' + Line 110: EXTRN ?Load@FModule@@QEAA_NV?$initializer_list@PEBD@std@@@Z:PROC ; FModule::Load + Line 111: EXTRN ?Unload@FModule@@QEAAXXZ:PROC ; FModule::Unload + Line 112: EXTRN ?NicePath@@YA?AVFString@@PEBD@Z:PROC ; NicePath + Line 113: EXTRN __CxxFrameHandler3:PROC + Line 114: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\mtherr.cod (2 hits) + Line 54: EXTRN __acrt_iob_func:PROC + Line 55: EXTRN __stdio_common_vfprintf:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\multipatchtexture.cod (28 hits) + Line 23: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 24: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 25: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 26: EXTRN __std_terminate:PROC + Line 27: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 28: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 29: EXTRN ?TranslationToTable@@YAPEAUFRemapTable@@H@Z:PROC ; TranslationToTable + Line 30: EXTRN ?CopyPixelDataRGB@FBitmap@@QEAAXHHPEBEHHHHHHPEAUFCopyInfo@@HHH@Z:PROC ; FBitmap::CopyPixelDataRGB + Line 31: EXTRN ?ClipCopyPixelRect@@YA_NPEBUFClipRect@@AEAH1AEAPEBE1111H@Z:PROC ; ClipCopyPixelRect + Line 32: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 33: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 34: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 35: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 36: EXTRN ?GetCachedPalettedPixels@FImageSource@@QEAA?AUPalettedPixels@@H@Z:PROC ; FImageSource::GetCachedPalettedPixels + Line 37: EXTRN ?GetCachedBitmap@FImageSource@@QEAA?AVFBitmap@@PEAUPalEntry@@HPEAH@Z:PROC ; FImageSource::GetCachedBitmap + Line 38: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 39: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 40: EXTRN ??_EFMultiPatchTexture@@UEAAPEAXI@Z:PROC ; FMultiPatchTexture::`vector deleting destructor' + Line 41: EXTRN __CxxFrameHandler3:PROC + Line 42: EXTRN memcpy:PROC + Line 43: EXTRN memset:PROC + Line 44: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 45: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 46: EXTRN ?RGB256k@@3TColorTable256k@@A:BYTE ; RGB256k + Line 47: EXTRN ?SpecialColormaps@@3V?$TArray@UFSpecialColormap@@U1@@@A:BYTE ; SpecialColormaps + Line 48: EXTRN ?DesaturateColormap@@3PAY0BAA@EA:BYTE ; DesaturateColormap + Line 49: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 50: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\multipatchtexturebuilder.cod (57 hits) + Line 95: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 96: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 97: EXTRN __std_terminate:PROC + Line 98: EXTRN stricmp:PROC + Line 99: EXTRN strnicmp:PROC + Line 100: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 101: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 102: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 103: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 104: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 105: EXTRN ?ToUpper@FString@@QEAAXXZ:PROC ; FString::ToUpper + Line 106: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 107: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 108: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 109: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 110: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 111: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 112: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 113: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 114: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 115: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 116: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 117: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 118: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 119: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 120: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 121: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 122: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 123: EXTRN ?MatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MatchString + Line 124: EXTRN ?MustMatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MustMatchString + Line 125: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 126: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 127: EXTRN ??0FScriptPosition@@QEAA@AEBU0@@Z:PROC ; FScriptPosition::FScriptPosition + Line 128: EXTRN ??0FScriptPosition@@QEAA@AEAVFScanner@@@Z:PROC ; FScriptPosition::FScriptPosition + Line 129: EXTRN ??4FScriptPosition@@QEAAAEAU0@AEBU0@@Z:PROC ; FScriptPosition::operator= + Line 130: EXTRN ?Message@FScriptPosition@@QEBAXHPEBDZZ:PROC ; FScriptPosition::Message + Line 131: EXTRN ??0FRemapTable@@QEAA@H@Z:PROC ; FRemapTable::FRemapTable + Line 132: EXTRN ??1FRemapTable@@QEAA@XZ:PROC ; FRemapTable::~FRemapTable + Line 133: EXTRN ?MakeIdentity@FRemapTable@@QEAAXXZ:PROC ; FRemapTable::MakeIdentity + Line 134: EXTRN ?AddToTranslation@FRemapTable@@QEAA_NPEBD@Z:PROC ; FRemapTable::AddToTranslation + Line 135: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 136: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 137: EXTRN ?ListTextures@FTextureManager@@QEAAHPEBDAEAV?$TArray@VFTextureID@@V1@@@_N@Z:PROC ; FTextureManager::ListTextures + Line 138: EXTRN ?AddTexture@FTextureManager@@QEAA?AVFTextureID@@PEAVFTexture@@@Z:PROC ; FTextureManager::AddTexture + Line 139: EXTRN ?AddSpecialColormap@@YAHMMMMMM@Z:PROC ; AddSpecialColormap + Line 140: EXTRN ?V_GetColor@@YAHPEBIAEAVFScanner@@@Z:PROC ; V_GetColor + Line 141: EXTRN ??0FImageTexture@@QEAA@PEAVFImageSource@@PEBD@Z:PROC ; FImageTexture::FImageTexture + Line 142: EXTRN ??0FMultiPatchTexture@@QEAA@HHAEBV?$TArray@UTexPart@@U1@@@_N1@Z:PROC ; FMultiPatchTexture::FMultiPatchTexture + Line 143: EXTRN __CxxFrameHandler3:PROC + Line 144: EXTRN memmove:PROC + Line 145: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 146: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 147: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 148: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 149: EXTRN ?StartScreen@@3PEAVFStartupScreen@@EA:QWORD ; StartScreen + Line 150: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 151: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_adlmidi_mididevice.cod (61 hits) + Line 17: EXTRN ?currSong@@3PEAVMusInfo@@EA:QWORD ; currSong + Line 79: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 80: EXTRN atexit:PROC + Line 81: EXTRN __std_terminate:PROC + Line 82: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 83: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 84: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 85: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 86: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 87: EXTRN ?PrepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::PrepareHeader + Line 88: EXTRN ?UnprepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::UnprepareHeader + Line 89: EXTRN ?FakeVolume@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::FakeVolume + Line 90: EXTRN ?InitPlayback@MIDIDevice@@UEAAXXZ:PROC ; MIDIDevice::InitPlayback + Line 91: EXTRN ?Update@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::Update + Line 92: EXTRN ?PrecacheInstruments@MIDIDevice@@UEAAXPEBGH@Z:PROC ; MIDIDevice::PrecacheInstruments + Line 93: EXTRN ?FluidSettingInt@MIDIDevice@@UEAAXPEBDH@Z:PROC ; MIDIDevice::FluidSettingInt + Line 94: EXTRN ?FluidSettingNum@MIDIDevice@@UEAAXPEBDN@Z:PROC ; MIDIDevice::FluidSettingNum + Line 95: EXTRN ?FluidSettingStr@MIDIDevice@@UEAAXPEBD0@Z:PROC ; MIDIDevice::FluidSettingStr + Line 96: EXTRN ?WildMidiSetOption@MIDIDevice@@UEAAXHH@Z:PROC ; MIDIDevice::WildMidiSetOption + Line 97: EXTRN ?Preprocess@MIDIDevice@@UEAA_NPEAVMIDIStreamer@@_N@Z:PROC ; MIDIDevice::Preprocess + Line 98: EXTRN ?GetStats@MIDIDevice@@UEAA?AVFString@@XZ:PROC ; MIDIDevice::GetStats + Line 99: EXTRN ??0SoftSynthMIDIDevice@@QEAA@HHH@Z:PROC ; SoftSynthMIDIDevice::SoftSynthMIDIDevice + Line 100: EXTRN ??1SoftSynthMIDIDevice@@UEAA@XZ:PROC ; SoftSynthMIDIDevice::~SoftSynthMIDIDevice + Line 101: EXTRN ?Close@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Close + Line 102: EXTRN ?IsOpen@SoftSynthMIDIDevice@@UEBA_NXZ:PROC ; SoftSynthMIDIDevice::IsOpen + Line 103: EXTRN ?GetTechnology@SoftSynthMIDIDevice@@UEBAHXZ:PROC ; SoftSynthMIDIDevice::GetTechnology + Line 104: EXTRN ?SetTempo@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTempo + Line 105: EXTRN ?SetTimeDiv@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTimeDiv + Line 106: EXTRN ?StreamOut@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOut + Line 107: EXTRN ?StreamOutSync@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOutSync + Line 108: EXTRN ?Resume@SoftSynthMIDIDevice@@UEAAHXZ:PROC ; SoftSynthMIDIDevice::Resume + Line 109: EXTRN ?Stop@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Stop + Line 110: EXTRN ?Pause@SoftSynthMIDIDevice@@UEAA_N_N@Z:PROC ; SoftSynthMIDIDevice::Pause + Line 111: EXTRN ?CalcTickRate@SoftSynthMIDIDevice@@MEAAXXZ:PROC ; SoftSynthMIDIDevice::CalcTickRate + Line 112: EXTRN ?OpenStream@SoftSynthMIDIDevice@@IEAAHHHP6AXPEAX@Z0@Z:PROC ; SoftSynthMIDIDevice::OpenStream + Line 113: EXTRN ?ServiceStream@SoftSynthMIDIDevice@@MEAA_NPEAXH@Z:PROC ; SoftSynthMIDIDevice::ServiceStream + Line 114: EXTRN ??_EADLMIDIDevice@@UEAAPEAXI@Z:PROC ; ADLMIDIDevice::`vector deleting destructor' + Line 115: EXTRN ?MIDIDeviceChanged@@YAXH_N@Z:PROC ; MIDIDeviceChanged + Line 116: EXTRN adl_setNumChips:PROC + Line 117: EXTRN adl_setBank:PROC + Line 118: EXTRN adl_setSoftPanEnabled:PROC + Line 119: EXTRN adl_setVolumeRangeModel:PROC + Line 120: EXTRN adl_openBankFile:PROC + Line 121: EXTRN adl_switchEmulator:PROC + Line 122: EXTRN adl_setRunAtPcmRate:PROC + Line 123: EXTRN adl_init:PROC + Line 124: EXTRN adl_close:PROC + Line 125: EXTRN adl_generateFormat:PROC + Line 126: EXTRN adl_rt_resetState:PROC + Line 127: EXTRN adl_rt_noteOn:PROC + Line 128: EXTRN adl_rt_noteOff:PROC + Line 129: EXTRN adl_rt_noteAfterTouch:PROC + Line 130: EXTRN adl_rt_channelAfterTouch:PROC + Line 131: EXTRN adl_rt_controllerChange:PROC + Line 132: EXTRN adl_rt_patchChange:PROC + Line 133: EXTRN adl_rt_pitchBendML:PROC + Line 134: EXTRN ?FindSoundFont@FSoundFontManager@@QEBAPEBUFSoundFontInfo@@PEBDH@Z:PROC ; FSoundFontManager::FindSoundFont + Line 135: EXTRN __CxxFrameHandler3:PROC + Line 136: EXTRN ?sfmanager@@3VFSoundFontManager@@A:BYTE ; sfmanager + Line 137: EXTRN __ImageBase:BYTE + Line 138: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_cd.cod (29 hits) + Line 22: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 23: EXTRN __std_terminate:PROC + Line 24: EXTRN ??0MusInfo@@QEAA@XZ:PROC ; MusInfo::MusInfo + Line 25: EXTRN ??1MusInfo@@UEAA@XZ:PROC ; MusInfo::~MusInfo + Line 26: EXTRN ?MusicVolumeChanged@MusInfo@@UEAAXXZ:PROC ; MusInfo::MusicVolumeChanged + Line 27: EXTRN ?IsMIDI@MusInfo@@UEBA_NXZ:PROC ; MusInfo::IsMIDI + Line 28: EXTRN ?SetPosition@MusInfo@@UEAA_NI@Z:PROC ; MusInfo::SetPosition + Line 29: EXTRN ?SetSubsong@MusInfo@@UEAA_NH@Z:PROC ; MusInfo::SetSubsong + Line 30: EXTRN ?Update@MusInfo@@UEAAXXZ:PROC ; MusInfo::Update + Line 31: EXTRN ?GetStats@MusInfo@@UEAA?AVFString@@XZ:PROC ; MusInfo::GetStats + Line 32: EXTRN ?GetOPLDumper@MusInfo@@UEAAPEAV1@PEBD@Z:PROC ; MusInfo::GetOPLDumper + Line 33: EXTRN ?GetWaveDumper@MusInfo@@UEAAPEAV1@PEBDH@Z:PROC ; MusInfo::GetWaveDumper + Line 34: EXTRN ?FluidSettingInt@MusInfo@@UEAAXPEBDH@Z:PROC ; MusInfo::FluidSettingInt + Line 35: EXTRN ?FluidSettingNum@MusInfo@@UEAAXPEBDN@Z:PROC ; MusInfo::FluidSettingNum + Line 36: EXTRN ?FluidSettingStr@MusInfo@@UEAAXPEBD0@Z:PROC ; MusInfo::FluidSettingStr + Line 37: EXTRN ?WildMidiSetOption@MusInfo@@UEAAXHH@Z:PROC ; MusInfo::WildMidiSetOption + Line 38: EXTRN ?GMEDepthChanged@MusInfo@@UEAAXM@Z:PROC ; MusInfo::GMEDepthChanged + Line 39: EXTRN ??_ECDSong@@UEAAPEAXI@Z:PROC ; CDSong::`vector deleting destructor' + Line 40: EXTRN ??_ECDDAFile@@UEAAPEAXI@Z:PROC ; CDDAFile::`vector deleting destructor' + Line 41: EXTRN ?CD_Init@@YA_NXZ:PROC ; CD_Init + Line 42: EXTRN ?CD_InitID@@YA_NIH@Z:PROC ; CD_InitID + Line 43: EXTRN ?CD_Play@@YA_NH_N@Z:PROC ; CD_Play + Line 44: EXTRN ?CD_PlayCD@@YA_N_N@Z:PROC ; CD_PlayCD + Line 45: EXTRN ?CD_Stop@@YAXXZ:PROC ; CD_Stop + Line 46: EXTRN ?CD_Pause@@YAXXZ:PROC ; CD_Pause + Line 47: EXTRN ?CD_Resume@@YA_NXZ:PROC ; CD_Resume + Line 48: EXTRN ?CD_GetMode@@YA?AW4ECDModes@@XZ:PROC ; CD_GetMode + Line 49: EXTRN ?CD_CheckTrack@@YA_NH@Z:PROC ; CD_CheckTrack + Line 50: EXTRN __CxxFrameHandler3:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_dumb.cod (79 hits) + Line 96: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 97: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 98: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 99: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 100: EXTRN atexit:PROC + Line 101: EXTRN __std_terminate:PROC + Line 102: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 103: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 104: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 105: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 106: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 107: EXTRN ?CreateCriticalSection@@YAPEAVFInternalCriticalSection@@XZ:PROC ; CreateCriticalSection + Line 108: EXTRN ?DeleteCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; DeleteCriticalSection + Line 109: EXTRN ?EnterCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; EnterCriticalSection + Line 110: EXTRN ?LeaveCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; LeaveCriticalSection + Line 111: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 112: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 113: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 114: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 115: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 116: EXTRN ??0MusInfo@@QEAA@XZ:PROC ; MusInfo::MusInfo + Line 117: EXTRN ?MusicVolumeChanged@MusInfo@@UEAAXXZ:PROC ; MusInfo::MusicVolumeChanged + Line 118: EXTRN ?IsMIDI@MusInfo@@UEBA_NXZ:PROC ; MusInfo::IsMIDI + Line 119: EXTRN ?Update@MusInfo@@UEAAXXZ:PROC ; MusInfo::Update + Line 120: EXTRN ?GetOPLDumper@MusInfo@@UEAAPEAV1@PEBD@Z:PROC ; MusInfo::GetOPLDumper + Line 121: EXTRN ?GetWaveDumper@MusInfo@@UEAAPEAV1@PEBDH@Z:PROC ; MusInfo::GetWaveDumper + Line 122: EXTRN ?FluidSettingInt@MusInfo@@UEAAXPEBDH@Z:PROC ; MusInfo::FluidSettingInt + Line 123: EXTRN ?FluidSettingNum@MusInfo@@UEAAXPEBDN@Z:PROC ; MusInfo::FluidSettingNum + Line 124: EXTRN ?FluidSettingStr@MusInfo@@UEAAXPEBD0@Z:PROC ; MusInfo::FluidSettingStr + Line 125: EXTRN ?WildMidiSetOption@MusInfo@@UEAAXHH@Z:PROC ; MusInfo::WildMidiSetOption + Line 126: EXTRN ?GMEDepthChanged@MusInfo@@UEAAXM@Z:PROC ; MusInfo::GMEDepthChanged + Line 127: EXTRN ??1StreamSong@@UEAA@XZ:PROC ; StreamSong::~StreamSong + Line 128: EXTRN ?Play@StreamSong@@UEAAX_NH@Z:PROC ; StreamSong::Play + Line 129: EXTRN ?Pause@StreamSong@@UEAAXXZ:PROC ; StreamSong::Pause + Line 130: EXTRN ?Resume@StreamSong@@UEAAXXZ:PROC ; StreamSong::Resume + Line 131: EXTRN ?Stop@StreamSong@@UEAAXXZ:PROC ; StreamSong::Stop + Line 132: EXTRN ?IsPlaying@StreamSong@@UEAA_NXZ:PROC ; StreamSong::IsPlaying + Line 133: EXTRN ?SetPosition@StreamSong@@UEAA_NI@Z:PROC ; StreamSong::SetPosition + Line 134: EXTRN ?SetSubsong@StreamSong@@UEAA_NH@Z:PROC ; StreamSong::SetSubsong + Line 135: EXTRN ?GetStats@StreamSong@@UEAA?AVFString@@XZ:PROC ; StreamSong::GetStats + Line 136: EXTRN ??_EStreamSong@@UEAAPEAXI@Z:PROC ; StreamSong::`vector deleting destructor' + Line 137: EXTRN dumbfile_open_ex:PROC + Line 138: EXTRN dumbfile_close:PROC + Line 139: EXTRN unload_duh:PROC + Line 140: EXTRN duh_get_tag:PROC + Line 141: EXTRN duh_start_sigrenderer:PROC + Line 142: EXTRN duh_sigrenderer_generate_samples:PROC + Line 143: EXTRN duh_end_sigrenderer:PROC + Line 144: EXTRN duh_get_it_sigdata:PROC + Line 145: EXTRN duh_get_it_sigrenderer:PROC + Line 146: EXTRN dumb_it_start_at_order:PROC + Line 147: EXTRN dumb_it_set_ramp_style:PROC + Line 148: EXTRN dumb_it_set_loop_callback:PROC + Line 149: EXTRN dumb_it_set_xm_speed_zero_callback:PROC + Line 150: EXTRN dumb_it_set_global_volume_zero_callback:PROC + Line 151: EXTRN dumb_it_callback_terminate:PROC + Line 152: EXTRN dumb_read_it_quick:PROC + Line 153: EXTRN dumb_read_xm_quick:PROC + Line 154: EXTRN dumb_read_s3m_quick:PROC + Line 155: EXTRN dumb_read_stm_quick:PROC + Line 156: EXTRN dumb_read_mod_quick:PROC + Line 157: EXTRN dumb_read_ptm_quick:PROC + Line 158: EXTRN dumb_read_669_quick:PROC + Line 159: EXTRN dumb_read_psm_quick:PROC + Line 160: EXTRN dumb_read_old_psm_quick:PROC + Line 161: EXTRN dumb_read_mtm_quick:PROC + Line 162: EXTRN dumb_read_riff_quick:PROC + Line 163: EXTRN dumb_read_asy_quick:PROC + Line 164: EXTRN dumb_read_okt_quick:PROC + Line 165: EXTRN dumb_silence:PROC + Line 166: EXTRN dumb_it_set_resampling_quality:PROC + Line 167: EXTRN ??_Einput_mod@@UEAAPEAXI@Z:PROC ; input_mod::`vector deleting destructor' + Line 168: EXTRN __CxxFrameHandler3:PROC + Line 169: EXTRN memcmp:PROC + Line 170: EXTRN memcpy:PROC + Line 171: EXTRN memset:PROC + Line 172: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 173: EXTRN ?GSnd@@3PEAVSoundRenderer@@EA:QWORD ; GSnd + Line 174: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_fluidsynth_mididevice.cod (64 hits) + Line 63: EXTRN ?currSong@@3PEAVMusInfo@@EA:QWORD ; currSong + Line 399: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 400: EXTRN atexit:PROC + Line 401: EXTRN __std_terminate:PROC + Line 402: EXTRN free:PROC + Line 403: EXTRN __acrt_iob_func:PROC + Line 404: EXTRN __stdio_common_vfprintf:PROC + Line 405: EXTRN strcspn:PROC + Line 406: EXTRN strtok:PROC + Line 407: EXTRN strdup:PROC + Line 408: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 409: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 410: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 411: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 412: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 413: EXTRN ?EnterCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; EnterCriticalSection + Line 414: EXTRN ?LeaveCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; LeaveCriticalSection + Line 415: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 416: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 417: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 418: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 419: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 420: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 421: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 422: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 423: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 424: EXTRN ?PrepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::PrepareHeader + Line 425: EXTRN ?UnprepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::UnprepareHeader + Line 426: EXTRN ?FakeVolume@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::FakeVolume + Line 427: EXTRN ?InitPlayback@MIDIDevice@@UEAAXXZ:PROC ; MIDIDevice::InitPlayback + Line 428: EXTRN ?Update@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::Update + Line 429: EXTRN ?PrecacheInstruments@MIDIDevice@@UEAAXPEBGH@Z:PROC ; MIDIDevice::PrecacheInstruments + Line 430: EXTRN ?WildMidiSetOption@MIDIDevice@@UEAAXHH@Z:PROC ; MIDIDevice::WildMidiSetOption + Line 431: EXTRN ?Preprocess@MIDIDevice@@UEAA_NPEAVMIDIStreamer@@_N@Z:PROC ; MIDIDevice::Preprocess + Line 432: EXTRN ??0SoftSynthMIDIDevice@@QEAA@HHH@Z:PROC ; SoftSynthMIDIDevice::SoftSynthMIDIDevice + Line 433: EXTRN ??1SoftSynthMIDIDevice@@UEAA@XZ:PROC ; SoftSynthMIDIDevice::~SoftSynthMIDIDevice + Line 434: EXTRN ?Close@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Close + Line 435: EXTRN ?IsOpen@SoftSynthMIDIDevice@@UEBA_NXZ:PROC ; SoftSynthMIDIDevice::IsOpen + Line 436: EXTRN ?GetTechnology@SoftSynthMIDIDevice@@UEBAHXZ:PROC ; SoftSynthMIDIDevice::GetTechnology + Line 437: EXTRN ?SetTempo@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTempo + Line 438: EXTRN ?SetTimeDiv@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTimeDiv + Line 439: EXTRN ?StreamOut@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOut + Line 440: EXTRN ?StreamOutSync@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOutSync + Line 441: EXTRN ?Resume@SoftSynthMIDIDevice@@UEAAHXZ:PROC ; SoftSynthMIDIDevice::Resume + Line 442: EXTRN ?Stop@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Stop + Line 443: EXTRN ?Pause@SoftSynthMIDIDevice@@UEAA_N_N@Z:PROC ; SoftSynthMIDIDevice::Pause + Line 444: EXTRN ?CalcTickRate@SoftSynthMIDIDevice@@MEAAXXZ:PROC ; SoftSynthMIDIDevice::CalcTickRate + Line 445: EXTRN ?OpenStream@SoftSynthMIDIDevice@@IEAAHHHP6AXPEAX@Z0@Z:PROC ; SoftSynthMIDIDevice::OpenStream + Line 446: EXTRN ?ServiceStream@SoftSynthMIDIDevice@@MEAA_NPEAXH@Z:PROC ; SoftSynthMIDIDevice::ServiceStream + Line 447: EXTRN ?Load@FModule@@QEAA_NV?$initializer_list@PEBD@std@@@Z:PROC ; FModule::Load + Line 448: EXTRN ?Unload@FModule@@QEAAXXZ:PROC ; FModule::Unload + Line 449: EXTRN ??_EFluidSynthMIDIDevice@@UEAAPEAXI@Z:PROC ; FluidSynthMIDIDevice::`vector deleting destructor' + Line 450: EXTRN ?MIDIDeviceChanged@@YAXH_N@Z:PROC ; MIDIDeviceChanged + Line 451: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 452: EXTRN ?FileExists@@YA_NPEBD@Z:PROC ; FileExists + Line 453: EXTRN ?NicePath@@YA?AVFString@@PEBD@Z:PROC ; NicePath + Line 454: EXTRN ?FindSoundFont@FSoundFontManager@@QEBAPEBUFSoundFontInfo@@PEBDH@Z:PROC ; FSoundFontManager::FindSoundFont + Line 455: EXTRN GetSystemDirectoryA:PROC + Line 456: EXTRN __CxxFrameHandler3:PROC + Line 457: EXTRN strcmp:PROC + Line 458: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 459: EXTRN ?sfmanager@@3VFSoundFontManager@@A:BYTE ; sfmanager + Line 460: EXTRN __ImageBase:BYTE + Line 461: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_gme.cod (56 hits) + Line 10: EXTRN ?currSong@@3PEAVMusInfo@@EA:QWORD ; currSong + Line 46: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 47: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 48: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 49: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 50: EXTRN atexit:PROC + Line 51: EXTRN __std_terminate:PROC + Line 52: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 53: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 54: EXTRN ?CreateCriticalSection@@YAPEAVFInternalCriticalSection@@XZ:PROC ; CreateCriticalSection + Line 55: EXTRN ?DeleteCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; DeleteCriticalSection + Line 56: EXTRN ?EnterCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; EnterCriticalSection + Line 57: EXTRN ?LeaveCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; LeaveCriticalSection + Line 58: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 59: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 60: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 61: EXTRN ??0MusInfo@@QEAA@XZ:PROC ; MusInfo::MusInfo + Line 62: EXTRN ?MusicVolumeChanged@MusInfo@@UEAAXXZ:PROC ; MusInfo::MusicVolumeChanged + Line 63: EXTRN ?IsMIDI@MusInfo@@UEBA_NXZ:PROC ; MusInfo::IsMIDI + Line 64: EXTRN ?Update@MusInfo@@UEAAXXZ:PROC ; MusInfo::Update + Line 65: EXTRN ?GetOPLDumper@MusInfo@@UEAAPEAV1@PEBD@Z:PROC ; MusInfo::GetOPLDumper + Line 66: EXTRN ?GetWaveDumper@MusInfo@@UEAAPEAV1@PEBDH@Z:PROC ; MusInfo::GetWaveDumper + Line 67: EXTRN ?FluidSettingInt@MusInfo@@UEAAXPEBDH@Z:PROC ; MusInfo::FluidSettingInt + Line 68: EXTRN ?FluidSettingNum@MusInfo@@UEAAXPEBDN@Z:PROC ; MusInfo::FluidSettingNum + Line 69: EXTRN ?FluidSettingStr@MusInfo@@UEAAXPEBD0@Z:PROC ; MusInfo::FluidSettingStr + Line 70: EXTRN ?WildMidiSetOption@MusInfo@@UEAAXHH@Z:PROC ; MusInfo::WildMidiSetOption + Line 71: EXTRN ?GMEDepthChanged@MusInfo@@UEAAXM@Z:PROC ; MusInfo::GMEDepthChanged + Line 72: EXTRN ??1StreamSong@@UEAA@XZ:PROC ; StreamSong::~StreamSong + Line 73: EXTRN ?Play@StreamSong@@UEAAX_NH@Z:PROC ; StreamSong::Play + Line 74: EXTRN ?Pause@StreamSong@@UEAAXXZ:PROC ; StreamSong::Pause + Line 75: EXTRN ?Resume@StreamSong@@UEAAXXZ:PROC ; StreamSong::Resume + Line 76: EXTRN ?Stop@StreamSong@@UEAAXXZ:PROC ; StreamSong::Stop + Line 77: EXTRN ?IsPlaying@StreamSong@@UEAA_NXZ:PROC ; StreamSong::IsPlaying + Line 78: EXTRN ?SetPosition@StreamSong@@UEAA_NI@Z:PROC ; StreamSong::SetPosition + Line 79: EXTRN ?SetSubsong@StreamSong@@UEAA_NH@Z:PROC ; StreamSong::SetSubsong + Line 80: EXTRN ?GetStats@StreamSong@@UEAA?AVFString@@XZ:PROC ; StreamSong::GetStats + Line 81: EXTRN ??_EStreamSong@@UEAAPEAXI@Z:PROC ; StreamSong::`vector deleting destructor' + Line 82: EXTRN gme_start_track:PROC + Line 83: EXTRN gme_play:PROC + Line 84: EXTRN gme_delete:PROC + Line 85: EXTRN gme_set_fade:PROC + Line 86: EXTRN gme_track_ended:PROC + Line 87: EXTRN gme_tell:PROC + Line 88: EXTRN gme_track_info:PROC + Line 89: EXTRN gme_free_info:PROC + Line 90: EXTRN gme_set_stereo_depth:PROC + Line 91: EXTRN gme_identify_header:PROC + Line 92: EXTRN gme_identify_extension:PROC + Line 93: EXTRN gme_new_emu:PROC + Line 94: EXTRN gme_load_data:PROC + Line 95: EXTRN ??_EGMESong@@UEAAPEAXI@Z:PROC ; GMESong::`vector deleting destructor' + Line 96: EXTRN __CxxFrameHandler3:PROC + Line 97: EXTRN memset:PROC + Line 98: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 99: EXTRN ?GSnd@@3PEAVSoundRenderer@@EA:QWORD ; GSnd + Line 100: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_libsndfile.cod (43 hits) + Line 39: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 40: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 41: EXTRN atexit:PROC + Line 42: EXTRN __std_terminate:PROC + Line 43: EXTRN strnicmp:PROC + Line 44: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 45: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 46: EXTRN ?CreateCriticalSection@@YAPEAVFInternalCriticalSection@@XZ:PROC ; CreateCriticalSection + Line 47: EXTRN ?DeleteCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; DeleteCriticalSection + Line 48: EXTRN ?EnterCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; EnterCriticalSection + Line 49: EXTRN ?LeaveCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; LeaveCriticalSection + Line 50: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 51: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 52: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 53: EXTRN ?CreateDecoder@SoundRenderer@@SAPEAUSoundDecoder@@AEAVFileReader@@@Z:PROC ; SoundRenderer::CreateDecoder + Line 54: EXTRN ??0MusInfo@@QEAA@XZ:PROC ; MusInfo::MusInfo + Line 55: EXTRN ?MusicVolumeChanged@MusInfo@@UEAAXXZ:PROC ; MusInfo::MusicVolumeChanged + Line 56: EXTRN ?IsMIDI@MusInfo@@UEBA_NXZ:PROC ; MusInfo::IsMIDI + Line 57: EXTRN ?Update@MusInfo@@UEAAXXZ:PROC ; MusInfo::Update + Line 58: EXTRN ?GetOPLDumper@MusInfo@@UEAAPEAV1@PEBD@Z:PROC ; MusInfo::GetOPLDumper + Line 59: EXTRN ?GetWaveDumper@MusInfo@@UEAAPEAV1@PEBDH@Z:PROC ; MusInfo::GetWaveDumper + Line 60: EXTRN ?FluidSettingInt@MusInfo@@UEAAXPEBDH@Z:PROC ; MusInfo::FluidSettingInt + Line 61: EXTRN ?FluidSettingNum@MusInfo@@UEAAXPEBDN@Z:PROC ; MusInfo::FluidSettingNum + Line 62: EXTRN ?FluidSettingStr@MusInfo@@UEAAXPEBD0@Z:PROC ; MusInfo::FluidSettingStr + Line 63: EXTRN ?WildMidiSetOption@MusInfo@@UEAAXHH@Z:PROC ; MusInfo::WildMidiSetOption + Line 64: EXTRN ?GMEDepthChanged@MusInfo@@UEAAXM@Z:PROC ; MusInfo::GMEDepthChanged + Line 65: EXTRN ?S_ParseTimeTag@@YA_NPEBDPEA_NPEAI@Z:PROC ; S_ParseTimeTag + Line 66: EXTRN ??1StreamSong@@UEAA@XZ:PROC ; StreamSong::~StreamSong + Line 67: EXTRN ?Play@StreamSong@@UEAAX_NH@Z:PROC ; StreamSong::Play + Line 68: EXTRN ?Pause@StreamSong@@UEAAXXZ:PROC ; StreamSong::Pause + Line 69: EXTRN ?Resume@StreamSong@@UEAAXXZ:PROC ; StreamSong::Resume + Line 70: EXTRN ?Stop@StreamSong@@UEAAXXZ:PROC ; StreamSong::Stop + Line 71: EXTRN ?IsPlaying@StreamSong@@UEAA_NXZ:PROC ; StreamSong::IsPlaying + Line 72: EXTRN ?SetPosition@StreamSong@@UEAA_NI@Z:PROC ; StreamSong::SetPosition + Line 73: EXTRN ?SetSubsong@StreamSong@@UEAA_NH@Z:PROC ; StreamSong::SetSubsong + Line 74: EXTRN ?GetStats@StreamSong@@UEAA?AVFString@@XZ:PROC ; StreamSong::GetStats + Line 75: EXTRN ??_EStreamSong@@UEAAPEAXI@Z:PROC ; StreamSong::`vector deleting destructor' + Line 76: EXTRN ??_ESndFileSong@@UEAAPEAXI@Z:PROC ; SndFileSong::`vector deleting destructor' + Line 77: EXTRN __CxxFrameHandler3:PROC + Line 78: EXTRN memset:PROC + Line 79: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 80: EXTRN ?GSnd@@3PEAVSoundRenderer@@EA:QWORD ; GSnd + Line 81: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_midi_base.cod (23 hits) + Line 68: EXTRN atexit:PROC + Line 69: EXTRN __imp_midiOutGetNumDevs:PROC + Line 70: EXTRN __imp_midiOutGetDevCapsA:PROC + Line 71: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 72: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 73: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 74: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 75: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 76: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 77: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 78: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 79: EXTRN ?Start@MusInfo@@QEAAX_NMH@Z:PROC ; MusInfo::Start + Line 80: EXTRN ?S_ChangeMusic@@YA_NPEBDH_N1@Z:PROC ; S_ChangeMusic + Line 81: EXTRN ?S_MIDIDeviceChanged@@YAXXZ:PROC ; S_MIDIDeviceChanged + Line 82: EXTRN ?S_StopMusic@@YAX_N@Z:PROC ; S_StopMusic + Line 83: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 84: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 85: EXTRN __CxxFrameHandler3:PROC + Line 86: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 87: EXTRN ?currSong@@3PEAVMusInfo@@EA:QWORD ; currSong + Line 88: EXTRN ?mus_playing@@3UMusPlayingInfo@@A:BYTE ; mus_playing + Line 89: EXTRN __ImageBase:BYTE + Line 90: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_midistream.cod (37 hits) + Line 84: EXTRN _purecall:PROC + Line 85: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 86: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 87: EXTRN __std_terminate:PROC + Line 88: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 89: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 90: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 91: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 92: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 93: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 94: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 95: EXTRN ??0MusInfo@@QEAA@XZ:PROC ; MusInfo::MusInfo + Line 96: EXTRN ??1MusInfo@@UEAA@XZ:PROC ; MusInfo::~MusInfo + Line 97: EXTRN ?SetPosition@MusInfo@@UEAA_NI@Z:PROC ; MusInfo::SetPosition + Line 98: EXTRN ?GetOPLDumper@MusInfo@@UEAAPEAV1@PEBD@Z:PROC ; MusInfo::GetOPLDumper + Line 99: EXTRN ?GetWaveDumper@MusInfo@@UEAAPEAV1@PEBDH@Z:PROC ; MusInfo::GetWaveDumper + Line 100: EXTRN ?GMEDepthChanged@MusInfo@@UEAAXM@Z:PROC ; MusInfo::GMEDepthChanged + Line 101: EXTRN ??_EMIDIDevice@@UEAAPEAXI@Z:PROC ; MIDIDevice::`vector deleting destructor' + Line 102: EXTRN ?CreateWinMIDIDevice@@YAPEAVMIDIDevice@@H@Z:PROC ; CreateWinMIDIDevice + Line 103: EXTRN ?CreateTimidityPPMIDIDevice@@YAPEAVMIDIDevice@@PEBDH@Z:PROC ; CreateTimidityPPMIDIDevice + Line 104: EXTRN ??0OPLMIDIDevice@@QEAA@PEBD@Z:PROC ; OPLMIDIDevice::OPLMIDIDevice + Line 105: EXTRN ??0OPLDumperMIDIDevice@@QEAA@PEBD@Z:PROC ; OPLDumperMIDIDevice::OPLDumperMIDIDevice + Line 106: EXTRN ??0TimidityMIDIDevice@@QEAA@PEBDH@Z:PROC ; TimidityMIDIDevice::TimidityMIDIDevice + Line 107: EXTRN ??0MIDIWaveWriter@@QEAA@PEBDPEAVSoftSynthMIDIDevice@@@Z:PROC ; MIDIWaveWriter::MIDIWaveWriter + Line 108: EXTRN ??0WildMIDIDevice@@QEAA@PEBDH@Z:PROC ; WildMIDIDevice::WildMIDIDevice + Line 109: EXTRN ??0FluidSynthMIDIDevice@@QEAA@PEBDH@Z:PROC ; FluidSynthMIDIDevice::FluidSynthMIDIDevice + Line 110: EXTRN ??0ADLMIDIDevice@@QEAA@PEBD@Z:PROC ; ADLMIDIDevice::ADLMIDIDevice + Line 111: EXTRN ??0OPNMIDIDevice@@QEAA@PEBD@Z:PROC ; OPNMIDIDevice::OPNMIDIDevice + Line 112: EXTRN ??_EMIDIStreamer@@UEAAPEAXI@Z:PROC ; MIDIStreamer::`vector deleting destructor' + Line 113: EXTRN __CxxFrameHandler3:PROC + Line 114: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 115: EXTRN ?relative_volume@@3MA:DWORD ; relative_volume + Line 116: EXTRN ?snd_musicvolume@@3VFFloatCVar@@A:BYTE ; snd_musicvolume + Line 117: EXTRN ?snd_mididevice@@3VFIntCVar@@A:BYTE ; snd_mididevice + Line 118: EXTRN ?mididevice@@3IA:DWORD ; mididevice + Line 119: EXTRN __ImageBase:BYTE + Line 120: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_opl.cod (43 hits) + Line 11: EXTRN ?currSong@@3PEAVMusInfo@@EA:QWORD ; currSong + Line 49: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 50: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 51: EXTRN atexit:PROC + Line 52: EXTRN __std_terminate:PROC + Line 53: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 54: EXTRN ?ServiceStream@OPLmusicBlock@@QEAA_NPEAXH@Z:PROC ; OPLmusicBlock::ServiceStream + Line 55: EXTRN ?ResetChips@OPLmusicBlock@@QEAAXXZ:PROC ; OPLmusicBlock::ResetChips + Line 56: EXTRN ??0OPLmusicFile@@QEAA@AEAVFileReader@@@Z:PROC ; OPLmusicFile::OPLmusicFile + Line 57: EXTRN ??0OPLmusicFile@@QEAA@PEBV0@PEBD@Z:PROC ; OPLmusicFile::OPLmusicFile + Line 58: EXTRN ?SetLooping@OPLmusicFile@@QEAAX_N@Z:PROC ; OPLmusicFile::SetLooping + Line 59: EXTRN ?Dump@OPLmusicFile@@QEAAXXZ:PROC ; OPLmusicFile::Dump + Line 60: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 61: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 62: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 63: EXTRN ??0MusInfo@@QEAA@XZ:PROC ; MusInfo::MusInfo + Line 64: EXTRN ?MusicVolumeChanged@MusInfo@@UEAAXXZ:PROC ; MusInfo::MusicVolumeChanged + Line 65: EXTRN ?IsMIDI@MusInfo@@UEBA_NXZ:PROC ; MusInfo::IsMIDI + Line 66: EXTRN ?Update@MusInfo@@UEAAXXZ:PROC ; MusInfo::Update + Line 67: EXTRN ?GetOPLDumper@MusInfo@@UEAAPEAV1@PEBD@Z:PROC ; MusInfo::GetOPLDumper + Line 68: EXTRN ?GetWaveDumper@MusInfo@@UEAAPEAV1@PEBDH@Z:PROC ; MusInfo::GetWaveDumper + Line 69: EXTRN ?FluidSettingInt@MusInfo@@UEAAXPEBDH@Z:PROC ; MusInfo::FluidSettingInt + Line 70: EXTRN ?FluidSettingNum@MusInfo@@UEAAXPEBDN@Z:PROC ; MusInfo::FluidSettingNum + Line 71: EXTRN ?FluidSettingStr@MusInfo@@UEAAXPEBD0@Z:PROC ; MusInfo::FluidSettingStr + Line 72: EXTRN ?WildMidiSetOption@MusInfo@@UEAAXHH@Z:PROC ; MusInfo::WildMidiSetOption + Line 73: EXTRN ?GMEDepthChanged@MusInfo@@UEAAXM@Z:PROC ; MusInfo::GMEDepthChanged + Line 74: EXTRN ??1StreamSong@@UEAA@XZ:PROC ; StreamSong::~StreamSong + Line 75: EXTRN ?Play@StreamSong@@UEAAX_NH@Z:PROC ; StreamSong::Play + Line 76: EXTRN ?Pause@StreamSong@@UEAAXXZ:PROC ; StreamSong::Pause + Line 77: EXTRN ?Resume@StreamSong@@UEAAXXZ:PROC ; StreamSong::Resume + Line 78: EXTRN ?Stop@StreamSong@@UEAAXXZ:PROC ; StreamSong::Stop + Line 79: EXTRN ?IsPlaying@StreamSong@@UEAA_NXZ:PROC ; StreamSong::IsPlaying + Line 80: EXTRN ?SetPosition@StreamSong@@UEAA_NI@Z:PROC ; StreamSong::SetPosition + Line 81: EXTRN ?SetSubsong@StreamSong@@UEAA_NH@Z:PROC ; StreamSong::SetSubsong + Line 82: EXTRN ?GetStats@StreamSong@@UEAA?AVFString@@XZ:PROC ; StreamSong::GetStats + Line 83: EXTRN ??_EStreamSong@@UEAAPEAXI@Z:PROC ; StreamSong::`vector deleting destructor' + Line 84: EXTRN ??_EOPLMUSSong@@UEAAPEAXI@Z:PROC ; OPLMUSSong::`vector deleting destructor' + Line 85: EXTRN ??_EOPLMUSDumper@@UEAAPEAXI@Z:PROC ; OPLMUSDumper::`vector deleting destructor' + Line 86: EXTRN ?MIDIDeviceChanged@@YAXH_N@Z:PROC ; MIDIDeviceChanged + Line 87: EXTRN __CxxFrameHandler3:PROC + Line 88: EXTRN ?GSnd@@3PEAVSoundRenderer@@EA:QWORD ; GSnd + Line 89: EXTRN ?snd_musicvolume@@3VFFloatCVar@@A:BYTE ; snd_musicvolume + Line 90: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_opl_mididevice.cod (60 hits) + Line 36: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 37: EXTRN atexit:PROC + Line 38: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 39: EXTRN ?AppendCStrPart@FString@@QEAAAEAV1@PEBD_K@Z:PROC ; FString::AppendCStrPart + Line 40: EXTRN ?changeModulation@musicBlock@@QEAAXIH@Z:PROC ; musicBlock::changeModulation + Line 41: EXTRN ?changeSustain@musicBlock@@QEAAXIH@Z:PROC ; musicBlock::changeSustain + Line 42: EXTRN ?changeVolume@musicBlock@@QEAAXIH_N@Z:PROC ; musicBlock::changeVolume + Line 43: EXTRN ?changePanning@musicBlock@@QEAAXIH@Z:PROC ; musicBlock::changePanning + Line 44: EXTRN ?notesOff@musicBlock@@QEAAXIH@Z:PROC ; musicBlock::notesOff + Line 45: EXTRN ?allNotesOff@musicBlock@@QEAAXIH@Z:PROC ; musicBlock::allNotesOff + Line 46: EXTRN ?changeExtended@musicBlock@@QEAAXIEH@Z:PROC ; musicBlock::changeExtended + Line 47: EXTRN ?resetControllers@musicBlock@@QEAAXIH@Z:PROC ; musicBlock::resetControllers + Line 48: EXTRN ?programChange@musicBlock@@QEAAXIH@Z:PROC ; musicBlock::programChange + Line 49: EXTRN ?resetAllControllers@musicBlock@@QEAAXH@Z:PROC ; musicBlock::resetAllControllers + Line 50: EXTRN ?changePitch@musicBlock@@QEAAXIHH@Z:PROC ; musicBlock::changePitch + Line 51: EXTRN ?noteOn@musicBlock@@QEAAXIEH@Z:PROC ; musicBlock::noteOn + Line 52: EXTRN ?noteOff@musicBlock@@QEAAXIE@Z:PROC ; musicBlock::noteOff + Line 53: EXTRN ?stopAllVoices@musicBlock@@QEAAXXZ:PROC ; musicBlock::stopAllVoices + Line 54: EXTRN ??0OPLmusicBlock@@QEAA@XZ:PROC ; OPLmusicBlock::OPLmusicBlock + Line 55: EXTRN ??1OPLmusicBlock@@UEAA@XZ:PROC ; OPLmusicBlock::~OPLmusicBlock + Line 56: EXTRN ?ServiceStream@OPLmusicBlock@@QEAA_NPEAXH@Z:PROC ; OPLmusicBlock::ServiceStream + Line 57: EXTRN ?Restart@OPLmusicBlock@@UEAAXXZ:PROC ; OPLmusicBlock::Restart + Line 58: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 59: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 60: EXTRN ?PrepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::PrepareHeader + Line 61: EXTRN ?UnprepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::UnprepareHeader + Line 62: EXTRN ?FakeVolume@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::FakeVolume + Line 63: EXTRN ?InitPlayback@MIDIDevice@@UEAAXXZ:PROC ; MIDIDevice::InitPlayback + Line 64: EXTRN ?Update@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::Update + Line 65: EXTRN ?PrecacheInstruments@MIDIDevice@@UEAAXPEBGH@Z:PROC ; MIDIDevice::PrecacheInstruments + Line 66: EXTRN ?FluidSettingInt@MIDIDevice@@UEAAXPEBDH@Z:PROC ; MIDIDevice::FluidSettingInt + Line 67: EXTRN ?FluidSettingNum@MIDIDevice@@UEAAXPEBDN@Z:PROC ; MIDIDevice::FluidSettingNum + Line 68: EXTRN ?FluidSettingStr@MIDIDevice@@UEAAXPEBD0@Z:PROC ; MIDIDevice::FluidSettingStr + Line 69: EXTRN ?WildMidiSetOption@MIDIDevice@@UEAAXHH@Z:PROC ; MIDIDevice::WildMidiSetOption + Line 70: EXTRN ?Preprocess@MIDIDevice@@UEAA_NPEAVMIDIStreamer@@_N@Z:PROC ; MIDIDevice::Preprocess + Line 71: EXTRN ??0SoftSynthMIDIDevice@@QEAA@HHH@Z:PROC ; SoftSynthMIDIDevice::SoftSynthMIDIDevice + Line 72: EXTRN ??1SoftSynthMIDIDevice@@UEAA@XZ:PROC ; SoftSynthMIDIDevice::~SoftSynthMIDIDevice + Line 73: EXTRN ?Close@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Close + Line 74: EXTRN ?IsOpen@SoftSynthMIDIDevice@@UEBA_NXZ:PROC ; SoftSynthMIDIDevice::IsOpen + Line 75: EXTRN ?SetTempo@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTempo + Line 76: EXTRN ?SetTimeDiv@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTimeDiv + Line 77: EXTRN ?StreamOut@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOut + Line 78: EXTRN ?StreamOutSync@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOutSync + Line 79: EXTRN ?Resume@SoftSynthMIDIDevice@@UEAAHXZ:PROC ; SoftSynthMIDIDevice::Resume + Line 80: EXTRN ?Stop@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Stop + Line 81: EXTRN ?Pause@SoftSynthMIDIDevice@@UEAA_N_N@Z:PROC ; SoftSynthMIDIDevice::Pause + Line 82: EXTRN ?CalcTickRate@SoftSynthMIDIDevice@@MEAAXXZ:PROC ; SoftSynthMIDIDevice::CalcTickRate + Line 83: EXTRN ?PlayTick@SoftSynthMIDIDevice@@IEAAHXZ:PROC ; SoftSynthMIDIDevice::PlayTick + Line 84: EXTRN ?OpenStream@SoftSynthMIDIDevice@@IEAAHHHP6AXPEAX@Z0@Z:PROC ; SoftSynthMIDIDevice::OpenStream + Line 85: EXTRN ??_EOPLMIDIDevice@@UEAAPEAXI@Z:PROC ; OPLMIDIDevice::`vector deleting destructor' + Line 86: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 87: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 88: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 89: EXTRN ?OPL_SetCore@@YAXPEBD@Z:PROC ; OPL_SetCore + Line 90: EXTRN __CxxFrameHandler3:PROC + Line 91: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 92: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 93: EXTRN ?opl_numchips@@3VFIntCVar@@A:BYTE ; opl_numchips + Line 94: EXTRN __ImageBase:BYTE + Line 95: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_opldumper_mididevice.cod (56 hits) + Line 58: EXTRN _purecall:PROC + Line 59: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 60: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 61: EXTRN __std_terminate:PROC + Line 62: EXTRN stricmp:PROC + Line 63: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 64: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 65: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 66: EXTRN ??1OPLio@@UEAA@XZ:PROC ; OPLio::~OPLio + Line 67: EXTRN ?WriteInitState@OPLio@@QEAAX_N@Z:PROC ; OPLio::WriteInitState + Line 68: EXTRN ?Init@OPLio@@UEAAHI_N0@Z:PROC ; OPLio::Init + Line 69: EXTRN ?Reset@OPLio@@UEAAXXZ:PROC ; OPLio::Reset + Line 70: EXTRN ?WriteRegister@OPLio@@UEAAXHIE@Z:PROC ; OPLio::WriteRegister + Line 71: EXTRN ?SetClockRate@OPLio@@UEAAXN@Z:PROC ; OPLio::SetClockRate + Line 72: EXTRN ?WriteDelay@OPLio@@UEAAXH@Z:PROC ; OPLio::WriteDelay + Line 73: EXTRN ??_EOPLio@@UEAAPEAXI@Z:PROC ; OPLio::`vector deleting destructor' + Line 74: EXTRN ??_EDiskWriterIO@@UEAAPEAXI@Z:PROC ; DiskWriterIO::`vector deleting destructor' + Line 75: EXTRN ??1OPLmusicBlock@@UEAA@XZ:PROC ; OPLmusicBlock::~OPLmusicBlock + Line 76: EXTRN ?Restart@OPLmusicBlock@@UEAAXXZ:PROC ; OPLmusicBlock::Restart + Line 77: EXTRN ?Open@FileWriter@@SAPEAV1@PEBD@Z:PROC ; FileWriter::Open + Line 78: EXTRN ?PrepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::PrepareHeader + Line 79: EXTRN ?UnprepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::UnprepareHeader + Line 80: EXTRN ?FakeVolume@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::FakeVolume + Line 81: EXTRN ?InitPlayback@MIDIDevice@@UEAAXXZ:PROC ; MIDIDevice::InitPlayback + Line 82: EXTRN ?Update@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::Update + Line 83: EXTRN ?PrecacheInstruments@MIDIDevice@@UEAAXPEBGH@Z:PROC ; MIDIDevice::PrecacheInstruments + Line 84: EXTRN ?FluidSettingInt@MIDIDevice@@UEAAXPEBDH@Z:PROC ; MIDIDevice::FluidSettingInt + Line 85: EXTRN ?FluidSettingNum@MIDIDevice@@UEAAXPEBDN@Z:PROC ; MIDIDevice::FluidSettingNum + Line 86: EXTRN ?FluidSettingStr@MIDIDevice@@UEAAXPEBD0@Z:PROC ; MIDIDevice::FluidSettingStr + Line 87: EXTRN ?WildMidiSetOption@MIDIDevice@@UEAAXHH@Z:PROC ; MIDIDevice::WildMidiSetOption + Line 88: EXTRN ?Preprocess@MIDIDevice@@UEAA_NPEAVMIDIStreamer@@_N@Z:PROC ; MIDIDevice::Preprocess + Line 89: EXTRN ??1SoftSynthMIDIDevice@@UEAA@XZ:PROC ; SoftSynthMIDIDevice::~SoftSynthMIDIDevice + Line 90: EXTRN ?IsOpen@SoftSynthMIDIDevice@@UEBA_NXZ:PROC ; SoftSynthMIDIDevice::IsOpen + Line 91: EXTRN ?SetTempo@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTempo + Line 92: EXTRN ?SetTimeDiv@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTimeDiv + Line 93: EXTRN ?StreamOut@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOut + Line 94: EXTRN ?StreamOutSync@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOutSync + Line 95: EXTRN ?Pause@SoftSynthMIDIDevice@@UEAA_N_N@Z:PROC ; SoftSynthMIDIDevice::Pause + Line 96: EXTRN ??0OPLMIDIDevice@@QEAA@PEBD@Z:PROC ; OPLMIDIDevice::OPLMIDIDevice + Line 97: EXTRN ?Open@OPLMIDIDevice@@UEAAHP6AXPEAX@Z0@Z:PROC ; OPLMIDIDevice::Open + Line 98: EXTRN ?Close@OPLMIDIDevice@@UEAAXXZ:PROC ; OPLMIDIDevice::Close + Line 99: EXTRN ?GetTechnology@OPLMIDIDevice@@UEBAHXZ:PROC ; OPLMIDIDevice::GetTechnology + Line 100: EXTRN ?GetStats@OPLMIDIDevice@@UEAA?AVFString@@XZ:PROC ; OPLMIDIDevice::GetStats + Line 101: EXTRN ?CalcTickRate@OPLMIDIDevice@@MEAAXXZ:PROC ; OPLMIDIDevice::CalcTickRate + Line 102: EXTRN ?PlayTick@OPLMIDIDevice@@MEAAHXZ:PROC ; OPLMIDIDevice::PlayTick + Line 103: EXTRN ?HandleEvent@OPLMIDIDevice@@MEAAXHHH@Z:PROC ; OPLMIDIDevice::HandleEvent + Line 104: EXTRN ?HandleLongEvent@OPLMIDIDevice@@MEAAXPEBEH@Z:PROC ; OPLMIDIDevice::HandleLongEvent + Line 105: EXTRN ?ComputeOutput@OPLMIDIDevice@@MEAAXPEAMH@Z:PROC ; OPLMIDIDevice::ComputeOutput + Line 106: EXTRN ?ServiceStream@OPLMIDIDevice@@MEAA_NPEAXH@Z:PROC ; OPLMIDIDevice::ServiceStream + Line 107: EXTRN ??_EOPLDumperMIDIDevice@@UEAAPEAXI@Z:PROC ; OPLDumperMIDIDevice::`vector deleting destructor' + Line 108: EXTRN ??_EOPLEmul@@UEAAPEAXI@Z:PROC ; OPLEmul::`vector deleting destructor' + Line 109: EXTRN ??_EOPLDump@@UEAAPEAXI@Z:PROC ; OPLDump::`vector deleting destructor' + Line 110: EXTRN ??_EOPL_RDOSdump@@UEAAPEAXI@Z:PROC ; OPL_RDOSdump::`vector deleting destructor' + Line 111: EXTRN ??_EOPL_DOSBOXdump@@UEAAPEAXI@Z:PROC ; OPL_DOSBOXdump::`vector deleting destructor' + Line 112: EXTRN __CxxFrameHandler3:PROC + Line 113: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_opnmidi_mididevice.cod (64 hits) + Line 15: EXTRN ?currSong@@3PEAVMusInfo@@EA:QWORD ; currSong + Line 68: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 69: EXTRN atexit:PROC + Line 70: EXTRN __std_terminate:PROC + Line 71: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 72: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 73: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 74: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 75: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 76: EXTRN ?PrepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::PrepareHeader + Line 77: EXTRN ?UnprepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::UnprepareHeader + Line 78: EXTRN ?FakeVolume@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::FakeVolume + Line 79: EXTRN ?InitPlayback@MIDIDevice@@UEAAXXZ:PROC ; MIDIDevice::InitPlayback + Line 80: EXTRN ?Update@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::Update + Line 81: EXTRN ?PrecacheInstruments@MIDIDevice@@UEAAXPEBGH@Z:PROC ; MIDIDevice::PrecacheInstruments + Line 82: EXTRN ?FluidSettingInt@MIDIDevice@@UEAAXPEBDH@Z:PROC ; MIDIDevice::FluidSettingInt + Line 83: EXTRN ?FluidSettingNum@MIDIDevice@@UEAAXPEBDN@Z:PROC ; MIDIDevice::FluidSettingNum + Line 84: EXTRN ?FluidSettingStr@MIDIDevice@@UEAAXPEBD0@Z:PROC ; MIDIDevice::FluidSettingStr + Line 85: EXTRN ?WildMidiSetOption@MIDIDevice@@UEAAXHH@Z:PROC ; MIDIDevice::WildMidiSetOption + Line 86: EXTRN ?Preprocess@MIDIDevice@@UEAA_NPEAVMIDIStreamer@@_N@Z:PROC ; MIDIDevice::Preprocess + Line 87: EXTRN ?GetStats@MIDIDevice@@UEAA?AVFString@@XZ:PROC ; MIDIDevice::GetStats + Line 88: EXTRN ??0SoftSynthMIDIDevice@@QEAA@HHH@Z:PROC ; SoftSynthMIDIDevice::SoftSynthMIDIDevice + Line 89: EXTRN ??1SoftSynthMIDIDevice@@UEAA@XZ:PROC ; SoftSynthMIDIDevice::~SoftSynthMIDIDevice + Line 90: EXTRN ?Close@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Close + Line 91: EXTRN ?IsOpen@SoftSynthMIDIDevice@@UEBA_NXZ:PROC ; SoftSynthMIDIDevice::IsOpen + Line 92: EXTRN ?GetTechnology@SoftSynthMIDIDevice@@UEBAHXZ:PROC ; SoftSynthMIDIDevice::GetTechnology + Line 93: EXTRN ?SetTempo@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTempo + Line 94: EXTRN ?SetTimeDiv@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTimeDiv + Line 95: EXTRN ?StreamOut@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOut + Line 96: EXTRN ?StreamOutSync@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOutSync + Line 97: EXTRN ?Resume@SoftSynthMIDIDevice@@UEAAHXZ:PROC ; SoftSynthMIDIDevice::Resume + Line 98: EXTRN ?Stop@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Stop + Line 99: EXTRN ?Pause@SoftSynthMIDIDevice@@UEAA_N_N@Z:PROC ; SoftSynthMIDIDevice::Pause + Line 100: EXTRN ?CalcTickRate@SoftSynthMIDIDevice@@MEAAXXZ:PROC ; SoftSynthMIDIDevice::CalcTickRate + Line 101: EXTRN ?OpenStream@SoftSynthMIDIDevice@@IEAAHHHP6AXPEAX@Z0@Z:PROC ; SoftSynthMIDIDevice::OpenStream + Line 102: EXTRN ?ServiceStream@SoftSynthMIDIDevice@@MEAA_NPEAXH@Z:PROC ; SoftSynthMIDIDevice::ServiceStream + Line 103: EXTRN ??_EOPNMIDIDevice@@UEAAPEAXI@Z:PROC ; OPNMIDIDevice::`vector deleting destructor' + Line 104: EXTRN ?MIDIDeviceChanged@@YAXH_N@Z:PROC ; MIDIDeviceChanged + Line 105: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 106: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 107: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 108: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 109: EXTRN opn2_setNumChips:PROC + Line 110: EXTRN opn2_setSoftPanEnabled:PROC + Line 111: EXTRN opn2_openBankFile:PROC + Line 112: EXTRN opn2_openBankData:PROC + Line 113: EXTRN opn2_switchEmulator:PROC + Line 114: EXTRN opn2_setRunAtPcmRate:PROC + Line 115: EXTRN opn2_init:PROC + Line 116: EXTRN opn2_close:PROC + Line 117: EXTRN opn2_generateFormat:PROC + Line 118: EXTRN opn2_rt_resetState:PROC + Line 119: EXTRN opn2_rt_noteOn:PROC + Line 120: EXTRN opn2_rt_noteOff:PROC + Line 121: EXTRN opn2_rt_noteAfterTouch:PROC + Line 122: EXTRN opn2_rt_channelAfterTouch:PROC + Line 123: EXTRN opn2_rt_controllerChange:PROC + Line 124: EXTRN opn2_rt_patchChange:PROC + Line 125: EXTRN opn2_rt_pitchBendML:PROC + Line 126: EXTRN ?FindSoundFont@FSoundFontManager@@QEBAPEBUFSoundFontInfo@@PEBDH@Z:PROC ; FSoundFontManager::FindSoundFont + Line 127: EXTRN __CxxFrameHandler3:PROC + Line 128: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 129: EXTRN ?sfmanager@@3VFSoundFontManager@@A:BYTE ; sfmanager + Line 130: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_softsynth_mididevice.cod (31 hits) + Line 48: EXTRN _purecall:PROC + Line 49: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 50: EXTRN atexit:PROC + Line 51: EXTRN __std_terminate:PROC + Line 52: EXTRN ?CreateCriticalSection@@YAPEAVFInternalCriticalSection@@XZ:PROC ; CreateCriticalSection + Line 53: EXTRN ?DeleteCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; DeleteCriticalSection + Line 54: EXTRN ?EnterCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; EnterCriticalSection + Line 55: EXTRN ?LeaveCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; LeaveCriticalSection + Line 56: EXTRN mysnprintf:PROC + Line 57: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 58: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 59: EXTRN ??0MIDIDevice@@QEAA@XZ:PROC ; MIDIDevice::MIDIDevice + Line 60: EXTRN ??1MIDIDevice@@UEAA@XZ:PROC ; MIDIDevice::~MIDIDevice + Line 61: EXTRN ?PrepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::PrepareHeader + Line 62: EXTRN ?UnprepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::UnprepareHeader + Line 63: EXTRN ?FakeVolume@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::FakeVolume + Line 64: EXTRN ?InitPlayback@MIDIDevice@@UEAAXXZ:PROC ; MIDIDevice::InitPlayback + Line 65: EXTRN ?Update@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::Update + Line 66: EXTRN ?PrecacheInstruments@MIDIDevice@@UEAAXPEBGH@Z:PROC ; MIDIDevice::PrecacheInstruments + Line 67: EXTRN ?FluidSettingInt@MIDIDevice@@UEAAXPEBDH@Z:PROC ; MIDIDevice::FluidSettingInt + Line 68: EXTRN ?FluidSettingNum@MIDIDevice@@UEAAXPEBDN@Z:PROC ; MIDIDevice::FluidSettingNum + Line 69: EXTRN ?FluidSettingStr@MIDIDevice@@UEAAXPEBD0@Z:PROC ; MIDIDevice::FluidSettingStr + Line 70: EXTRN ?WildMidiSetOption@MIDIDevice@@UEAAXHH@Z:PROC ; MIDIDevice::WildMidiSetOption + Line 71: EXTRN ?Preprocess@MIDIDevice@@UEAA_NPEAVMIDIStreamer@@_N@Z:PROC ; MIDIDevice::Preprocess + Line 72: EXTRN ?GetStats@MIDIDevice@@UEAA?AVFString@@XZ:PROC ; MIDIDevice::GetStats + Line 73: EXTRN ??_ESoftSynthMIDIDevice@@UEAAPEAXI@Z:PROC ; SoftSynthMIDIDevice::`vector deleting destructor' + Line 74: EXTRN ?I_DebugPrint@@YAXPEBD@Z:PROC ; I_DebugPrint + Line 75: EXTRN __CxxFrameHandler3:PROC + Line 76: EXTRN memset:PROC + Line 77: EXTRN ?GSnd@@3PEAVSoundRenderer@@EA:QWORD ; GSnd + Line 78: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_stream.cod (19 hits) + Line 24: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 25: EXTRN __std_terminate:PROC + Line 26: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 27: EXTRN ??0MusInfo@@QEAA@XZ:PROC ; MusInfo::MusInfo + Line 28: EXTRN ??1MusInfo@@UEAA@XZ:PROC ; MusInfo::~MusInfo + Line 29: EXTRN ?MusicVolumeChanged@MusInfo@@UEAAXXZ:PROC ; MusInfo::MusicVolumeChanged + Line 30: EXTRN ?IsMIDI@MusInfo@@UEBA_NXZ:PROC ; MusInfo::IsMIDI + Line 31: EXTRN ?Update@MusInfo@@UEAAXXZ:PROC ; MusInfo::Update + Line 32: EXTRN ?GetOPLDumper@MusInfo@@UEAAPEAV1@PEBD@Z:PROC ; MusInfo::GetOPLDumper + Line 33: EXTRN ?GetWaveDumper@MusInfo@@UEAAPEAV1@PEBDH@Z:PROC ; MusInfo::GetWaveDumper + Line 34: EXTRN ?FluidSettingInt@MusInfo@@UEAAXPEBDH@Z:PROC ; MusInfo::FluidSettingInt + Line 35: EXTRN ?FluidSettingNum@MusInfo@@UEAAXPEBDN@Z:PROC ; MusInfo::FluidSettingNum + Line 36: EXTRN ?FluidSettingStr@MusInfo@@UEAAXPEBD0@Z:PROC ; MusInfo::FluidSettingStr + Line 37: EXTRN ?WildMidiSetOption@MusInfo@@UEAAXHH@Z:PROC ; MusInfo::WildMidiSetOption + Line 38: EXTRN ?GMEDepthChanged@MusInfo@@UEAAXM@Z:PROC ; MusInfo::GMEDepthChanged + Line 39: EXTRN ??_EStreamSong@@UEAAPEAXI@Z:PROC ; StreamSong::`vector deleting destructor' + Line 40: EXTRN __CxxFrameHandler3:PROC + Line 41: EXTRN ?GSnd@@3PEAVSoundRenderer@@EA:QWORD ; GSnd + Line 42: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_timidity_mididevice.cod (48 hits) + Line 29: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 30: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 31: EXTRN __std_terminate:PROC + Line 32: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 33: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 34: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 35: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 36: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 37: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 38: EXTRN ?EnterCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; EnterCriticalSection + Line 39: EXTRN ?LeaveCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; LeaveCriticalSection + Line 40: EXTRN ?PrepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::PrepareHeader + Line 41: EXTRN ?UnprepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::UnprepareHeader + Line 42: EXTRN ?FakeVolume@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::FakeVolume + Line 43: EXTRN ?InitPlayback@MIDIDevice@@UEAAXXZ:PROC ; MIDIDevice::InitPlayback + Line 44: EXTRN ?Update@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::Update + Line 45: EXTRN ?FluidSettingInt@MIDIDevice@@UEAAXPEBDH@Z:PROC ; MIDIDevice::FluidSettingInt + Line 46: EXTRN ?FluidSettingNum@MIDIDevice@@UEAAXPEBDN@Z:PROC ; MIDIDevice::FluidSettingNum + Line 47: EXTRN ?FluidSettingStr@MIDIDevice@@UEAAXPEBD0@Z:PROC ; MIDIDevice::FluidSettingStr + Line 48: EXTRN ?WildMidiSetOption@MIDIDevice@@UEAAXHH@Z:PROC ; MIDIDevice::WildMidiSetOption + Line 49: EXTRN ?Preprocess@MIDIDevice@@UEAA_NPEAVMIDIStreamer@@_N@Z:PROC ; MIDIDevice::Preprocess + Line 50: EXTRN ??0SoftSynthMIDIDevice@@QEAA@HHH@Z:PROC ; SoftSynthMIDIDevice::SoftSynthMIDIDevice + Line 51: EXTRN ??1SoftSynthMIDIDevice@@UEAA@XZ:PROC ; SoftSynthMIDIDevice::~SoftSynthMIDIDevice + Line 52: EXTRN ?Close@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Close + Line 53: EXTRN ?IsOpen@SoftSynthMIDIDevice@@UEBA_NXZ:PROC ; SoftSynthMIDIDevice::IsOpen + Line 54: EXTRN ?GetTechnology@SoftSynthMIDIDevice@@UEBAHXZ:PROC ; SoftSynthMIDIDevice::GetTechnology + Line 55: EXTRN ?SetTempo@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTempo + Line 56: EXTRN ?SetTimeDiv@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTimeDiv + Line 57: EXTRN ?StreamOut@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOut + Line 58: EXTRN ?StreamOutSync@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOutSync + Line 59: EXTRN ?Resume@SoftSynthMIDIDevice@@UEAAHXZ:PROC ; SoftSynthMIDIDevice::Resume + Line 60: EXTRN ?Stop@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Stop + Line 61: EXTRN ?Pause@SoftSynthMIDIDevice@@UEAA_N_N@Z:PROC ; SoftSynthMIDIDevice::Pause + Line 62: EXTRN ?CalcTickRate@SoftSynthMIDIDevice@@MEAAXXZ:PROC ; SoftSynthMIDIDevice::CalcTickRate + Line 63: EXTRN ?OpenStream@SoftSynthMIDIDevice@@IEAAHHHP6AXPEAX@Z0@Z:PROC ; SoftSynthMIDIDevice::OpenStream + Line 64: EXTRN ?ServiceStream@SoftSynthMIDIDevice@@MEAA_NPEAXH@Z:PROC ; SoftSynthMIDIDevice::ServiceStream + Line 65: EXTRN ??_ETimidityMIDIDevice@@UEAAPEAXI@Z:PROC ; TimidityMIDIDevice::`vector deleting destructor' + Line 66: EXTRN ??0Renderer@Timidity@@QEAA@MPEBD@Z:PROC ; Timidity::Renderer::Renderer + Line 67: EXTRN ??1Renderer@Timidity@@QEAA@XZ:PROC ; Timidity::Renderer::~Renderer + Line 68: EXTRN ?HandleEvent@Renderer@Timidity@@QEAAXHHH@Z:PROC ; Timidity::Renderer::HandleEvent + Line 69: EXTRN ?HandleLongMessage@Renderer@Timidity@@QEAAXPEBEH@Z:PROC ; Timidity::Renderer::HandleLongMessage + Line 70: EXTRN ?ComputeOutput@Renderer@Timidity@@QEAAXPEAMH@Z:PROC ; Timidity::Renderer::ComputeOutput + Line 71: EXTRN ?MarkInstrument@Renderer@Timidity@@QEAAXHHH@Z:PROC ; Timidity::Renderer::MarkInstrument + Line 72: EXTRN ?Reset@Renderer@Timidity@@QEAAXXZ:PROC ; Timidity::Renderer::Reset + Line 73: EXTRN ?load_missing_instruments@Renderer@Timidity@@QEAAHXZ:PROC ; Timidity::Renderer::load_missing_instruments + Line 74: EXTRN __CxxFrameHandler3:PROC + Line 75: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 76: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_timiditypp_mididevice.cod (59 hits) + Line 12: EXTRN ?currSong@@3PEAVMusInfo@@EA:QWORD ; currSong + Line 48: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 49: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 50: EXTRN atexit:PROC + Line 51: EXTRN __std_terminate:PROC + Line 52: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 53: EXTRN ?VFormat@FString@@QEAAXPEBDPEAD@Z:PROC ; FString::VFormat + Line 54: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 55: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 56: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 57: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 58: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 59: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 60: EXTRN ?PrepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::PrepareHeader + Line 61: EXTRN ?UnprepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::UnprepareHeader + Line 62: EXTRN ?FakeVolume@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::FakeVolume + Line 63: EXTRN ?InitPlayback@MIDIDevice@@UEAAXXZ:PROC ; MIDIDevice::InitPlayback + Line 64: EXTRN ?Update@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::Update + Line 65: EXTRN ?FluidSettingInt@MIDIDevice@@UEAAXPEBDH@Z:PROC ; MIDIDevice::FluidSettingInt + Line 66: EXTRN ?FluidSettingNum@MIDIDevice@@UEAAXPEBDN@Z:PROC ; MIDIDevice::FluidSettingNum + Line 67: EXTRN ?FluidSettingStr@MIDIDevice@@UEAAXPEBD0@Z:PROC ; MIDIDevice::FluidSettingStr + Line 68: EXTRN ?WildMidiSetOption@MIDIDevice@@UEAAXHH@Z:PROC ; MIDIDevice::WildMidiSetOption + Line 69: EXTRN ?Preprocess@MIDIDevice@@UEAA_NPEAVMIDIStreamer@@_N@Z:PROC ; MIDIDevice::Preprocess + Line 70: EXTRN ?GetStats@MIDIDevice@@UEAA?AVFString@@XZ:PROC ; MIDIDevice::GetStats + Line 71: EXTRN ??0SoftSynthMIDIDevice@@QEAA@HHH@Z:PROC ; SoftSynthMIDIDevice::SoftSynthMIDIDevice + Line 72: EXTRN ??1SoftSynthMIDIDevice@@UEAA@XZ:PROC ; SoftSynthMIDIDevice::~SoftSynthMIDIDevice + Line 73: EXTRN ?Close@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Close + Line 74: EXTRN ?IsOpen@SoftSynthMIDIDevice@@UEBA_NXZ:PROC ; SoftSynthMIDIDevice::IsOpen + Line 75: EXTRN ?GetTechnology@SoftSynthMIDIDevice@@UEBAHXZ:PROC ; SoftSynthMIDIDevice::GetTechnology + Line 76: EXTRN ?SetTempo@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTempo + Line 77: EXTRN ?SetTimeDiv@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTimeDiv + Line 78: EXTRN ?StreamOut@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOut + Line 79: EXTRN ?StreamOutSync@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOutSync + Line 80: EXTRN ?Resume@SoftSynthMIDIDevice@@UEAAHXZ:PROC ; SoftSynthMIDIDevice::Resume + Line 81: EXTRN ?Stop@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Stop + Line 82: EXTRN ?Pause@SoftSynthMIDIDevice@@UEAA_N_N@Z:PROC ; SoftSynthMIDIDevice::Pause + Line 83: EXTRN ?CalcTickRate@SoftSynthMIDIDevice@@MEAAXXZ:PROC ; SoftSynthMIDIDevice::CalcTickRate + Line 84: EXTRN ?OpenStream@SoftSynthMIDIDevice@@IEAAHHHP6AXPEAX@Z0@Z:PROC ; SoftSynthMIDIDevice::OpenStream + Line 85: EXTRN ?ServiceStream@SoftSynthMIDIDevice@@MEAA_NPEAXH@Z:PROC ; SoftSynthMIDIDevice::ServiceStream + Line 86: EXTRN ?MIDIDeviceChanged@@YAXH_N@Z:PROC ; MIDIDeviceChanged + Line 87: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 88: EXTRN ?free_global_mblock@TimidityPlus@@YAHXZ:PROC ; TimidityPlus::free_global_mblock + Line 89: EXTRN ??0Instruments@TimidityPlus@@QEAA@XZ:PROC ; TimidityPlus::Instruments::Instruments + Line 90: EXTRN ?load@Instruments@TimidityPlus@@QEAA_NPEBD@Z:PROC ; TimidityPlus::Instruments::load + Line 91: EXTRN ??1Instruments@TimidityPlus@@QEAA@XZ:PROC ; TimidityPlus::Instruments::~Instruments + Line 92: EXTRN ?PrecacheInstruments@Instruments@TimidityPlus@@QEAAXPEBGH@Z:PROC ; TimidityPlus::Instruments::PrecacheInstruments + Line 93: EXTRN ??0Player@TimidityPlus@@QEAA@PEAVInstruments@1@@Z:PROC ; TimidityPlus::Player::Player + Line 94: EXTRN ??1Player@TimidityPlus@@QEAA@XZ:PROC ; TimidityPlus::Player::~Player + Line 95: EXTRN ?playmidi_stream_init@Player@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Player::playmidi_stream_init + Line 96: EXTRN ?compute_data@Player@TimidityPlus@@QEAAHPEAMH@Z:PROC ; TimidityPlus::Player::compute_data + Line 97: EXTRN ?send_event@Player@TimidityPlus@@QEAAHHHH@Z:PROC ; TimidityPlus::Player::send_event + Line 98: EXTRN ?send_long_event@Player@TimidityPlus@@QEAAXPEBEH@Z:PROC ; TimidityPlus::Player::send_long_event + Line 99: EXTRN ?free_gauss_table@TimidityPlus@@YAXXZ:PROC ; TimidityPlus::free_gauss_table + Line 100: EXTRN ?set_playback_rate@TimidityPlus@@YAXH@Z:PROC ; TimidityPlus::set_playback_rate + Line 101: EXTRN ??_ETimidityPPMIDIDevice@@UEAAPEAXI@Z:PROC ; TimidityPPMIDIDevice::`vector deleting destructor' + Line 102: EXTRN __CxxFrameHandler3:PROC + Line 103: EXTRN memcmp:PROC + Line 104: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 105: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_wavewriter_mididevice.cod (25 hits) + Line 31: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 32: EXTRN __std_terminate:PROC + Line 33: EXTRN _errno:PROC + Line 34: EXTRN strerror:PROC + Line 35: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 36: EXTRN ?Open@FileWriter@@SAPEAV1@PEBD@Z:PROC ; FileWriter::Open + Line 37: EXTRN ?PrepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::PrepareHeader + Line 38: EXTRN ?UnprepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::UnprepareHeader + Line 39: EXTRN ?FakeVolume@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::FakeVolume + Line 40: EXTRN ?InitPlayback@MIDIDevice@@UEAAXXZ:PROC ; MIDIDevice::InitPlayback + Line 41: EXTRN ?Update@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::Update + Line 42: EXTRN ?PrecacheInstruments@MIDIDevice@@UEAAXPEBGH@Z:PROC ; MIDIDevice::PrecacheInstruments + Line 43: EXTRN ?FluidSettingInt@MIDIDevice@@UEAAXPEBDH@Z:PROC ; MIDIDevice::FluidSettingInt + Line 44: EXTRN ?FluidSettingNum@MIDIDevice@@UEAAXPEBDN@Z:PROC ; MIDIDevice::FluidSettingNum + Line 45: EXTRN ?FluidSettingStr@MIDIDevice@@UEAAXPEBD0@Z:PROC ; MIDIDevice::FluidSettingStr + Line 46: EXTRN ?WildMidiSetOption@MIDIDevice@@UEAAXHH@Z:PROC ; MIDIDevice::WildMidiSetOption + Line 47: EXTRN ?Preprocess@MIDIDevice@@UEAA_NPEAVMIDIStreamer@@_N@Z:PROC ; MIDIDevice::Preprocess + Line 48: EXTRN ?GetStats@MIDIDevice@@UEAA?AVFString@@XZ:PROC ; MIDIDevice::GetStats + Line 49: EXTRN ??0SoftSynthMIDIDevice@@QEAA@HHH@Z:PROC ; SoftSynthMIDIDevice::SoftSynthMIDIDevice + Line 50: EXTRN ??1SoftSynthMIDIDevice@@UEAA@XZ:PROC ; SoftSynthMIDIDevice::~SoftSynthMIDIDevice + Line 51: EXTRN ?Close@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Close + Line 52: EXTRN ?Pause@SoftSynthMIDIDevice@@UEAA_N_N@Z:PROC ; SoftSynthMIDIDevice::Pause + Line 53: EXTRN ??_EMIDIWaveWriter@@UEAAPEAXI@Z:PROC ; MIDIWaveWriter::`vector deleting destructor' + Line 54: EXTRN __CxxFrameHandler3:PROC + Line 55: EXTRN __chkstk:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_wildmidi_mididevice.cod (54 hits) + Line 13: EXTRN ?currSong@@3PEAVMusInfo@@EA:QWORD ; currSong + Line 54: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 55: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 56: EXTRN atexit:PROC + Line 57: EXTRN __std_terminate:PROC + Line 58: EXTRN stricmp:PROC + Line 59: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 60: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 61: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 62: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 63: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 64: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 65: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 66: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 67: EXTRN ?WildMidi_Init@@YAHPEBDGG@Z:PROC ; WildMidi_Init + Line 68: EXTRN ?WildMidi_Shutdown@@YAHXZ:PROC ; WildMidi_Shutdown + Line 69: EXTRN ?WildMidi_GetSampleRate@@YAHXZ:PROC ; WildMidi_GetSampleRate + Line 70: EXTRN ??0WildMidi_Renderer@@QEAA@XZ:PROC ; WildMidi_Renderer::WildMidi_Renderer + Line 71: EXTRN ??1WildMidi_Renderer@@QEAA@XZ:PROC ; WildMidi_Renderer::~WildMidi_Renderer + Line 72: EXTRN ?ShortEvent@WildMidi_Renderer@@QEAAXHHH@Z:PROC ; WildMidi_Renderer::ShortEvent + Line 73: EXTRN ?LongEvent@WildMidi_Renderer@@QEAAXPEBEH@Z:PROC ; WildMidi_Renderer::LongEvent + Line 74: EXTRN ?ComputeOutput@WildMidi_Renderer@@QEAAXPEAMH@Z:PROC ; WildMidi_Renderer::ComputeOutput + Line 75: EXTRN ?LoadInstrument@WildMidi_Renderer@@QEAAXHHH@Z:PROC ; WildMidi_Renderer::LoadInstrument + Line 76: EXTRN ?GetVoiceCount@WildMidi_Renderer@@QEAAHXZ:PROC ; WildMidi_Renderer::GetVoiceCount + Line 77: EXTRN ?SetOption@WildMidi_Renderer@@QEAAXHH@Z:PROC ; WildMidi_Renderer::SetOption + Line 78: EXTRN ?PrepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::PrepareHeader + Line 79: EXTRN ?UnprepareHeader@MIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; MIDIDevice::UnprepareHeader + Line 80: EXTRN ?FakeVolume@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::FakeVolume + Line 81: EXTRN ?InitPlayback@MIDIDevice@@UEAAXXZ:PROC ; MIDIDevice::InitPlayback + Line 82: EXTRN ?Update@MIDIDevice@@UEAA_NXZ:PROC ; MIDIDevice::Update + Line 83: EXTRN ?FluidSettingInt@MIDIDevice@@UEAAXPEBDH@Z:PROC ; MIDIDevice::FluidSettingInt + Line 84: EXTRN ?FluidSettingNum@MIDIDevice@@UEAAXPEBDN@Z:PROC ; MIDIDevice::FluidSettingNum + Line 85: EXTRN ?FluidSettingStr@MIDIDevice@@UEAAXPEBD0@Z:PROC ; MIDIDevice::FluidSettingStr + Line 86: EXTRN ?Preprocess@MIDIDevice@@UEAA_NPEAVMIDIStreamer@@_N@Z:PROC ; MIDIDevice::Preprocess + Line 87: EXTRN ??0SoftSynthMIDIDevice@@QEAA@HHH@Z:PROC ; SoftSynthMIDIDevice::SoftSynthMIDIDevice + Line 88: EXTRN ??1SoftSynthMIDIDevice@@UEAA@XZ:PROC ; SoftSynthMIDIDevice::~SoftSynthMIDIDevice + Line 89: EXTRN ?Close@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Close + Line 90: EXTRN ?IsOpen@SoftSynthMIDIDevice@@UEBA_NXZ:PROC ; SoftSynthMIDIDevice::IsOpen + Line 91: EXTRN ?GetTechnology@SoftSynthMIDIDevice@@UEBAHXZ:PROC ; SoftSynthMIDIDevice::GetTechnology + Line 92: EXTRN ?SetTempo@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTempo + Line 93: EXTRN ?SetTimeDiv@SoftSynthMIDIDevice@@UEAAHH@Z:PROC ; SoftSynthMIDIDevice::SetTimeDiv + Line 94: EXTRN ?StreamOut@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOut + Line 95: EXTRN ?StreamOutSync@SoftSynthMIDIDevice@@UEAAHPEAUMidiHeader@@@Z:PROC ; SoftSynthMIDIDevice::StreamOutSync + Line 96: EXTRN ?Resume@SoftSynthMIDIDevice@@UEAAHXZ:PROC ; SoftSynthMIDIDevice::Resume + Line 97: EXTRN ?Stop@SoftSynthMIDIDevice@@UEAAXXZ:PROC ; SoftSynthMIDIDevice::Stop + Line 98: EXTRN ?Pause@SoftSynthMIDIDevice@@UEAA_N_N@Z:PROC ; SoftSynthMIDIDevice::Pause + Line 99: EXTRN ?CalcTickRate@SoftSynthMIDIDevice@@MEAAXXZ:PROC ; SoftSynthMIDIDevice::CalcTickRate + Line 100: EXTRN ?OpenStream@SoftSynthMIDIDevice@@IEAAHHHP6AXPEAX@Z0@Z:PROC ; SoftSynthMIDIDevice::OpenStream + Line 101: EXTRN ?ServiceStream@SoftSynthMIDIDevice@@MEAA_NPEAXH@Z:PROC ; SoftSynthMIDIDevice::ServiceStream + Line 102: EXTRN ??_EWildMIDIDevice@@UEAAPEAXI@Z:PROC ; WildMIDIDevice::`vector deleting destructor' + Line 103: EXTRN ?MIDIDeviceChanged@@YAXH_N@Z:PROC ; MIDIDeviceChanged + Line 104: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 105: EXTRN __CxxFrameHandler3:PROC + Line 106: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\music_win_mididevice.cod (45 hits) + Line 79: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 80: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 81: EXTRN atexit:PROC + Line 82: EXTRN strncmp:PROC + Line 83: EXTRN __imp_CloseHandle:PROC + Line 84: EXTRN __imp_SetEvent:PROC + Line 85: EXTRN __imp_ResetEvent:PROC + Line 86: EXTRN __imp_WaitForSingleObject:PROC + Line 87: EXTRN __imp_CreateEventA:PROC + Line 88: EXTRN __imp_Sleep:PROC + Line 89: EXTRN __imp_WaitForMultipleObjects:PROC + Line 90: EXTRN __imp_CreateThread:PROC + Line 91: EXTRN __imp_GetCurrentThread:PROC + Line 92: EXTRN __imp_SetThreadPriority:PROC + Line 93: EXTRN __imp_GetExitCodeThread:PROC + Line 94: EXTRN __imp_midiStreamOpen:PROC + Line 95: EXTRN __imp_midiStreamClose:PROC + Line 96: EXTRN __imp_midiStreamProperty:PROC + Line 97: EXTRN __imp_midiStreamOut:PROC + Line 98: EXTRN __imp_midiStreamRestart:PROC + Line 99: EXTRN __imp_midiStreamStop:PROC + Line 100: EXTRN __imp_midiOutGetDevCapsA:PROC + Line 101: EXTRN __imp_midiOutGetVolume:PROC + Line 102: EXTRN __imp_midiOutSetVolume:PROC + Line 103: EXTRN __imp_midiOutPrepareHeader:PROC + Line 104: EXTRN __imp_midiOutUnprepareHeader:PROC + Line 105: EXTRN __imp_midiOutShortMsg:PROC + Line 106: EXTRN __imp_midiOutReset:PROC + Line 107: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 108: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 109: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 110: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 111: EXTRN ??0MIDIDevice@@QEAA@XZ:PROC ; MIDIDevice::MIDIDevice + Line 112: EXTRN ??1MIDIDevice@@UEAA@XZ:PROC ; MIDIDevice::~MIDIDevice + Line 113: EXTRN ?FluidSettingInt@MIDIDevice@@UEAAXPEBDH@Z:PROC ; MIDIDevice::FluidSettingInt + Line 114: EXTRN ?FluidSettingNum@MIDIDevice@@UEAAXPEBDN@Z:PROC ; MIDIDevice::FluidSettingNum + Line 115: EXTRN ?FluidSettingStr@MIDIDevice@@UEAAXPEBD0@Z:PROC ; MIDIDevice::FluidSettingStr + Line 116: EXTRN ?WildMidiSetOption@MIDIDevice@@UEAAXHH@Z:PROC ; MIDIDevice::WildMidiSetOption + Line 117: EXTRN ?Preprocess@MIDIDevice@@UEAA_NPEAVMIDIStreamer@@_N@Z:PROC ; MIDIDevice::Preprocess + Line 118: EXTRN ?GetStats@MIDIDevice@@UEAA?AVFString@@XZ:PROC ; MIDIDevice::GetStats + Line 119: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 120: EXTRN ??_EWinMIDIDevice@@UEAAPEAXI@Z:PROC ; WinMIDIDevice::`vector deleting destructor' + Line 121: EXTRN __CxxFrameHandler3:PROC + Line 122: EXTRN memset:PROC + Line 123: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\musicblock.cod (11 hits) + Line 34: EXTRN atexit:PROC + Line 35: EXTRN ?WriteFrequency@OPLio@@QEAAXIIII@Z:PROC ; OPLio::WriteFrequency + Line 36: EXTRN ?WriteVolume@OPLio@@QEAAXIPEAUGenMidiVoice@@III@Z:PROC ; OPLio::WriteVolume + Line 37: EXTRN ?WritePan@OPLio@@QEAAXIPEAUGenMidiVoice@@H@Z:PROC ; OPLio::WritePan + Line 38: EXTRN ?WriteTremolo@OPLio@@QEAAXIPEAUGenMidiVoice@@_N@Z:PROC ; OPLio::WriteTremolo + Line 39: EXTRN ?WriteInstrument@OPLio@@QEAAXIPEAUGenMidiVoice@@_N@Z:PROC ; OPLio::WriteInstrument + Line 40: EXTRN ?MuteChannel@OPLio@@QEAAXI@Z:PROC ; OPLio::MuteChannel + Line 41: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 42: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 43: EXTRN memset:PROC + Line 44: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\name.cod (12 hits) + Line 4760: EXTRN atexit:PROC + Line 4761: EXTRN __std_terminate:PROC + Line 4762: EXTRN stricmp:PROC + Line 4763: EXTRN strnicmp:PROC + Line 4764: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 4765: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 4766: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 4767: EXTRN ?MakeKey@@YAIPEBD@Z:PROC ; MakeKey + Line 4768: EXTRN ?MakeKey@@YAIPEBD_K@Z:PROC ; MakeKey + Line 4769: EXTRN ?C_ClearTabCommands@@YAXXZ:PROC ; C_ClearTabCommands + Line 4770: EXTRN __CxxFrameHandler3:PROC + Line 4771: EXTRN memset:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\nodebuild.cod (27 hits) + Line 49: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 50: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 51: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 52: EXTRN __std_terminate:PROC + Line 53: EXTRN qsort:PROC + Line 54: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 55: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 56: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 57: EXTRN ??0FEventTree@@QEAA@XZ:PROC ; FEventTree::FEventTree + Line 58: EXTRN ??1FEventTree@@QEAA@XZ:PROC ; FEventTree::~FEventTree + Line 59: EXTRN ?DeleteAll@FEventTree@@QEAAXXZ:PROC ; FEventTree::DeleteAll + Line 60: EXTRN ??0FVertexMap@FNodeBuilder@@QEAA@AEAV1@HHHH@Z:PROC ; FNodeBuilder::FVertexMap::FVertexMap + Line 61: EXTRN ??0FVertexMapSimple@FNodeBuilder@@QEAA@AEAV1@@Z:PROC ; FNodeBuilder::FVertexMapSimple::FVertexMapSimple + Line 62: EXTRN ?FindUsedVertices@FNodeBuilder@@AEAAXPEAUvertex_t@@H@Z:PROC ; FNodeBuilder::FindUsedVertices + Line 63: EXTRN ?MakeSegsFromSides@FNodeBuilder@@AEAAXXZ:PROC ; FNodeBuilder::MakeSegsFromSides + Line 64: EXTRN ?GroupSegPlanes@FNodeBuilder@@AEAAXXZ:PROC ; FNodeBuilder::GroupSegPlanes + Line 65: EXTRN ?GroupSegPlanesSimple@FNodeBuilder@@AEAAXXZ:PROC ; FNodeBuilder::GroupSegPlanesSimple + Line 66: EXTRN ?FindPolyContainers@FNodeBuilder@@AEAAXAEAV?$TArray@UFPolyStart@FNodeBuilder@@U12@@@0@Z:PROC ; FNodeBuilder::FindPolyContainers + Line 67: EXTRN ?AddSegToBBox@FNodeBuilder@@AEAAXQEAHPEBUFPrivSeg@1@@Z:PROC ; FNodeBuilder::AddSegToBBox + Line 68: EXTRN ?ClassifyLine@FNodeBuilder@@AEAAHAEAUnode_t@@PEBUFPrivVert@1@1QEAH@Z:PROC ; FNodeBuilder::ClassifyLine + Line 69: EXTRN ?FixSplitSharers@FNodeBuilder@@AEAAXAEBUnode_t@@@Z:PROC ; FNodeBuilder::FixSplitSharers + Line 70: EXTRN ?AddIntersection@FNodeBuilder@@AEAANAEBUnode_t@@H@Z:PROC ; FNodeBuilder::AddIntersection + Line 71: EXTRN ?AddMinisegs@FNodeBuilder@@AEAAXAEBUnode_t@@IAEAI1@Z:PROC ; FNodeBuilder::AddMinisegs + Line 72: EXTRN ?AddMiniseg@FNodeBuilder@@AEAAIHHIII@Z:PROC ; FNodeBuilder::AddMiniseg + Line 73: EXTRN __CxxFrameHandler3:PROC + Line 74: EXTRN memset:PROC + Line 75: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\nodebuild_classify_nosse2.cod (1 hit) + Line 14: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\nodebuild_events.cod (7 hits) + Line 25: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 26: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 27: EXTRN __stdio_common_vsprintf:PROC + Line 28: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 29: EXTRN c_sqrt:PROC + Line 30: EXTRN __CxxFrameHandler3:PROC + Line 31: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\nodebuild_extract.cod (11 hits) + Line 25: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 26: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 27: EXTRN __std_terminate:PROC + Line 28: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 29: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 30: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 31: EXTRN ?PointToAngle@FNodeBuilder@@SAIHH@Z:PROC ; FNodeBuilder::PointToAngle + Line 32: EXTRN __CxxFrameHandler3:PROC + Line 33: EXTRN memcpy:PROC + Line 34: EXTRN memset:PROC + Line 35: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\nodebuild_gl.cod (10 hits) + Line 18: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 19: EXTRN ?GetMinimum@FEventTree@@QEAAPEAUFEvent@@XZ:PROC ; FEventTree::GetMinimum + Line 20: EXTRN ?GetNewNode@FEventTree@@QEAAPEAUFEvent@@XZ:PROC ; FEventTree::GetNewNode + Line 21: EXTRN ?Insert@FEventTree@@QEAAXPEAUFEvent@@@Z:PROC ; FEventTree::Insert + Line 22: EXTRN ?FindEvent@FEventTree@@QEBAPEAUFEvent@@N@Z:PROC ; FEventTree::FindEvent + Line 23: EXTRN ?Successor@FEventTree@@AEBAPEAUFEvent@@PEAU2@@Z:PROC ; FEventTree::Successor + Line 24: EXTRN ?Predecessor@FEventTree@@AEBAPEAUFEvent@@PEAU2@@Z:PROC ; FEventTree::Predecessor + Line 25: EXTRN ?PointToAngle@FNodeBuilder@@SAIHH@Z:PROC ; FNodeBuilder::PointToAngle + Line 26: EXTRN ?SplitSeg@FNodeBuilder@@AEAAIIHH@Z:PROC ; FNodeBuilder::SplitSeg + Line 27: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\nodebuild_utility.cod (20 hits) + Line 57: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 58: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 59: EXTRN _purecall:PROC + Line 60: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 61: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 62: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 63: EXTRN ??_V@YAXPEAX_K@Z:PROC ; operator delete[] + Line 64: EXTRN __std_terminate:PROC + Line 65: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 66: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 67: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 68: EXTRN c_atan2:PROC + Line 69: EXTRN ??_EIVertexMap@FNodeBuilder@@UEAAPEAXI@Z:PROC ; FNodeBuilder::IVertexMap::`vector deleting destructor' + Line 70: EXTRN ??_EFVertexMap@FNodeBuilder@@UEAAPEAXI@Z:PROC ; FNodeBuilder::FVertexMap::`vector deleting destructor' + Line 71: EXTRN ??_EFVertexMapSimple@FNodeBuilder@@UEAAPEAXI@Z:PROC ; FNodeBuilder::FVertexMapSimple::`vector deleting destructor' + Line 72: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 73: EXTRN __CxxFrameHandler3:PROC + Line 74: EXTRN __chkstk:PROC + Line 75: EXTRN memset:PROC + Line 76: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\nuked_opl3.cod (12 hits) + Line 43: EXTRN _purecall:PROC + Line 44: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 45: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 46: EXTRN ??_EOPLChipBase@@UEAAPEAXI@Z:PROC ; OPLChipBase::`vector deleting destructor' + Line 47: EXTRN ??_E?$OPLChipBaseT@VNukedOPL3@@@@UEAAPEAXI@Z:PROC ; OPLChipBaseT::`vector deleting destructor' + Line 48: EXTRN ??_ENukedOPL3@@UEAAPEAXI@Z:PROC ; NukedOPL3::`vector deleting destructor' + Line 49: EXTRN OPL3_Generate:PROC + Line 50: EXTRN OPL3_Reset:PROC + Line 51: EXTRN OPL3_WriteRegBuffered:PROC + Line 52: EXTRN OPL3_WritePan:PROC + Line 53: EXTRN __CxxFrameHandler3:PROC + Line 54: EXTRN memset:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\nuked_opl3_v174.cod (12 hits) + Line 43: EXTRN _purecall:PROC + Line 44: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 45: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 46: EXTRN ??_EOPLChipBase@@UEAAPEAXI@Z:PROC ; OPLChipBase::`vector deleting destructor' + Line 47: EXTRN ??_E?$OPLChipBaseT@VNukedOPL3v174@@@@UEAAPEAXI@Z:PROC ; OPLChipBaseT::`vector deleting destructor' + Line 48: EXTRN ??_ENukedOPL3v174@@UEAAPEAXI@Z:PROC ; NukedOPL3v174::`vector deleting destructor' + Line 49: EXTRN OPL3v17_Generate:PROC + Line 50: EXTRN OPL3v17_Reset:PROC + Line 51: EXTRN OPL3v17_WritePan:PROC + Line 52: EXTRN OPL3v17_WriteReg:PROC + Line 53: EXTRN __CxxFrameHandler3:PROC + Line 54: EXTRN memset:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\nuked_opn2.cod (12 hits) + Line 43: EXTRN _purecall:PROC + Line 44: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 45: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 46: EXTRN ??_EOPNChipBase@@UEAAPEAXI@Z:PROC ; OPNChipBase::`vector deleting destructor' + Line 47: EXTRN ??_E?$OPNChipBaseT@VNukedOPN2@@@@UEAAPEAXI@Z:PROC ; OPNChipBaseT::`vector deleting destructor' + Line 48: EXTRN ??_ENukedOPN2@@UEAAPEAXI@Z:PROC ; NukedOPN2::`vector deleting destructor' + Line 49: EXTRN OPN2_Reset:PROC + Line 50: EXTRN OPN2_SetChipType:PROC + Line 51: EXTRN OPN2_WritePan:PROC + Line 52: EXTRN OPN2_WriteBuffered:PROC + Line 53: EXTRN OPN2_Generate:PROC + Line 54: EXTRN __CxxFrameHandler3:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\nukedopl3.cod (8 hits) + Line 80: EXTRN _purecall:PROC + Line 81: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 82: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 83: EXTRN ??_EOPLEmul@@UEAAPEAXI@Z:PROC ; OPLEmul::`vector deleting destructor' + Line 84: EXTRN ??_ENukedOPL3@0@UEAAPEAXI@Z:PROC ; NukedOPL3::NukedOPL3::`vector deleting destructor' + Line 85: EXTRN memset:PROC + Line 86: EXTRN __ImageBase:BYTE + Line 87: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\nukedopl3_174.cod (2 hits) + Line 24: EXTRN memset:PROC + Line 25: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\oalsound.cod (101 hits) + Line 827: EXTRN _purecall:PROC + Line 828: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 829: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 830: EXTRN atexit:PROC + Line 831: EXTRN __std_terminate:PROC + Line 832: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 833: EXTRN terminate:PROC + Line 834: EXTRN __std_exception_copy:PROC + Line 835: EXTRN __std_exception_destroy:PROC + Line 836: EXTRN ??_Eexception@std@@UEAAPEAXI@Z:PROC ; std::exception::`vector deleting destructor' + Line 837: EXTRN strchr:PROC + Line 838: EXTRN strrchr:PROC + Line 839: EXTRN strstr:PROC + Line 840: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 841: EXTRN _Thrd_start:PROC + Line 842: EXTRN _Xtime_get_ticks:PROC + Line 843: EXTRN _Query_perf_counter:PROC + Line 844: EXTRN _Query_perf_frequency:PROC + Line 845: EXTRN ??_Eruntime_error@std@@UEAAPEAXI@Z:PROC ; std::runtime_error::`vector deleting destructor' + Line 846: EXTRN ?_Execute_once@std@@YAHAEAUonce_flag@1@P6AHPEAX1PEAPEAX@Z1@Z:PROC ; std::_Execute_once + Line 847: EXTRN ??_E_System_error@std@@UEAAPEAXI@Z:PROC ; std::_System_error::`vector deleting destructor' + Line 848: EXTRN ??_Esystem_error@std@@UEAAPEAXI@Z:PROC ; std::system_error::`vector deleting destructor' + Line 849: EXTRN ?_Syserror_map@std@@YAPEBDH@Z:PROC ; std::_Syserror_map + Line 850: EXTRN ??_E_Generic_error_category@std@@UEAAPEAXI@Z:PROC ; std::_Generic_error_category::`vector deleting destructor' + Line 851: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 852: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 853: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 854: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 855: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 856: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 857: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 858: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 859: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 860: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 861: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 862: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 863: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 864: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 865: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 866: EXTRN _Thrd_join:PROC + Line 867: EXTRN _Thrd_id:PROC + Line 868: EXTRN _Mtx_init:PROC + Line 869: EXTRN _Mtx_destroy:PROC + Line 870: EXTRN _Mtx_init_in_situ:PROC + Line 871: EXTRN _Mtx_destroy_in_situ:PROC + Line 872: EXTRN _Mtx_current_owns:PROC + Line 873: EXTRN _Mtx_lock:PROC + Line 874: EXTRN _Mtx_unlock:PROC + Line 875: EXTRN _Cnd_init:PROC + Line 876: EXTRN _Cnd_destroy:PROC + Line 877: EXTRN _Cnd_init_in_situ:PROC + Line 878: EXTRN _Cnd_destroy_in_situ:PROC + Line 879: EXTRN _Cnd_wait:PROC + Line 880: EXTRN _Cnd_timedwait:PROC + Line 881: EXTRN _Cnd_broadcast:PROC + Line 882: EXTRN _Cnd_signal:PROC + Line 883: EXTRN _Cnd_do_broadcast_at_thread_exit:PROC + Line 884: EXTRN ?_Throw_C_error@std@@YAXH@Z:PROC ; std::_Throw_C_error + Line 885: EXTRN ?_Throw_Cpp_error@std@@YAXH@Z:PROC ; std::_Throw_Cpp_error + Line 886: EXTRN c_sqrt:PROC + Line 887: EXTRN ?FindLoopTags@@YAXAEAVFileReader@@PEAIPEA_N12@Z:PROC ; FindLoopTags + Line 888: EXTRN ?GetSampleTypeName@@YAPEBDW4SampleType@@@Z:PROC ; GetSampleTypeName + Line 889: EXTRN ?GetChannelConfigName@@YAPEBDW4ChannelConfig@@@Z:PROC ; GetChannelConfigName + Line 890: EXTRN ??1SoundStream@@UEAA@XZ:PROC ; SoundStream::~SoundStream + Line 891: EXTRN ?SetPosition@SoundStream@@UEAA_NI@Z:PROC ; SoundStream::SetPosition + Line 892: EXTRN ?SetOrder@SoundStream@@UEAA_NH@Z:PROC ; SoundStream::SetOrder + Line 893: EXTRN ?GetStats@SoundStream@@UEAA?AVFString@@XZ:PROC ; SoundStream::GetStats + Line 894: EXTRN ??_ESoundStream@@UEAAPEAXI@Z:PROC ; SoundStream::`vector deleting destructor' + Line 895: EXTRN ??0SoundRenderer@@QEAA@XZ:PROC ; SoundRenderer::SoundRenderer + Line 896: EXTRN ??1SoundRenderer@@UEAA@XZ:PROC ; SoundRenderer::~SoundRenderer + Line 897: EXTRN ?DecodeSample@SoundRenderer@@UEAAPEAFHPEBXHW4ECodecType@@@Z:PROC ; SoundRenderer::DecodeSample + Line 898: EXTRN ?DrawWaveDebug@SoundRenderer@@UEAAXH@Z:PROC ; SoundRenderer::DrawWaveDebug + Line 899: EXTRN ?CreateDecoder@SoundRenderer@@SAPEAUSoundDecoder@@AEAVFileReader@@@Z:PROC ; SoundRenderer::CreateDecoder + Line 900: EXTRN ?S_ChannelEnded@@YAXPEAUFISoundChannel@@@Z:PROC ; S_ChannelEnded + Line 901: EXTRN ?S_GetChannel@@YAPEAUFISoundChannel@@PEAX@Z:PROC ; S_GetChannel + Line 902: EXTRN ?S_FindEnvironment@@YAPEAUReverbContainer@@H@Z:PROC ; S_FindEnvironment + Line 903: EXTRN ?OpenMemory@FileReader@@QEAA_NPEBX_J@Z:PROC ; FileReader::OpenMemory + Line 904: EXTRN ??_EOpenALSoundRenderer@@UEAAPEAXI@Z:PROC ; OpenALSoundRenderer::`vector deleting destructor' + Line 905: EXTRN ?AddCommandString@@YAXPEBDH@Z:PROC ; AddCommandString + Line 906: EXTRN ?Load@FModule@@QEAA_NV?$initializer_list@PEBD@std@@@Z:PROC ; FModule::Load + Line 907: EXTRN ?Unload@FModule@@QEAAXXZ:PROC ; FModule::Unload + Line 908: EXTRN ?NicePath@@YA?AVFString@@PEBD@Z:PROC ; NicePath + Line 909: EXTRN ??_EOpenALSoundStream@@UEAAPEAXI@Z:PROC ; OpenALSoundStream::`vector deleting destructor' + Line 910: EXTRN _CxxThrowException:PROC + Line 911: EXTRN __CxxFrameHandler3:PROC + Line 912: EXTRN __libm_sse2_sincosf_:PROC + Line 913: EXTRN memcpy:PROC + Line 914: EXTRN memmove:PROC + Line 915: EXTRN pow:PROC + Line 916: EXTRN powf:PROC + Line 917: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 918: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 919: EXTRN ?DefaultEnvironments@@3PAPEAUReverbContainer@@A:BYTE ; DefaultEnvironments + Line 920: EXTRN ?S_SoundCurve@@3V?$TArray@EE@@A:BYTE ; S_SoundCurve + Line 921: EXTRN ?Channels@@3PEAUFSoundChan@@EA:QWORD ; Channels + Line 922: EXTRN ?snd_channels@@3VFIntCVar@@A:BYTE ; snd_channels + Line 923: EXTRN ?snd_samplerate@@3VFIntCVar@@A:BYTE ; snd_samplerate + Line 924: EXTRN ?snd_waterreverb@@3VFBoolCVar@@A:BYTE ; snd_waterreverb + Line 925: EXTRN ?snd_pitched@@3VFBoolCVar@@A:BYTE ; snd_pitched + Line 926: EXTRN ?snd_hrtf@@3VFIntCVar@@A:BYTE ; snd_hrtf + Line 927: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\olddecorations.cod (39 hits) + Line 126: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 127: EXTRN __std_terminate:PROC + Line 128: EXTRN strtoll:PROC + Line 129: EXTRN strchr:PROC + Line 130: EXTRN strtok:PROC + Line 131: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 132: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 133: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 134: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 135: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 136: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 137: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 138: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 139: EXTRN ?SetAction@FState@@QEAAXPEBD@Z:PROC ; FState::SetAction + Line 140: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 141: EXTRN ?GetSpriteIndex@@YAHPEBD_N@Z:PROC ; GetSpriteIndex + Line 142: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 143: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 144: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 145: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 146: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 147: EXTRN ?MustMatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MustMatchString + Line 148: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 149: EXTRN ??0FScriptPosition@@QEAA@AEBU0@@Z:PROC ; FScriptPosition::FScriptPosition + Line 150: EXTRN ??0FScriptPosition@@QEAA@AEAVFScanner@@@Z:PROC ; FScriptPosition::FScriptPosition + Line 151: EXTRN ?SetStateLabel@FStateDefinitions@@QEAAXPEBDPEAUFState@@E@Z:PROC ; FStateDefinitions::SetStateLabel + Line 152: EXTRN ?InstallStates@FStateDefinitions@@QEAAXPEAVPClassActor@@PEAVAActor@@@Z:PROC ; FStateDefinitions::InstallStates + Line 153: EXTRN ?MakeStateDefines@FStateDefinitions@@QEAAXPEBVPClassActor@@@Z:PROC ; FStateDefinitions::MakeStateDefines + Line 154: EXTRN ?SaveStateSourceLines@@YAXPEAUFState@@AEAV?$TArray@UFScriptPosition@@U1@@@@Z:PROC ; SaveStateSourceLines + Line 155: EXTRN ?HandleActorFlag@@YAXAEAVFScanner@@AEAUBaggage@@PEBD2H@Z:PROC ; HandleActorFlag + Line 156: EXTRN ?DecoDerivedClass@@YAPEAVPClassActor@@AEBUFScriptPosition@@PEAV1@VFName@@@Z:PROC ; DecoDerivedClass + Line 157: EXTRN __CxxFrameHandler3:PROC + Line 158: EXTRN memcpy:PROC + Line 159: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 160: EXTRN ?ClassDataAllocator@@3VFMemArena@@A:BYTE ; ClassDataAllocator + Line 161: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 162: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 163: EXTRN ?TypeString@@3PEAVPString@@EA:QWORD ; TypeString + Line 164: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\opl.cod (15 hits) + Line 74: EXTRN _purecall:PROC + Line 75: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 76: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 77: EXTRN atexit:PROC + Line 78: EXTRN ??_EOPLEmul@@UEAAPEAXI@Z:PROC ; OPLEmul::`vector deleting destructor' + Line 79: EXTRN ??0FRandom@@QEAA@XZ:PROC ; FRandom::FRandom + Line 80: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 81: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 82: EXTRN ??_EDBOPL@@UEAAPEAXI@Z:PROC ; DBOPL::`vector deleting destructor' + Line 83: EXTRN __chkstk:PROC + Line 84: EXTRN memset:PROC + Line 85: EXTRN pow:PROC + Line 86: EXTRN sin:PROC + Line 87: EXTRN __ImageBase:BYTE + Line 88: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\opl_mus_player.cod (30 hits) + Line 42: EXTRN _purecall:PROC + Line 43: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 44: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 45: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 46: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 47: EXTRN __std_terminate:PROC + Line 48: EXTRN ?CreateCriticalSection@@YAPEAVFInternalCriticalSection@@XZ:PROC ; CreateCriticalSection + Line 49: EXTRN ?DeleteCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; DeleteCriticalSection + Line 50: EXTRN ?EnterCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; EnterCriticalSection + Line 51: EXTRN ?LeaveCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; LeaveCriticalSection + Line 52: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 53: EXTRN ??1OPLio@@UEAA@XZ:PROC ; OPLio::~OPLio + Line 54: EXTRN ?Init@OPLio@@UEAAHI_N0@Z:PROC ; OPLio::Init + Line 55: EXTRN ?Reset@OPLio@@UEAAXXZ:PROC ; OPLio::Reset + Line 56: EXTRN ?WriteRegister@OPLio@@UEAAXHIE@Z:PROC ; OPLio::WriteRegister + Line 57: EXTRN ?SetClockRate@OPLio@@UEAAXN@Z:PROC ; OPLio::SetClockRate + Line 58: EXTRN ?WriteDelay@OPLio@@UEAAXH@Z:PROC ; OPLio::WriteDelay + Line 59: EXTRN ??_EOPLio@@UEAAPEAXI@Z:PROC ; OPLio::`vector deleting destructor' + Line 60: EXTRN ??0DiskWriterIO@@QEAA@PEBD@Z:PROC ; DiskWriterIO::DiskWriterIO + Line 61: EXTRN ??0musicBlock@@QEAA@XZ:PROC ; musicBlock::musicBlock + Line 62: EXTRN ??1musicBlock@@QEAA@XZ:PROC ; musicBlock::~musicBlock + Line 63: EXTRN ?resetAllControllers@musicBlock@@QEAAXH@Z:PROC ; musicBlock::resetAllControllers + Line 64: EXTRN ?stopAllVoices@musicBlock@@QEAAXXZ:PROC ; musicBlock::stopAllVoices + Line 65: EXTRN ??_EOPLmusicBlock@@UEAAPEAXI@Z:PROC ; OPLmusicBlock::`vector deleting destructor' + Line 66: EXTRN ??_EOPLmusicFile@@UEAAPEAXI@Z:PROC ; OPLmusicFile::`vector deleting destructor' + Line 67: EXTRN __CxxFrameHandler3:PROC + Line 68: EXTRN memcpy:PROC + Line 69: EXTRN memset:PROC + Line 70: EXTRN ?opl_numchips@@3VFIntCVar@@A:BYTE ; opl_numchips + Line 71: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\OPL3.cod (28 hits) + Line 339: EXTRN _purecall:PROC + Line 340: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 341: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 342: EXTRN atexit:PROC + Line 343: EXTRN __std_terminate:PROC + Line 344: EXTRN ??_EOPLEmul@@UEAAPEAXI@Z:PROC ; OPLEmul::`vector deleting destructor' + Line 345: EXTRN ??0FRandom@@QEAA@XZ:PROC ; FRandom::FRandom + Line 346: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 347: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 348: EXTRN ??_EChannel@JavaOPL3@@UEAAPEAXI@Z:PROC ; JavaOPL3::Channel::`vector deleting destructor' + Line 349: EXTRN ??_EChannel2op@JavaOPL3@@UEAAPEAXI@Z:PROC ; JavaOPL3::Channel2op::`vector deleting destructor' + Line 350: EXTRN ??_EChannel4op@JavaOPL3@@UEAAPEAXI@Z:PROC ; JavaOPL3::Channel4op::`vector deleting destructor' + Line 351: EXTRN ??_EDisabledChannel@JavaOPL3@@UEAAPEAXI@Z:PROC ; JavaOPL3::DisabledChannel::`vector deleting destructor' + Line 352: EXTRN ??_ERhythmChannel@JavaOPL3@@UEAAPEAXI@Z:PROC ; JavaOPL3::RhythmChannel::`vector deleting destructor' + Line 353: EXTRN ??_EHighHatSnareDrumChannel@JavaOPL3@@UEAAPEAXI@Z:PROC ; JavaOPL3::HighHatSnareDrumChannel::`vector deleting destructor' + Line 354: EXTRN ??_ETomTomTopCymbalChannel@JavaOPL3@@UEAAPEAXI@Z:PROC ; JavaOPL3::TomTomTopCymbalChannel::`vector deleting destructor' + Line 355: EXTRN ??_EBassDrumChannel@JavaOPL3@@UEAAPEAXI@Z:PROC ; JavaOPL3::BassDrumChannel::`vector deleting destructor' + Line 356: EXTRN ??_EOPL3@JavaOPL3@@UEAAPEAXI@Z:PROC ; JavaOPL3::OPL3::`vector deleting destructor' + Line 357: EXTRN __CxxFrameHandler3:PROC + Line 358: EXTRN floor:PROC + Line 359: EXTRN log:PROC + Line 360: EXTRN log10:PROC + Line 361: EXTRN memset:PROC + Line 362: EXTRN pow:PROC + Line 363: EXTRN sin:PROC + Line 364: EXTRN sqrt:PROC + Line 365: EXTRN __ImageBase:BYTE + Line 366: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\oplio.cod (11 hits) + Line 28: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 29: EXTRN ??_EOPLio@@UEAAPEAXI@Z:PROC ; OPLio::`vector deleting destructor' + Line 30: EXTRN ?YM3812Create@@YAPEAVOPLEmul@@_N@Z:PROC ; YM3812Create + Line 31: EXTRN ?DBOPLCreate@@YAPEAVOPLEmul@@_N@Z:PROC ; DBOPLCreate + Line 32: EXTRN ?JavaOPLCreate@@YAPEAVOPLEmul@@_N@Z:PROC ; JavaOPLCreate + Line 33: EXTRN ?NukedOPL3Create@@YAPEAVOPLEmul@@_N@Z:PROC ; NukedOPL3Create + Line 34: EXTRN cos:PROC + Line 35: EXTRN sin:PROC + Line 36: EXTRN ?current_opl_core@@3HA:DWORD ; current_opl_core + Line 37: EXTRN __ImageBase:BYTE + Line 38: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\opnmidi.cod (52 hits) + Line 152: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 153: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 154: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 155: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 156: EXTRN __std_terminate:PROC + Line 157: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 158: EXTRN free:PROC + Line 159: EXTRN malloc:PROC + Line 160: EXTRN ??2@YAPEAX_KAEBUnothrow_t@std@@@Z:PROC ; operator new + Line 161: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 162: EXTRN ?cvt_OPNI_to_FMIns@@YAXAEAUopnInstMeta2@@AEBUOPN2_Instrument@@@Z:PROC ; cvt_OPNI_to_FMIns + Line 163: EXTRN ?cvt_FMIns_to_OPNI@@YAXAEAUOPN2_Instrument@@AEBUopnInstMeta2@@@Z:PROC ; cvt_FMIns_to_OPNI + Line 164: EXTRN ??1OPN2@@QEAA@XZ:PROC ; OPN2::~OPN2 + Line 165: EXTRN ?setupLocked@OPN2@@QEAA_NXZ:PROC ; OPN2::setupLocked + Line 166: EXTRN ?commitLFOSetup@OPN2@@QEAAXXZ:PROC ; OPN2::commitLFOSetup + Line 167: EXTRN ?setVolumeScaleModel@OPN2@@QEAAXW4OPNMIDI_VolumeModels@@@Z:PROC ; OPN2::setVolumeScaleModel + Line 168: EXTRN ?getVolumeScaleModel@OPN2@@QEAA?AW4OPNMIDI_VolumeModels@@XZ:PROC ; OPN2::getVolumeScaleModel + Line 169: EXTRN ??0OPNMIDIplay@@QEAA@K@Z:PROC ; OPNMIDIplay::OPNMIDIplay + Line 170: EXTRN ?partialReset@OPNMIDIplay@@QEAAXXZ:PROC ; OPNMIDIplay::partialReset + Line 171: EXTRN ?resetMIDI@OPNMIDIplay@@QEAAXXZ:PROC ; OPNMIDIplay::resetMIDI + Line 172: EXTRN ?getErrorString@OPNMIDIplay@@QEAAAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ:PROC ; OPNMIDIplay::getErrorString + Line 173: EXTRN ?setErrorString@OPNMIDIplay@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z:PROC ; OPNMIDIplay::setErrorString + Line 174: EXTRN ?LoadBank@OPNMIDIplay@@QEAA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z:PROC ; OPNMIDIplay::LoadBank + Line 175: EXTRN ?LoadBank@OPNMIDIplay@@QEAA_NPEBX_K@Z:PROC ; OPNMIDIplay::LoadBank + Line 176: EXTRN ?TickIterators@OPNMIDIplay@@QEAAXN@Z:PROC ; OPNMIDIplay::TickIterators + Line 177: EXTRN ?realTime_ResetState@OPNMIDIplay@@QEAAXXZ:PROC ; OPNMIDIplay::realTime_ResetState + Line 178: EXTRN ?realTime_NoteOn@OPNMIDIplay@@QEAA_NEEE@Z:PROC ; OPNMIDIplay::realTime_NoteOn + Line 179: EXTRN ?realTime_NoteOff@OPNMIDIplay@@QEAAXEE@Z:PROC ; OPNMIDIplay::realTime_NoteOff + Line 180: EXTRN ?realTime_NoteAfterTouch@OPNMIDIplay@@QEAAXEEE@Z:PROC ; OPNMIDIplay::realTime_NoteAfterTouch + Line 181: EXTRN ?realTime_ChannelAfterTouch@OPNMIDIplay@@QEAAXEE@Z:PROC ; OPNMIDIplay::realTime_ChannelAfterTouch + Line 182: EXTRN ?realTime_Controller@OPNMIDIplay@@QEAAXEEE@Z:PROC ; OPNMIDIplay::realTime_Controller + Line 183: EXTRN ?realTime_PatchChange@OPNMIDIplay@@QEAAXEE@Z:PROC ; OPNMIDIplay::realTime_PatchChange + Line 184: EXTRN ?realTime_PitchBend@OPNMIDIplay@@QEAAXEG@Z:PROC ; OPNMIDIplay::realTime_PitchBend + Line 185: EXTRN ?realTime_PitchBend@OPNMIDIplay@@QEAAXEEE@Z:PROC ; OPNMIDIplay::realTime_PitchBend + Line 186: EXTRN ?realTime_BankChangeLSB@OPNMIDIplay@@QEAAXEE@Z:PROC ; OPNMIDIplay::realTime_BankChangeLSB + Line 187: EXTRN ?realTime_BankChangeMSB@OPNMIDIplay@@QEAAXEE@Z:PROC ; OPNMIDIplay::realTime_BankChangeMSB + Line 188: EXTRN ?realTime_BankChange@OPNMIDIplay@@QEAAXEG@Z:PROC ; OPNMIDIplay::realTime_BankChange + Line 189: EXTRN ?setDeviceId@OPNMIDIplay@@QEAAXE@Z:PROC ; OPNMIDIplay::setDeviceId + Line 190: EXTRN ?realTime_SysEx@OPNMIDIplay@@QEAA_NPEBE_K@Z:PROC ; OPNMIDIplay::realTime_SysEx + Line 191: EXTRN ?realTime_panic@OPNMIDIplay@@QEAAXXZ:PROC ; OPNMIDIplay::realTime_panic + Line 192: EXTRN ?describeChannels@OPNMIDIplay@@QEAAXPEAD0_K@Z:PROC ; OPNMIDIplay::describeChannels + Line 193: EXTRN ?opn2_isEmulatorAvailable@@YA_NH@Z:PROC ; opn2_isEmulatorAvailable + Line 194: EXTRN _CxxThrowException:PROC + Line 195: EXTRN __CxxFrameHandler3:PROC + Line 196: EXTRN __chkstk:PROC + Line 197: EXTRN memcpy:PROC + Line 198: EXTRN memmove:PROC + Line 199: EXTRN memset:PROC + Line 200: EXTRN ?nothrow@std@@3Unothrow_t@1@B:BYTE ; std::nothrow + Line 201: EXTRN ?OPN2MIDI_ErrorString@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A:BYTE ; OPN2MIDI_ErrorString + Line 202: EXTRN __ImageBase:BYTE + Line 203: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\opnmidi_load.cod (25 hits) + Line 42: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 43: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 44: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 45: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 46: EXTRN __std_terminate:PROC + Line 47: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 48: EXTRN __imp_MultiByteToWideChar:PROC + Line 49: EXTRN free:PROC + Line 50: EXTRN malloc:PROC + Line 51: EXTRN _wfopen:PROC + Line 52: EXTRN fclose:PROC + Line 53: EXTRN fread:PROC + Line 54: EXTRN fseek:PROC + Line 55: EXTRN ftell:PROC + Line 56: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 57: EXTRN ?applySetup@OPNMIDIplay@@QEAAXXZ:PROC ; OPNMIDIplay::applySetup + Line 58: EXTRN WOPN_Free:PROC + Line 59: EXTRN WOPN_LoadBankFromMem:PROC + Line 60: EXTRN _CxxThrowException:PROC + Line 61: EXTRN __CxxFrameHandler3:PROC + Line 62: EXTRN __chkstk:PROC + Line 63: EXTRN memcpy:PROC + Line 64: EXTRN memmove:PROC + Line 65: EXTRN memset:PROC + Line 66: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\opnmidi_midiplay.cod (29 hits) + Line 182: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 183: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 184: EXTRN __std_terminate:PROC + Line 185: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 186: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 187: EXTRN ??0OPN2@@QEAA@XZ:PROC ; OPN2::OPN2 + Line 188: EXTRN ??1OPN2@@QEAA@XZ:PROC ; OPN2::~OPN2 + Line 189: EXTRN ?noteOff@OPN2@@QEAAX_K@Z:PROC ; OPN2::noteOff + Line 190: EXTRN ?noteOn@OPN2@@QEAAX_KN@Z:PROC ; OPN2::noteOn + Line 191: EXTRN ?touchNote@OPN2@@QEAAX_KEE@Z:PROC ; OPN2::touchNote + Line 192: EXTRN ?setPatch@OPN2@@QEAAX_KAEBUopnInstData@@@Z:PROC ; OPN2::setPatch + Line 193: EXTRN ?setPan@OPN2@@QEAAX_KE@Z:PROC ; OPN2::setPan + Line 194: EXTRN ?setVolumeScaleModel@OPN2@@QEAAXW4OPNMIDI_VolumeModels@@@Z:PROC ; OPN2::setVolumeScaleModel + Line 195: EXTRN ?reset@OPN2@@QEAAXHKPEAX@Z:PROC ; OPN2::reset + Line 196: EXTRN ?opn2_getLowestEmulator@@YAHXZ:PROC ; opn2_getLowestEmulator + Line 197: EXTRN _CxxThrowException:PROC + Line 198: EXTRN __CxxFrameHandler3:PROC + Line 199: EXTRN __chkstk:PROC + Line 200: EXTRN exp:PROC + Line 201: EXTRN log:PROC + Line 202: EXTRN memcmp:PROC + Line 203: EXTRN memcpy:PROC + Line 204: EXTRN memmove:PROC + Line 205: EXTRN memset:PROC + Line 206: EXTRN pow:PROC + Line 207: EXTRN sin:PROC + Line 208: EXTRN ?m_emptyInstrument@OPN2@@2UopnInstMeta2@@B:BYTE ; OPN2::m_emptyInstrument + Line 209: EXTRN __ImageBase:BYTE + Line 210: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\opnmidi_opn2.cod (19 hits) + Line 61: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 62: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 63: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 64: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 65: EXTRN __std_terminate:PROC + Line 66: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 67: EXTRN abort:PROC + Line 68: EXTRN round:PROC + Line 69: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 70: EXTRN ??0NukedOPN2@@QEAA@XZ:PROC ; NukedOPN2::NukedOPN2 + Line 71: EXTRN ??0MameOPN2@@QEAA@XZ:PROC ; MameOPN2::MameOPN2 + Line 72: EXTRN ??0GensOPN2@@QEAA@XZ:PROC ; GensOPN2::GensOPN2 + Line 73: EXTRN _CxxThrowException:PROC + Line 74: EXTRN __CxxFrameHandler3:PROC + Line 75: EXTRN __chkstk:PROC + Line 76: EXTRN memcpy:PROC + Line 77: EXTRN memmove:PROC + Line 78: EXTRN memset:PROC + Line 79: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\opnmidi_private.cod (3 hits) + Line 10: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 11: EXTRN atexit:PROC + Line 12: EXTRN _invalid_parameter_noinfo_noreturn:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_3dfloors.cod (20 hits) + Line 45: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 46: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 47: EXTRN atexit:PROC + Line 48: EXTRN __std_terminate:PROC + Line 49: EXTRN strtoll:PROC + Line 50: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 51: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 52: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 53: EXTRN ?TriggerSectorActions@sector_t@@QEAA_NPEAVAActor@@H@Z:PROC ; sector_t::TriggerSectorActions + Line 54: EXTRN ?GetTerrain@@YAHPEBUsector_t@@H@Z:PROC ; GetTerrain + Line 55: EXTRN ?P_PlayerInSpecialSector@@YAXPEAVplayer_t@@PEAUsector_t@@@Z:PROC ; P_PlayerInSpecialSector + Line 56: EXTRN ?P_PlayerOnSpecialFlat@@YAXPEAVplayer_t@@H@Z:PROC ; P_PlayerOnSpecialFlat + Line 57: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 58: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 59: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 60: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 61: EXTRN __CxxFrameHandler3:PROC + Line 62: EXTRN memmove:PROC + Line 63: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 64: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_3dmidtex.cod (15 hits) + Line 22: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 23: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 24: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 25: EXTRN ?P_ChangeSector@@YA_NPEAUsector_t@@HNH_N1@Z:PROC ; P_ChangeSector + Line 26: EXTRN ?RowOffset@FTexCoordInfo@@QEBAMM@Z:PROC ; FTexCoordInfo::RowOffset + Line 27: EXTRN ?GetFromTexture@FTexCoordInfo@@QEAAXPEAVFTexture@@MM_N@Z:PROC ; FTexCoordInfo::GetFromTexture + Line 28: EXTRN ?SetInterpolation@side_t@@QEAAPEAVDInterpolation@@H@Z:PROC ; side_t::SetInterpolation + Line 29: EXTRN ?LineHasID@FTagManager@@AEBA_NPEBUline_t@@H@Z:PROC ; FTagManager::LineHasID + Line 30: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 31: EXTRN ?Next@FLineIdIterator@@QEAAHXZ:PROC ; FLineIdIterator::Next + Line 32: EXTRN memset:PROC + Line 33: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 34: EXTRN ?DefaultTerrainType@@3GA:WORD ; DefaultTerrainType + Line 35: EXTRN ?TerrainTypes@@3VFTerrainTypeArray@@A:BYTE ; TerrainTypes + Line 36: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_acs.cod (291 hits) + Line 32: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 33: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 34: EXTRN ??_EStat_ACS@@UEAAPEAXI@Z:PROC ; Stat_ACS::`vector deleting destructor' + Line 521: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 522: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 523: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 524: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 525: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 526: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 527: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 528: EXTRN ??_V@YAXPEAX_K@Z:PROC ; operator delete[] + Line 529: EXTRN atexit:PROC + Line 530: EXTRN __std_terminate:PROC + Line 531: EXTRN qsort:PROC + Line 532: EXTRN strtol:PROC + Line 533: EXTRN strtoll:PROC + Line 534: EXTRN strncmp:PROC + Line 535: EXTRN stricmp:PROC + Line 536: EXTRN strnicmp:PROC + Line 537: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 538: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 539: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 540: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 541: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 542: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 543: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 544: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 545: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 546: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 547: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 548: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 549: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 550: EXTRN ?ToUpper@FString@@QEAAXXZ:PROC ; FString::ToUpper + Line 551: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 552: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 553: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 554: EXTRN ??0FStringf@@QEAA@PEBDZZ:PROC ; FStringf::FStringf + Line 555: EXTRN ?SuperFastHash@@YAIPEBD_K@Z:PROC ; SuperFastHash + Line 556: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 557: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 558: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 559: EXTRN mysnprintf:PROC + Line 560: EXTRN c_atan2:PROC + Line 561: EXTRN c_sqrt:PROC + Line 562: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 563: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 564: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 565: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 566: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 567: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 568: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 569: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 570: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 571: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 572: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 573: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 574: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 575: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 576: EXTRN ?P_MoveThing@@YA_NPEAVAActor@@AEBU?$TVector3@N@@_N@Z:PROC ; P_MoveThing + Line 577: EXTRN ?P_Thing_SetVelocity@@YAXPEAVAActor@@AEBU?$TVector3@N@@_N2@Z:PROC ; P_Thing_SetVelocity + Line 578: EXTRN ?P_Thing_CanRaise@@YA_NPEAVAActor@@@Z:PROC ; P_Thing_CanRaise + Line 579: EXTRN ?P_GetSpawnableType@@YAPEAVPClassActor@@H@Z:PROC ; P_GetSpawnableType + Line 580: EXTRN ?P_Thing_CheckInputNum@@YAHPEAVplayer_t@@H@Z:PROC ; P_Thing_CheckInputNum + Line 581: EXTRN ?P_Thing_Warp@@YAHPEAVAActor@@0NNNU?$TAngle@N@@HNN1@Z:PROC ; P_Thing_Warp + Line 582: EXTRN ?P_Thing_CheckProximity@@YAHPEAVAActor@@PEAVPClass@@NHHH_N@Z:PROC ; P_Thing_CheckProximity + Line 583: EXTRN ?P_TestMobjLocation@@YAHPEAVAActor@@@Z:PROC ; P_TestMobjLocation + Line 584: EXTRN ?P_CheckSight@@YAHPEAVAActor@@0H@Z:PROC ; P_CheckSight + Line 585: EXTRN ?P_LineAttack@@YAPEAVAActor@@PEAV1@U?$TAngle@N@@N1HVFName@@2HPEAUFTranslatedLineTarget@@PEAHNNN@Z:PROC ; P_LineAttack + Line 586: EXTRN ?P_DamageMobj@@YAHPEAVAActor@@00HVFName@@HU?$TAngle@N@@@Z:PROC ; P_DamageMobj + Line 587: EXTRN ?ForceSet@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@_N@Z:PROC ; FBaseCVar::ForceSet + Line 588: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 589: EXTRN ?FindCVar@@YAPEAVFBaseCVar@@PEBDPEAPEAV1@@Z:PROC ; FindCVar + Line 590: EXTRN ?GetCVar@@YAPEAVFBaseCVar@@PEAVAActor@@PEBD@Z:PROC ; GetCVar + Line 591: EXTRN ?GetUserCVar@@YAPEAVFBaseCVar@@HPEBD@Z:PROC ; GetUserCVar + Line 592: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 593: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 594: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 595: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 596: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 597: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 598: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 599: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 600: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 601: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 602: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 603: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 604: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 605: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 606: EXTRN ?S_Sound@@YAXHVFSoundID@@MM@Z:PROC ; S_Sound + Line 607: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 608: EXTRN ?S_Sound@@YAXPEBUsector_t@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 609: EXTRN ?S_PlaySound@@YAXPEAVAActor@@HVFSoundID@@MM_N@Z:PROC ; S_PlaySound + Line 610: EXTRN ?S_StopSound@@YAXPEAVAActor@@H@Z:PROC ; S_StopSound + Line 611: EXTRN ?S_IsActorPlayingSomething@@YA_NPEAVAActor@@HH@Z:PROC ; S_IsActorPlayingSomething + Line 612: EXTRN ?S_ChangeSoundVolume@@YAXPEAVAActor@@HN@Z:PROC ; S_ChangeSoundVolume + Line 613: EXTRN ?S_ChangeMusic@@YA_NPEBDH_N1@Z:PROC ; S_ChangeMusic + Line 614: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 615: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 616: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 617: EXTRN ?FindStateByString@PClassActor@@QEAAPEAUFState@@PEBD_N@Z:PROC ; PClassActor::FindStateByString + Line 618: EXTRN ?GetReplacement@PClassActor@@QEAAPEAV1@_N@Z:PROC ; PClassActor::GetReplacement + Line 619: EXTRN ??0FRemapTable@@QEAA@H@Z:PROC ; FRemapTable::FRemapTable + Line 620: EXTRN ?MakeIdentity@FRemapTable@@QEAAXXZ:PROC ; FRemapTable::MakeIdentity + Line 621: EXTRN ?UpdateNative@FRemapTable@@QEAAXXZ:PROC ; FRemapTable::UpdateNative + Line 622: EXTRN ?AddIndexRange@FRemapTable@@QEAA_NHHHH@Z:PROC ; FRemapTable::AddIndexRange + Line 623: EXTRN ?AddColorRange@FRemapTable@@QEAA_NHHHHHHHH@Z:PROC ; FRemapTable::AddColorRange + Line 624: EXTRN ?AddDesaturation@FRemapTable@@QEAA_NHHNNNNNN@Z:PROC ; FRemapTable::AddDesaturation + Line 625: EXTRN ?AddColourisation@FRemapTable@@QEAA_NHHHHH@Z:PROC ; FRemapTable::AddColourisation + Line 626: EXTRN ?AddTint@FRemapTable@@QEAA_NHHHHHH@Z:PROC ; FRemapTable::AddTint + Line 627: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 628: EXTRN ?GetTextureID@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::GetTextureID + Line 629: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 630: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 631: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 632: EXTRN ?FindLevelInfo@@YAPEAUlevel_info_t@@PEBD_N@Z:PROC ; FindLevelInfo + Line 633: EXTRN ?G_SkillProperty@@YAHW4ESkillProperty@@@Z:PROC ; G_SkillProperty + Line 634: EXTRN ?G_SkillName@@YAPEBDXZ:PROC ; G_SkillName + Line 635: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 636: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 637: EXTRN ?StaticSpawn@AActor@@SAPEAV1@PEAVPClassActor@@AEBU?$TVector3@N@@W4replace_t@@_N@Z:PROC ; AActor::StaticSpawn + Line 638: EXTRN ?UseInventory@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::UseInventory + Line 639: EXTRN ?DropInventory@AActor@@QEAAPEAV1@PEAV1@H@Z:PROC ; AActor::DropInventory + Line 640: EXTRN ?CheckLocalView@AActor@@QEBA_NH@Z:PROC ; AActor::CheckLocalView + Line 641: EXTRN ?FindInventory@AActor@@QEAAPEAV1@PEAVPClassActor@@_N@Z:PROC ; AActor::FindInventory + Line 642: EXTRN ?FindInventory@AActor@@QEAAPEAV1@VFName@@_N@Z:PROC ; AActor::FindInventory + Line 643: EXTRN ?GiveInventoryType@AActor@@QEAAPEAV1@PEAVPClassActor@@@Z:PROC ; AActor::GiveInventoryType + Line 644: EXTRN ?SetShade@AActor@@QEAAXI@Z:PROC ; AActor::SetShade + Line 645: EXTRN ?IsHostile@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsHostile + Line 646: EXTRN ?GetSpecies@AActor@@QEAA?AVFName@@XZ:PROC ; AActor::GetSpecies + Line 647: EXTRN ?SetTranslation@AActor@@QEAAXVFName@@@Z:PROC ; AActor::SetTranslation + Line 648: EXTRN ?SetPitch@AActor@@QEAAXU?$TAngle@N@@_N1@Z:PROC ; AActor::SetPitch + Line 649: EXTRN ?SetAngle@AActor@@QEAAXU?$TAngle@N@@_N@Z:PROC ; AActor::SetAngle + Line 650: EXTRN ?SetRoll@AActor@@QEAAXU?$TAngle@N@@_N@Z:PROC ; AActor::SetRoll + Line 651: EXTRN ?GetMissileDamage@AActor@@QEAAHHH@Z:PROC ; AActor::GetMissileDamage + Line 652: EXTRN ?GetTag@AActor@@QEBAPEBDPEBD@Z:PROC ; AActor::GetTag + Line 653: EXTRN ?SetTag@AActor@@QEAAXPEBD@Z:PROC ; AActor::SetTag + Line 654: EXTRN ?AddToHash@AActor@@QEAAXXZ:PROC ; AActor::AddToHash + Line 655: EXTRN ?RemoveFromHash@AActor@@QEAAXXZ:PROC ; AActor::RemoveFromHash + Line 656: EXTRN ?IsMapActor@AActor@@QEAA_NXZ:PROC ; AActor::IsMapActor + Line 657: EXTRN ?SetState@AActor@@QEAA_NPEAUFState@@_N@Z:PROC ; AActor::SetState + Line 658: EXTRN ?ClearCounters@AActor@@QEAAXXZ:PROC ; AActor::ClearCounters + Line 659: EXTRN ?P_LinePickActor@@YAPEAVAActor@@PEAV1@U?$TAngle@N@@N1V?$TFlags@W4ActorFlag@@I@@I@Z:PROC ; P_LinePickActor + Line 660: EXTRN ?P_BulletSlope@@YA?AU?$TAngle@N@@PEAVAActor@@PEAUFTranslatedLineTarget@@H@Z:PROC ; P_BulletSlope + Line 661: EXTRN ?SetFogDensity@sector_t@@QEAAXH@Z:PROC ; sector_t::SetFogDensity + Line 662: EXTRN ?NextHighestCeilingAt@@YANPEAUsector_t@@NNNNHPEAPEAU1@PEAPEAUF3DFloor@@@Z:PROC ; NextHighestCeilingAt + Line 663: EXTRN ?NextLowestFloorAt@@YANPEAUsector_t@@NNNHNPEAPEAU1@PEAPEAUF3DFloor@@@Z:PROC ; NextLowestFloorAt + Line 664: EXTRN ?AdjustFloorClip@@YAXPEBUsector_t@@@Z:PROC ; AdjustFloorClip + Line 665: EXTRN ?P_SectorDamage@@YAXPEAUFLevelLocals@@HHVFName@@PEAVPClassActor@@H@Z:PROC ; P_SectorDamage + Line 666: EXTRN ?SectorHasTag@FTagManager@@AEBA_NPEBUsector_t@@H@Z:PROC ; FTagManager::SectorHasTag + Line 667: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 668: EXTRN ?Next@FLineIdIterator@@QEAAHXZ:PROC ; FLineIdIterator::Next + Line 669: EXTRN ?P_StartQuakeXYZ@@YA_NPEAUFLevelLocals@@PEAVAActor@@HHHHHHHVFSoundID@@HNNNHHNN@Z:PROC ; P_StartQuakeXYZ + Line 670: EXTRN ?P_StartQuake@@YA_NPEAUFLevelLocals@@PEAVAActor@@HHHHHVFSoundID@@@Z:PROC ; P_StartQuake + Line 671: EXTRN ??_EDACSThinker@@UEAAPEAXI@Z:PROC ; DACSThinker::`vector deleting destructor' + Line 672: EXTRN ?P_ExecuteSpecial@@YAHHPEAUline_t@@PEAVAActor@@_NHHHHH@Z:PROC ; P_ExecuteSpecial + Line 673: EXTRN ?P_DropItem@@YAPEAVAActor@@PEAV1@PEAVPClassActor@@HH@Z:PROC ; P_DropItem + Line 674: EXTRN ?AddToConsole@@YAXHPEBD@Z:PROC ; AddToConsole + Line 675: EXTRN ?C_MidPrint@@YAXPEAVFFont@@PEBD@Z:PROC ; C_MidPrint + Line 676: EXTRN ?C_MidPrintBold@@YAXPEAVFFont@@PEBD@Z:PROC ; C_MidPrintBold + Line 677: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 678: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 679: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 680: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 681: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAVAActor@@PEBDH@Z:PROC ; SN_StartSequence + Line 682: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HPEBDH@Z:PROC ; SN_StartSequence + Line 683: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUFPolyObj@@PEBDH@Z:PROC ; SN_StartSequence + Line 684: EXTRN ?V_FindFontColor@@YA?AW4EColorRange@@VFName@@@Z:PROC ; V_FindFontColor + Line 685: EXTRN ?V_GetFont@@YAPEAVFFont@@PEBD@Z:PROC ; V_GetFont + Line 686: EXTRN ??0DHUDMessage@@QEAA@PEAVFFont@@PEBDMMHHW4EColorRange@@M@Z:PROC ; DHUDMessage::DHUDMessage + Line 687: EXTRN ??0DHUDMessageFadeOut@@QEAA@PEAVFFont@@PEBDMMHHW4EColorRange@@MM@Z:PROC ; DHUDMessageFadeOut::DHUDMessageFadeOut + Line 688: EXTRN ??0DHUDMessageFadeInOut@@QEAA@PEAVFFont@@PEBDMMHHW4EColorRange@@MMM@Z:PROC ; DHUDMessageFadeInOut::DHUDMessageFadeInOut + Line 689: EXTRN ??0DHUDMessageTypeOnFadeOut@@QEAA@PEAVFFont@@PEBDMMHHW4EColorRange@@MMM@Z:PROC ; DHUDMessageTypeOnFadeOut::DHUDMessageTypeOnFadeOut + Line 690: EXTRN ?AttachMessage@DBaseStatusBar@@QEAAXPEAVDHUDMessageBase@@IH@Z:PROC ; DBaseStatusBar::AttachMessage + Line 691: EXTRN ?ShootDecal@@YAPEAVDBaseDecal@@PEAUFLevelLocals@@PEBVFDecalTemplate@@PEAUsector_t@@NNNU?$TAngle@N@@N_N@Z:PROC ; ShootDecal + Line 692: EXTRN ?Construct@DFlashFader@@QEAAXMMMMMMMMMPEAVAActor@@_N@Z:PROC ; DFlashFader::Construct + Line 693: EXTRN ?Cancel@DFlashFader@@QEAAXXZ:PROC ; DFlashFader::Cancel + Line 694: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 695: EXTRN ?ReadLump@FWadCollection@@QEAAXHPEAX@Z:PROC ; FWadCollection::ReadLump + Line 696: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 697: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 698: EXTRN ?GetLumpName@FWadCollection@@QEBAXPEADH@Z:PROC ; FWadCollection::GetLumpName + Line 699: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 700: EXTRN ?InitSkyMap@@YAXPEAUFLevelLocals@@@Z:PROC ; InitSkyMap + Line 701: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 702: EXTRN ?G_StartSlideshow@@YAXPEAUFLevelLocals@@VFName@@@Z:PROC ; G_StartSlideshow + Line 703: EXTRN ?GetKeysForCommand@FKeyBindings@@QEAAHPEBDPEAH1@Z:PROC ; FKeyBindings::GetKeysForCommand + Line 704: EXTRN ?strbin@@YAHPEAD@Z:PROC ; strbin + Line 705: EXTRN ?GetUDMFInt@@YAHPEAUFLevelLocals@@HHVFName@@@Z:PROC ; GetUDMFInt + Line 706: EXTRN ?GetUDMFFloat@@YANPEAUFLevelLocals@@HHVFName@@@Z:PROC ; GetUDMFFloat + Line 707: EXTRN ?PO_Busy@@YA_NPEAUFLevelLocals@@H@Z:PROC ; PO_Busy + Line 708: EXTRN ?COPY_AAPTR@@YAPEAVAActor@@PEAV1@H@Z:PROC ; COPY_AAPTR + Line 709: EXTRN ?ASSIGN_AAPTR@@YAXPEAVAActor@@H0H@Z:PROC ; ASSIGN_AAPTR + Line 710: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 711: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 712: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 713: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 714: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 715: EXTRN ?GetKey@FSerializer@@QEAAPEBDXZ:PROC ; FSerializer::GetKey + Line 716: EXTRN ?Args@FSerializer@@QEAAAEAV1@PEBDPEAH1H@Z:PROC ; FSerializer::Args + Line 717: EXTRN ?StringPtr@FSerializer@@QEAAAEAV1@PEBDAEAPEBD@Z:PROC ; FSerializer::StringPtr + Line 718: EXTRN ?ScriptNum@FSerializer@@QEAAAEAV1@PEBDAEAH@Z:PROC ; FSerializer::ScriptNum + Line 719: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 720: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 721: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 722: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAGPEAG@Z:PROC ; Serialize + Line 723: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 724: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 725: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFString@@PEAV2@@Z:PROC ; Serialize + Line 726: EXTRN ??$Serialize@Usector_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUsector_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 727: EXTRN ??$Serialize@Uline_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUline_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 728: EXTRN ??$Serialize@VFFont@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAVFFont@@PEAPEAV1@@Z:PROC ; Serialize + Line 729: EXTRN ??$Serialize@UFLevelLocals@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUFLevelLocals@@PEAPEAU1@@Z:PROC ; Serialize + Line 730: EXTRN ?GetDecalByName@FDecalLib@@QEBAPEBVFDecalTemplate@@PEBD@Z:PROC ; FDecalLib::GetDecalByName + Line 731: EXTRN ?P_FindTerrain@@YAHVFName@@@Z:PROC ; P_FindTerrain + Line 732: EXTRN ?P_SpawnParticle@@YAXPEAUFLevelLocals@@AEBU?$TVector3@N@@11UPalEntry@@NHNNNH@Z:PROC ; P_SpawnParticle + Line 733: EXTRN ?P_MorphActor@@YA_NPEAVAActor@@0PEAVPClassActor@@1HH11@Z:PROC ; P_MorphActor + Line 734: EXTRN ?P_UnmorphActor@@YA_NPEAVAActor@@0H_N@Z:PROC ; P_UnmorphActor + Line 735: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 736: EXTRN ?VMCallWithDefaults@@YAHPEAVVMFunction@@AEAV?$TArray@UVMValue@@U1@@@PEAUVMReturn@@H@Z:PROC ; VMCallWithDefaults + Line 737: EXTRN ?ModActorFlag@@YA_NPEAVAActor@@AEBVFString@@_N2@Z:PROC ; ModActorFlag + Line 738: EXTRN ?CheckActorFlag@@YAHPEAVAActor@@PEBD_N@Z:PROC ; CheckActorFlag + Line 739: EXTRN ?P_GetHealthGroup@@YAPEAUFHealthGroup@@PEAUFLevelLocals@@H@Z:PROC ; P_GetHealthGroup + Line 740: EXTRN ?Add@FCanvasTextureInfo@@QEAAXPEAVAActor@@VFTextureID@@N@Z:PROC ; FCanvasTextureInfo::Add + Line 741: EXTRN ?SetMusicVolume@FLevelLocals@@QEAAXM@Z:PROC ; FLevelLocals::SetMusicVolume + Line 742: EXTRN ?IsTIDUsed@FLevelLocals@@QEAA_NH@Z:PROC ; FLevelLocals::IsTIDUsed + Line 743: EXTRN ?FindUniqueTID@FLevelLocals@@QEAAHHH@Z:PROC ; FLevelLocals::FindUniqueTID + Line 744: EXTRN ?AirControlChanged@FLevelLocals@@QEAAXXZ:PROC ; FLevelLocals::AirControlChanged + Line 745: EXTRN ?ReplaceTextures@FLevelLocals@@QEAAXPEBD0H@Z:PROC ; FLevelLocals::ReplaceTextures + Line 746: EXTRN ?EV_Thing_Projectile@FLevelLocals@@QEAA_NHPEAVAActor@@HPEBDU?$TAngle@N@@NNH0HH_N@Z:PROC ; FLevelLocals::EV_Thing_Projectile + Line 747: EXTRN ?EV_Thing_Damage@FLevelLocals@@QEAAHHPEAVAActor@@HVFName@@@Z:PROC ; FLevelLocals::EV_Thing_Damage + Line 748: EXTRN ?ChangeLevel@FLevelLocals@@QEAAXPEBDHHH@Z:PROC ; FLevelLocals::ChangeLevel + Line 749: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 750: EXTRN ?DescriptiveName@PType@@QEBAPEBDXZ:PROC ; PType::DescriptiveName + Line 751: EXTRN ?NewPointer@@YAPEAVPPointer@@PEAVPClass@@_N@Z:PROC ; NewPointer + Line 752: EXTRN ?Exec@ScriptUtil@@SAHVFName@@ZZ:PROC ; ScriptUtil::Exec + Line 753: EXTRN ??_EDLevelScript@@UEAAPEAXI@Z:PROC ; DLevelScript::`vector deleting destructor' + Line 754: EXTRN ??_EDPlaneWatcher@@UEAAPEAXI@Z:PROC ; DPlaneWatcher::`vector deleting destructor' + Line 755: EXTRN __CxxFrameHandler3:PROC + Line 756: EXTRN __chkstk:PROC + Line 757: EXTRN memcmp:PROC + Line 758: EXTRN memmove:PROC + Line 759: EXTRN memset:PROC + Line 760: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 761: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 762: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 763: EXTRN ?RegistrationInfo@PField@@2UClassReg@@A:BYTE ; PField::RegistrationInfo + Line 764: EXTRN ?RegistrationInfo@PFunction@@2UClassReg@@A:BYTE ; PFunction::RegistrationInfo + Line 765: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 766: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 767: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 768: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 769: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 770: EXTRN ?Net_Arbitrator@@3HA:DWORD ; Net_Arbitrator + Line 771: EXTRN ?dmflags@@3VFIntCVar@@A:BYTE ; dmflags + Line 772: EXTRN ?dmflags2@@3VFIntCVar@@A:BYTE ; dmflags2 + Line 773: EXTRN ?S_sfx@@3V?$TArray@Usfxinfo_t@@U1@@@A:BYTE ; S_sfx + Line 774: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 775: EXTRN ?translationtables@@3PAV?$TAutoGrowArray@VFRemapTablePtr@@PEAUFRemapTable@@@@A:BYTE ; translationtables + Line 776: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 777: EXTRN ?PerfToMillisec@@3NA:QWORD ; PerfToMillisec + Line 778: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 779: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 780: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 781: EXTRN ?NamedACSToNormalACS@@3PAEA:BYTE ; NamedACSToNormalACS + Line 782: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 783: EXTRN ?RegistrationInfo@DHUDMessage@@2UClassReg@@A:BYTE ; DHUDMessage::RegistrationInfo + Line 784: EXTRN ?RegistrationInfo@DHUDMessageFadeOut@@2UClassReg@@A:BYTE ; DHUDMessageFadeOut::RegistrationInfo + Line 785: EXTRN ?RegistrationInfo@DHUDMessageFadeInOut@@2UClassReg@@A:BYTE ; DHUDMessageFadeInOut::RegistrationInfo + Line 786: EXTRN ?RegistrationInfo@DHUDMessageTypeOnFadeOut@@2UClassReg@@A:BYTE ; DHUDMessageTypeOnFadeOut::RegistrationInfo + Line 787: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 788: EXTRN ?RegistrationInfo@DFlashFader@@2UClassReg@@A:BYTE ; DFlashFader::RegistrationInfo + Line 789: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 790: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 791: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 792: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 793: EXTRN ?Bindings@@3VFKeyBindings@@A:BYTE ; Bindings + Line 794: EXTRN ?KeyNames@@3PAPEBDA:BYTE ; KeyNames + Line 795: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 796: EXTRN ?DecalLibrary@@3VFDecalLib@@A:BYTE ; DecalLibrary + Line 797: EXTRN ?Terrains@@3V?$TArray@UFTerrainDef@@U1@@@A:BYTE ; Terrains + Line 798: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 799: EXTRN ?TypeSInt32@@3PEAVPInt@@EA:QWORD ; TypeSInt32 + Line 800: EXTRN ?TypeBool@@3PEAVPBool@@EA:QWORD ; TypeBool + Line 801: EXTRN ?TypeFloat64@@3PEAVPFloat@@EA:QWORD ; TypeFloat64 + Line 802: EXTRN ?TypeString@@3PEAVPString@@EA:QWORD ; TypeString + Line 803: EXTRN ?TypeName@@3PEAVPName@@EA:QWORD ; TypeName + Line 804: EXTRN ?TypeSound@@3PEAVPSound@@EA:QWORD ; TypeSound + Line 805: EXTRN ?TypeColor@@3PEAVPColor@@EA:QWORD ; TypeColor + Line 806: EXTRN ?sv_cheats@@3VFBoolCVar@@A:BYTE ; sv_cheats + Line 807: EXTRN __ImageBase:BYTE + Line 808: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_actionfunctions.cod (151 hits) + Line 364: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 365: EXTRN ?StateLabels@@3UFStateLabelStorage@@A:BYTE ; StateLabels + Line 366: EXTRN ?con_midtime@@3VFFloatCVar@@A:BYTE ; con_midtime + Line 367: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 368: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 369: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 370: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 371: EXTRN ?Skins@@3V?$TArray@VFPlayerSkin@@V1@@@A:BYTE ; Skins + Line 372: EXTRN ?stacktrace@CVMAbortException@@2VFString@@A:QWORD ; CVMAbortException::stacktrace + Line 373: EXTRN ?RegistrationInfo@PField@@2UClassReg@@A:BYTE ; PField::RegistrationInfo + Line 374: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 375: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 376: EXTRN ?RegistrationInfo@DFlashFader@@2UClassReg@@A:BYTE ; DFlashFader::RegistrationInfo + Line 377: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 378: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 379: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 380: EXTRN ?TypeSInt32@@3PEAVPInt@@EA:QWORD ; TypeSInt32 + Line 381: EXTRN ?TypeUInt32@@3PEAVPInt@@EA:QWORD ; TypeUInt32 + Line 382: EXTRN ?TypeBool@@3PEAVPBool@@EA:QWORD ; TypeBool + Line 383: EXTRN ?TypeState@@3PEAVPStatePointer@@EA:QWORD ; TypeState + Line 384: EXTRN ?actionParams@@3V?$TArray@UVMValue@@U1@@@A:BYTE ; actionParams + Line 1783: EXTRN atexit:PROC + Line 1784: EXTRN __std_terminate:PROC + Line 1785: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 1786: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 1787: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 1788: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 1789: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 1790: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 1791: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 1792: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 1793: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 1794: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 1795: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 1796: EXTRN c_atan2:PROC + Line 1797: EXTRN c_sqrt:PROC + Line 1798: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 1799: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 1800: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 1801: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 1802: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 1803: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 1804: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 1805: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 1806: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 1807: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 1808: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 1809: EXTRN ?S_StopSound@@YAXPEAVAActor@@H@Z:PROC ; S_StopSound + Line 1810: EXTRN ?S_IsActorPlayingSomething@@YA_NPEAVAActor@@HH@Z:PROC ; S_IsActorPlayingSomething + Line 1811: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 1812: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 1813: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 1814: EXTRN ?CheckCallerType@FState@@QEAAXPEAVAActor@@0@Z:PROC ; FState::CheckCallerType + Line 1815: EXTRN ?StaticFindStateOwner@FState@@SAPEAVPClassActor@@PEBU1@@Z:PROC ; FState::StaticFindStateOwner + Line 1816: EXTRN ?StaticGetStateName@FState@@SA?AVFString@@PEBU1@@Z:PROC ; FState::StaticGetStateName + Line 1817: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 1818: EXTRN ?GetReplacement@PClassActor@@QEAAPEAV1@_N@Z:PROC ; PClassActor::GetReplacement + Line 1819: EXTRN ?GetState@FStateLabelStorage@@QEAAPEAUFState@@HPEAVPClassActor@@_N@Z:PROC ; FStateLabelStorage::GetState + Line 1820: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 1821: EXTRN ?GetCVar@@YAPEAVFBaseCVar@@PEAVAActor@@PEBD@Z:PROC ; GetCVar + Line 1822: EXTRN ?StaticSpawn@AActor@@SAPEAV1@PEAVPClassActor@@AEBU?$TVector3@N@@W4replace_t@@_N@Z:PROC ; AActor::StaticSpawn + Line 1823: EXTRN ?CheckMeleeRange@AActor@@QEAA_NXZ:PROC ; AActor::CheckMeleeRange + Line 1824: EXTRN ?RestoreSpecialPosition@AActor@@QEAAXXZ:PROC ; AActor::RestoreSpecialPosition + Line 1825: EXTRN ?DropInventory@AActor@@QEAAPEAV1@PEAV1@H@Z:PROC ; AActor::DropInventory + Line 1826: EXTRN ?CheckLocalView@AActor@@QEBA_NH@Z:PROC ; AActor::CheckLocalView + Line 1827: EXTRN ?FindInventory@AActor@@QEAAPEAV1@PEAVPClassActor@@_N@Z:PROC ; AActor::FindInventory + Line 1828: EXTRN ?CopyFriendliness@AActor@@QEAAXPEAV1@_N1@Z:PROC ; AActor::CopyFriendliness + Line 1829: EXTRN ?IsFriend@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsFriend + Line 1830: EXTRN ?IsHostile@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsHostile + Line 1831: EXTRN ?GetSpecies@AActor@@QEAA?AVFName@@XZ:PROC ; AActor::GetSpecies + Line 1832: EXTRN ?SetTranslation@AActor@@QEAAXVFName@@@Z:PROC ; AActor::SetTranslation + Line 1833: EXTRN ?SpawnHealth@AActor@@QEBAHXZ:PROC ; AActor::SpawnHealth + Line 1834: EXTRN ?SetPitch@AActor@@QEAAXU?$TAngle@N@@_N1@Z:PROC ; AActor::SetPitch + Line 1835: EXTRN ?SetAngle@AActor@@QEAAXU?$TAngle@N@@_N@Z:PROC ; AActor::SetAngle + Line 1836: EXTRN ?SetRoll@AActor@@QEAAXU?$TAngle@N@@_N@Z:PROC ; AActor::SetRoll + Line 1837: EXTRN ?GetMissileDamage@AActor@@QEAAHHH@Z:PROC ; AActor::GetMissileDamage + Line 1838: EXTRN ?LinkToWorld@AActor@@QEAAXPEAUFLinkContext@@_NPEAUsector_t@@@Z:PROC ; AActor::LinkToWorld + Line 1839: EXTRN ?UnlinkFromWorld@AActor@@QEAAXPEAUFLinkContext@@@Z:PROC ; AActor::UnlinkFromWorld + Line 1840: EXTRN ?SetState@AActor@@QEAA_NPEAUFState@@_N@Z:PROC ; AActor::SetState + Line 1841: EXTRN ?ClearCounters@AActor@@QEAAXXZ:PROC ; AActor::ClearCounters + Line 1842: EXTRN ?NextHighestCeilingAt@@YANPEAUsector_t@@NNNNHPEAPEAU1@PEAPEAUF3DFloor@@@Z:PROC ; NextHighestCeilingAt + Line 1843: EXTRN ?NextLowestFloorAt@@YANPEAUsector_t@@NNNHNPEAPEAU1@PEAPEAUF3DFloor@@@Z:PROC ; NextLowestFloorAt + Line 1844: EXTRN ?HighestCeilingAt@@YANPEAUsector_t@@NNPEAPEAU1@@Z:PROC ; HighestCeilingAt + Line 1845: EXTRN ?LowestFloorAt@@YANPEAUsector_t@@NNPEAPEAU1@@Z:PROC ; LowestFloorAt + Line 1846: EXTRN ?CallTryPickup@@YA_NPEAVAActor@@0PEAPEAV1@@Z:PROC ; CallTryPickup + Line 1847: EXTRN ?strbin1@@YA?AVFString@@PEBD@Z:PROC ; strbin1 + Line 1848: EXTRN ?P_ExecuteSpecial@@YAHHPEAUline_t@@PEAVAActor@@_NHHHHH@Z:PROC ; P_ExecuteSpecial + Line 1849: EXTRN ?P_SpawnParticle@@YAXPEAUFLevelLocals@@AEBU?$TVector3@N@@11UPalEntry@@NHNNNH@Z:PROC ; P_SpawnParticle + Line 1850: EXTRN ?P_HitFriend@@YAHPEAVAActor@@@Z:PROC ; P_HitFriend + Line 1851: EXTRN ?A_Unblock@@YAXPEAVAActor@@_N@Z:PROC ; A_Unblock + Line 1852: EXTRN ?A_BossDeath@@YAXPEAVAActor@@@Z:PROC ; A_BossDeath + Line 1853: EXTRN ?A_FaceTarget@@YAXPEAVAActor@@@Z:PROC ; A_FaceTarget + Line 1854: EXTRN ?P_SeekerMissile@@YA_NPEAVAActor@@NN_N1@Z:PROC ; P_SeekerMissile + Line 1855: EXTRN ?P_SpawnPuff@@YAPEAVAActor@@PEAV1@PEAVPClassActor@@AEBU?$TVector3@N@@U?$TAngle@N@@3HH0@Z:PROC ; P_SpawnPuff + Line 1856: EXTRN ?P_SpawnBlood@@YAXAEBU?$TVector3@N@@U?$TAngle@N@@HPEAVAActor@@@Z:PROC ; P_SpawnBlood + Line 1857: EXTRN ?P_ExplodeMissile@@YAXPEAVAActor@@PEAUline_t@@0_N@Z:PROC ; P_ExplodeMissile + Line 1858: EXTRN ?P_SpawnMissileXYZ@@YAPEAVAActor@@U?$TVector3@N@@PEAV1@1PEAVPClassActor@@_N1@Z:PROC ; P_SpawnMissileXYZ + Line 1859: EXTRN ?P_SpawnMissileAngleZSpeed@@YAPEAVAActor@@PEAV1@NPEAVPClassActor@@U?$TAngle@N@@NN0_N@Z:PROC ; P_SpawnMissileAngleZSpeed + Line 1860: EXTRN ?P_RemoveThing@@YAXPEAVAActor@@@Z:PROC ; P_RemoveThing + Line 1861: EXTRN ?P_Thing_Raise@@YA_NPEAVAActor@@0H@Z:PROC ; P_Thing_Raise + Line 1862: EXTRN ?P_Thing_CanRaise@@YA_NPEAVAActor@@@Z:PROC ; P_Thing_CanRaise + Line 1863: EXTRN ?P_Thing_CheckInputNum@@YAHPEAVplayer_t@@H@Z:PROC ; P_Thing_CheckInputNum + Line 1864: EXTRN ?P_Thing_Warp@@YAHPEAVAActor@@0NNNU?$TAngle@N@@HNN1@Z:PROC ; P_Thing_Warp + Line 1865: EXTRN ?P_Thing_CheckProximity@@YAHPEAVAActor@@PEAVPClass@@NHHH_N@Z:PROC ; P_Thing_CheckProximity + Line 1866: EXTRN ?P_RoughMonsterSearch@@YAPEAVAActor@@PEAV1@H_N1@Z:PROC ; P_RoughMonsterSearch + Line 1867: EXTRN ?P_TestMobjLocation@@YAHPEAVAActor@@@Z:PROC ; P_TestMobjLocation + Line 1868: EXTRN ?P_CheckPosition@@YA_NPEAVAActor@@AEBU?$TVector2@N@@_N@Z:PROC ; P_CheckPosition + Line 1869: EXTRN ?P_TryMove@@YA_NPEAVAActor@@AEBU?$TVector2@N@@HPEBUsecplane_t@@_N@Z:PROC ; P_TryMove + Line 1870: EXTRN ?P_CheckMove@@YA_NPEAVAActor@@AEBU?$TVector2@N@@H@Z:PROC ; P_CheckMove + Line 1871: EXTRN ?P_TeleportMove@@YA_NPEAVAActor@@AEBU?$TVector3@N@@_N2@Z:PROC ; P_TeleportMove + Line 1872: EXTRN ?P_CheckSight@@YAHPEAVAActor@@0H@Z:PROC ; P_CheckSight + Line 1873: EXTRN ?P_AimLineAttack@@YA?AU?$TAngle@N@@PEAVAActor@@U1@NPEAUFTranslatedLineTarget@@1H00@Z:PROC ; P_AimLineAttack + Line 1874: EXTRN ?P_LineAttack@@YAPEAVAActor@@PEAV1@U?$TAngle@N@@N1HVFName@@2HPEAUFTranslatedLineTarget@@PEAHNNN@Z:PROC ; P_LineAttack + Line 1875: EXTRN ?P_TraceBleed@@YAXHPEAVAActor@@0@Z:PROC ; P_TraceBleed + Line 1876: EXTRN ?P_RailAttack@@YAXPEAUFRailParams@@@Z:PROC ; P_RailAttack + Line 1877: EXTRN ?P_CheckMissileSpawn@@YA_NPEAVAActor@@N@Z:PROC ; P_CheckMissileSpawn + Line 1878: EXTRN ?P_DamageMobj@@YAHPEAVAActor@@00HVFName@@HU?$TAngle@N@@@Z:PROC ; P_DamageMobj + Line 1879: EXTRN ?P_GiveBody@@YA_NPEAVAActor@@HH@Z:PROC ; P_GiveBody + Line 1880: EXTRN ?C_MidPrint@@YAXPEAVFFont@@PEBD@Z:PROC ; C_MidPrint + Line 1881: EXTRN ?C_MidPrintBold@@YAXPEAVFFont@@PEBD@Z:PROC ; C_MidPrintBold + Line 1882: EXTRN ?SprayDecal@@YAXPEAVAActor@@PEBDN@Z:PROC ; SprayDecal + Line 1883: EXTRN ?Construct@DFlashFader@@QEAAXMMMMMMMMMPEAVAActor@@_N@Z:PROC ; DFlashFader::Construct + Line 1884: EXTRN ?V_GetFont@@YAPEAVFFont@@PEBD@Z:PROC ; V_GetFont + Line 1885: EXTRN ?GetSpotWithMinMaxDistance@DSpotState@@QEAAPEAVAActor@@PEAVPClassActor@@NNNN@Z:PROC ; DSpotState::GetSpotWithMinMaxDistance + Line 1886: EXTRN ?COPY_AAPTR@@YAPEAVAActor@@PEAV1@H@Z:PROC ; COPY_AAPTR + Line 1887: EXTRN ?VerifyTargetChain@@YAXPEAVAActor@@_N@Z:PROC ; VerifyTargetChain + Line 1888: EXTRN ?VerifyMasterChain@@YAXPEAVAActor@@@Z:PROC ; VerifyMasterChain + Line 1889: EXTRN ?ASSIGN_AAPTR@@YAXPEAVAActor@@H0H@Z:PROC ; ASSIGN_AAPTR + Line 1890: EXTRN ?Trace@@YA_NAEBU?$TVector3@N@@PEAUsector_t@@0NV?$TFlags@W4ActorFlag@@I@@IPEAVAActor@@AEAUFTraceResults@@IP6A?AW4ETraceStatus@@4PEAX@Z5@Z:PROC ; Trace + Line 1891: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 1892: EXTRN ?FindPSprite@player_t@@QEAAPEAVDPSprite@@H@Z:PROC ; player_t::FindPSprite + Line 1893: EXTRN ??0FMultiBlockThingsIterator@@QEAA@AEAUFPortalGroupArray@@PEAUFLevelLocals@@NNNNN_NPEAUsector_t@@@Z:PROC ; FMultiBlockThingsIterator::FMultiBlockThingsIterator + Line 1894: EXTRN ?Next@FMultiBlockThingsIterator@@QEAA_NPEAUCheckResult@1@@Z:PROC ; FMultiBlockThingsIterator::Next + Line 1895: EXTRN ?GetFirstSectorTag@FTagManager@@AEBAHPEBUsector_t@@@Z:PROC ; FTagManager::GetFirstSectorTag + Line 1896: EXTRN ?P_SpawnTeleportFog@@YAXPEAVAActor@@AEBU?$TVector3@N@@_N2@Z:PROC ; P_SpawnTeleportFog + Line 1897: EXTRN ?P_StartQuakeXYZ@@YA_NPEAUFLevelLocals@@PEAVAActor@@HHHHHHHVFSoundID@@HNNNHHNN@Z:PROC ; P_StartQuakeXYZ + Line 1898: EXTRN ?P_StartQuake@@YA_NPEAUFLevelLocals@@PEAVAActor@@HHHHHVFSoundID@@@Z:PROC ; P_StartQuake + Line 1899: EXTRN ?MaybePrintMessage@CVMAbortException@@QEAAXXZ:PROC ; CVMAbortException::MaybePrintMessage + Line 1900: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 1901: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 1902: EXTRN ?ModActorFlag@@YA_NPEAVAActor@@AEBVFString@@_N2@Z:PROC ; ModActorFlag + Line 1903: EXTRN ?CheckActorFlag@@YAHPEAVAActor@@PEBD_N@Z:PROC ; CheckActorFlag + Line 1904: EXTRN ?TranslateLineDef@FLevelLocals@@QEAAXPEAUline_t@@PEAUmaplinedef_t@@H@Z:PROC ; FLevelLocals::TranslateLineDef + Line 1905: EXTRN ?GetPortalOffsetPosition@FLevelLocals@@QEAA?AU?$TVector2@N@@NNNN@Z:PROC ; FLevelLocals::GetPortalOffsetPosition + Line 1906: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 1907: EXTRN ?R_ClearPastViewer@@YAXPEAVAActor@@@Z:PROC ; R_ClearPastViewer + Line 1908: EXTRN ?GetSpotState@@YAPEAVDSpotState@@PEAUFLevelLocals@@H@Z:PROC ; GetSpotState + Line 1909: EXTRN _CxxThrowException:PROC + Line 1910: EXTRN __CxxFrameHandler3:PROC + Line 1911: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 1912: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_ceiling.cod (63 hits) + Line 18: EXTRN ?RegistrationInfo@DMovingCeiling@@2UClassReg@@A:BYTE ; DMovingCeiling::RegistrationInfo + Line 109: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 110: EXTRN __std_terminate:PROC + Line 111: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 112: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 113: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 114: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 115: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 116: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 117: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HHW4seqtype_t@@H_N@Z:PROC ; SN_StartSequence + Line 118: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HPEBDH@Z:PROC ; SN_StartSequence + Line 119: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HVFName@@H@Z:PROC ; SN_StartSequence + Line 120: EXTRN ?SN_StopSequence@@YAXPEAUsector_t@@H@Z:PROC ; SN_StopSequence + Line 121: EXTRN ?SN_IsMakingLoopingSound@@YA_NPEAUsector_t@@@Z:PROC ; SN_IsMakingLoopingSound + Line 122: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAUsecspecial_t@@PEAU2@@Z:PROC ; Serialize + Line 123: EXTRN ?MoveCeiling@sector_t@@QEAA?AW4EMoveResult@@NNHH_N@Z:PROC ; sector_t::MoveCeiling + Line 124: EXTRN ?FindHighestFloorSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindHighestFloorSurrounding + Line 125: EXTRN ?FindLowestCeilingSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindLowestCeilingSurrounding + Line 126: EXTRN ?FindHighestCeilingSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindHighestCeilingSurrounding + Line 127: EXTRN ?FindNextLowestCeiling@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindNextLowestCeiling + Line 128: EXTRN ?FindNextHighestCeiling@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindNextHighestCeiling + Line 129: EXTRN ?FindHighestFloorPoint@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindHighestFloorPoint + Line 130: EXTRN ?FindShortestUpperAround@@YANPEAUsector_t@@@Z:PROC ; FindShortestUpperAround + Line 131: EXTRN ?FindModelFloorSector@@YAPEAUsector_t@@PEAU1@N@Z:PROC ; FindModelFloorSector + Line 132: EXTRN ?FindModelCeilingSector@@YAPEAUsector_t@@PEAU1@N@Z:PROC ; FindModelCeilingSector + Line 133: EXTRN ?PlaneMoving@@YAHPEAUsector_t@@H@Z:PROC ; PlaneMoving + Line 134: EXTRN ?GetSpecial@@YAXPEAUsector_t@@PEAUsecspecial_t@@@Z:PROC ; GetSpecial + Line 135: EXTRN ?SetSpecial@@YAXPEAUsector_t@@PEBUsecspecial_t@@@Z:PROC ; SetSpecial + Line 136: EXTRN ?AdjustFloorClip@@YAXPEBUsector_t@@@Z:PROC ; AdjustFloorClip + Line 137: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 138: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 139: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFTextureID@@PEAV2@@Z:PROC ; Serialize + Line 140: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 141: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 142: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 143: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 144: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 145: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 146: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 147: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 148: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 149: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 150: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 151: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 152: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 153: EXTRN ?StaticType@DSectorEffect@@UEBAPEAVPClass@@XZ:PROC ; DSectorEffect::StaticType + Line 154: EXTRN ?Serialize@DSectorEffect@@UEAAXAEAVFSerializer@@@Z:PROC ; DSectorEffect::Serialize + Line 155: EXTRN ?OnDestroy@DSectorEffect@@UEAAXXZ:PROC ; DSectorEffect::OnDestroy + Line 156: EXTRN ??_EDSectorEffect@@UEAAPEAXI@Z:PROC ; DSectorEffect::`vector deleting destructor' + Line 157: EXTRN ?StaticType@DMover@@UEBAPEAVPClass@@XZ:PROC ; DMover::StaticType + Line 158: EXTRN ?StopInterpolation@DMover@@QEAAX_N@Z:PROC ; DMover::StopInterpolation + Line 159: EXTRN ?Serialize@DMover@@MEAAXAEAVFSerializer@@@Z:PROC ; DMover::Serialize + Line 160: EXTRN ?OnDestroy@DMover@@MEAAXXZ:PROC ; DMover::OnDestroy + Line 161: EXTRN ??_EDMover@@UEAAPEAXI@Z:PROC ; DMover::`vector deleting destructor' + Line 162: EXTRN ?StaticType@DMovingCeiling@@UEBAPEAVPClass@@XZ:PROC ; DMovingCeiling::StaticType + Line 163: EXTRN ?Construct@DMovingCeiling@@IEAAXPEAUsector_t@@_N@Z:PROC ; DMovingCeiling::Construct + Line 164: EXTRN ??_EDMovingCeiling@@UEAAPEAXI@Z:PROC ; DMovingCeiling::`vector deleting destructor' + Line 165: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 166: EXTRN ??_EDCeiling@@UEAAPEAXI@Z:PROC ; DCeiling::`vector deleting destructor' + Line 167: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 168: EXTRN __CxxFrameHandler3:PROC + Line 169: EXTRN __ImageBase:BYTE + Line 170: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_conversation.cod (81 hits) + Line 417: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 418: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 419: EXTRN atexit:PROC + Line 420: EXTRN __std_terminate:PROC + Line 421: EXTRN strnicmp:PROC + Line 422: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 423: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 424: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 425: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 426: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 427: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 428: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 429: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 430: EXTRN mysnprintf:PROC + Line 431: EXTRN c_atan2:PROC + Line 432: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 433: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 434: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 435: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 436: EXTRN ?FindFunction@PClass@@SAXPEAPEAVVMFunction@@VFName@@1@Z:PROC ; PClass::FindFunction + Line 437: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 438: EXTRN ?S_Sound@@YAXHVFSoundID@@MM@Z:PROC ; S_Sound + Line 439: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 440: EXTRN ?S_StopSound@@YAXPEAVAActor@@H@Z:PROC ; S_StopSound + Line 441: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 442: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 443: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 444: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 445: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 446: EXTRN ?StaticSpawn@AActor@@SAPEAV1@PEAVPClassActor@@AEBU?$TVector3@N@@W4replace_t@@_N@Z:PROC ; AActor::StaticSpawn + Line 447: EXTRN ?FindInventory@AActor@@QEAAPEAV1@PEAVPClassActor@@_N@Z:PROC ; AActor::FindInventory + Line 448: EXTRN ?ConversationAnimation@AActor@@QEAAXH@Z:PROC ; AActor::ConversationAnimation + Line 449: EXTRN ?ClearCounters@AActor@@QEAAXXZ:PROC ; AActor::ClearCounters + Line 450: EXTRN ?P_ParseUSDF@@YA_NPEAUFLevelLocals@@HAEAVFileReader@@H@Z:PROC ; P_ParseUSDF + Line 451: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 452: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 453: EXTRN ?ReopenLumpReader@FWadCollection@@QEAA?AVFileReader@@H_N@Z:PROC ; FWadCollection::ReopenLumpReader + Line 454: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 455: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 456: EXTRN ?A_FaceTarget@@YAXPEAVAActor@@@Z:PROC ; A_FaceTarget + Line 457: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 458: EXTRN ?I_SetMusicVolume@@YAXN@Z:PROC ; I_SetMusicVolume + Line 459: EXTRN ?ReadByte@@YAHPEAPEAE@Z:PROC ; ReadByte + Line 460: EXTRN ?ReadWord@@YAHPEAPEAE@Z:PROC ; ReadWord + Line 461: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 462: EXTRN ?Net_WriteWord@@YAXF@Z:PROC ; Net_WriteWord + Line 463: EXTRN ?AddToConsole@@YAXHPEBD@Z:PROC ; AddToConsole + Line 464: EXTRN ??0DHUDMessageFadeOut@@QEAA@PEAVFFont@@PEBDMMHHW4EColorRange@@MM@Z:PROC ; DHUDMessageFadeOut::DHUDMessageFadeOut + Line 465: EXTRN ?AttachMessage@DBaseStatusBar@@QEAAXPEAVDHUDMessageBase@@IH@Z:PROC ; DBaseStatusBar::AttachMessage + Line 466: EXTRN ?P_ExecuteSpecial@@YAHHPEAUline_t@@PEAVAActor@@_NHHHHH@Z:PROC ; P_ExecuteSpecial + Line 467: EXTRN ?CallTryPickup@@YA_NPEAVAActor@@0PEAPEAV1@@Z:PROC ; CallTryPickup + Line 468: EXTRN ?PlayIdle@@YAXPEAVAActor@@@Z:PROC ; PlayIdle + Line 469: EXTRN ?SetLogNumber@player_t@@QEAAXH@Z:PROC ; player_t::SetLogNumber + Line 470: EXTRN ?SetLogText@player_t@@QEAAXPEBD@Z:PROC ; player_t::SetLogText + Line 471: EXTRN ?M_ActivateMenu@@YAXPEAVDMenu@@@Z:PROC ; M_ActivateMenu + Line 472: EXTRN ?M_StartControlPanel@@YAX_N@Z:PROC ; M_StartControlPanel + Line 473: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 474: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 475: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 476: EXTRN __CxxFrameHandler3:PROC + Line 477: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 478: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 479: EXTRN ?CleanWidth@@3HA:DWORD ; CleanWidth + Line 480: EXTRN ?CleanHeight@@3HA:DWORD ; CleanHeight + Line 481: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 482: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 483: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 484: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 485: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 486: EXTRN ?gameaction@@3W4gameaction_t@@A:DWORD ; gameaction + Line 487: EXTRN ?menuactive@@3W4EMenuState@@A:DWORD ; menuactive + Line 488: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 489: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 490: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 491: EXTRN ?RegistrationInfo@DHUDMessageFadeOut@@2UClassReg@@A:BYTE ; DHUDMessageFadeOut::RegistrationInfo + Line 492: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 493: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 494: EXTRN ?CurrentMenu@@3PEAVDMenu@@EA:QWORD ; CurrentMenu + Line 495: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 496: EXTRN __ImageBase:BYTE + Line 497: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_destructible.cod (27 hits) + Line 322: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 323: EXTRN __std_terminate:PROC + Line 324: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 325: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 326: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 327: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 328: EXTRN c_sqrt:PROC + Line 329: EXTRN ?TriggerSectorActions@sector_t@@QEAA_NPEAVAActor@@H@Z:PROC ; sector_t::TriggerSectorActions + Line 330: EXTRN ?P_ActivateLine@@YA_NPEAUline_t@@PEAVAActor@@HHPEAU?$TVector3@N@@@Z:PROC ; P_ActivateLine + Line 331: EXTRN ?GetMissileDamage@AActor@@QEAAHHH@Z:PROC ; AActor::GetMissileDamage + Line 332: EXTRN ?Trace@@YA_NAEBU?$TVector3@N@@PEAUsector_t@@0NV?$TFlags@W4ActorFlag@@I@@IPEAVAActor@@AEAUFTraceResults@@IP6A?AW4ETraceStatus@@4PEAX@Z5@Z:PROC ; Trace + Line 333: EXTRN ?P_VanillaPointOnLineSide@@YAHNNPEBUline_t@@@Z:PROC ; P_VanillaPointOnLineSide + Line 334: EXTRN ??0FBlockLinesIterator@@QEAA@PEAUFLevelLocals@@AEBVFBoundingBox@@@Z:PROC ; FBlockLinesIterator::FBlockLinesIterator + Line 335: EXTRN ?Next@FBlockLinesIterator@@QEAAPEAUline_t@@XZ:PROC ; FBlockLinesIterator::Next + Line 336: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 337: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 338: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 339: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 340: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 341: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 342: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 343: EXTRN ?E_WorldSectorDamaged@@YAHPEAUsector_t@@PEAVAActor@@HVFName@@HU?$TVector3@N@@_N@Z:PROC ; E_WorldSectorDamaged + Line 344: EXTRN ?E_WorldLineDamaged@@YAHPEAUline_t@@PEAVAActor@@HVFName@@HU?$TVector3@N@@_N@Z:PROC ; E_WorldLineDamaged + Line 345: EXTRN __CxxFrameHandler3:PROC + Line 346: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 347: EXTRN ?splashfactor@@3VFFloatCVar@@A:BYTE ; splashfactor + Line 348: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_doors.cod (64 hits) + Line 16: EXTRN ?RegistrationInfo@DMovingCeiling@@2UClassReg@@A:BYTE ; DMovingCeiling::RegistrationInfo + Line 113: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 114: EXTRN __std_terminate:PROC + Line 115: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 116: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 117: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 118: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 119: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 120: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 121: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 122: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 123: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HHW4seqtype_t@@H_N@Z:PROC ; SN_StartSequence + Line 124: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HPEBDH@Z:PROC ; SN_StartSequence + Line 125: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HVFName@@H@Z:PROC ; SN_StartSequence + Line 126: EXTRN ?SN_CheckSequence@@YAPEAVDSeqNode@@PEAUsector_t@@H@Z:PROC ; SN_CheckSequence + Line 127: EXTRN ?SN_StopSequence@@YAXPEAUsector_t@@H@Z:PROC ; SN_StopSequence + Line 128: EXTRN ?SN_AreModesSame@@YA_NHW4seqtype_t@@HH@Z:PROC ; SN_AreModesSame + Line 129: EXTRN ?SN_AreModesSame@@YA_NVFName@@HH@Z:PROC ; SN_AreModesSame + Line 130: EXTRN ?MoveCeiling@sector_t@@QEAA?AW4EMoveResult@@NNHH_N@Z:PROC ; sector_t::MoveCeiling + Line 131: EXTRN ?FindLowestCeilingSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindLowestCeilingSurrounding + Line 132: EXTRN ?FindHighestFloorPoint@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindHighestFloorPoint + Line 133: EXTRN ?FindLowestCeilingPoint@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindLowestCeilingPoint + Line 134: EXTRN ?PlaneMoving@@YAHPEAUsector_t@@H@Z:PROC ; PlaneMoving + Line 135: EXTRN ?P_CheckKeys@@YAHPEAVAActor@@H_N1@Z:PROC ; P_CheckKeys + Line 136: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 137: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 138: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 139: EXTRN ??$Serialize@Uline_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUline_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 140: EXTRN ??$Serialize@Uvertex_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUvertex_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 141: EXTRN ??$Serialize@UFDoorAnimation@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUFDoorAnimation@@PEAPEAU1@@Z:PROC ; Serialize + Line 142: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 143: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 144: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 145: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 146: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 147: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 148: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 149: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 150: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 151: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 152: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 153: EXTRN ?FindAnimatedDoor@FTextureManager@@QEAAPEAUFDoorAnimation@@VFTextureID@@@Z:PROC ; FTextureManager::FindAnimatedDoor + Line 154: EXTRN ?StaticType@DSectorEffect@@UEBAPEAVPClass@@XZ:PROC ; DSectorEffect::StaticType + Line 155: EXTRN ?Serialize@DSectorEffect@@UEAAXAEAVFSerializer@@@Z:PROC ; DSectorEffect::Serialize + Line 156: EXTRN ?OnDestroy@DSectorEffect@@UEAAXXZ:PROC ; DSectorEffect::OnDestroy + Line 157: EXTRN ??_EDSectorEffect@@UEAAPEAXI@Z:PROC ; DSectorEffect::`vector deleting destructor' + Line 158: EXTRN ?StaticType@DMover@@UEBAPEAVPClass@@XZ:PROC ; DMover::StaticType + Line 159: EXTRN ?Serialize@DMover@@MEAAXAEAVFSerializer@@@Z:PROC ; DMover::Serialize + Line 160: EXTRN ?OnDestroy@DMover@@MEAAXXZ:PROC ; DMover::OnDestroy + Line 161: EXTRN ??_EDMover@@UEAAPEAXI@Z:PROC ; DMover::`vector deleting destructor' + Line 162: EXTRN ?StaticType@DMovingCeiling@@UEBAPEAVPClass@@XZ:PROC ; DMovingCeiling::StaticType + Line 163: EXTRN ?Construct@DMovingCeiling@@IEAAXPEAUsector_t@@_N@Z:PROC ; DMovingCeiling::Construct + Line 164: EXTRN ??_EDMovingCeiling@@UEAAPEAXI@Z:PROC ; DMovingCeiling::`vector deleting destructor' + Line 165: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 166: EXTRN ??_EDDoor@@UEAAPEAXI@Z:PROC ; DDoor::`vector deleting destructor' + Line 167: EXTRN ??_EDAnimatedDoor@@UEAAPEAXI@Z:PROC ; DAnimatedDoor::`vector deleting destructor' + Line 168: EXTRN ?EV_LightTurnOnPartway@FLevelLocals@@QEAAXHN@Z:PROC ; FLevelLocals::EV_LightTurnOnPartway + Line 169: EXTRN __CxxFrameHandler3:PROC + Line 170: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 171: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 172: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 173: EXTRN ?RegistrationInfo@DPlat@@2UClassReg@@A:BYTE ; DPlat::RegistrationInfo + Line 174: EXTRN __ImageBase:BYTE + Line 175: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_effect.cod (43 hits) + Line 15: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 16: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 282: EXTRN atexit:PROC + Line 283: EXTRN __std_terminate:PROC + Line 284: EXTRN atoi:PROC + Line 285: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 286: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 287: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 288: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 289: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 290: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 291: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 292: EXTRN c_atan2:PROC + Line 293: EXTRN c_sqrt:PROC + Line 294: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 295: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 296: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 297: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 298: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 299: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 300: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 301: EXTRN ?S_Sound@@YAXPEAUFLevelLocals@@AEBU?$TVector3@N@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 302: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 303: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 304: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 305: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 306: EXTRN ?StaticSpawn@AActor@@SAPEAV1@PEAVPClassActor@@AEBU?$TVector3@N@@W4replace_t@@_N@Z:PROC ; AActor::StaticSpawn + Line 307: EXTRN ?CheckValue@FArgs@@QEBAPEBDPEBD@Z:PROC ; FArgs::CheckValue + Line 308: EXTRN ?GetPortalOffsetPosition@FLevelLocals@@QEAA?AU?$TVector2@N@@NNNN@Z:PROC ; FLevelLocals::GetPortalOffsetPosition + Line 309: EXTRN ?PointInRenderSubsector@FLevelLocals@@QEAAPEAUsubsector_t@@HH@Z:PROC ; FLevelLocals::PointInRenderSubsector + Line 310: EXTRN __CxxFrameHandler3:PROC + Line 311: EXTRN memset:PROC + Line 312: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 313: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 314: EXTRN ?M_Random@@3VFRandom@@A:BYTE ; M_Random + Line 315: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 316: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 317: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 318: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 319: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 320: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 321: EXTRN __ImageBase:BYTE + Line 322: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_enemy.cod (96 hits) + Line 67: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 68: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 69: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 70: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 71: EXTRN ?StateLabels@@3UFStateLabelStorage@@A:BYTE ; StateLabels + Line 411: EXTRN atexit:PROC + Line 412: EXTRN __std_terminate:PROC + Line 413: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 414: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 415: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 416: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 417: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 418: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 419: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 420: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 421: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 422: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 423: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 424: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 425: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 426: EXTRN c_asin:PROC + Line 427: EXTRN c_atan2:PROC + Line 428: EXTRN c_sqrt:PROC + Line 429: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 430: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 431: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 432: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 433: EXTRN ?FindFunction@PClass@@SAXPEAPEAVVMFunction@@VFName@@1@Z:PROC ; PClass::FindFunction + Line 434: EXTRN ?P_BlockmapSearch@@YAPEAVAActor@@PEAV1@HP6APEAV1@0HPEAX@Z1@Z:PROC ; P_BlockmapSearch + Line 435: EXTRN ?P_TestMobjZ@@YAHPEAVAActor@@_NPEAPEAV1@@Z:PROC ; P_TestMobjZ + Line 436: EXTRN ?P_CheckPosition@@YA_NPEAVAActor@@AEBU?$TVector2@N@@_N@Z:PROC ; P_CheckPosition + Line 437: EXTRN ?P_TryMove@@YA_NPEAVAActor@@AEBU?$TVector2@N@@HPEBUsecplane_t@@AEAUFCheckPosition@@_N@Z:PROC ; P_TryMove + Line 438: EXTRN ?P_TryMove@@YA_NPEAVAActor@@AEBU?$TVector2@N@@HPEBUsecplane_t@@_N@Z:PROC ; P_TryMove + Line 439: EXTRN ?P_CheckSight@@YAHPEAVAActor@@0H@Z:PROC ; P_CheckSight + Line 440: EXTRN ?P_AimLineAttack@@YA?AU?$TAngle@N@@PEAVAActor@@U1@NPEAUFTranslatedLineTarget@@1H00@Z:PROC ; P_AimLineAttack + Line 441: EXTRN ?P_RailAttack@@YAXPEAUFRailParams@@@Z:PROC ; P_RailAttack + Line 442: EXTRN ?P_GetMoveFactor@@YANPEBVAActor@@PEAN@Z:PROC ; P_GetMoveFactor + Line 443: EXTRN ?BoxOnLineSide@FBoundingBox@@QEBAHPEBUline_t@@@Z:PROC ; FBoundingBox::BoxOnLineSide + Line 444: EXTRN ?P_CheckFor3DFloorHit@@YA_NPEAVAActor@@N_N@Z:PROC ; P_CheckFor3DFloorHit + Line 445: EXTRN ?P_Find3DFloor@@YAHPEAUsector_t@@AEBU?$TVector3@N@@_N2AEAN@Z:PROC ; P_Find3DFloor + Line 446: EXTRN ?TriggerSectorActions@sector_t@@QEAA_NPEAVAActor@@H@Z:PROC ; sector_t::TriggerSectorActions + Line 447: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 448: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 449: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 450: EXTRN ??0FBlockLinesIterator@@QEAA@PEAUFLevelLocals@@AEBVFBoundingBox@@@Z:PROC ; FBlockLinesIterator::FBlockLinesIterator + Line 451: EXTRN ?Next@FBlockLinesIterator@@QEAAPEAUline_t@@XZ:PROC ; FBlockLinesIterator::Next + Line 452: EXTRN ??0FMultiBlockThingsIterator@@QEAA@AEAUFPortalGroupArray@@PEAUFLevelLocals@@NNNNN_NPEAUsector_t@@@Z:PROC ; FMultiBlockThingsIterator::FMultiBlockThingsIterator + Line 453: EXTRN ?Next@FMultiBlockThingsIterator@@QEAA_NPEAUCheckResult@1@@Z:PROC ; FMultiBlockThingsIterator::Next + Line 454: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 455: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 456: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 457: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 458: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 459: EXTRN ?GetReplacee@PClassActor@@QEAAPEAV1@_N@Z:PROC ; PClassActor::GetReplacee + Line 460: EXTRN ?GetState@FStateLabelStorage@@QEAAPEAUFState@@HPEAVPClassActor@@_N@Z:PROC ; FStateLabelStorage::GetState + Line 461: EXTRN ?G_SkillProperty@@YAHW4ESkillProperty@@@Z:PROC ; G_SkillProperty + Line 462: EXTRN ?G_SkillProperty@@YANW4EFSkillProperty@@@Z:PROC ; G_SkillProperty + Line 463: EXTRN ?PlayActiveSound@AActor@@QEAAXXZ:PROC ; AActor::PlayActiveSound + Line 464: EXTRN ?CopyFriendliness@AActor@@QEAAXPEAV1@_N1@Z:PROC ; AActor::CopyFriendliness + Line 465: EXTRN ?Massacre@AActor@@QEAA_NXZ:PROC ; AActor::Massacre + Line 466: EXTRN ?GetTeam@AActor@@QEAAHXZ:PROC ; AActor::GetTeam + Line 467: EXTRN ?IsFriend@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsFriend + Line 468: EXTRN ?GetSpecies@AActor@@QEAA?AVFName@@XZ:PROC ; AActor::GetSpecies + Line 469: EXTRN ?SpawnHealth@AActor@@QEBAHXZ:PROC ; AActor::SpawnHealth + Line 470: EXTRN ?GetMissileDamage@AActor@@QEAAHHH@Z:PROC ; AActor::GetMissileDamage + Line 471: EXTRN ?SetState@AActor@@QEAA_NPEAUFState@@_N@Z:PROC ; AActor::SetState + Line 472: EXTRN ?isFast@AActor@@QEAA_NXZ:PROC ; AActor::isFast + Line 473: EXTRN ?SetIdle@AActor@@QEAAX_N@Z:PROC ; AActor::SetIdle + Line 474: EXTRN ?GetRaiseState@AActor@@QEAAPEAUFState@@XZ:PROC ; AActor::GetRaiseState + Line 475: EXTRN ?Revive@AActor@@QEAAXXZ:PROC ; AActor::Revive + Line 476: EXTRN ?P_ExecuteSpecial@@YAHHPEAUline_t@@PEAVAActor@@_NHHHHH@Z:PROC ; P_ExecuteSpecial + Line 477: EXTRN ?P_ActivateLine@@YA_NPEAUline_t@@PEAVAActor@@HHPEAU?$TVector3@N@@@Z:PROC ; P_ActivateLine + Line 478: EXTRN ?TranslateLineDef@FLevelLocals@@QEAAXPEAUline_t@@PEAUmaplinedef_t@@H@Z:PROC ; FLevelLocals::TranslateLineDef + Line 479: EXTRN ?GetPortalOffsetPosition@FLevelLocals@@QEAA?AU?$TVector2@N@@NNNN@Z:PROC ; FLevelLocals::GetPortalOffsetPosition + Line 480: EXTRN ?EV_DoDoor@FLevelLocals@@QEAA_NW4EVlDoor@DDoor@@PEAUline_t@@PEAVAActor@@HNHHH_NH@Z:PROC ; FLevelLocals::EV_DoDoor + Line 481: EXTRN ?EV_DoFloor@FLevelLocals@@QEAA_NW4EFloor@DFloor@@PEAUline_t@@HNNHH_N2@Z:PROC ; FLevelLocals::EV_DoFloor + Line 482: EXTRN ?ExitLevel@FLevelLocals@@QEAAXH_N@Z:PROC ; FLevelLocals::ExitLevel + Line 483: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 484: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 485: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 486: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 487: EXTRN __CxxFrameHandler3:PROC + Line 488: EXTRN floor:PROC + Line 489: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 490: EXTRN ?spechit@@3V?$TArray@Uspechit_t@@U1@@@A:BYTE ; spechit + Line 491: EXTRN ?alwaysapplydmflags@@3VFBoolCVar@@A:BYTE ; alwaysapplydmflags + Line 492: EXTRN ?teamplay@@3VFBoolCVar@@A:BYTE ; teamplay + Line 493: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 494: EXTRN ?dmflags@@3VFIntCVar@@A:BYTE ; dmflags + Line 495: EXTRN ?validcount@@3HA:DWORD ; validcount + Line 496: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 497: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 498: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 499: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 500: EXTRN __ImageBase:BYTE + Line 501: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_floor.cod (80 hits) + Line 35: EXTRN ?RegistrationInfo@DMover@@2UClassReg@@A:BYTE ; DMover::RegistrationInfo + Line 36: EXTRN ?RegistrationInfo@DMovingFloor@@2UClassReg@@A:BYTE ; DMovingFloor::RegistrationInfo + Line 232: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 233: EXTRN __std_terminate:PROC + Line 234: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 235: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 236: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 237: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 238: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 239: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 240: EXTRN ?P_ChangeSector@@YA_NPEAUsector_t@@HNH_N1@Z:PROC ; P_ChangeSector + Line 241: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HHW4seqtype_t@@H_N@Z:PROC ; SN_StartSequence + Line 242: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HPEBDH@Z:PROC ; SN_StartSequence + Line 243: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HVFName@@H@Z:PROC ; SN_StartSequence + Line 244: EXTRN ?SN_StopSequence@@YAXPEAUsector_t@@H@Z:PROC ; SN_StopSequence + Line 245: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAUsecspecial_t@@PEAU2@@Z:PROC ; Serialize + Line 246: EXTRN ?MoveFloor@sector_t@@QEAA?AW4EMoveResult@@NNHH_N0@Z:PROC ; sector_t::MoveFloor + Line 247: EXTRN ?MoveCeiling@sector_t@@QEAA?AW4EMoveResult@@NNHH_N@Z:PROC ; sector_t::MoveCeiling + Line 248: EXTRN ?NextSpecialSector@sector_t@@QEBAPEAU1@HPEAU1@@Z:PROC ; sector_t::NextSpecialSector + Line 249: EXTRN ?SetInterpolation@sector_t@@QEAAPEAVDInterpolation@@H_N@Z:PROC ; sector_t::SetInterpolation + Line 250: EXTRN ?CheckOverlap@sector_t@@QEAAXXZ:PROC ; sector_t::CheckOverlap + Line 251: EXTRN ?FindLowestFloorSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindLowestFloorSurrounding + Line 252: EXTRN ?FindHighestFloorSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindHighestFloorSurrounding + Line 253: EXTRN ?FindNextHighestFloor@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindNextHighestFloor + Line 254: EXTRN ?FindNextLowestFloor@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindNextLowestFloor + Line 255: EXTRN ?FindLowestCeilingSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindLowestCeilingSurrounding + Line 256: EXTRN ?FindHighestFloorPoint@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindHighestFloorPoint + Line 257: EXTRN ?FindShortestTextureAround@@YANPEAUsector_t@@@Z:PROC ; FindShortestTextureAround + Line 258: EXTRN ?FindModelFloorSector@@YAPEAUsector_t@@PEAU1@N@Z:PROC ; FindModelFloorSector + Line 259: EXTRN ?FindModelCeilingSector@@YAPEAUsector_t@@PEAU1@N@Z:PROC ; FindModelCeilingSector + Line 260: EXTRN ?FindLowestCeilingPoint@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindLowestCeilingPoint + Line 261: EXTRN ?PlaneMoving@@YAHPEAUsector_t@@H@Z:PROC ; PlaneMoving + Line 262: EXTRN ?TransferSpecial@@YAXPEAUsector_t@@0@Z:PROC ; TransferSpecial + Line 263: EXTRN ?GetSpecial@@YAXPEAUsector_t@@PEAUsecspecial_t@@@Z:PROC ; GetSpecial + Line 264: EXTRN ?SetSpecial@@YAXPEAUsector_t@@PEBUsecspecial_t@@@Z:PROC ; SetSpecial + Line 265: EXTRN ?AdjustFloorClip@@YAXPEBUsector_t@@@Z:PROC ; AdjustFloorClip + Line 266: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 267: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 268: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 269: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFTextureID@@PEAV2@@Z:PROC ; Serialize + Line 270: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 271: EXTRN ?P_Scroll3dMidtex@@YA_NPEAUsector_t@@HN_N1@Z:PROC ; P_Scroll3dMidtex + Line 272: EXTRN ?P_MoveLinkedSectors@@YA_NPEAUsector_t@@HN_N1@Z:PROC ; P_MoveLinkedSectors + Line 273: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 274: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 275: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 276: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 277: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 278: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 279: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 280: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 281: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 282: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 283: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 284: EXTRN ?StaticType@DSectorEffect@@UEBAPEAVPClass@@XZ:PROC ; DSectorEffect::StaticType + Line 285: EXTRN ?Serialize@DSectorEffect@@UEAAXAEAVFSerializer@@@Z:PROC ; DSectorEffect::Serialize + Line 286: EXTRN ?OnDestroy@DSectorEffect@@UEAAXXZ:PROC ; DSectorEffect::OnDestroy + Line 287: EXTRN ??_EDSectorEffect@@UEAAPEAXI@Z:PROC ; DSectorEffect::`vector deleting destructor' + Line 288: EXTRN ?StaticType@DMover@@UEBAPEAVPClass@@XZ:PROC ; DMover::StaticType + Line 289: EXTRN ?Construct@DMover@@IEAAXPEAUsector_t@@@Z:PROC ; DMover::Construct + Line 290: EXTRN ?StopInterpolation@DMover@@QEAAX_N@Z:PROC ; DMover::StopInterpolation + Line 291: EXTRN ?Serialize@DMover@@MEAAXAEAVFSerializer@@@Z:PROC ; DMover::Serialize + Line 292: EXTRN ?OnDestroy@DMover@@MEAAXXZ:PROC ; DMover::OnDestroy + Line 293: EXTRN ??_EDMover@@UEAAPEAXI@Z:PROC ; DMover::`vector deleting destructor' + Line 294: EXTRN ?StaticType@DMovingFloor@@UEBAPEAVPClass@@XZ:PROC ; DMovingFloor::StaticType + Line 295: EXTRN ?Construct@DMovingFloor@@IEAAXPEAUsector_t@@@Z:PROC ; DMovingFloor::Construct + Line 296: EXTRN ??_EDMovingFloor@@UEAAPEAXI@Z:PROC ; DMovingFloor::`vector deleting destructor' + Line 297: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 298: EXTRN ?NextCompat@FSectorTagIterator@@QEAAH_NH@Z:PROC ; FSectorTagIterator::NextCompat + Line 299: EXTRN ??_EDFloor@@UEAAPEAXI@Z:PROC ; DFloor::`vector deleting destructor' + Line 300: EXTRN ??_EDElevator@@UEAAPEAXI@Z:PROC ; DElevator::`vector deleting destructor' + Line 301: EXTRN ??_EDWaggleBase@@UEAAPEAXI@Z:PROC ; DWaggleBase::`vector deleting destructor' + Line 302: EXTRN ??_EDFloorWaggle@@UEAAPEAXI@Z:PROC ; DFloorWaggle::`vector deleting destructor' + Line 303: EXTRN ??_EDCeilingWaggle@@UEAAPEAXI@Z:PROC ; DCeilingWaggle::`vector deleting destructor' + Line 304: EXTRN ?DelRef@DInterpolation@@QEAAH_N@Z:PROC ; DInterpolation::DelRef + Line 305: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 306: EXTRN __CxxFrameHandler3:PROC + Line 307: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 308: EXTRN __ImageBase:BYTE + Line 309: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_glnodes.cod (68 hits) + Line 16: EXTRN ?IsAlias@FConsoleCommand@@UEAA_NXZ:PROC ; FConsoleCommand::IsAlias + Line 17: EXTRN ?Run@FUnsafeConsoleCommand@@UEAAXAEAVFCommandLine@@PEAVAPlayerPawn@@H@Z:PROC ; FUnsafeConsoleCommand::Run + Line 18: EXTRN ??_EFUnsafeConsoleCommand@@UEAAPEAXI@Z:PROC ; FUnsafeConsoleCommand::`vector deleting destructor' + Line 19: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 113: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 114: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 115: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 116: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 117: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 118: EXTRN atexit:PROC + Line 119: EXTRN __std_terminate:PROC + Line 120: EXTRN remove:PROC + Line 121: EXTRN strrchr:PROC + Line 122: EXTRN strncpy:PROC + Line 123: EXTRN strnicmp:PROC + Line 124: EXTRN compress:PROC + Line 125: EXTRN _rmdir:PROC + Line 126: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 127: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 128: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 129: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 130: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 131: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 132: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 133: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 134: EXTRN ?Left@FString@@QEBA?AV1@_K@Z:PROC ; FString::Left + Line 135: EXTRN ?Right@FString@@QEBA?AV1@_K@Z:PROC ; FString::Right + Line 136: EXTRN ?IndexOf@FString@@QEBAJDJ@Z:PROC ; FString::IndexOf + Line 137: EXTRN ?ReplaceChars@FString@@QEAAXDD@Z:PROC ; FString::ReplaceChars + Line 138: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 139: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 140: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 141: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAPlayerPawn@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 142: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 143: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 144: EXTRN ?Open@FileWriter@@SAPEAV1@PEBD@Z:PROC ; FileWriter::Open + Line 145: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 146: EXTRN ?GetWadFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetWadFullName + Line 147: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDHH_N@Z:PROC ; FWadCollection::CheckNumForName + Line 148: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 149: EXTRN ?ReopenLumpReader@FWadCollection@@QEAA?AVFileReader@@H_N@Z:PROC ; FWadCollection::ReopenLumpReader + Line 150: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 151: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 152: EXTRN ?GetLumpFullPath@FWadCollection@@QEBA?AVFString@@H@Z:PROC ; FWadCollection::GetLumpFullPath + Line 153: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 154: EXTRN c_sqrt:PROC + Line 155: EXTRN ?FindMapBounds@FLevel@FNodeBuilder@@QEAAXXZ:PROC ; FNodeBuilder::FLevel::FindMapBounds + Line 156: EXTRN ??0FNodeBuilder@@QEAA@AEAUFLevel@0@AEAV?$TArray@UFPolyStart@FNodeBuilder@@U12@@@1_N@Z:PROC ; FNodeBuilder::FNodeBuilder + Line 157: EXTRN ??1FNodeBuilder@@QEAA@XZ:PROC ; FNodeBuilder::~FNodeBuilder + Line 158: EXTRN ?Extract@FNodeBuilder@@QEAAXAEAUFLevelLocals@@@Z:PROC ; FNodeBuilder::Extract + Line 159: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 160: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 161: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 162: EXTRN ?OpenResourceFile@FResourceFile@@SAPEAV1@PEBD_N1@Z:PROC ; FResourceFile::OpenResourceFile + Line 163: EXTRN ?GetChecksum@MapData@@QEAAXQEAE@Z:PROC ; MapData::GetChecksum + Line 164: EXTRN ?LoadExtendedNodes@MapLoader@@QEAAXAEAVFileReader@@I@Z:PROC ; MapLoader::LoadExtendedNodes + Line 165: EXTRN ?GetPolySpots@MapLoader@@QEAAXPEAUMapData@@AEAV?$TArray@UFPolyStart@FNodeBuilder@@U12@@@1@Z:PROC ; MapLoader::GetPolySpots + Line 166: EXTRN ?M_GetCachePath@@YA?AVFString@@_N@Z:PROC ; M_GetCachePath + Line 167: EXTRN ?CreatePath@@YAXPEBD@Z:PROC ; CreatePath + Line 168: EXTRN ?ScanDirectory@@YAXAEAV?$TArray@UFFileList@@U1@@@PEBD@Z:PROC ; ScanDirectory + Line 169: EXTRN ?I_msTime@@YA_KXZ:PROC ; I_msTime + Line 170: EXTRN __CxxFrameHandler3:PROC + Line 171: EXTRN memmove:PROC + Line 172: EXTRN memset:PROC + Line 173: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 174: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 175: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 176: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_interaction.cod (95 hits) + Line 292: EXTRN atexit:PROC + Line 293: EXTRN stricmp:PROC + Line 294: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 295: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 296: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 297: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 298: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 299: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 300: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 301: EXTRN ??AFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator[] + Line 302: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 303: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 304: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 305: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 306: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 307: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 308: EXTRN ?I_Tactile@@YAXHHH@Z:PROC ; I_Tactile + Line 309: EXTRN ?AnnounceKill@@YA_NPEAVAActor@@0@Z:PROC ; AnnounceKill + Line 310: EXTRN ?AnnounceTelefrag@@YA_NPEAVAActor@@0@Z:PROC ; AnnounceTelefrag + Line 311: EXTRN ?AnnounceSpree@@YA_NPEAVAActor@@@Z:PROC ; AnnounceSpree + Line 312: EXTRN ?AnnounceSpreeLoss@@YA_NPEAVAActor@@@Z:PROC ; AnnounceSpreeLoss + Line 313: EXTRN ?AnnounceMultikill@@YA_NPEAVAActor@@@Z:PROC ; AnnounceMultikill + Line 314: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 315: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 316: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 317: EXTRN ?FindFunction@PClass@@SAXPEAPEAVVMFunction@@VFName@@1@Z:PROC ; PClass::FindFunction + Line 318: EXTRN ?AM_Stop@@YAXXZ:PROC ; AM_Stop + Line 319: EXTRN ?C_HideConsole@@YAXXZ:PROC ; C_HideConsole + Line 320: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 321: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 322: EXTRN ?CheckCheatmode@@YA_N_N@Z:PROC ; CheckCheatmode + Line 323: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 324: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 325: EXTRN ?P_ExplodeMissile@@YAXPEAVAActor@@PEAUline_t@@0_N@Z:PROC ; P_ExplodeMissile + Line 326: EXTRN ?P_CheckSight@@YAHPEAVAActor@@0H@Z:PROC ; P_CheckSight + Line 327: EXTRN ?P_GiveBody@@YA_NPEAVAActor@@HH@Z:PROC ; P_GiveBody + Line 328: EXTRN ?P_ActivateThingSpecial@@YA_NPEAVAActor@@0_N@Z:PROC ; P_ActivateThingSpecial + Line 329: EXTRN ?StartTypedScripts@FBehaviorContainer@@QEAAXGPEAVAActor@@_NH1@Z:PROC ; FBehaviorContainer::StartTypedScripts + Line 330: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 331: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 332: EXTRN ?GetObituary@DamageTypeDefinition@@SA?AVFString@@VFName@@@Z:PROC ; DamageTypeDefinition::GetObituary + Line 333: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 334: EXTRN ?G_SkillProperty@@YAHW4ESkillProperty@@@Z:PROC ; G_SkillProperty + Line 335: EXTRN ?G_SkillProperty@@YANW4EFSkillProperty@@@Z:PROC ; G_SkillProperty + Line 336: EXTRN ?AbsorbDamage@AActor@@QEAAHHVFName@@@Z:PROC ; AActor::AbsorbDamage + Line 337: EXTRN ?CallDoSpecialDamage@AActor@@QEAAHPEAV1@HVFName@@@Z:PROC ; AActor::CallDoSpecialDamage + Line 338: EXTRN ?CallTakeSpecialDamage@AActor@@QEAAHPEAV1@0HVFName@@@Z:PROC ; AActor::CallTakeSpecialDamage + Line 339: EXTRN ?CallTouch@AActor@@QEAAXPEAV1@@Z:PROC ; AActor::CallTouch + Line 340: EXTRN ?Howl@AActor@@QEAAXXZ:PROC ; AActor::Howl + Line 341: EXTRN ?CheckLocalView@AActor@@QEBA_NH@Z:PROC ; AActor::CheckLocalView + Line 342: EXTRN ?FindInventory@AActor@@QEAAPEAV1@PEAVPClassActor@@_N@Z:PROC ; AActor::FindInventory + Line 343: EXTRN ?GiveInventoryType@AActor@@QEAAPEAV1@PEAVPClassActor@@@Z:PROC ; AActor::GiveInventoryType + Line 344: EXTRN ?IsTeammate@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsTeammate + Line 345: EXTRN ?IsFriend@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsFriend + Line 346: EXTRN ?IsHostile@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsHostile + Line 347: EXTRN ?GetSpecies@AActor@@QEAA?AVFName@@XZ:PROC ; AActor::GetSpecies + Line 348: EXTRN ?GetGibHealth@AActor@@QEBAHXZ:PROC ; AActor::GetGibHealth + Line 349: EXTRN ?SetState@AActor@@QEAA_NPEAUFState@@_N@Z:PROC ; AActor::SetState + Line 350: EXTRN ?ApplyDamageFactor@AActor@@QEBAHVFName@@H@Z:PROC ; AActor::ApplyDamageFactor + Line 351: EXTRN ?GetModifiedDamage@AActor@@QEAAHVFName@@H_N@Z:PROC ; AActor::GetModifiedDamage + Line 352: EXTRN ?D_GetFragCount@@YAHPEAVplayer_t@@@Z:PROC ; D_GetFragCount + Line 353: EXTRN ??0DHUDMessageFadeOut@@QEAA@PEAVFFont@@PEBDMMHHW4EColorRange@@MM@Z:PROC ; DHUDMessageFadeOut::DHUDMessageFadeOut + Line 354: EXTRN ?AttachMessage@DBaseStatusBar@@QEAAXPEAVDHUDMessageBase@@IH@Z:PROC ; DBaseStatusBar::AttachMessage + Line 355: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 356: EXTRN ?Net_WriteString@@YAXPEBD@Z:PROC ; Net_WriteString + Line 357: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 358: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 359: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 360: EXTRN ?GetInfighting@FLevelLocals@@QEAAHXZ:PROC ; FLevelLocals::GetInfighting + Line 361: EXTRN ?ExitLevel@FLevelLocals@@QEAAXH_N@Z:PROC ; FLevelLocals::ExitLevel + Line 362: EXTRN ?E_WorldThingDied@@YAXPEAVAActor@@0@Z:PROC ; E_WorldThingDied + Line 363: EXTRN ?E_WorldThingDamaged@@YAXPEAVAActor@@00HVFName@@HU?$TAngle@N@@@Z:PROC ; E_WorldThingDamaged + Line 364: EXTRN ?E_PlayerDied@@YAXH@Z:PROC ; E_PlayerDied + Line 365: EXTRN __CxxFrameHandler3:PROC + Line 366: EXTRN memcpy:PROC + Line 367: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 368: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 369: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 370: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 371: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 372: EXTRN ?automapactive@@3_NA:BYTE ; automapactive + Line 373: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 374: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 375: EXTRN ?deh@@3UDehInfo@@A:BYTE ; deh + Line 376: EXTRN ?dmflags2@@3VFIntCVar@@A:BYTE ; dmflags2 + Line 377: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 378: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 379: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 380: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 381: EXTRN ?RegistrationInfo@DHUDMessageFadeOut@@2UClassReg@@A:BYTE ; DHUDMessageFadeOut::RegistrationInfo + Line 382: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 383: EXTRN ?show_obituaries@@3VFBoolCVar@@A:BYTE ; show_obituaries + Line 384: EXTRN ?fraglimit@@3VFIntCVar@@A:BYTE ; fraglimit + Line 385: EXTRN __ImageBase:BYTE + Line 386: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_lights.cod (49 hits) + Line 44: EXTRN ?RegistrationInfo@DSectorEffect@@2UClassReg@@A:BYTE ; DSectorEffect::RegistrationInfo + Line 261: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 262: EXTRN atexit:PROC + Line 263: EXTRN __std_terminate:PROC + Line 264: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 265: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 266: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 267: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 268: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 269: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 270: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 271: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 272: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 273: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 274: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 275: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 276: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 277: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 278: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 279: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 280: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 281: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 282: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 283: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 284: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 285: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 286: EXTRN ?NextSpecialSector@sector_t@@QEBAPEAU1@HPEAU1@@Z:PROC ; sector_t::NextSpecialSector + Line 287: EXTRN ?FindMinSurroundingLight@@YAHPEBUsector_t@@H@Z:PROC ; FindMinSurroundingLight + Line 288: EXTRN ?StaticType@DSectorEffect@@UEBAPEAVPClass@@XZ:PROC ; DSectorEffect::StaticType + Line 289: EXTRN ?Construct@DSectorEffect@@QEAAXPEAUsector_t@@@Z:PROC ; DSectorEffect::Construct + Line 290: EXTRN ?Serialize@DSectorEffect@@UEAAXAEAVFSerializer@@@Z:PROC ; DSectorEffect::Serialize + Line 291: EXTRN ?OnDestroy@DSectorEffect@@UEAAXXZ:PROC ; DSectorEffect::OnDestroy + Line 292: EXTRN ??_EDSectorEffect@@UEAAPEAXI@Z:PROC ; DSectorEffect::`vector deleting destructor' + Line 293: EXTRN ?SectorHasTag@FTagManager@@AEBA_NPEBUsector_t@@H@Z:PROC ; FTagManager::SectorHasTag + Line 294: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 295: EXTRN ??_EDLighting@@UEAAPEAXI@Z:PROC ; DLighting::`vector deleting destructor' + Line 296: EXTRN ??_EDFireFlicker@@UEAAPEAXI@Z:PROC ; DFireFlicker::`vector deleting destructor' + Line 297: EXTRN ??_EDFlicker@@UEAAPEAXI@Z:PROC ; DFlicker::`vector deleting destructor' + Line 298: EXTRN ??_EDLightFlash@@UEAAPEAXI@Z:PROC ; DLightFlash::`vector deleting destructor' + Line 299: EXTRN ??_EDStrobe@@UEAAPEAXI@Z:PROC ; DStrobe::`vector deleting destructor' + Line 300: EXTRN ??_EDGlow@@UEAAPEAXI@Z:PROC ; DGlow::`vector deleting destructor' + Line 301: EXTRN ??_EDGlow2@@UEAAPEAXI@Z:PROC ; DGlow2::`vector deleting destructor' + Line 302: EXTRN ??_EDPhased@@UEAAPEAXI@Z:PROC ; DPhased::`vector deleting destructor' + Line 303: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 304: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 305: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAEPEAE@Z:PROC ; Serialize + Line 306: EXTRN __CxxFrameHandler3:PROC + Line 307: EXTRN ?validcount@@3HA:DWORD ; validcount + Line 308: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_linkedsectors.cod (12 hits) + Line 48: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 49: EXTRN ?P_ChangeSector@@YA_NPEAUsector_t@@HNH_N1@Z:PROC ; P_ChangeSector + Line 50: EXTRN ?SetInterpolation@sector_t@@QEAAPEAVDInterpolation@@H_N@Z:PROC ; sector_t::SetInterpolation + Line 51: EXTRN ?CheckOverlap@sector_t@@QEAAXXZ:PROC ; sector_t::CheckOverlap + Line 52: EXTRN ?PlaneMoving@@YAHPEAUsector_t@@H@Z:PROC ; PlaneMoving + Line 53: EXTRN ?SectorHasTag@FTagManager@@AEBA_NPEBUsector_t@@H@Z:PROC ; FTagManager::SectorHasTag + Line 54: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 55: EXTRN ?Next@FLineIdIterator@@QEAAHXZ:PROC ; FLineIdIterator::Next + Line 56: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 57: EXTRN memmove:PROC + Line 58: EXTRN __ImageBase:BYTE + Line 59: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_lnspec.cod (142 hits) + Line 283: EXTRN ?AllSkills@@3V?$TArray@UFSkillInfo@@U1@@@A:BYTE ; AllSkills + Line 284: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 285: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 286: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 287: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 288: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 289: EXTRN ?gameaction@@3W4gameaction_t@@A:DWORD ; gameaction + Line 290: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 291: EXTRN ?SpawnableThings@@3V?$TMap@HPEAVPClassActor@@U?$THashTraits@H@@U?$TValueTraits@PEAVPClassActor@@@@@@A:BYTE ; SpawnableThings + Line 292: EXTRN ?NextSkill@@3HA:DWORD ; NextSkill + Line 293: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 294: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 295: EXTRN ?deh@@3UDehInfo@@A:BYTE ; deh + Line 296: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 3086: EXTRN atexit:PROC + Line 3087: EXTRN __std_terminate:PROC + Line 3088: EXTRN qsort:PROC + Line 3089: EXTRN stricmp:PROC + Line 3090: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 3091: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 3092: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 3093: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 3094: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 3095: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 3096: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 3097: EXTRN mysnprintf:PROC + Line 3098: EXTRN c_sqrt:PROC + Line 3099: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 3100: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 3101: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 3102: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 3103: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 3104: EXTRN ?P_RemoveThing@@YAXPEAVAActor@@@Z:PROC ; P_RemoveThing + Line 3105: EXTRN ?P_Thing_Raise@@YA_NPEAVAActor@@0H@Z:PROC ; P_Thing_Raise + Line 3106: EXTRN ?P_DamageMobj@@YAHPEAVAActor@@00HVFName@@HU?$TAngle@N@@@Z:PROC ; P_DamageMobj + Line 3107: EXTRN ?P_GiveBody@@YA_NPEAVAActor@@HH@Z:PROC ; P_GiveBody + Line 3108: EXTRN ?P_NoiseAlert@@YAXPEAVAActor@@0_NN@Z:PROC ; P_NoiseAlert + Line 3109: EXTRN ?FindLevelInfo@@YAPEAUlevel_info_t@@PEBD_N@Z:PROC ; FindLevelInfo + Line 3110: EXTRN ?FindLevelByNum@@YAPEAUlevel_info_t@@H@Z:PROC ; FindLevelByNum + Line 3111: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 3112: EXTRN ?S_Sound@@YAXHVFSoundID@@MM@Z:PROC ; S_Sound + Line 3113: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 3114: EXTRN ?S_StopSound@@YAXH@Z:PROC ; S_StopSound + Line 3115: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 3116: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 3117: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 3118: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 3119: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 3120: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 3121: EXTRN ?StaticSpawn@AActor@@SAPEAV1@PEAVPClassActor@@AEBU?$TVector3@N@@W4replace_t@@_N@Z:PROC ; AActor::StaticSpawn + Line 3122: EXTRN ?CallActivate@AActor@@QEAAXPEAV1@@Z:PROC ; AActor::CallActivate + Line 3123: EXTRN ?CallDeactivate@AActor@@QEAAXPEAV1@@Z:PROC ; AActor::CallDeactivate + Line 3124: EXTRN ?UseInventory@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::UseInventory + Line 3125: EXTRN ?CheckLocalView@AActor@@QEBA_NH@Z:PROC ; AActor::CheckLocalView + Line 3126: EXTRN ?FindInventory@AActor@@QEAAPEAV1@PEAVPClassActor@@_N@Z:PROC ; AActor::FindInventory + Line 3127: EXTRN ?FindInventory@AActor@@QEAAPEAV1@VFName@@_N@Z:PROC ; AActor::FindInventory + Line 3128: EXTRN ?GiveInventoryType@AActor@@QEAAPEAV1@PEAVPClassActor@@@Z:PROC ; AActor::GiveInventoryType + Line 3129: EXTRN ?ConversationAnimation@AActor@@QEAAXH@Z:PROC ; AActor::ConversationAnimation + Line 3130: EXTRN ?SpawnHealth@AActor@@QEBAHXZ:PROC ; AActor::SpawnHealth + Line 3131: EXTRN ?AddToHash@AActor@@QEAAXXZ:PROC ; AActor::AddToHash + Line 3132: EXTRN ?RemoveFromHash@AActor@@QEAAXXZ:PROC ; AActor::RemoveFromHash + Line 3133: EXTRN ?SetState@AActor@@QEAA_NPEAUFState@@_N@Z:PROC ; AActor::SetState + Line 3134: EXTRN ?ClassForSpawn@@YAPEAVPClassActor@@VFName@@@Z:PROC ; ClassForSpawn + Line 3135: EXTRN ?P_CheckKeys@@YAHPEAVAActor@@H_N1@Z:PROC ; P_CheckKeys + Line 3136: EXTRN ?P_StartConversation@@YAXPEAVAActor@@0_N1@Z:PROC ; P_StartConversation + Line 3137: EXTRN ?P_AddSectorLinks@@YA_NPEAUsector_t@@HHH@Z:PROC ; P_AddSectorLinks + Line 3138: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 3139: EXTRN ??AFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator[] + Line 3140: EXTRN ?RemoveForceField@@YAXPEAUsector_t@@@Z:PROC ; RemoveForceField + Line 3141: EXTRN ?SetColor@@YAXPEAUsector_t@@HH@Z:PROC ; SetColor + Line 3142: EXTRN ?SetFade@@YAXPEAUsector_t@@H@Z:PROC ; SetFade + Line 3143: EXTRN ?EV_RotatePoly@@YA_NPEAUFLevelLocals@@PEAUline_t@@HHHH_N@Z:PROC ; EV_RotatePoly + Line 3144: EXTRN ?EV_MovePoly@@YA_NPEAUFLevelLocals@@PEAUline_t@@HNU?$TAngle@N@@N_N@Z:PROC ; EV_MovePoly + Line 3145: EXTRN ?EV_MovePolyTo@@YA_NPEAUFLevelLocals@@PEAUline_t@@HNAEBU?$TVector2@N@@_N@Z:PROC ; EV_MovePolyTo + Line 3146: EXTRN ?EV_OpenPolyDoor@@YA_NPEAUFLevelLocals@@PEAUline_t@@HNU?$TAngle@N@@HNW4podoortype_t@@@Z:PROC ; EV_OpenPolyDoor + Line 3147: EXTRN ?EV_StopPoly@@YA_NPEAUFLevelLocals@@H@Z:PROC ; EV_StopPoly + Line 3148: EXTRN ?SetLogNumber@player_t@@QEAAXH@Z:PROC ; player_t::SetLogNumber + Line 3149: EXTRN ?R_ClearPastViewer@@YAXPEAVAActor@@@Z:PROC ; R_ClearPastViewer + Line 3150: EXTRN ?T_RunScript@@YA_NPEAUFLevelLocals@@HPEAVAActor@@@Z:PROC ; T_RunScript + Line 3151: EXTRN ?P_SetSectorFriction@@YAXPEAUFLevelLocals@@HH_N@Z:PROC ; P_SetSectorFriction + Line 3152: EXTRN ?SectorHasTag@FTagManager@@AEBA_NPEBUsector_t@@H@Z:PROC ; FTagManager::SectorHasTag + Line 3153: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 3154: EXTRN ?Next@FLineIdIterator@@QEAAHXZ:PROC ; FLineIdIterator::Next + Line 3155: EXTRN ?P_ChangeSwitchTexture@@YA_NPEAUside_t@@HEPEA_N@Z:PROC ; P_ChangeSwitchTexture + Line 3156: EXTRN ?P_StartScript@@YAHPEAUFLevelLocals@@PEAVAActor@@PEAUline_t@@HPEBDPEBHHH@Z:PROC ; P_StartScript + Line 3157: EXTRN ?P_SuspendScript@@YAXPEAUFLevelLocals@@HPEBD@Z:PROC ; P_SuspendScript + Line 3158: EXTRN ?P_TerminateScript@@YAXPEAUFLevelLocals@@HPEBD@Z:PROC ; P_TerminateScript + Line 3159: EXTRN ?P_StartQuake@@YA_NPEAUFLevelLocals@@PEAVAActor@@HHHHHVFSoundID@@@Z:PROC ; P_StartQuake + Line 3160: EXTRN ?P_SetHealthGroupHealth@@YAXPEAUFLevelLocals@@HH@Z:PROC ; P_SetHealthGroupHealth + Line 3161: EXTRN ?CheckIfExitIsGood@FLevelLocals@@QEAA_NPEAVAActor@@PEAUlevel_info_t@@@Z:PROC ; FLevelLocals::CheckIfExitIsGood + Line 3162: EXTRN ?GetConversation@FLevelLocals@@QEAAHH@Z:PROC ; FLevelLocals::GetConversation + Line 3163: EXTRN ?ChangePortal@FLevelLocals@@QEAA_NPEAUline_t@@HH@Z:PROC ; FLevelLocals::ChangePortal + Line 3164: EXTRN ?AdjustPusher@FLevelLocals@@QEAAXHHH_N@Z:PROC ; FLevelLocals::AdjustPusher + Line 3165: EXTRN ?Massacre@FLevelLocals@@QEAAH_NVFName@@@Z:PROC ; FLevelLocals::Massacre + Line 3166: EXTRN ?ForceLightning@FLevelLocals@@QEAAXH@Z:PROC ; FLevelLocals::ForceLightning + Line 3167: EXTRN ?AlignFlat@FLevelLocals@@QEAA_NHHH@Z:PROC ; FLevelLocals::AlignFlat + Line 3168: EXTRN ?EV_Thing_Spawn@FLevelLocals@@QEAA_NHPEAVAActor@@HU?$TAngle@N@@_NH@Z:PROC ; FLevelLocals::EV_Thing_Spawn + Line 3169: EXTRN ?EV_Thing_Move@FLevelLocals@@QEAA_NHPEAVAActor@@H_N@Z:PROC ; FLevelLocals::EV_Thing_Move + Line 3170: EXTRN ?EV_Thing_Projectile@FLevelLocals@@QEAA_NHPEAVAActor@@HPEBDU?$TAngle@N@@NNH0HH_N@Z:PROC ; FLevelLocals::EV_Thing_Projectile + Line 3171: EXTRN ?EV_Thing_Damage@FLevelLocals@@QEAAHHPEAVAActor@@HVFName@@@Z:PROC ; FLevelLocals::EV_Thing_Damage + Line 3172: EXTRN ?EV_DoPlat@FLevelLocals@@QEAA_NHPEAUline_t@@W4EPlatType@DPlat@@NNHHH@Z:PROC ; FLevelLocals::EV_DoPlat + Line 3173: EXTRN ?EV_StopPlat@FLevelLocals@@QEAAXH_N@Z:PROC ; FLevelLocals::EV_StopPlat + Line 3174: EXTRN ?EV_DoPillar@FLevelLocals@@QEAA_NW4EPillar@DPillar@@PEAUline_t@@HNNNH_N@Z:PROC ; FLevelLocals::EV_DoPillar + Line 3175: EXTRN ?EV_DoDoor@FLevelLocals@@QEAA_NW4EVlDoor@DDoor@@PEAUline_t@@PEAVAActor@@HNHHH_NH@Z:PROC ; FLevelLocals::EV_DoDoor + Line 3176: EXTRN ?EV_SlidingDoor@FLevelLocals@@QEAA_NPEAUline_t@@PEAVAActor@@HHHW4EADType@DAnimatedDoor@@@Z:PROC ; FLevelLocals::EV_SlidingDoor + Line 3177: EXTRN ?EV_DoCeiling@FLevelLocals@@QEAA_NW4ECeiling@DCeiling@@PEAUline_t@@HNNNHHHW4ECrushMode@3@@Z:PROC ; FLevelLocals::EV_DoCeiling + Line 3178: EXTRN ?EV_CeilingCrushStop@FLevelLocals@@QEAA_NH_N@Z:PROC ; FLevelLocals::EV_CeilingCrushStop + Line 3179: EXTRN ?EV_StopCeiling@FLevelLocals@@QEAA_NHPEAUline_t@@@Z:PROC ; FLevelLocals::EV_StopCeiling + Line 3180: EXTRN ?EV_BuildStairs@FLevelLocals@@QEAA_NHW4EStair@DFloor@@PEAUline_t@@NNHHHH@Z:PROC ; FLevelLocals::EV_BuildStairs + Line 3181: EXTRN ?EV_DoFloor@FLevelLocals@@QEAA_NW4EFloor@DFloor@@PEAUline_t@@HNNHH_N2@Z:PROC ; FLevelLocals::EV_DoFloor + Line 3182: EXTRN ?EV_FloorCrushStop@FLevelLocals@@QEAA_NHPEAUline_t@@@Z:PROC ; FLevelLocals::EV_FloorCrushStop + Line 3183: EXTRN ?EV_StopFloor@FLevelLocals@@QEAA_NHPEAUline_t@@@Z:PROC ; FLevelLocals::EV_StopFloor + Line 3184: EXTRN ?EV_DoDonut@FLevelLocals@@QEAA_NHPEAUline_t@@NN@Z:PROC ; FLevelLocals::EV_DoDonut + Line 3185: EXTRN ?EV_DoElevator@FLevelLocals@@QEAA_NPEAUline_t@@W4EElevator@DElevator@@NNH@Z:PROC ; FLevelLocals::EV_DoElevator + Line 3186: EXTRN ?EV_StartWaggle@FLevelLocals@@QEAA_NHPEAUline_t@@HHHH_N@Z:PROC ; FLevelLocals::EV_StartWaggle + Line 3187: EXTRN ?EV_DoChange@FLevelLocals@@QEAA_NPEAUline_t@@W4EChange@@H@Z:PROC ; FLevelLocals::EV_DoChange + Line 3188: EXTRN ?EV_StartLightFlickering@FLevelLocals@@QEAAXHHH@Z:PROC ; FLevelLocals::EV_StartLightFlickering + Line 3189: EXTRN ?EV_StartLightStrobing@FLevelLocals@@QEAAXHHHHH@Z:PROC ; FLevelLocals::EV_StartLightStrobing + Line 3190: EXTRN ?EV_StartLightStrobing@FLevelLocals@@QEAAXHHH@Z:PROC ; FLevelLocals::EV_StartLightStrobing + Line 3191: EXTRN ?EV_TurnTagLightsOff@FLevelLocals@@QEAAXH@Z:PROC ; FLevelLocals::EV_TurnTagLightsOff + Line 3192: EXTRN ?EV_LightTurnOn@FLevelLocals@@QEAAXHH@Z:PROC ; FLevelLocals::EV_LightTurnOn + Line 3193: EXTRN ?EV_LightChange@FLevelLocals@@QEAAXHH@Z:PROC ; FLevelLocals::EV_LightChange + Line 3194: EXTRN ?EV_StartLightGlowing@FLevelLocals@@QEAAXHHHH@Z:PROC ; FLevelLocals::EV_StartLightGlowing + Line 3195: EXTRN ?EV_StartLightFading@FLevelLocals@@QEAAXHHH@Z:PROC ; FLevelLocals::EV_StartLightFading + Line 3196: EXTRN ?EV_StopLightEffect@FLevelLocals@@QEAAXH@Z:PROC ; FLevelLocals::EV_StopLightEffect + Line 3197: EXTRN ?EV_Teleport@FLevelLocals@@QEAA_NHHPEAUline_t@@HPEAVAActor@@H@Z:PROC ; FLevelLocals::EV_Teleport + Line 3198: EXTRN ?EV_SilentLineTeleport@FLevelLocals@@QEAA_NPEAUline_t@@HPEAVAActor@@HH@Z:PROC ; FLevelLocals::EV_SilentLineTeleport + Line 3199: EXTRN ?EV_TeleportOther@FLevelLocals@@QEAA_NHH_N@Z:PROC ; FLevelLocals::EV_TeleportOther + Line 3200: EXTRN ?EV_TeleportGroup@FLevelLocals@@QEAA_NHPEAVAActor@@HH_N1@Z:PROC ; FLevelLocals::EV_TeleportGroup + Line 3201: EXTRN ?EV_TeleportSector@FLevelLocals@@QEAA_NHHH_NH@Z:PROC ; FLevelLocals::EV_TeleportSector + Line 3202: EXTRN ?ChangeLevel@FLevelLocals@@QEAAXPEBDHHH@Z:PROC ; FLevelLocals::ChangeLevel + Line 3203: EXTRN ?GetSecretExitMap@FLevelLocals@@QEAAPEBDXZ:PROC ; FLevelLocals::GetSecretExitMap + Line 3204: EXTRN ?ExitLevel@FLevelLocals@@QEAAXH_N@Z:PROC ; FLevelLocals::ExitLevel + Line 3205: EXTRN ?SecretExitLevel@FLevelLocals@@QEAAXH@Z:PROC ; FLevelLocals::SecretExitLevel + Line 3206: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 3207: EXTRN ?SetWallScroller@@YAXPEAUFLevelLocals@@HHNNW4EScrollPos@@@Z:PROC ; SetWallScroller + Line 3208: EXTRN ?SetScroller@@YAXPEAUFLevelLocals@@HW4EScroll@@NN@Z:PROC ; SetScroller + Line 3209: EXTRN __CxxFrameHandler3:PROC + Line 3210: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 3211: EXTRN __ImageBase:BYTE + Line 3212: EXTRN __isa_available:DWORD + Line 3213: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_map.cod (140 hits) + Line 265: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 266: EXTRN atexit:PROC + Line 267: EXTRN __std_terminate:PROC + Line 268: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 269: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 270: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 271: EXTRN c_atan:PROC + Line 272: EXTRN c_atan2:PROC + Line 273: EXTRN c_sqrt:PROC + Line 274: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 275: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 276: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 277: EXTRN ?BoxOnLineSide@FBoundingBox@@QEBAHPEBUline_t@@@Z:PROC ; FBoundingBox::BoxOnLineSide + Line 278: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 279: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 280: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 281: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 282: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 283: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 284: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 285: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 286: EXTRN ?P_SpawnPuff@@YAPEAVAActor@@PEAV1@PEAVPClassActor@@AEBU?$TVector3@N@@U?$TAngle@N@@3HH0@Z:PROC ; P_SpawnPuff + Line 287: EXTRN ?P_SpawnBlood@@YAXAEBU?$TVector3@N@@U?$TAngle@N@@HPEAVAActor@@@Z:PROC ; P_SpawnBlood + Line 288: EXTRN ?P_BloodSplatter@@YAXAEBU?$TVector3@N@@PEAVAActor@@U?$TAngle@N@@@Z:PROC ; P_BloodSplatter + Line 289: EXTRN ?P_RipperBlood@@YAXPEAVAActor@@0@Z:PROC ; P_RipperBlood + Line 290: EXTRN ?P_ExplodeMissile@@YAXPEAVAActor@@PEAUline_t@@0_N@Z:PROC ; P_ExplodeMissile + Line 291: EXTRN ?P_CheckFakeFloorTriggers@@YAXPEAVAActor@@N_N@Z:PROC ; P_CheckFakeFloorTriggers + Line 292: EXTRN ?P_CheckSight@@YAHPEAVAActor@@0H@Z:PROC ; P_CheckSight + Line 293: EXTRN ?P_HitWater@@YA_NPEAVAActor@@PEAUsector_t@@AEBU?$TVector3@N@@_N33@Z:PROC ; P_HitWater + Line 294: EXTRN ?P_TouchSpecialThing@@YAXPEAVAActor@@0@Z:PROC ; P_TouchSpecialThing + Line 295: EXTRN ?P_DamageMobj@@YAHPEAVAActor@@00HVFName@@HU?$TAngle@N@@@Z:PROC ; P_DamageMobj + Line 296: EXTRN ?P_PoisonMobj@@YAXPEAVAActor@@00HHHVFName@@@Z:PROC ; P_PoisonMobj + Line 297: EXTRN ?P_GiveBody@@YA_NPEAVAActor@@HH@Z:PROC ; P_GiveBody + Line 298: EXTRN ?P_Recalculate3DFloors@@YAXPEAUsector_t@@@Z:PROC ; P_Recalculate3DFloors + Line 299: EXTRN ?TriggerSectorActions@sector_t@@QEAA_NPEAVAActor@@H@Z:PROC ; sector_t::TriggerSectorActions + Line 300: EXTRN ?NextHighestCeilingAt@@YANPEAUsector_t@@NNNNHPEAPEAU1@PEAPEAUF3DFloor@@@Z:PROC ; NextHighestCeilingAt + Line 301: EXTRN ?NextLowestFloorAt@@YANPEAUsector_t@@NNNHNPEAPEAU1@PEAPEAUF3DFloor@@@Z:PROC ; NextLowestFloorAt + Line 302: EXTRN ?GetTerrain@@YAHPEBUsector_t@@H@Z:PROC ; GetTerrain + Line 303: EXTRN ?CheckPortalPlane@@YAXPEAUsector_t@@H@Z:PROC ; CheckPortalPlane + Line 304: EXTRN ?GetFriction@@YANPEBUsector_t@@HPEAN@Z:PROC ; GetFriction + Line 305: EXTRN ?HighestCeilingAt@@YANPEAUsector_t@@NNPEAPEAU1@@Z:PROC ; HighestCeilingAt + Line 306: EXTRN ?LowestFloorAt@@YANPEAUsector_t@@NNPEAPEAU1@@Z:PROC ; LowestFloorAt + Line 307: EXTRN ?P_ActivateLine@@YA_NPEAUline_t@@PEAVAActor@@HHPEAU?$TVector3@N@@@Z:PROC ; P_ActivateLine + Line 308: EXTRN ?P_PredictLine@@YA_NPEAUline_t@@PEAVAActor@@HH@Z:PROC ; P_PredictLine + Line 309: EXTRN ?FrictionToMoveFactor@@YANN@Z:PROC ; FrictionToMoveFactor + Line 310: EXTRN ?P_StartScript@@YAHPEAUFLevelLocals@@PEAVAActor@@PEAUline_t@@HPEBDPEBHHH@Z:PROC ; P_StartScript + Line 311: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 312: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 313: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 314: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 315: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 316: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 317: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 318: EXTRN ?S_GetSoundPlayingInfo@@YA_NPEBVAActor@@H@Z:PROC ; S_GetSoundPlayingInfo + Line 319: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 320: EXTRN ?GetReplacement@PClassActor@@QEAAPEAV1@_N@Z:PROC ; PClassActor::GetReplacement + Line 321: EXTRN ?P_TranslatePortalXY@@YAXPEAUline_t@@AEAN1@Z:PROC ; P_TranslatePortalXY + Line 322: EXTRN ?P_TranslatePortalVXVY@@YAXPEAUline_t@@AEAN1@Z:PROC ; P_TranslatePortalVXVY + Line 323: EXTRN ?P_TranslatePortalAngle@@YAXPEAUline_t@@AEAU?$TAngle@N@@@Z:PROC ; P_TranslatePortalAngle + Line 324: EXTRN ?P_TranslatePortalZ@@YAXPEAUline_t@@AEAN@Z:PROC ; P_TranslatePortalZ + Line 325: EXTRN ?StaticSpawn@AActor@@SAPEAV1@PEAVPClassActor@@AEBU?$TVector3@N@@W4replace_t@@_N@Z:PROC ; AActor::StaticSpawn + Line 326: EXTRN ?CallActivate@AActor@@QEAAXPEAV1@@Z:PROC ; AActor::CallActivate + Line 327: EXTRN ?CallDeactivate@AActor@@QEAAXPEAV1@@Z:PROC ; AActor::CallDeactivate + Line 328: EXTRN ?CallDie@AActor@@QEAAXPEAV1@0HVFName@@@Z:PROC ; AActor::CallDie + Line 329: EXTRN ?CallSlam@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::CallSlam + Line 330: EXTRN ?PlayBounceSound@AActor@@QEAAX_N@Z:PROC ; AActor::PlayBounceSound + Line 331: EXTRN ?FloorBounceMissile@AActor@@QEAA_NAEAUsecplane_t@@@Z:PROC ; AActor::FloorBounceMissile + Line 332: EXTRN ?SpecialMissileHit@AActor@@QEAAHPEAV1@@Z:PROC ; AActor::SpecialMissileHit + Line 333: EXTRN ?CheckLocalView@AActor@@QEBA_NH@Z:PROC ; AActor::CheckLocalView + Line 334: EXTRN ?ConversationAnimation@AActor@@QEAAXH@Z:PROC ; AActor::ConversationAnimation + Line 335: EXTRN ?CallGrind@AActor@@QEAA_N_N@Z:PROC ; AActor::CallGrind + Line 336: EXTRN ?IsFriend@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsFriend + Line 337: EXTRN ?IsHostile@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsHostile + Line 338: EXTRN ?CheckPortalTransition@AActor@@QEAAX_N@Z:PROC ; AActor::CheckPortalTransition + Line 339: EXTRN ?GetPortalTransition@AActor@@QEAA?AU?$TVector3@N@@NPEAPEAUsector_t@@@Z:PROC ; AActor::GetPortalTransition + Line 340: EXTRN ?GetSpecies@AActor@@QEAA?AVFName@@XZ:PROC ; AActor::GetSpecies + Line 341: EXTRN ?GetBloodType@AActor@@QEBAPEAVPClassActor@@H@Z:PROC ; AActor::GetBloodType + Line 342: EXTRN ?GetMissileDamage@AActor@@QEAAHHH@Z:PROC ; AActor::GetMissileDamage + Line 343: EXTRN ?IsSentient@AActor@@QEBA_NXZ:PROC ; AActor::IsSentient + Line 344: EXTRN ?CheckSectorTransition@AActor@@QEAAXPEAUsector_t@@@Z:PROC ; AActor::CheckSectorTransition + Line 345: EXTRN ?UpdateRenderSectorList@AActor@@QEAAXXZ:PROC ; AActor::UpdateRenderSectorList + Line 346: EXTRN ?LinkToWorld@AActor@@QEAAXPEAUFLinkContext@@_NPEAUsector_t@@@Z:PROC ; AActor::LinkToWorld + Line 347: EXTRN ?UnlinkFromWorld@AActor@@QEAAXPEAUFLinkContext@@@Z:PROC ; AActor::UnlinkFromWorld + Line 348: EXTRN ?AdjustFloorClip@AActor@@QEAAXXZ:PROC ; AActor::AdjustFloorClip + Line 349: EXTRN ?SetState@AActor@@QEAA_NPEAUFState@@_N@Z:PROC ; AActor::SetState + Line 350: EXTRN ?IsDangerous@FCajunMaster@@QEAA_NPEAUsector_t@@@Z:PROC ; FCajunMaster::IsDangerous + Line 351: EXTRN ?P_VanillaPointOnLineSide@@YAHNNPEBUline_t@@@Z:PROC ; P_VanillaPointOnLineSide + Line 352: EXTRN ?P_LineOpening@@YAXAEAUFLineOpening@@PEAVAActor@@PEBUline_t@@AEBU?$TVector2@N@@PEBU4@H@Z:PROC ; P_LineOpening + Line 353: EXTRN ??0FBlockLinesIterator@@QEAA@PEAUFLevelLocals@@AEBVFBoundingBox@@@Z:PROC ; FBlockLinesIterator::FBlockLinesIterator + Line 354: EXTRN ?Next@FBlockLinesIterator@@QEAAPEAUline_t@@XZ:PROC ; FBlockLinesIterator::Next + Line 355: EXTRN ??0FMultiBlockLinesIterator@@QEAA@AEAUFPortalGroupArray@@PEAVAActor@@N@Z:PROC ; FMultiBlockLinesIterator::FMultiBlockLinesIterator + Line 356: EXTRN ??0FMultiBlockLinesIterator@@QEAA@AEAUFPortalGroupArray@@PEAUFLevelLocals@@NNNNNPEAUsector_t@@@Z:PROC ; FMultiBlockLinesIterator::FMultiBlockLinesIterator + Line 357: EXTRN ?Next@FMultiBlockLinesIterator@@QEAA_NPEAUCheckResult@1@@Z:PROC ; FMultiBlockLinesIterator::Next + Line 358: EXTRN ??0FMultiBlockThingsIterator@@QEAA@AEAUFPortalGroupArray@@PEAVAActor@@N_N@Z:PROC ; FMultiBlockThingsIterator::FMultiBlockThingsIterator + Line 359: EXTRN ??0FMultiBlockThingsIterator@@QEAA@AEAUFPortalGroupArray@@PEAUFLevelLocals@@NNNNN_NPEAUsector_t@@@Z:PROC ; FMultiBlockThingsIterator::FMultiBlockThingsIterator + Line 360: EXTRN ?Next@FMultiBlockThingsIterator@@QEAA_NPEAUCheckResult@1@@Z:PROC ; FMultiBlockThingsIterator::Next + Line 361: EXTRN ?AddLineIntercepts@FPathTraverse@@MEAAXHH@Z:PROC ; FPathTraverse::AddLineIntercepts + Line 362: EXTRN ?AddThingIntercepts@FPathTraverse@@MEAAXHHAEAVFBlockThingsIterator@@_N@Z:PROC ; FPathTraverse::AddThingIntercepts + Line 363: EXTRN ?Next@FPathTraverse@@QEAAPEAUintercept_t@@XZ:PROC ; FPathTraverse::Next + Line 364: EXTRN ?init@FPathTraverse@@QEAAXNNNNHN@Z:PROC ; FPathTraverse::init + Line 365: EXTRN ?PortalRelocate@FPathTraverse@@QEAAHPEAUintercept_t@@HPEAU?$TVector3@N@@@Z:PROC ; FPathTraverse::PortalRelocate + Line 366: EXTRN ??1FPathTraverse@@UEAA@XZ:PROC ; FPathTraverse::~FPathTraverse + Line 367: EXTRN ??_EFPathTraverse@@UEAAPEAXI@Z:PROC ; FPathTraverse::`vector deleting destructor' + Line 368: EXTRN ?P_InterceptVector@@YANPEBUdivline_t@@0@Z:PROC ; P_InterceptVector + Line 369: EXTRN ?P_ExecuteSpecial@@YAHHPEAUline_t@@PEAVAActor@@_NHHHHH@Z:PROC ; P_ExecuteSpecial + Line 370: EXTRN ?P_DrawRailTrail@@YAXPEAVAActor@@AEAV?$TArray@USPortalHit@@U1@@@HHNHPEAVPClassActor@@U?$TAngle@N@@HNNH3@Z:PROC ; P_DrawRailTrail + Line 371: EXTRN ?P_DrawSplash2@@YAXPEAUFLevelLocals@@HAEBU?$TVector3@N@@U?$TAngle@N@@HH@Z:PROC ; P_DrawSplash2 + Line 372: EXTRN ?Trace@@YA_NAEBU?$TVector3@N@@PEAUsector_t@@0NV?$TFlags@W4ActorFlag@@I@@IPEAVAActor@@AEAUFTraceResults@@IP6A?AW4ETraceStatus@@4PEAX@Z5@Z:PROC ; Trace + Line 373: EXTRN ?R_ResetViewInterpolation@@YAXXZ:PROC ; R_ResetViewInterpolation + Line 374: EXTRN ?R_AddInterpolationPoint@@YAXAEBUDVector3a@@@Z:PROC ; R_AddInterpolationPoint + Line 375: EXTRN ?P_GetMidTexturePosition@@YA_NPEBUline_t@@HPEAN1@Z:PROC ; P_GetMidTexturePosition + Line 376: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 377: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 378: EXTRN ?StaticCreate@DImpactDecal@@SAPEAV1@PEAUFLevelLocals@@PEBDAEBU?$TVector3@N@@PEAUside_t@@PEAUF3DFloor@@UPalEntry@@@Z:PROC ; DImpactDecal::StaticCreate + Line 379: EXTRN ?StaticCreate@DImpactDecal@@SAPEAV1@PEAUFLevelLocals@@PEBVFDecalTemplate@@AEBU?$TVector3@N@@PEAUside_t@@PEAUF3DFloor@@UPalEntry@@@Z:PROC ; DImpactDecal::StaticCreate + Line 380: EXTRN ?P_StartConversation@@YAXPEAVAActor@@0_N1@Z:PROC ; P_StartConversation + Line 381: EXTRN ?P_GeometryLineAttack@@YAXAEAUFTraceResults@@PEAVAActor@@HVFName@@@Z:PROC ; P_GeometryLineAttack + Line 382: EXTRN ?P_GeometryRadiusAttack@@YAXPEAVAActor@@0HHVFName@@H@Z:PROC ; P_GeometryRadiusAttack + Line 383: EXTRN ?P_ProjectileHitLinedef@@YA_NPEAVAActor@@PEAUline_t@@@Z:PROC ; P_ProjectileHitLinedef + Line 384: EXTRN ?GetInfighting@FLevelLocals@@QEAAHXZ:PROC ; FLevelLocals::GetInfighting + Line 385: EXTRN ?GetPortalOffsetPosition@FLevelLocals@@QEAA?AU?$TVector2@N@@NNNN@Z:PROC ; FLevelLocals::GetPortalOffsetPosition + Line 386: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 387: EXTRN ?IsFreelookAllowed@FLevelLocals@@QEBA_NXZ:PROC ; FLevelLocals::IsFreelookAllowed + Line 388: EXTRN __CxxFrameHandler3:PROC + Line 389: EXTRN memmove:PROC + Line 390: EXTRN memset:PROC + Line 391: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 392: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 393: EXTRN ?M_Random@@3VFRandom@@A:BYTE ; M_Random + Line 394: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 395: EXTRN ?var_friction@@3VFBoolCVar@@A:BYTE ; var_friction + Line 396: EXTRN ?dmflags2@@3VFIntCVar@@A:BYTE ; dmflags2 + Line 397: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 398: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 399: EXTRN ?validcount@@3HA:DWORD ; validcount + Line 400: EXTRN ?Terrains@@3V?$TArray@UFTerrainDef@@U1@@@A:BYTE ; Terrains + Line 401: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 402: EXTRN ?pr_bounce@@3VFRandom@@A:BYTE ; pr_bounce + Line 403: EXTRN ?cl_bloodtype@@3VFIntCVar@@A:BYTE ; cl_bloodtype + Line 404: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_maputl.cod (36 hits) + Line 87: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 88: EXTRN atexit:PROC + Line 89: EXTRN __std_terminate:PROC + Line 90: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 91: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 92: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 93: EXTRN c_atan2:PROC + Line 94: EXTRN c_sqrt:PROC + Line 95: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 96: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 97: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 98: EXTRN ?P_FindFloorCeiling@@YAXPEAVAActor@@H@Z:PROC ; P_FindFloorCeiling + Line 99: EXTRN ?P_DelSeclist@@YAXPEAUmsecnode_t@@PEQsector_t@@PEAU1@@Z:PROC ; P_DelSeclist + Line 100: EXTRN ?P_CreateSecNodeList@@YAPEAUmsecnode_t@@PEAVAActor@@NPEAU1@PEQsector_t@@PEAU1@@Z:PROC ; P_CreateSecNodeList + Line 101: EXTRN ?P_LineOpening_XFloors@@YAXAEAUFLineOpening@@PEAVAActor@@PEBUline_t@@NN_N@Z:PROC ; P_LineOpening_XFloors + Line 102: EXTRN ?NextLowestFloorAt@@YANPEAUsector_t@@NNNHNPEAPEAU1@PEAPEAUF3DFloor@@@Z:PROC ; NextLowestFloorAt + Line 103: EXTRN ?GetTerrain@@YAHPEBUsector_t@@H@Z:PROC ; GetTerrain + Line 104: EXTRN ?P_VanillaPointOnLineSide@@YAHNNPEBUline_t@@@Z:PROC ; P_VanillaPointOnLineSide + Line 105: EXTRN ??_EFPathTraverse@@UEAAPEAXI@Z:PROC ; FPathTraverse::`vector deleting destructor' + Line 106: EXTRN ?P_LineOpening_3dMidtex@@YA_NPEAVAActor@@PEBUline_t@@AEAUFLineOpening@@_N@Z:PROC ; P_LineOpening_3dMidtex + Line 107: EXTRN ?Create@FBlockNode@@SAPEAU1@PEAVAActor@@HHH@Z:PROC ; FBlockNode::Create + Line 108: EXTRN ?Release@FBlockNode@@QEAAXXZ:PROC ; FBlockNode::Release + Line 109: EXTRN ?P_TranslatePortalXY@@YAXPEAUline_t@@AEAN1@Z:PROC ; P_TranslatePortalXY + Line 110: EXTRN ?P_TranslatePortalZ@@YAXPEAUline_t@@AEAN@Z:PROC ; P_TranslatePortalZ + Line 111: EXTRN ?IsOkayToAttack@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsOkayToAttack + Line 112: EXTRN ?CanSeek@AActor@@QEBA_NPEAV1@@Z:PROC ; AActor::CanSeek + Line 113: EXTRN ?UpdateRenderSectorList@AActor@@QEAAXXZ:PROC ; AActor::UpdateRenderSectorList + Line 114: EXTRN ?ClearRenderSectorList@AActor@@QEAAXXZ:PROC ; AActor::ClearRenderSectorList + Line 115: EXTRN ?ClearRenderLineList@AActor@@QEAAXXZ:PROC ; AActor::ClearRenderLineList + Line 116: EXTRN ?CollectConnectedGroups@FLevelLocals@@QEAA_NHAEBU?$TVector3@N@@NNAEAUFPortalGroupArray@@@Z:PROC ; FLevelLocals::CollectConnectedGroups + Line 117: EXTRN __CxxFrameHandler3:PROC + Line 118: EXTRN memset:PROC + Line 119: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 120: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 121: EXTRN ?validcount@@3HA:DWORD ; validcount + Line 122: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_mobj.cod (210 hits) + Line 184: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 1378: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 1379: EXTRN atexit:PROC + Line 1380: EXTRN __std_terminate:PROC + Line 1381: EXTRN atoi:PROC + Line 1382: EXTRN __stdio_common_vfprintf:PROC + Line 1383: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 1384: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 1385: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 1386: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 1387: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 1388: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 1389: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 1390: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 1391: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 1392: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 1393: EXTRN c_atan2:PROC + Line 1394: EXTRN c_sqrt:PROC + Line 1395: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 1396: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 1397: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 1398: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 1399: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 1400: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 1401: EXTRN ?StaticPointerSubstitution@DObject@@SAXPEAVAActor@@0@Z:PROC ; DObject::StaticPointerSubstitution + Line 1402: EXTRN ??0FSharedStringArena@@QEAA@XZ:PROC ; FSharedStringArena::FSharedStringArena + Line 1403: EXTRN ??1FSharedStringArena@@QEAA@XZ:PROC ; FSharedStringArena::~FSharedStringArena + Line 1404: EXTRN ?Alloc@FSharedStringArena@@QEAAPEAVFString@@PEBD@Z:PROC ; FSharedStringArena::Alloc + Line 1405: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 1406: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 1407: EXTRN ?FindFunction@PClass@@SAXPEAPEAVVMFunction@@VFName@@1@Z:PROC ; PClass::FindFunction + Line 1408: EXTRN ?P_SetupPsprites@@YAXPEAVplayer_t@@_N@Z:PROC ; P_SetupPsprites + Line 1409: EXTRN ?P_FallingDamage@@YAXPEAVAActor@@@Z:PROC ; P_FallingDamage + Line 1410: EXTRN ?P_PredictionLerpReset@@YAXXZ:PROC ; P_PredictionLerpReset + Line 1411: EXTRN ?P_CheckPosition@@YA_NPEAVAActor@@AEBU?$TVector2@N@@_N@Z:PROC ; P_CheckPosition + Line 1412: EXTRN ?P_CheckOnmobj@@YAPEAVAActor@@PEAV1@@Z:PROC ; P_CheckOnmobj + Line 1413: EXTRN ?P_TryMove@@YA_NPEAVAActor@@AEBU?$TVector2@N@@HPEBUsecplane_t@@AEAUFCheckPosition@@_N@Z:PROC ; P_TryMove + Line 1414: EXTRN ?P_SlideMove@@YAXPEAVAActor@@AEBU?$TVector2@N@@H@Z:PROC ; P_SlideMove + Line 1415: EXTRN ?P_BounceWall@@YA_NPEAVAActor@@@Z:PROC ; P_BounceWall + Line 1416: EXTRN ?P_BounceActor@@YA_NPEAVAActor@@0_N@Z:PROC ; P_BounceActor + Line 1417: EXTRN ?P_CheckSight@@YAHPEAVAActor@@0H@Z:PROC ; P_CheckSight + Line 1418: EXTRN ?P_FindFloorCeiling@@YAXPEAVAActor@@H@Z:PROC ; P_FindFloorCeiling + Line 1419: EXTRN ?P_AimLineAttack@@YA?AU?$TAngle@N@@PEAVAActor@@U1@NPEAUFTranslatedLineTarget@@1H00@Z:PROC ; P_AimLineAttack + Line 1420: EXTRN ?P_TraceBleed@@YAXHPEAVAActor@@0@Z:PROC ; P_TraceBleed + Line 1421: EXTRN ?P_GetFriction@@YANPEBVAActor@@PEAN@Z:PROC ; P_GetFriction + Line 1422: EXTRN ?P_CheckSlopeWalk@@YAPEBUsecplane_t@@PEAVAActor@@AEAU?$TVector2@N@@@Z:PROC ; P_CheckSlopeWalk + Line 1423: EXTRN ?P_DamageMobj@@YAHPEAVAActor@@00HVFName@@HU?$TAngle@N@@@Z:PROC ; P_DamageMobj + Line 1424: EXTRN ?P_PoisonPlayer@@YA_NPEAVplayer_t@@PEAVAActor@@1H@Z:PROC ; P_PoisonPlayer + Line 1425: EXTRN ?P_CheckFor3DFloorHit@@YA_NPEAVAActor@@N_N@Z:PROC ; P_CheckFor3DFloorHit + Line 1426: EXTRN ?P_CheckFor3DCeilingHit@@YA_NPEAVAActor@@N_N@Z:PROC ; P_CheckFor3DCeilingHit + Line 1427: EXTRN ?P_FindFloorPlane@@YA?AUsecplane_t@@PEAUsector_t@@AEBU?$TVector3@N@@@Z:PROC ; P_FindFloorPlane + Line 1428: EXTRN ?TriggerSectorActions@sector_t@@QEAA_NPEAVAActor@@H@Z:PROC ; sector_t::TriggerSectorActions + Line 1429: EXTRN ?GetTerrain@@YAHPEBUsector_t@@H@Z:PROC ; GetTerrain + Line 1430: EXTRN ?GetFriction@@YANPEBUsector_t@@HPEAN@Z:PROC ; GetFriction + Line 1431: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 1432: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 1433: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 1434: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 1435: EXTRN ?P_GetLineSpecialInfo@@YAPEAUFLineSpecial@@H@Z:PROC ; P_GetLineSpecialInfo + Line 1436: EXTRN ?P_ActivateThingSpecial@@YA_NPEAVAActor@@0_N@Z:PROC ; P_ActivateThingSpecial + Line 1437: EXTRN ?P_DrawSplash2@@YAXPEAUFLevelLocals@@HAEBU?$TVector3@N@@U?$TAngle@N@@HH@Z:PROC ; P_DrawSplash2 + Line 1438: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 1439: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 1440: EXTRN ?S_Sound@@YAXPEAUFLevelLocals@@AEBU?$TVector3@N@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 1441: EXTRN ?S_IsActorPlayingSomething@@YA_NPEAVAActor@@HH@Z:PROC ; S_IsActorPlayingSomething + Line 1442: EXTRN ?S_RelinkSound@@YAXPEAVAActor@@0@Z:PROC ; S_RelinkSound + Line 1443: EXTRN ?S_AreSoundsEquivalent@@YA_NPEAVAActor@@PEBD1@Z:PROC ; S_AreSoundsEquivalent + Line 1444: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 1445: EXTRN ?IsVisible@FRenderStyle@@QEBA_NN@Z:PROC ; FRenderStyle::IsVisible + Line 1446: EXTRN ?R_BuildPlayerTranslation@@YAXH@Z:PROC ; R_BuildPlayerTranslation + Line 1447: EXTRN ?R_FindCustomTranslation@@YAHVFName@@@Z:PROC ; R_FindCustomTranslation + Line 1448: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFTextureID@@PEAV2@@Z:PROC ; Serialize + Line 1449: EXTRN ?V_GetColor@@YAHPEBIPEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColor + Line 1450: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 1451: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 1452: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 1453: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 1454: EXTRN ?CallAction@FState@@QEAA_NPEAVAActor@@0PEAUFStateParamInfo@@PEAPEAU1@@Z:PROC ; FState::CallAction + Line 1455: EXTRN ?StaticGetStateName@FState@@SA?AVFString@@PEBU1@@Z:PROC ; FState::StaticGetStateName + Line 1456: EXTRN ?ApplyMobjDamageFactor@DamageTypeDefinition@@SAHHVFName@@QEBUDmgFactors@@@Z:PROC ; DamageTypeDefinition::ApplyMobjDamageFactor + Line 1457: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 1458: EXTRN ?GetReplacement@PClassActor@@QEAAPEAV1@_N@Z:PROC ; PClassActor::GetReplacement + Line 1459: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 1460: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 1461: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 1462: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 1463: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 1464: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 1465: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 1466: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 1467: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 1468: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 1469: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 1470: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 1471: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 1472: EXTRN ?G_SkillProperty@@YAHW4ESkillProperty@@@Z:PROC ; G_SkillProperty + Line 1473: EXTRN ?G_SkillProperty@@YANW4EFSkillProperty@@@Z:PROC ; G_SkillProperty + Line 1474: EXTRN ?Die@AActor@@UEAAXPEAV1@0HVFName@@@Z:PROC ; AActor::Die + Line 1475: EXTRN ?CallDie@AActor@@QEAAXPEAV1@0HVFName@@@Z:PROC ; AActor::CallDie + Line 1476: EXTRN ?SetOrigin@AActor@@UEAAXNNN_N@Z:PROC ; AActor::SetOrigin + Line 1477: EXTRN ?UpdateRenderSectorList@AActor@@QEAAXXZ:PROC ; AActor::UpdateRenderSectorList + Line 1478: EXTRN ?ClearRenderSectorList@AActor@@QEAAXXZ:PROC ; AActor::ClearRenderSectorList + Line 1479: EXTRN ?ClearRenderLineList@AActor@@QEAAXXZ:PROC ; AActor::ClearRenderLineList + Line 1480: EXTRN ?SetDynamicLights@AActor@@QEAAXXZ:PROC ; AActor::SetDynamicLights + Line 1481: EXTRN ?LinkToWorld@AActor@@QEAAXPEAUFLinkContext@@_NPEAUsector_t@@@Z:PROC ; AActor::LinkToWorld + Line 1482: EXTRN ?UnlinkFromWorld@AActor@@QEAAXPEAUFLinkContext@@@Z:PROC ; AActor::UnlinkFromWorld + Line 1483: EXTRN ?HasSpecialDeathStates@AActor@@QEBA_NXZ:PROC ; AActor::HasSpecialDeathStates + Line 1484: EXTRN ?DeleteAttachedLights@AActor@@QEAAXXZ:PROC ; AActor::DeleteAttachedLights + Line 1485: EXTRN ??_EAActor@@UEAAPEAXI@Z:PROC ; AActor::`vector deleting destructor' + Line 1486: EXTRN ?CallTryPickup@@YA_NPEAVAActor@@0PEAPEAV1@@Z:PROC ; CallTryPickup + Line 1487: EXTRN ?BotTick@FCajunMaster@@QEAAXPEAVAActor@@@Z:PROC ; FCajunMaster::BotTick + Line 1488: EXTRN ?StaticCreate@DImpactDecal@@SAPEAV1@PEAUFLevelLocals@@PEBVFDecalTemplate@@AEBU?$TVector3@N@@PEAUside_t@@PEAUF3DFloor@@UPalEntry@@@Z:PROC ; DImpactDecal::StaticCreate + Line 1489: EXTRN ?GetPlayer@DBaseStatusBar@@QEAAHXZ:PROC ; DBaseStatusBar::GetPlayer + Line 1490: EXTRN ?AttachToPlayer@DBaseStatusBar@@QEAAXPEAVplayer_t@@@Z:PROC ; DBaseStatusBar::AttachToPlayer + Line 1491: EXTRN ?StartTypedScripts@FBehaviorContainer@@QEAAXGPEAVAActor@@_NH1@Z:PROC ; FBehaviorContainer::StartTypedScripts + Line 1492: EXTRN ?StopMyScripts@FBehaviorContainer@@QEAAXPEAVAActor@@@Z:PROC ; FBehaviorContainer::StopMyScripts + Line 1493: EXTRN ?P_NoiseAlert@@YAXPEAVAActor@@0_NN@Z:PROC ; P_NoiseAlert + Line 1494: EXTRN ?A_BossDeath@@YAXPEAVAActor@@@Z:PROC ; A_BossDeath + Line 1495: EXTRN ?A_Face@@YAXPEAVAActor@@0U?$TAngle@N@@111HN@Z:PROC ; A_Face + Line 1496: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 1497: EXTRN ?R_FindSkin@@YAHPEBDH@Z:PROC ; R_FindSkin + Line 1498: EXTRN ?GetFirstSectorTag@FTagManager@@AEBAHPEBUsector_t@@@Z:PROC ; FTagManager::GetFirstSectorTag + Line 1499: EXTRN ?P_SpawnTeleportFog@@YAXPEAVAActor@@AEBU?$TVector3@N@@_N2@Z:PROC ; P_SpawnTeleportFog + Line 1500: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 1501: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 1502: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 1503: EXTRN ?Args@FSerializer@@QEAAAEAV1@PEBDPEAH1H@Z:PROC ; FSerializer::Args + Line 1504: EXTRN ?Terrain@FSerializer@@QEAAAEAV1@PEBDAEAHPEAH@Z:PROC ; FSerializer::Terrain + Line 1505: EXTRN ?Sprite@FSerializer@@QEAAAEAV1@PEBDAEAHPEAH@Z:PROC ; FSerializer::Sprite + Line 1506: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 1507: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 1508: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEACPEAC@Z:PROC ; Serialize + Line 1509: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAEPEAE@Z:PROC ; Serialize + Line 1510: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAFPEAF@Z:PROC ; Serialize + Line 1511: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAGPEAG@Z:PROC ; Serialize + Line 1512: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 1513: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 1514: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFName@@PEAV2@@Z:PROC ; Serialize + Line 1515: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFSoundID@@PEAV2@@Z:PROC ; Serialize + Line 1516: EXTRN ??$Serialize@Usector_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUsector_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 1517: EXTRN ??$Serialize@Vplayer_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAVplayer_t@@PEAPEAV1@@Z:PROC ; Serialize + Line 1518: EXTRN ??$Serialize@Uline_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUline_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 1519: EXTRN ??$Serialize@VPClassActor@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAVPClassActor@@PEAPEAV1@@Z:PROC ; Serialize + Line 1520: EXTRN ??$Serialize@UFStrifeDialogueNode@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUFStrifeDialogueNode@@PEAPEAU1@@Z:PROC ; Serialize + Line 1521: EXTRN ??$Serialize@VFString@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAVFString@@PEAPEAV1@@Z:PROC ; Serialize + Line 1522: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAUFState@@PEAPEAU2@PEA_N@Z:PROC ; Serialize + Line 1523: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEATFRenderStyle@@PEAT2@@Z:PROC ; Serialize + Line 1524: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 1525: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 1526: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 1527: EXTRN ?GetFlagName@@YAPEBDIH@Z:PROC ; GetFlagName + Line 1528: EXTRN ?PlayIdle@@YAXPEAVAActor@@@Z:PROC ; PlayIdle + Line 1529: EXTRN ?SkinNumChanged@userinfo_t@@QEAAHH@Z:PROC ; userinfo_t::SkinNumChanged + Line 1530: EXTRN ?GetSpawnClass@player_t@@QEAAHXZ:PROC ; player_t::GetSpawnClass + Line 1531: EXTRN ?P_ProjectileHitLinedef@@YA_NPEAVAActor@@PEAUline_t@@@Z:PROC ; P_ProjectileHitLinedef + Line 1532: EXTRN ?P_ProjectileHitPlane@@YA_NPEAVAActor@@H@Z:PROC ; P_ProjectileHitPlane + Line 1533: EXTRN ?GetConversation@FLevelLocals@@QEAAHH@Z:PROC ; FLevelLocals::GetConversation + Line 1534: EXTRN ?GetConversation@FLevelLocals@@QEAAHVFName@@@Z:PROC ; FLevelLocals::GetConversation + Line 1535: EXTRN ?GetPortalOffsetPosition@FLevelLocals@@QEAA?AU?$TVector2@N@@NNNN@Z:PROC ; FLevelLocals::GetPortalOffsetPosition + Line 1536: EXTRN ?PlayerReborn@FLevelLocals@@QEAAXH@Z:PROC ; FLevelLocals::PlayerReborn + Line 1537: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 1538: EXTRN ?IsFreelookAllowed@FLevelLocals@@QEBA_NXZ:PROC ; FLevelLocals::IsFreelookAllowed + Line 1539: EXTRN ?E_WorldThingSpawned@@YAXPEAVAActor@@@Z:PROC ; E_WorldThingSpawned + Line 1540: EXTRN ?E_WorldThingRevived@@YAXPEAVAActor@@@Z:PROC ; E_WorldThingRevived + Line 1541: EXTRN ?E_WorldThingDestroyed@@YAXPEAVAActor@@@Z:PROC ; E_WorldThingDestroyed + Line 1542: EXTRN ?E_PlayerRespawned@@YAXH@Z:PROC ; E_PlayerRespawned + Line 1543: EXTRN ?T_AddSpawnedThing@@YAXPEAUFLevelLocals@@PEAVAActor@@@Z:PROC ; T_AddSpawnedThing + Line 1544: EXTRN __CxxFrameHandler3:PROC + Line 1545: EXTRN memcmp:PROC + Line 1546: EXTRN memcpy:PROC + Line 1547: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 1548: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 1549: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 1550: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 1551: EXTRN ?teamplay@@3VFBoolCVar@@A:BYTE ; teamplay + Line 1552: EXTRN ?SinglePlayerClass@@3PAHA:BYTE ; SinglePlayerClass + Line 1553: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 1554: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 1555: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 1556: EXTRN ?debugfile@@3PEAU_iobuf@@EA:QWORD ; debugfile + Line 1557: EXTRN ?deh@@3UDehInfo@@A:BYTE ; deh + Line 1558: EXTRN ?dmflags@@3VFIntCVar@@A:BYTE ; dmflags + Line 1559: EXTRN ?dmflags2@@3VFIntCVar@@A:BYTE ; dmflags2 + Line 1560: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 1561: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 1562: EXTRN ?Splashes@@3V?$TArray@UFSplashDef@@U1@@@A:BYTE ; Splashes + Line 1563: EXTRN ?Terrains@@3V?$TArray@UFTerrainDef@@U1@@@A:BYTE ; Terrains + Line 1564: EXTRN ?pr_statetics@FState@@2VFRandom@@A:BYTE ; FState::pr_statetics + Line 1565: EXTRN ?DoomEdMap@@3V?$TMap@HUFDoomEdEntry@@U?$THashTraits@H@@U?$TValueTraits@UFDoomEdEntry@@@@@@A:BYTE ; DoomEdMap + Line 1566: EXTRN ?savegamerestore@@3_NA:BYTE ; savegamerestore + Line 1567: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 1568: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 1569: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 1570: EXTRN ?gameaction@@3W4gameaction_t@@A:DWORD ; gameaction + Line 1571: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 1572: EXTRN ?Skins@@3V?$TArray@VFPlayerSkin@@V1@@@A:BYTE ; Skins + Line 1573: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 1574: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 1575: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 1576: EXTRN ?PlayerClasses@@3V?$TArray@VFPlayerClass@@V1@@@A:BYTE ; PlayerClasses + Line 1577: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 1578: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 1579: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 1580: EXTRN ?cl_rockettrails@@3VFIntCVar@@A:BYTE ; cl_rockettrails + Line 1581: EXTRN ?chasedemo@@3VFBoolCVar@@A:BYTE ; chasedemo + Line 1582: EXTRN ?sv_singleplayerrespawn@@3VFBoolCVar@@A:BYTE ; sv_singleplayerrespawn + Line 1583: EXTRN ?fov@@3VFFloatCVar@@A:BYTE ; fov + Line 1584: EXTRN ?demonew@@3_NA:BYTE ; demonew + Line 1585: EXTRN __ImageBase:BYTE + Line 1586: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_openmap.cod (31 hits) + Line 40: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 41: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 42: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 43: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 44: EXTRN _Init_thread_header:PROC + Line 45: EXTRN _Init_thread_footer:PROC + Line 46: EXTRN __std_terminate:PROC + Line 47: EXTRN strncpy:PROC + Line 48: EXTRN stricmp:PROC + Line 49: EXTRN strnicmp:PROC + Line 50: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 51: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 52: EXTRN ?OpenResourceFile@FResourceFile@@SAPEAV1@PEBDAEAVFileReader@@_N2@Z:PROC ; FResourceFile::OpenResourceFile + Line 53: EXTRN ?OpenResourceFile@FResourceFile@@SAPEAV1@PEBD_N1@Z:PROC ; FResourceFile::OpenResourceFile + Line 54: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 55: EXTRN ?FileExists@@YA_NPEBD@Z:PROC ; FileExists + Line 56: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 57: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 58: EXTRN ?ReopenLumpReader@FWadCollection@@QEAA?AVFileReader@@H_N@Z:PROC ; FWadCollection::ReopenLumpReader + Line 59: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 60: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 61: EXTRN ?IsEncryptedFile@FWadCollection@@QEBA_NH@Z:PROC ; FWadCollection::IsEncryptedFile + Line 62: EXTRN ?Init@MD5Context@@QEAAXXZ:PROC ; MD5Context::Init + Line 63: EXTRN ?Update@MD5Context@@QEAAXAEAVFileReader@@I@Z:PROC ; MD5Context::Update + Line 64: EXTRN ?Final@MD5Context@@QEAAXQEAE@Z:PROC ; MD5Context::Final + Line 65: EXTRN _CxxThrowException:PROC + Line 66: EXTRN __CxxFrameHandler3:PROC + Line 67: EXTRN _Init_thread_epoch:DWORD + Line 68: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 69: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 70: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_pillar.cod (47 hits) + Line 13: EXTRN ?RegistrationInfo@DMover@@2UClassReg@@A:BYTE ; DMover::RegistrationInfo + Line 67: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 68: EXTRN __std_terminate:PROC + Line 69: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 70: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 71: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 72: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 73: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 74: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 75: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 76: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 77: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 78: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 79: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 80: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 81: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 82: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 83: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 84: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 85: EXTRN ?MoveFloor@sector_t@@QEAA?AW4EMoveResult@@NNHH_N0@Z:PROC ; sector_t::MoveFloor + Line 86: EXTRN ?MoveCeiling@sector_t@@QEAA?AW4EMoveResult@@NNHH_N@Z:PROC ; sector_t::MoveCeiling + Line 87: EXTRN ?SetInterpolation@sector_t@@QEAAPEAVDInterpolation@@H_N@Z:PROC ; sector_t::SetInterpolation + Line 88: EXTRN ?FindLowestFloorSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindLowestFloorSurrounding + Line 89: EXTRN ?FindHighestCeilingSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindHighestCeilingSurrounding + Line 90: EXTRN ?PlaneMoving@@YAHPEAUsector_t@@H@Z:PROC ; PlaneMoving + Line 91: EXTRN ?StaticType@DSectorEffect@@UEBAPEAVPClass@@XZ:PROC ; DSectorEffect::StaticType + Line 92: EXTRN ?Serialize@DSectorEffect@@UEAAXAEAVFSerializer@@@Z:PROC ; DSectorEffect::Serialize + Line 93: EXTRN ?OnDestroy@DSectorEffect@@UEAAXXZ:PROC ; DSectorEffect::OnDestroy + Line 94: EXTRN ??_EDSectorEffect@@UEAAPEAXI@Z:PROC ; DSectorEffect::`vector deleting destructor' + Line 95: EXTRN ?StaticType@DMover@@UEBAPEAVPClass@@XZ:PROC ; DMover::StaticType + Line 96: EXTRN ?Construct@DMover@@IEAAXPEAUsector_t@@@Z:PROC ; DMover::Construct + Line 97: EXTRN ?Serialize@DMover@@MEAAXAEAVFSerializer@@@Z:PROC ; DMover::Serialize + Line 98: EXTRN ?OnDestroy@DMover@@MEAAXXZ:PROC ; DMover::OnDestroy + Line 99: EXTRN ??_EDMover@@UEAAPEAXI@Z:PROC ; DMover::`vector deleting destructor' + Line 100: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 101: EXTRN ??_EDPillar@@UEAAPEAXI@Z:PROC ; DPillar::`vector deleting destructor' + Line 102: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HHW4seqtype_t@@H_N@Z:PROC ; SN_StartSequence + Line 103: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HPEBDH@Z:PROC ; SN_StartSequence + Line 104: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HVFName@@H@Z:PROC ; SN_StartSequence + Line 105: EXTRN ?SN_StopSequence@@YAXPEAUsector_t@@H@Z:PROC ; SN_StopSequence + Line 106: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 107: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 108: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 109: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 110: EXTRN ?DelRef@DInterpolation@@QEAAH_N@Z:PROC ; DInterpolation::DelRef + Line 111: EXTRN __CxxFrameHandler3:PROC + Line 112: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_plats.cod (57 hits) + Line 13: EXTRN ?RegistrationInfo@DMovingFloor@@2UClassReg@@A:BYTE ; DMovingFloor::RegistrationInfo + Line 74: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 75: EXTRN atexit:PROC + Line 76: EXTRN __std_terminate:PROC + Line 77: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 78: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 79: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 80: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 81: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 82: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 83: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 84: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 85: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 86: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HHW4seqtype_t@@H_N@Z:PROC ; SN_StartSequence + Line 87: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HPEBDH@Z:PROC ; SN_StartSequence + Line 88: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUsector_t@@HVFName@@H@Z:PROC ; SN_StartSequence + Line 89: EXTRN ?SN_StopSequence@@YAXPEAUsector_t@@H@Z:PROC ; SN_StopSequence + Line 90: EXTRN ?MoveFloor@sector_t@@QEAA?AW4EMoveResult@@NNHH_N0@Z:PROC ; sector_t::MoveFloor + Line 91: EXTRN ?FindLowestFloorSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindLowestFloorSurrounding + Line 92: EXTRN ?FindHighestFloorSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindHighestFloorSurrounding + Line 93: EXTRN ?FindNextHighestFloor@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindNextHighestFloor + Line 94: EXTRN ?FindNextLowestFloor@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindNextLowestFloor + Line 95: EXTRN ?FindLowestCeilingSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindLowestCeilingSurrounding + Line 96: EXTRN ?FindLowestCeilingPoint@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindLowestCeilingPoint + Line 97: EXTRN ?PlaneMoving@@YAHPEAUsector_t@@H@Z:PROC ; PlaneMoving + Line 98: EXTRN ?AdjustFloorClip@@YAXPEBUsector_t@@@Z:PROC ; AdjustFloorClip + Line 99: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 100: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 101: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 102: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 103: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 104: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 105: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 106: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 107: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 108: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 109: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 110: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 111: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 112: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 113: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 114: EXTRN ?StaticType@DSectorEffect@@UEBAPEAVPClass@@XZ:PROC ; DSectorEffect::StaticType + Line 115: EXTRN ?Serialize@DSectorEffect@@UEAAXAEAVFSerializer@@@Z:PROC ; DSectorEffect::Serialize + Line 116: EXTRN ?OnDestroy@DSectorEffect@@UEAAXXZ:PROC ; DSectorEffect::OnDestroy + Line 117: EXTRN ??_EDSectorEffect@@UEAAPEAXI@Z:PROC ; DSectorEffect::`vector deleting destructor' + Line 118: EXTRN ?StaticType@DMover@@UEBAPEAVPClass@@XZ:PROC ; DMover::StaticType + Line 119: EXTRN ?Serialize@DMover@@MEAAXAEAVFSerializer@@@Z:PROC ; DMover::Serialize + Line 120: EXTRN ?OnDestroy@DMover@@MEAAXXZ:PROC ; DMover::OnDestroy + Line 121: EXTRN ??_EDMover@@UEAAPEAXI@Z:PROC ; DMover::`vector deleting destructor' + Line 122: EXTRN ?StaticType@DMovingFloor@@UEBAPEAVPClass@@XZ:PROC ; DMovingFloor::StaticType + Line 123: EXTRN ?Construct@DMovingFloor@@IEAAXPEAUsector_t@@@Z:PROC ; DMovingFloor::Construct + Line 124: EXTRN ??_EDMovingFloor@@UEAAPEAXI@Z:PROC ; DMovingFloor::`vector deleting destructor' + Line 125: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 126: EXTRN ??_EDPlat@@UEAAPEAXI@Z:PROC ; DPlat::`vector deleting destructor' + Line 127: EXTRN __CxxFrameHandler3:PROC + Line 128: EXTRN __ImageBase:BYTE + Line 129: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_pspr.cod (62 hits) + Line 121: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 122: EXTRN ?StateLabels@@3UFStateLabelStorage@@A:BYTE ; StateLabels + Line 123: EXTRN ??_EStat_psprites@@UEAAPEAXI@Z:PROC ; Stat_psprites::`vector deleting destructor' + Line 124: EXTRN ?bot_observer@@3VFBoolCVar@@A:BYTE ; bot_observer + Line 683: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 684: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 685: EXTRN atexit:PROC + Line 686: EXTRN __std_terminate:PROC + Line 687: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 688: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 689: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 690: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 691: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 692: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 693: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 694: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 695: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 696: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 697: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 698: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 699: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 700: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 701: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 702: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 703: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 704: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 705: EXTRN ?FindFunction@PClass@@SAXPEAPEAVVMFunction@@VFName@@1@Z:PROC ; PClass::FindFunction + Line 706: EXTRN ?P_AimLineAttack@@YA?AU?$TAngle@N@@PEAVAActor@@U1@NPEAUFTranslatedLineTarget@@1H00@Z:PROC ; P_AimLineAttack + Line 707: EXTRN ?CheckFuzz@FRenderStyle@@QEAAXXZ:PROC ; FRenderStyle::CheckFuzz + Line 708: EXTRN ??_EDPSprite@@UEAAPEAXI@Z:PROC ; DPSprite::`vector deleting destructor' + Line 709: EXTRN ?CallAction@FState@@QEAA_NPEAVAActor@@0PEAUFStateParamInfo@@PEAPEAU1@@Z:PROC ; FState::CallAction + Line 710: EXTRN ?StaticFindStateOwner@FState@@SAPEAVPClassActor@@PEBU1@@Z:PROC ; FState::StaticFindStateOwner + Line 711: EXTRN ?StaticGetStateName@FState@@SA?AVFString@@PEBU1@@Z:PROC ; FState::StaticGetStateName + Line 712: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 713: EXTRN ?GetState@FStateLabelStorage@@QEAAPEAUFState@@HPEAVPClassActor@@_N@Z:PROC ; FStateLabelStorage::GetState + Line 714: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 715: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 716: EXTRN ?FindInventory@AActor@@QEAAPEAV1@VFName@@_N@Z:PROC ; AActor::FindInventory + Line 717: EXTRN ?Sprite@FSerializer@@QEAAAEAV1@PEBDAEAHPEAH@Z:PROC ; FSerializer::Sprite + Line 718: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 719: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 720: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 721: EXTRN ??$Serialize@Vplayer_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAVplayer_t@@PEAPEAV1@@Z:PROC ; Serialize + Line 722: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAUFState@@PEAPEAU2@PEA_N@Z:PROC ; Serialize + Line 723: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEATFRenderStyle@@PEAT2@@Z:PROC ; Serialize + Line 724: EXTRN ?IsFreelookAllowed@FLevelLocals@@QEBA_NXZ:PROC ; FLevelLocals::IsFreelookAllowed + Line 725: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 726: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 727: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 728: EXTRN __CxxFrameHandler3:PROC + Line 729: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 730: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 731: EXTRN ?State@GC@@3W4EGCState@1@A:DWORD ; GC::State + Line 732: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 733: EXTRN ?dmflags2@@3VFIntCVar@@A:BYTE ; dmflags2 + Line 734: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 735: EXTRN ?pr_statetics@FState@@2VFRandom@@A:BYTE ; FState::pr_statetics + Line 736: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 737: EXTRN ?WP_NOCHANGE@@3PEAVAActor@@EA:QWORD ; WP_NOCHANGE + Line 738: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 739: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 740: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_pusher.cod (47 hits) + Line 14: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 77: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 78: EXTRN atexit:PROC + Line 79: EXTRN __std_terminate:PROC + Line 80: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 81: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 82: EXTRN c_atan2:PROC + Line 83: EXTRN c_sqrt:PROC + Line 84: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 85: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 86: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 87: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 88: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 89: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 90: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 91: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 92: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 93: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 94: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 95: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 96: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 97: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 98: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 99: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 100: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 101: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 102: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 103: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 104: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 105: EXTRN ?IsSentient@AActor@@QEBA_NXZ:PROC ; AActor::IsSentient + Line 106: EXTRN ?SectorHasTag@FTagManager@@AEBA_NHH@Z:PROC ; FTagManager::SectorHasTag + Line 107: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 108: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 109: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 110: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 111: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 112: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 113: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 114: EXTRN ??0FMultiBlockThingsIterator@@QEAA@AEAUFPortalGroupArray@@PEAVAActor@@N_N@Z:PROC ; FMultiBlockThingsIterator::FMultiBlockThingsIterator + Line 115: EXTRN ?Next@FMultiBlockThingsIterator@@QEAA_NPEAUCheckResult@1@@Z:PROC ; FMultiBlockThingsIterator::Next + Line 116: EXTRN ?P_CheckSight@@YAHPEAVAActor@@0H@Z:PROC ; P_CheckSight + Line 117: EXTRN ??_EDPusher@@UEAAPEAXI@Z:PROC ; DPusher::`vector deleting destructor' + Line 118: EXTRN __CxxFrameHandler3:PROC + Line 119: EXTRN memcmp:PROC + Line 120: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 121: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 122: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_saveg.cod (91 hits) + Line 201: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 202: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 203: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 204: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 205: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 206: EXTRN ??_V@YAXPEAX_K@Z:PROC ; operator delete[] + Line 207: EXTRN __std_terminate:PROC + Line 208: EXTRN stricmp:PROC + Line 209: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 210: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 211: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 212: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 213: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 214: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 215: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 216: EXTRN ?DestroyAllThinkers@FThinkerCollection@@QEAAXXZ:PROC ; FThinkerCollection::DestroyAllThinkers + Line 217: EXTRN ?SerializeThinkers@FThinkerCollection@@QEAAXAEAVFSerializer@@_N@Z:PROC ; FThinkerCollection::SerializeThinkers + Line 218: EXTRN ?P_Recalculate3DFloors@@YAXPEAUsector_t@@@Z:PROC ; P_Recalculate3DFloors + Line 219: EXTRN ?R_FindSkin@@YAHPEBDH@Z:PROC ; R_FindSkin + Line 220: EXTRN ?S_SerializeSounds@@YAXAEAVFSerializer@@@Z:PROC ; S_SerializeSounds + Line 221: EXTRN ?S_ChangeMusic@@YA_NPEBDH_N1@Z:PROC ; S_ChangeMusic + Line 222: EXTRN ?S_ChangeCDMusic@@YA_NHI_N@Z:PROC ; S_ChangeCDMusic + Line 223: EXTRN ?S_GetMusic@@YAHPEAPEBD@Z:PROC ; S_GetMusic + Line 224: EXTRN ?S_FindEnvironment@@YAPEAUReverbContainer@@H@Z:PROC ; S_FindEnvironment + Line 225: EXTRN ?StaticSerializeTranslations@FRemapTable@@SAXAEAVFSerializer@@@Z:PROC ; FRemapTable::StaticSerializeTranslations + Line 226: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFTextureID@@PEAV2@@Z:PROC ; Serialize + Line 227: EXTRN ?InitPortalGroups@@YAXPEAUFLevelLocals@@@Z:PROC ; InitPortalGroups + Line 228: EXTRN ?Clear@FWeaponSlots@@QEAAXXZ:PROC ; FWeaponSlots::Clear + Line 229: EXTRN ?SetupWeaponSlots@FWeaponSlots@@SAXPEAVAActor@@@Z:PROC ; FWeaponSlots::SetupWeaponSlots + Line 230: EXTRN ??1userinfo_t@@QEAA@XZ:PROC ; userinfo_t::~userinfo_t + Line 231: EXTRN ?SkinNumChanged@userinfo_t@@QEAAHH@Z:PROC ; userinfo_t::SkinNumChanged + Line 232: EXTRN ?PlayerClassChanged@userinfo_t@@QEAAHPEBD@Z:PROC ; userinfo_t::PlayerClassChanged + Line 233: EXTRN ??1player_t@@QEAA@XZ:PROC ; player_t::~player_t + Line 234: EXTRN ??4player_t@@QEAAAEAV0@AEBV0@@Z:PROC ; player_t::operator= + Line 235: EXTRN ?Serialize@player_t@@QEAAXAEAVFSerializer@@@Z:PROC ; player_t::Serialize + Line 236: EXTRN ?SendPitchLimits@player_t@@QEBAXXZ:PROC ; player_t::SendPitchLimits + Line 237: EXTRN ?ClearInterpolations@FInterpolator@@QEAAXXZ:PROC ; FInterpolator::ClearInterpolations + Line 238: EXTRN ??0FPolyObj@@QEAA@XZ:PROC ; FPolyObj::FPolyObj + Line 239: EXTRN ?MovePolyobj@FPolyObj@@QEAA_NAEBU?$TVector2@N@@_N@Z:PROC ; FPolyObj::MovePolyobj + Line 240: EXTRN ?RotatePolyobj@FPolyObj@@QEAA_NU?$TAngle@N@@_N@Z:PROC ; FPolyObj::RotatePolyobj + Line 241: EXTRN ?SerializeModuleStates@FBehaviorContainer@@QEAAXAEAVFSerializer@@@Z:PROC ; FBehaviorContainer::SerializeModuleStates + Line 242: EXTRN ?SerializeMessages@DBaseStatusBar@@QEAAXAEAVFSerializer@@@Z:PROC ; DBaseStatusBar::SerializeMessages + Line 243: EXTRN ?InitSkyMap@@YAXPEAUFLevelLocals@@@Z:PROC ; InitSkyMap + Line 244: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 245: EXTRN ?ReadObjects@FSerializer@@QEAAX_N@Z:PROC ; FSerializer::ReadObjects + Line 246: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 247: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 248: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 249: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 250: EXTRN ?GetSize@FSerializer@@QEAAIPEBD@Z:PROC ; FSerializer::GetSize + Line 251: EXTRN ?Args@FSerializer@@QEAAAEAV1@PEBDPEAH1H@Z:PROC ; FSerializer::Args + Line 252: EXTRN ?Terrain@FSerializer@@QEAAAEAV1@PEBDAEAHPEAH@Z:PROC ; FSerializer::Terrain + Line 253: EXTRN ?StringPtr@FSerializer@@QEAAAEAV1@PEBDAEAPEBD@Z:PROC ; FSerializer::StringPtr + Line 254: EXTRN ?canSkip@FSerializer@@QEBA_NXZ:PROC ; FSerializer::canSkip + Line 255: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 256: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 257: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 258: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEACPEAC@Z:PROC ; Serialize + Line 259: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAEPEAE@Z:PROC ; Serialize + Line 260: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAFPEAF@Z:PROC ; Serialize + Line 261: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAGPEAG@Z:PROC ; Serialize + Line 262: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 263: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAMPEAM@Z:PROC ; Serialize + Line 264: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 265: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFName@@PEAV2@@Z:PROC ; Serialize + Line 266: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAUFInterpolator@@PEAU2@@Z:PROC ; Serialize + Line 267: EXTRN ??$Serialize@Usector_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUsector_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 268: EXTRN ??$Serialize@Uline_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUline_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 269: EXTRN ?P_SerializeHealthGroups@@YAXPEAUFLevelLocals@@AEAVFSerializer@@@Z:PROC ; P_SerializeHealthGroups + Line 270: EXTRN ?Serialize@FCanvasTextureInfo@@QEAAXAEAVFSerializer@@@Z:PROC ; FCanvasTextureInfo::Serialize + Line 271: EXTRN ?SetMusicVolume@FLevelLocals@@QEAAXM@Z:PROC ; FLevelLocals::SetMusicVolume + Line 272: EXTRN ?SetCompatLineOnSide@FLevelLocals@@QEAAX_N@Z:PROC ; FLevelLocals::SetCompatLineOnSide + Line 273: EXTRN ?FinalizePortals@FLevelLocals@@QEAAXXZ:PROC ; FLevelLocals::FinalizePortals + Line 274: EXTRN ?SpawnPlayer@FLevelLocals@@QEAAPEAVAActor@@PEAUFPlayerStart@@HH@Z:PROC ; FLevelLocals::SpawnPlayer + Line 275: EXTRN ?AirControlChanged@FLevelLocals@@QEAAXXZ:PROC ; FLevelLocals::AirControlChanged + Line 276: EXTRN ?RecreateAllAttachedLights@FLevelLocals@@QEAAXXZ:PROC ; FLevelLocals::RecreateAllAttachedLights + Line 277: EXTRN ?E_SerializeEvents@@YAXAEAVFSerializer@@@Z:PROC ; E_SerializeEvents + Line 278: EXTRN __CxxFrameHandler3:PROC + Line 279: EXTRN memcmp:PROC + Line 280: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 281: EXTRN ?Skins@@3V?$TArray@VFPlayerSkin@@V1@@@A:BYTE ; Skins + Line 282: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 283: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 284: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 285: EXTRN ?SaveVersion@@3HA:DWORD ; SaveVersion + Line 286: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 287: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 288: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 289: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 290: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 291: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_scroll.cod (47 hits) + Line 13: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 74: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 75: EXTRN __std_terminate:PROC + Line 76: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 77: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 78: EXTRN c_atan2:PROC + Line 79: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 80: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 81: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 82: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 83: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 84: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 85: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 86: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 87: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 88: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 89: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 90: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 91: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 92: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 93: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 94: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 95: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 96: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 97: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 98: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 99: EXTRN ?SetInterpolation@sector_t@@QEAAPEAVDInterpolation@@H_N@Z:PROC ; sector_t::SetInterpolation + Line 100: EXTRN ?SetInterpolation@side_t@@QEAAPEAVDInterpolation@@H@Z:PROC ; side_t::SetInterpolation + Line 101: EXTRN ?SectorHasTag@FTagManager@@AEBA_NPEBUsector_t@@H@Z:PROC ; FTagManager::SectorHasTag + Line 102: EXTRN ?LineHasID@FTagManager@@AEBA_NPEBUline_t@@H@Z:PROC ; FTagManager::LineHasID + Line 103: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 104: EXTRN ?Next@FLineIdIterator@@QEAAHXZ:PROC ; FLineIdIterator::Next + Line 105: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 106: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 107: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 108: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 109: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 110: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 111: EXTRN ??$Serialize@Usector_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUsector_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 112: EXTRN ??$Serialize@Uside_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUside_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 113: EXTRN ?DelRef@DInterpolation@@QEAAH_N@Z:PROC ; DInterpolation::DelRef + Line 114: EXTRN ?AddScroller@FLevelLocals@@QEAAXH@Z:PROC ; FLevelLocals::AddScroller + Line 115: EXTRN ??_EDScroller@@UEAAPEAXI@Z:PROC ; DScroller::`vector deleting destructor' + Line 116: EXTRN __CxxFrameHandler3:PROC + Line 117: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 118: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 119: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_secnodes.cod (11 hits) + Line 41: EXTRN atexit:PROC + Line 42: EXTRN ?BoxOnLineSide@FBoundingBox@@QEBAHPEBUline_t@@@Z:PROC ; FBoundingBox::BoxOnLineSide + Line 43: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 44: EXTRN ??0FMemArena@@QEAA@_K@Z:PROC ; FMemArena::FMemArena + Line 45: EXTRN ??1FMemArena@@QEAA@XZ:PROC ; FMemArena::~FMemArena + Line 46: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 47: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 48: EXTRN ??0FBlockLinesIterator@@QEAA@PEAUFLevelLocals@@AEBVFBoundingBox@@@Z:PROC ; FBlockLinesIterator::FBlockLinesIterator + Line 49: EXTRN ?Next@FBlockLinesIterator@@QEAAPEAUline_t@@XZ:PROC ; FBlockLinesIterator::Next + Line 50: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 51: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_sectors.cod (46 hits) + Line 122: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 123: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 124: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 125: EXTRN atexit:PROC + Line 126: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 127: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 128: EXTRN c_atan2:PROC + Line 129: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 130: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 131: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 132: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 133: EXTRN ?P_RecalculateAttachedLights@@YAXPEAUsector_t@@@Z:PROC ; P_RecalculateAttachedLights + Line 134: EXTRN ?IsLinked@sector_t@@QEBA_NPEAU1@_N@Z:PROC ; sector_t::IsLinked + Line 135: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 136: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 137: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 138: EXTRN ??0FNodeBuilder@@QEAA@AEAUFLevel@0@@Z:PROC ; FNodeBuilder::FNodeBuilder + Line 139: EXTRN ??1FNodeBuilder@@QEAA@XZ:PROC ; FNodeBuilder::~FNodeBuilder + Line 140: EXTRN ?Clear@FNodeBuilder@@QEAAXXZ:PROC ; FNodeBuilder::Clear + Line 141: EXTRN ?AddPolySegs@FNodeBuilder@@QEAAXPEAUFPolySeg@@H@Z:PROC ; FNodeBuilder::AddPolySegs + Line 142: EXTRN ?AddSegs@FNodeBuilder@@QEAAXPEAUseg_t@@H@Z:PROC ; FNodeBuilder::AddSegs + Line 143: EXTRN ?BuildMini@FNodeBuilder@@QEAAX_N@Z:PROC ; FNodeBuilder::BuildMini + Line 144: EXTRN ?ExtractMini@FNodeBuilder@@QEAAXPEAUFMiniBSP@@@Z:PROC ; FNodeBuilder::ExtractMini + Line 145: EXTRN ?GetGlowColor@FTexture@@QEAAXPEAM@Z:PROC ; FTexture::GetGlowColor + Line 146: EXTRN ?GetTextureID@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::GetTextureID + Line 147: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 148: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 149: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 150: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAFPEAF@Z:PROC ; Serialize + Line 151: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFName@@PEAV2@@Z:PROC ; Serialize + Line 152: EXTRN ?AdjustFloorClip@AActor@@QEAAXXZ:PROC ; AActor::AdjustFloorClip + Line 153: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 154: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 155: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 156: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 157: EXTRN __CxxFrameHandler3:PROC + Line 158: EXTRN atan:PROC + Line 159: EXTRN memmove:PROC + Line 160: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 161: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 162: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 163: EXTRN ?DefaultTerrainType@@3GA:WORD ; DefaultTerrainType + Line 164: EXTRN ?TerrainTypes@@3VFTerrainTypeArray@@A:BYTE ; TerrainTypes + Line 165: EXTRN ?Terrains@@3V?$TArray@UFTerrainDef@@U1@@@A:BYTE ; Terrains + Line 166: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 167: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_setup.cod (87 hits) + Line 11: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 71: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 72: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 73: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 74: EXTRN ??_V@YAXPEAX_K@Z:PROC ; operator delete[] + Line 75: EXTRN atexit:PROC + Line 76: EXTRN __std_terminate:PROC + Line 77: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 78: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 79: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 80: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 81: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 82: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 83: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 84: EXTRN ??HFTextureID@@QEAA?AV0@H@Z:PROC ; FTextureID::operator+ + Line 85: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 86: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 87: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 88: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 89: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 90: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 91: EXTRN ?DestroyThinkers@FThinkerList@@QEAAXXZ:PROC ; FThinkerList::DestroyThinkers + Line 92: EXTRN ?DestroyAllThinkers@FThinkerCollection@@QEAAXXZ:PROC ; FThinkerCollection::DestroyAllThinkers + Line 93: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 94: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 95: EXTRN ?S_Start@@YAXXZ:PROC ; S_Start + Line 96: EXTRN ?S_PrecacheLevel@@YAXPEAUFLevelLocals@@@Z:PROC ; S_PrecacheLevel + Line 97: EXTRN ??1FRemapTable@@QEAA@XZ:PROC ; FRemapTable::~FRemapTable + Line 98: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 99: EXTRN ?FindSwitch@FTextureManager@@QEAAPEAUFSwitchDef@@VFTextureID@@@Z:PROC ; FTextureManager::FindSwitch + Line 100: EXTRN ?FindAnimatedDoor@FTextureManager@@QEAAPEAUFDoorAnimation@@VFTextureID@@@Z:PROC ; FTextureManager::FindAnimatedDoor + Line 101: EXTRN ?ClearCounters@AActor@@QEAAXXZ:PROC ; AActor::ClearCounters + Line 102: EXTRN ?P_ClearParticles@@YAXPEAUFLevelLocals@@@Z:PROC ; P_ClearParticles + Line 103: EXTRN ?P_InitEffects@@YAXXZ:PROC ; P_InitEffects + Line 104: EXTRN ?P_InitTerrainTypes@@YAXXZ:PROC ; P_InitTerrainTypes + Line 105: EXTRN ?C_MidPrint@@YAXPEAVFFont@@PEBD@Z:PROC ; C_MidPrint + Line 106: EXTRN ?UnloadModules@FBehaviorContainer@@QEAAXXZ:PROC ; FBehaviorContainer::UnloadModules + Line 107: EXTRN ?AnnounceGameStart@@YA_NXZ:PROC ; AnnounceGameStart + Line 108: EXTRN ??1FStrifeDialogueNode@@QEAA@XZ:PROC ; FStrifeDialogueNode::~FStrifeDialogueNode + Line 109: EXTRN ?P_InitKeyMessages@@YAXXZ:PROC ; P_InitKeyMessages + Line 110: EXTRN ?SN_StopAllSequences@@YAXPEAUFLevelLocals@@@Z:PROC ; SN_StopAllSequences + Line 111: EXTRN ?ST_Clear@@YAXXZ:PROC ; ST_Clear + Line 112: EXTRN ?GetChecksum@MapData@@QEAAXQEAE@Z:PROC ; MapData::GetChecksum + Line 113: EXTRN ?P_OpenMapData@@YAPEAUMapData@@PEBD_N@Z:PROC ; P_OpenMapData + Line 114: EXTRN ?ClearInterpolations@FInterpolator@@QEAAXXZ:PROC ; FInterpolator::ClearInterpolations + Line 115: EXTRN ?R_InitSprites@@YAXXZ:PROC ; R_InitSprites + Line 116: EXTRN ?R_FreePastViewers@@YAXXZ:PROC ; R_FreePastViewers + Line 117: EXTRN ?EmptyList@FCanvasTextureInfo@@QEAAXXZ:PROC ; FCanvasTextureInfo::EmptyList + Line 118: EXTRN ?SetMusicVolume@FLevelLocals@@QEAAXM@Z:PROC ; FLevelLocals::SetMusicVolume + Line 119: EXTRN ?ClearAllSubsectorLinks@FLevelLocals@@QEAAXXZ:PROC ; FLevelLocals::ClearAllSubsectorLinks + Line 120: EXTRN ?SetCompatLineOnSide@FLevelLocals@@QEAAX_N@Z:PROC ; FLevelLocals::SetCompatLineOnSide + Line 121: EXTRN ?SpawnPlayer@FLevelLocals@@QEAAPEAVAActor@@PEAUFPlayerStart@@HH@Z:PROC ; FLevelLocals::SpawnPlayer + Line 122: EXTRN ?StartLightning@FLevelLocals@@QEAAXXZ:PROC ; FLevelLocals::StartLightning + Line 123: EXTRN ?DeathMatchSpawnPlayer@FLevelLocals@@QEAAXH@Z:PROC ; FLevelLocals::DeathMatchSpawnPlayer + Line 124: EXTRN ?PickPlayerStart@FLevelLocals@@QEAAPEAUFPlayerStart@@HH@Z:PROC ; FLevelLocals::PickPlayerStart + Line 125: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 126: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 127: EXTRN ?E_InitStaticHandlers@@YAX_N@Z:PROC ; E_InitStaticHandlers + Line 128: EXTRN ?E_Shutdown@@YAX_N@Z:PROC ; E_Shutdown + Line 129: EXTRN ?E_NewGame@@YAXW4EventHandlerType@@@Z:PROC ; E_NewGame + Line 130: EXTRN ?I_msTimeFS@@YA_KXZ:PROC ; I_msTimeFS + Line 131: EXTRN ?LoadLevel@MapLoader@@QEAAXPEAUMapData@@PEBDH@Z:PROC ; MapLoader::LoadLevel + Line 132: EXTRN ?AM_Create@@YAPEAVDAutomapBase@@PEAUFLevelLocals@@@Z:PROC ; AM_Create + Line 133: EXTRN ?T_PreprocessScripts@@YAXPEAUFLevelLocals@@@Z:PROC ; T_PreprocessScripts + Line 134: EXTRN ?hw_PrecacheTexture@@YAXPEAEAEAV?$TMap@PEAVPClassActor@@_NU?$THashTraits@PEAVPClassActor@@@@U?$TValueTraits@_N@@@@@Z:PROC ; hw_PrecacheTexture + Line 135: EXTRN __CxxFrameHandler3:PROC + Line 136: EXTRN memcpy:PROC + Line 137: EXTRN memset:PROC + Line 138: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 139: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 140: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 141: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 142: EXTRN ?precache@@3_NA:BYTE ; precache + Line 143: EXTRN ?dmflags2@@3VFIntCVar@@A:BYTE ; dmflags2 + Line 144: EXTRN ?translationtables@@3PAV?$TAutoGrowArray@VFRemapTablePtr@@PEAUFRemapTable@@@@A:BYTE ; translationtables + Line 145: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 146: EXTRN ?savegamerestore@@3_NA:BYTE ; savegamerestore + Line 147: EXTRN ?vid_rendermode@@3VFIntCVar@@A:BYTE ; vid_rendermode + Line 148: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 149: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 150: EXTRN ?wminfo@@3Uwbstartstruct_t@@A:BYTE ; wminfo + Line 151: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 152: EXTRN ?SWRenderer@@3PEAUFRenderer@@EA:QWORD ; SWRenderer + Line 153: EXTRN ?R_OldBlend@@3IA:DWORD ; R_OldBlend + Line 154: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 155: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 156: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_sight.cod (25 hits) + Line 14: EXTRN ??_EStat_sight@@UEAAPEAXI@Z:PROC ; Stat_sight::`vector deleting destructor' + Line 57: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 58: EXTRN atexit:PROC + Line 59: EXTRN __std_terminate:PROC + Line 60: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 61: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 62: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 63: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 64: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 65: EXTRN c_sqrt:PROC + Line 66: EXTRN ?P_InterceptVector@@YANPEBUdivline_t@@0@Z:PROC ; P_InterceptVector + Line 67: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 68: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 69: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 70: EXTRN ?IsVisible@FRenderStyle@@QEBA_NN@Z:PROC ; FRenderStyle::IsVisible + Line 71: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 72: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 73: EXTRN ?GetPortalTransition@AActor@@QEAA?AU?$TVector3@N@@NPEAPEAUsector_t@@@Z:PROC ; AActor::GetPortalTransition + Line 74: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 75: EXTRN __CxxFrameHandler3:PROC + Line 76: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 77: EXTRN ?validcount@@3HA:DWORD ; validcount + Line 78: EXTRN ?PerfToSec@@3NA:QWORD ; PerfToSec + Line 79: EXTRN ?PerfToMillisec@@3NA:QWORD ; PerfToMillisec + Line 80: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_slopes.cod (18 hits) + Line 37: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 38: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 39: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 40: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 41: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 42: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 43: EXTRN c_sqrt:PROC + Line 44: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 45: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 46: EXTRN ?P_PointInSubsector@@YAPEAUsubsector_t@@NN@Z:PROC ; P_PointInSubsector + Line 47: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 48: EXTRN ?Next@FLineIdIterator@@QEAAHXZ:PROC ; FLineIdIterator::Next + Line 49: EXTRN __CxxFrameHandler3:PROC + Line 50: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 51: EXTRN ?ib_compatflags@@3HA:DWORD ; ib_compatflags + Line 52: EXTRN ?tagManager@@3VFTagManager@@A:BYTE ; tagManager + Line 53: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 54: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_spec.cod (78 hits) + Line 31: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 192: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 193: EXTRN atexit:PROC + Line 194: EXTRN __std_terminate:PROC + Line 195: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 196: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 197: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 198: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 199: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 200: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 201: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 202: EXTRN ?FindClusterInfo@@YAPEAUcluster_info_t@@H@Z:PROC ; FindClusterInfo + Line 203: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 204: EXTRN ??AFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator[] + Line 205: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 206: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 207: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 208: EXTRN ?LowestFloorAt@@YANPEAUsector_t@@NNPEAPEAU1@@Z:PROC ; LowestFloorAt + Line 209: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 210: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 211: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAEPEAE@Z:PROC ; Serialize + Line 212: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAFPEAF@Z:PROC ; Serialize + Line 213: EXTRN ??$Serialize@Usector_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUsector_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 214: EXTRN ?E_WorldLinePreActivated@@YAXPEAUline_t@@PEAVAActor@@HPEA_N@Z:PROC ; E_WorldLinePreActivated + Line 215: EXTRN ?E_WorldLineActivated@@YAXPEAUline_t@@PEAVAActor@@H@Z:PROC ; E_WorldLineActivated + Line 216: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 217: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 218: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 219: EXTRN ?P_HitWater@@YA_NPEAVAActor@@PEAUsector_t@@AEBU?$TVector3@N@@_N33@Z:PROC ; P_HitWater + Line 220: EXTRN ?P_DamageMobj@@YAHPEAVAActor@@00HVFName@@HU?$TAngle@N@@@Z:PROC ; P_DamageMobj + Line 221: EXTRN ?P_GiveBody@@YA_NPEAVAActor@@HH@Z:PROC ; P_GiveBody + Line 222: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 223: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 224: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 225: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 226: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 227: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 228: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 229: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 230: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 231: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 232: EXTRN ?LineHasID@FTagManager@@AEBA_NPEBUline_t@@H@Z:PROC ; FTagManager::LineHasID + Line 233: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 234: EXTRN ?Next@FLineIdIterator@@QEAAHXZ:PROC ; FLineIdIterator::Next + Line 235: EXTRN ?P_ChangeSwitchTexture@@YA_NPEAUside_t@@HEPEA_N@Z:PROC ; P_ChangeSwitchTexture + Line 236: EXTRN ?P_CheckSwitchRange@@YA_NPEAVAActor@@PEAUline_t@@HPEBU?$TVector3@N@@@Z:PROC ; P_CheckSwitchRange + Line 237: EXTRN ?P_ExecuteSpecial@@YAHHPEAUline_t@@PEAVAActor@@_NHHHHH@Z:PROC ; P_ExecuteSpecial + Line 238: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 239: EXTRN ?S_Sound@@YAXHVFSoundID@@MM@Z:PROC ; S_Sound + Line 240: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 241: EXTRN ?CheckLocalView@AActor@@QEBA_NH@Z:PROC ; AActor::CheckLocalView + Line 242: EXTRN ?FindInventory@AActor@@QEAAPEAV1@PEAVPClassActor@@_N@Z:PROC ; AActor::FindInventory + Line 243: EXTRN ?P_CheckKeys@@YAHPEAVAActor@@H_N1@Z:PROC ; P_CheckKeys + Line 244: EXTRN ?ExitLevel@FLevelLocals@@QEAAXH_N@Z:PROC ; FLevelLocals::ExitLevel + Line 245: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 246: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 247: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 248: EXTRN ?C_MidPrint@@YAXPEAVFFont@@PEBD@Z:PROC ; C_MidPrint + Line 249: EXTRN ??_EDLightTransfer@@UEAAPEAXI@Z:PROC ; DLightTransfer::`vector deleting destructor' + Line 250: EXTRN ??_EDWallLightTransfer@@UEAAPEAXI@Z:PROC ; DWallLightTransfer::`vector deleting destructor' + Line 251: EXTRN __CxxFrameHandler3:PROC + Line 252: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 253: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 254: EXTRN ?alwaysapplydmflags@@3VFBoolCVar@@A:BYTE ; alwaysapplydmflags + Line 255: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 256: EXTRN ?developer@@3VFIntCVar@@A:BYTE ; developer + Line 257: EXTRN ?dmflags@@3VFIntCVar@@A:BYTE ; dmflags + Line 258: EXTRN ?dmflags2@@3VFIntCVar@@A:BYTE ; dmflags2 + Line 259: EXTRN ?gameaction@@3W4gameaction_t@@A:DWORD ; gameaction + Line 260: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 261: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 262: EXTRN ?Splashes@@3V?$TArray@UFSplashDef@@U1@@@A:BYTE ; Splashes + Line 263: EXTRN ?Terrains@@3V?$TArray@UFTerrainDef@@U1@@@A:BYTE ; Terrains + Line 264: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 265: EXTRN ?cl_predict_specials@@3VFBoolCVar@@A:BYTE ; cl_predict_specials + Line 266: EXTRN ?timelimit@@3VFFloatCVar@@A:BYTE ; timelimit + Line 267: EXTRN __ImageBase:BYTE + Line 268: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_states.cod (47 hits) + Line 57: EXTRN ?SpriteFrames@@3V?$TArray@Uspriteframe_t@@U1@@@A:BYTE ; SpriteFrames + Line 58: EXTRN ?Skins@@3V?$TArray@VFPlayerSkin@@V1@@@A:BYTE ; Skins + Line 59: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 346: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 347: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 348: EXTRN atexit:PROC + Line 349: EXTRN _Init_thread_header:PROC + Line 350: EXTRN _Init_thread_abort:PROC + Line 351: EXTRN _Init_thread_footer:PROC + Line 352: EXTRN __std_terminate:PROC + Line 353: EXTRN qsort:PROC + Line 354: EXTRN strtoll:PROC + Line 355: EXTRN strchr:PROC + Line 356: EXTRN strstr:PROC + Line 357: EXTRN strtok:PROC + Line 358: EXTRN stricmp:PROC + Line 359: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 360: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 361: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 362: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 363: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 364: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 365: EXTRN ??HFString@@QEBA?AV0@PEBD@Z:PROC ; FString::operator+ + Line 366: EXTRN ??HFString@@QEBA?AV0@D@Z:PROC ; FString::operator+ + Line 367: EXTRN ??0FStringf@@QEAA@PEBDZZ:PROC ; FStringf::FStringf + Line 368: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 369: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 370: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 371: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 372: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 373: EXTRN ??0FScriptPosition@@QEAA@AEBU0@@Z:PROC ; FScriptPosition::FScriptPosition + Line 374: EXTRN ?copystring@@YAPEADPEBD@Z:PROC ; copystring + Line 375: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 376: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 377: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 378: EXTRN ?SaveStateSourceLines@@YAXPEAUFState@@AEAV?$TArray@UFScriptPosition@@U1@@@@Z:PROC ; SaveStateSourceLines + Line 379: EXTRN __CxxFrameHandler3:PROC + Line 380: EXTRN memcpy:PROC + Line 381: EXTRN memmove:PROC + Line 382: EXTRN _Init_thread_epoch:DWORD + Line 383: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 384: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 385: EXTRN ?ClassDataAllocator@@3VFMemArena@@A:BYTE ; ClassDataAllocator + Line 386: EXTRN ?AllActorClasses@PClassActor@@2V?$TArray@PEAVPClassActor@@PEAV1@@@A:BYTE ; PClassActor::AllActorClasses + Line 387: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 388: EXTRN _fltused:DWORD + Line 389: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_switch.cod (52 hits) + Line 13: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 70: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 71: EXTRN atexit:PROC + Line 72: EXTRN __std_terminate:PROC + Line 73: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 74: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 75: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 76: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 77: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 78: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 79: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 80: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 81: EXTRN ?P_GetMidTexturePosition@@YA_NPEBUline_t@@HPEAN1@Z:PROC ; P_GetMidTexturePosition + Line 82: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 83: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 84: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 85: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 86: EXTRN ?S_Sound@@YAXPEAUFLevelLocals@@AEBU?$TVector3@N@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 87: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 88: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 89: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 90: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 91: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 92: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 93: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEACPEAC@Z:PROC ; Serialize + Line 94: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 95: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFTextureID@@PEAV2@@Z:PROC ; Serialize + Line 96: EXTRN ??$Serialize@Uside_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUside_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 97: EXTRN ?P_LineOpening@@YAXAEAUFLineOpening@@PEAVAActor@@PEBUline_t@@AEBU?$TVector2@N@@PEBU4@H@Z:PROC ; P_LineOpening + Line 98: EXTRN ?P_InterceptVector@@YANPEBUdivline_t@@0@Z:PROC ; P_InterceptVector + Line 99: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 100: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 101: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 102: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 103: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 104: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 105: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 106: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 107: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 108: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 109: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 110: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 111: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 112: EXTRN ?FindSwitch@FTextureManager@@QEAAPEAUFSwitchDef@@VFTextureID@@@Z:PROC ; FTextureManager::FindSwitch + Line 113: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 114: EXTRN ??_EDActiveButton@@UEAAPEAXI@Z:PROC ; DActiveButton::`vector deleting destructor' + Line 115: EXTRN __CxxFrameHandler3:PROC + Line 116: EXTRN memcmp:PROC + Line 117: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 118: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 119: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 120: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_tags.cod (7 hits) + Line 37: EXTRN atexit:PROC + Line 38: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 39: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 40: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 41: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 42: EXTRN memset:PROC + Line 43: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_teleport.cod (33 hits) + Line 92: EXTRN atexit:PROC + Line 93: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 94: EXTRN c_atan2:PROC + Line 95: EXTRN c_sqrt:PROC + Line 96: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 97: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 98: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 99: EXTRN ?P_TeleportMove@@YA_NPEAVAActor@@AEBU?$TVector3@N@@_N2@Z:PROC ; P_TeleportMove + Line 100: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 101: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 102: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 103: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 104: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 105: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 106: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 107: EXTRN ?StaticSpawn@AActor@@SAPEAV1@PEAVPClassActor@@AEBU?$TVector3@N@@W4replace_t@@_N@Z:PROC ; AActor::StaticSpawn + Line 108: EXTRN ?PlayIdle@@YAXPEAVAActor@@@Z:PROC ; PlayIdle + Line 109: EXTRN ?R_ResetViewInterpolation@@YAXXZ:PROC ; R_ResetViewInterpolation + Line 110: EXTRN ?SectorHasTag@FTagManager@@AEBA_NPEBUsector_t@@H@Z:PROC ; FTagManager::SectorHasTag + Line 111: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 112: EXTRN ?Next@FLineIdIterator@@QEAAHXZ:PROC ; FLineIdIterator::Next + Line 113: EXTRN ?GetPortalOffsetPosition@FLevelLocals@@QEAA?AU?$TVector2@N@@NNNN@Z:PROC ; FLevelLocals::GetPortalOffsetPosition + Line 114: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 115: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 116: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 117: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 118: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 119: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 120: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 121: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 122: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 123: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 124: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_terrain.cod (31 hits) + Line 408: EXTRN atexit:PROC + Line 409: EXTRN __std_terminate:PROC + Line 410: EXTRN stricmp:PROC + Line 411: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 412: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 413: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 414: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 415: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 416: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 417: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 418: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 419: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 420: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 421: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 422: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 423: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 424: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 425: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 426: EXTRN ?MustMatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MustMatchString + Line 427: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 428: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 429: EXTRN __CxxFrameHandler3:PROC + Line 430: EXTRN memset:PROC + Line 431: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 432: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 433: EXTRN ?GameNames@@3PAPEBDA:BYTE ; GameNames + Line 434: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 435: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 436: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 437: EXTRN __ImageBase:BYTE + Line 438: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_things.cod (71 hits) + Line 140: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 141: EXTRN atexit:PROC + Line 142: EXTRN __std_terminate:PROC + Line 143: EXTRN qsort:PROC + Line 144: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 145: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 146: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 147: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 148: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 149: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 150: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 151: EXTRN c_asin:PROC + Line 152: EXTRN c_acos:PROC + Line 153: EXTRN c_atan2:PROC + Line 154: EXTRN c_sqrt:PROC + Line 155: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 156: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 157: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 158: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 159: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 160: EXTRN ?P_CanResurrect@@YA_NPEAVAActor@@0@Z:PROC ; P_CanResurrect + Line 161: EXTRN ?P_TestMobjLocation@@YAHPEAVAActor@@@Z:PROC ; P_TestMobjLocation + Line 162: EXTRN ?P_CheckPosition@@YA_NPEAVAActor@@AEBU?$TVector2@N@@_N@Z:PROC ; P_CheckPosition + Line 163: EXTRN ?P_TryMove@@YA_NPEAVAActor@@AEBU?$TVector2@N@@HPEBUsecplane_t@@_N@Z:PROC ; P_TryMove + Line 164: EXTRN ?P_CheckSight@@YAHPEAVAActor@@0H@Z:PROC ; P_CheckSight + Line 165: EXTRN ?P_CheckMissileSpawn@@YA_NPEAVAActor@@N@Z:PROC ; P_CheckMissileSpawn + Line 166: EXTRN ?P_PlaySpawnSound@@YAXPEAVAActor@@0@Z:PROC ; P_PlaySpawnSound + Line 167: EXTRN ?P_DamageMobj@@YAHPEAVAActor@@00HVFName@@HU?$TAngle@N@@@Z:PROC ; P_DamageMobj + Line 168: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 169: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 170: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 171: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 172: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 173: EXTRN ?GetReplacement@PClassActor@@QEAAPEAV1@_N@Z:PROC ; PClassActor::GetReplacement + Line 174: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 175: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 176: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 177: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 178: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 179: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 180: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 181: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 182: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 183: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 184: EXTRN ?ParseOpenBrace@FMapInfoParser@@QEAAXXZ:PROC ; FMapInfoParser::ParseOpenBrace + Line 185: EXTRN ?StaticSpawn@AActor@@SAPEAV1@PEAVPClassActor@@AEBU?$TVector3@N@@W4replace_t@@_N@Z:PROC ; AActor::StaticSpawn + Line 186: EXTRN ?CopyFriendliness@AActor@@QEAAXPEAV1@_N1@Z:PROC ; AActor::CopyFriendliness + Line 187: EXTRN ?SpawnHealth@AActor@@QEBAHXZ:PROC ; AActor::SpawnHealth + Line 188: EXTRN ?SetPitch@AActor@@QEAAXU?$TAngle@N@@_N1@Z:PROC ; AActor::SetPitch + Line 189: EXTRN ?AddToHash@AActor@@QEAAXXZ:PROC ; AActor::AddToHash + Line 190: EXTRN ?IsMapActor@AActor@@QEAA_NXZ:PROC ; AActor::IsMapActor + Line 191: EXTRN ?SetState@AActor@@QEAA_NPEAUFState@@_N@Z:PROC ; AActor::SetState + Line 192: EXTRN ?ClearCounters@AActor@@QEAAXXZ:PROC ; AActor::ClearCounters + Line 193: EXTRN ?GetRaiseState@AActor@@QEAAPEAUFState@@XZ:PROC ; AActor::GetRaiseState + Line 194: EXTRN ?Revive@AActor@@QEAAXXZ:PROC ; AActor::Revive + Line 195: EXTRN ?R_ResetViewInterpolation@@YAXXZ:PROC ; R_ResetViewInterpolation + Line 196: EXTRN ?P_SpawnTeleportFog@@YAXPEAVAActor@@AEBU?$TVector3@N@@_N2@Z:PROC ; P_SpawnTeleportFog + Line 197: EXTRN ?COPY_AAPTR@@YAPEAVAActor@@PEAV1@H@Z:PROC ; COPY_AAPTR + Line 198: EXTRN ?GetPortalOffsetPosition@FLevelLocals@@QEAA?AU?$TVector2@N@@NNNN@Z:PROC ; FLevelLocals::GetPortalOffsetPosition + Line 199: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 200: EXTRN __CxxFrameHandler3:PROC + Line 201: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 202: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 203: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 204: EXTRN ?StrifeTypes@@3V?$TMap@HPEAVPClassActor@@U?$THashTraits@H@@U?$TValueTraits@PEAVPClassActor@@@@@@A:BYTE ; StrifeTypes + Line 205: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 206: EXTRN ?dmflags@@3VFIntCVar@@A:BYTE ; dmflags + Line 207: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 208: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 209: EXTRN __ImageBase:BYTE + Line 210: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_tick.cod (36 hits) + Line 14: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 15: EXTRN ?P_PlayerThink@@YAXPEAVplayer_t@@@Z:PROC ; P_PlayerThink + Line 16: EXTRN ?P_ResetSightCounters@@YAX_N@Z:PROC ; P_ResetSightCounters + Line 17: EXTRN ?P_ThinkParticles@@YAXPEAUFLevelLocals@@@Z:PROC ; P_ThinkParticles + Line 18: EXTRN ?P_RunEffects@@YAXPEAUFLevelLocals@@@Z:PROC ; P_RunEffects + Line 19: EXTRN ?S_PauseSound@@YAX_N0@Z:PROC ; S_PauseSound + Line 20: EXTRN ?S_ResumeSound@@YAX_N@Z:PROC ; S_ResumeSound + Line 21: EXTRN ?RunThinkers@FThinkerCollection@@QEAAXPEAUFLevelLocals@@@Z:PROC ; FThinkerCollection::RunThinkers + Line 22: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 23: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 24: EXTRN ?CallTick@DBaseStatusBar@@QEAAXXZ:PROC ; DBaseStatusBar::CallTick + Line 25: EXTRN ?UpdateInterpolations@FInterpolator@@QEAAXXZ:PROC ; FInterpolator::UpdateInterpolations + Line 26: EXTRN ?NewTick@DPSprite@@SAXXZ:PROC ; DPSprite::NewTick + Line 27: EXTRN ?R_ClearInterpolationPath@@YAXXZ:PROC ; R_ClearInterpolationPath + Line 28: EXTRN ?P_UpdateSpecials@@YAXPEAUFLevelLocals@@@Z:PROC ; P_UpdateSpecials + Line 29: EXTRN ?Tick@FLevelLocals@@QEAAXXZ:PROC ; FLevelLocals::Tick + Line 30: EXTRN ?E_WorldTick@@YAXXZ:PROC ; E_WorldTick + Line 31: EXTRN ?ConsoleState@@3W4cstate_t@@A:DWORD ; ConsoleState + Line 32: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 33: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 34: EXTRN ?menuactive@@3W4EMenuState@@A:DWORD ; menuactive + Line 35: EXTRN ?paused@@3HA:DWORD ; paused + Line 36: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 37: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 38: EXTRN ?demorecording@@3_NA:BYTE ; demorecording + Line 39: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 40: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 41: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 42: EXTRN ?r_NoInterpolate@@3_NA:BYTE ; r_NoInterpolate + Line 43: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 44: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 45: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 46: EXTRN ?wipegamestate@@3W4gamestate_t@@A:DWORD ; wipegamestate + Line 47: EXTRN ?globalfreeze@@3EA:BYTE ; globalfreeze + Line 48: EXTRN ?globalchangefreeze@@3EA:BYTE ; globalchangefreeze + Line 49: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_trace.cod (36 hits) + Line 56: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 325: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 326: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 327: EXTRN __std_terminate:PROC + Line 328: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 329: EXTRN c_atan2:PROC + Line 330: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 331: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 332: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 333: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 334: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 335: EXTRN ?P_TranslatePortalXY@@YAXPEAUline_t@@AEAN1@Z:PROC ; P_TranslatePortalXY + Line 336: EXTRN ?P_TranslatePortalVXVY@@YAXPEAUline_t@@AEAN1@Z:PROC ; P_TranslatePortalVXVY + Line 337: EXTRN ?P_TranslatePortalZ@@YAXPEAUline_t@@AEAN@Z:PROC ; P_TranslatePortalZ + Line 338: EXTRN ??_EDLineTracer@@UEAAPEAXI@Z:PROC ; DLineTracer::`vector deleting destructor' + Line 339: EXTRN ?GetTerrain@@YAHPEBUsector_t@@H@Z:PROC ; GetTerrain + Line 340: EXTRN ?AdjustFloorClip@@YAXPEBUsector_t@@@Z:PROC ; AdjustFloorClip + Line 341: EXTRN ?P_VanillaPointOnLineSide@@YAHNNPEBUline_t@@@Z:PROC ; P_VanillaPointOnLineSide + Line 342: EXTRN ?AddLineIntercepts@FPathTraverse@@MEAAXHH@Z:PROC ; FPathTraverse::AddLineIntercepts + Line 343: EXTRN ?AddThingIntercepts@FPathTraverse@@MEAAXHHAEAVFBlockThingsIterator@@_N@Z:PROC ; FPathTraverse::AddThingIntercepts + Line 344: EXTRN ?Next@FPathTraverse@@QEAAPEAUintercept_t@@XZ:PROC ; FPathTraverse::Next + Line 345: EXTRN ?init@FPathTraverse@@QEAAXNNNNHN@Z:PROC ; FPathTraverse::init + Line 346: EXTRN ?PortalRelocate@FPathTraverse@@QEAAHPEAUintercept_t@@HPEAU?$TVector3@N@@@Z:PROC ; FPathTraverse::PortalRelocate + Line 347: EXTRN ?PortalRelocate@FPathTraverse@@QEAAXAEBU?$TVector2@N@@HN@Z:PROC ; FPathTraverse::PortalRelocate + Line 348: EXTRN ??1FPathTraverse@@UEAA@XZ:PROC ; FPathTraverse::~FPathTraverse + Line 349: EXTRN ??_EFPathTraverse@@UEAAPEAXI@Z:PROC ; FPathTraverse::`vector deleting destructor' + Line 350: EXTRN ?P_ActivateLine@@YA_NPEAUline_t@@PEAVAActor@@HHPEAU?$TVector3@N@@@Z:PROC ; P_ActivateLine + Line 351: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 352: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 353: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 354: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 355: EXTRN __CxxFrameHandler3:PROC + Line 356: EXTRN memset:PROC + Line 357: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 358: EXTRN ?Terrains@@3V?$TArray@UFTerrainDef@@U1@@@A:BYTE ; Terrains + Line 359: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_udmf.cod (74 hits) + Line 112: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 113: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 114: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 115: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 116: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 117: EXTRN ??_V@YAXPEAX_K@Z:PROC ; operator delete[] + Line 118: EXTRN atexit:PROC + Line 119: EXTRN __std_terminate:PROC + Line 120: EXTRN qsort:PROC + Line 121: EXTRN strtod:PROC + Line 122: EXTRN strtoll:PROC + Line 123: EXTRN stricmp:PROC + Line 124: EXTRN strnicmp:PROC + Line 125: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 126: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 127: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 128: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 129: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 130: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 131: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 132: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 133: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 134: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 135: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 136: EXTRN c_sqrt:PROC + Line 137: EXTRN ?CheckOverlap@sector_t@@QEAAXXZ:PROC ; sector_t::CheckOverlap + Line 138: EXTRN ?AdjustLine@line_t@@QEAAXXZ:PROC ; line_t::AdjustLine + Line 139: EXTRN ?P_LoadTranslator@@YAXPEBD@Z:PROC ; P_LoadTranslator + Line 140: EXTRN ?P_TranslateLineDef@@YAXPEAUline_t@@PEAUmaplinedef_t@@H@Z:PROC ; P_TranslateLineDef + Line 141: EXTRN ?P_TranslateSectorSpecial@@YAHH@Z:PROC ; P_TranslateSectorSpecial + Line 142: EXTRN ?SetTexture@MapLoader@@AEAAXPEAUsector_t@@HHPEBDAEAV?$TMap@VFString@@UFMissingCount@@U?$THashTraits@VFString@@@@U?$TValueTraits@UFMissingCount@@@@@@_N@Z:PROC ; MapLoader::SetTexture + Line 143: EXTRN ?FinishLoadingLineDef@MapLoader@@AEAAXPEAUline_t@@H@Z:PROC ; MapLoader::FinishLoadingLineDef + Line 144: EXTRN ?ProcessSideTextures@MapLoader@@AEAAX_NPEAUside_t@@PEAUsector_t@@PEAUintmapsidedef_t@@HHPEAFAEAV?$TMap@VFString@@UFMissingCount@@U?$THashTraits@VFString@@@@U?$TValueTraits@UFMissingCount@@@@@@@Z:PROC ; MapLoader::ProcessSideTextures + Line 145: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 146: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 147: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 148: EXTRN ?OpenMem@FScanner@@QEAAXPEBD0H@Z:PROC ; FScanner::OpenMem + Line 149: EXTRN ?OpenString@FScanner@@QEAAXPEBDVFString@@@Z:PROC ; FScanner::OpenString + Line 150: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 151: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 152: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 153: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 154: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 155: EXTRN ?GetToken@FScanner@@QEAA_NXZ:PROC ; FScanner::GetToken + Line 156: EXTRN ?MustGetAnyToken@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetAnyToken + Line 157: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 158: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 159: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 160: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 161: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 162: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 163: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 164: EXTRN ?AddSectorTag@FTagManager@@QEAAXHH@Z:PROC ; FTagManager::AddSectorTag + Line 165: EXTRN ?AddLineID@FTagManager@@QEAAXHH@Z:PROC ; FTagManager::AddLineID + Line 166: EXTRN ?P_FindTerrain@@YAHVFName@@@Z:PROC ; P_FindTerrain + Line 167: EXTRN ?P_CreateScroller@@YAXW4EScroll@@NNHHHW4EScrollPos@@@Z:PROC ; P_CreateScroller + Line 168: EXTRN __CxxFrameHandler3:PROC + Line 169: EXTRN memcpy:PROC + Line 170: EXTRN memmove:PROC + Line 171: EXTRN memset:PROC + Line 172: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 173: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 174: EXTRN ?developer@@3VFIntCVar@@A:BYTE ; developer + Line 175: EXTRN ?MapThingsConverted@@3V?$TArray@UFMapThing@@U1@@@A:BYTE ; MapThingsConverted + Line 176: EXTRN ?ForceNodeBuild@@3_NA:BYTE ; ForceNodeBuild + Line 177: EXTRN ?GameNames@@3PAPEBDA:BYTE ; GameNames + Line 178: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 179: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 180: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 181: EXTRN ?tagManager@@3VFTagManager@@A:BYTE ; tagManager + Line 182: EXTRN ?DoomEdMap@@3V?$TMap@HUFDoomEdEntry@@U?$THashTraits@H@@U?$TValueTraits@UFDoomEdEntry@@@@@@A:BYTE ; DoomEdMap + Line 183: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 184: EXTRN __ImageBase:BYTE + Line 185: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_usdf.cod (44 hits) + Line 33: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 34: EXTRN __std_terminate:PROC + Line 35: EXTRN atoi:PROC + Line 36: EXTRN strnicmp:PROC + Line 37: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 38: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 39: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 40: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 41: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 42: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 43: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 44: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 45: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 46: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 47: EXTRN ?P_FindLineSpecial@@YAHPEBDPEAH1@Z:PROC ; P_FindLineSpecial + Line 48: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 49: EXTRN ?GetStrifeType@@YAPEAVPClassActor@@H@Z:PROC ; GetStrifeType + Line 50: EXTRN ?LoadScriptFile@@YA_NPEAUFLevelLocals@@PEBD_NH@Z:PROC ; LoadScriptFile + Line 51: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 52: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 53: EXTRN ?OpenMem@FScanner@@QEAAXPEBD0H@Z:PROC ; FScanner::OpenMem + Line 54: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 55: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 56: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 57: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 58: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 59: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 60: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 61: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 62: EXTRN ?Skip@UDMFParserBase@@IEAAXXZ:PROC ; UDMFParserBase::Skip + Line 63: EXTRN ?ParseKey@UDMFParserBase@@IEAA?AVFName@@_NPEA_N@Z:PROC ; UDMFParserBase::ParseKey + Line 64: EXTRN ?CheckInt@UDMFParserBase@@IEAAHPEBD@Z:PROC ; UDMFParserBase::CheckInt + Line 65: EXTRN ?CheckBool@UDMFParserBase@@IEAA_NPEBD@Z:PROC ; UDMFParserBase::CheckBool + Line 66: EXTRN ?CheckString@UDMFParserBase@@IEAAPEBDPEBD@Z:PROC ; UDMFParserBase::CheckString + Line 67: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 68: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 69: EXTRN ?SetConversation@FLevelLocals@@QEAAXHPEAVPClassActor@@H@Z:PROC ; FLevelLocals::SetConversation + Line 70: EXTRN __CxxFrameHandler3:PROC + Line 71: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 72: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 73: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 74: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 75: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 76: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_user.cod (135 hits) + Line 312: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 313: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 314: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 315: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 316: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 317: EXTRN ?dmflags@@3VFIntCVar@@A:BYTE ; dmflags + Line 1837: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 1838: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 1839: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 1840: EXTRN atexit:PROC + Line 1841: EXTRN __std_terminate:PROC + Line 1842: EXTRN qsort:PROC + Line 1843: EXTRN __stdio_common_vfprintf:PROC + Line 1844: EXTRN stricmp:PROC + Line 1845: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 1846: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 1847: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 1848: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 1849: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 1850: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 1851: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 1852: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 1853: EXTRN ??HFString@@QEBA?AV0@PEBD@Z:PROC ; FString::operator+ + Line 1854: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 1855: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 1856: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 1857: EXTRN mysnprintf:PROC + Line 1858: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 1859: EXTRN ?Mark@GC@@YAXPEAPEAVDObject@@@Z:PROC ; GC::Mark + Line 1860: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 1861: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 1862: EXTRN ?P_GetThingFloorType@@YAHPEAVAActor@@@Z:PROC ; P_GetThingFloorType + Line 1863: EXTRN ?P_TalkFacing@@YA_NPEAVAActor@@@Z:PROC ; P_TalkFacing + Line 1864: EXTRN ?P_UseLines@@YAXPEAVplayer_t@@@Z:PROC ; P_UseLines + Line 1865: EXTRN ?P_DelSeclist@@YAXPEAUmsecnode_t@@PEQsector_t@@PEAU1@@Z:PROC ; P_DelSeclist + Line 1866: EXTRN ?P_DelSeclist@@YAXPEAUportnode_t@@PEQFLinePortal@@PEAU1@@Z:PROC ; P_DelSeclist + Line 1867: EXTRN ?P_DamageMobj@@YAHPEAVAActor@@00HVFName@@HU?$TAngle@N@@@Z:PROC ; P_DamageMobj + Line 1868: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 1869: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 1870: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 1871: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 1872: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 1873: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 1874: EXTRN ?S_StopSound@@YAXPEAVAActor@@H@Z:PROC ; S_StopSound + Line 1875: EXTRN ?S_IsActorPlayingSomething@@YA_NPEAVAActor@@HH@Z:PROC ; S_IsActorPlayingSomething + Line 1876: EXTRN ?S_ChangeMusic@@YA_NPEBDH_N1@Z:PROC ; S_ChangeMusic + Line 1877: EXTRN ?S_FindSkinnedSound@@YAHPEAVAActor@@VFSoundID@@@Z:PROC ; S_FindSkinnedSound + Line 1878: EXTRN ?S_FindSkinnedSoundEx@@YAHPEAVAActor@@PEBD1@Z:PROC ; S_FindSkinnedSoundEx + Line 1879: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 1880: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 1881: EXTRN ?P_BringUpWeapon@@YAXPEAVplayer_t@@@Z:PROC ; P_BringUpWeapon + Line 1882: EXTRN ?P_NoiseAlert@@YAXPEAVAActor@@0_NN@Z:PROC ; P_NoiseAlert + Line 1883: EXTRN ?CheckLocalView@AActor@@QEBA_NH@Z:PROC ; AActor::CheckLocalView + Line 1884: EXTRN ?FindInventory@AActor@@QEAAPEAV1@PEAVPClassActor@@_N@Z:PROC ; AActor::FindInventory + Line 1885: EXTRN ?UnlinkFromWorld@AActor@@QEAAXPEAUFLinkContext@@@Z:PROC ; AActor::UnlinkFromWorld + Line 1886: EXTRN ?SetState@AActor@@QEAA_NPEAUFState@@_N@Z:PROC ; AActor::SetState + Line 1887: EXTRN ?Revive@AActor@@QEAAXXZ:PROC ; AActor::Revive + Line 1888: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 1889: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 1890: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 1891: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 1892: EXTRN ?P_PlayerOnSpecial3DFloor@@YAXPEAVplayer_t@@@Z:PROC ; P_PlayerOnSpecial3DFloor + Line 1893: EXTRN ?AddToConsole@@YAXHPEBD@Z:PROC ; AddToConsole + Line 1894: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 1895: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 1896: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 1897: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 1898: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 1899: EXTRN ?Net_WriteFloat@@YAXM@Z:PROC ; Net_WriteFloat + Line 1900: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 1901: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 1902: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 1903: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 1904: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 1905: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 1906: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEACPEAC@Z:PROC ; Serialize + Line 1907: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAEPEAE@Z:PROC ; Serialize + Line 1908: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAFPEAF@Z:PROC ; Serialize + Line 1909: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAGPEAG@Z:PROC ; Serialize + Line 1910: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 1911: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAMPEAM@Z:PROC ; Serialize + Line 1912: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 1913: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFName@@PEAV2@@Z:PROC ; Serialize + Line 1914: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFString@@PEAV2@@Z:PROC ; Serialize + Line 1915: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAUticcmd_t@@PEAU2@@Z:PROC ; Serialize + Line 1916: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAUusercmd_t@@PEAU2@@Z:PROC ; Serialize + Line 1917: EXTRN ??$Serialize@VPClassActor@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAVPClassActor@@PEAPEAV1@@Z:PROC ; Serialize + Line 1918: EXTRN ?Clear@FWeaponSlots@@QEAAXXZ:PROC ; FWeaponSlots::Clear + Line 1919: EXTRN ??1userinfo_t@@QEAA@XZ:PROC ; userinfo_t::~userinfo_t + Line 1920: EXTRN ?SkinChanged@userinfo_t@@QEAAHPEBDH@Z:PROC ; userinfo_t::SkinChanged + Line 1921: EXTRN ?ReadUserInfo@@YAXAEAVFSerializer@@AEAUuserinfo_t@@AEAVFString@@@Z:PROC ; ReadUserInfo + Line 1922: EXTRN ?WriteUserInfo@@YAXAEAVFSerializer@@AEAUuserinfo_t@@@Z:PROC ; WriteUserInfo + Line 1923: EXTRN ?DestroyPSprites@player_t@@QEAAXXZ:PROC ; player_t::DestroyPSprites + Line 1924: EXTRN ?R_RebuildViewInterpolation@@YAXPEAVplayer_t@@@Z:PROC ; R_RebuildViewInterpolation + Line 1925: EXTRN ?R_GetViewInterpolationStatus@@YA_NXZ:PROC ; R_GetViewInterpolationStatus + Line 1926: EXTRN ?P_UnmorphActor@@YA_NPEAVAActor@@0H_N@Z:PROC ; P_UnmorphActor + Line 1927: EXTRN ?P_PlayerInSpecialSector@@YAXPEAVplayer_t@@PEAUsector_t@@@Z:PROC ; P_PlayerInSpecialSector + Line 1928: EXTRN ?P_PlayerOnSpecialFlat@@YAXPEAVplayer_t@@H@Z:PROC ; P_PlayerOnSpecialFlat + Line 1929: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 1930: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 1931: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 1932: EXTRN ?StartTypedScripts@FBehaviorContainer@@QEAAXGPEAVAActor@@_NH1@Z:PROC ; FBehaviorContainer::StartTypedScripts + Line 1933: EXTRN ?GetPortalOffsetPosition@FLevelLocals@@QEAA?AU?$TVector2@N@@NNNN@Z:PROC ; FLevelLocals::GetPortalOffsetPosition + Line 1934: EXTRN ?AirControlChanged@FLevelLocals@@QEAAXXZ:PROC ; FLevelLocals::AirControlChanged + Line 1935: EXTRN ?E_PlayerRespawned@@YAXH@Z:PROC ; E_PlayerRespawned + Line 1936: EXTRN ??$P_AddSecnode@Umsecnode_t@@Usector_t@@@@YAPEAUmsecnode_t@@PEAUsector_t@@PEAVAActor@@PEAU0@AEAPEAU0@@Z:PROC ; P_AddSecnode + Line 1937: EXTRN ??$P_DelSecnode@Umsecnode_t@@Usector_t@@@@YAPEAUmsecnode_t@@PEAU0@PEQsector_t@@PEAU0@@Z:PROC ; P_DelSecnode + Line 1938: EXTRN ??$P_AddSecnode@Uportnode_t@@UFLinePortal@@@@YAPEAUportnode_t@@PEAUFLinePortal@@PEAVAActor@@PEAU0@AEAPEAU0@@Z:PROC ; P_AddSecnode + Line 1939: EXTRN ??$P_DelSecnode@Uportnode_t@@UFLinePortal@@@@YAPEAUportnode_t@@PEAU0@PEQFLinePortal@@PEAU0@@Z:PROC ; P_DelSecnode + Line 1940: EXTRN __CxxFrameHandler3:PROC + Line 1941: EXTRN memcmp:PROC + Line 1942: EXTRN memcpy:PROC + Line 1943: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 1944: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 1945: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 1946: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 1947: EXTRN ?gametic@@3HA:DWORD ; gametic + Line 1948: EXTRN ?debugfile@@3PEAU_iobuf@@EA:QWORD ; debugfile + Line 1949: EXTRN ?singletics@@3_NA:BYTE ; singletics + Line 1950: EXTRN ?developer@@3VFIntCVar@@A:BYTE ; developer + Line 1951: EXTRN ?Net_Arbitrator@@3HA:DWORD ; Net_Arbitrator + Line 1952: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 1953: EXTRN ?vid_rendermode@@3VFIntCVar@@A:BYTE ; vid_rendermode + Line 1954: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 1955: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 1956: EXTRN ?ParsingKeyConf@@3_NA:BYTE ; ParsingKeyConf + Line 1957: EXTRN ?localcmds@@3PAUticcmd_t@@A:BYTE ; localcmds + Line 1958: EXTRN ?maketic@@3HA:DWORD ; maketic + Line 1959: EXTRN ?ticdup@@3HA:DWORD ; ticdup + Line 1960: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 1961: EXTRN ?WP_NOCHANGE@@3PEAVAActor@@EA:QWORD ; WP_NOCHANGE + Line 1962: EXTRN ?Skins@@3V?$TArray@VFPlayerSkin@@V1@@@A:BYTE ; Skins + Line 1963: EXTRN ?maxviewpitch@@3VFFloatCVar@@A:BYTE ; maxviewpitch + Line 1964: EXTRN ?cl_oldfreelooklimit@@3VFBoolCVar@@A:BYTE ; cl_oldfreelooklimit + Line 1965: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\p_xlat.cod (11 hits) + Line 33: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 34: EXTRN ?AddLineID@FTagManager@@QEAAXHH@Z:PROC ; FTagManager::AddLineID + Line 35: EXTRN ?SimpleLineTranslations@@3V?$TAutoGrowArray@UFLineTrans@@U1@@@A:BYTE ; SimpleLineTranslations + Line 36: EXTRN ?XlatExpressions@@3V?$TArray@HH@@A:BYTE ; XlatExpressions + Line 37: EXTRN ?Boomish@@3PAUFBoomTranslator@@A:BYTE ; Boomish + Line 38: EXTRN ?NumBoomish@@3HA:DWORD ; NumBoomish + Line 39: EXTRN ?SectorTranslations@@3V?$TAutoGrowArray@UFSectorTrans@@U1@@@A:BYTE ; SectorTranslations + Line 40: EXTRN ?SectorMasks@@3V?$TArray@UFSectorMask@@U1@@@A:BYTE ; SectorMasks + Line 41: EXTRN ?LineFlagTranslations@@3PAUFLineFlagTrans@@A:BYTE ; LineFlagTranslations + Line 42: EXTRN __ImageBase:BYTE + Line 43: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\parse_xlat.cod (26 hits) + Line 10: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 223: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 224: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 225: EXTRN _purecall:PROC + Line 226: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 227: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 228: EXTRN atexit:PROC + Line 229: EXTRN __std_terminate:PROC + Line 230: EXTRN free:PROC + Line 231: EXTRN malloc:PROC + Line 232: EXTRN stricmp:PROC + Line 233: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 234: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 235: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 236: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 237: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 238: EXTRN ?AddSym@FParseContext@@QEAAXPEADH@Z:PROC ; FParseContext::AddSym + Line 239: EXTRN ?PrintError@FParseContext@@QEAAHPEBD@Z:PROC ; FParseContext::PrintError + Line 240: EXTRN ?ParseLump@FParseContext@@QEAAXPEBD@Z:PROC ; FParseContext::ParseLump + Line 241: EXTRN ??_EFParseContext@@UEAAPEAXI@Z:PROC ; FParseContext::`vector deleting destructor' + Line 242: EXTRN ??_EXlatParseContext@@UEAAPEAXI@Z:PROC ; XlatParseContext::`vector deleting destructor' + Line 243: EXTRN __CxxFrameHandler3:PROC + Line 244: EXTRN memmove:PROC + Line 245: EXTRN memset:PROC + Line 246: EXTRN ?XlatExprEval@@3PAP6APEBHPEAHPEBHPEAUFXlatExprState@@@ZA:BYTE ; XlatExprEval + Line 247: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\parsecontext.cod (19 hits) + Line 20: EXTRN __std_terminate:PROC + Line 21: EXTRN strtod:PROC + Line 22: EXTRN strtoll:PROC + Line 23: EXTRN strncpy:PROC + Line 24: EXTRN strnicmp:PROC + Line 25: EXTRN isalpha:PROC + Line 26: EXTRN isdigit:PROC + Line 27: EXTRN isspace:PROC + Line 28: EXTRN isalnum:PROC + Line 29: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 30: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 31: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 32: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 33: EXTRN ?ReadLumpIntoArray@FWadCollection@@QEAA?AV?$TArray@EE@@HH@Z:PROC ; FWadCollection::ReadLumpIntoArray + Line 34: EXTRN ?P_FindLineSpecial@@YAHPEBDPEAH1@Z:PROC ; P_FindLineSpecial + Line 35: EXTRN __CxxFrameHandler3:PROC + Line 36: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 37: EXTRN __ImageBase:BYTE + Line 38: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\patchtexture.cod (23 hits) + Line 23: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 24: EXTRN __std_terminate:PROC + Line 25: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 26: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 27: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 28: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 29: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 30: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 31: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 32: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 33: EXTRN ?CopyTranslatedPixels@FImageSource@@IEAAHPEAVFBitmap@@PEAUPalEntry@@@Z:PROC ; FImageSource::CopyTranslatedPixels + Line 34: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 35: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 36: EXTRN ?checkPatchForAlpha@@YA_NPEBXI@Z:PROC ; checkPatchForAlpha + Line 37: EXTRN ??_EFPatchTexture@@UEAAPEAXI@Z:PROC ; FPatchTexture::`vector deleting destructor' + Line 38: EXTRN __CxxFrameHandler3:PROC + Line 39: EXTRN memset:PROC + Line 40: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 41: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 42: EXTRN ?translationtables@@3PAV?$TAutoGrowArray@VFRemapTablePtr@@PEAUFRemapTable@@@@A:BYTE ; translationtables + Line 43: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 44: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + Line 45: EXTRN ?GrayMap@ImageHelpers@@3PAEA:BYTE ; ImageHelpers::GrayMap + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\pcxtexture.cod (23 hits) + Line 26: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 27: EXTRN __std_terminate:PROC + Line 28: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 29: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 30: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 31: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 32: EXTRN ?CopyPixelDataRGB@FBitmap@@QEAAXHHPEBEHHHHHHPEAUFCopyInfo@@HHH@Z:PROC ; FBitmap::CopyPixelDataRGB + Line 33: EXTRN ?CopyPixelData@FBitmap@@QEAAXHHPEBEHHHHHPEAUPalEntry@@PEAUFCopyInfo@@@Z:PROC ; FBitmap::CopyPixelData + Line 34: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 35: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 36: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 37: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 38: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 39: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 40: EXTRN ??_EFPCXTexture@@UEAAPEAXI@Z:PROC ; FPCXTexture::`vector deleting destructor' + Line 41: EXTRN __CxxFrameHandler3:PROC + Line 42: EXTRN memset:PROC + Line 43: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 44: EXTRN ?RGB256k@@3TColorTable256k@@A:BYTE ; RGB256k + Line 45: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 46: EXTRN ?GrayMap@ImageHelpers@@3PAEA:BYTE ; ImageHelpers::GrayMap + Line 47: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 48: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\playermenu.cod (24 hits) + Line 51: EXTRN ?Skins@@3V?$TArray@VFPlayerSkin@@V1@@@A:BYTE ; Skins + Line 52: EXTRN ?team@@3VFIntCVar@@A:BYTE ; team + Line 53: EXTRN ?autoaim@@3VFFloatCVar@@A:BYTE ; autoaim + Line 54: EXTRN ?neverswitchonpickup@@3VFBoolCVar@@A:BYTE ; neverswitchonpickup + Line 55: EXTRN ?cl_run@@3VFBoolCVar@@A:BYTE ; cl_run + Line 56: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 57: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 58: EXTRN ?CurrentMenu@@3PEAVDMenu@@EA:QWORD ; CurrentMenu + Line 59: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 231: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 232: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 233: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 234: EXTRN mysnprintf:PROC + Line 235: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 236: EXTRN ?cvar_set@@YAPEAVFBaseCVar@@PEBD0@Z:PROC ; cvar_set + Line 237: EXTRN ?GetPrintableDisplayName@@YA?AVFString@@PEAVPClassActor@@@Z:PROC ; GetPrintableDisplayName + Line 238: EXTRN ?SkinNumChanged@userinfo_t@@QEAAHH@Z:PROC ; userinfo_t::SkinNumChanged + Line 239: EXTRN ?PlayerClassNumChanged@userinfo_t@@QEAAHH@Z:PROC ; userinfo_t::PlayerClassNumChanged + Line 240: EXTRN ?ColorChanged@userinfo_t@@QEAAII@Z:PROC ; userinfo_t::ColorChanged + Line 241: EXTRN ?ColorSetChanged@userinfo_t@@QEAAHH@Z:PROC ; userinfo_t::ColorSetChanged + Line 242: EXTRN ?C_DoCommand@@YAXPEBDH@Z:PROC ; C_DoCommand + Line 243: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 244: EXTRN __CxxFrameHandler3:PROC + Line 245: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\playmidi.cod (111 hits) + Line 41: EXTRN ?currSong@@3PEAVMusInfo@@EA:QWORD ; currSong + Line 482: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 483: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 484: EXTRN atexit:PROC + Line 485: EXTRN __std_terminate:PROC + Line 486: EXTRN free:PROC + Line 487: EXTRN ?ctl_cmsg@TimidityPlus@@YAXHHPEBDZZ:PROC ; TimidityPlus::ctl_cmsg + Line 488: EXTRN ?init_mblock@TimidityPlus@@YAXPEAUMBlockList@1@@Z:PROC ; TimidityPlus::init_mblock + Line 489: EXTRN ?new_segment@TimidityPlus@@YAPEAXPEAUMBlockList@1@_K@Z:PROC ; TimidityPlus::new_segment + Line 490: EXTRN ?reuse_mblock@TimidityPlus@@YAXPEAUMBlockList@1@@Z:PROC ; TimidityPlus::reuse_mblock + Line 491: EXTRN ?int_rand@TimidityPlus@@YAHH@Z:PROC ; TimidityPlus::int_rand + Line 492: EXTRN ?safe_malloc@TimidityPlus@@YAPEAX_K@Z:PROC ; TimidityPlus::safe_malloc + Line 493: EXTRN ?instrument_map@Instruments@TimidityPlus@@QEBAHHPEAH0@Z:PROC ; TimidityPlus::Instruments::instrument_map + Line 494: EXTRN ?find_altassign@Instruments@TimidityPlus@@QEAAPEAUAlternateAssign@2@PEAU32@H@Z:PROC ; TimidityPlus::Instruments::find_altassign + Line 495: EXTRN ?play_midi_load_instrument@Instruments@TimidityPlus@@QEAAPEAUInstrument@2@HHHPEA_N@Z:PROC ; TimidityPlus::Instruments::play_midi_load_instrument + Line 496: EXTRN ?init_userdrum@Instruments@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Instruments::init_userdrum + Line 497: EXTRN ?free_userinst@Instruments@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Instruments::free_userinst + Line 498: EXTRN ?parse_sysex_event_multi@SysexConvert@TimidityPlus@@QEAAHPEBEHPEAUMidiEvent@2@PEAVInstruments@2@@Z:PROC ; TimidityPlus::SysexConvert::parse_sysex_event_multi + Line 499: EXTRN ?parse_sysex_event@SysexConvert@TimidityPlus@@QEAAHPEBEHPEAUMidiEvent@2@PEAVInstruments@2@@Z:PROC ; TimidityPlus::SysexConvert::parse_sysex_event + Line 500: EXTRN ?initialize_resampler_coeffs@TimidityPlus@@YAXXZ:PROC ; TimidityPlus::initialize_resampler_coeffs + Line 501: EXTRN ?mix_voice@Mixer@TimidityPlus@@QEAAXPEAHHH@Z:PROC ; TimidityPlus::Mixer::mix_voice + Line 502: EXTRN ?recompute_envelope@Mixer@TimidityPlus@@QEAAHH@Z:PROC ; TimidityPlus::Mixer::recompute_envelope + Line 503: EXTRN ?apply_envelope_to_amp@Mixer@TimidityPlus@@QEAAHH@Z:PROC ; TimidityPlus::Mixer::apply_envelope_to_amp + Line 504: EXTRN ?recompute_modulation_envelope@Mixer@TimidityPlus@@QEAAHH@Z:PROC ; TimidityPlus::Mixer::recompute_modulation_envelope + Line 505: EXTRN ?apply_modulation_envelope@Mixer@TimidityPlus@@QEAAHH@Z:PROC ; TimidityPlus::Mixer::apply_modulation_envelope + Line 506: EXTRN ?free_cache_data@Recache@TimidityPlus@@AEAAXXZ:PROC ; TimidityPlus::Recache::free_cache_data + Line 507: EXTRN ?resamp_cache_reset@Recache@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Recache::resamp_cache_reset + Line 508: EXTRN ?resamp_cache_refer_alloff@Recache@TimidityPlus@@QEAAXHH@Z:PROC ; TimidityPlus::Recache::resamp_cache_refer_alloff + Line 509: EXTRN ?resamp_cache_fetch@Recache@TimidityPlus@@QEAAPEAUcache_hash@2@PEAUSample@2@H@Z:PROC ; TimidityPlus::Recache::resamp_cache_fetch + Line 510: EXTRN ?set_dry_signal@Reverb@TimidityPlus@@QEAAXPEAHH@Z:PROC ; TimidityPlus::Reverb::set_dry_signal + Line 511: EXTRN ?set_dry_signal_xg@Reverb@TimidityPlus@@QEAAXPEAHHH@Z:PROC ; TimidityPlus::Reverb::set_dry_signal_xg + Line 512: EXTRN ?mix_dry_signal@Reverb@TimidityPlus@@QEAAXPEAHH@Z:PROC ; TimidityPlus::Reverb::mix_dry_signal + Line 513: EXTRN ?free_effect_buffers@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::free_effect_buffers + Line 514: EXTRN ?get_pink_noise_light@Reverb@TimidityPlus@@QEAAMPEAUpink_noise@2@@Z:PROC ; TimidityPlus::Reverb::get_pink_noise_light + Line 515: EXTRN ?calc_filter_shelving_high@Reverb@TimidityPlus@@QEAAXPEAUfilter_shelving@2@@Z:PROC ; TimidityPlus::Reverb::calc_filter_shelving_high + Line 516: EXTRN ?calc_filter_shelving_low@Reverb@TimidityPlus@@QEAAXPEAUfilter_shelving@2@@Z:PROC ; TimidityPlus::Reverb::calc_filter_shelving_low + Line 517: EXTRN ?do_insertion_effect_gs@Reverb@TimidityPlus@@QEAAXPEAHH@Z:PROC ; TimidityPlus::Reverb::do_insertion_effect_gs + Line 518: EXTRN ?do_insertion_effect_xg@Reverb@TimidityPlus@@QEAAXPEAHHPEAUeffect_xg_t@2@@Z:PROC ; TimidityPlus::Reverb::do_insertion_effect_xg + Line 519: EXTRN ?do_ch_reverb@Reverb@TimidityPlus@@QEAAXPEAHH@Z:PROC ; TimidityPlus::Reverb::do_ch_reverb + Line 520: EXTRN ?set_ch_reverb@Reverb@TimidityPlus@@QEAAXPEAHHH@Z:PROC ; TimidityPlus::Reverb::set_ch_reverb + Line 521: EXTRN ?init_reverb@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::init_reverb + Line 522: EXTRN ?do_ch_chorus@Reverb@TimidityPlus@@QEAAXPEAHH@Z:PROC ; TimidityPlus::Reverb::do_ch_chorus + Line 523: EXTRN ?set_ch_chorus@Reverb@TimidityPlus@@QEAAXPEAHHH@Z:PROC ; TimidityPlus::Reverb::set_ch_chorus + Line 524: EXTRN ?init_ch_chorus@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::init_ch_chorus + Line 525: EXTRN ?do_ch_chorus_xg@Reverb@TimidityPlus@@QEAAXPEAHH@Z:PROC ; TimidityPlus::Reverb::do_ch_chorus_xg + Line 526: EXTRN ?set_ch_delay@Reverb@TimidityPlus@@QEAAXPEAHHH@Z:PROC ; TimidityPlus::Reverb::set_ch_delay + Line 527: EXTRN ?init_ch_delay@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::init_ch_delay + Line 528: EXTRN ?do_multi_eq_xg@Reverb@TimidityPlus@@QEAAXPEAHH@Z:PROC ; TimidityPlus::Reverb::do_multi_eq_xg + Line 529: EXTRN ?recompute_delay_status_gs@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::recompute_delay_status_gs + Line 530: EXTRN ?set_delay_macro_gs@Reverb@TimidityPlus@@QEAAXH@Z:PROC ; TimidityPlus::Reverb::set_delay_macro_gs + Line 531: EXTRN ?recompute_reverb_status_gs@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::recompute_reverb_status_gs + Line 532: EXTRN ?set_reverb_macro_gm2@Reverb@TimidityPlus@@QEAAXH@Z:PROC ; TimidityPlus::Reverb::set_reverb_macro_gm2 + Line 533: EXTRN ?set_reverb_macro_gs@Reverb@TimidityPlus@@QEAAXH@Z:PROC ; TimidityPlus::Reverb::set_reverb_macro_gs + Line 534: EXTRN ?recompute_chorus_status_gs@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::recompute_chorus_status_gs + Line 535: EXTRN ?set_chorus_macro_gs@Reverb@TimidityPlus@@QEAAXH@Z:PROC ; TimidityPlus::Reverb::set_chorus_macro_gs + Line 536: EXTRN ?recompute_eq_status_gs@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::recompute_eq_status_gs + Line 537: EXTRN ?set_multi_eq_type_xg@Reverb@TimidityPlus@@QEAAXH@Z:PROC ; TimidityPlus::Reverb::set_multi_eq_type_xg + Line 538: EXTRN ?recompute_multi_eq_xg@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::recompute_multi_eq_xg + Line 539: EXTRN ?recompute_effect_xg@Reverb@TimidityPlus@@QEAAXPEAUeffect_xg_t@2@@Z:PROC ; TimidityPlus::Reverb::recompute_effect_xg + Line 540: EXTRN ?realloc_effect_xg@Reverb@TimidityPlus@@QEAAXPEAUeffect_xg_t@2@@Z:PROC ; TimidityPlus::Reverb::realloc_effect_xg + Line 541: EXTRN ?init_all_effect_xg@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::init_all_effect_xg + Line 542: EXTRN ?recompute_insertion_effect_gs@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::recompute_insertion_effect_gs + Line 543: EXTRN ?realloc_insertion_effect_gs@Reverb@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Reverb::realloc_insertion_effect_gs + Line 544: EXTRN ?init_effect_status@Reverb@TimidityPlus@@QEAAXH@Z:PROC ; TimidityPlus::Reverb::init_effect_status + Line 545: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 546: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 547: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 548: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 549: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 550: EXTRN ?lookup_triangular@TimidityPlus@@YANH@Z:PROC ; TimidityPlus::lookup_triangular + Line 551: EXTRN ?init_tables@TimidityPlus@@YAXXZ:PROC ; TimidityPlus::init_tables + Line 552: EXTRN ??0FRandom@@QEAA@XZ:PROC ; FRandom::FRandom + Line 553: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 554: EXTRN ?init_effect@Effect@TimidityPlus@@QEAAXXZ:PROC ; TimidityPlus::Effect::init_effect + Line 555: EXTRN ?do_effect@Effect@TimidityPlus@@QEAAXPEAHH@Z:PROC ; TimidityPlus::Effect::do_effect + Line 556: EXTRN ?CreateCriticalSection@@YAPEAVFInternalCriticalSection@@XZ:PROC ; CreateCriticalSection + Line 557: EXTRN ?DeleteCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; DeleteCriticalSection + Line 558: EXTRN ?EnterCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; EnterCriticalSection + Line 559: EXTRN ?LeaveCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; LeaveCriticalSection + Line 560: EXTRN ?MIDIDeviceChanged@@YAXH_N@Z:PROC ; MIDIDeviceChanged + Line 561: EXTRN __CxxFrameHandler3:PROC + Line 562: EXTRN exp:PROC + Line 563: EXTRN floor:PROC + Line 564: EXTRN log:PROC + Line 565: EXTRN memset:PROC + Line 566: EXTRN pow:PROC + Line 567: EXTRN ?pitch_freq_table@TimidityPlus@@3QBMB:BYTE ; TimidityPlus::pitch_freq_table + Line 568: EXTRN ?freq_table@TimidityPlus@@3PAHA:BYTE ; TimidityPlus::freq_table + Line 569: EXTRN ?freq_table_tuning@TimidityPlus@@3PAY0IA@HA:BYTE ; TimidityPlus::freq_table_tuning + Line 570: EXTRN ?freq_table_pytha@TimidityPlus@@3PAY0IA@HA:BYTE ; TimidityPlus::freq_table_pytha + Line 571: EXTRN ?freq_table_meantone@TimidityPlus@@3PAY0IA@HA:BYTE ; TimidityPlus::freq_table_meantone + Line 572: EXTRN ?freq_table_pureint@TimidityPlus@@3PAY0IA@HA:BYTE ; TimidityPlus::freq_table_pureint + Line 573: EXTRN ?def_vol_table@TimidityPlus@@3PANA:BYTE ; TimidityPlus::def_vol_table + Line 574: EXTRN ?gs_vol_table@TimidityPlus@@3PANA:BYTE ; TimidityPlus::gs_vol_table + Line 575: EXTRN ?xg_vol_table@TimidityPlus@@3PEANEA:QWORD ; TimidityPlus::xg_vol_table + Line 576: EXTRN ?pan_table@TimidityPlus@@3PEANEA:QWORD ; TimidityPlus::pan_table + Line 577: EXTRN ?bend_fine@TimidityPlus@@3PANA:BYTE ; TimidityPlus::bend_fine + Line 578: EXTRN ?bend_coarse@TimidityPlus@@3PANA:BYTE ; TimidityPlus::bend_coarse + Line 579: EXTRN ?midi_time_table@TimidityPlus@@3QBNB:BYTE ; TimidityPlus::midi_time_table + Line 580: EXTRN ?midi_time_table2@TimidityPlus@@3QBNB:BYTE ; TimidityPlus::midi_time_table2 + Line 581: EXTRN ?perceived_vol_table@TimidityPlus@@3PANA:BYTE ; TimidityPlus::perceived_vol_table + Line 582: EXTRN ?gm2_vol_table@TimidityPlus@@3PANA:BYTE ; TimidityPlus::gm2_vol_table + Line 583: EXTRN ?sc_vel_table@TimidityPlus@@3PANA:BYTE ; TimidityPlus::sc_vel_table + Line 584: EXTRN ?sc_vol_table@TimidityPlus@@3PANA:BYTE ; TimidityPlus::sc_vol_table + Line 585: EXTRN ?sc_pan_table@TimidityPlus@@3PANA:BYTE ; TimidityPlus::sc_pan_table + Line 586: EXTRN ?gm2_pan_table@TimidityPlus@@3PANA:BYTE ; TimidityPlus::gm2_pan_table + Line 587: EXTRN ?sc_drum_level_table@TimidityPlus@@3PANA:BYTE ; TimidityPlus::sc_drum_level_table + Line 588: EXTRN ?pan_delay_table@TimidityPlus@@3QBMB:BYTE ; TimidityPlus::pan_delay_table + Line 589: EXTRN ?eq_freq_table_xg@TimidityPlus@@3QBMB:BYTE ; TimidityPlus::eq_freq_table_xg + Line 590: EXTRN __ImageBase:BYTE + Line 591: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\pngtexture.cod (34 hits) + Line 40: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 41: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 42: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 43: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 44: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 45: EXTRN __std_terminate:PROC + Line 46: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 47: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 48: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 49: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 50: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 51: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 52: EXTRN ?MakeRemap@FPalette@@QEBAXPEBIPEAEPEBEH@Z:PROC ; FPalette::MakeRemap + Line 53: EXTRN ??1FTexture@@UEAA@XZ:PROC ; FTexture::~FTexture + Line 54: EXTRN ?Get8BitPixels@FTexture@@UEAA?AV?$TArray@EE@@_N@Z:PROC ; FTexture::Get8BitPixels + Line 55: EXTRN ??0FTexture@@IEAA@PEBDH@Z:PROC ; FTexture::FTexture + Line 56: EXTRN ?M_FindPNGChunk@@YAIPEAUPNGHandle@@I@Z:PROC ; M_FindPNGChunk + Line 57: EXTRN ?M_ReadIDAT@@YA_NAEAVFileReader@@PEAEHHHEEEI@Z:PROC ; M_ReadIDAT + Line 58: EXTRN ?CopyPixelDataRGB@FBitmap@@QEAAXHHPEBEHHHHHHPEAUFCopyInfo@@HHH@Z:PROC ; FBitmap::CopyPixelDataRGB + Line 59: EXTRN ?CopyPixelData@FBitmap@@QEAAXHHPEBEHHHHHPEAUPalEntry@@PEAUFCopyInfo@@@Z:PROC ; FBitmap::CopyPixelData + Line 60: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 61: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 62: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 63: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 64: EXTRN ??_EFPNGTexture@@UEAAPEAXI@Z:PROC ; FPNGTexture::`vector deleting destructor' + Line 65: EXTRN ??_EFPNGFileTexture@@UEAAPEAXI@Z:PROC ; FPNGFileTexture::`vector deleting destructor' + Line 66: EXTRN __CxxFrameHandler3:PROC + Line 67: EXTRN memset:PROC + Line 68: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 69: EXTRN ?RGB256k@@3TColorTable256k@@A:BYTE ; RGB256k + Line 70: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 71: EXTRN ?GrayMap@ImageHelpers@@3PAEA:BYTE ; ImageHelpers::GrayMap + Line 72: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 73: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\po_man.cod (71 hits) + Line 29: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 228: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 229: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 230: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 231: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 232: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 233: EXTRN atexit:PROC + Line 234: EXTRN _Init_thread_header:PROC + Line 235: EXTRN _Init_thread_abort:PROC + Line 236: EXTRN _Init_thread_footer:PROC + Line 237: EXTRN __std_terminate:PROC + Line 238: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 239: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 240: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 241: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 242: EXTRN c_atan2:PROC + Line 243: EXTRN c_sqrt:PROC + Line 244: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 245: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 246: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 247: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 248: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 249: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 250: EXTRN ?P_TryMove@@YA_NPEAVAActor@@AEBU?$TVector2@N@@HPEBUsecplane_t@@_N@Z:PROC ; P_TryMove + Line 251: EXTRN ?P_CheckMove@@YA_NPEAVAActor@@AEBU?$TVector2@N@@H@Z:PROC ; P_CheckMove + Line 252: EXTRN ?P_FindFloorCeiling@@YAXPEAVAActor@@H@Z:PROC ; P_FindFloorCeiling + Line 253: EXTRN ?P_TraceBleed@@YAXHPEAVAActor@@@Z:PROC ; P_TraceBleed + Line 254: EXTRN ?P_DamageMobj@@YAHPEAVAActor@@00HVFName@@HU?$TAngle@N@@@Z:PROC ; P_DamageMobj + Line 255: EXTRN ?AddToBox@FBoundingBox@@QEAAXAEBU?$TVector2@N@@@Z:PROC ; FBoundingBox::AddToBox + Line 256: EXTRN ?BoxOnLineSide@FBoundingBox@@QEBAHPEBUline_t@@@Z:PROC ; FBoundingBox::BoxOnLineSide + Line 257: EXTRN ?SN_StartSequence@@YAPEAVDSeqNode@@PEAUFPolyObj@@HW4seqtype_t@@H_N@Z:PROC ; SN_StartSequence + Line 258: EXTRN ?SN_StopSequence@@YAXPEAUFPolyObj@@@Z:PROC ; SN_StopSequence + Line 259: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 260: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 261: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 262: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 263: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 264: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 265: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 266: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 267: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 268: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 269: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 270: EXTRN ?CallGrind@AActor@@QEAA_N_N@Z:PROC ; AActor::CallGrind + Line 271: EXTRN ?P_LineOpening_3dMidtex@@YA_NPEAVAActor@@PEBUline_t@@AEAUFLineOpening@@_N@Z:PROC ; P_LineOpening_3dMidtex + Line 272: EXTRN ?DelRef@DInterpolation@@QEAAH_N@Z:PROC ; DInterpolation::DelRef + Line 273: EXTRN ?AdjustLine@line_t@@QEAAXXZ:PROC ; line_t::AdjustLine + Line 274: EXTRN ??_EDPolyAction@@UEAAPEAXI@Z:PROC ; DPolyAction::`vector deleting destructor' + Line 275: EXTRN ?SetInterpolation@FPolyObj@@QEAAPEAVDInterpolation@@XZ:PROC ; FPolyObj::SetInterpolation + Line 276: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 277: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 278: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 279: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 280: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 281: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 282: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 283: EXTRN ??$Serialize@UFPolyObj@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUFPolyObj@@PEAPEAU1@@Z:PROC ; Serialize + Line 284: EXTRN ?init@FBlockThingsIterator@@QEAAXAEBVFBoundingBox@@@Z:PROC ; FBlockThingsIterator::init + Line 285: EXTRN ?Next@FBlockThingsIterator@@QEAAPEAVAActor@@_N@Z:PROC ; FBlockThingsIterator::Next + Line 286: EXTRN ?GetPortalOffsetPosition@FLevelLocals@@QEAA?AU?$TVector2@N@@NNNN@Z:PROC ; FLevelLocals::GetPortalOffsetPosition + Line 287: EXTRN ??_EDRotatePoly@@UEAAPEAXI@Z:PROC ; DRotatePoly::`vector deleting destructor' + Line 288: EXTRN ??_EDMovePoly@@UEAAPEAXI@Z:PROC ; DMovePoly::`vector deleting destructor' + Line 289: EXTRN ??_EDMovePolyTo@@UEAAPEAXI@Z:PROC ; DMovePolyTo::`vector deleting destructor' + Line 290: EXTRN ??_EDPolyDoor@@UEAAPEAXI@Z:PROC ; DPolyDoor::`vector deleting destructor' + Line 291: EXTRN __CxxFrameHandler3:PROC + Line 292: EXTRN memcmp:PROC + Line 293: EXTRN _Init_thread_epoch:DWORD + Line 294: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 295: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 296: EXTRN _fltused:DWORD + Line 297: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\polevl.cod (1 hit) + Line 10: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\poly_all.cod (219 hits) + Line 165: EXTRN ??_EStat_polyfps@@UEAAPEAXI@Z:PROC ; Stat_polyfps::`vector deleting destructor' + Line 166: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 167: EXTRN ?RGB256k@@3TColorTable256k@@A:BYTE ; RGB256k + Line 168: EXTRN ?fuzzoffset@swrenderer@@3PAHA:BYTE ; swrenderer::fuzzoffset + Line 169: EXTRN ?fuzz_random_x_offset@swrenderer@@3PAHA:BYTE ; swrenderer::fuzz_random_x_offset + Line 170: EXTRN ?fuzzpos@swrenderer@@3HA:DWORD ; swrenderer::fuzzpos + Line 171: EXTRN ?viewheight@@3HA:DWORD ; viewheight + Line 1633: EXTRN _purecall:PROC + Line 1634: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 1635: EXTRN ??3@YAXPEAX@Z:PROC ; operator delete + Line 1636: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 1637: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 1638: EXTRN atexit:PROC + Line 1639: EXTRN _Init_thread_header:PROC + Line 1640: EXTRN _Init_thread_abort:PROC + Line 1641: EXTRN _Init_thread_footer:PROC + Line 1642: EXTRN __std_terminate:PROC + Line 1643: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 1644: EXTRN ??2@YAPEAX_KAEBUnothrow_t@std@@@Z:PROC ; operator new + Line 1645: EXTRN terminate:PROC + Line 1646: EXTRN __std_exception_copy:PROC + Line 1647: EXTRN __std_exception_destroy:PROC + Line 1648: EXTRN ??_Eexception@std@@UEAAPEAXI@Z:PROC ; std::exception::`vector deleting destructor' + Line 1649: EXTRN __std_reverse_trivially_swappable_8:PROC + Line 1650: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 1651: EXTRN ??_Eruntime_error@std@@UEAAPEAXI@Z:PROC ; std::runtime_error::`vector deleting destructor' + Line 1652: EXTRN ?_Execute_once@std@@YAHAEAUonce_flag@1@P6AHPEAX1PEAPEAX@Z1@Z:PROC ; std::_Execute_once + Line 1653: EXTRN ??_E_System_error@std@@UEAAPEAXI@Z:PROC ; std::_System_error::`vector deleting destructor' + Line 1654: EXTRN ??_Esystem_error@std@@UEAAPEAXI@Z:PROC ; std::system_error::`vector deleting destructor' + Line 1655: EXTRN ?_Syserror_map@std@@YAPEBDH@Z:PROC ; std::_Syserror_map + Line 1656: EXTRN ??_E_Generic_error_category@std@@UEAAPEAXI@Z:PROC ; std::_Generic_error_category::`vector deleting destructor' + Line 1657: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 1658: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 1659: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 1660: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 1661: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 1662: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 1663: EXTRN c_atan2:PROC + Line 1664: EXTRN c_sqrt:PROC + Line 1665: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 1666: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 1667: EXTRN ?CheckFuzz@FRenderStyle@@QEAAXXZ:PROC ; FRenderStyle::CheckFuzz + Line 1668: EXTRN ?IsVisible@FRenderStyle@@QEBA_NN@Z:PROC ; FRenderStyle::IsVisible + Line 1669: EXTRN ?TranslationToTable@@YAPEAUFRemapTable@@H@Z:PROC ; TranslationToTable + Line 1670: EXTRN ?GetSkyCapColor@FTexture@@QEAA?AUPalEntry@@_N@Z:PROC ; FTexture::GetSkyCapColor + Line 1671: EXTRN ?GetSoftwareTexture@FTexture@@QEAAPEAVFSoftwareTexture@@XZ:PROC ; FTexture::GetSoftwareTexture + Line 1672: EXTRN ?PalCheck@FTextureManager@@QEAA?AVFTextureID@@V2@@Z:PROC ; FTextureManager::PalCheck + Line 1673: EXTRN ?_Xbad_function_call@std@@YAXXZ:PROC ; std::_Xbad_function_call + Line 1674: EXTRN _Thrd_start:PROC + Line 1675: EXTRN _Xtime_get_ticks:PROC + Line 1676: EXTRN _Thrd_join:PROC + Line 1677: EXTRN _Thrd_hardware_concurrency:PROC + Line 1678: EXTRN _Thrd_id:PROC + Line 1679: EXTRN _Mtx_init:PROC + Line 1680: EXTRN _Mtx_destroy:PROC + Line 1681: EXTRN _Mtx_init_in_situ:PROC + Line 1682: EXTRN _Mtx_destroy_in_situ:PROC + Line 1683: EXTRN _Mtx_current_owns:PROC + Line 1684: EXTRN _Mtx_lock:PROC + Line 1685: EXTRN _Mtx_unlock:PROC + Line 1686: EXTRN _Cnd_init:PROC + Line 1687: EXTRN _Cnd_destroy:PROC + Line 1688: EXTRN _Cnd_init_in_situ:PROC + Line 1689: EXTRN _Cnd_destroy_in_situ:PROC + Line 1690: EXTRN _Cnd_wait:PROC + Line 1691: EXTRN _Cnd_timedwait:PROC + Line 1692: EXTRN _Cnd_broadcast:PROC + Line 1693: EXTRN _Cnd_signal:PROC + Line 1694: EXTRN _Cnd_do_broadcast_at_thread_exit:PROC + Line 1695: EXTRN ?_Throw_C_error@std@@YAXH@Z:PROC ; std::_Throw_C_error + Line 1696: EXTRN ?_Throw_Cpp_error@std@@YAXH@Z:PROC ; std::_Throw_Cpp_error + Line 1697: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 1698: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 1699: EXTRN ?DrawTexture@DFrameBuffer@@QEAAXPEAVFTexture@@NNHZZ:PROC ; DFrameBuffer::DrawTexture + Line 1700: EXTRN ?AspectPspriteOffset@@YANM@Z:PROC ; AspectPspriteOffset + Line 1701: EXTRN ?AspectMultiplier@@YAHM@Z:PROC ; AspectMultiplier + Line 1702: EXTRN ?CopyPlaneIfValid@secplane_t@@QEBA_NPEAU1@PEBU1@@Z:PROC ; secplane_t::CopyPlaneIfValid + Line 1703: EXTRN ?P_GetPlaneLight@@YAPEAUlightlist_t@@PEAUsector_t@@PEAUsecplane_t@@_N@Z:PROC ; P_GetPlaneLight + Line 1704: EXTRN ?ValidatePortal@sector_t@@QEAAPEAUFSectorPortal@@H@Z:PROC ; sector_t::ValidatePortal + Line 1705: EXTRN ?GetLightLevel@side_t@@QEBAH_NH0PEAH@Z:PROC ; side_t::GetLightLevel + Line 1706: EXTRN ?BuildPolyBSP@subsector_t@@QEAAXXZ:PROC ; subsector_t::BuildPolyBSP + Line 1707: EXTRN ?AdjustFloorClip@@YAXPEBUsector_t@@@Z:PROC ; AdjustFloorClip + Line 1708: EXTRN ?GetFloorLight@@YAHPEBUsector_t@@@Z:PROC ; GetFloorLight + Line 1709: EXTRN ?GetCeilingLight@@YAHPEBUsector_t@@@Z:PROC ; GetCeilingLight + Line 1710: EXTRN ?P_TranslatePortalXY@@YAXPEAUline_t@@AEAN1@Z:PROC ; P_TranslatePortalXY + Line 1711: EXTRN ?P_TranslatePortalAngle@@YAXPEAUline_t@@AEAU?$TAngle@N@@@Z:PROC ; P_TranslatePortalAngle + Line 1712: EXTRN ?P_TranslatePortalZ@@YAXPEAUline_t@@AEAN@Z:PROC ; P_TranslatePortalZ + Line 1713: EXTRN ?GetSpriteFrame@spritedef_t@@QEAA?AVFTextureID@@HHU?$TAngle@N@@PEA_N_N@Z:PROC ; spritedef_t::GetSpriteFrame + Line 1714: EXTRN ?AlterWeaponSprite@AActor@@QEAAXPEAUvisstyle_t@@@Z:PROC ; AActor::AlterWeaponSprite + Line 1715: EXTRN ?IsVisibleToPlayer@AActor@@QEBA_NXZ:PROC ; AActor::IsVisibleToPlayer + Line 1716: EXTRN ?GetRenderStyle@DPSprite@@QEAA?AU?$pair@TFRenderStyle@@M@std@@TFRenderStyle@@N@Z:PROC ; DPSprite::GetRenderStyle + Line 1717: EXTRN ?GetYAdjust@DPSprite@@QEAAM_N@Z:PROC ; DPSprite::GetYAdjust + Line 1718: EXTRN ?P_BobWeapon@@YAXPEAVplayer_t@@PEAM1N@Z:PROC ; P_BobWeapon + Line 1719: EXTRN ?FindPSprite@player_t@@QEAAPEAVDPSprite@@H@Z:PROC ; player_t::FindPSprite + Line 1720: EXTRN ?PointInRenderSubsector@FLevelLocals@@QEAAPEAUsubsector_t@@HH@Z:PROC ; FLevelLocals::PointInRenderSubsector + Line 1721: EXTRN ?loadMatrix@VSMatrix@@QEAAXPEBM@Z:PROC ; VSMatrix::loadMatrix + Line 1722: EXTRN ?inverseMatrix@VSMatrix@@QEAA_NAEAV1@@Z:PROC ; VSMatrix::inverseMatrix + Line 1723: EXTRN ?RenderModel@FModelRenderer@@QEAAXMMMPEAUFSpriteModelFrame@@PEAVAActor@@N@Z:PROC ; FModelRenderer::RenderModel + Line 1724: EXTRN ?RenderHUDModel@FModelRenderer@@QEAAXPEAVDPSprite@@MM@Z:PROC ; FModelRenderer::RenderHUDModel + Line 1725: EXTRN ??_EFModelRenderer@@UEAAPEAXI@Z:PROC ; FModelRenderer::`vector deleting destructor' + Line 1726: EXTRN ??_EIModelVertexBuffer@@UEAAPEAXI@Z:PROC ; IModelVertexBuffer::`vector deleting destructor' + Line 1727: EXTRN ?FindModelFrame@@YAPEAUFSpriteModelFrame@@PEBVPClass@@HH_N@Z:PROC ; FindModelFrame + Line 1728: EXTRN ?IsHUDModelForPlayerAvailable@@YA_NPEAVplayer_t@@@Z:PROC ; IsHUDModelForPlayerAvailable + Line 1729: EXTRN ??0FRenderViewpoint@@QEAA@XZ:PROC ; FRenderViewpoint::FRenderViewpoint + Line 1730: EXTRN ?SetViewAngle@FRenderViewpoint@@QEAAXAEBUFViewWindow@@@Z:PROC ; FRenderViewpoint::SetViewAngle + Line 1731: EXTRN ?R_SetupFrame@@YAXAEAUFRenderViewpoint@@AEAUFViewWindow@@PEAVAActor@@@Z:PROC ; R_SetupFrame + Line 1732: EXTRN ?R_ExecuteSetViewSize@@YAXAEAUFRenderViewpoint@@AEAUFViewWindow@@@Z:PROC ; R_ExecuteSetViewSize + Line 1733: EXTRN ?R_SetWindow@@YAXAEAUFRenderViewpoint@@AEAUFViewWindow@@HHHH_N@Z:PROC ; R_SetWindow + Line 1734: EXTRN ?R_GetGlobVis@@YANAEBUFViewWindow@@N@Z:PROC ; R_GetGlobVis + Line 1735: EXTRN ?R_InitFuzzTable@swrenderer@@YAXH@Z:PROC ; swrenderer::R_InitFuzzTable + Line 1736: EXTRN ?R_UpdateFuzzPosFrameStart@swrenderer@@YAXXZ:PROC ; swrenderer::R_UpdateFuzzPosFrameStart + Line 1737: EXTRN ??_EDrawerCommand@@UEAAPEAXI@Z:PROC ; DrawerCommand::`vector deleting destructor' + Line 1738: EXTRN ??0MemcpyCommand@@QEAA@PEAXPEBXHHHH@Z:PROC ; MemcpyCommand::MemcpyCommand + Line 1739: EXTRN ?Execute@MemcpyCommand@@UEAAXPEAVDrawerThread@@@Z:PROC ; MemcpyCommand::Execute + Line 1740: EXTRN ?Execute@DrawerThreads@@SAXV?$shared_ptr@VDrawerCommandQueue@@@std@@@Z:PROC ; DrawerThreads::Execute + Line 1741: EXTRN ?WaitForWorkers@DrawerThreads@@SAXXZ:PROC ; DrawerThreads::WaitForWorkers + Line 1742: EXTRN ?Instance@DrawerThreads@@CAPEAV1@XZ:PROC ; DrawerThreads::Instance + Line 1743: EXTRN ??0DrawerCommandQueue@@QEAA@PEAVRenderMemory@@@Z:PROC ; DrawerCommandQueue::DrawerCommandQueue + Line 1744: EXTRN ?AllocMemory@DrawerCommandQueue@@AEAAPEAX_K@Z:PROC ; DrawerCommandQueue::AllocMemory + Line 1745: EXTRN ??_EPolyDrawerCommand@@UEAAPEAXI@Z:PROC ; PolyDrawerCommand::`vector deleting destructor' + Line 1746: EXTRN ??_EPolySetTransformCommand@@UEAAPEAXI@Z:PROC ; PolySetTransformCommand::`vector deleting destructor' + Line 1747: EXTRN ??_EPolySetCullCCWCommand@@UEAAPEAXI@Z:PROC ; PolySetCullCCWCommand::`vector deleting destructor' + Line 1748: EXTRN ??_EPolySetTwoSidedCommand@@UEAAPEAXI@Z:PROC ; PolySetTwoSidedCommand::`vector deleting destructor' + Line 1749: EXTRN ??_EPolySetWeaponSceneCommand@@UEAAPEAXI@Z:PROC ; PolySetWeaponSceneCommand::`vector deleting destructor' + Line 1750: EXTRN ??_EPolySetModelVertexShaderCommand@@UEAAPEAXI@Z:PROC ; PolySetModelVertexShaderCommand::`vector deleting destructor' + Line 1751: EXTRN ??_EPolyClearStencilCommand@@UEAAPEAXI@Z:PROC ; PolyClearStencilCommand::`vector deleting destructor' + Line 1752: EXTRN ??_EPolySetViewportCommand@@UEAAPEAXI@Z:PROC ; PolySetViewportCommand::`vector deleting destructor' + Line 1753: EXTRN ??_EDrawPolyTrianglesCommand@@UEAAPEAXI@Z:PROC ; DrawPolyTrianglesCommand::`vector deleting destructor' + Line 1754: EXTRN ??_EDrawRectCommand@@UEAAPEAXI@Z:PROC ; DrawRectCommand::`vector deleting destructor' + Line 1755: EXTRN ??_EPolyTranslucentObject@@UEAAPEAXI@Z:PROC ; PolyTranslucentObject::`vector deleting destructor' + Line 1756: EXTRN ?Instance@CameraLight@swrenderer@@SAPEAV12@XZ:PROC ; swrenderer::CameraLight::Instance + Line 1757: EXTRN ?SetCamera@CameraLight@swrenderer@@QEAAXAEAUFRenderViewpoint@@PEAVDCanvas@@PEAVAActor@@@Z:PROC ; swrenderer::CameraLight::SetCamera + Line 1758: EXTRN ?Clear@RenderMemory@@QEAAXXZ:PROC ; RenderMemory::Clear + Line 1759: EXTRN ?AllocBytes@RenderMemory@@AEAAPEAXH@Z:PROC ; RenderMemory::AllocBytes + Line 1760: EXTRN ?NetUpdate@@YAXXZ:PROC ; NetUpdate + Line 1761: EXTRN ?GetSpecialLights@@YAPEAUFDynamicColormap@@UPalEntry@@0H@Z:PROC ; GetSpecialLights + Line 1762: EXTRN ?GetXY@DBaseDecal@@QEBAXPEAUside_t@@AEAN1@Z:PROC ; DBaseDecal::GetXY + Line 1763: EXTRN ?PeekThreadedErrorPane@@YAXXZ:PROC ; PeekThreadedErrorPane + Line 1764: EXTRN ??_EPolyTranslucentParticle@@UEAAPEAXI@Z:PROC ; PolyTranslucentParticle::`vector deleting destructor' + Line 1765: EXTRN ??_EPolyTranslucent3DFloorPlane@@UEAAPEAXI@Z:PROC ; PolyTranslucent3DFloorPlane::`vector deleting destructor' + Line 1766: EXTRN ??_EPolyModelRenderer@@UEAAPEAXI@Z:PROC ; PolyModelRenderer::`vector deleting destructor' + Line 1767: EXTRN ??_EPolyModelVertexBuffer@@UEAAPEAXI@Z:PROC ; PolyModelVertexBuffer::`vector deleting destructor' + Line 1768: EXTRN ??_EPolyTranslucentWall@@UEAAPEAXI@Z:PROC ; PolyTranslucentWall::`vector deleting destructor' + Line 1769: EXTRN ??_EPolyTranslucentThing@@UEAAPEAXI@Z:PROC ; PolyTranslucentThing::`vector deleting destructor' + Line 1770: EXTRN ??_E?$_Ref_count_obj@VDrawerCommandQueue@@@std@@UEAAPEAXI@Z:PROC ; std::_Ref_count_obj::`vector deleting destructor' + Line 1771: EXTRN ??_E?$_Ref_count_obj@VPolyTriangleThreadData@@@std@@UEAAPEAXI@Z:PROC ; std::_Ref_count_obj::`vector deleting destructor' + Line 1772: EXTRN _CxxThrowException:PROC + Line 1773: EXTRN __CxxFrameHandler3:PROC + Line 1774: EXTRN __chkstk:PROC + Line 1775: EXTRN __libm_sse2_sincos_:PROC + Line 1776: EXTRN __libm_sse2_sincosf_:PROC + Line 1777: EXTRN asin:PROC + Line 1778: EXTRN atan:PROC + Line 1779: EXTRN fmod:PROC + Line 1780: EXTRN memcmp:PROC + Line 1781: EXTRN memcpy:PROC + Line 1782: EXTRN memmove:PROC + Line 1783: EXTRN memset:PROC + Line 1784: EXTRN tan:PROC + Line 1785: EXTRN _Init_thread_epoch:DWORD + Line 1786: EXTRN ?nothrow@std@@3Unothrow_t@1@B:BYTE ; std::nothrow + Line 1787: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 1788: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 1789: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 1790: EXTRN ?RGB32k@@3TColorTable32k@@A:BYTE ; RGB32k + Line 1791: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 1792: EXTRN ?r_spriteadjustSW@@3HA:DWORD ; r_spriteadjustSW + Line 1793: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 1794: EXTRN ?SpecialColormaps@@3V?$TArray@UFSpecialColormap@@U1@@@A:BYTE ; SpecialColormaps + Line 1795: EXTRN ?PerfToMillisec@@3NA:QWORD ; PerfToMillisec + Line 1796: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 1797: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 1798: EXTRN ?SpriteFrames@@3V?$TArray@Uspriteframe_t@@U1@@@A:BYTE ; SpriteFrames + Line 1799: EXTRN ?viewwindowx@@3HA:DWORD ; viewwindowx + Line 1800: EXTRN ?viewwindowy@@3HA:DWORD ; viewwindowy + Line 1801: EXTRN ?viewwidth@@3HA:DWORD ; viewwidth + Line 1802: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 1803: EXTRN ?paused@@3HA:DWORD ; paused + Line 1804: EXTRN ?viewactive@@3_NA:BYTE ; viewactive + Line 1805: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 1806: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 1807: EXTRN ?CrosshairImage@@3PEAVFTexture@@EA:QWORD ; CrosshairImage + Line 1808: EXTRN ?Models@@3V?$TDeletingArray@PEAVFModel@@PEAV1@@@A:BYTE ; Models + Line 1809: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 1810: EXTRN ?r_viewwindow@@3UFViewWindow@@A:BYTE ; r_viewwindow + Line 1811: EXTRN ?R_OldBlend@@3IA:DWORD ; R_OldBlend + Line 1812: EXTRN ?r_multithreaded@@3VFIntCVar@@A:BYTE ; r_multithreaded + Line 1813: EXTRN ?r_drawfuzz@@3VFIntCVar@@A:BYTE ; r_drawfuzz + Line 1814: EXTRN ?transsouls@@3VFFloatCVar@@A:BYTE ; transsouls + Line 1815: EXTRN ?r_dynlights@@3VFBoolCVar@@A:BYTE ; r_dynlights + Line 1816: EXTRN ?FrameCycles@@3Vcycle_t@@A:QWORD ; FrameCycles + Line 1817: EXTRN ?realcolormaps@@3UFSWColormap@@A:BYTE ; realcolormaps + Line 1818: EXTRN ?NormalLight@@3UFDynamicColormap@@A:BYTE ; NormalLight + Line 1819: EXTRN ?FullNormalLight@@3UFDynamicColormap@@A:BYTE ; FullNormalLight + Line 1820: EXTRN ?SpecialSWColormaps@@3V?$TArray@UFSWColormap@@U1@@@A:BYTE ; SpecialSWColormaps + Line 1821: EXTRN ?screenblocks@@3VFIntCVar@@A:BYTE ; screenblocks + Line 1822: EXTRN ?r_visibility@@3VFFloatCVar@@A:BYTE ; r_visibility + Line 1823: EXTRN ?r_models@@3VFBoolCVar@@A:BYTE ; r_models + Line 1824: EXTRN ?r_modelscene@@3_NA:BYTE ; r_modelscene + Line 1825: EXTRN ?r_scene_multithreaded@@3VFIntCVar@@A:BYTE ; r_scene_multithreaded + Line 1826: EXTRN ?gl_particles_style@@3VFIntCVar@@A:BYTE ; gl_particles_style + Line 1827: EXTRN ?r_3dfloors@@3VFIntCVar@@A:BYTE ; r_3dfloors + Line 1828: EXTRN ?r_drawplayersprites@@3VFBoolCVar@@A:BYTE ; r_drawplayersprites + Line 1829: EXTRN ?r_deathcamera@@3VFBoolCVar@@A:BYTE ; r_deathcamera + Line 1830: EXTRN ?r_fullbrightignoresectorcolor@@3VFBoolCVar@@A:BYTE ; r_fullbrightignoresectorcolor + Line 1831: EXTRN ?r_portal_recursions@@3VFIntCVar@@A:BYTE ; r_portal_recursions + Line 1832: EXTRN ?model_distance_cull@@3NA:QWORD ; model_distance_cull + Line 1833: EXTRN ?skyoffset@@3VFFloatCVar@@A:BYTE ; skyoffset + Line 1834: EXTRN ?r_skymode@@3VFIntCVar@@A:BYTE ; r_skymode + Line 1835: EXTRN ?r_UseVanillaTransparency@@3_NA:BYTE ; r_UseVanillaTransparency + Line 1836: EXTRN ?r_debug_disable_vis_filter@@3VFBoolCVar@@A:BYTE ; r_debug_disable_vis_filter + Line 1837: EXTRN ?gl_sclipthreshold@@3VFFloatCVar@@A:BYTE ; gl_sclipthreshold + Line 1838: EXTRN ?r_renderercaps@@3IA:DWORD ; r_renderercaps + Line 1839: EXTRN ?r_drawmirrors@@3VFBoolCVar@@A:BYTE ; r_drawmirrors + Line 1840: EXTRN ?r_fogboundary@@3VFBoolCVar@@A:BYTE ; r_fogboundary + Line 1841: EXTRN __ImageBase:BYTE + Line 1842: EXTRN __isa_available:DWORD + Line 1843: EXTRN _fltused:DWORD + Line 1844: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\polyobjects.cod (19 hits) + Line 28: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 29: EXTRN atexit:PROC + Line 30: EXTRN _Init_thread_header:PROC + Line 31: EXTRN _Init_thread_footer:PROC + Line 32: EXTRN __std_terminate:PROC + Line 33: EXTRN qsort:PROC + Line 34: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 35: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 36: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 37: EXTRN ??0FPolyObj@@QEAA@XZ:PROC ; FPolyObj::FPolyObj + Line 38: EXTRN ?LinkPolyobj@FPolyObj@@QEAAXXZ:PROC ; FPolyObj::LinkPolyobj + Line 39: EXTRN ?CalcCenter@FPolyObj@@QEAAXXZ:PROC ; FPolyObj::CalcCenter + Line 40: EXTRN ?PointInRenderSubsector@FLevelLocals@@QEAAPEAUsubsector_t@@HH@Z:PROC ; FLevelLocals::PointInRenderSubsector + Line 41: EXTRN __CxxFrameHandler3:PROC + Line 42: EXTRN memset:PROC + Line 43: EXTRN _Init_thread_epoch:DWORD + Line 44: EXTRN ?validcount@@3HA:DWORD ; validcount + Line 45: EXTRN _fltused:DWORD + Line 46: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\portal.cod (44 hits) + Line 236: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 237: EXTRN atexit:PROC + Line 238: EXTRN __std_terminate:PROC + Line 239: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 240: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 241: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 242: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 243: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 244: EXTRN c_atan2:PROC + Line 245: EXTRN c_sin:PROC + Line 246: EXTRN c_cos:PROC + Line 247: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 248: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 249: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 250: EXTRN ?BoxOnLineSide@FBoundingBox@@QEBAHPEBUline_t@@@Z:PROC ; FBoundingBox::BoxOnLineSide + Line 251: EXTRN ?CheckPortalPlane@@YAXPEAUsector_t@@H@Z:PROC ; CheckPortalPlane + Line 252: EXTRN ?Next@FLineIdIterator@@QEAAHXZ:PROC ; FLineIdIterator::Next + Line 253: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 254: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 255: EXTRN ?LinkToWorld@AActor@@QEAAXPEAUFLinkContext@@_NPEAUsector_t@@@Z:PROC ; AActor::LinkToWorld + Line 256: EXTRN ?UnlinkFromWorld@AActor@@QEAAXPEAUFLinkContext@@@Z:PROC ; AActor::UnlinkFromWorld + Line 257: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 258: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 259: EXTRN ??0FBlockLinesIterator@@QEAA@PEAUFLevelLocals@@AEBVFBoundingBox@@@Z:PROC ; FBlockLinesIterator::FBlockLinesIterator + Line 260: EXTRN ?Next@FBlockLinesIterator@@QEAAPEAUline_t@@XZ:PROC ; FBlockLinesIterator::Next + Line 261: EXTRN ?AddLineIntercepts@FPathTraverse@@MEAAXHH@Z:PROC ; FPathTraverse::AddLineIntercepts + Line 262: EXTRN ?AddThingIntercepts@FPathTraverse@@MEAAXHHAEAVFBlockThingsIterator@@_N@Z:PROC ; FPathTraverse::AddThingIntercepts + Line 263: EXTRN ?Next@FPathTraverse@@QEAAPEAUintercept_t@@XZ:PROC ; FPathTraverse::Next + Line 264: EXTRN ?init@FPathTraverse@@QEAAXNNNNHN@Z:PROC ; FPathTraverse::init + Line 265: EXTRN ??1FPathTraverse@@UEAA@XZ:PROC ; FPathTraverse::~FPathTraverse + Line 266: EXTRN ??_EFPathTraverse@@UEAAPEAXI@Z:PROC ; FPathTraverse::`vector deleting destructor' + Line 267: EXTRN ?P_InterceptVector@@YANPEBUdivline_t@@0@Z:PROC ; P_InterceptVector + Line 268: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 269: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 270: EXTRN ??_EFLinePortalTraverse@@UEAAPEAXI@Z:PROC ; FLinePortalTraverse::`vector deleting destructor' + Line 271: EXTRN __CxxFrameHandler3:PROC + Line 272: EXTRN memmove:PROC + Line 273: EXTRN memset:PROC + Line 274: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 275: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 276: EXTRN ?validcount@@3HA:DWORD ; validcount + Line 277: EXTRN ?intercepts@FPathTraverse@@1V?$TArray@Uintercept_t@@U1@@@A:BYTE ; FPathTraverse::intercepts + Line 278: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 279: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\portalgroups.cod (25 hits) + Line 55: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 56: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 57: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 58: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 59: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 60: EXTRN atexit:PROC + Line 61: EXTRN _Init_thread_header:PROC + Line 62: EXTRN _Init_thread_abort:PROC + Line 63: EXTRN _Init_thread_footer:PROC + Line 64: EXTRN __std_terminate:PROC + Line 65: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 66: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 67: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 68: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 69: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 70: EXTRN c_atan2:PROC + Line 71: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 72: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 73: EXTRN __CxxFrameHandler3:PROC + Line 74: EXTRN memcpy:PROC + Line 75: EXTRN memset:PROC + Line 76: EXTRN _Init_thread_epoch:DWORD + Line 77: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 78: EXTRN _fltused:DWORD + Line 79: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\pow.cod (16 hits) + Line 29: EXTRN mtherr:PROC + Line 30: EXTRN frexp:PROC + Line 31: EXTRN ldexp:PROC + Line 32: EXTRN polevl:PROC + Line 33: EXTRN p1evl:PROC + Line 34: EXTRN c_powi:PROC + Line 35: EXTRN signbit:PROC + Line 36: EXTRN isnan:PROC + Line 37: EXTRN isfinite:PROC + Line 38: EXTRN floor:PROC + Line 39: EXTRN MAXNUM:QWORD + Line 40: EXTRN INFINITY:QWORD + Line 41: EXTRN NAN:QWORD + Line 42: EXTRN NEGZERO:QWORD + Line 43: EXTRN __ImageBase:BYTE + Line 44: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\powi.cod (8 hits) + Line 16: EXTRN mtherr:PROC + Line 17: EXTRN frexp:PROC + Line 18: EXTRN NEGZERO:QWORD + Line 19: EXTRN INFINITY:QWORD + Line 20: EXTRN MAXLOG:QWORD + Line 21: EXTRN MINLOG:QWORD + Line 22: EXTRN LOGE2:QWORD + Line 23: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\quantity.cod (8 hits) + Line 27: EXTRN strtod:PROC + Line 28: EXTRN strtol:PROC + Line 29: EXTRN ?ctl_cmsg@TimidityPlus@@YAXHHPEBDZZ:PROC ; TimidityPlus::ctl_cmsg + Line 30: EXTRN pow:PROC + Line 31: EXTRN ?playback_rate@TimidityPlus@@3HA:DWORD ; TimidityPlus::playback_rate + Line 32: EXTRN ?control_ratio@TimidityPlus@@3HA:DWORD ; TimidityPlus::control_ratio + Line 33: EXTRN __ImageBase:BYTE + Line 34: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\r_all.cod (363 hits) + Line 70: EXTRN ??_EStat_fps@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::Stat_fps::`vector deleting destructor' + Line 71: EXTRN ??_EStat_fps_accumulated@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::Stat_fps_accumulated::`vector deleting destructor' + Line 72: EXTRN ??_EStat_wallcycles@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::Stat_wallcycles::`vector deleting destructor' + Line 73: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 74: EXTRN ?usergame@@3_NA:BYTE ; usergame + Line 75: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 1478: EXTRN _purecall:PROC + Line 1479: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 1480: EXTRN ??3@YAXPEAX@Z:PROC ; operator delete + Line 1481: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 1482: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 1483: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 1484: EXTRN atexit:PROC + Line 1485: EXTRN _Init_thread_header:PROC + Line 1486: EXTRN _Init_thread_footer:PROC + Line 1487: EXTRN __std_terminate:PROC + Line 1488: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 1489: EXTRN ??2@YAPEAX_KAEBUnothrow_t@std@@@Z:PROC ; operator new + Line 1490: EXTRN atoi:PROC + Line 1491: EXTRN _dtest:PROC + Line 1492: EXTRN log2:PROC + Line 1493: EXTRN terminate:PROC + Line 1494: EXTRN __std_exception_copy:PROC + Line 1495: EXTRN __std_exception_destroy:PROC + Line 1496: EXTRN ??_Eexception@std@@UEAAPEAXI@Z:PROC ; std::exception::`vector deleting destructor' + Line 1497: EXTRN strnicmp:PROC + Line 1498: EXTRN __std_reverse_trivially_swappable_8:PROC + Line 1499: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 1500: EXTRN ??_Eruntime_error@std@@UEAAPEAXI@Z:PROC ; std::runtime_error::`vector deleting destructor' + Line 1501: EXTRN ?_Execute_once@std@@YAHAEAUonce_flag@1@P6AHPEAX1PEAPEAX@Z1@Z:PROC ; std::_Execute_once + Line 1502: EXTRN ??_E_System_error@std@@UEAAPEAXI@Z:PROC ; std::_System_error::`vector deleting destructor' + Line 1503: EXTRN ??_Esystem_error@std@@UEAAPEAXI@Z:PROC ; std::system_error::`vector deleting destructor' + Line 1504: EXTRN ?_Syserror_map@std@@YAPEBDH@Z:PROC ; std::_Syserror_map + Line 1505: EXTRN ??_E_Generic_error_category@std@@UEAAPEAXI@Z:PROC ; std::_Generic_error_category::`vector deleting destructor' + Line 1506: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 1507: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 1508: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 1509: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 1510: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 1511: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 1512: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 1513: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 1514: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 1515: EXTRN mysnprintf:PROC + Line 1516: EXTRN c_atan2:PROC + Line 1517: EXTRN c_tan:PROC + Line 1518: EXTRN c_sqrt:PROC + Line 1519: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 1520: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 1521: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 1522: EXTRN ?ForceSet@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@_N@Z:PROC ; FBaseCVar::ForceSet + Line 1523: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 1524: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 1525: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 1526: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 1527: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 1528: EXTRN ?BestColor@@YAHPEBIHHHHH@Z:PROC ; BestColor + Line 1529: EXTRN ?DoBlending@@YAXPEBUPalEntry@@PEAU1@HHHHH@Z:PROC ; DoBlending + Line 1530: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 1531: EXTRN ?CheckFuzz@FRenderStyle@@QEAAXXZ:PROC ; FRenderStyle::CheckFuzz + Line 1532: EXTRN ?IsVisible@FRenderStyle@@QEBA_NN@Z:PROC ; FRenderStyle::IsVisible + Line 1533: EXTRN ?TranslationToTable@@YAPEAUFRemapTable@@H@Z:PROC ; TranslationToTable + Line 1534: EXTRN ?GetSkyCapColor@FTexture@@QEAA?AUPalEntry@@_N@Z:PROC ; FTexture::GetSkyCapColor + Line 1535: EXTRN ?GetRawTexture@FTexture@@QEAAPEAV1@XZ:PROC ; FTexture::GetRawTexture + Line 1536: EXTRN ?GetSoftwareTexture@FTexture@@QEAAPEAVFSoftwareTexture@@XZ:PROC ; FTexture::GetSoftwareTexture + Line 1537: EXTRN ?PalCheck@FTextureManager@@QEAA?AVFTextureID@@V2@@Z:PROC ; FTextureManager::PalCheck + Line 1538: EXTRN _Thrd_start:PROC + Line 1539: EXTRN _Xtime_get_ticks:PROC + Line 1540: EXTRN _Thrd_join:PROC + Line 1541: EXTRN _Thrd_hardware_concurrency:PROC + Line 1542: EXTRN _Thrd_id:PROC + Line 1543: EXTRN _Mtx_init:PROC + Line 1544: EXTRN _Mtx_destroy:PROC + Line 1545: EXTRN _Mtx_init_in_situ:PROC + Line 1546: EXTRN _Mtx_destroy_in_situ:PROC + Line 1547: EXTRN _Mtx_current_owns:PROC + Line 1548: EXTRN _Mtx_lock:PROC + Line 1549: EXTRN _Mtx_unlock:PROC + Line 1550: EXTRN _Cnd_init:PROC + Line 1551: EXTRN _Cnd_destroy:PROC + Line 1552: EXTRN _Cnd_init_in_situ:PROC + Line 1553: EXTRN _Cnd_destroy_in_situ:PROC + Line 1554: EXTRN _Cnd_wait:PROC + Line 1555: EXTRN _Cnd_timedwait:PROC + Line 1556: EXTRN _Cnd_broadcast:PROC + Line 1557: EXTRN _Cnd_signal:PROC + Line 1558: EXTRN _Cnd_do_broadcast_at_thread_exit:PROC + Line 1559: EXTRN ?_Throw_C_error@std@@YAXH@Z:PROC ; std::_Throw_C_error + Line 1560: EXTRN ?_Throw_Cpp_error@std@@YAXH@Z:PROC ; std::_Throw_Cpp_error + Line 1561: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 1562: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 1563: EXTRN ?I_GetNumaNodeCount@@YAHXZ:PROC ; I_GetNumaNodeCount + Line 1564: EXTRN ?I_GetNumaNodeThreadCount@@YAHH@Z:PROC ; I_GetNumaNodeThreadCount + Line 1565: EXTRN ?I_SetThreadNumaNode@@YAXAEAVthread@std@@H@Z:PROC ; I_SetThreadNumaNode + Line 1566: EXTRN ??0FMemArena@@QEAA@_K@Z:PROC ; FMemArena::FMemArena + Line 1567: EXTRN ??1FMemArena@@QEAA@XZ:PROC ; FMemArena::~FMemArena + Line 1568: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 1569: EXTRN ?FreeAll@FMemArena@@QEAAXXZ:PROC ; FMemArena::FreeAll + Line 1570: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 1571: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 1572: EXTRN ??0DCanvas@@QEAA@HH_N@Z:PROC ; DCanvas::DCanvas + Line 1573: EXTRN ??1DCanvas@@QEAA@XZ:PROC ; DCanvas::~DCanvas + Line 1574: EXTRN ?GetFlashedPalette@DFrameBuffer@@QEAAXQEAUPalEntry@@@Z:PROC ; DFrameBuffer::GetFlashedPalette + Line 1575: EXTRN ?DrawTexture@DFrameBuffer@@QEAAXPEAVFTexture@@NNHZZ:PROC ; DFrameBuffer::DrawTexture + Line 1576: EXTRN ?V_GetColorFromString@@YAHPEBIPEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColorFromString + Line 1577: EXTRN ?V_GetColorStringByName@@YA?AVFString@@PEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColorStringByName + Line 1578: EXTRN ?ActiveRatio@@YAMHHPEAM@Z:PROC ; ActiveRatio + Line 1579: EXTRN ?AspectBaseHeight@@YAHM@Z:PROC ; AspectBaseHeight + Line 1580: EXTRN ?AspectPspriteOffset@@YANM@Z:PROC ; AspectPspriteOffset + Line 1581: EXTRN ?AspectMultiplier@@YAHM@Z:PROC ; AspectMultiplier + Line 1582: EXTRN ?AspectTallerThanWide@@YA_NM@Z:PROC ; AspectTallerThanWide + Line 1583: EXTRN ?CopyPlaneIfValid@secplane_t@@QEBA_NPEAU1@PEBU1@@Z:PROC ; secplane_t::CopyPlaneIfValid + Line 1584: EXTRN ?P_GetPlaneLight@@YAPEAUlightlist_t@@PEAUsector_t@@PEAUsecplane_t@@_N@Z:PROC ; P_GetPlaneLight + Line 1585: EXTRN ?ValidatePortal@sector_t@@QEAAPEAUFSectorPortal@@H@Z:PROC ; sector_t::ValidatePortal + Line 1586: EXTRN ?GetLightLevel@side_t@@QEBAH_NH0PEAH@Z:PROC ; side_t::GetLightLevel + Line 1587: EXTRN ?BuildPolyBSP@subsector_t@@QEAAXXZ:PROC ; subsector_t::BuildPolyBSP + Line 1588: EXTRN ?AdjustFloorClip@@YAXPEBUsector_t@@@Z:PROC ; AdjustFloorClip + Line 1589: EXTRN ?GetFloorLight@@YAHPEBUsector_t@@@Z:PROC ; GetFloorLight + Line 1590: EXTRN ?GetCeilingLight@@YAHPEBUsector_t@@@Z:PROC ; GetCeilingLight + Line 1591: EXTRN ?P_ClipLineToPortal@@YA_NPEAUline_t@@0U?$TVector2@N@@_N2@Z:PROC ; P_ClipLineToPortal + Line 1592: EXTRN ?P_TranslatePortalXY@@YAXPEAUline_t@@AEAN1@Z:PROC ; P_TranslatePortalXY + Line 1593: EXTRN ?P_TranslatePortalAngle@@YAXPEAUline_t@@AEAU?$TAngle@N@@@Z:PROC ; P_TranslatePortalAngle + Line 1594: EXTRN ?P_TranslatePortalZ@@YAXPEAUline_t@@AEAN@Z:PROC ; P_TranslatePortalZ + Line 1595: EXTRN ?GetSpriteFrame@spritedef_t@@QEAA?AVFTextureID@@HHU?$TAngle@N@@PEA_N_N@Z:PROC ; spritedef_t::GetSpriteFrame + Line 1596: EXTRN ?AlterWeaponSprite@AActor@@QEAAXPEAUvisstyle_t@@@Z:PROC ; AActor::AlterWeaponSprite + Line 1597: EXTRN ?IsVisibleToPlayer@AActor@@QEBA_NXZ:PROC ; AActor::IsVisibleToPlayer + Line 1598: EXTRN ?IsInsideVisibleAngles@AActor@@QEBA_NXZ:PROC ; AActor::IsInsideVisibleAngles + Line 1599: EXTRN ?GetRenderStyle@DPSprite@@QEAA?AU?$pair@TFRenderStyle@@M@std@@TFRenderStyle@@N@Z:PROC ; DPSprite::GetRenderStyle + Line 1600: EXTRN ?GetYAdjust@DPSprite@@QEAAM_N@Z:PROC ; DPSprite::GetYAdjust + Line 1601: EXTRN ?P_BobWeapon@@YAXPEAVplayer_t@@PEAM1N@Z:PROC ; P_BobWeapon + Line 1602: EXTRN ?SendPitchLimits@player_t@@QEBAXXZ:PROC ; player_t::SendPitchLimits + Line 1603: EXTRN ?FindPSprite@player_t@@QEAAPEAVDPSprite@@H@Z:PROC ; player_t::FindPSprite + Line 1604: EXTRN ?P_CheckPlayerSprite@@YAXPEAVAActor@@AEAHAEAU?$TVector2@N@@@Z:PROC ; P_CheckPlayerSprite + Line 1605: EXTRN ?UpdateAll@FCanvasTextureInfo@@QEAAXV?$function@$$A6AXPEAVAActor@@PEAVFCanvasTexture@@N@Z@std@@@Z:PROC ; FCanvasTextureInfo::UpdateAll + Line 1606: EXTRN ?UpdatePixels@FSWCanvasTexture@@QEAAX_N@Z:PROC ; FSWCanvasTexture::UpdatePixels + Line 1607: EXTRN ??_ESWPixelFormatDrawers@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::SWPixelFormatDrawers::`vector deleting destructor' + Line 1608: EXTRN ?GetXY@DBaseDecal@@QEBAXPEAUside_t@@AEAN1@Z:PROC ; DBaseDecal::GetXY + Line 1609: EXTRN ??_EVisibleSegmentRenderer@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::VisibleSegmentRenderer::`vector deleting destructor' + Line 1610: EXTRN ??_ESWRenderLine@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::SWRenderLine::`vector deleting destructor' + Line 1611: EXTRN ??0FRenderViewpoint@@QEAA@XZ:PROC ; FRenderViewpoint::FRenderViewpoint + Line 1612: EXTRN ?SetViewAngle@FRenderViewpoint@@QEAAXAEBUFViewWindow@@@Z:PROC ; FRenderViewpoint::SetViewAngle + Line 1613: EXTRN ?R_SetFOV@@YAXAEAUFRenderViewpoint@@U?$TAngle@N@@@Z:PROC ; R_SetFOV + Line 1614: EXTRN ?R_SetupFrame@@YAXAEAUFRenderViewpoint@@AEAUFViewWindow@@PEAVAActor@@@Z:PROC ; R_SetupFrame + Line 1615: EXTRN ?R_ExecuteSetViewSize@@YAXAEAUFRenderViewpoint@@AEAUFViewWindow@@@Z:PROC ; R_ExecuteSetViewSize + Line 1616: EXTRN ?R_SetWindow@@YAXAEAUFRenderViewpoint@@AEAUFViewWindow@@HHHH_N@Z:PROC ; R_SetWindow + Line 1617: EXTRN ?R_ClampVisibility@@YANN@Z:PROC ; R_ClampVisibility + Line 1618: EXTRN ?Null@Mat4f@@SA?AV1@XZ:PROC ; Mat4f::Null + Line 1619: EXTRN ?Translate@Mat4f@@SA?AV1@MMM@Z:PROC ; Mat4f::Translate + Line 1620: EXTRN ?Scale@Mat4f@@SA?AV1@MMM@Z:PROC ; Mat4f::Scale + Line 1621: EXTRN ?Rotate@Mat4f@@SA?AV1@MMMM@Z:PROC ; Mat4f::Rotate + Line 1622: EXTRN ?SwapYZ@Mat4f@@SA?AV1@XZ:PROC ; Mat4f::SwapYZ + Line 1623: EXTRN ?Frustum@Mat4f@@SA?AV1@MMMMMMW4Handedness@@W4ClipZRange@@@Z:PROC ; Mat4f::Frustum + Line 1624: EXTRN ??DMat4f@@QEBA?AV?$Vec4@M@@AEBV1@@Z:PROC ; Mat4f::operator* + Line 1625: EXTRN ??DMat4f@@QEBA?AV0@AEBV0@@Z:PROC ; Mat4f::operator* + Line 1626: EXTRN ??_EVisibleSprite@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::VisibleSprite::`vector deleting destructor' + Line 1627: EXTRN ??_EDrawerCommand@@UEAAPEAXI@Z:PROC ; DrawerCommand::`vector deleting destructor' + Line 1628: EXTRN ??_EMemcpyCommand@@UEAAPEAXI@Z:PROC ; MemcpyCommand::`vector deleting destructor' + Line 1629: EXTRN ??_EDrawFuzzColumnRGBACommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawFuzzColumnRGBACommand::`vector deleting destructor' + Line 1630: EXTRN ??_EDrawScaledFuzzColumnRGBACommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawScaledFuzzColumnRGBACommand::`vector deleting destructor' + Line 1631: EXTRN ??_EFillSpanRGBACommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::FillSpanRGBACommand::`vector deleting destructor' + Line 1632: EXTRN ??_EDrawFogBoundaryLineRGBACommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawFogBoundaryLineRGBACommand::`vector deleting destructor' + Line 1633: EXTRN ??_EDrawTiltedSpanRGBACommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawTiltedSpanRGBACommand::`vector deleting destructor' + Line 1634: EXTRN ??_EDrawColoredSpanRGBACommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawColoredSpanRGBACommand::`vector deleting destructor' + Line 1635: EXTRN ??_EDrawParticleColumnRGBACommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawParticleColumnRGBACommand::`vector deleting destructor' + Line 1636: EXTRN ??_EDrawVoxelBlocksRGBACommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawVoxelBlocksRGBACommand::`vector deleting destructor' + Line 1637: EXTRN ??_ESWTruecolorDrawers@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::SWTruecolorDrawers::`vector deleting destructor' + Line 1638: EXTRN ??_EPalWall1Command@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::PalWall1Command::`vector deleting destructor' + Line 1639: EXTRN ??_EDrawWall1PalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawWall1PalCommand::`vector deleting destructor' + Line 1640: EXTRN ??_EDrawWallMasked1PalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawWallMasked1PalCommand::`vector deleting destructor' + Line 1641: EXTRN ??_EDrawWallAdd1PalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawWallAdd1PalCommand::`vector deleting destructor' + Line 1642: EXTRN ??_EDrawWallAddClamp1PalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawWallAddClamp1PalCommand::`vector deleting destructor' + Line 1643: EXTRN ??_EDrawWallSubClamp1PalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawWallSubClamp1PalCommand::`vector deleting destructor' + Line 1644: EXTRN ??_EDrawWallRevSubClamp1PalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawWallRevSubClamp1PalCommand::`vector deleting destructor' + Line 1645: EXTRN ??_EPalSkyCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::PalSkyCommand::`vector deleting destructor' + Line 1646: EXTRN ??_EDrawSingleSky1PalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSingleSky1PalCommand::`vector deleting destructor' + Line 1647: EXTRN ??_EDrawDoubleSky1PalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawDoubleSky1PalCommand::`vector deleting destructor' + Line 1648: EXTRN ??_EPalColumnCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::PalColumnCommand::`vector deleting destructor' + Line 1649: EXTRN ??_EDrawColumnPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawColumnPalCommand::`vector deleting destructor' + Line 1650: EXTRN ??_EFillColumnPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::FillColumnPalCommand::`vector deleting destructor' + Line 1651: EXTRN ??_EFillColumnAddPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::FillColumnAddPalCommand::`vector deleting destructor' + Line 1652: EXTRN ??_EFillColumnAddClampPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::FillColumnAddClampPalCommand::`vector deleting destructor' + Line 1653: EXTRN ??_EFillColumnSubClampPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::FillColumnSubClampPalCommand::`vector deleting destructor' + Line 1654: EXTRN ??_EFillColumnRevSubClampPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::FillColumnRevSubClampPalCommand::`vector deleting destructor' + Line 1655: EXTRN ??_EDrawColumnAddPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawColumnAddPalCommand::`vector deleting destructor' + Line 1656: EXTRN ??_EDrawColumnTranslatedPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawColumnTranslatedPalCommand::`vector deleting destructor' + Line 1657: EXTRN ??_EDrawColumnTlatedAddPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawColumnTlatedAddPalCommand::`vector deleting destructor' + Line 1658: EXTRN ??_EDrawColumnShadedPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawColumnShadedPalCommand::`vector deleting destructor' + Line 1659: EXTRN ??_EDrawColumnAddClampShadedPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawColumnAddClampShadedPalCommand::`vector deleting destructor' + Line 1660: EXTRN ??_EDrawColumnAddClampPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawColumnAddClampPalCommand::`vector deleting destructor' + Line 1661: EXTRN ??_EDrawColumnAddClampTranslatedPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawColumnAddClampTranslatedPalCommand::`vector deleting destructor' + Line 1662: EXTRN ??_EDrawColumnSubClampPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawColumnSubClampPalCommand::`vector deleting destructor' + Line 1663: EXTRN ??_EDrawColumnSubClampTranslatedPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawColumnSubClampTranslatedPalCommand::`vector deleting destructor' + Line 1664: EXTRN ??_EDrawColumnRevSubClampPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawColumnRevSubClampPalCommand::`vector deleting destructor' + Line 1665: EXTRN ??_EDrawColumnRevSubClampTranslatedPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawColumnRevSubClampTranslatedPalCommand::`vector deleting destructor' + Line 1666: EXTRN ??_EDrawFuzzColumnPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawFuzzColumnPalCommand::`vector deleting destructor' + Line 1667: EXTRN ??_EDrawScaledFuzzColumnPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawScaledFuzzColumnPalCommand::`vector deleting destructor' + Line 1668: EXTRN ??_EPalSpanCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::PalSpanCommand::`vector deleting destructor' + Line 1669: EXTRN ??_EDrawSpanPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSpanPalCommand::`vector deleting destructor' + Line 1670: EXTRN ??_EDrawSpanMaskedPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSpanMaskedPalCommand::`vector deleting destructor' + Line 1671: EXTRN ??_EDrawSpanTranslucentPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSpanTranslucentPalCommand::`vector deleting destructor' + Line 1672: EXTRN ??_EDrawSpanMaskedTranslucentPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSpanMaskedTranslucentPalCommand::`vector deleting destructor' + Line 1673: EXTRN ??_EDrawSpanAddClampPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSpanAddClampPalCommand::`vector deleting destructor' + Line 1674: EXTRN ??_EDrawSpanMaskedAddClampPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSpanMaskedAddClampPalCommand::`vector deleting destructor' + Line 1675: EXTRN ??_EFillSpanPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::FillSpanPalCommand::`vector deleting destructor' + Line 1676: EXTRN ??_EDrawTiltedSpanPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawTiltedSpanPalCommand::`vector deleting destructor' + Line 1677: EXTRN ??_EDrawColoredSpanPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawColoredSpanPalCommand::`vector deleting destructor' + Line 1678: EXTRN ??_EDrawFogBoundaryLinePalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawFogBoundaryLinePalCommand::`vector deleting destructor' + Line 1679: EXTRN ??_EDrawParticleColumnPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawParticleColumnPalCommand::`vector deleting destructor' + Line 1680: EXTRN ??_EDrawVoxelBlocksPalCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawVoxelBlocksPalCommand::`vector deleting destructor' + Line 1681: EXTRN ??_ESWPalDrawers@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::SWPalDrawers::`vector deleting destructor' + Line 1682: EXTRN ?M_CreatePNG@@YA_NPEAVFileWriter@@PEBEPEBUPalEntry@@W4ESSType@@HHHM@Z:PROC ; M_CreatePNG + Line 1683: EXTRN ??_EFRenderer@@UEAAPEAXI@Z:PROC ; FRenderer::`vector deleting destructor' + Line 1684: EXTRN ??_EFSoftwareRenderer@@UEAAPEAXI@Z:PROC ; FSoftwareRenderer::`vector deleting destructor' + Line 1685: EXTRN ?GetSlabData@FVoxelMipLevel@@QEBAPEAE_N@Z:PROC ; FVoxelMipLevel::GetSlabData + Line 1686: EXTRN ?CreateBgraSlabData@FVoxel@@QEAAXXZ:PROC ; FVoxel::CreateBgraSlabData + Line 1687: EXTRN ?Remap@FVoxel@@QEAAXXZ:PROC ; FVoxel::Remap + Line 1688: EXTRN ?Instance@PolyZBuffer@@SAPEAV1@XZ:PROC ; PolyZBuffer::Instance + Line 1689: EXTRN ?Instance@PolyStencilBuffer@@SAPEAV1@XZ:PROC ; PolyStencilBuffer::Instance + Line 1690: EXTRN ?SetLight@PolyDrawArgs@@QEAAXPEAUFSWColormap@@IN_N@Z:PROC ; PolyDrawArgs::SetLight + Line 1691: EXTRN ?SetStyle@PolyDrawArgs@@QEAAXAEBTFRenderStyle@@NIIPEAVFSoftwareTexture@@_N@Z:PROC ; PolyDrawArgs::SetStyle + Line 1692: EXTRN ?ResizeBuffers@PolyTriangleDrawer@@SAXPEAVDCanvas@@@Z:PROC ; PolyTriangleDrawer::ResizeBuffers + Line 1693: EXTRN ?ClearStencil@PolyTriangleDrawer@@SAXAEBV?$shared_ptr@VDrawerCommandQueue@@@std@@E@Z:PROC ; PolyTriangleDrawer::ClearStencil + Line 1694: EXTRN ?SetViewport@PolyTriangleDrawer@@SAXAEBV?$shared_ptr@VDrawerCommandQueue@@@std@@HHHHPEAVDCanvas@@@Z:PROC ; PolyTriangleDrawer::SetViewport + Line 1695: EXTRN ?SetCullCCW@PolyTriangleDrawer@@SAXAEBV?$shared_ptr@VDrawerCommandQueue@@@std@@_N@Z:PROC ; PolyTriangleDrawer::SetCullCCW + Line 1696: EXTRN ?SetTwoSided@PolyTriangleDrawer@@SAXAEBV?$shared_ptr@VDrawerCommandQueue@@@std@@_N@Z:PROC ; PolyTriangleDrawer::SetTwoSided + Line 1697: EXTRN ?SetWeaponScene@PolyTriangleDrawer@@SAXAEBV?$shared_ptr@VDrawerCommandQueue@@@std@@_N@Z:PROC ; PolyTriangleDrawer::SetWeaponScene + Line 1698: EXTRN ?SetModelVertexShader@PolyTriangleDrawer@@SAXAEBV?$shared_ptr@VDrawerCommandQueue@@@std@@HHM@Z:PROC ; PolyTriangleDrawer::SetModelVertexShader + Line 1699: EXTRN ?SetTransform@PolyTriangleDrawer@@SAXAEBV?$shared_ptr@VDrawerCommandQueue@@@std@@PEBVMat4f@@1@Z:PROC ; PolyTriangleDrawer::SetTransform + Line 1700: EXTRN ?DrawArray@PolyTriangleDrawer@@SAXAEBV?$shared_ptr@VDrawerCommandQueue@@@std@@AEBVPolyDrawArgs@@PEBXHW4PolyDrawMode@@@Z:PROC ; PolyTriangleDrawer::DrawArray + Line 1701: EXTRN ?DrawElements@PolyTriangleDrawer@@SAXAEBV?$shared_ptr@VDrawerCommandQueue@@@std@@AEBVPolyDrawArgs@@PEBXPEBIHW4PolyDrawMode@@@Z:PROC ; PolyTriangleDrawer::DrawElements + Line 1702: EXTRN ?RenderView@PolyRenderer@@QEAAXPEAVplayer_t@@PEAVDCanvas@@PEAX@Z:PROC ; PolyRenderer::RenderView + Line 1703: EXTRN ?RenderViewToCanvas@PolyRenderer@@QEAAXPEAVAActor@@PEAVDCanvas@@HHHH_N@Z:PROC ; PolyRenderer::RenderViewToCanvas + Line 1704: EXTRN ?RenderRemainingPlayerSprites@PolyRenderer@@QEAAXXZ:PROC ; PolyRenderer::RenderRemainingPlayerSprites + Line 1705: EXTRN ?Instance@PolyRenderer@@SAPEAV1@XZ:PROC ; PolyRenderer::Instance + Line 1706: EXTRN ?BeginPrecaching@FImageSource@@SAXXZ:PROC ; FImageSource::BeginPrecaching + Line 1707: EXTRN ?EndPrecaching@FImageSource@@SAXXZ:PROC ; FImageSource::EndPrecaching + Line 1708: EXTRN ?RegisterForPrecache@FImageSource@@SAXPEAV1@@Z:PROC ; FImageSource::RegisterForPrecache + Line 1709: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 1710: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 1711: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 1712: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 1713: EXTRN ?GetNumLumps@FWadCollection@@QEBAHXZ:PROC ; FWadCollection::GetNumLumps + Line 1714: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 1715: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 1716: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 1717: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 1718: EXTRN ??_EDepthColumnCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DepthColumnCommand::`vector deleting destructor' + Line 1719: EXTRN ??_EDepthSpanCommand@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DepthSpanCommand::`vector deleting destructor' + Line 1720: EXTRN ??_EDrawSkySingle32Command@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSkySingle32Command::`vector deleting destructor' + Line 1721: EXTRN ??_EDrawSkyDouble32Command@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSkyDouble32Command::`vector deleting destructor' + Line 1722: EXTRN ??_E?$DrawSprite32T@UOpaqueSprite@DrawSprite32TModes@swrenderer@@UTextureSampler@23@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSprite32T::`vector deleting destructor' + Line 1723: EXTRN ?PeekThreadedErrorPane@@YAXXZ:PROC ; PeekThreadedErrorPane + Line 1724: EXTRN ?NetUpdate@@YAXXZ:PROC ; NetUpdate + Line 1725: EXTRN ??_EFarClipLine@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::FarClipLine::`vector deleting destructor' + Line 1726: EXTRN ??_ERenderSprite@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::RenderSprite::`vector deleting destructor' + Line 1727: EXTRN ??_ERenderWallSprite@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::RenderWallSprite::`vector deleting destructor' + Line 1728: EXTRN ??_ERenderVoxel@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::RenderVoxel::`vector deleting destructor' + Line 1729: EXTRN ??_ERenderParticle@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::RenderParticle::`vector deleting destructor' + Line 1730: EXTRN ?loadMatrix@VSMatrix@@QEAAXPEBM@Z:PROC ; VSMatrix::loadMatrix + Line 1731: EXTRN ?inverseMatrix@VSMatrix@@QEAA_NAEAV1@@Z:PROC ; VSMatrix::inverseMatrix + Line 1732: EXTRN ?RenderModel@FModelRenderer@@QEAAXMMMPEAUFSpriteModelFrame@@PEAVAActor@@N@Z:PROC ; FModelRenderer::RenderModel + Line 1733: EXTRN ?RenderHUDModel@FModelRenderer@@QEAAXPEAVDPSprite@@MM@Z:PROC ; FModelRenderer::RenderHUDModel + Line 1734: EXTRN ??_EFModelRenderer@@UEAAPEAXI@Z:PROC ; FModelRenderer::`vector deleting destructor' + Line 1735: EXTRN ??_EIModelVertexBuffer@@UEAAPEAXI@Z:PROC ; IModelVertexBuffer::`vector deleting destructor' + Line 1736: EXTRN ?FindModelFrame@@YAPEAUFSpriteModelFrame@@PEBVPClass@@HH_N@Z:PROC ; FindModelFrame + Line 1737: EXTRN ?IsHUDModelForPlayerAvailable@@YA_NPEAVplayer_t@@@Z:PROC ; IsHUDModelForPlayerAvailable + Line 1738: EXTRN ??_ERenderModel@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::RenderModel::`vector deleting destructor' + Line 1739: EXTRN ??_ESWModelRenderer@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::SWModelRenderer::`vector deleting destructor' + Line 1740: EXTRN ??_ESWModelVertexBuffer@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::SWModelVertexBuffer::`vector deleting destructor' + Line 1741: EXTRN ?P_VanillaPointOnLineSide@@YAHNNPEBUline_t@@@Z:PROC ; P_VanillaPointOnLineSide + Line 1742: EXTRN ??_E?$DrawWall32T@UOpaqueWall@DrawWall32TModes@swrenderer@@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawWall32T::`vector deleting destructor' + Line 1743: EXTRN ??_E?$DrawWall32T@UMaskedWall@DrawWall32TModes@swrenderer@@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawWall32T::`vector deleting destructor' + Line 1744: EXTRN ??_E?$DrawWall32T@UAddClampWall@DrawWall32TModes@swrenderer@@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawWall32T::`vector deleting destructor' + Line 1745: EXTRN ??_E?$DrawWall32T@USubClampWall@DrawWall32TModes@swrenderer@@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawWall32T::`vector deleting destructor' + Line 1746: EXTRN ??_E?$DrawWall32T@URevSubClampWall@DrawWall32TModes@swrenderer@@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawWall32T::`vector deleting destructor' + Line 1747: EXTRN ??_E?$DrawSprite32T@UOpaqueSprite@DrawSprite32TModes@swrenderer@@UFillSampler@23@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSprite32T::`vector deleting destructor' + Line 1748: EXTRN ??_E?$DrawSprite32T@UAddClampSprite@DrawSprite32TModes@swrenderer@@UFillSampler@23@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSprite32T::`vector deleting destructor' + Line 1749: EXTRN ??_E?$DrawSprite32T@USubClampSprite@DrawSprite32TModes@swrenderer@@UFillSampler@23@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSprite32T::`vector deleting destructor' + Line 1750: EXTRN ??_E?$DrawSprite32T@URevSubClampSprite@DrawSprite32TModes@swrenderer@@UFillSampler@23@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSprite32T::`vector deleting destructor' + Line 1751: EXTRN ??_E?$DrawSprite32T@UAddClampSprite@DrawSprite32TModes@swrenderer@@UTextureSampler@23@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSprite32T::`vector deleting destructor' + Line 1752: EXTRN ??_E?$DrawSprite32T@UOpaqueSprite@DrawSprite32TModes@swrenderer@@UTranslatedSampler@23@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSprite32T::`vector deleting destructor' + Line 1753: EXTRN ??_E?$DrawSprite32T@UAddClampSprite@DrawSprite32TModes@swrenderer@@UTranslatedSampler@23@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSprite32T::`vector deleting destructor' + Line 1754: EXTRN ??_E?$DrawSprite32T@UShadedSprite@DrawSprite32TModes@swrenderer@@UShadedSampler@23@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSprite32T::`vector deleting destructor' + Line 1755: EXTRN ??_E?$DrawSprite32T@UAddClampShadedSprite@DrawSprite32TModes@swrenderer@@UShadedSampler@23@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSprite32T::`vector deleting destructor' + Line 1756: EXTRN ??_E?$DrawSprite32T@USubClampSprite@DrawSprite32TModes@swrenderer@@UTextureSampler@23@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSprite32T::`vector deleting destructor' + Line 1757: EXTRN ??_E?$DrawSprite32T@USubClampSprite@DrawSprite32TModes@swrenderer@@UTranslatedSampler@23@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSprite32T::`vector deleting destructor' + Line 1758: EXTRN ??_E?$DrawSprite32T@URevSubClampSprite@DrawSprite32TModes@swrenderer@@UTextureSampler@23@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSprite32T::`vector deleting destructor' + Line 1759: EXTRN ??_E?$DrawSprite32T@URevSubClampSprite@DrawSprite32TModes@swrenderer@@UTranslatedSampler@23@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSprite32T::`vector deleting destructor' + Line 1760: EXTRN ??_E?$DrawSpan32T@UOpaqueSpan@DrawSpan32TModes@swrenderer@@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSpan32T::`vector deleting destructor' + Line 1761: EXTRN ??_E?$DrawSpan32T@UMaskedSpan@DrawSpan32TModes@swrenderer@@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSpan32T::`vector deleting destructor' + Line 1762: EXTRN ??_E?$DrawSpan32T@UTranslucentSpan@DrawSpan32TModes@swrenderer@@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSpan32T::`vector deleting destructor' + Line 1763: EXTRN ??_E?$DrawSpan32T@UAddClampSpan@DrawSpan32TModes@swrenderer@@@swrenderer@@UEAAPEAXI@Z:PROC ; swrenderer::DrawSpan32T::`vector deleting destructor' + Line 1764: EXTRN ??_E?$_Ref_count_obj@VDrawerCommandQueue@@@std@@UEAAPEAXI@Z:PROC ; std::_Ref_count_obj::`vector deleting destructor' + Line 1765: EXTRN ??_E?$_Ref_count@VDrawerCommandQueue@@@std@@UEAAPEAXI@Z:PROC ; std::_Ref_count::`vector deleting destructor' + Line 1766: EXTRN _CxxThrowException:PROC + Line 1767: EXTRN __CxxFrameHandler3:PROC + Line 1768: EXTRN __chkstk:PROC + Line 1769: EXTRN __libm_sse2_sincos_:PROC + Line 1770: EXTRN asin:PROC + Line 1771: EXTRN atan:PROC + Line 1772: EXTRN fmod:PROC + Line 1773: EXTRN memcpy:PROC + Line 1774: EXTRN memmove:PROC + Line 1775: EXTRN memset:PROC + Line 1776: EXTRN tan:PROC + Line 1777: EXTRN _Init_thread_epoch:DWORD + Line 1778: EXTRN ?nothrow@std@@3Unothrow_t@1@B:BYTE ; std::nothrow + Line 1779: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 1780: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 1781: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 1782: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 1783: EXTRN ?RGB32k@@3TColorTable32k@@A:BYTE ; RGB32k + Line 1784: EXTRN ?RGB256k@@3TColorTable256k@@A:BYTE ; RGB256k + Line 1785: EXTRN ?Col2RGB8@@3PAY0BAA@IA:BYTE ; Col2RGB8 + Line 1786: EXTRN ?Col2RGB8_LessPrecision@@3PAPEAIA:BYTE ; Col2RGB8_LessPrecision + Line 1787: EXTRN ?Col2RGB8_Inverse@@3PAY0BAA@IA:BYTE ; Col2RGB8_Inverse + Line 1788: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 1789: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 1790: EXTRN ?r_spriteadjustSW@@3HA:DWORD ; r_spriteadjustSW + Line 1791: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 1792: EXTRN ?fakecmaps@@3V?$TArray@UFakeCmap@@U1@@@A:BYTE ; fakecmaps + Line 1793: EXTRN ?SpecialColormaps@@3V?$TArray@UFSpecialColormap@@U1@@@A:BYTE ; SpecialColormaps + Line 1794: EXTRN ?PerfToSec@@3NA:QWORD ; PerfToSec + Line 1795: EXTRN ?PerfToMillisec@@3NA:QWORD ; PerfToMillisec + Line 1796: EXTRN ?vid_rendermode@@3VFIntCVar@@A:BYTE ; vid_rendermode + Line 1797: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 1798: EXTRN ?Gamma@@3VFFloatCVar@@A:BYTE ; Gamma + Line 1799: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 1800: EXTRN ?freelookviewheight@@3HA:DWORD ; freelookviewheight + Line 1801: EXTRN ?SpriteFrames@@3V?$TArray@Uspriteframe_t@@U1@@@A:BYTE ; SpriteFrames + Line 1802: EXTRN ?viewwindowx@@3HA:DWORD ; viewwindowx + Line 1803: EXTRN ?viewwindowy@@3HA:DWORD ; viewwindowy + Line 1804: EXTRN ?viewwidth@@3HA:DWORD ; viewwidth + Line 1805: EXTRN ?viewheight@@3HA:DWORD ; viewheight + Line 1806: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 1807: EXTRN ?paused@@3HA:DWORD ; paused + Line 1808: EXTRN ?viewactive@@3_NA:BYTE ; viewactive + Line 1809: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 1810: EXTRN ?r_drawtrans@@3VFBoolCVar@@A:BYTE ; r_drawtrans + Line 1811: EXTRN ?transsouls@@3VFFloatCVar@@A:BYTE ; transsouls + Line 1812: EXTRN ?FrameCycles@@3Vcycle_t@@A:QWORD ; FrameCycles + Line 1813: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 1814: EXTRN ?r_viewwindow@@3UFViewWindow@@A:BYTE ; r_viewwindow + Line 1815: EXTRN ?validcount@@3HA:DWORD ; validcount + Line 1816: EXTRN ?R_OldBlend@@3IA:DWORD ; R_OldBlend + Line 1817: EXTRN ?r_drawvoxels@@3VFBoolCVar@@A:BYTE ; r_drawvoxels + Line 1818: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 1819: EXTRN ?gl_particles_style@@3VFIntCVar@@A:BYTE ; gl_particles_style + Line 1820: EXTRN ?r_skymode@@3VFIntCVar@@A:BYTE ; r_skymode + Line 1821: EXTRN ?Models@@3V?$TDeletingArray@PEAVFModel@@PEAV1@@@A:BYTE ; Models + Line 1822: EXTRN ?r_debug_disable_vis_filter@@3VFBoolCVar@@A:BYTE ; r_debug_disable_vis_filter + Line 1823: EXTRN ?r_renderercaps@@3IA:DWORD ; r_renderercaps + Line 1824: EXTRN ?r_clearbuffer@@3VFIntCVar@@A:BYTE ; r_clearbuffer + Line 1825: EXTRN ?CrosshairImage@@3PEAVFTexture@@EA:QWORD ; CrosshairImage + Line 1826: EXTRN ?r_drawplayersprites@@3VFBoolCVar@@A:BYTE ; r_drawplayersprites + Line 1827: EXTRN ?r_deathcamera@@3VFBoolCVar@@A:BYTE ; r_deathcamera + Line 1828: EXTRN ?r_UseVanillaTransparency@@3_NA:BYTE ; r_UseVanillaTransparency + Line 1829: EXTRN ?gl_light_sprites@@3VFBoolCVar@@A:BYTE ; gl_light_sprites + Line 1830: EXTRN ?r_visibility@@3VFFloatCVar@@A:BYTE ; r_visibility + Line 1831: EXTRN __ImageBase:BYTE + Line 1832: EXTRN __isa_available:DWORD + Line 1833: EXTRN _fltused:DWORD + Line 1834: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\r_canvastexture.cod (15 hits) + Line 25: EXTRN ?_Xbad_function_call@std@@YAXXZ:PROC ; std::_Xbad_function_call + Line 26: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 27: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 28: EXTRN ?Mark@GC@@YAXPEAPEAVDObject@@@Z:PROC ; GC::Mark + Line 29: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFTextureID@@PEAV2@@Z:PROC ; Serialize + Line 30: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 31: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 32: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 33: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 34: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 35: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 36: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 37: EXTRN __CxxFrameHandler3:PROC + Line 38: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 39: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\r_interpolate.cod (49 hits) + Line 32: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 33: EXTRN ??_EStat_interpolations@@UEAAPEAXI@Z:PROC ; Stat_interpolations::`vector deleting destructor' + Line 221: EXTRN _purecall:PROC + Line 222: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 223: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 224: EXTRN atexit:PROC + Line 225: EXTRN __std_terminate:PROC + Line 226: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 227: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 228: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 229: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 230: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 231: EXTRN ?P_Start3dMidtexInterpolations@@YAXAEAV?$TArray@PEAVDInterpolation@@PEAV1@@@PEAUsector_t@@_N@Z:PROC ; P_Start3dMidtexInterpolations + Line 232: EXTRN ?P_StartLinkedSectorInterpolations@@YAXAEAV?$TArray@PEAVDInterpolation@@PEAV1@@@PEAUsector_t@@_N@Z:PROC ; P_StartLinkedSectorInterpolations + Line 233: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 234: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 235: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 236: EXTRN ?Mark@GC@@YAXPEAPEAVDObject@@@Z:PROC ; GC::Mark + Line 237: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 238: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 239: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 240: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 241: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 242: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 243: EXTRN ??_EDInterpolation@@UEAAPEAXI@Z:PROC ; DInterpolation::`vector deleting destructor' + Line 244: EXTRN ?P_RecalculateAttached3DFloors@@YAXPEAUsector_t@@@Z:PROC ; P_RecalculateAttached3DFloors + Line 245: EXTRN ?CheckOverlap@sector_t@@QEAAXXZ:PROC ; sector_t::CheckOverlap + Line 246: EXTRN ?CheckPortalPlane@@YAXPEAUsector_t@@H@Z:PROC ; CheckPortalPlane + Line 247: EXTRN ?ClearSubsectorLinks@FPolyObj@@QEAAXXZ:PROC ; FPolyObj::ClearSubsectorLinks + Line 248: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 249: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 250: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 251: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 252: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 253: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 254: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 255: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 256: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 257: EXTRN ??$Serialize@UFPolyObj@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUFPolyObj@@PEAPEAU1@@Z:PROC ; Serialize + Line 258: EXTRN ??$Serialize@Usector_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUsector_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 259: EXTRN ??$Serialize@Uside_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUside_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 260: EXTRN ??_EDSectorPlaneInterpolation@@UEAAPEAXI@Z:PROC ; DSectorPlaneInterpolation::`vector deleting destructor' + Line 261: EXTRN ??_EDSectorScrollInterpolation@@UEAAPEAXI@Z:PROC ; DSectorScrollInterpolation::`vector deleting destructor' + Line 262: EXTRN ??_EDWallScrollInterpolation@@UEAAPEAXI@Z:PROC ; DWallScrollInterpolation::`vector deleting destructor' + Line 263: EXTRN ??_EDPolyobjInterpolation@@UEAAPEAXI@Z:PROC ; DPolyobjInterpolation::`vector deleting destructor' + Line 264: EXTRN __CxxFrameHandler3:PROC + Line 265: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 266: EXTRN ?State@GC@@3W4EGCState@1@A:DWORD ; GC::State + Line 267: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\r_sections.cod (24 hits) + Line 72: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 73: EXTRN atexit:PROC + Line 74: EXTRN __std_terminate:PROC + Line 75: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 76: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 77: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 78: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 79: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 80: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 81: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 82: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 83: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 84: EXTRN c_atan2:PROC + Line 85: EXTRN ??0FMemArena@@QEAA@_K@Z:PROC ; FMemArena::FMemArena + Line 86: EXTRN ??1FMemArena@@QEAA@XZ:PROC ; FMemArena::~FMemArena + Line 87: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 88: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 89: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 90: EXTRN __CxxFrameHandler3:PROC + Line 91: EXTRN memmove:PROC + Line 92: EXTRN memset:PROC + Line 93: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 94: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 95: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\r_sky.cod (11 hits) + Line 36: EXTRN atexit:PROC + Line 37: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 38: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 39: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 40: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 41: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 42: EXTRN ?IsFreelookAllowed@FLevelLocals@@QEBA_NXZ:PROC ; FLevelLocals::IsFreelookAllowed + Line 43: EXTRN fmod:PROC + Line 44: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 45: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 46: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\r_swscene.cod (37 hits) + Line 39: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 40: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 41: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 42: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 43: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 44: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 45: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 46: EXTRN ?GetUniqueIndex@FRemapTable@@QEAAHXZ:PROC ; FRemapTable::GetUniqueIndex + Line 47: EXTRN ?TranslationToTable@@YAPEAUFRemapTable@@H@Z:PROC ; TranslationToTable + Line 48: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 49: EXTRN ?AddTexture@FTextureManager@@QEAA?AVFTextureID@@PEAVFTexture@@@Z:PROC ; FTextureManager::AddTexture + Line 50: EXTRN ??0FWrapperTexture@@QEAA@HHH@Z:PROC ; FWrapperTexture::FWrapperTexture + Line 51: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 52: EXTRN ?ValidateTexture@FMaterial@@SAPEAV1@PEAVFTexture@@_N1@Z:PROC ; FMaterial::ValidateTexture + Line 53: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 54: EXTRN ?Clear@F2DDrawer@@QEAAXXZ:PROC ; F2DDrawer::Clear + Line 55: EXTRN ??0DCanvas@@QEAA@HH_N@Z:PROC ; DCanvas::DCanvas + Line 56: EXTRN ??1DCanvas@@QEAA@XZ:PROC ; DCanvas::~DCanvas + Line 57: EXTRN ?DrawTexture@DFrameBuffer@@QEAAXPEAVFTexture@@NNHZZ:PROC ; DFrameBuffer::DrawTexture + Line 58: EXTRN ?Instance@CameraLight@swrenderer@@SAPEAV12@XZ:PROC ; swrenderer::CameraLight::Instance + Line 59: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 60: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 61: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 62: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 63: EXTRN ??0FImageTexture@@QEAA@PEAVFImageSource@@PEBD@Z:PROC ; FImageTexture::FImageTexture + Line 64: EXTRN ??_EFSWPaletteTexture@@UEAAPEAXI@Z:PROC ; FSWPaletteTexture::`vector deleting destructor' + Line 65: EXTRN __CxxFrameHandler3:PROC + Line 66: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 67: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 68: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 69: EXTRN ?SWRenderer@@3PEAUFRenderer@@EA:QWORD ; SWRenderer + Line 70: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 71: EXTRN ?vid_rendermode@@3VFIntCVar@@A:BYTE ; vid_rendermode + Line 72: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 73: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 74: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + Line 75: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\r_swtexture.cod (24 hits) + Line 50: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 51: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 52: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 53: EXTRN __std_terminate:PROC + Line 54: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 55: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 56: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 57: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 58: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 59: EXTRN ?CreateTexBuffer@FTexture@@QEAA?AUFTextureBuffer@@HH@Z:PROC ; FTexture::CreateTexBuffer + Line 60: EXTRN ??_EFSoftwareTexture@@UEAAPEAXI@Z:PROC ; FSoftwareTexture::`vector deleting destructor' + Line 61: EXTRN ??0FWarpTexture@@QEAA@PEAVFTexture@@H@Z:PROC ; FWarpTexture::FWarpTexture + Line 62: EXTRN ??1FSWCanvasTexture@@UEAA@XZ:PROC ; FSWCanvasTexture::~FSWCanvasTexture + Line 63: EXTRN ?GetPixelsBgra@FSWCanvasTexture@@UEAAPEBIXZ:PROC ; FSWCanvasTexture::GetPixelsBgra + Line 64: EXTRN ?GetPixels@FSWCanvasTexture@@UEAAPEBEH@Z:PROC ; FSWCanvasTexture::GetPixels + Line 65: EXTRN ?Unload@FSWCanvasTexture@@UEAAXXZ:PROC ; FSWCanvasTexture::Unload + Line 66: EXTRN ??_EFSWCanvasTexture@@UEAAPEAXI@Z:PROC ; FSWCanvasTexture::`vector deleting destructor' + Line 67: EXTRN _CxxThrowException:PROC + Line 68: EXTRN __CxxFrameHandler3:PROC + Line 69: EXTRN memset:PROC + Line 70: EXTRN powf:PROC + Line 71: EXTRN ?RGB256k@@3TColorTable256k@@A:BYTE ; RGB256k + Line 72: EXTRN ?gl_texture_usehires@@3VFBoolCVar@@A:BYTE ; gl_texture_usehires + Line 73: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\r_translate.cod (64 hits) + Line 20: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 21: EXTRN ?PlayerClasses@@3V?$TArray@VFPlayerClass@@V1@@@A:BYTE ; PlayerClasses + Line 22: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 23: EXTRN ?Skins@@3V?$TArray@VFPlayerSkin@@V1@@@A:BYTE ; Skins + Line 210: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 211: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 212: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 213: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 214: EXTRN atexit:PROC + Line 215: EXTRN __std_terminate:PROC + Line 216: EXTRN round:PROC + Line 217: EXTRN crc32:PROC + Line 218: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 219: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 220: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 221: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 222: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 223: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 224: EXTRN ?RGBtoHSV@@YAXMMMPEAM00@Z:PROC ; RGBtoHSV + Line 225: EXTRN ?HSVtoRGB@@YAXPEAM00MMM@Z:PROC ; HSVtoRGB + Line 226: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 227: EXTRN ?D_GetPlayerColor@@YAXHPEAM00PEAPEAUFPlayerColorSet@@@Z:PROC ; D_GetPlayerColor + Line 228: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 229: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 230: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 231: EXTRN ?OpenMem@FScanner@@QEAAXPEBD0H@Z:PROC ; FScanner::OpenMem + Line 232: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 233: EXTRN ?GetToken@FScanner@@QEAA_NXZ:PROC ; FScanner::GetToken + Line 234: EXTRN ?MustGetAnyToken@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetAnyToken + Line 235: EXTRN ?TokenMustBe@FScanner@@QEAAXH@Z:PROC ; FScanner::TokenMustBe + Line 236: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 237: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 238: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 239: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 240: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 241: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 242: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 243: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 244: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 245: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 246: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 247: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 248: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 249: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 250: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 251: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAEPEAE@Z:PROC ; Serialize + Line 252: EXTRN ?GetColorSet@@YAPEAUFPlayerColorSet@@PEAVPClassActor@@H@Z:PROC ; GetColorSet + Line 253: EXTRN ?R_FindSkin@@YAHPEBDH@Z:PROC ; R_FindSkin + Line 254: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 255: EXTRN __CxxFrameHandler3:PROC + Line 256: EXTRN memcmp:PROC + Line 257: EXTRN memcpy:PROC + Line 258: EXTRN memset:PROC + Line 259: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 260: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 261: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 262: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 263: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 264: EXTRN ?OtherGameSkinRemap@@3PAEA:BYTE ; OtherGameSkinRemap + Line 265: EXTRN ?OtherGameSkinPalette@@3PAUPalEntry@@A:BYTE ; OtherGameSkinPalette + Line 266: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 267: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 268: EXTRN __ImageBase:BYTE + Line 269: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\r_utility.cod (66 hits) + Line 39: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 40: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 41: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 42: EXTRN ?usergame@@3_NA:BYTE ; usergame + Line 201: EXTRN atexit:PROC + Line 202: EXTRN __std_terminate:PROC + Line 203: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 204: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 205: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 206: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 207: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 208: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 209: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 210: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 211: EXTRN ??0FRandom@@QEAA@XZ:PROC ; FRandom::FRandom + Line 212: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 213: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 214: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 215: EXTRN c_sqrt:PROC + Line 216: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 217: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 218: EXTRN ?R_InitTranslationTables@@YAXXZ:PROC ; R_InitTranslationTables + Line 219: EXTRN ?R_DeinitTranslationTables@@YAXXZ:PROC ; R_DeinitTranslationTables + Line 220: EXTRN ?R_InitSkyMap@@YAXXZ:PROC ; R_InitSkyMap + Line 221: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 222: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 223: EXTRN ?R_DeinitColormaps@@YAXXZ:PROC ; R_DeinitColormaps + Line 224: EXTRN ?SetClearColor@DFrameBuffer@@QEAAXH@Z:PROC ; DFrameBuffer::SetClearColor + Line 225: EXTRN ?ActiveRatio@@YAMHHPEAM@Z:PROC ; ActiveRatio + Line 226: EXTRN ?AspectBaseHeight@@YAHM@Z:PROC ; AspectBaseHeight + Line 227: EXTRN ?AspectMultiplier@@YAHM@Z:PROC ; AspectMultiplier + Line 228: EXTRN ?AspectTallerThanWide@@YA_NM@Z:PROC ; AspectTallerThanWide + Line 229: EXTRN ?StaticGetQuakeIntensities@DEarthquake@@SAHNPEAVAActor@@AEAUFQuakeJiggers@@@Z:PROC ; DEarthquake::StaticGetQuakeIntensities + Line 230: EXTRN ?SendPitchLimits@player_t@@QEBAXXZ:PROC ; player_t::SendPitchLimits + Line 231: EXTRN ?P_AimCamera@@YAXPEAVAActor@@AEAU?$TVector3@N@@AEAU?$TAngle@N@@AEAPEAUsector_t@@AEA_N@Z:PROC ; P_AimCamera + Line 232: EXTRN ?PointInRenderSubsector@FLevelLocals@@QEAAPEAUsubsector_t@@HH@Z:PROC ; FLevelLocals::PointInRenderSubsector + Line 233: EXTRN ?I_GetTime@@YAHXZ:PROC ; I_GetTime + Line 234: EXTRN ?I_GetTimeFrac@@YANXZ:PROC ; I_GetTimeFrac + Line 235: EXTRN ?CreateSWRenderer@@YAPEAUFRenderer@@XZ:PROC ; CreateSWRenderer + Line 236: EXTRN __CxxFrameHandler3:PROC + Line 237: EXTRN asin:PROC + Line 238: EXTRN atan:PROC + Line 239: EXTRN cos:PROC + Line 240: EXTRN memmove:PROC + Line 241: EXTRN memset:PROC + Line 242: EXTRN sin:PROC + Line 243: EXTRN sqrt:PROC + Line 244: EXTRN tan:PROC + Line 245: EXTRN ?paused@@3HA:DWORD ; paused + Line 246: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 247: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 248: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 249: EXTRN ?BaseBlendR@@3HA:DWORD ; BaseBlendR + Line 250: EXTRN ?BaseBlendG@@3HA:DWORD ; BaseBlendG + Line 251: EXTRN ?BaseBlendB@@3HA:DWORD ; BaseBlendB + Line 252: EXTRN ?BaseBlendA@@3MA:DWORD ; BaseBlendA + Line 253: EXTRN ?fakecmaps@@3V?$TArray@UFakeCmap@@U1@@@A:BYTE ; fakecmaps + Line 254: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 255: EXTRN ?StartScreen@@3PEAVFStartupScreen@@EA:QWORD ; StartScreen + Line 256: EXTRN ?SWRenderer@@3PEAUFRenderer@@EA:QWORD ; SWRenderer + Line 257: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 258: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 259: EXTRN ?DrawFSHUD@@3_NA:BYTE ; DrawFSHUD + Line 260: EXTRN ?cl_capfps@@3VFBoolCVar@@A:BYTE ; cl_capfps + Line 261: EXTRN ?cl_noprediction@@3VFBoolCVar@@A:BYTE ; cl_noprediction + Line 262: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\r_vanillatrans.cod (5 hits) + Line 33: EXTRN atexit:PROC + Line 34: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 35: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 36: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 37: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\r_videoscale.cod (18 hits) + Line 19: EXTRN ?setsizeneeded@@3_NA:BYTE ; setsizeneeded + Line 97: EXTRN atexit:PROC + Line 98: EXTRN atof:PROC + Line 99: EXTRN atoi:PROC + Line 100: EXTRN stricmp:PROC + Line 101: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 102: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 103: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 104: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 105: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 106: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 107: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 108: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 109: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 110: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 111: EXTRN ?ActiveRatio@@YAMHHPEAM@Z:PROC ; ActiveRatio + Line 112: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 113: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\rawpagetexture.cod (27 hits) + Line 24: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 25: EXTRN __std_terminate:PROC + Line 26: EXTRN stricmp:PROC + Line 27: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 28: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 29: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 30: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 31: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 32: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 33: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 34: EXTRN ?GetLumpName@FWadCollection@@QEBAXAEAVFString@@H@Z:PROC ; FWadCollection::GetLumpName + Line 35: EXTRN ?CopyPixelData@FBitmap@@QEAAXHHPEBEHHHHHPEAUPalEntry@@PEAUFCopyInfo@@@Z:PROC ; FBitmap::CopyPixelData + Line 36: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 37: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 38: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 39: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 40: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 41: EXTRN ??_EFRawPageTexture@@UEAAPEAXI@Z:PROC ; FRawPageTexture::`vector deleting destructor' + Line 42: EXTRN __CxxFrameHandler3:PROC + Line 43: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 44: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 45: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 46: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 47: EXTRN ?translationtables@@3PAV?$TAutoGrowArray@VFRemapTablePtr@@PEAUFRemapTable@@@@A:BYTE ; translationtables + Line 48: EXTRN ?GrayMap@ImageHelpers@@3PAEA:BYTE ; ImageHelpers::GrayMap + Line 49: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 50: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\readmidic.cod (5 hits) + Line 15: EXTRN ?ctl_cmsg@TimidityPlus@@YAXHHPEBDZZ:PROC ; TimidityPlus::ctl_cmsg + Line 16: EXTRN ?get_userdrum@Instruments@TimidityPlus@@QEAAPEAUUserDrumset@12@HH@Z:PROC ; TimidityPlus::Instruments::get_userdrum + Line 17: EXTRN ?recompute_userdrum_altassign@Instruments@TimidityPlus@@QEAAXHH@Z:PROC ; TimidityPlus::Instruments::recompute_userdrum_altassign + Line 18: EXTRN __ImageBase:BYTE + Line 19: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\recache.cod (10 hits) + Line 29: EXTRN free:PROC + Line 30: EXTRN ?init_mblock@TimidityPlus@@YAXPEAUMBlockList@1@@Z:PROC ; TimidityPlus::init_mblock + Line 31: EXTRN ?new_segment@TimidityPlus@@YAPEAXPEAUMBlockList@1@_K@Z:PROC ; TimidityPlus::new_segment + Line 32: EXTRN ?reuse_mblock@TimidityPlus@@YAXPEAUMBlockList@1@@Z:PROC ; TimidityPlus::reuse_mblock + Line 33: EXTRN ?safe_large_malloc@TimidityPlus@@YAPEAX_K@Z:PROC ; TimidityPlus::safe_large_malloc + Line 34: EXTRN ?get_note_freq@TimidityPlus@@YAHPEAUSample@1@H@Z:PROC ; TimidityPlus::get_note_freq + Line 35: EXTRN ?do_resamplation@TimidityPlus@@YAHPEAFIPEAUresample_rec@1@@Z:PROC ; TimidityPlus::do_resamplation + Line 36: EXTRN memset:PROC + Line 37: EXTRN ?playback_rate@TimidityPlus@@3HA:DWORD ; TimidityPlus::playback_rate + Line 38: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\renderinfo.cod (14 hits) + Line 42: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 43: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 44: EXTRN __std_terminate:PROC + Line 45: EXTRN qsort:PROC + Line 46: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 47: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 48: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 49: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 50: EXTRN c_sqrt:PROC + Line 51: EXTRN __CxxFrameHandler3:PROC + Line 52: EXTRN memmove:PROC + Line 53: EXTRN memset:PROC + Line 54: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 55: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\renderstyle.cod (11 hits) + Line 105: EXTRN atexit:PROC + Line 106: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 107: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 108: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 109: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 110: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 111: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 112: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAEPEAE@Z:PROC ; Serialize + Line 113: EXTRN memcmp:PROC + Line 114: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 115: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\resample.cod (16 hits) + Line 41: EXTRN free:PROC + Line 42: EXTRN ?ctl_cmsg@TimidityPlus@@YAXHHPEBDZZ:PROC ; TimidityPlus::ctl_cmsg + Line 43: EXTRN ?safe_malloc@TimidityPlus@@YAPEAX_K@Z:PROC ; TimidityPlus::safe_malloc + Line 44: EXTRN ?safe_realloc@TimidityPlus@@YAPEAXPEAX_K@Z:PROC ; TimidityPlus::safe_realloc + Line 45: EXTRN ?recompute_freq@Player@TimidityPlus@@QEAAXH@Z:PROC ; TimidityPlus::Player::recompute_freq + Line 46: EXTRN ?lookup_triangular@TimidityPlus@@YANH@Z:PROC ; TimidityPlus::lookup_triangular + Line 47: EXTRN ?get_note_freq@TimidityPlus@@YAHPEAUSample@1@H@Z:PROC ; TimidityPlus::get_note_freq + Line 48: EXTRN __vdecl_sin2:PROC + Line 49: EXTRN pow:PROC + Line 50: EXTRN sin:PROC + Line 51: EXTRN ?playback_rate@TimidityPlus@@3HA:DWORD ; TimidityPlus::playback_rate + Line 52: EXTRN ?freq_table@TimidityPlus@@3PAHA:BYTE ; TimidityPlus::freq_table + Line 53: EXTRN ?bend_fine@TimidityPlus@@3PANA:BYTE ; TimidityPlus::bend_fine + Line 54: EXTRN ?bend_coarse@TimidityPlus@@3PANA:BYTE ; TimidityPlus::bend_coarse + Line 55: EXTRN __ImageBase:BYTE + Line 56: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\resolutionmenu.cod (21 hits) + Line 42: EXTRN atexit:PROC + Line 43: EXTRN atoi:PROC + Line 44: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 45: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 46: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 47: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 48: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 49: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 50: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 51: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 52: EXTRN ?V_OutputResized@@YAXHH@Z:PROC ; V_OutputResized + Line 53: EXTRN ?M_PreviousMenu@@YAXXZ:PROC ; M_PreviousMenu + Line 54: EXTRN ?fullscreen@@3VFBoolCVar@@A:BYTE ; fullscreen + Line 55: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 56: EXTRN ?vid_scale_customlinear@@3VFBoolCVar@@A:BYTE ; vid_scale_customlinear + Line 57: EXTRN ?vid_scale_customstretched@@3VFBoolCVar@@A:BYTE ; vid_scale_customstretched + Line 58: EXTRN ?vid_scale_customwidth@@3VFIntCVar@@A:BYTE ; vid_scale_customwidth + Line 59: EXTRN ?vid_scale_customheight@@3VFIntCVar@@A:BYTE ; vid_scale_customheight + Line 60: EXTRN ?vid_scalemode@@3VFIntCVar@@A:BYTE ; vid_scalemode + Line 61: EXTRN ?vid_scalefactor@@3VFFloatCVar@@A:BYTE ; vid_scalefactor + Line 62: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\resourcefile.cod (62 hits) + Line 8: EXTRN ?CheckWad@@YAPEAVFResourceFile@@PEBDAEAVFileReader@@_N@Z:PROC ; CheckWad + Line 9: EXTRN ?CheckGRP@@YAPEAVFResourceFile@@PEBDAEAVFileReader@@_N@Z:PROC ; CheckGRP + Line 10: EXTRN ?CheckRFF@@YAPEAVFResourceFile@@PEBDAEAVFileReader@@_N@Z:PROC ; CheckRFF + Line 11: EXTRN ?CheckPak@@YAPEAVFResourceFile@@PEBDAEAVFileReader@@_N@Z:PROC ; CheckPak + Line 12: EXTRN ?CheckZip@@YAPEAVFResourceFile@@PEBDAEAVFileReader@@_N@Z:PROC ; CheckZip + Line 13: EXTRN ?Check7Z@@YAPEAVFResourceFile@@PEBDAEAVFileReader@@_N@Z:PROC ; Check7Z + Line 14: EXTRN ?CheckLump@@YAPEAVFResourceFile@@PEBDAEAVFileReader@@_N@Z:PROC ; CheckLump + Line 89: EXTRN _purecall:PROC + Line 90: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 91: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 92: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 93: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 94: EXTRN qsort:PROC + Line 95: EXTRN strchr:PROC + Line 96: EXTRN strstr:PROC + Line 97: EXTRN strncmp:PROC + Line 98: EXTRN stricmp:PROC + Line 99: EXTRN strnicmp:PROC + Line 100: EXTRN crc32:PROC + Line 101: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 102: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 103: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 104: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 105: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 106: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 107: EXTRN ??HFString@@QEBA?AV0@AEBV0@@Z:PROC ; FString::operator+ + Line 108: EXTRN ??HFString@@QEBA?AV0@D@Z:PROC ; FString::operator+ + Line 109: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 110: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 111: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 112: EXTRN ?Left@FString@@QEBA?AV1@_K@Z:PROC ; FString::Left + Line 113: EXTRN ?Mid@FString@@QEBA?AV1@_K0@Z:PROC ; FString::Mid + Line 114: EXTRN ?IndexOf@FString@@QEBAJDJ@Z:PROC ; FString::IndexOf + Line 115: EXTRN ?LastIndexOf@FString@@QEBAJD@Z:PROC ; FString::LastIndexOf + Line 116: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 117: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 118: EXTRN ??_EFileReaderInterface@@UEAAPEAXI@Z:PROC ; FileReaderInterface::`vector deleting destructor' + Line 119: EXTRN ?Tell@MemoryReader@@UEBAJXZ:PROC ; MemoryReader::Tell + Line 120: EXTRN ?Seek@MemoryReader@@UEAAJJH@Z:PROC ; MemoryReader::Seek + Line 121: EXTRN ?Read@MemoryReader@@UEAAJPEAXJ@Z:PROC ; MemoryReader::Read + Line 122: EXTRN ?Gets@MemoryReader@@UEAAPEADPEADH@Z:PROC ; MemoryReader::Gets + Line 123: EXTRN ??_EMemoryReader@@UEAAPEAXI@Z:PROC ; MemoryReader::`vector deleting destructor' + Line 124: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 125: EXTRN ??_EFResourceLump@@UEAAPEAXI@Z:PROC ; FResourceLump::`vector deleting destructor' + Line 126: EXTRN ??_EFResourceFile@@UEAAPEAXI@Z:PROC ; FResourceFile::`vector deleting destructor' + Line 127: EXTRN ??_EFUncompressedLump@@UEAAPEAXI@Z:PROC ; FUncompressedLump::`vector deleting destructor' + Line 128: EXTRN ??_EFUncompressedFile@@UEAAPEAXI@Z:PROC ; FUncompressedFile::`vector deleting destructor' + Line 129: EXTRN ??_EFExternalLump@@UEAAPEAXI@Z:PROC ; FExternalLump::`vector deleting destructor' + Line 130: EXTRN ?ExtractFileBase@@YA?AVFString@@PEBD_N@Z:PROC ; ExtractFileBase + Line 131: EXTRN ?uppercopy@@YAXPEADPEBD@Z:PROC ; uppercopy + Line 132: EXTRN ??_EFLumpReader@@UEAAPEAXI@Z:PROC ; FLumpReader::`vector deleting destructor' + Line 133: EXTRN ?CheckDir@@YAPEAVFResourceFile@@PEBD_N@Z:PROC ; CheckDir + Line 134: EXTRN __CxxFrameHandler3:PROC + Line 135: EXTRN memchr:PROC + Line 136: EXTRN memcpy:PROC + Line 137: EXTRN memmove:PROC + Line 138: EXTRN memset:PROC + Line 139: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 140: EXTRN ?GameNames@@3PAPEBDA:BYTE ; GameNames + Line 141: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 142: EXTRN ?LumpFilterIWAD@@3VFString@@A:QWORD ; LumpFilterIWAD + Line 143: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\reverb.cod (8 hits) + Line 34: EXTRN free:PROC + Line 35: EXTRN malloc:PROC + Line 36: EXTRN cos:PROC + Line 37: EXTRN pow:PROC + Line 38: EXTRN sin:PROC + Line 39: EXTRN sinh:PROC + Line 40: EXTRN sqrt:PROC + Line 41: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\s_advsound.cod (86 hits) + Line 392: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 393: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 394: EXTRN atexit:PROC + Line 395: EXTRN __std_terminate:PROC + Line 396: EXTRN qsort:PROC + Line 397: EXTRN rand:PROC + Line 398: EXTRN atof:PROC + Line 399: EXTRN stricmp:PROC + Line 400: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 401: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 402: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 403: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 404: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 405: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 406: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 407: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 408: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 409: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 410: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 411: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 412: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 413: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 414: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 415: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 416: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 417: EXTRN ?S_CacheSound@@YAXPEAUsfxinfo_t@@@Z:PROC ; S_CacheSound + Line 418: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 419: EXTRN ?S_SoundMinMaxDist@@YAXPEAVAActor@@HVFSoundID@@MMM@Z:PROC ; S_SoundMinMaxDist + Line 420: EXTRN ?S_StopSound@@YAXPEAVAActor@@H@Z:PROC ; S_StopSound + Line 421: EXTRN ?S_StopAllChannels@@YAXXZ:PROC ; S_StopAllChannels + Line 422: EXTRN ?S_UnloadSound@@YAXPEAUsfxinfo_t@@@Z:PROC ; S_UnloadSound + Line 423: EXTRN ?S_LoadSound@@YAPEAUsfxinfo_t@@PEAU1@PEAUFSoundLoadBuffer@@@Z:PROC ; S_LoadSound + Line 424: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 425: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 426: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 427: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 428: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 429: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 430: EXTRN ?SavePos@FScanner@@QEAA?BUSavedPos@1@XZ:PROC ; FScanner::SavePos + Line 431: EXTRN ?RestorePos@FScanner@@QEAAXAEBUSavedPos@1@@Z:PROC ; FScanner::RestorePos + Line 432: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 433: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 434: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 435: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 436: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 437: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 438: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 439: EXTRN ?CheckFloat@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckFloat + Line 440: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 441: EXTRN ?MatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MatchString + Line 442: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 443: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 444: EXTRN ?FindLevelInfo@@YAPEAUlevel_info_t@@PEBD_N@Z:PROC ; FindLevelInfo + Line 445: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 446: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 447: EXTRN ?MakeKey@@YAIPEBD@Z:PROC ; MakeKey + Line 448: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 449: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 450: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 451: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 452: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 453: EXTRN ?CheckLumpName@FWadCollection@@QEAA_NHPEBD@Z:PROC ; FWadCollection::CheckLumpName + Line 454: EXTRN ?GetLumpName@FWadCollection@@QEBAXPEADH@Z:PROC ; FWadCollection::GetLumpName + Line 455: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 456: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 457: EXTRN ?GetLumpNamespace@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpNamespace + Line 458: EXTRN ?GetLumpIndexNum@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpIndexNum + Line 459: EXTRN ?GetNumLumps@FWadCollection@@QEBAHXZ:PROC ; FWadCollection::GetNumLumps + Line 460: EXTRN ?D_GenderToInt@@YAHPEBD@Z:PROC ; D_GenderToInt + Line 461: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 462: EXTRN ?IsFloat@@YA_NPEBD@Z:PROC ; IsFloat + Line 463: EXTRN __CxxFrameHandler3:PROC + Line 464: EXTRN memset:PROC + Line 465: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 466: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 467: EXTRN ?S_Rolloff@@3UFRolloffInfo@@A:BYTE ; S_Rolloff + Line 468: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 469: EXTRN ?GameNames@@3PAPEBDA:BYTE ; GameNames + Line 470: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 471: EXTRN ?GSnd@@3PEAVSoundRenderer@@EA:QWORD ; GSnd + Line 472: EXTRN ?GenderNames@@3PAPEBDA:BYTE ; GenderNames + Line 473: EXTRN ?PlayerClasses@@3V?$TArray@VFPlayerClass@@V1@@@A:BYTE ; PlayerClasses + Line 474: EXTRN ?Skins@@3V?$TArray@VFPlayerSkin@@V1@@@A:BYTE ; Skins + Line 475: EXTRN ?sfx_empty@@3HA:DWORD ; sfx_empty + Line 476: EXTRN __ImageBase:BYTE + Line 477: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\s_environment.cod (57 hits) + Line 122: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 123: EXTRN ?ForcedEnvironment@@3PEAUReverbContainer@@EA:QWORD ; ForcedEnvironment + Line 124: EXTRN ?RegistrationInfo@PFunction@@2UClassReg@@A:BYTE ; PFunction::RegistrationInfo + Line 1923: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 1924: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 1925: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 1926: EXTRN atexit:PROC + Line 1927: EXTRN __std_terminate:PROC + Line 1928: EXTRN atoi:PROC + Line 1929: EXTRN strncpy:PROC + Line 1930: EXTRN stricmp:PROC + Line 1931: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 1932: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 1933: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 1934: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 1935: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 1936: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 1937: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 1938: EXTRN ??HFString@@QEBA?AV0@PEBD@Z:PROC ; FString::operator+ + Line 1939: EXTRN ??0FStringf@@QEAA@PEBDZZ:PROC ; FStringf::FStringf + Line 1940: EXTRN mysnprintf:PROC + Line 1941: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 1942: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 1943: EXTRN ?OpenLumpNum@FScanner@@QEAAXH@Z:PROC ; FScanner::OpenLumpNum + Line 1944: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 1945: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 1946: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 1947: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 1948: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 1949: EXTRN ?MustMatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MustMatchString + Line 1950: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 1951: EXTRN ?copystring@@YAPEADPEBD@Z:PROC ; copystring + Line 1952: EXTRN ?Open@FileWriter@@SAPEAV1@PEBD@Z:PROC ; FileWriter::Open + Line 1953: EXTRN ?Printf@FileWriter@@QEAA_KPEBDZZ:PROC ; FileWriter::Printf + Line 1954: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 1955: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 1956: EXTRN ?M_GetDocumentsPath@@YA?AVFString@@XZ:PROC ; M_GetDocumentsPath + Line 1957: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 1958: EXTRN ?ForceSet@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@_N@Z:PROC ; FBaseCVar::ForceSet + Line 1959: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 1960: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 1961: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 1962: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 1963: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 1964: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 1965: EXTRN ?C_DoCommand@@YAXPEBDH@Z:PROC ; C_DoCommand + Line 1966: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 1967: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 1968: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 1969: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 1970: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 1971: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 1972: EXTRN ?M_StartMessage@@YAXPEBDHVFName@@@Z:PROC ; M_StartMessage + Line 1973: EXTRN __CxxFrameHandler3:PROC + Line 1974: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 1975: EXTRN __ImageBase:BYTE + Line 1976: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\s_playlist.cod (24 hits) + Line 30: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 31: EXTRN _errno:PROC + Line 32: EXTRN rand:PROC + Line 33: EXTRN strerror:PROC + Line 34: EXTRN strncmp:PROC + Line 35: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 36: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 37: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 38: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 39: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 40: EXTRN ??HFString@@QEBA?AV0@AEBV0@@Z:PROC ; FString::operator+ + Line 41: EXTRN ?Mid@FString@@QEBA?AV1@_K0@Z:PROC ; FString::Mid + Line 42: EXTRN ?IndexOf@FString@@QEBAJPEBDJ@Z:PROC ; FString::IndexOf + Line 43: EXTRN ?IndexOf@FString@@QEBAJDJ@Z:PROC ; FString::IndexOf + Line 44: EXTRN ?StripRight@FString@@QEAAXPEBD@Z:PROC ; FString::StripRight + Line 45: EXTRN ?ReplaceChars@FString@@QEAAXDD@Z:PROC ; FString::ReplaceChars + Line 46: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 47: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 48: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 49: EXTRN ?ExtractFilePath@@YA?AVFString@@PEBD@Z:PROC ; ExtractFilePath + Line 50: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 51: EXTRN __CxxFrameHandler3:PROC + Line 52: EXTRN strcmp:PROC + Line 53: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\s_sndseq.cod (79 hits) + Line 96: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 633: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 634: EXTRN atexit:PROC + Line 635: EXTRN __std_terminate:PROC + Line 636: EXTRN atoi:PROC + Line 637: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 638: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 639: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 640: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 641: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 642: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 643: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 644: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 645: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 646: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 647: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 648: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 649: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 650: EXTRN ?CheckFloat@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckFloat + Line 651: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 652: EXTRN ?MustMatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MustMatchString + Line 653: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 654: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 655: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 656: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 657: EXTRN ?MarkUsed@sfxinfo_t@@QEAAXXZ:PROC ; sfxinfo_t::MarkUsed + Line 658: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 659: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 660: EXTRN ?S_Sound@@YAXPEBUFPolyObj@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 661: EXTRN ?S_Sound@@YAXPEBUsector_t@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 662: EXTRN ?S_StopSound@@YAXPEAVAActor@@H@Z:PROC ; S_StopSound + Line 663: EXTRN ?S_StopSound@@YAXPEBUsector_t@@H@Z:PROC ; S_StopSound + Line 664: EXTRN ?S_StopSound@@YAXPEBUFPolyObj@@H@Z:PROC ; S_StopSound + Line 665: EXTRN ?S_GetSoundPlayingInfo@@YA_NPEBUsector_t@@H@Z:PROC ; S_GetSoundPlayingInfo + Line 666: EXTRN ?S_GetSoundPlayingInfo@@YA_NPEBUFPolyObj@@H@Z:PROC ; S_GetSoundPlayingInfo + Line 667: EXTRN ?S_IsActorPlayingSomething@@YA_NPEAVAActor@@HH@Z:PROC ; S_IsActorPlayingSomething + Line 668: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 669: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 670: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 671: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 672: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 673: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 674: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 675: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 676: EXTRN ??_EDSeqNode@@UEAAPEAXI@Z:PROC ; DSeqNode::`vector deleting destructor' + Line 677: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 678: EXTRN ?IsNum@@YA_NPEBD@Z:PROC ; IsNum + Line 679: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 680: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 681: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 682: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 683: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 684: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 685: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 686: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 687: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAMPEAM@Z:PROC ; Serialize + Line 688: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 689: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFName@@PEAV2@@Z:PROC ; Serialize + Line 690: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFSoundID@@PEAV2@@Z:PROC ; Serialize + Line 691: EXTRN ??$Serialize@UFPolyObj@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUFPolyObj@@PEAPEAU1@@Z:PROC ; Serialize + Line 692: EXTRN ??$Serialize@Usector_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUsector_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 693: EXTRN ??$Serialize@UFLevelLocals@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUFLevelLocals@@PEAPEAU1@@Z:PROC ; Serialize + Line 694: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 695: EXTRN ??_EDSeqActorNode@@UEAAPEAXI@Z:PROC ; DSeqActorNode::`vector deleting destructor' + Line 696: EXTRN ??_EDSeqPolyNode@@UEAAPEAXI@Z:PROC ; DSeqPolyNode::`vector deleting destructor' + Line 697: EXTRN ??_EDSeqSectorNode@@UEAAPEAXI@Z:PROC ; DSeqSectorNode::`vector deleting destructor' + Line 698: EXTRN __CxxFrameHandler3:PROC + Line 699: EXTRN memcpy:PROC + Line 700: EXTRN memset:PROC + Line 701: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 702: EXTRN ?paused@@3HA:DWORD ; paused + Line 703: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 704: EXTRN ?S_sfx@@3V?$TArray@Usfxinfo_t@@U1@@@A:BYTE ; S_sfx + Line 705: EXTRN ?State@GC@@3W4EGCState@1@A:DWORD ; GC::State + Line 706: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 707: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 708: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 709: EXTRN __ImageBase:BYTE + Line 710: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\s_sound.cod (144 hits) + Line 52: EXTRN ?IsAlias@FConsoleCommand@@UEAA_NXZ:PROC ; FConsoleCommand::IsAlias + Line 53: EXTRN ?Run@FUnsafeConsoleCommand@@UEAAXAEAVFCommandLine@@PEAVAActor@@H@Z:PROC ; FUnsafeConsoleCommand::Run + Line 54: EXTRN ??_EFUnsafeConsoleCommand@@UEAAPEAXI@Z:PROC ; FUnsafeConsoleCommand::`vector deleting destructor' + Line 432: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 433: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 434: EXTRN atexit:PROC + Line 435: EXTRN __std_terminate:PROC + Line 436: EXTRN atoi:PROC + Line 437: EXTRN strtoul:PROC + Line 438: EXTRN strchr:PROC + Line 439: EXTRN strncmp:PROC + Line 440: EXTRN stricmp:PROC + Line 441: EXTRN strnicmp:PROC + Line 442: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 443: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 444: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 445: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 446: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 447: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 448: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 449: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 450: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 451: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 452: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 453: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 454: EXTRN mysnprintf:PROC + Line 455: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 456: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 457: EXTRN c_sqrt:PROC + Line 458: EXTRN ?LoadSoundVoc@SoundRenderer@@QEAA?AU?$pair@USoundHandle@@_N@std@@PEAEH_N@Z:PROC ; SoundRenderer::LoadSoundVoc + Line 459: EXTRN ?I_UpdateMusic@@YAXXZ:PROC ; I_UpdateMusic + Line 460: EXTRN ?I_RegisterSong@@YAPEAVMusInfo@@AEAVFileReader@@PEAUMidiDeviceSetting@@@Z:PROC ; I_RegisterSong + Line 461: EXTRN ?I_RegisterCDSong@@YAPEAVMusInfo@@HH@Z:PROC ; I_RegisterCDSong + Line 462: EXTRN ?Start@MusInfo@@QEAAX_NMH@Z:PROC ; MusInfo::Start + Line 463: EXTRN ?CD_Stop@@YAXXZ:PROC ; CD_Stop + Line 464: EXTRN ?CD_Pause@@YAXXZ:PROC ; CD_Pause + Line 465: EXTRN ?CD_Resume@@YA_NXZ:PROC ; CD_Resume + Line 466: EXTRN ?CD_Eject@@YAXXZ:PROC ; CD_Eject + Line 467: EXTRN ?CD_UnEject@@YA_NXZ:PROC ; CD_UnEject + Line 468: EXTRN ?MarkUsed@sfxinfo_t@@QEAAXXZ:PROC ; sfxinfo_t::MarkUsed + Line 469: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 470: EXTRN ?S_PickReplacement@@YAHH@Z:PROC ; S_PickReplacement + Line 471: EXTRN ?S_CacheRandomSound@@YAXPEAUsfxinfo_t@@@Z:PROC ; S_CacheRandomSound + Line 472: EXTRN ?S_ParseSndInfo@@YAX_N@Z:PROC ; S_ParseSndInfo + Line 473: EXTRN ?S_FindSkinnedSound@@YAHPEAVAActor@@VFSoundID@@@Z:PROC ; S_FindSkinnedSound + Line 474: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 475: EXTRN ?SN_StopAllSequences@@YAXPEAUFLevelLocals@@@Z:PROC ; SN_StopAllSequences + Line 476: EXTRN ?S_ParseSndSeq@@YAXH@Z:PROC ; S_ParseSndSeq + Line 477: EXTRN ?SN_UpdateActiveSequences@@YAXPEAUFLevelLocals@@@Z:PROC ; SN_UpdateActiveSequences + Line 478: EXTRN ??0FPlayList@@QEAA@PEBD@Z:PROC ; FPlayList::FPlayList + Line 479: EXTRN ??1FPlayList@@QEAA@XZ:PROC ; FPlayList::~FPlayList + Line 480: EXTRN ?ChangeList@FPlayList@@QEAA_NPEBD@Z:PROC ; FPlayList::ChangeList + Line 481: EXTRN ?GetNumSongs@FPlayList@@QEBAHXZ:PROC ; FPlayList::GetNumSongs + Line 482: EXTRN ?SetPosition@FPlayList@@QEAAHH@Z:PROC ; FPlayList::SetPosition + Line 483: EXTRN ?GetPosition@FPlayList@@QEBAHXZ:PROC ; FPlayList::GetPosition + Line 484: EXTRN ?Advance@FPlayList@@QEAAHXZ:PROC ; FPlayList::Advance + Line 485: EXTRN ?Backup@FPlayList@@QEAAHXZ:PROC ; FPlayList::Backup + Line 486: EXTRN ?Shuffle@FPlayList@@QEAAXXZ:PROC ; FPlayList::Shuffle + Line 487: EXTRN ?GetSong@FPlayList@@QEBAPEBDH@Z:PROC ; FPlayList::GetSong + Line 488: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 489: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 490: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 491: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 492: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 493: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 494: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 495: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 496: EXTRN ?ReadLump@FWadCollection@@QEAAXHPEAX@Z:PROC ; FWadCollection::ReadLump + Line 497: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 498: EXTRN ?ReopenLumpReader@FWadCollection@@QEAA?AVFileReader@@H_N@Z:PROC ; FWadCollection::ReopenLumpReader + Line 499: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 500: EXTRN ?GetLumpName@FWadCollection@@QEBAXPEADH@Z:PROC ; FWadCollection::GetLumpName + Line 501: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 502: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 503: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 504: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 505: EXTRN ?FileExists@@YA_NPEBD@Z:PROC ; FileExists + Line 506: EXTRN ?DrawText@DFrameBuffer@@QEAAXPEAVFFont@@HNNPEBDHZZ:PROC ; DFrameBuffer::DrawText + Line 507: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 508: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 509: EXTRN ?isValid@level_info_t@@QEAA_NXZ:PROC ; level_info_t::isValid + Line 510: EXTRN ?FindLevelInfo@@YAPEAUlevel_info_t@@PEBD_N@Z:PROC ; FindLevelInfo + Line 511: EXTRN ?CalcMapName@@YA?AVFString@@HH@Z:PROC ; CalcMapName + Line 512: EXTRN ?StaticSpawn@AActor@@SAPEAV1@PEAVPClassActor@@AEBU?$TVector3@N@@W4replace_t@@_N@Z:PROC ; AActor::StaticSpawn + Line 513: EXTRN ?CheckLocalView@AActor@@QEBA_NH@Z:PROC ; AActor::CheckLocalView + Line 514: EXTRN ?ClassForSpawn@@YAPEAVPClassActor@@VFName@@@Z:PROC ; ClassForSpawn + Line 515: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 516: EXTRN ??AFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator[] + Line 517: EXTRN ?ClosestPoint@sector_t@@QEBAXAEBU?$TVector2@N@@AEAU2@@Z:PROC ; sector_t::ClosestPoint + Line 518: EXTRN ?ClosestPoint@FPolyObj@@QEBAXAEBU?$TVector2@N@@AEAU2@PEAPEAUside_t@@@Z:PROC ; FPolyObj::ClosestPoint + Line 519: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 520: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 521: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 522: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 523: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 524: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_KPEA_K@Z:PROC ; Serialize + Line 525: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 526: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEACPEAC@Z:PROC ; Serialize + Line 527: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAEPEAE@Z:PROC ; Serialize + Line 528: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAFPEAF@Z:PROC ; Serialize + Line 529: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAMPEAM@Z:PROC ; Serialize + Line 530: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 531: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFSoundID@@PEAV2@@Z:PROC ; Serialize + Line 532: EXTRN ??$Serialize@$$CBUFPolyObj@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEBUFPolyObj@@PEAPEBU1@@Z:PROC ; Serialize + Line 533: EXTRN ??$Serialize@$$CBUsector_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEBUsector_t@@PEAPEBU1@@Z:PROC ; Serialize + Line 534: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 535: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 536: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 537: EXTRN ?S_GetMusicVolume@@YAMPEBD@Z:PROC ; S_GetMusicVolume + Line 538: EXTRN ?S_AddLocalSndInfo@@YAXH@Z:PROC ; S_AddLocalSndInfo + Line 539: EXTRN __CxxFrameHandler3:PROC + Line 540: EXTRN log10:PROC + Line 541: EXTRN memset:PROC + Line 542: EXTRN powf:PROC + Line 543: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 544: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 545: EXTRN ?GSnd@@3PEAVSoundRenderer@@EA:QWORD ; GSnd + Line 546: EXTRN ?nosfx@@3_NA:BYTE ; nosfx + Line 547: EXTRN ?nosound@@3_NA:BYTE ; nosound + Line 548: EXTRN ?nomusic@@3HA:DWORD ; nomusic + Line 549: EXTRN ?S_sfx@@3V?$TArray@Usfxinfo_t@@U1@@@A:BYTE ; S_sfx + Line 550: EXTRN ?MusicAliases@@3V?$TMap@VFName@@V1@U?$THashTraits@VFName@@@@U?$TValueTraits@VFName@@@@@@A:BYTE ; MusicAliases + Line 551: EXTRN ?MidiDevices@@3V?$TMap@VFName@@UMidiDeviceSetting@@U?$THashTraits@VFName@@@@U?$TValueTraits@UMidiDeviceSetting@@@@@@A:BYTE ; MidiDevices + Line 552: EXTRN ?M_Random@@3VFRandom@@A:BYTE ; M_Random + Line 553: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 554: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 555: EXTRN ?snd_musicvolume@@3VFFloatCVar@@A:BYTE ; snd_musicvolume + Line 556: EXTRN ?paused@@3HA:DWORD ; paused + Line 557: EXTRN ?pauseext@@3_NA:BYTE ; pauseext + Line 558: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 559: EXTRN ?compatflags@@3VFIntCVar@@A:BYTE ; compatflags + Line 560: EXTRN ?compatflags2@@3VFIntCVar@@A:BYTE ; compatflags2 + Line 561: EXTRN ?CleanYfac@@3HA:DWORD ; CleanYfac + Line 562: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 563: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 564: EXTRN ?savegamerestore@@3_NA:BYTE ; savegamerestore + Line 565: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 566: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 567: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 568: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 569: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 570: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 571: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 572: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\sbar_mugshot.cod (27 hits) + Line 52: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 53: EXTRN atexit:PROC + Line 54: EXTRN __std_terminate:PROC + Line 55: EXTRN strchr:PROC + Line 56: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 57: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 58: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 59: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 60: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 61: EXTRN ?LockBuffer@FString@@QEAAPEADXZ:PROC ; FString::LockBuffer + Line 62: EXTRN ?UnlockBuffer@FString@@QEAAXXZ:PROC ; FString::UnlockBuffer + Line 63: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 64: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 65: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 66: EXTRN c_atan2:PROC + Line 67: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 68: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 69: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 70: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 71: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 72: EXTRN __CxxFrameHandler3:PROC + Line 73: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 74: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 75: EXTRN ?M_Random@@3VFRandom@@A:BYTE ; M_Random + Line 76: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 77: EXTRN ?Skins@@3V?$TArray@VFPlayerSkin@@V1@@@A:BYTE ; Skins + Line 78: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\sbarinfo.cod (157 hits) + Line 89: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 90: EXTRN ?automapactive@@3_NA:BYTE ; automapactive + Line 808: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 809: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 810: EXTRN _purecall:PROC + Line 811: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 812: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 813: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 814: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 815: EXTRN atexit:PROC + Line 816: EXTRN _Init_thread_header:PROC + Line 817: EXTRN _Init_thread_footer:PROC + Line 818: EXTRN __std_terminate:PROC + Line 819: EXTRN stricmp:PROC + Line 820: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 821: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 822: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 823: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 824: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 825: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 826: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 827: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 828: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 829: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 830: EXTRN ??HFString@@QEBA?AV0@AEBV0@@Z:PROC ; FString::operator+ + Line 831: EXTRN ?ToUpper@FString@@QEAAXXZ:PROC ; FString::ToUpper + Line 832: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 833: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 834: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 835: EXTRN ?FindCVar@@YAPEAVFBaseCVar@@PEBDPEAPEAV1@@Z:PROC ; FindCVar + Line 836: EXTRN ?GetCVar@@YAPEAVFBaseCVar@@PEAVAActor@@PEBD@Z:PROC ; GetCVar + Line 837: EXTRN ?StringWidth@FFont@@QEBAHPEBE@Z:PROC ; FFont::StringWidth + Line 838: EXTRN ?V_ParseFontColor@@YA?AW4EColorRange@@AEAPEBEHH@Z:PROC ; V_ParseFontColor + Line 839: EXTRN ?V_GetFont@@YAPEAVFFont@@PEBD@Z:PROC ; V_GetFont + Line 840: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 841: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 842: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 843: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 844: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 845: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 846: EXTRN ?FindFunction@PClass@@SAXPEAPEAVVMFunction@@VFName@@1@Z:PROC ; PClass::FindFunction + Line 847: EXTRN ?FindTexture@FTextureManager@@QEAAPEAVFTexture@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::FindTexture + Line 848: EXTRN ?Clear@DFrameBuffer@@QEAAXHHHHHI@Z:PROC ; DFrameBuffer::Clear + Line 849: EXTRN ?DrawTexture@DFrameBuffer@@QEAAXPEAVFTexture@@NNHZZ:PROC ; DFrameBuffer::DrawTexture + Line 850: EXTRN ?DrawChar@DFrameBuffer@@QEAAXPEAVFFont@@HNNHHZZ:PROC ; DFrameBuffer::DrawChar + Line 851: EXTRN ?ActiveRatio@@YAMHHPEAM@Z:PROC ; ActiveRatio + Line 852: EXTRN ??0FImageCollection@@QEAA@XZ:PROC ; FImageCollection::FImageCollection + Line 853: EXTRN ?Init@FImageCollection@@QEAAXPEAPEBDHW4ETextureType@@@Z:PROC ; FImageCollection::Init + Line 854: EXTRN ?Uninit@FImageCollection@@QEAAXXZ:PROC ; FImageCollection::Uninit + Line 855: EXTRN ??AFImageCollection@@QEBAPEAVFTexture@@H@Z:PROC ; FImageCollection::operator[] + Line 856: EXTRN ?V_BreakLines@@YA?AV?$TArray@UFBrokenLines@@U1@@@PEAVFFont@@HPEBE_N@Z:PROC ; V_BreakLines + Line 857: EXTRN ??0FMugShotFrame@@QEAA@XZ:PROC ; FMugShotFrame::FMugShotFrame + Line 858: EXTRN ??1FMugShotFrame@@QEAA@XZ:PROC ; FMugShotFrame::~FMugShotFrame + Line 859: EXTRN ??0FMugShotState@@QEAA@VFName@@@Z:PROC ; FMugShotState::FMugShotState + Line 860: EXTRN ?GetFace@FMugShot@@QEAAPEAVFTexture@@PEAVplayer_t@@PEBDHW4StateFlags@1@@Z:PROC ; FMugShot::GetFace + Line 861: EXTRN ?FindMugShotStateIndex@@YAHVFName@@@Z:PROC ; FindMugShotStateIndex + Line 862: EXTRN ?SetSize@DBaseStatusBar@@QEAAXHHHHH@Z:PROC ; DBaseStatusBar::SetSize + Line 863: EXTRN ?GetHUDScale@DBaseStatusBar@@QEBA?AU?$TVector2@N@@XZ:PROC ; DBaseStatusBar::GetHUDScale + Line 864: EXTRN ?StatusbarToRealCoords@DBaseStatusBar@@QEBAXAEAN000@Z:PROC ; DBaseStatusBar::StatusbarToRealCoords + Line 865: EXTRN ?ValidateInvFirst@DBaseStatusBar@@QEBAPEAVAActor@@H@Z:PROC ; DBaseStatusBar::ValidateInvFirst + Line 866: EXTRN ?GetInventoryIcon@@YAHPEAVAActor@@IPEAH@Z:PROC ; GetInventoryIcon + Line 867: EXTRN ?GetWadFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetWadFullName + Line 868: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 869: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 870: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 871: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 872: EXTRN ??0FRandom@@QEAA@XZ:PROC ; FRandom::FRandom + Line 873: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 874: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 875: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 876: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 877: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 878: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 879: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 880: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 881: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 882: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 883: EXTRN ?MatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MatchString + Line 884: EXTRN ?MustMatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MustMatchString + Line 885: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 886: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 887: EXTRN ??0FScriptPosition@@QEAA@AEAVFScanner@@@Z:PROC ; FScriptPosition::FScriptPosition + Line 888: EXTRN ?Message@FScriptPosition@@QEBAXHPEBDZZ:PROC ; FScriptPosition::Message + Line 889: EXTRN ?G_SkillName@@YAPEBDXZ:PROC ; G_SkillName + Line 890: EXTRN ?FindInventory@AActor@@QEAAPEAV1@PEAVPClassActor@@_N@Z:PROC ; AActor::FindInventory + Line 891: EXTRN ?FindInventory@AActor@@QEAAPEAV1@VFName@@_N@Z:PROC ; AActor::FindInventory + Line 892: EXTRN ?GetSpecies@AActor@@QEAA?AVFName@@XZ:PROC ; AActor::GetSpecies + Line 893: EXTRN ?GetTag@AActor@@QEBAPEBDPEBD@Z:PROC ; AActor::GetTag + Line 894: EXTRN ?GetPrintableDisplayName@@YA?AVFString@@PEAVPClassActor@@@Z:PROC ; GetPrintableDisplayName + Line 895: EXTRN ?LookupString@FBehaviorContainer@@QEAAPEBDI@Z:PROC ; FBehaviorContainer::LookupString + Line 896: EXTRN ??AFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator[] + Line 897: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 898: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 899: EXTRN ??_ESBarInfoCommand@@UEAAPEAXI@Z:PROC ; SBarInfoCommand::`vector deleting destructor' + Line 900: EXTRN ??_ESBarInfoCommandFlowControl@@UEAAPEAXI@Z:PROC ; SBarInfoCommandFlowControl::`vector deleting destructor' + Line 901: EXTRN ??_ESBarInfoNegatableFlowControl@@UEAAPEAXI@Z:PROC ; SBarInfoNegatableFlowControl::`vector deleting destructor' + Line 902: EXTRN ??_ESBarInfoMainBlock@@UEAAPEAXI@Z:PROC ; SBarInfoMainBlock::`vector deleting destructor' + Line 903: EXTRN ??_ECommandDrawImage@@UEAAPEAXI@Z:PROC ; CommandDrawImage::`vector deleting destructor' + Line 904: EXTRN ??_ECommandDrawSwitchableImage@@UEAAPEAXI@Z:PROC ; CommandDrawSwitchableImage::`vector deleting destructor' + Line 905: EXTRN ??_ECommandDrawString@@UEAAPEAXI@Z:PROC ; CommandDrawString::`vector deleting destructor' + Line 906: EXTRN ??_ECommandDrawNumber@@UEAAPEAXI@Z:PROC ; CommandDrawNumber::`vector deleting destructor' + Line 907: EXTRN ??_ECommandDrawMugShot@@UEAAPEAXI@Z:PROC ; CommandDrawMugShot::`vector deleting destructor' + Line 908: EXTRN ??_ECommandDrawSelectedInventory@@UEAAPEAXI@Z:PROC ; CommandDrawSelectedInventory::`vector deleting destructor' + Line 909: EXTRN ??_ECommandGameMode@@UEAAPEAXI@Z:PROC ; CommandGameMode::`vector deleting destructor' + Line 910: EXTRN ??_ECommandUsesAmmo@@UEAAPEAXI@Z:PROC ; CommandUsesAmmo::`vector deleting destructor' + Line 911: EXTRN ??_ECommandUsesSecondaryAmmo@@UEAAPEAXI@Z:PROC ; CommandUsesSecondaryAmmo::`vector deleting destructor' + Line 912: EXTRN ??_ECommandInventoryBarNotVisible@@UEAAPEAXI@Z:PROC ; CommandInventoryBarNotVisible::`vector deleting destructor' + Line 913: EXTRN ??_ECommandAspectRatio@@UEAAPEAXI@Z:PROC ; CommandAspectRatio::`vector deleting destructor' + Line 914: EXTRN ??_ECommandDrawShader@@UEAAPEAXI@Z:PROC ; CommandDrawShader::`vector deleting destructor' + Line 915: EXTRN ??_ECommandDrawInventoryBar@@UEAAPEAXI@Z:PROC ; CommandDrawInventoryBar::`vector deleting destructor' + Line 916: EXTRN ??_ECommandDrawKeyBar@@UEAAPEAXI@Z:PROC ; CommandDrawKeyBar::`vector deleting destructor' + Line 917: EXTRN ??_ECommandDrawBar@@UEAAPEAXI@Z:PROC ; CommandDrawBar::`vector deleting destructor' + Line 918: EXTRN ??_ECommandIsSelected@@UEAAPEAXI@Z:PROC ; CommandIsSelected::`vector deleting destructor' + Line 919: EXTRN ??_ECommandPlayerClass@@UEAAPEAXI@Z:PROC ; CommandPlayerClass::`vector deleting destructor' + Line 920: EXTRN ??_ECommandPlayerType@@UEAAPEAXI@Z:PROC ; CommandPlayerType::`vector deleting destructor' + Line 921: EXTRN ??_ECommandHasWeaponPiece@@UEAAPEAXI@Z:PROC ; CommandHasWeaponPiece::`vector deleting destructor' + Line 922: EXTRN ??_ECommandDrawGem@@UEAAPEAXI@Z:PROC ; CommandDrawGem::`vector deleting destructor' + Line 923: EXTRN ??_ECommandWeaponAmmo@@UEAAPEAXI@Z:PROC ; CommandWeaponAmmo::`vector deleting destructor' + Line 924: EXTRN ??_ECommandInInventory@@UEAAPEAXI@Z:PROC ; CommandInInventory::`vector deleting destructor' + Line 925: EXTRN ??_ECommandAlpha@@UEAAPEAXI@Z:PROC ; CommandAlpha::`vector deleting destructor' + Line 926: EXTRN ??_ECommandIfHealth@@UEAAPEAXI@Z:PROC ; CommandIfHealth::`vector deleting destructor' + Line 927: EXTRN ??_ECommandIfInvulnerable@@UEAAPEAXI@Z:PROC ; CommandIfInvulnerable::`vector deleting destructor' + Line 928: EXTRN ??_ECommandIfWaterLevel@@UEAAPEAXI@Z:PROC ; CommandIfWaterLevel::`vector deleting destructor' + Line 929: EXTRN ??_ECommandIfCVarInt@@UEAAPEAXI@Z:PROC ; CommandIfCVarInt::`vector deleting destructor' + Line 930: EXTRN __CxxFrameHandler3:PROC + Line 931: EXTRN ceil:PROC + Line 932: EXTRN memmove:PROC + Line 933: EXTRN pow:PROC + Line 934: EXTRN _Init_thread_epoch:DWORD + Line 935: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 936: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 937: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + Line 938: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 939: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 940: EXTRN ?teamplay@@3VFBoolCVar@@A:BYTE ; teamplay + Line 941: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 942: EXTRN ?NumTextColors@@3HA:DWORD ; NumTextColors + Line 943: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 944: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 945: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 946: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 947: EXTRN ?MugShotStates@@3V?$TArray@UFMugShotState@@U1@@@A:BYTE ; MugShotStates + Line 948: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 949: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 950: EXTRN ?AllActorClasses@PClassActor@@2V?$TArray@PEAVPClassActor@@PEAV1@@@A:BYTE ; PClassActor::AllActorClasses + Line 951: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 952: EXTRN ?PlayerClasses@@3V?$TArray@VFPlayerClass@@V1@@@A:BYTE ; PlayerClasses + Line 953: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 954: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 955: EXTRN ?ACS_GlobalVars@@3U?$BoundsCheckingArray@H$0EA@@@A:BYTE ; ACS_GlobalVars + Line 956: EXTRN ?ACS_GlobalArrays@@3U?$BoundsCheckingArray@V?$TMap@HHU?$THashTraits@H@@UInitIntToZero@@@@$0EA@@@A:BYTE ; ACS_GlobalArrays + Line 957: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 958: EXTRN ?fraglimit@@3VFIntCVar@@A:BYTE ; fraglimit + Line 959: EXTRN ?vid_fps@@3VFBoolCVar@@A:BYTE ; vid_fps + Line 960: EXTRN __ImageBase:BYTE + Line 961: EXTRN _fltused:DWORD + Line 962: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\sbkconv.cod (5 hits) + Line 21: EXTRN __acrt_iob_func:PROC + Line 22: EXTRN __stdio_common_vfprintf:PROC + Line 23: EXTRN log:PROC + Line 24: EXTRN log10:PROC + Line 25: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\sc_man.cod (43 hits) + Line 263: EXTRN atexit:PROC + Line 264: EXTRN __std_terminate:PROC + Line 265: EXTRN strtod:PROC + Line 266: EXTRN strtoll:PROC + Line 267: EXTRN strtoull:PROC + Line 268: EXTRN stricmp:PROC + Line 269: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 270: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 271: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 272: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 273: EXTRN ??0FString@@QEAA@D@Z:PROC ; FString::FString + Line 274: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 275: EXTRN ?LockBuffer@FString@@QEAAPEADXZ:PROC ; FString::LockBuffer + Line 276: EXTRN ?UnlockBuffer@FString@@QEAAXXZ:PROC ; FString::UnlockBuffer + Line 277: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 278: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 279: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 280: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 281: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 282: EXTRN ?AppendCStrPart@FString@@QEAAAEAV1@PEBD_K@Z:PROC ; FString::AppendCStrPart + Line 283: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 284: EXTRN ?VFormat@FString@@QEAAXPEBDPEAD@Z:PROC ; FString::VFormat + Line 285: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 286: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 287: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 288: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 289: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 290: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 291: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 292: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 293: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 294: EXTRN ?GetLumpFullPath@FWadCollection@@QEBA?AVFString@@H@Z:PROC ; FWadCollection::GetLumpFullPath + Line 295: EXTRN ?strbin@@YAHPEAD@Z:PROC ; strbin + Line 296: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 297: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 298: EXTRN __CxxFrameHandler3:PROC + Line 299: EXTRN memcpy:PROC + Line 300: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 301: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 302: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 303: EXTRN ?developer@@3VFIntCVar@@A:BYTE ; developer + Line 304: EXTRN __ImageBase:BYTE + Line 305: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\scopebarrier.cod (6 hits) + Line 35: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 36: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 37: EXTRN ?ThrowAbortException@@YAXW4EVMAbortException@@PEBDZZ:PROC ; ThrowAbortException + Line 38: EXTRN __CxxFrameHandler3:PROC + Line 39: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 40: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\scriptutil.cod (12 hits) + Line 19: EXTRN atexit:PROC + Line 20: EXTRN __std_terminate:PROC + Line 21: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 22: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 23: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 24: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 25: EXTRN ?FindFunction@PClass@@SAPEAVVMFunction@@VFName@@0@Z:PROC ; PClass::FindFunction + Line 26: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 27: EXTRN _CxxThrowException:PROC + Line 28: EXTRN __CxxFrameHandler3:PROC + Line 29: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 30: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\serializer.cod (65 hits) + Line 224: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 225: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 226: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 227: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 228: EXTRN atexit:PROC + Line 229: EXTRN _Init_thread_header:PROC + Line 230: EXTRN _Init_thread_footer:PROC + Line 231: EXTRN __std_terminate:PROC + Line 232: EXTRN free:PROC + Line 233: EXTRN malloc:PROC + Line 234: EXTRN realloc:PROC + Line 235: EXTRN deflate:PROC + Line 236: EXTRN deflateEnd:PROC + Line 237: EXTRN crc32:PROC + Line 238: EXTRN deflateInit2_:PROC + Line 239: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 240: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 241: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 242: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 243: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 244: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 245: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 246: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 247: EXTRN ?Decompress@FCompressedBuffer@@QEAA_NPEAD@Z:PROC ; FCompressedBuffer::Decompress + Line 248: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 249: EXTRN ?SerializeUserVars@DObject@@QEAAXAEAVFSerializer@@@Z:PROC ; DObject::SerializeUserVars + Line 250: EXTRN ?CheckIfSerialized@DObject@@QEBAXXZ:PROC ; DObject::CheckIfSerialized + Line 251: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 252: EXTRN ?Alloc@FSharedStringArena@@QEAAPEAVFString@@PEBD@Z:PROC ; FSharedStringArena::Alloc + Line 253: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 254: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 255: EXTRN ?GetLinkedTexture@FWadCollection@@QEAAPEAVFTexture@@H@Z:PROC ; FWadCollection::GetLinkedTexture + Line 256: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 257: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 258: EXTRN ?GetTextureID@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::GetTextureID + Line 259: EXTRN ?P_FindTerrain@@YAHVFName@@@Z:PROC ; P_FindTerrain + Line 260: EXTRN ?P_GetTerrainName@@YA?AVFName@@H@Z:PROC ; P_GetTerrainName + Line 261: EXTRN ?StaticFindStateOwner@FState@@SAPEAVPClassActor@@PEBU1@@Z:PROC ; FState::StaticFindStateOwner + Line 262: EXTRN ?V_GetFont@@YAPEAVFFont@@PEBD@Z:PROC ; V_GetFont + Line 263: EXTRN ?copystring@@YAPEADPEBD@Z:PROC ; copystring + Line 264: EXTRN _CxxThrowException:PROC + Line 265: EXTRN __CxxFrameHandler3:PROC + Line 266: EXTRN __chkstk:PROC + Line 267: EXTRN memcmp:PROC + Line 268: EXTRN memcpy:PROC + Line 269: EXTRN memmove:PROC + Line 270: EXTRN memset:PROC + Line 271: EXTRN _Init_thread_epoch:DWORD + Line 272: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 273: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 274: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 275: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 276: EXTRN ?NumStdSprites@@3IA:DWORD ; NumStdSprites + Line 277: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 278: EXTRN ?S_sfx@@3V?$TArray@Usfxinfo_t@@U1@@@A:BYTE ; S_sfx + Line 279: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 280: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 281: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 282: EXTRN ?mStringPropertyData@AActor@@2VFSharedStringArena@@A:BYTE ; AActor::mStringPropertyData + Line 283: EXTRN ?WP_NOCHANGE@@3PEAVAActor@@EA:QWORD ; WP_NOCHANGE + Line 284: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 285: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 286: EXTRN __ImageBase:BYTE + Line 287: EXTRN _fltused:DWORD + Line 288: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\sffile.cod (9 hits) + Line 68: EXTRN free:PROC + Line 69: EXTRN strncmp:PROC + Line 70: EXTRN ?ctl_cmsg@TimidityPlus@@YAXHHPEBDZZ:PROC ; TimidityPlus::ctl_cmsg + Line 71: EXTRN ?skip@TimidityPlus@@YAXPEAUtimidity_file@1@_K@Z:PROC ; TimidityPlus::skip + Line 72: EXTRN ?tf_read@TimidityPlus@@YAJPEAXHHPEAUtimidity_file@1@@Z:PROC ; TimidityPlus::tf_read + Line 73: EXTRN ?tf_tell@TimidityPlus@@YAJPEAUtimidity_file@1@@Z:PROC ; TimidityPlus::tf_tell + Line 74: EXTRN ?safe_malloc@TimidityPlus@@YAPEAX_K@Z:PROC ; TimidityPlus::safe_malloc + Line 75: EXTRN memcpy:PROC + Line 76: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\SFMT.cod (1 hit) + Line 19: EXTRN memset:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\shadertexture.cod (20 hits) + Line 20: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 21: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 22: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 23: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 24: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 25: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 26: EXTRN ??0FStringf@@QEAA@PEBDZZ:PROC ; FStringf::FStringf + Line 27: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 28: EXTRN ?CopyPixelData@FBitmap@@QEAAXHHPEBEHHHHHPEAUPalEntry@@PEAUFCopyInfo@@@Z:PROC ; FBitmap::CopyPixelData + Line 29: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 30: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 31: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 32: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 33: EXTRN ??0FImageTexture@@QEAA@PEAVFImageSource@@PEBD@Z:PROC ; FImageTexture::FImageTexture + Line 34: EXTRN ??_EFBarShader@@UEAAPEAXI@Z:PROC ; FBarShader::`vector deleting destructor' + Line 35: EXTRN __CxxFrameHandler3:PROC + Line 36: EXTRN ?translationtables@@3PAV?$TAutoGrowArray@VFRemapTablePtr@@PEAUFRemapTable@@@@A:BYTE ; translationtables + Line 37: EXTRN ?GrayMap@ImageHelpers@@3PAEA:BYTE ; ImageHelpers::GrayMap + Line 38: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 39: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\shared_hud.cod (15 hits) + Line 201: EXTRN atexit:PROC + Line 202: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 203: EXTRN ?FindFunction@PClass@@SAXPEAPEAVVMFunction@@VFName@@1@Z:PROC ; PClass::FindFunction + Line 204: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 205: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 206: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 207: EXTRN ?GetUIScale@@YAHH@Z:PROC ; GetUIScale + Line 208: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 209: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 210: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 211: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 212: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 213: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 214: EXTRN ?hud_aspectscale@@3VFBoolCVar@@A:BYTE ; hud_aspectscale + Line 215: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\shared_sbar.cod (117 hits) + Line 35: EXTRN ?setsizeneeded@@3_NA:BYTE ; setsizeneeded + Line 36: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 284: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 285: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 286: EXTRN atexit:PROC + Line 287: EXTRN __std_terminate:PROC + Line 288: EXTRN atoi:PROC + Line 289: EXTRN __stdio_common_vfprintf:PROC + Line 290: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 291: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 292: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 293: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 294: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 295: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 296: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 297: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 298: EXTRN mysnprintf:PROC + Line 299: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 300: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 301: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 302: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 303: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 304: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 305: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 306: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 307: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 308: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 309: EXTRN ?FindFunction@PClass@@SAPEAVVMFunction@@VFName@@0@Z:PROC ; PClass::FindFunction + Line 310: EXTRN ?FindFunction@PClass@@SAXPEAPEAVVMFunction@@VFName@@1@Z:PROC ; PClass::FindFunction + Line 311: EXTRN ?StringWidth@FFont@@QEBAHPEBE@Z:PROC ; FFont::StringWidth + Line 312: EXTRN ?V_ParseFontColor@@YA?AW4EColorRange@@AEAPEBEHH@Z:PROC ; V_ParseFontColor + Line 313: EXTRN ?V_BreakLines@@YA?AV?$TArray@UFBrokenLines@@U1@@@PEAVFFont@@HPEBE_N@Z:PROC ; V_BreakLines + Line 314: EXTRN ?CallTick@DHUDMessageBase@@QEAA_NXZ:PROC ; DHUDMessageBase::CallTick + Line 315: EXTRN ?CallScreenSizeChanged@DHUDMessageBase@@QEAAXXZ:PROC ; DHUDMessageBase::CallScreenSizeChanged + Line 316: EXTRN ?CallDraw@DHUDMessageBase@@QEAAXHH@Z:PROC ; DHUDMessageBase::CallDraw + Line 317: EXTRN ??0DHUDMessageFadeOut@@QEAA@PEAVFFont@@PEBDMMHHW4EColorRange@@MM@Z:PROC ; DHUDMessageFadeOut::DHUDMessageFadeOut + Line 318: EXTRN ??0FMugShot@@QEAA@XZ:PROC ; FMugShot::FMugShot + Line 319: EXTRN ?Reset@FMugShot@@QEAAXXZ:PROC ; FMugShot::Reset + Line 320: EXTRN ?Tick@FMugShot@@QEAAXPEAVplayer_t@@@Z:PROC ; FMugShot::Tick + Line 321: EXTRN ??_EDBaseStatusBar@@UEAAPEAXI@Z:PROC ; DBaseStatusBar::`vector deleting destructor' + Line 322: EXTRN ?CreateCustomStatusBar@@YAPEAVDBaseStatusBar@@H@Z:PROC ; CreateCustomStatusBar + Line 323: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 324: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 325: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 326: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 327: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 328: EXTRN ??0FColorCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FColorCVar::FColorCVar + Line 329: EXTRN ??0FFlagCVar@@QEAA@PEBDAEAVFIntCVar@@I@Z:PROC ; FFlagCVar::FFlagCVar + Line 330: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 331: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 332: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 333: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 334: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 335: EXTRN ?GetTextureID@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::GetTextureID + Line 336: EXTRN ?V_CalcCleanFacs@@YAXHHHHPEAH000@Z:PROC ; V_CalcCleanFacs + Line 337: EXTRN ?SetClipRect@DFrameBuffer@@QEAAXHHHH@Z:PROC ; DFrameBuffer::SetClipRect + Line 338: EXTRN ?Dim@DFrameBuffer@@QEAAXUPalEntry@@MHHHHPEATFRenderStyle@@@Z:PROC ; DFrameBuffer::Dim + Line 339: EXTRN ?FlatFill@DFrameBuffer@@QEAAXHHHHPEAVFTexture@@_N@Z:PROC ; DFrameBuffer::FlatFill + Line 340: EXTRN ?DrawTexture@DFrameBuffer@@QEAAXPEAVFTexture@@NNHZZ:PROC ; DFrameBuffer::DrawTexture + Line 341: EXTRN ?VirtualToRealCoords@DFrameBuffer@@QEBAXAEAN000NN_N1@Z:PROC ; DFrameBuffer::VirtualToRealCoords + Line 342: EXTRN ?DrawText@DFrameBuffer@@QEAAXPEAVFFont@@HNNPEBDHZZ:PROC ; DFrameBuffer::DrawText + Line 343: EXTRN ?DrawChar@DFrameBuffer@@QEAAXPEAVFFont@@HNNHHZZ:PROC ; DFrameBuffer::DrawChar + Line 344: EXTRN ?DrawFrame@DFrameBuffer@@QEAAXHHHH@Z:PROC ; DFrameBuffer::DrawFrame + Line 345: EXTRN ?DrawBorder@DFrameBuffer@@QEAAXVFTextureID@@HHHH@Z:PROC ; DFrameBuffer::DrawBorder + Line 346: EXTRN ?ActiveRatio@@YAMHHPEAM@Z:PROC ; ActiveRatio + Line 347: EXTRN ?AspectTallerThanWide@@YA_NM@Z:PROC ; AspectTallerThanWide + Line 348: EXTRN ?GetUIScale@@YAHH@Z:PROC ; GetUIScale + Line 349: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 350: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 351: EXTRN ?S_NoiseDebug@@YAXXZ:PROC ; S_NoiseDebug + Line 352: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 353: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 354: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 355: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 356: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 357: EXTRN ?ThrowAbortException@@YAXW4EVMAbortException@@PEBDZZ:PROC ; ThrowAbortException + Line 358: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 359: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 360: EXTRN ?E_RenderOverlay@@YAXW4EHudState@@@Z:PROC ; E_RenderOverlay + Line 361: EXTRN __CxxFrameHandler3:PROC + Line 362: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 363: EXTRN ?State@GC@@3W4EGCState@1@A:DWORD ; GC::State + Line 364: EXTRN ?NumTextColors@@3HA:DWORD ; NumTextColors + Line 365: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 366: EXTRN ?RegistrationInfo@DHUDMessageFadeOut@@2UClassReg@@A:BYTE ; DHUDMessageFadeOut::RegistrationInfo + Line 367: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 368: EXTRN ?CleanXfac@@3HA:DWORD ; CleanXfac + Line 369: EXTRN ?CleanYfac@@3HA:DWORD ; CleanYfac + Line 370: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 371: EXTRN ?con_scaletext@@3VFIntCVar@@A:BYTE ; con_scaletext + Line 372: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 373: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 374: EXTRN ?netgame@@3_NA:BYTE ; netgame + Line 375: EXTRN ?automapactive@@3_NA:BYTE ; automapactive + Line 376: EXTRN ?viewactive@@3_NA:BYTE ; viewactive + Line 377: EXTRN ?viewwindowx@@3HA:DWORD ; viewwindowx + Line 378: EXTRN ?viewwindowy@@3HA:DWORD ; viewwindowy + Line 379: EXTRN ?viewheight@@3HA:DWORD ; viewheight + Line 380: EXTRN ?viewwidth@@3HA:DWORD ; viewwidth + Line 381: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 382: EXTRN ?demoplayback@@3_NA:BYTE ; demoplayback + Line 383: EXTRN ?demover@@3HA:DWORD ; demover + Line 384: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 385: EXTRN ?debugfile@@3PEAU_iobuf@@EA:QWORD ; debugfile + Line 386: EXTRN ?ticdup@@3HA:DWORD ; ticdup + Line 387: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 388: EXTRN ?save_full@@3_NA:BYTE ; save_full + Line 389: EXTRN ?SpriteFrames@@3V?$TArray@Uspriteframe_t@@U1@@@A:BYTE ; SpriteFrames + Line 390: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 391: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 392: EXTRN ?setblocks@@3HA:DWORD ; setblocks + Line 393: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 394: EXTRN ?SBarInfoScript@@3PAPEAUSBarInfo@@A:BYTE ; SBarInfoScript + Line 395: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 396: EXTRN ?noisedebug@@3VFBoolCVar@@A:BYTE ; noisedebug + Line 397: EXTRN ?vid_fps@@3VFBoolCVar@@A:BYTE ; vid_fps + Line 398: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\sin.cod (9 hits) + Line 16: EXTRN mtherr:PROC + Line 17: EXTRN polevl:PROC + Line 18: EXTRN ldexp:PROC + Line 19: EXTRN isnan:PROC + Line 20: EXTRN isfinite:PROC + Line 21: EXTRN floor:PROC + Line 22: EXTRN PIO4:QWORD + Line 23: EXTRN NAN:QWORD + Line 24: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\sinh.cod (9 hits) + Line 14: EXTRN mtherr:PROC + Line 15: EXTRN c_exp:PROC + Line 16: EXTRN polevl:PROC + Line 17: EXTRN p1evl:PROC + Line 18: EXTRN INFINITY:QWORD + Line 19: EXTRN MINLOG:QWORD + Line 20: EXTRN MAXLOG:QWORD + Line 21: EXTRN LOGE2:QWORD + Line 22: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\skyboxtexture.cod (9 hits) + Line 16: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 17: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 18: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 19: EXTRN ??1FTexture@@UEAA@XZ:PROC ; FTexture::~FTexture + Line 20: EXTRN ??0FTexture@@IEAA@PEBDH@Z:PROC ; FTexture::FTexture + Line 21: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 22: EXTRN ??_EFSkyBox@@UEAAPEAXI@Z:PROC ; FSkyBox::`vector deleting destructor' + Line 23: EXTRN __CxxFrameHandler3:PROC + Line 24: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\slopes.cod (15 hits) + Line 38: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 39: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 40: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 41: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 42: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 43: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 44: EXTRN c_sqrt:PROC + Line 45: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 46: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 47: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 48: EXTRN ?Next@FLineIdIterator@@QEAAHXZ:PROC ; FLineIdIterator::Next + Line 49: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 50: EXTRN __CxxFrameHandler3:PROC + Line 51: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 52: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\smplfile.cod (21 hits) + Line 74: EXTRN free:PROC + Line 75: EXTRN malloc:PROC + Line 76: EXTRN strrchr:PROC + Line 77: EXTRN _stricmp:PROC + Line 78: EXTRN strdup:PROC + Line 79: EXTRN ldexp:PROC + Line 80: EXTRN ?ctl_cmsg@TimidityPlus@@YAXHHPEBDZZ:PROC ; TimidityPlus::ctl_cmsg + Line 81: EXTRN ?open_file@TimidityPlus@@YAPEAUtimidity_file@1@PEBDPEAVFSoundFontReader@@@Z:PROC ; TimidityPlus::open_file + Line 82: EXTRN ?tf_close@TimidityPlus@@YAXPEAUtimidity_file@1@@Z:PROC ; TimidityPlus::tf_close + Line 83: EXTRN ?tf_read@TimidityPlus@@YAJPEAXHHPEAUtimidity_file@1@@Z:PROC ; TimidityPlus::tf_read + Line 84: EXTRN ?tf_seek@TimidityPlus@@YAJPEAUtimidity_file@1@JH@Z:PROC ; TimidityPlus::tf_seek + Line 85: EXTRN ?tf_tell@TimidityPlus@@YAJPEAUtimidity_file@1@@Z:PROC ; TimidityPlus::tf_tell + Line 86: EXTRN ?safe_malloc@TimidityPlus@@YAPEAX_K@Z:PROC ; TimidityPlus::safe_malloc + Line 87: EXTRN ?convert_envelope_offset@Instruments@TimidityPlus@@AEAAHE@Z:PROC ; TimidityPlus::Instruments::convert_envelope_offset + Line 88: EXTRN ?free_instrument@Instruments@TimidityPlus@@QEAAXPEAUInstrument@2@@Z:PROC ; TimidityPlus::Instruments::free_instrument + Line 89: EXTRN ?pre_resample@TimidityPlus@@YAXPEAUSample@1@@Z:PROC ; TimidityPlus::pre_resample + Line 90: EXTRN pow:PROC + Line 91: EXTRN ?playback_rate@TimidityPlus@@3HA:DWORD ; TimidityPlus::playback_rate + Line 92: EXTRN ?control_ratio@TimidityPlus@@3HA:DWORD ; TimidityPlus::control_ratio + Line 93: EXTRN ?freq_table@TimidityPlus@@3PAHA:BYTE ; TimidityPlus::freq_table + Line 94: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\sndfile_decoder.cod (15 hits) + Line 63: EXTRN _purecall:PROC + Line 64: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 65: EXTRN atexit:PROC + Line 66: EXTRN __std_terminate:PROC + Line 67: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 68: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 69: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 70: EXTRN ?readAll@SoundDecoder@@UEAA?AV?$TArray@EE@@XZ:PROC ; SoundDecoder::readAll + Line 71: EXTRN ??_ESoundDecoder@@UEAAPEAXI@Z:PROC ; SoundDecoder::`vector deleting destructor' + Line 72: EXTRN ??_ESndFileDecoder@@UEAAPEAXI@Z:PROC ; SndFileDecoder::`vector deleting destructor' + Line 73: EXTRN ?Load@FModule@@QEAA_NV?$initializer_list@PEBD@std@@@Z:PROC ; FModule::Load + Line 74: EXTRN ?Unload@FModule@@QEAAXXZ:PROC ; FModule::Unload + Line 75: EXTRN ?NicePath@@YA?AVFString@@PEBD@Z:PROC ; NicePath + Line 76: EXTRN __CxxFrameHandler3:PROC + Line 77: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\sndfont.cod (37 hits) + Line 80: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 81: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 82: EXTRN free:PROC + Line 83: EXTRN __acrt_iob_func:PROC + Line 84: EXTRN __stdio_common_vfprintf:PROC + Line 85: EXTRN ?ctl_cmsg@TimidityPlus@@YAXHHPEBDZZ:PROC ; TimidityPlus::ctl_cmsg + Line 86: EXTRN ?init_mblock@TimidityPlus@@YAXPEAUMBlockList@1@@Z:PROC ; TimidityPlus::init_mblock + Line 87: EXTRN ?new_segment@TimidityPlus@@YAPEAXPEAUMBlockList@1@_K@Z:PROC ; TimidityPlus::new_segment + Line 88: EXTRN ?reuse_mblock@TimidityPlus@@YAXPEAUMBlockList@1@@Z:PROC ; TimidityPlus::reuse_mblock + Line 89: EXTRN ?strdup_mblock@TimidityPlus@@YAPEADPEAUMBlockList@1@PEBD@Z:PROC ; TimidityPlus::strdup_mblock + Line 90: EXTRN ?open_file@TimidityPlus@@YAPEAUtimidity_file@1@PEBDPEAVFSoundFontReader@@@Z:PROC ; TimidityPlus::open_file + Line 91: EXTRN ?tf_close@TimidityPlus@@YAXPEAUtimidity_file@1@@Z:PROC ; TimidityPlus::tf_close + Line 92: EXTRN ?tf_read@TimidityPlus@@YAJPEAXHHPEAUtimidity_file@1@@Z:PROC ; TimidityPlus::tf_read + Line 93: EXTRN ?tf_seek@TimidityPlus@@YAJPEAUtimidity_file@1@JH@Z:PROC ; TimidityPlus::tf_seek + Line 94: EXTRN ?safe_malloc@TimidityPlus@@YAPEAX_K@Z:PROC ; TimidityPlus::safe_malloc + Line 95: EXTRN ?safe_large_malloc@TimidityPlus@@YAPEAX_K@Z:PROC ; TimidityPlus::safe_large_malloc + Line 96: EXTRN ?sbk_to_sf2@TimidityPlus@@YAHHHPEBU_LayerItem@1@@Z:PROC ; TimidityPlus::sbk_to_sf2 + Line 97: EXTRN ?load_soundfont@Instruments@TimidityPlus@@AEAAHPEAU_SFInfo@2@PEAUtimidity_file@2@@Z:PROC ; TimidityPlus::Instruments::load_soundfont + Line 98: EXTRN ?free_soundfont@Instruments@TimidityPlus@@AEAAXPEAU_SFInfo@2@@Z:PROC ; TimidityPlus::Instruments::free_soundfont + Line 99: EXTRN ?correct_samples@Instruments@TimidityPlus@@AEAAXPEAU_SFInfo@2@@Z:PROC ; TimidityPlus::Instruments::correct_samples + Line 100: EXTRN ?alloc_instrument_bank@Instruments@TimidityPlus@@QEAAXHH@Z:PROC ; TimidityPlus::Instruments::alloc_instrument_bank + Line 101: EXTRN ?assign_pitch_to_freq@TimidityPlus@@YAHM@Z:PROC ; TimidityPlus::assign_pitch_to_freq + Line 102: EXTRN ?freq_fourier@Freq@TimidityPlus@@QEAAMPEAUSample@2@PEAH@Z:PROC ; TimidityPlus::Freq::freq_fourier + Line 103: EXTRN ?pre_resample@TimidityPlus@@YAXPEAUSample@1@@Z:PROC ; TimidityPlus::pre_resample + Line 104: EXTRN __CxxFrameHandler3:PROC + Line 105: EXTRN memset:PROC + Line 106: EXTRN pow:PROC + Line 107: EXTRN ?timidity_surround_chorus@TimidityPlus@@3_NA:BYTE ; TimidityPlus::timidity_surround_chorus + Line 108: EXTRN ?timidity_modulation_envelope@TimidityPlus@@3_NA:BYTE ; TimidityPlus::timidity_modulation_envelope + Line 109: EXTRN ?playback_rate@TimidityPlus@@3HA:DWORD ; TimidityPlus::playback_rate + Line 110: EXTRN ?control_ratio@TimidityPlus@@3HA:DWORD ; TimidityPlus::control_ratio + Line 111: EXTRN ?freq_table@TimidityPlus@@3PAHA:BYTE ; TimidityPlus::freq_table + Line 112: EXTRN ?bend_fine@TimidityPlus@@3PANA:BYTE ; TimidityPlus::bend_fine + Line 113: EXTRN ?bend_coarse@TimidityPlus@@3PANA:BYTE ; TimidityPlus::bend_coarse + Line 114: EXTRN ?cb_to_amp_table@TimidityPlus@@3QBMB:BYTE ; TimidityPlus::cb_to_amp_table + Line 115: EXTRN __ImageBase:BYTE + Line 116: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\sourcedtexture.cod (19 hits) + Line 23: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 24: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 25: EXTRN __std_terminate:PROC + Line 26: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 27: EXTRN ??1FTexture@@UEAA@XZ:PROC ; FTexture::~FTexture + Line 28: EXTRN ?GetColumnBgra@FTexture@@UEAAPEBIIPEAPEBUSpan@1@@Z:PROC ; FTexture::GetColumnBgra + Line 29: EXTRN ?GetPixelsBgra@FTexture@@UEAAPEBIXZ:PROC ; FTexture::GetPixelsBgra + Line 30: EXTRN ?GetRedirect@FTexture@@UEAAPEAV1@_N@Z:PROC ; FTexture::GetRedirect + Line 31: EXTRN ?GetRawTexture@FTexture@@UEAAPEAV1@XZ:PROC ; FTexture::GetRawTexture + Line 32: EXTRN ?Unload@FTexture@@UEAAXXZ:PROC ; FTexture::Unload + Line 33: EXTRN ?FillBuffer@FTexture@@UEAAXPEAEHHW4FTextureFormat@@@Z:PROC ; FTexture::FillBuffer + Line 34: EXTRN ?CheckModified@FTexture@@UEAA_NXZ:PROC ; FTexture::CheckModified + Line 35: EXTRN ?HackHack@FTexture@@UEAAXH@Z:PROC ; FTexture::HackHack + Line 36: EXTRN ??0FTexture@@IEAA@PEBDH@Z:PROC ; FTexture::FTexture + Line 37: EXTRN ?CreateSpans@FTexture@@IEBAPEAPEAUSpan@1@PEBE@Z:PROC ; FTexture::CreateSpans + Line 38: EXTRN ?FreeSpans@FTexture@@IEBAXPEAPEAUSpan@1@@Z:PROC ; FTexture::FreeSpans + Line 39: EXTRN ?CalcBitSize@FTexture@@IEAAXXZ:PROC ; FTexture::CalcBitSize + Line 40: EXTRN ??_EFSourcedTexture@@UEAAPEAXI@Z:PROC ; FSourcedTexture::`vector deleting destructor' + Line 41: EXTRN __CxxFrameHandler3:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\specials.cod (57 hits) + Line 45: EXTRN __std_terminate:PROC + Line 46: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 47: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 48: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 49: EXTRN c_sqrt:PROC + Line 50: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 51: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 52: EXTRN ?P_Recalculate3DFloors@@YAXPEAUsector_t@@@Z:PROC ; P_Recalculate3DFloors + Line 53: EXTRN ?P_Add3DFloor@@YAXPEAUsector_t@@0PEAUline_t@@HH@Z:PROC ; P_Add3DFloor + Line 54: EXTRN ?AdjustFloorClip@@YAXPEBUsector_t@@@Z:PROC ; AdjustFloorClip + Line 55: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 56: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 57: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 58: EXTRN ?P_SetSectorFriction@@YAXPEAUFLevelLocals@@HH_N@Z:PROC ; P_SetSectorFriction + Line 59: EXTRN ?SectorHasTag@FTagManager@@AEBA_NPEBUsector_t@@H@Z:PROC ; FTagManager::SectorHasTag + Line 60: EXTRN ?GetFirstLineID@FTagManager@@AEBAHPEBUline_t@@@Z:PROC ; FTagManager::GetFirstLineID + Line 61: EXTRN ?AddLineID@FTagManager@@QEAAXHH@Z:PROC ; FTagManager::AddLineID + Line 62: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 63: EXTRN ?Next@FLineIdIterator@@QEAAHXZ:PROC ; FLineIdIterator::Next + Line 64: EXTRN ?Construct@DDoor@@QEAAXPEAUsector_t@@W4EVlDoor@1@NHHH@Z:PROC ; DDoor::Construct + Line 65: EXTRN ?P_GetLineSpecialInfo@@YAPEAUFLineSpecial@@H@Z:PROC ; P_GetLineSpecialInfo + Line 66: EXTRN ?StartTypedScripts@FBehaviorContainer@@QEAAXGPEAVAActor@@_NH1@Z:PROC ; FBehaviorContainer::StartTypedScripts + Line 67: EXTRN ?P_Attach3dMidtexLinesToSector@@YAXPEAUsector_t@@HH_N@Z:PROC ; P_Attach3dMidtexLinesToSector + Line 68: EXTRN ?P_AddSectorLinks@@YA_NPEAUsector_t@@HHH@Z:PROC ; P_AddSectorLinks + Line 69: EXTRN ?P_AddSectorLinksByID@@YAXPEAUsector_t@@HH@Z:PROC ; P_AddSectorLinksByID + Line 70: EXTRN ?FindPortalDestination@FLevelLocals@@AEAAPEAUline_t@@PEAU2@H@Z:PROC ; FLevelLocals::FindPortalDestination + Line 71: EXTRN ?GetSkyboxPortal@FLevelLocals@@QEAAIPEAVAActor@@@Z:PROC ; FLevelLocals::GetSkyboxPortal + Line 72: EXTRN ?GetPortal@FLevelLocals@@QEAAIHHPEAUsector_t@@0AEBU?$TVector2@N@@@Z:PROC ; FLevelLocals::GetPortal + Line 73: EXTRN ?GetStackPortal@FLevelLocals@@QEAAIPEAVAActor@@H@Z:PROC ; FLevelLocals::GetStackPortal + Line 74: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 75: EXTRN ?Construct@DLightTransfer@@QEAAXPEAUsector_t@@H_N@Z:PROC ; DLightTransfer::Construct + Line 76: EXTRN ?Construct@DWallLightTransfer@@QEAAXPEAUsector_t@@HE@Z:PROC ; DWallLightTransfer::Construct + Line 77: EXTRN ?Construct@DFireFlicker@@QEAAXPEAUsector_t@@@Z:PROC ; DFireFlicker::Construct + Line 78: EXTRN ?Construct@DLightFlash@@QEAAXPEAUsector_t@@@Z:PROC ; DLightFlash::Construct + Line 79: EXTRN ?Construct@DStrobe@@QEAAXPEAUsector_t@@HH_N@Z:PROC ; DStrobe::Construct + Line 80: EXTRN ?Construct@DGlow@@QEAAXPEAUsector_t@@@Z:PROC ; DGlow::Construct + Line 81: EXTRN ?Construct@DPhased@@QEAAXPEAUsector_t@@HH@Z:PROC ; DPhased::Construct + Line 82: EXTRN ?Construct@DPusher@@QEAAXW4EPusher@1@PEAUline_t@@HHPEAVAActor@@H@Z:PROC ; DPusher::Construct + Line 83: EXTRN ?Construct@DScroller@@QEAAXW4EScroll@@NNPEAUsector_t@@1PEAUside_t@@HW4EScrollPos@@@Z:PROC ; DScroller::Construct + Line 84: EXTRN ?Construct@DScroller@@QEAAXNNPEBUline_t@@PEAUsector_t@@HW4EScrollPos@@@Z:PROC ; DScroller::Construct + Line 85: EXTRN ?ProcessEDSectors@MapLoader@@QEAAXXZ:PROC ; MapLoader::ProcessEDSectors + Line 86: EXTRN __CxxFrameHandler3:PROC + Line 87: EXTRN ?RegistrationInfo@DDoor@@2UClassReg@@A:BYTE ; DDoor::RegistrationInfo + Line 88: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 89: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 90: EXTRN ?RegistrationInfo@DLightTransfer@@2UClassReg@@A:BYTE ; DLightTransfer::RegistrationInfo + Line 91: EXTRN ?RegistrationInfo@DWallLightTransfer@@2UClassReg@@A:BYTE ; DWallLightTransfer::RegistrationInfo + Line 92: EXTRN ?RegistrationInfo@DFireFlicker@@2UClassReg@@A:BYTE ; DFireFlicker::RegistrationInfo + Line 93: EXTRN ?RegistrationInfo@DLightFlash@@2UClassReg@@A:BYTE ; DLightFlash::RegistrationInfo + Line 94: EXTRN ?RegistrationInfo@DStrobe@@2UClassReg@@A:BYTE ; DStrobe::RegistrationInfo + Line 95: EXTRN ?RegistrationInfo@DGlow@@2UClassReg@@A:BYTE ; DGlow::RegistrationInfo + Line 96: EXTRN ?RegistrationInfo@DPhased@@2UClassReg@@A:BYTE ; DPhased::RegistrationInfo + Line 97: EXTRN ?RegistrationInfo@DPusher@@2UClassReg@@A:BYTE ; DPusher::RegistrationInfo + Line 98: EXTRN ?RegistrationInfo@DScroller@@2UClassReg@@A:BYTE ; DScroller::RegistrationInfo + Line 99: EXTRN ?forcewater@@3VFBoolCVar@@A:BYTE ; forcewater + Line 100: EXTRN __ImageBase:BYTE + Line 101: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\sprites.cod (63 hits) + Line 323: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 324: EXTRN atexit:PROC + Line 325: EXTRN __std_terminate:PROC + Line 326: EXTRN atof:PROC + Line 327: EXTRN strncpy:PROC + Line 328: EXTRN stricmp:PROC + Line 329: EXTRN toupper:PROC + Line 330: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 331: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 332: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 333: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 334: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 335: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 336: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 337: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 338: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 339: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 340: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 341: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 342: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 343: EXTRN ?GetNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::GetNumForName + Line 344: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 345: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 346: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 347: EXTRN ?GetLumpName@FWadCollection@@QEBAXPEADH@Z:PROC ; FWadCollection::GetLumpName + Line 348: EXTRN ?GetLumpNamespace@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpNamespace + Line 349: EXTRN ?GetNumLumps@FWadCollection@@QEBAHXZ:PROC ; FWadCollection::GetNumLumps + Line 350: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 351: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 352: EXTRN ?S_HashSounds@@YAXXZ:PROC ; S_HashSounds + Line 353: EXTRN ?S_FindSoundNoHash@@YAHPEBD@Z:PROC ; S_FindSoundNoHash + Line 354: EXTRN ?S_AddPlayerSound@@YAHPEBDHHH_N@Z:PROC ; S_AddPlayerSound + Line 355: EXTRN ?S_AddPlayerSoundExisting@@YAHPEBDHHH_N@Z:PROC ; S_AddPlayerSoundExisting + Line 356: EXTRN ?S_ShrinkPlayerSoundLists@@YAXXZ:PROC ; S_ShrinkPlayerSoundLists + Line 357: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 358: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 359: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 360: EXTRN ?CreateTexture@FTextureManager@@QEAA?AVFTextureID@@HW4ETextureType@@@Z:PROC ; FTextureManager::CreateTexture + Line 361: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 362: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 363: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 364: EXTRN ?D_GenderToInt@@YAHPEBD@Z:PROC ; D_GenderToInt + Line 365: EXTRN ?D_PlayerClassToInt@@YAHPEBD@Z:PROC ; D_PlayerClassToInt + Line 366: EXTRN ?CheckSkin@FPlayerClass@@QEAA_NH@Z:PROC ; FPlayerClass::CheckSkin + Line 367: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 368: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 369: EXTRN ?R_LoadVoxelDef@@YAPEAUFVoxelDef@@HH@Z:PROC ; R_LoadVoxelDef + Line 370: EXTRN ?R_InitVoxels@@YAXXZ:PROC ; R_InitVoxels + Line 371: EXTRN ?InitModels@@YAXXZ:PROC ; InitModels + Line 372: EXTRN __CxxFrameHandler3:PROC + Line 373: EXTRN memmove:PROC + Line 374: EXTRN memset:PROC + Line 375: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 376: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 377: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 378: EXTRN ?deh@@3UDehInfo@@A:BYTE ; deh + Line 379: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 380: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 381: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 382: EXTRN ?PlayerClasses@@3V?$TArray@VFPlayerClass@@V1@@@A:BYTE ; PlayerClasses + Line 383: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 384: EXTRN __ImageBase:BYTE + Line 385: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\sqrt.cod (5 hits) + Line 13: EXTRN mtherr:PROC + Line 14: EXTRN frexp:PROC + Line 15: EXTRN ldexp:PROC + Line 16: EXTRN SQRT2:QWORD + Line 17: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\st_start.cod (84 hits) + Line 194: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 195: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 196: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 197: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 198: EXTRN atexit:PROC + Line 199: EXTRN __std_terminate:PROC + Line 200: EXTRN __imp_GetMessageA:PROC + Line 201: EXTRN __imp_TranslateMessage:PROC + Line 202: EXTRN __imp_DispatchMessageA:PROC + Line 203: EXTRN __imp_SendMessageA:PROC + Line 204: EXTRN __imp_PostQuitMessage:PROC + Line 205: EXTRN __imp_CreateWindowExA:PROC + Line 206: EXTRN __imp_DestroyWindow:PROC + Line 207: EXTRN __imp_MoveWindow:PROC + Line 208: EXTRN __imp_SetWindowPos:PROC + Line 209: EXTRN __imp_CreateDialogParamA:PROC + Line 210: EXTRN __imp_GetDlgItem:PROC + Line 211: EXTRN __imp_SetDlgItemTextA:PROC + Line 212: EXTRN __imp_SendDlgItemMessageA:PROC + Line 213: EXTRN __imp_SetFocus:PROC + Line 214: EXTRN __imp_SetTimer:PROC + Line 215: EXTRN __imp_KillTimer:PROC + Line 216: EXTRN __imp_InvalidateRect:PROC + Line 217: EXTRN __imp_GetClientRect:PROC + Line 218: EXTRN __imp_GetWindowRect:PROC + Line 219: EXTRN __imp_AdjustWindowRectEx:PROC + Line 220: EXTRN __imp_GetWindowLongA:PROC + Line 221: EXTRN __imp_SetWindowLongA:PROC + Line 222: EXTRN __imp_IsDialogMessageA:PROC + Line 223: EXTRN __imp_EnumDisplaySettingsA:PROC + Line 224: EXTRN ??0FStartupScreen@@QEAA@H@Z:PROC ; FStartupScreen::FStartupScreen + Line 225: EXTRN ??1FStartupScreen@@UEAA@XZ:PROC ; FStartupScreen::~FStartupScreen + Line 226: EXTRN ?LoadingStatus@FStartupScreen@@UEAAXPEBDH@Z:PROC ; FStartupScreen::LoadingStatus + Line 227: EXTRN ?AppendStatusLine@FStartupScreen@@UEAAXPEBD@Z:PROC ; FStartupScreen::AppendStatusLine + Line 228: EXTRN exit:PROC + Line 229: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 230: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 231: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 232: EXTRN ?VFormat@FString@@QEAAXPEBDPEAD@Z:PROC ; FString::VFormat + Line 233: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 234: EXTRN mysnprintf:PROC + Line 235: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 236: EXTRN ?I_GetEvent@@YAXXZ:PROC ; I_GetEvent + Line 237: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 238: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 239: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 240: EXTRN ?I_ShutdownGraphics@@YAXXZ:PROC ; I_ShutdownGraphics + Line 241: EXTRN ?ReadPalette@@YAXHPEAE@Z:PROC ; ReadPalette + Line 242: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 243: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 244: EXTRN ?ReadLump@FWadCollection@@QEAAXHPEAX@Z:PROC ; FWadCollection::ReadLump + Line 245: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 246: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 247: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 248: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 249: EXTRN ?S_Sound@@YAXHVFSoundID@@MM@Z:PROC ; S_Sound + Line 250: EXTRN ?S_ChangeMusic@@YA_NPEBDH_N1@Z:PROC ; S_ChangeMusic + Line 251: EXTRN ?S_StopMusic@@YAX_N@Z:PROC ; S_StopMusic + Line 252: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 253: EXTRN ??_EFBasicStartupScreen@@UEAAPEAXI@Z:PROC ; FBasicStartupScreen::`vector deleting destructor' + Line 254: EXTRN ??_EFGraphicalStartupScreen@@UEAAPEAXI@Z:PROC ; FGraphicalStartupScreen::`vector deleting destructor' + Line 255: EXTRN ??_EFHereticStartupScreen@@UEAAPEAXI@Z:PROC ; FHereticStartupScreen::`vector deleting destructor' + Line 256: EXTRN ??_EFHexenStartupScreen@@UEAAPEAXI@Z:PROC ; FHexenStartupScreen::`vector deleting destructor' + Line 257: EXTRN ??_EFStrifeStartupScreen@@UEAAPEAXI@Z:PROC ; FStrifeStartupScreen::`vector deleting destructor' + Line 258: EXTRN ?RestoreConView@@YAXXZ:PROC ; RestoreConView + Line 259: EXTRN ?LayoutMainWindow@@YAXPEAUHWND__@@0@Z:PROC ; LayoutMainWindow + Line 260: EXTRN ?LayoutNetStartPane@@YAHPEAUHWND__@@H@Z:PROC ; LayoutNetStartPane + Line 261: EXTRN __CxxFrameHandler3:PROC + Line 262: EXTRN __chkstk:PROC + Line 263: EXTRN memcpy:PROC + Line 264: EXTRN memset:PROC + Line 265: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 266: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + Line 267: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 268: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 269: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 270: EXTRN ?DoomStartupInfo@@3UFStartupInfo@@A:BYTE ; DoomStartupInfo + Line 271: EXTRN ?g_hInst@@3PEAUHINSTANCE__@@EA:QWORD ; g_hInst + Line 272: EXTRN ?Window@@3PEAUHWND__@@EA:QWORD ; Window + Line 273: EXTRN ?ProgressBar@@3PEAUHWND__@@EA:QWORD ; ProgressBar + Line 274: EXTRN ?NetStartPane@@3PEAUHWND__@@EA:QWORD ; NetStartPane + Line 275: EXTRN ?StartupScreen@@3PEAUHWND__@@EA:QWORD ; StartupScreen + Line 276: EXTRN ?GameTitleWindow@@3PEAUHWND__@@EA:QWORD ; GameTitleWindow + Line 277: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\st_stuff.cod (17 hits) + Line 24: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 25: EXTRN ?automapactive@@3_NA:BYTE ; automapactive + Line 26: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 27: EXTRN ?ticker@@3VFBoolCVar@@A:BYTE ; ticker + Line 28: EXTRN ?noisedebug@@3VFBoolCVar@@A:BYTE ; noisedebug + Line 29: EXTRN ?am_cheat@@3VFIntCVar@@A:BYTE ; am_cheat + Line 890: EXTRN atexit:PROC + Line 891: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 892: EXTRN mysnprintf:PROC + Line 893: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 894: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 895: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 896: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 897: EXTRN ?CheckCheatmode@@YA_N_N@Z:PROC ; CheckCheatmode + Line 898: EXTRN ?C_DoCommand@@YAXPEBDH@Z:PROC ; C_DoCommand + Line 899: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 900: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\statistics.cod (76 hits) + Line 17: EXTRN ??_EStat_statistics@@UEAAPEAXI@Z:PROC ; Stat_statistics::`vector deleting destructor' + Line 103: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 104: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 105: EXTRN atexit:PROC + Line 106: EXTRN __std_terminate:PROC + Line 107: EXTRN qsort:PROC + Line 108: EXTRN strtol:PROC + Line 109: EXTRN __stdio_common_vsscanf:PROC + Line 110: EXTRN strncmp:PROC + Line 111: EXTRN strncpy:PROC + Line 112: EXTRN stricmp:PROC + Line 113: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 114: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 115: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 116: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 117: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 118: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 119: EXTRN ??HFString@@QEBA?AV0@AEBV0@@Z:PROC ; FString::operator+ + Line 120: EXTRN ??HFString@@QEBA?AV0@PEBD@Z:PROC ; FString::operator+ + Line 121: EXTRN ?ToUpper@FString@@QEAAXXZ:PROC ; FString::ToUpper + Line 122: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 123: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 124: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 125: EXTRN _localtime64:PROC + Line 126: EXTRN _time64:PROC + Line 127: EXTRN strnatcasecmp:PROC + Line 128: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 129: EXTRN mysnprintf:PROC + Line 130: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 131: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 132: EXTRN ?OpenFile@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::OpenFile + Line 133: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 134: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 135: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 136: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 137: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 138: EXTRN ?Open@FileWriter@@SAPEAV1@PEBD@Z:PROC ; FileWriter::Open + Line 139: EXTRN ?Printf@FileWriter@@QEAA_KPEBDZZ:PROC ; FileWriter::Printf + Line 140: EXTRN ?CheckLevelRedirect@level_info_t@@QEAAPEAU1@XZ:PROC ; level_info_t::CheckLevelRedirect + Line 141: EXTRN ?FindLevelInfo@@YAPEAUlevel_info_t@@PEBD_N@Z:PROC ; FindLevelInfo + Line 142: EXTRN ?G_SkillProperty@@YAHW4ESkillProperty@@@Z:PROC ; G_SkillProperty + Line 143: EXTRN ??AFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator[] + Line 144: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 145: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 146: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 147: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 148: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 149: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 150: EXTRN ?Net_WriteByte@@YAXE@Z:PROC ; Net_WriteByte + Line 151: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 152: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 153: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 154: EXTRN ?GetWadName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetWadName + Line 155: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 156: EXTRN ?P_OpenMapData@@YAPEAUMapData@@PEBD_N@Z:PROC ; P_OpenMapData + Line 157: EXTRN ?ExtractFileBase@@YA?AVFString@@PEBD_N@Z:PROC ; ExtractFileBase + Line 158: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 159: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 160: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 161: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 162: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 163: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 164: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 165: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 166: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFString@@PEAV2@@Z:PROC ; Serialize + Line 167: EXTRN __CxxFrameHandler3:PROC + Line 168: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 169: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 170: EXTRN ?AllEpisodes@@3V?$TArray@UFEpisode@@U1@@@A:BYTE ; AllEpisodes + Line 171: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 172: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 173: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 174: EXTRN ?gamestate@@3W4gamestate_t@@A:DWORD ; gamestate + Line 175: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 176: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 177: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\stats.cod (18 hits) + Line 34: EXTRN _purecall:PROC + Line 35: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 36: EXTRN atexit:PROC + Line 37: EXTRN stricmp:PROC + Line 38: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 39: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 40: EXTRN ??_EFStat@@UEAAPEAXI@Z:PROC ; FStat::`vector deleting destructor' + Line 41: EXTRN ?DrawText@DFrameBuffer@@QEAAXPEAVFFont@@HNNPEBDHZZ:PROC ; DFrameBuffer::DrawText + Line 42: EXTRN ?GetUIScale@@YAHH@Z:PROC ; GetUIScale + Line 43: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 44: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 45: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 46: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 47: EXTRN __CxxFrameHandler3:PROC + Line 48: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 49: EXTRN ?con_scale@@3VFIntCVar@@A:BYTE ; con_scale + Line 50: EXTRN ?ConFont@@3PEAVFFont@@EA:QWORD ; ConFont + Line 51: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\stringtable.cod (25 hits) + Line 34: EXTRN stricmp:PROC + Line 35: EXTRN tolower:PROC + Line 36: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 37: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 38: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 39: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 40: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 41: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 42: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 43: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 44: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 45: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 46: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 47: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 48: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 49: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 50: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 51: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 52: EXTRN ?isText@FScanner@@QEAA_NXZ:PROC ; FScanner::isText + Line 53: EXTRN ?MakeKey@@YAIPEBD@Z:PROC ; MakeKey + Line 54: EXTRN __CxxFrameHandler3:PROC + Line 55: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 56: EXTRN ?LanguageIDs@@3PAIA:BYTE ; LanguageIDs + Line 57: EXTRN ?GameNames@@3PAPEBDA:BYTE ; GameNames + Line 58: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\strnatcmp.cod (3 hits) + Line 10: EXTRN isdigit:PROC + Line 11: EXTRN isspace:PROC + Line 12: EXTRN toupper:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\swcanvastexture.cod (19 hits) + Line 28: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 29: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 30: EXTRN __std_terminate:PROC + Line 31: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 32: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 33: EXTRN ??0DCanvas@@QEAA@HH_N@Z:PROC ; DCanvas::DCanvas + Line 34: EXTRN ??1DCanvas@@QEAA@XZ:PROC ; DCanvas::~DCanvas + Line 35: EXTRN ?FreeAllSpans@FSoftwareTexture@@IEAAXXZ:PROC ; FSoftwareTexture::FreeAllSpans + Line 36: EXTRN ?GetColumn@FSoftwareTexture@@UEAAPEBEHIPEAPEBUFSoftwareTextureSpan@@@Z:PROC ; FSoftwareTexture::GetColumn + Line 37: EXTRN ?GetColumnBgra@FSoftwareTexture@@UEAAPEBIIPEAPEBUFSoftwareTextureSpan@@@Z:PROC ; FSoftwareTexture::GetColumnBgra + Line 38: EXTRN ?GetPixelsBgra@FSoftwareTexture@@UEAAPEBIXZ:PROC ; FSoftwareTexture::GetPixelsBgra + Line 39: EXTRN ?GetPixels@FSoftwareTexture@@UEAAPEBEH@Z:PROC ; FSoftwareTexture::GetPixels + Line 40: EXTRN ??_EFSoftwareTexture@@UEAAPEAXI@Z:PROC ; FSoftwareTexture::`vector deleting destructor' + Line 41: EXTRN ??_EFSWCanvasTexture@@UEAAPEAXI@Z:PROC ; FSWCanvasTexture::`vector deleting destructor' + Line 42: EXTRN __CxxFrameHandler3:PROC + Line 43: EXTRN memset:PROC + Line 44: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 45: EXTRN ?RGB32k@@3TColorTable32k@@A:BYTE ; RGB32k + Line 46: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\symbols.cod (39 hits) + Line 47: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 276: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 277: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 278: EXTRN atexit:PROC + Line 279: EXTRN __std_terminate:PROC + Line 280: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 281: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 282: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 283: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 284: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 285: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 286: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 287: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 288: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 289: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 290: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 291: EXTRN ?Release@DObject@@QEAAXXZ:PROC ; DObject::Release + Line 292: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 293: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 294: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 295: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 296: EXTRN ??_EPSymbol@@UEAAPEAXI@Z:PROC ; PSymbol::`vector deleting destructor' + Line 297: EXTRN ??_EPSymbolType@@UEAAPEAXI@Z:PROC ; PSymbolType::`vector deleting destructor' + Line 298: EXTRN ??_EPSymbolTreeNode@@UEAAPEAXI@Z:PROC ; PSymbolTreeNode::`vector deleting destructor' + Line 299: EXTRN ??_EPField@@UEAAPEAXI@Z:PROC ; PField::`vector deleting destructor' + Line 300: EXTRN ??_EPProperty@@UEAAPEAXI@Z:PROC ; PProperty::`vector deleting destructor' + Line 301: EXTRN ??_EPPropFlag@@UEAAPEAXI@Z:PROC ; PPropFlag::`vector deleting destructor' + Line 302: EXTRN ??_EPSymbolConst@@UEAAPEAXI@Z:PROC ; PSymbolConst::`vector deleting destructor' + Line 303: EXTRN ??_EPSymbolConstNumeric@@UEAAPEAXI@Z:PROC ; PSymbolConstNumeric::`vector deleting destructor' + Line 304: EXTRN ??_EPSymbolConstString@@UEAAPEAXI@Z:PROC ; PSymbolConstString::`vector deleting destructor' + Line 305: EXTRN ??_EPFunction@@UEAAPEAXI@Z:PROC ; PFunction::`vector deleting destructor' + Line 306: EXTRN ?GetKey@FSerializer@@QEAAPEBDXZ:PROC ; FSerializer::GetKey + Line 307: EXTRN __CxxFrameHandler3:PROC + Line 308: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 309: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 310: EXTRN ?ClassDataAllocator@@3VFMemArena@@A:BYTE ; ClassDataAllocator + Line 311: EXTRN ?TypeBool@@3PEAVPBool@@EA:QWORD ; TypeBool + Line 312: EXTRN ?TypeString@@3PEAVPString@@EA:QWORD ; TypeString + Line 313: EXTRN ?TypeTable@@3UFTypeTable@@A:BYTE ; TypeTable + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\t_cmd.cod (20 hits) + Line 48: EXTRN strtoull:PROC + Line 49: EXTRN strncpy:PROC + Line 50: EXTRN strnicmp:PROC + Line 51: EXTRN mysnprintf:PROC + Line 52: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 53: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 54: EXTRN ?AddCommandString@@YAXPEBDH@Z:PROC ; AddCommandString + Line 55: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 56: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 57: EXTRN ?OpenMem@FScanner@@QEAAXPEBD0H@Z:PROC ; FScanner::OpenMem + Line 58: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 59: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 60: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 61: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 62: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 63: EXTRN ?ChangeLevel@FLevelLocals@@QEAAXPEBDHHH@Z:PROC ; FLevelLocals::ChangeLevel + Line 64: EXTRN __CxxFrameHandler3:PROC + Line 65: EXTRN ?dmflags@@3VFIntCVar@@A:BYTE ; dmflags + Line 66: EXTRN ?AllSkills@@3V?$TArray@UFSkillInfo@@U1@@@A:BYTE ; AllSkills + Line 67: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\t_func.cod (150 hits) + Line 13: EXTRN ?RegistrationInfo@DLighting@@2UClassReg@@A:BYTE ; DLighting::RegistrationInfo + Line 563: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 564: EXTRN atexit:PROC + Line 565: EXTRN __std_terminate:PROC + Line 566: EXTRN strncpy:PROC + Line 567: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 568: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 569: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 570: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 571: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 572: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 573: EXTRN ?LockBuffer@FString@@QEAAPEADXZ:PROC ; FString::LockBuffer + Line 574: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 575: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 576: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 577: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 578: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 579: EXTRN mysnprintf:PROC + Line 580: EXTRN c_asin:PROC + Line 581: EXTRN c_acos:PROC + Line 582: EXTRN c_atan:PROC + Line 583: EXTRN c_atan2:PROC + Line 584: EXTRN c_tan:PROC + Line 585: EXTRN c_sqrt:PROC + Line 586: EXTRN c_exp:PROC + Line 587: EXTRN c_log:PROC + Line 588: EXTRN c_pow:PROC + Line 589: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 590: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 591: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 592: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 593: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 594: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 595: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 596: EXTRN ?FindFunction@PClass@@SAXPEAPEAVVMFunction@@VFName@@1@Z:PROC ; PClass::FindFunction + Line 597: EXTRN ?P_SpawnMissile@@YAPEAVAActor@@PEAV1@0PEAVPClassActor@@0@Z:PROC ; P_SpawnMissile + Line 598: EXTRN ?P_TestMobjLocation@@YAHPEAVAActor@@@Z:PROC ; P_TestMobjLocation + Line 599: EXTRN ?P_AimLineAttack@@YA?AU?$TAngle@N@@PEAVAActor@@U1@NPEAUFTranslatedLineTarget@@1H00@Z:PROC ; P_AimLineAttack + Line 600: EXTRN ?P_LineAttack@@YAPEAVAActor@@PEAV1@U?$TAngle@N@@N1HVFName@@2HPEAUFTranslatedLineTarget@@PEAHNNN@Z:PROC ; P_LineAttack + Line 601: EXTRN ?P_CheckMissileSpawn@@YA_NPEAVAActor@@N@Z:PROC ; P_CheckMissileSpawn + Line 602: EXTRN ?P_RadiusAttack@@YAHPEAVAActor@@0HHVFName@@HH@Z:PROC ; P_RadiusAttack + Line 603: EXTRN ?P_DamageMobj@@YAHPEAVAActor@@00HVFName@@HU?$TAngle@N@@@Z:PROC ; P_DamageMobj + Line 604: EXTRN ?MoveFloor@sector_t@@QEAA?AW4EMoveResult@@NNHH_N0@Z:PROC ; sector_t::MoveFloor + Line 605: EXTRN ?MoveCeiling@sector_t@@QEAA?AW4EMoveResult@@NNHH_N@Z:PROC ; sector_t::MoveCeiling + Line 606: EXTRN ?AdjustFloorClip@@YAXPEBUsector_t@@@Z:PROC ; AdjustFloorClip + Line 607: EXTRN ?SetColor@@YAXPEAUsector_t@@HH@Z:PROC ; SetColor + Line 608: EXTRN ?P_GetLineSpecialInfo@@YAPEAUFLineSpecial@@H@Z:PROC ; P_GetLineSpecialInfo + Line 609: EXTRN ?P_GetMaxLineSpecial@@YAHXZ:PROC ; P_GetMaxLineSpecial + Line 610: EXTRN ?P_ExecuteSpecial@@YAHHPEAUline_t@@PEAVAActor@@_NHHHHH@Z:PROC ; P_ExecuteSpecial + Line 611: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 612: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 613: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 614: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 615: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 616: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 617: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 618: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 619: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 620: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 621: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 622: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 623: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 624: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 625: EXTRN ?S_Sound@@YAXHVFSoundID@@MM@Z:PROC ; S_Sound + Line 626: EXTRN ?S_Sound@@YAXPEAVAActor@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 627: EXTRN ?S_Sound@@YAXPEBUsector_t@@HVFSoundID@@MM@Z:PROC ; S_Sound + Line 628: EXTRN ?S_ChangeMusic@@YA_NPEBDH_N1@Z:PROC ; S_ChangeMusic + Line 629: EXTRN ?S_HashSounds@@YAXXZ:PROC ; S_HashSounds + Line 630: EXTRN ?S_AddSound@@YAHPEBD0PEAVFScanner@@@Z:PROC ; S_AddSound + Line 631: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 632: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 633: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 634: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 635: EXTRN ?GetReplacement@PClassActor@@QEAAPEAV1@_N@Z:PROC ; PClassActor::GetReplacement + Line 636: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 637: EXTRN ?GetTextureID@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::GetTextureID + Line 638: EXTRN ?G_SkillProperty@@YAHW4ESkillProperty@@@Z:PROC ; G_SkillProperty + Line 639: EXTRN ?StaticSpawn@AActor@@SAPEAV1@PEAVPClassActor@@AEBU?$TVector3@N@@W4replace_t@@_N@Z:PROC ; AActor::StaticSpawn + Line 640: EXTRN ?CallActivate@AActor@@QEAAXPEAV1@@Z:PROC ; AActor::CallActivate + Line 641: EXTRN ?CheckLocalView@AActor@@QEBA_NH@Z:PROC ; AActor::CheckLocalView + Line 642: EXTRN ?FindInventory@AActor@@QEAAPEAV1@PEAVPClassActor@@_N@Z:PROC ; AActor::FindInventory + Line 643: EXTRN ?GiveInventoryType@AActor@@QEAAPEAV1@PEAVPClassActor@@@Z:PROC ; AActor::GiveInventoryType + Line 644: EXTRN ?SetAngle@AActor@@QEAAXU?$TAngle@N@@_N@Z:PROC ; AActor::SetAngle + Line 645: EXTRN ?IsMapActor@AActor@@QEAA_NXZ:PROC ; AActor::IsMapActor + Line 646: EXTRN ?SetState@AActor@@QEAA_NPEAUFState@@_N@Z:PROC ; AActor::SetState + Line 647: EXTRN ?ClearCounters@AActor@@QEAAXXZ:PROC ; AActor::ClearCounters + Line 648: EXTRN ?Revive@AActor@@QEAAXXZ:PROC ; AActor::Revive + Line 649: EXTRN ?intvalue@@YAHAEBUsvalue_t@@@Z:PROC ; intvalue + Line 650: EXTRN ?fixedvalue@@YAHAEBUsvalue_t@@@Z:PROC ; fixedvalue + Line 651: EXTRN ?floatvalue@@YANAEBUsvalue_t@@@Z:PROC ; floatvalue + Line 652: EXTRN ?stringvalue@@YAPEBDAEBUsvalue_t@@@Z:PROC ; stringvalue + Line 653: EXTRN ?actorvalue@@YAPEAVAActor@@PEAUFLevelLocals@@AEBUsvalue_t@@@Z:PROC ; actorvalue + Line 654: EXTRN ?NewVariable@DFsScript@@QEAAPEAUDFsVariable@@PEBDH@Z:PROC ; DFsScript::NewVariable + Line 655: EXTRN ?NewFunction@DFsScript@@QEAAXPEBDP8FParser@@EAAXXZ@Z:PROC ; DFsScript::NewFunction + Line 656: EXTRN ?LabelValue@DFsScript@@QEAAPEADAEBUsvalue_t@@@Z:PROC ; DFsScript::LabelValue + Line 657: EXTRN ?SectionEnd@DFsScript@@QEAAPEADPEBUDFsSection@@@Z:PROC ; DFsScript::SectionEnd + Line 658: EXTRN ?ParseInclude@DFsScript@@QEAAXPEAUFLevelLocals@@PEAD@Z:PROC ; DFsScript::ParseInclude + Line 659: EXTRN ??0DRunningScript@@QEAA@PEAVAActor@@PEAVDFsScript@@H@Z:PROC ; DRunningScript::DRunningScript + Line 660: EXTRN ?AddRunningScript@DFraggleThinker@@QEAAXPEAVDRunningScript@@@Z:PROC ; DFraggleThinker::AddRunningScript + Line 661: EXTRN ?script_error@@YAXPEBDZZ:PROC ; script_error + Line 662: EXTRN ?FS_EmulateCmd@@YAXPEAUFLevelLocals@@PEAD@Z:PROC ; FS_EmulateCmd + Line 663: EXTRN ?C_MidPrint@@YAXPEAVFFont@@PEBD@Z:PROC ; C_MidPrint + Line 664: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 665: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAEPEAE@Z:PROC ; Serialize + Line 666: EXTRN ?StaticType@DSectorEffect@@UEBAPEAVPClass@@XZ:PROC ; DSectorEffect::StaticType + Line 667: EXTRN ?Construct@DSectorEffect@@QEAAXPEAUsector_t@@@Z:PROC ; DSectorEffect::Construct + Line 668: EXTRN ?Serialize@DSectorEffect@@UEAAXAEAVFSerializer@@@Z:PROC ; DSectorEffect::Serialize + Line 669: EXTRN ?OnDestroy@DSectorEffect@@UEAAXXZ:PROC ; DSectorEffect::OnDestroy + Line 670: EXTRN ??_EDSectorEffect@@UEAAPEAXI@Z:PROC ; DSectorEffect::`vector deleting destructor' + Line 671: EXTRN ?GetFirstSectorTag@FTagManager@@AEBAHPEBUsector_t@@@Z:PROC ; FTagManager::GetFirstSectorTag + Line 672: EXTRN ?SectorHasTag@FTagManager@@AEBA_NPEBUsector_t@@H@Z:PROC ; FTagManager::SectorHasTag + Line 673: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 674: EXTRN ?Next@FLineIdIterator@@QEAAHXZ:PROC ; FLineIdIterator::Next + Line 675: EXTRN ?StaticType@DLighting@@UEBAPEAVPClass@@XZ:PROC ; DLighting::StaticType + Line 676: EXTRN ??_EDLighting@@UEAAPEAXI@Z:PROC ; DLighting::`vector deleting destructor' + Line 677: EXTRN ?R_ResetViewInterpolation@@YAXXZ:PROC ; R_ResetViewInterpolation + Line 678: EXTRN ?TranslateLineDef@FLevelLocals@@QEAAXPEAUline_t@@PEAUmaplinedef_t@@H@Z:PROC ; FLevelLocals::TranslateLineDef + Line 679: EXTRN ?CreateCeiling@FLevelLocals@@QEAA_NPEAUsector_t@@W4ECeiling@DCeiling@@PEAUline_t@@HNNNHHHW4ECrushMode@4@@Z:PROC ; FLevelLocals::CreateCeiling + Line 680: EXTRN ?CreateFloor@FLevelLocals@@QEAA_NPEAUsector_t@@W4EFloor@DFloor@@PEAUline_t@@NNHH_N3@Z:PROC ; FLevelLocals::CreateFloor + Line 681: EXTRN ?EV_DoDoor@FLevelLocals@@QEAA_NW4EVlDoor@DDoor@@PEAUline_t@@PEAVAActor@@HNHHH_NH@Z:PROC ; FLevelLocals::EV_DoDoor + Line 682: EXTRN ?EV_Teleport@FLevelLocals@@QEAA_NHHPEAUline_t@@HPEAVAActor@@H@Z:PROC ; FLevelLocals::EV_Teleport + Line 683: EXTRN ?ExitLevel@FLevelLocals@@QEAAXH_N@Z:PROC ; FLevelLocals::ExitLevel + Line 684: EXTRN ?SecretExitLevel@FLevelLocals@@QEAAXH@Z:PROC ; FLevelLocals::SecretExitLevel + Line 685: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 686: EXTRN ?Exec@ScriptUtil@@SAHVFName@@ZZ:PROC ; ScriptUtil::Exec + Line 687: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 688: EXTRN ??_EDLightLevel@@UEAAPEAXI@Z:PROC ; DLightLevel::`vector deleting destructor' + Line 689: EXTRN ?CheckInventory@@YAHPEAVAActor@@PEBD_N@Z:PROC ; CheckInventory + Line 690: EXTRN _CxxThrowException:PROC + Line 691: EXTRN __CxxFrameHandler3:PROC + Line 692: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 693: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 694: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 695: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 696: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 697: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 698: EXTRN ?RegistrationInfo@DRunningScript@@2UClassReg@@A:BYTE ; DRunningScript::RegistrationInfo + Line 699: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 700: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 701: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 702: EXTRN ?gametic@@3HA:DWORD ; gametic + Line 703: EXTRN ?playeringame@@3PA_NA:BYTE ; playeringame + Line 704: EXTRN ?WP_NOCHANGE@@3PEAVAActor@@EA:QWORD ; WP_NOCHANGE + Line 705: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 706: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 707: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 708: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 709: EXTRN ?con_midtime@@3VFFloatCVar@@A:BYTE ; con_midtime + Line 710: EXTRN __ImageBase:BYTE + Line 711: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\t_load.cod (40 hits) + Line 34: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 35: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 36: EXTRN strchr:PROC + Line 37: EXTRN strstr:PROC + Line 38: EXTRN strnicmp:PROC + Line 39: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 40: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 41: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 42: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 43: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 44: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 45: EXTRN ?ReadLump@FWadCollection@@QEAAXHPEAX@Z:PROC ; FWadCollection::ReadLump + Line 46: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 47: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 48: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 49: EXTRN ?OpenMem@FScanner@@QEAAXPEBD0H@Z:PROC ; FScanner::OpenMem + Line 50: EXTRN ?Close@FScanner@@QEAAXXZ:PROC ; FScanner::Close + Line 51: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 52: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 53: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 54: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 55: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 56: EXTRN ?S_ChangeMusic@@YA_NPEBDH_N1@Z:PROC ; S_ChangeMusic + Line 57: EXTRN ?GetTextureID@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::GetTextureID + Line 58: EXTRN ?InitSkyMap@@YAXPEAUFLevelLocals@@@Z:PROC ; InitSkyMap + Line 59: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 60: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 61: EXTRN ?Link@FThinkerCollection@@QEAAXPEAVDThinker@@H@Z:PROC ; FThinkerCollection::Link + Line 62: EXTRN ?Construct@DFraggleThinker@@QEAAXXZ:PROC ; DFraggleThinker::Construct + Line 63: EXTRN ?FS_EmulateCmd@@YAXPEAUFLevelLocals@@PEAD@Z:PROC ; FS_EmulateCmd + Line 64: EXTRN ?copystring@@YAPEADPEBD@Z:PROC ; copystring + Line 65: EXTRN ?FS_ChangeMusic@@YA_NPEBD@Z:PROC ; FS_ChangeMusic + Line 66: EXTRN __CxxFrameHandler3:PROC + Line 67: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 68: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 69: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 70: EXTRN ?RegistrationInfo@DFraggleThinker@@2UClassReg@@A:BYTE ; DFraggleThinker::RegistrationInfo + Line 71: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 72: EXTRN ?SimpleLineTranslations@@3V?$TAutoGrowArray@UFLineTrans@@U1@@@A:BYTE ; SimpleLineTranslations + Line 73: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\t_oper.cod (14 hits) + Line 51: EXTRN ?OPstructure@FParser@@QEAAXAEAUsvalue_t@@HHH@Z:PROC ; FParser::OPstructure + Line 235: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 236: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 237: EXTRN ?intvalue@@YAHAEBUsvalue_t@@@Z:PROC ; intvalue + Line 238: EXTRN ?fixedvalue@@YAHAEBUsvalue_t@@@Z:PROC ; fixedvalue + Line 239: EXTRN ?floatvalue@@YANAEBUsvalue_t@@@Z:PROC ; floatvalue + Line 240: EXTRN ?GetValue@DFsVariable@@QEAAXAEAUsvalue_t@@@Z:PROC ; DFsVariable::GetValue + Line 241: EXTRN ?SetValue@DFsVariable@@QEAAXPEAUFLevelLocals@@AEBUsvalue_t@@@Z:PROC ; DFsVariable::SetValue + Line 242: EXTRN ?FindVariable@DFsScript@@QEAAPEAUDFsVariable@@PEBDPEAV1@@Z:PROC ; DFsScript::FindVariable + Line 243: EXTRN ?EvaluateExpression@FParser@@QEAAXAEAUsvalue_t@@HH@Z:PROC ; FParser::EvaluateExpression + Line 244: EXTRN ?script_error@@YAXPEBDZZ:PROC ; script_error + Line 245: EXTRN __CxxFrameHandler3:PROC + Line 246: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 247: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\t_parse.cod (41 hits) + Line 85: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 86: EXTRN atexit:PROC + Line 87: EXTRN atof:PROC + Line 88: EXTRN atoi:PROC + Line 89: EXTRN strchr:PROC + Line 90: EXTRN strncpy:PROC + Line 91: EXTRN __std_exception_copy:PROC + Line 92: EXTRN __std_exception_destroy:PROC + Line 93: EXTRN ??_Eexception@std@@UEAAPEAXI@Z:PROC ; std::exception::`vector deleting destructor' + Line 94: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 95: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 96: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 97: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 98: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 99: EXTRN ?VFormat@FString@@QEAAXPEBDPEAD@Z:PROC ; FString::VFormat + Line 100: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 101: EXTRN myvsnprintf:PROC + Line 102: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 103: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 104: EXTRN ??_ECDoomError@@UEAAPEAXI@Z:PROC ; CDoomError::`vector deleting destructor' + Line 105: EXTRN ??_ECFraggleScriptError@@UEAAPEAXI@Z:PROC ; CFraggleScriptError::`vector deleting destructor' + Line 106: EXTRN ?GetValue@DFsVariable@@QEAAXAEAUsvalue_t@@@Z:PROC ; DFsVariable::GetValue + Line 107: EXTRN ?FindVariable@DFsScript@@QEAAPEAUDFsVariable@@PEBDPEAV1@@Z:PROC ; DFsScript::FindVariable + Line 108: EXTRN ?FindSectionStart@DFsScript@@QEAAPEAUDFsSection@@PEBD@Z:PROC ; DFsScript::FindSectionStart + Line 109: EXTRN ?FindSectionEnd@DFsScript@@QEAAPEAUDFsSection@@PEBD@Z:PROC ; DFsScript::FindSectionEnd + Line 110: EXTRN ?EvaluateFunction@FParser@@QEAAXAEAUsvalue_t@@HH@Z:PROC ; FParser::EvaluateFunction + Line 111: EXTRN ?spec_brace@FParser@@QEAAXXZ:PROC ; FParser::spec_brace + Line 112: EXTRN ?spec_if@FParser@@QEAA_NXZ:PROC ; FParser::spec_if + Line 113: EXTRN ?spec_elseif@FParser@@QEAA_N_N@Z:PROC ; FParser::spec_elseif + Line 114: EXTRN ?spec_else@FParser@@QEAAX_N@Z:PROC ; FParser::spec_else + Line 115: EXTRN ?spec_for@FParser@@QEAAXXZ:PROC ; FParser::spec_for + Line 116: EXTRN ?spec_while@FParser@@QEAAXXZ:PROC ; FParser::spec_while + Line 117: EXTRN ?spec_variable@FParser@@QEAA_NXZ:PROC ; FParser::spec_variable + Line 118: EXTRN _CxxThrowException:PROC + Line 119: EXTRN __CxxFrameHandler3:PROC + Line 120: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 121: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 122: EXTRN ?operators@FParser@@2PAUoperator_t@1@A:BYTE ; FParser::operators + Line 123: EXTRN ?num_operators@FParser@@2HA:DWORD ; FParser::num_operators + Line 124: EXTRN __ImageBase:BYTE + Line 125: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\t_prepro.cod (36 hits) + Line 13: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 77: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 78: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 79: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 80: EXTRN __std_terminate:PROC + Line 81: EXTRN strcspn:PROC + Line 82: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 83: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 84: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 85: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 86: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 87: EXTRN ?Printf@@YAHHPEBDZZ:PROC ; Printf + Line 88: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 89: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 90: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 91: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 92: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 93: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 94: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 95: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 96: EXTRN ??_EDFsSection@@UEAAPEAXI@Z:PROC ; DFsSection::`vector deleting destructor' + Line 97: EXTRN ?NewVariable@DFsScript@@QEAAPEAUDFsVariable@@PEBDH@Z:PROC ; DFsScript::NewVariable + Line 98: EXTRN ?GetTokens@FParser@@QEAAPEADPEAD@Z:PROC ; FParser::GetTokens + Line 99: EXTRN ?ErrorMessage@FParser@@QEAAXVFString@@@Z:PROC ; FParser::ErrorMessage + Line 100: EXTRN ?Run@FParser@@QEAAXPEAD00@Z:PROC ; FParser::Run + Line 101: EXTRN ?script_error@@YAXPEBDZZ:PROC ; script_error + Line 102: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 103: EXTRN ?ReadLump@FWadCollection@@QEAAXHPEAX@Z:PROC ; FWadCollection::ReadLump + Line 104: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 105: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 106: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 107: EXTRN __CxxFrameHandler3:PROC + Line 108: EXTRN __chkstk:PROC + Line 109: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 110: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 111: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\t_script.cod (57 hits) + Line 24: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 25: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 464: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 465: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 466: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 467: EXTRN atexit:PROC + Line 468: EXTRN __std_terminate:PROC + Line 469: EXTRN atoi:PROC + Line 470: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 471: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 472: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 473: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 474: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 475: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 476: EXTRN ?Mark@GC@@YAXPEAPEAVDObject@@@Z:PROC ; GC::Mark + Line 477: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 478: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 479: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 480: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 481: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 482: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 483: EXTRN ?StaticType@DThinker@@UEBAPEAVPClass@@XZ:PROC ; DThinker::StaticType + Line 484: EXTRN ?OnDestroy@DThinker@@UEAAXXZ:PROC ; DThinker::OnDestroy + Line 485: EXTRN ??1DThinker@@UEAA@XZ:PROC ; DThinker::~DThinker + Line 486: EXTRN ?Tick@DThinker@@UEAAXXZ:PROC ; DThinker::Tick + Line 487: EXTRN ?PostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::PostBeginPlay + Line 488: EXTRN ?CallPostBeginPlay@DThinker@@UEAAXXZ:PROC ; DThinker::CallPostBeginPlay + Line 489: EXTRN ?PostSerialize@DThinker@@UEAAXXZ:PROC ; DThinker::PostSerialize + Line 490: EXTRN ?Serialize@DThinker@@UEAAXAEAVFSerializer@@@Z:PROC ; DThinker::Serialize + Line 491: EXTRN ?PropagateMark@DThinker@@UEAA_KXZ:PROC ; DThinker::PropagateMark + Line 492: EXTRN ??_EDThinker@@UEAAPEAXI@Z:PROC ; DThinker::`vector deleting destructor' + Line 493: EXTRN ?ClearVariables@DFsScript@@QEAAX_N@Z:PROC ; DFsScript::ClearVariables + Line 494: EXTRN ?ClearSections@DFsScript@@QEAAXXZ:PROC ; DFsScript::ClearSections + Line 495: EXTRN ?Preprocess@DFsScript@@QEAAXPEAUFLevelLocals@@@Z:PROC ; DFsScript::Preprocess + Line 496: EXTRN ??_EDFsScript@@UEAAPEAXI@Z:PROC ; DFsScript::`vector deleting destructor' + Line 497: EXTRN ?Run@FParser@@QEAAXPEAD00@Z:PROC ; FParser::Run + Line 498: EXTRN ??_EDRunningScript@@UEAAPEAXI@Z:PROC ; DRunningScript::`vector deleting destructor' + Line 499: EXTRN ?InitFunctions@DFraggleThinker@@QEAAXXZ:PROC ; DFraggleThinker::InitFunctions + Line 500: EXTRN ??_EDFraggleThinker@@UEAAPEAXI@Z:PROC ; DFraggleThinker::`vector deleting destructor' + Line 501: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 502: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 503: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 504: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 505: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 506: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 507: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 508: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 509: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_NPEA_N@Z:PROC ; Serialize + Line 510: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 511: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 512: EXTRN ??$Serialize@D@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEADPEAPEAD@Z:PROC ; Serialize + Line 513: EXTRN __CxxFrameHandler3:PROC + Line 514: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 515: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 516: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 517: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 518: EXTRN ?save_full@@3_NA:BYTE ; save_full + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\t_spec.cod (25 hits) + Line 52: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 53: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 54: EXTRN malloc:PROC + Line 55: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 56: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 57: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 58: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 59: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 60: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 61: EXTRN ?intvalue@@YAHAEBUsvalue_t@@@Z:PROC ; intvalue + Line 62: EXTRN ??0DFsScript@@QEAA@XZ:PROC ; DFsScript::DFsScript + Line 63: EXTRN ?NewVariable@DFsScript@@QEAAPEAUDFsVariable@@PEBDH@Z:PROC ; DFsScript::NewVariable + Line 64: EXTRN ?VariableForName@DFsScript@@QEAAPEAUDFsVariable@@PEBD@Z:PROC ; DFsScript::VariableForName + Line 65: EXTRN ?SectionStart@DFsScript@@QEAAPEADPEBUDFsSection@@@Z:PROC ; DFsScript::SectionStart + Line 66: EXTRN ?SectionEnd@DFsScript@@QEAAPEADPEBUDFsSection@@@Z:PROC ; DFsScript::SectionEnd + Line 67: EXTRN ?SectionLoop@DFsScript@@QEAAPEADPEBUDFsSection@@@Z:PROC ; DFsScript::SectionLoop + Line 68: EXTRN ?Preprocess@DFsScript@@QEAAXPEAUFLevelLocals@@@Z:PROC ; DFsScript::Preprocess + Line 69: EXTRN ?FindOperator@FParser@@QEAAHHHPEBD@Z:PROC ; FParser::FindOperator + Line 70: EXTRN ?EvaluateExpression@FParser@@QEAAXAEAUsvalue_t@@HH@Z:PROC ; FParser::EvaluateExpression + Line 71: EXTRN ?RunLineSpecial@FParser@@QEAAXPEBUFLineSpecial@@@Z:PROC ; FParser::RunLineSpecial + Line 72: EXTRN ?script_error@@YAXPEBDZZ:PROC ; script_error + Line 73: EXTRN __CxxFrameHandler3:PROC + Line 74: EXTRN memcpy:PROC + Line 75: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 76: EXTRN ?RegistrationInfo@DFsScript@@2UClassReg@@A:BYTE ; DFsScript::RegistrationInfo + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\t_variable.cod (29 hits) + Line 13: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 76: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 77: EXTRN __std_terminate:PROC + Line 78: EXTRN atof:PROC + Line 79: EXTRN atoi:PROC + Line 80: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 81: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 82: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 83: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 84: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 85: EXTRN mysnprintf:PROC + Line 86: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 87: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 88: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 89: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 90: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 91: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 92: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 93: EXTRN ?IsMapActor@AActor@@QEAA_NXZ:PROC ; AActor::IsMapActor + Line 94: EXTRN ??_EDFsVariable@@UEAAPEAXI@Z:PROC ; DFsVariable::`vector deleting destructor' + Line 95: EXTRN ?script_error@@YAXPEBDZZ:PROC ; script_error + Line 96: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAHPEAH@Z:PROC ; Serialize + Line 97: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 98: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFString@@PEAV2@@Z:PROC ; Serialize + Line 99: EXTRN __CxxFrameHandler3:PROC + Line 100: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 101: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 102: EXTRN __ImageBase:BYTE + Line 103: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\tables.cod (9 hits) + Line 4473: EXTRN __vdecl_log2:PROC + Line 4474: EXTRN __vdecl_pow2:PROC + Line 4475: EXTRN __vdecl_sin2:PROC + Line 4476: EXTRN log:PROC + Line 4477: EXTRN pow:PROC + Line 4478: EXTRN sin:PROC + Line 4479: EXTRN __ImageBase:BYTE + Line 4480: EXTRN __isa_available:DWORD + Line 4481: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\tan.cod (11 hits) + Line 16: EXTRN mtherr:PROC + Line 17: EXTRN polevl:PROC + Line 18: EXTRN p1evl:PROC + Line 19: EXTRN ldexp:PROC + Line 20: EXTRN isnan:PROC + Line 21: EXTRN isfinite:PROC + Line 22: EXTRN floor:PROC + Line 23: EXTRN PIO4:QWORD + Line 24: EXTRN INFINITY:QWORD + Line 25: EXTRN NAN:QWORD + Line 26: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\tanh.cod (5 hits) + Line 16: EXTRN c_exp:PROC + Line 17: EXTRN polevl:PROC + Line 18: EXTRN p1evl:PROC + Line 19: EXTRN MAXLOG:QWORD + Line 20: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\teaminfo.cod (33 hits) + Line 168: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 169: EXTRN atexit:PROC + Line 170: EXTRN __std_terminate:PROC + Line 171: EXTRN stricmp:PROC + Line 172: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 173: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 174: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 175: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 176: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 177: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 178: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 179: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 180: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 181: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 182: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 183: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 184: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 185: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 186: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 187: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 188: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 189: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 190: EXTRN ?MatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MatchString + Line 191: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 192: EXTRN ?V_ParseFontColor@@YA?AW4EColorRange@@AEAPEBEHH@Z:PROC ; V_ParseFontColor + Line 193: EXTRN ?V_GetColor@@YAHPEBIAEAVFScanner@@@Z:PROC ; V_GetColor + Line 194: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 195: EXTRN __CxxFrameHandler3:PROC + Line 196: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 197: EXTRN ?GameNames@@3PAPEBDA:BYTE ; GameNames + Line 198: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 199: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 200: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\texture.cod (52 hits) + Line 12: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 89: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 90: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 91: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 92: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 93: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 94: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 95: EXTRN atexit:PROC + Line 96: EXTRN __std_terminate:PROC + Line 97: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 98: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 99: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 100: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 101: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 102: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 103: EXTRN ?LastIndexOf@FString@@QEBAJD@Z:PROC ; FString::LastIndexOf + Line 104: EXTRN ?ToUpper@FString@@QEAAXXZ:PROC ; FString::ToUpper + Line 105: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 106: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 107: EXTRN ??0FStringf@@QEAA@PEBDZZ:PROC ; FStringf::FStringf + Line 108: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 109: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 110: EXTRN ?SetLinkedTexture@FWadCollection@@QEAAXHPEAVFTexture@@@Z:PROC ; FWadCollection::SetLinkedTexture + Line 111: EXTRN ?GetLinkedTexture@FWadCollection@@QEAAPEAVFTexture@@H@Z:PROC ; FWadCollection::GetLinkedTexture + Line 112: EXTRN ?GetLumpName@FWadCollection@@QEBAXAEAVFString@@H@Z:PROC ; FWadCollection::GetLumpName + Line 113: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 114: EXTRN ?GetUniqueIndex@FRemapTable@@QEAAHXZ:PROC ; FRemapTable::GetUniqueIndex + Line 115: EXTRN ?TranslationToTable@@YAPEAUFRemapTable@@H@Z:PROC ; TranslationToTable + Line 116: EXTRN ?CopyPixelDataRGB@FBitmap@@QEAAXHHPEBEHHHHHHPEAUFCopyInfo@@HHH@Z:PROC ; FBitmap::CopyPixelDataRGB + Line 117: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 118: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 119: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 120: EXTRN ?CreateUpsampledTextureBuffer@FTexture@@QEAAXAEAUFTextureBuffer@@_N1@Z:PROC ; FTexture::CreateUpsampledTextureBuffer + Line 121: EXTRN ?LoadHiresTexture@FTexture@@AEAA_NAEAUFTextureBuffer@@_N@Z:PROC ; FTexture::LoadHiresTexture + Line 122: EXTRN ??_EFTexture@@UEAAPEAXI@Z:PROC ; FTexture::`vector deleting destructor' + Line 123: EXTRN ?FindTexture@FTextureManager@@QEAAPEAVFTexture@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::FindTexture + Line 124: EXTRN ?AddTexture@FTextureManager@@QEAA?AVFTextureID@@PEAVFTexture@@@Z:PROC ; FTextureManager::AddTexture + Line 125: EXTRN ?SpriteAdjustChanged@FTextureManager@@QEAAXXZ:PROC ; FTextureManager::SpriteAdjustChanged + Line 126: EXTRN ??_EFWrapperTexture@@UEAAPEAXI@Z:PROC ; FWrapperTexture::`vector deleting destructor' + Line 127: EXTRN ??1FMaterial@@QEAA@XZ:PROC ; FMaterial::~FMaterial + Line 128: EXTRN ?SetSpriteRect@FMaterial@@QEAAXXZ:PROC ; FMaterial::SetSpriteRect + Line 129: EXTRN ?GetImage@FImageSource@@SAPEAV1@HW4ETextureType@@@Z:PROC ; FImageSource::GetImage + Line 130: EXTRN ??0FImageTexture@@QEAA@PEAVFImageSource@@PEBD@Z:PROC ; FImageTexture::FImageTexture + Line 131: EXTRN ?CreateBrightmapTexture@@YAPEAVFTexture@@PEAVFImageSource@@@Z:PROC ; CreateBrightmapTexture + Line 132: EXTRN __CxxFrameHandler3:PROC + Line 133: EXTRN memset:PROC + Line 134: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 135: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 136: EXTRN ?AllPalettes@FUniquePalette@@0V?$TArray@UPalData@FUniquePalette@@U12@@@A:BYTE ; FUniquePalette::AllPalettes + Line 137: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 138: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 139: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\texturemanager.cod (101 hits) + Line 28: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 188: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 189: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 190: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 191: EXTRN atexit:PROC + Line 192: EXTRN __std_terminate:PROC + Line 193: EXTRN strchr:PROC + Line 194: EXTRN stricmp:PROC + Line 195: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 196: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 197: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 198: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 199: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 200: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 201: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 202: EXTRN ?Left@FString@@QEBA?AV1@_K@Z:PROC ; FString::Left + Line 203: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 204: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 205: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 206: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 207: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 208: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 209: EXTRN ?GetFirstLump@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetFirstLump + Line 210: EXTRN ?GetLastLump@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLastLump + Line 211: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 212: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDHH_N@Z:PROC ; FWadCollection::CheckNumForName + Line 213: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 214: EXTRN ?SetLinkedTexture@FWadCollection@@QEAAXHPEAVFTexture@@@Z:PROC ; FWadCollection::SetLinkedTexture + Line 215: EXTRN ?GetLinkedTexture@FWadCollection@@QEAAPEAVFTexture@@H@Z:PROC ; FWadCollection::GetLinkedTexture + Line 216: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 217: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 218: EXTRN ?ReopenLumpReader@FWadCollection@@QEAA?AVFileReader@@H_N@Z:PROC ; FWadCollection::ReopenLumpReader + Line 219: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 220: EXTRN ?CheckLumpName@FWadCollection@@QEAA_NHPEBD@Z:PROC ; FWadCollection::CheckLumpName + Line 221: EXTRN ?GetLumpFlags@FWadCollection@@QEAAHH@Z:PROC ; FWadCollection::GetLumpFlags + Line 222: EXTRN ?GetLumpName@FWadCollection@@QEBAXPEADH@Z:PROC ; FWadCollection::GetLumpName + Line 223: EXTRN ?GetLumpName@FWadCollection@@QEBAXAEAVFString@@H@Z:PROC ; FWadCollection::GetLumpName + Line 224: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 225: EXTRN ?GetLumpFullPath@FWadCollection@@QEBA?AVFString@@H@Z:PROC ; FWadCollection::GetLumpFullPath + Line 226: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 227: EXTRN ?GetLumpNamespace@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpNamespace + Line 228: EXTRN ?GetNumLumps@FWadCollection@@QEBAHXZ:PROC ; FWadCollection::GetNumLumps + Line 229: EXTRN ?GetNumWads@FWadCollection@@QEBAHXZ:PROC ; FWadCollection::GetNumWads + Line 230: EXTRN ??0FRemapTable@@QEAA@H@Z:PROC ; FRemapTable::FRemapTable + Line 231: EXTRN ??1FRemapTable@@QEAA@XZ:PROC ; FRemapTable::~FRemapTable + Line 232: EXTRN ?MakeIdentity@FRemapTable@@QEAAXXZ:PROC ; FRemapTable::MakeIdentity + Line 233: EXTRN ?MakeKey@@YAIPEBD@Z:PROC ; MakeKey + Line 234: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 235: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 236: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 237: EXTRN ?OpenLumpNum@FScanner@@QEAAXH@Z:PROC ; FScanner::OpenLumpNum + Line 238: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 239: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 240: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 241: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 242: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 243: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 244: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 245: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 246: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 247: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 248: EXTRN ?ExtractFileBase@@YA?AVFString@@PEBD_N@Z:PROC ; ExtractFileBase + Line 249: EXTRN ?FreeAll@FMemArena@@QEAAXXZ:PROC ; FMemArena::FreeAll + Line 250: EXTRN ?ReadPalette@@YAXHPEAE@Z:PROC ; ReadPalette + Line 251: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 252: EXTRN ?CreateTexture@FTexture@@SAPEAV1@PEBDHW4ETextureType@@@Z:PROC ; FTexture::CreateTexture + Line 253: EXTRN ?AddAutoMaterials@FTexture@@QEAAXXZ:PROC ; FTexture::AddAutoMaterials + Line 254: EXTRN ?SetFrontSkyLayer@FTexture@@IEAAXXZ:PROC ; FTexture::SetFrontSkyLayer + Line 255: EXTRN ?InitGrayMap@FTexture@@KAXXZ:PROC ; FTexture::InitGrayMap + Line 256: EXTRN ?SetScaledSize@FTexture@@IEAAXHH@Z:PROC ; FTexture::SetScaledSize + Line 257: EXTRN ?CheckRealHeight@FTexture@@QEAAHXZ:PROC ; FTexture::CheckRealHeight + Line 258: EXTRN ?SetSpriteAdjust@FTexture@@QEAAXXZ:PROC ; FTexture::SetSpriteAdjust + Line 259: EXTRN ?InitBuildTiles@FTextureManager@@AEAAXXZ:PROC ; FTextureManager::InitBuildTiles + Line 260: EXTRN ?FixAnimations@FTextureManager@@AEAAXXZ:PROC ; FTextureManager::FixAnimations + Line 261: EXTRN ?InitAnimated@FTextureManager@@AEAAXXZ:PROC ; FTextureManager::InitAnimated + Line 262: EXTRN ?InitAnimDefs@FTextureManager@@AEAAXXZ:PROC ; FTextureManager::InitAnimDefs + Line 263: EXTRN ?SetTranslation@FTextureManager@@AEAAXVFTextureID@@0@Z:PROC ; FTextureManager::SetTranslation + Line 264: EXTRN ?InitSwitchList@FTextureManager@@AEAAXXZ:PROC ; FTextureManager::InitSwitchList + Line 265: EXTRN ?R_InitSkyMap@@YAXXZ:PROC ; R_InitSkyMap + Line 266: EXTRN ??0FImageTexture@@QEAA@PEAVFImageSource@@PEBD@Z:PROC ; FImageTexture::FImageTexture + Line 267: EXTRN ?AddTexturesLumps@FMultipatchTextureBuilder@@QEAAXHHH@Z:PROC ; FMultipatchTextureBuilder::AddTexturesLumps + Line 268: EXTRN ?ParseTexture@FMultipatchTextureBuilder@@QEAAXAEAVFScanner@@W4ETextureType@@@Z:PROC ; FMultipatchTextureBuilder::ParseTexture + Line 269: EXTRN ?ResolveAllPatches@FMultipatchTextureBuilder@@QEAAXXZ:PROC ; FMultipatchTextureBuilder::ResolveAllPatches + Line 270: EXTRN ?CreateShaderTexture@@YAPEAVFTexture@@_N0@Z:PROC ; CreateShaderTexture + Line 271: EXTRN __CxxFrameHandler3:PROC + Line 272: EXTRN memmove:PROC + Line 273: EXTRN memset:PROC + Line 274: EXTRN sin:PROC + Line 275: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 276: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 277: EXTRN ?SpriteFrames@@3V?$TArray@Uspriteframe_t@@U1@@@A:BYTE ; SpriteFrames + Line 278: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 279: EXTRN ?StartScreen@@3PEAVFStartupScreen@@EA:QWORD ; StartScreen + Line 280: EXTRN ?wadlevelinfos@@3V?$TArray@Ulevel_info_t@@U1@@@A:BYTE ; wadlevelinfos + Line 281: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 282: EXTRN ?vid_rendermode@@3VFIntCVar@@A:BYTE ; vid_rendermode + Line 283: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 284: EXTRN ?ImageForLump@FImageSource@@1V?$TArray@PEAVFImageSource@@PEAV1@@@A:BYTE ; FImageSource::ImageForLump + Line 285: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + Line 286: EXTRN __ImageBase:BYTE + Line 287: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\tgatexture.cod (24 hits) + Line 22: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 23: EXTRN __std_terminate:PROC + Line 24: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 25: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 26: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 27: EXTRN ?CopyPixelDataRGB@FBitmap@@QEAAXHHPEBEHHHHHHPEAUFCopyInfo@@HHH@Z:PROC ; FBitmap::CopyPixelDataRGB + Line 28: EXTRN ?CopyPixelData@FBitmap@@QEAAXHHPEBEHHHHHPEAUPalEntry@@PEAUFCopyInfo@@@Z:PROC ; FBitmap::CopyPixelData + Line 29: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 30: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 31: EXTRN ?CreatePalettedPixels@FImageSource@@MEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::CreatePalettedPixels + Line 32: EXTRN ?CopyPixels@FImageSource@@MEAAHPEAVFBitmap@@H@Z:PROC ; FImageSource::CopyPixels + Line 33: EXTRN ?CollectForPrecache@FImageSource@@UEAAXAEAV?$TMap@HU?$pair@HH@std@@U?$THashTraits@H@@U?$TValueTraits@U?$pair@HH@std@@@@@@_N@Z:PROC ; FImageSource::CollectForPrecache + Line 34: EXTRN ??_EFImageSource@@UEAAPEAXI@Z:PROC ; FImageSource::`vector deleting destructor' + Line 35: EXTRN ??_EFTGATexture@@UEAAPEAXI@Z:PROC ; FTGATexture::`vector deleting destructor' + Line 36: EXTRN __CxxFrameHandler3:PROC + Line 37: EXTRN memset:PROC + Line 38: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 39: EXTRN ?RGB256k@@3TColorTable256k@@A:BYTE ; RGB256k + Line 40: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 41: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 42: EXTRN ?translationtables@@3PAV?$TAutoGrowArray@VFRemapTablePtr@@PEAUFRemapTable@@@@A:BYTE ; translationtables + Line 43: EXTRN ?GrayMap@ImageHelpers@@3PAEA:BYTE ; ImageHelpers::GrayMap + Line 44: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 45: EXTRN ?NextID@FImageSource@@1HA:DWORD ; FImageSource::NextID + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\thingdef.cod (66 hits) + Line 66: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 67: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 68: EXTRN atexit:PROC + Line 69: EXTRN __std_terminate:PROC + Line 70: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 71: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 72: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 73: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 74: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 75: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 76: EXTRN ??0FStringf@@QEAA@PEBDZZ:PROC ; FStringf::FStringf + Line 77: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 78: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 79: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 80: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 81: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 82: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 83: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 84: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 85: EXTRN ?StaticType@PSymbol@@UEBAPEAVPClass@@XZ:PROC ; PSymbol::StaticType + Line 86: EXTRN ??_EPSymbol@@UEAAPEAXI@Z:PROC ; PSymbol::`vector deleting destructor' + Line 87: EXTRN ?StaticType@PFunction@@UEBAPEAVPClass@@XZ:PROC ; PFunction::StaticType + Line 88: EXTRN ?AddVariant@PFunction@@QEAAIPEAVPPrototype@@AEAV?$TArray@II@@AEAV?$TArray@VFName@@V1@@@PEAVVMFunction@@HH@Z:PROC ; PFunction::AddVariant + Line 89: EXTRN ??_EPFunction@@UEAAPEAXI@Z:PROC ; PFunction::`vector deleting destructor' + Line 90: EXTRN ?FindSymbolInTable@PSymbolTable@@QEAAPEAVPSymbol@@VFName@@AEAPEAU1@@Z:PROC ; PSymbolTable::FindSymbolInTable + Line 91: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 92: EXTRN ?StaticGetStateName@FState@@SA?AVFString@@PEBU1@@Z:PROC ; FState::StaticGetStateName + Line 93: EXTRN ?FindLabel@FStateLabels@@QEAAPEAUFStateLabel@@VFName@@@Z:PROC ; FStateLabels::FindLabel + Line 94: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 95: EXTRN ??0FScriptPosition@@QEAA@AEBU0@@Z:PROC ; FScriptPosition::FScriptPosition + Line 96: EXTRN ??0FScriptPosition@@QEAA@VFString@@H@Z:PROC ; FScriptPosition::FScriptPosition + Line 97: EXTRN ??4FScriptPosition@@QEAAAEAU0@AEBU0@@Z:PROC ; FScriptPosition::operator= + Line 98: EXTRN ?Message@FScriptPosition@@QEBAXHPEBDZZ:PROC ; FScriptPosition::Message + Line 99: EXTRN ?AddFunction@FFunctionBuildList@@QEAAPEAVVMFunction@@PEAVPNamespace@@AEBUVersionInfo@@PEAVPFunction@@PEAVFxExpression@@AEBVFString@@_NHHH@Z:PROC ; FFunctionBuildList::AddFunction + Line 100: EXTRN ?Build@FFunctionBuildList@@QEAAXXZ:PROC ; FFunctionBuildList::Build + Line 101: EXTRN ?NewPointer@@YAPEAVPPointer@@PEAVPType@@_N@Z:PROC ; NewPointer + Line 102: EXTRN ?NewPointer@@YAPEAVPPointer@@PEAVPClass@@_N@Z:PROC ; NewPointer + Line 103: EXTRN ?NewStruct@@YAPEAVPStruct@@VFName@@PEAVPTypeBase@@_N@Z:PROC ; NewStruct + Line 104: EXTRN ?NewPrototype@@YAPEAVPPrototype@@AEBV?$TArray@PEAVPType@@PEAV1@@@0@Z:PROC ; NewPrototype + Line 105: EXTRN ??0FxIntCast@@QEAA@PEAVFxExpression@@_N11@Z:PROC ; FxIntCast::FxIntCast + Line 106: EXTRN ??0FxReturnStatement@@QEAA@PEAVFxExpression@@AEBUFScriptPosition@@@Z:PROC ; FxReturnStatement::FxReturnStatement + Line 107: EXTRN ?InstallStates@FStateDefinitions@@QEAAXPEAVPClassActor@@PEAVAActor@@@Z:PROC ; FStateDefinitions::InstallStates + Line 108: EXTRN ?FinishStates@FStateDefinitions@@QEAAHPEAVPClassActor@@@Z:PROC ; FStateDefinitions::FinishStates + Line 109: EXTRN ?MakeStateDefines@FStateDefinitions@@QEAAXPEBVPClassActor@@@Z:PROC ; FStateDefinitions::MakeStateDefines + Line 110: EXTRN ?InitThingdef@@YAXXZ:PROC ; InitThingdef + Line 111: EXTRN ?ParseScripts@@YAXXZ:PROC ; ParseScripts + Line 112: EXTRN ?ParseAllDecorate@@YAXXZ:PROC ; ParseAllDecorate + Line 113: EXTRN ?SynthesizeFlagFields@@YAXXZ:PROC ; SynthesizeFlagFields + Line 114: EXTRN _CxxThrowException:PROC + Line 115: EXTRN __CxxFrameHandler3:PROC + Line 116: EXTRN memmove:PROC + Line 117: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 118: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 119: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + Line 120: EXTRN ?RegistrationInfo@PFunction@@2UClassReg@@A:BYTE ; PFunction::RegistrationInfo + Line 121: EXTRN ?bVMOperational@PClass@@2_NA:BYTE ; PClass::bVMOperational + Line 122: EXTRN ?AllActorClasses@PClassActor@@2V?$TArray@PEAVPClassActor@@PEAV1@@@A:BYTE ; PClassActor::AllActorClasses + Line 123: EXTRN ?WarnCounter@FScriptPosition@@2HA:DWORD ; FScriptPosition::WarnCounter + Line 124: EXTRN ?ErrorCounter@FScriptPosition@@2HA:DWORD ; FScriptPosition::ErrorCounter + Line 125: EXTRN ?StrictErrors@FScriptPosition@@2_NA:BYTE ; FScriptPosition::StrictErrors + Line 126: EXTRN ?PerfToMillisec@@3NA:QWORD ; PerfToMillisec + Line 127: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 128: EXTRN ?FunctionBuildList@@3VFFunctionBuildList@@A:BYTE ; FunctionBuildList + Line 129: EXTRN ?TypeSInt32@@3PEAVPInt@@EA:QWORD ; TypeSInt32 + Line 130: EXTRN ?FxAlloc@@3VFMemArena@@A:BYTE ; FxAlloc + Line 131: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\thingdef_data.cod (58 hits) + Line 315: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 3688: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 3689: EXTRN atexit:PROC + Line 3690: EXTRN __std_terminate:PROC + Line 3691: EXTRN qsort:PROC + Line 3692: EXTRN stricmp:PROC + Line 3693: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 3694: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 3695: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 3696: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 3697: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 3698: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 3699: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 3700: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 3701: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 3702: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 3703: EXTRN ?Mid@FString@@QEBA?AV1@_K0@Z:PROC ; FString::Mid + Line 3704: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 3705: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 3706: EXTRN ?IsInt@FString@@QEBA_NXZ:PROC ; FString::IsInt + Line 3707: EXTRN ?ToLong@FString@@QEBAJH@Z:PROC ; FString::ToLong + Line 3708: EXTRN ?ToDouble@FString@@QEBANXZ:PROC ; FString::ToDouble + Line 3709: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 3710: EXTRN ??0FStringf@@QEAA@PEBDZZ:PROC ; FStringf::FStringf + Line 3711: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 3712: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 3713: EXTRN ?ThrowAbortException@@YAXW4EVMAbortException@@PEBDZZ:PROC ; ThrowAbortException + Line 3714: EXTRN ??_EVMFunction@@UEAAPEAXI@Z:PROC ; VMFunction::`vector deleting destructor' + Line 3715: EXTRN ?NativeScriptCall@VMNativeFunction@@CAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMNativeFunction::NativeScriptCall + Line 3716: EXTRN ??_EVMNativeFunction@@UEAAPEAXI@Z:PROC ; VMNativeFunction::`vector deleting destructor' + Line 3717: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 3718: EXTRN ??$Serialize@Usector_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUsector_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 3719: EXTRN ??$Serialize@Vplayer_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAVplayer_t@@PEAPEAV1@@Z:PROC ; Serialize + Line 3720: EXTRN ??$Serialize@Uline_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUline_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 3721: EXTRN ??$Serialize@Uside_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUside_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 3722: EXTRN ??$Serialize@Uvertex_t@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAUvertex_t@@PEAPEAU1@@Z:PROC ; Serialize + Line 3723: EXTRN ??$Serialize@VFFont@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAVFFont@@PEAPEAV1@@Z:PROC ; Serialize + Line 3724: EXTRN ?NewPointer@@YAPEAVPPointer@@PEAVPType@@_N@Z:PROC ; NewPointer + Line 3725: EXTRN ?NewStruct@@YAPEAVPStruct@@VFName@@PEAVPTypeBase@@_N@Z:PROC ; NewStruct + Line 3726: EXTRN __CxxFrameHandler3:PROC + Line 3727: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 3728: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 3729: EXTRN ?ClassDataAllocator@@3VFMemArena@@A:BYTE ; ClassDataAllocator + Line 3730: EXTRN ?RegistrationInfo@PPropFlag@@2UClassReg@@A:BYTE ; PPropFlag::RegistrationInfo + Line 3731: EXTRN ?RegistrationInfo@PFunction@@2UClassReg@@A:BYTE ; PFunction::RegistrationInfo + Line 3732: EXTRN ?ARegHead@@3QEAXEA:QWORD ; ARegHead + Line 3733: EXTRN ?ARegTail@@3QEAXEA:QWORD ; ARegTail + Line 3734: EXTRN ?CRegHead@@3QEAXEA:QWORD ; CRegHead + Line 3735: EXTRN ?CRegTail@@3QEAXEA:QWORD ; CRegTail + Line 3736: EXTRN ?FRegHead@@3QEAXEA:QWORD ; FRegHead + Line 3737: EXTRN ?FRegTail@@3QEAXEA:QWORD ; FRegTail + Line 3738: EXTRN ?GRegHead@@3QEAXEA:QWORD ; GRegHead + Line 3739: EXTRN ?GRegTail@@3QEAXEA:QWORD ; GRegTail + Line 3740: EXTRN ?AllFunctions@VMFunction@@2V?$TArray@PEAVVMFunction@@PEAV1@@@A:BYTE ; VMFunction::AllFunctions + Line 3741: EXTRN ?TypeSInt16@@3PEAVPInt@@EA:QWORD ; TypeSInt16 + Line 3742: EXTRN ?TypeSInt32@@3PEAVPInt@@EA:QWORD ; TypeSInt32 + Line 3743: EXTRN __ImageBase:BYTE + Line 3744: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\thingdef_exp.cod (81 hits) + Line 35: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 36: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 37: EXTRN atexit:PROC + Line 38: EXTRN __std_terminate:PROC + Line 39: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 40: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 41: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 42: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 43: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 44: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 45: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 46: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 47: EXTRN ??0FRandom@@QEAA@PEBD@Z:PROC ; FRandom::FRandom + Line 48: EXTRN ??1FRandom@@QEAA@XZ:PROC ; FRandom::~FRandom + Line 49: EXTRN ?StaticFindRNG@FRandom@@SAPEAV1@PEBD@Z:PROC ; FRandom::StaticFindRNG + Line 50: EXTRN ?TokenName@FScanner@@SA?AVFString@@HPEBD@Z:PROC ; FScanner::TokenName + Line 51: EXTRN ?GetToken@FScanner@@QEAA_NXZ:PROC ; FScanner::GetToken + Line 52: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 53: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 54: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 55: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 56: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 57: EXTRN ??0FScriptPosition@@QEAA@AEBU0@@Z:PROC ; FScriptPosition::FScriptPosition + Line 58: EXTRN ??0FScriptPosition@@QEAA@AEAVFScanner@@@Z:PROC ; FScriptPosition::FScriptPosition + Line 59: EXTRN ?ParseFunctionParameters@@YAXAEAVFScanner@@PEAVPClassActor@@AEAV?$TArray@PEAVFxExpression@@PEAV1@@@PEAVPFunction@@VFString@@PEAVFStateDefinitions@@@Z:PROC ; ParseFunctionParameters + Line 60: EXTRN ??0FCompileContext@@QEAA@PEAVPNamespace@@PEAVPContainerType@@_N@Z:PROC ; FCompileContext::FCompileContext + Line 61: EXTRN ?Resolve@FxExpression@@UEAAPEAV1@AEAUFCompileContext@@@Z:PROC ; FxExpression::Resolve + Line 62: EXTRN ?isConstant@FxExpression@@UEBA_NXZ:PROC ; FxExpression::isConstant + Line 63: EXTRN ?RequestAddress@FxExpression@@UEAA_NAEAUFCompileContext@@PEA_N@Z:PROC ; FxExpression::RequestAddress + Line 64: EXTRN ?ReturnProto@FxExpression@@UEAAPEAVPPrototype@@XZ:PROC ; FxExpression::ReturnProto + Line 65: EXTRN ?GetDirectFunction@FxExpression@@UEAAPEAVVMFunction@@PEAVPFunction@@AEBUVersionInfo@@@Z:PROC ; FxExpression::GetDirectFunction + Line 66: EXTRN ?Emit@FxExpression@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxExpression::Emit + Line 67: EXTRN ?EmitCompare@FxExpression@@UEAAXPEAVVMFunctionBuilder@@_NAEAV?$TArray@_K_K@@2@Z:PROC ; FxExpression::EmitCompare + Line 68: EXTRN ??_EFxExpression@@UEAAPEAXI@Z:PROC ; FxExpression::`vector deleting destructor' + Line 69: EXTRN ??0FxIdentifier@@QEAA@VFName@@AEBUFScriptPosition@@@Z:PROC ; FxIdentifier::FxIdentifier + Line 70: EXTRN ?Emit@FxConstant@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxConstant::Emit + Line 71: EXTRN ??_EFxConstant@@UEAAPEAXI@Z:PROC ; FxConstant::`vector deleting destructor' + Line 72: EXTRN ??0FxBoolCast@@QEAA@PEAVFxExpression@@_N@Z:PROC ; FxBoolCast::FxBoolCast + Line 73: EXTRN ??0FxIntCast@@QEAA@PEAVFxExpression@@_N11@Z:PROC ; FxIntCast::FxIntCast + Line 74: EXTRN ??0FxFloatCast@@QEAA@PEAVFxExpression@@@Z:PROC ; FxFloatCast::FxFloatCast + Line 75: EXTRN ??0FxPlusSign@@QEAA@PEAVFxExpression@@@Z:PROC ; FxPlusSign::FxPlusSign + Line 76: EXTRN ??0FxMinusSign@@QEAA@PEAVFxExpression@@@Z:PROC ; FxMinusSign::FxMinusSign + Line 77: EXTRN ??0FxUnaryNotBitwise@@QEAA@PEAVFxExpression@@@Z:PROC ; FxUnaryNotBitwise::FxUnaryNotBitwise + Line 78: EXTRN ??0FxUnaryNotBoolean@@QEAA@PEAVFxExpression@@@Z:PROC ; FxUnaryNotBoolean::FxUnaryNotBoolean + Line 79: EXTRN ??0FxPreIncrDecr@@QEAA@PEAVFxExpression@@H@Z:PROC ; FxPreIncrDecr::FxPreIncrDecr + Line 80: EXTRN ??0FxPostIncrDecr@@QEAA@PEAVFxExpression@@H@Z:PROC ; FxPostIncrDecr::FxPostIncrDecr + Line 81: EXTRN ??0FxAssign@@QEAA@PEAVFxExpression@@0_N@Z:PROC ; FxAssign::FxAssign + Line 82: EXTRN ??0FxAssignSelf@@QEAA@AEBUFScriptPosition@@@Z:PROC ; FxAssignSelf::FxAssignSelf + Line 83: EXTRN ??0FxAddSub@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxAddSub::FxAddSub + Line 84: EXTRN ??0FxMulDiv@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxMulDiv::FxMulDiv + Line 85: EXTRN ??0FxCompareRel@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxCompareRel::FxCompareRel + Line 86: EXTRN ??0FxCompareEq@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxCompareEq::FxCompareEq + Line 87: EXTRN ??0FxBitOp@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxBitOp::FxBitOp + Line 88: EXTRN ??0FxShift@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxShift::FxShift + Line 89: EXTRN ??0FxBinaryLogical@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxBinaryLogical::FxBinaryLogical + Line 90: EXTRN ??0FxConditional@@QEAA@PEAVFxExpression@@00@Z:PROC ; FxConditional::FxConditional + Line 91: EXTRN ??0FxAbs@@QEAA@PEAVFxExpression@@@Z:PROC ; FxAbs::FxAbs + Line 92: EXTRN ??0FxATan2@@QEAA@PEAVFxExpression@@0AEBUFScriptPosition@@@Z:PROC ; FxATan2::FxATan2 + Line 93: EXTRN ??0FxMinMax@@QEAA@AEAV?$TArray@PEAVFxExpression@@PEAV1@@@VFName@@AEBUFScriptPosition@@@Z:PROC ; FxMinMax::FxMinMax + Line 94: EXTRN ??0FxRandom@@QEAA@PEAVFRandom@@PEAVFxExpression@@1AEBUFScriptPosition@@_N@Z:PROC ; FxRandom::FxRandom + Line 95: EXTRN ??0FxRandomPick@@QEAA@PEAVFRandom@@AEAV?$TArray@PEAVFxExpression@@PEAV1@@@_NAEBUFScriptPosition@@2@Z:PROC ; FxRandomPick::FxRandomPick + Line 96: EXTRN ??0FxFRandom@@QEAA@PEAVFRandom@@PEAVFxExpression@@1AEBUFScriptPosition@@@Z:PROC ; FxFRandom::FxFRandom + Line 97: EXTRN ??0FxRandom2@@QEAA@PEAVFRandom@@PEAVFxExpression@@AEBUFScriptPosition@@_N@Z:PROC ; FxRandom2::FxRandom2 + Line 98: EXTRN ??0FxSelf@@QEAA@AEBUFScriptPosition@@_N@Z:PROC ; FxSelf::FxSelf + Line 99: EXTRN ??0FxArrayElement@@QEAA@PEAVFxExpression@@0@Z:PROC ; FxArrayElement::FxArrayElement + Line 100: EXTRN ??0FxFunctionCall@@QEAA@VFName@@0AEAV?$TDeletingArray@PEAVFxExpression@@PEAV1@@@AEBUFScriptPosition@@@Z:PROC ; FxFunctionCall::FxFunctionCall + Line 101: EXTRN ??0FxVMFunctionCall@@QEAA@PEAVFxExpression@@PEAVPFunction@@AEAV?$TDeletingArray@PEAVFxExpression@@PEAV1@@@AEBUFScriptPosition@@_N@Z:PROC ; FxVMFunctionCall::FxVMFunctionCall + Line 102: EXTRN ??0FxRuntimeStateIndex@@QEAA@PEAVFxExpression@@@Z:PROC ; FxRuntimeStateIndex::FxRuntimeStateIndex + Line 103: EXTRN ??0FxMultiNameState@@QEAA@PEBDAEBUFScriptPosition@@PEAVPClassActor@@@Z:PROC ; FxMultiNameState::FxMultiNameState + Line 104: EXTRN __CxxFrameHandler3:PROC + Line 105: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 106: EXTRN ?RegistrationInfo@PFunction@@2UClassReg@@A:BYTE ; PFunction::RegistrationInfo + Line 107: EXTRN ?TypeSInt32@@3PEAVPInt@@EA:QWORD ; TypeSInt32 + Line 108: EXTRN ?TypeBool@@3PEAVPBool@@EA:QWORD ; TypeBool + Line 109: EXTRN ?TypeFloat64@@3PEAVPFloat@@EA:QWORD ; TypeFloat64 + Line 110: EXTRN ?TypeString@@3PEAVPString@@EA:QWORD ; TypeString + Line 111: EXTRN ?TypeName@@3PEAVPName@@EA:QWORD ; TypeName + Line 112: EXTRN ?TypeState@@3PEAVPStatePointer@@EA:QWORD ; TypeState + Line 113: EXTRN ?FxAlloc@@3VFMemArena@@A:BYTE ; FxAlloc + Line 114: EXTRN __ImageBase:BYTE + Line 115: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\thingdef_parse.cod (143 hits) + Line 155: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 156: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 157: EXTRN atexit:PROC + Line 158: EXTRN _Init_thread_header:PROC + Line 159: EXTRN _Init_thread_footer:PROC + Line 160: EXTRN __std_terminate:PROC + Line 161: EXTRN strchr:PROC + Line 162: EXTRN stricmp:PROC + Line 163: EXTRN strlwr:PROC + Line 164: EXTRN strnicmp:PROC + Line 165: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 166: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 167: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 168: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 169: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 170: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 171: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 172: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 173: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 174: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 175: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 176: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 177: EXTRN ?Insert@FString@@QEAAX_KPEBD@Z:PROC ; FString::Insert + Line 178: EXTRN ?Substitute@FString@@QEAAXPEBD0@Z:PROC ; FString::Substitute + Line 179: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 180: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 181: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 182: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 183: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 184: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 185: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 186: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 187: EXTRN ?StaticType@PSymbol@@UEBAPEAVPClass@@XZ:PROC ; PSymbol::StaticType + Line 188: EXTRN ??_EPSymbol@@UEAAPEAXI@Z:PROC ; PSymbol::`vector deleting destructor' + Line 189: EXTRN ?StaticType@PSymbolConst@@UEBAPEAVPClass@@XZ:PROC ; PSymbolConst::StaticType + Line 190: EXTRN ??_EPSymbolConst@@UEAAPEAXI@Z:PROC ; PSymbolConst::`vector deleting destructor' + Line 191: EXTRN ?StaticType@PSymbolConstNumeric@@UEBAPEAVPClass@@XZ:PROC ; PSymbolConstNumeric::StaticType + Line 192: EXTRN ??_EPSymbolConstNumeric@@UEAAPEAXI@Z:PROC ; PSymbolConstNumeric::`vector deleting destructor' + Line 193: EXTRN ?FindSymbol@PSymbolTable@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PSymbolTable::FindSymbol + Line 194: EXTRN ?AddSymbol@PSymbolTable@@QEAAPEAVPSymbol@@PEAV2@@Z:PROC ; PSymbolTable::AddSymbol + Line 195: EXTRN ?NewNamespace@FNamespaceManager@@QEAAPEAVPNamespace@@H@Z:PROC ; FNamespaceManager::NewNamespace + Line 196: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 197: EXTRN ?AddField@PClass@@QEAAPEAVPField@@VFName@@PEAVPType@@I@Z:PROC ; PClass::AddField + Line 198: EXTRN ?CreateDerivedClass@PClass@@QEAAPEAV1@VFName@@I@Z:PROC ; PClass::CreateDerivedClass + Line 199: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 200: EXTRN ?FindClassTentative@PClass@@QEAAPEAV1@VFName@@@Z:PROC ; PClass::FindClassTentative + Line 201: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 202: EXTRN ?Apply@DamageTypeDefinition@@QEAAXVFName@@@Z:PROC ; DamageTypeDefinition::Apply + Line 203: EXTRN ?SetReplacement@PClassActor@@QEAA_NVFName@@@Z:PROC ; PClassActor::SetReplacement + Line 204: EXTRN ?FindState@PClassActor@@QEBAPEAUFState@@HPEAVFName@@_N@Z:PROC ; PClassActor::FindState + Line 205: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 206: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 207: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 208: EXTRN ?Open@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::Open + Line 209: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 210: EXTRN ?SetEscape@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetEscape + Line 211: EXTRN ?SavePos@FScanner@@QEAA?BUSavedPos@1@XZ:PROC ; FScanner::SavePos + Line 212: EXTRN ?RestorePos@FScanner@@QEAAXAEBUSavedPos@1@@Z:PROC ; FScanner::RestorePos + Line 213: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 214: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 215: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 216: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 217: EXTRN ?GetToken@FScanner@@QEAA_NXZ:PROC ; FScanner::GetToken + Line 218: EXTRN ?MustGetAnyToken@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetAnyToken + Line 219: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 220: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 221: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 222: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 223: EXTRN ?MustGetFloat@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetFloat + Line 224: EXTRN ?CheckFloat@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckFloat + Line 225: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 226: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 227: EXTRN ?MustMatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MustMatchString + Line 228: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 229: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 230: EXTRN ??0FScriptPosition@@QEAA@AEBU0@@Z:PROC ; FScriptPosition::FScriptPosition + Line 231: EXTRN ??0FScriptPosition@@QEAA@AEAVFScanner@@@Z:PROC ; FScriptPosition::FScriptPosition + Line 232: EXTRN ??4FScriptPosition@@QEAAAEAU0@AEBU0@@Z:PROC ; FScriptPosition::operator= + Line 233: EXTRN ?Message@FScriptPosition@@QEBAXHPEBDZZ:PROC ; FScriptPosition::Message + Line 234: EXTRN ?V_GetColor@@YAHPEBIAEAVFScanner@@@Z:PROC ; V_GetColor + Line 235: EXTRN ?strbin1@@YA?AVFString@@PEBD@Z:PROC ; strbin1 + Line 236: EXTRN ?ChangeSideInObjectFlags@FScopeBarrier@@SA?AW4EScopeFlags@@W42@H@Z:PROC ; FScopeBarrier::ChangeSideInObjectFlags + Line 237: EXTRN ?FinalizeClass@@YAXPEAVPClass@@AEAVFStateDefinitions@@@Z:PROC ; FinalizeClass + Line 238: EXTRN ?FindFlag@@YAPEAUFFlagDef@@PEBVPClass@@PEBD1_N@Z:PROC ; FindFlag + Line 239: EXTRN ?HandleDeprecatedFlags@@YAXPEAVAActor@@PEAVPClassActor@@_NH@Z:PROC ; HandleDeprecatedFlags + Line 240: EXTRN ?ModActorFlag@@YAXPEAVAActor@@PEAUFFlagDef@@_N@Z:PROC ; ModActorFlag + Line 241: EXTRN ?SetStateLabel@FStateDefinitions@@QEAAXPEBDPEAUFState@@E@Z:PROC ; FStateDefinitions::SetStateLabel + Line 242: EXTRN ?MakeStateDefines@FStateDefinitions@@QEAAXPEBVPClassActor@@@Z:PROC ; FStateDefinitions::MakeStateDefines + Line 243: EXTRN ?ParseExpression@@YAPEAVFxExpression@@AEAVFScanner@@PEAVPClassActor@@PEAVPNamespace@@@Z:PROC ; ParseExpression + Line 244: EXTRN ?ParseStates@@YAXAEAVFScanner@@PEAVPClassActor@@PEAVAActor@@AEAUBaggage@@@Z:PROC ; ParseStates + Line 245: EXTRN ?FindProperty@@YAPEAUFPropertyInfo@@PEBD@Z:PROC ; FindProperty + Line 246: EXTRN ?MatchString@@YAHPEBDPEAPEBD@Z:PROC ; MatchString + Line 247: EXTRN ?DescriptiveName@PType@@QEBAPEBDXZ:PROC ; PType::DescriptiveName + Line 248: EXTRN ?NewArray@@YAPEAVPArray@@PEAVPType@@I@Z:PROC ; NewArray + Line 249: EXTRN ?Resolve@FxExpression@@UEAAPEAV1@AEAUFCompileContext@@@Z:PROC ; FxExpression::Resolve + Line 250: EXTRN ?isConstant@FxExpression@@UEBA_NXZ:PROC ; FxExpression::isConstant + Line 251: EXTRN ?RequestAddress@FxExpression@@UEAA_NAEAUFCompileContext@@PEA_N@Z:PROC ; FxExpression::RequestAddress + Line 252: EXTRN ?ReturnProto@FxExpression@@UEAAPEAVPPrototype@@XZ:PROC ; FxExpression::ReturnProto + Line 253: EXTRN ?GetDirectFunction@FxExpression@@UEAAPEAVVMFunction@@PEAVPFunction@@AEBUVersionInfo@@@Z:PROC ; FxExpression::GetDirectFunction + Line 254: EXTRN ?Emit@FxExpression@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxExpression::Emit + Line 255: EXTRN ?EmitCompare@FxExpression@@UEAAXPEAVVMFunctionBuilder@@_NAEAV?$TArray@_K_K@@2@Z:PROC ; FxExpression::EmitCompare + Line 256: EXTRN ??_EFxExpression@@UEAAPEAXI@Z:PROC ; FxExpression::`vector deleting destructor' + Line 257: EXTRN ?Emit@FxConstant@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxConstant::Emit + Line 258: EXTRN ??_EFxConstant@@UEAAPEAXI@Z:PROC ; FxConstant::`vector deleting destructor' + Line 259: EXTRN ??0FxBoolCast@@QEAA@PEAVFxExpression@@_N@Z:PROC ; FxBoolCast::FxBoolCast + Line 260: EXTRN ??0FxIntCast@@QEAA@PEAVFxExpression@@_N11@Z:PROC ; FxIntCast::FxIntCast + Line 261: EXTRN ??0FxFloatCast@@QEAA@PEAVFxExpression@@@Z:PROC ; FxFloatCast::FxFloatCast + Line 262: EXTRN ??0FxClassTypeCast@@QEAA@PEAVPClassPointer@@PEAVFxExpression@@_N@Z:PROC ; FxClassTypeCast::FxClassTypeCast + Line 263: EXTRN ??0FxRuntimeStateIndex@@QEAA@PEAVFxExpression@@@Z:PROC ; FxRuntimeStateIndex::FxRuntimeStateIndex + Line 264: EXTRN ??0FxMultiNameState@@QEAA@PEBDAEBUFScriptPosition@@PEAVPClassActor@@@Z:PROC ; FxMultiNameState::FxMultiNameState + Line 265: EXTRN ?GetWadFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetWadFullName + Line 266: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 267: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 268: EXTRN ?GetLumpFullPath@FWadCollection@@QEBA?AVFString@@H@Z:PROC ; FWadCollection::GetLumpFullPath + Line 269: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 270: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 271: EXTRN ?ParseOldDecoration@@YAXAEAVFScanner@@W4EDefinitionType@@PEAVPNamespace@@@Z:PROC ; ParseOldDecoration + Line 272: EXTRN __CxxFrameHandler3:PROC + Line 273: EXTRN _Init_thread_epoch:DWORD + Line 274: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 275: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 276: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 277: EXTRN ?RegistrationInfo@PProperty@@2UClassReg@@A:BYTE ; PProperty::RegistrationInfo + Line 278: EXTRN ?RegistrationInfo@PSymbolConstNumeric@@2UClassReg@@A:BYTE ; PSymbolConstNumeric::RegistrationInfo + Line 279: EXTRN ?Namespaces@@3UFNamespaceManager@@A:BYTE ; Namespaces + Line 280: EXTRN ?ErrorCounter@FScriptPosition@@2HA:DWORD ; FScriptPosition::ErrorCounter + Line 281: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 282: EXTRN ?TypeSInt32@@3PEAVPInt@@EA:QWORD ; TypeSInt32 + Line 283: EXTRN ?TypeUInt32@@3PEAVPInt@@EA:QWORD ; TypeUInt32 + Line 284: EXTRN ?TypeBool@@3PEAVPBool@@EA:QWORD ; TypeBool + Line 285: EXTRN ?TypeFloat64@@3PEAVPFloat@@EA:QWORD ; TypeFloat64 + Line 286: EXTRN ?TypeString@@3PEAVPString@@EA:QWORD ; TypeString + Line 287: EXTRN ?TypeName@@3PEAVPName@@EA:QWORD ; TypeName + Line 288: EXTRN ?TypeSound@@3PEAVPSound@@EA:QWORD ; TypeSound + Line 289: EXTRN ?TypeColor@@3PEAVPColor@@EA:QWORD ; TypeColor + Line 290: EXTRN ?TypeStateLabel@@3PEAVPStateLabel@@EA:QWORD ; TypeStateLabel + Line 291: EXTRN ?FxAlloc@@3VFMemArena@@A:BYTE ; FxAlloc + Line 292: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 293: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 294: EXTRN ?strictdecorate@@3VFBoolCVar@@A:BYTE ; strictdecorate + Line 295: EXTRN __ImageBase:BYTE + Line 296: EXTRN _fltused:DWORD + Line 297: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\thingdef_properties.cod (63 hits) + Line 283: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 284: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 285: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 286: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 287: EXTRN ?Teams@@3V?$TArray@VFTeam@@V1@@@A:BYTE ; Teams + Line 288: EXTRN ?ClassDataAllocator@@3VFMemArena@@A:BYTE ; ClassDataAllocator + Line 289: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 290: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 291: EXTRN ?PainFlashes@@3V?$TArray@V?$tuple@PEAVPClass@@VFName@@UPalEntry@@@std@@V12@@@A:BYTE ; PainFlashes + Line 292: EXTRN ?ColorSets@@3V?$TArray@V?$tuple@PEAVPClass@@HUFPlayerColorSet@@@std@@V12@@@A:BYTE ; ColorSets + Line 293: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 294: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 295: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 1795: EXTRN strchr:PROC + Line 1796: EXTRN stricmp:PROC + Line 1797: EXTRN strnicmp:PROC + Line 1798: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 1799: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 1800: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 1801: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 1802: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 1803: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 1804: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 1805: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 1806: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 1807: EXTRN ?ToUpper@FString@@QEAAXXZ:PROC ; FString::ToUpper + Line 1808: EXTRN ?ReplaceChars@FString@@QEAAXDD@Z:PROC ; FString::ReplaceChars + Line 1809: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 1810: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 1811: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 1812: EXTRN ?FindCVar@@YAPEAVFBaseCVar@@PEBDPEAPEAV1@@Z:PROC ; FindCVar + Line 1813: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 1814: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 1815: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 1816: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 1817: EXTRN ?FindClassTentative@PClass@@QEAAPEAV1@VFName@@@Z:PROC ; PClass::FindClassTentative + Line 1818: EXTRN ?SetDamageFactor@PClassActor@@QEAAXVFName@@N@Z:PROC ; PClassActor::SetDamageFactor + Line 1819: EXTRN ?SetPainChance@PClassActor@@QEAAXVFName@@H@Z:PROC ; PClassActor::SetPainChance + Line 1820: EXTRN ?GetSpriteIndex@@YAHPEBD_N@Z:PROC ; GetSpriteIndex + Line 1821: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 1822: EXTRN ??0FRemapTable@@QEAA@H@Z:PROC ; FRemapTable::FRemapTable + Line 1823: EXTRN ??1FRemapTable@@QEAA@XZ:PROC ; FRemapTable::~FRemapTable + Line 1824: EXTRN ?MakeIdentity@FRemapTable@@QEAAXXZ:PROC ; FRemapTable::MakeIdentity + Line 1825: EXTRN ?AddToTranslation@FRemapTable@@QEAA_NPEBD@Z:PROC ; FRemapTable::AddToTranslation + Line 1826: EXTRN ?StoreTranslation@FRemapTable@@QEAAHH@Z:PROC ; FRemapTable::StoreTranslation + Line 1827: EXTRN ?CreateBloodTranslation@@YAHUPalEntry@@@Z:PROC ; CreateBloodTranslation + Line 1828: EXTRN ?R_FindCustomTranslation@@YAHVFName@@@Z:PROC ; R_FindCustomTranslation + Line 1829: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 1830: EXTRN ?Message@FScriptPosition@@QEBAXHPEBDZZ:PROC ; FScriptPosition::Message + Line 1831: EXTRN ?AddSpecialColormap@@YAHMMMMMM@Z:PROC ; AddSpecialColormap + Line 1832: EXTRN ?V_GetColor@@YAHPEBIPEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColor + Line 1833: EXTRN ??4AActor@@QEAAAEAV0@AEBV0@@Z:PROC ; AActor::operator= + Line 1834: EXTRN ?SetTag@AActor@@QEAAXPEBD@Z:PROC ; AActor::SetTag + Line 1835: EXTRN ?LinkToWorld@AActor@@QEAAXPEAUFLinkContext@@_NPEAUsector_t@@@Z:PROC ; AActor::LinkToWorld + Line 1836: EXTRN ?UnlinkFromWorld@AActor@@QEAAXPEAUFLinkContext@@@Z:PROC ; AActor::UnlinkFromWorld + Line 1837: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 1838: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 1839: EXTRN ?FindFlag@@YAPEAUFFlagDef@@PEBVPClass@@PEBD1_N@Z:PROC ; FindFlag + Line 1840: EXTRN ?MakeStateDefines@FStateDefinitions@@QEAAXPEBVPClassActor@@@Z:PROC ; FStateDefinitions::MakeStateDefines + Line 1841: EXTRN ?CreateDamageFunction@@YAXPEAVPNamespace@@AEBUVersionInfo@@PEAVPClassActor@@PEAVAActor@@PEAVFxExpression@@_NH@Z:PROC ; CreateDamageFunction + Line 1842: EXTRN __CxxFrameHandler3:PROC + Line 1843: EXTRN __ImageBase:BYTE + Line 1844: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\thingdef_states.cod (87 hits) + Line 86: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 87: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 88: EXTRN __std_terminate:PROC + Line 89: EXTRN stricmp:PROC + Line 90: EXTRN strlwr:PROC + Line 91: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 92: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 93: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 94: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 95: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 96: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 97: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 98: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 99: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 100: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 101: EXTRN ??0FStringf@@QEAA@PEBDZZ:PROC ; FStringf::FStringf + Line 102: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 103: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 104: EXTRN ?GetSpriteIndex@@YAHPEBD_N@Z:PROC ; GetSpriteIndex + Line 105: EXTRN ?AddStateLight@@YAXPEAUFState@@PEBD@Z:PROC ; AddStateLight + Line 106: EXTRN ?SetEscape@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetEscape + Line 107: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 108: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 109: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 110: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 111: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 112: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 113: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 114: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 115: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 116: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 117: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 118: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 119: EXTRN ??0FScriptPosition@@QEAA@AEBU0@@Z:PROC ; FScriptPosition::FScriptPosition + Line 120: EXTRN ??0FScriptPosition@@QEAA@AEAVFScanner@@@Z:PROC ; FScriptPosition::FScriptPosition + Line 121: EXTRN ??4FScriptPosition@@QEAAAEAU0@AEBU0@@Z:PROC ; FScriptPosition::operator= + Line 122: EXTRN ?P_FindLineSpecial@@YAHPEBDPEAH1@Z:PROC ; P_FindLineSpecial + Line 123: EXTRN ?AddStateLabel@FStateDefinitions@@QEAAXPEBD@Z:PROC ; FStateDefinitions::AddStateLabel + Line 124: EXTRN ?GetStateLabelIndex@FStateDefinitions@@QEAAHVFName@@@Z:PROC ; FStateDefinitions::GetStateLabelIndex + Line 125: EXTRN ?SetGotoLabel@FStateDefinitions@@QEAA_NPEBD@Z:PROC ; FStateDefinitions::SetGotoLabel + Line 126: EXTRN ?SetStop@FStateDefinitions@@QEAA_NXZ:PROC ; FStateDefinitions::SetStop + Line 127: EXTRN ?SetWait@FStateDefinitions@@QEAA_NXZ:PROC ; FStateDefinitions::SetWait + Line 128: EXTRN ?SetLoop@FStateDefinitions@@QEAA_NXZ:PROC ; FStateDefinitions::SetLoop + Line 129: EXTRN ?AddStates@FStateDefinitions@@QEAAHPEAUFState@@PEBDAEBUFScriptPosition@@@Z:PROC ; FStateDefinitions::AddStates + Line 130: EXTRN ?ParseExpression@@YAPEAVFxExpression@@AEAVFScanner@@PEAVPClassActor@@PEAVPNamespace@@@Z:PROC ; ParseExpression + Line 131: EXTRN ?CreateAnonymousFunction@@YAPEAVPFunction@@PEAVPContainerType@@PEAVPType@@H@Z:PROC ; CreateAnonymousFunction + Line 132: EXTRN ?ParseParameter@@YAPEAVFxExpression@@AEAVFScanner@@PEAVPClassActor@@PEAVPType@@@Z:PROC ; ParseParameter + Line 133: EXTRN ?AddFunction@FFunctionBuildList@@QEAAPEAVVMFunction@@PEAVPNamespace@@AEBUVersionInfo@@PEAVPFunction@@PEAVFxExpression@@AEBVFString@@_NHHH@Z:PROC ; FFunctionBuildList::AddFunction + Line 134: EXTRN ?Resolve@FxExpression@@UEAAPEAV1@AEAUFCompileContext@@@Z:PROC ; FxExpression::Resolve + Line 135: EXTRN ?isConstant@FxExpression@@UEBA_NXZ:PROC ; FxExpression::isConstant + Line 136: EXTRN ?RequestAddress@FxExpression@@UEAA_NAEAUFCompileContext@@PEA_N@Z:PROC ; FxExpression::RequestAddress + Line 137: EXTRN ?ReturnProto@FxExpression@@UEAAPEAVPPrototype@@XZ:PROC ; FxExpression::ReturnProto + Line 138: EXTRN ?GetDirectFunction@FxExpression@@UEAAPEAVVMFunction@@PEAVPFunction@@AEBUVersionInfo@@@Z:PROC ; FxExpression::GetDirectFunction + Line 139: EXTRN ?Emit@FxExpression@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxExpression::Emit + Line 140: EXTRN ?EmitCompare@FxExpression@@UEAAXPEAVVMFunctionBuilder@@_NAEAV?$TArray@_K_K@@2@Z:PROC ; FxExpression::EmitCompare + Line 141: EXTRN ??_EFxExpression@@UEAAPEAXI@Z:PROC ; FxExpression::`vector deleting destructor' + Line 142: EXTRN ?Emit@FxConstant@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxConstant::Emit + Line 143: EXTRN ??_EFxConstant@@UEAAPEAXI@Z:PROC ; FxConstant::`vector deleting destructor' + Line 144: EXTRN ??0FxIntCast@@QEAA@PEAVFxExpression@@_N11@Z:PROC ; FxIntCast::FxIntCast + Line 145: EXTRN ??0FxSelf@@QEAA@AEBUFScriptPosition@@_N@Z:PROC ; FxSelf::FxSelf + Line 146: EXTRN ??0FxVMFunctionCall@@QEAA@PEAVFxExpression@@PEAVPFunction@@AEAV?$TDeletingArray@PEAVFxExpression@@PEAV1@@@AEBUFScriptPosition@@_N@Z:PROC ; FxVMFunctionCall::FxVMFunctionCall + Line 147: EXTRN ?Resolve@FxSequence@@UEAAPEAVFxExpression@@AEAUFCompileContext@@@Z:PROC ; FxSequence::Resolve + Line 148: EXTRN ?Emit@FxSequence@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxSequence::Emit + Line 149: EXTRN ?GetDirectFunction@FxSequence@@UEAAPEAVVMFunction@@PEAVPFunction@@AEBUVersionInfo@@@Z:PROC ; FxSequence::GetDirectFunction + Line 150: EXTRN ?CheckReturn@FxSequence@@UEAA_NXZ:PROC ; FxSequence::CheckReturn + Line 151: EXTRN ??_EFxSequence@@UEAAPEAXI@Z:PROC ; FxSequence::`vector deleting destructor' + Line 152: EXTRN ?Resolve@FxCompoundStatement@@UEAAPEAVFxExpression@@AEAUFCompileContext@@@Z:PROC ; FxCompoundStatement::Resolve + Line 153: EXTRN ?Emit@FxCompoundStatement@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxCompoundStatement::Emit + Line 154: EXTRN ??_EFxCompoundStatement@@UEAAPEAXI@Z:PROC ; FxCompoundStatement::`vector deleting destructor' + Line 155: EXTRN ??0FxIfStatement@@QEAA@PEAVFxExpression@@00AEBUFScriptPosition@@@Z:PROC ; FxIfStatement::FxIfStatement + Line 156: EXTRN ??0FxWhileLoop@@QEAA@PEAVFxExpression@@0AEBUFScriptPosition@@@Z:PROC ; FxWhileLoop::FxWhileLoop + Line 157: EXTRN ??0FxDoWhileLoop@@QEAA@PEAVFxExpression@@0AEBUFScriptPosition@@@Z:PROC ; FxDoWhileLoop::FxDoWhileLoop + Line 158: EXTRN ??0FxForLoop@@QEAA@PEAVFxExpression@@000AEBUFScriptPosition@@@Z:PROC ; FxForLoop::FxForLoop + Line 159: EXTRN ??0FxJumpStatement@@QEAA@HAEBUFScriptPosition@@@Z:PROC ; FxJumpStatement::FxJumpStatement + Line 160: EXTRN ??0FxReturnStatement@@QEAA@PEAVFxExpression@@AEBUFScriptPosition@@@Z:PROC ; FxReturnStatement::FxReturnStatement + Line 161: EXTRN ?Resolve@FxStateByIndex@@UEAAPEAVFxExpression@@AEAUFCompileContext@@@Z:PROC ; FxStateByIndex::Resolve + Line 162: EXTRN ??_EFxStateByIndex@@UEAAPEAXI@Z:PROC ; FxStateByIndex::`vector deleting destructor' + Line 163: EXTRN __CxxFrameHandler3:PROC + Line 164: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 165: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 166: EXTRN ?RegistrationInfo@PFunction@@2UClassReg@@A:BYTE ; PFunction::RegistrationInfo + Line 167: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 168: EXTRN ?FunctionBuildList@@3VFFunctionBuildList@@A:BYTE ; FunctionBuildList + Line 169: EXTRN ?TypeSInt32@@3PEAVPInt@@EA:QWORD ; TypeSInt32 + Line 170: EXTRN ?TypeString@@3PEAVPString@@EA:QWORD ; TypeString + Line 171: EXTRN ?TypeStateLabel@@3PEAVPStateLabel@@EA:QWORD ; TypeStateLabel + Line 172: EXTRN ?FxAlloc@@3VFMemArena@@A:BYTE ; FxAlloc + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\timidity.cod (58 hits) + Line 17: EXTRN ?currSong@@3PEAVMusInfo@@EA:QWORD ; currSong + Line 130: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 131: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 132: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 133: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 134: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 135: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 136: EXTRN atexit:PROC + Line 137: EXTRN atoi:PROC + Line 138: EXTRN getenv:PROC + Line 139: EXTRN __stdio_common_vsprintf:PROC + Line 140: EXTRN strchr:PROC + Line 141: EXTRN stricmp:PROC + Line 142: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 143: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 144: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 145: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 146: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 147: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 148: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 149: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 150: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 151: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 152: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 153: EXTRN ??0FStringCVar@@QEAA@PEBD0IP6AXAEAV0@@Z@Z:PROC ; FStringCVar::FStringCVar + Line 154: EXTRN ??1FStringCVar@@UEAA@XZ:PROC ; FStringCVar::~FStringCVar + Line 155: EXTRN ??0FCommandLine@@QEAA@PEBD_N@Z:PROC ; FCommandLine::FCommandLine + Line 156: EXTRN ??1FCommandLine@@QEAA@XZ:PROC ; FCommandLine::~FCommandLine + Line 157: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 158: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 159: EXTRN ?Shift@FCommandLine@@QEAAXXZ:PROC ; FCommandLine::Shift + Line 160: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 161: EXTRN ?I_DebugPrint@@YAXPEBD@Z:PROC ; I_DebugPrint + Line 162: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 163: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 164: EXTRN ?LookupFile@FSoundFontReader@@QEAA?AU?$pair@VFileReader@@VFString@@@std@@PEBD@Z:PROC ; FSoundFontReader::LookupFile + Line 165: EXTRN ?AddPath@FSoundFontReader@@QEAAXPEBD@Z:PROC ; FSoundFontReader::AddPath + Line 166: EXTRN ??0FPatchSetReader@@QEAA@XZ:PROC ; FPatchSetReader::FPatchSetReader + Line 167: EXTRN ?OpenSoundFont@FSoundFontManager@@QEAAPEAVFSoundFontReader@@PEBDH@Z:PROC ; FSoundFontManager::OpenSoundFont + Line 168: EXTRN ?MIDIDeviceChanged@@YAXH_N@Z:PROC ; MIDIDeviceChanged + Line 169: EXTRN ?free_instruments@Timidity@@YAXXZ:PROC ; Timidity::free_instruments + Line 170: EXTRN ??0ToneBank@Timidity@@QEAA@XZ:PROC ; Timidity::ToneBank::ToneBank + Line 171: EXTRN ??1ToneBank@Timidity@@QEAA@XZ:PROC ; Timidity::ToneBank::~ToneBank + Line 172: EXTRN ?font_freeall@Timidity@@YAXXZ:PROC ; Timidity::font_freeall + Line 173: EXTRN ?font_add@Timidity@@YAXPEBDH@Z:PROC ; Timidity::font_add + Line 174: EXTRN ?font_remove@Timidity@@YAXPEBD@Z:PROC ; Timidity::font_remove + Line 175: EXTRN ?font_order@Timidity@@YAXHHHH@Z:PROC ; Timidity::font_order + Line 176: EXTRN ?mix_voice@Timidity@@YAXPEAURenderer@1@PEAMPEAUVoice@1@H@Z:PROC ; Timidity::mix_voice + Line 177: EXTRN ?set_default_instrument@Renderer@Timidity@@QEAAHPEBD@Z:PROC ; Timidity::Renderer::set_default_instrument + Line 178: EXTRN ?FreeDLS@Timidity@@YAXPEAUDLS_Data@1@@Z:PROC ; Timidity::FreeDLS + Line 179: EXTRN __CxxFrameHandler3:PROC + Line 180: EXTRN memset:PROC + Line 181: EXTRN strcmp:PROC + Line 182: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 183: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 184: EXTRN ?sfmanager@@3VFSoundFontManager@@A:BYTE ; sfmanager + Line 185: EXTRN __ImageBase:BYTE + Line 186: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\types.cod (105 hits) + Line 367: EXTRN _purecall:PROC + Line 368: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 369: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 370: EXTRN atexit:PROC + Line 371: EXTRN __std_terminate:PROC + Line 372: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 373: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 374: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 375: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 376: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 377: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 378: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 379: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 380: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 381: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 382: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 383: EXTRN ??4VersionInfo@@QEAAXPEBD@Z:PROC ; VersionInfo::operator= + Line 384: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 385: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 386: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 387: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 388: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 389: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 390: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 391: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 392: EXTRN ?StaticType@PSymbol@@UEBAPEAVPClass@@XZ:PROC ; PSymbol::StaticType + Line 393: EXTRN ??_EPSymbol@@UEAAPEAXI@Z:PROC ; PSymbol::`vector deleting destructor' + Line 394: EXTRN ?StaticType@PSymbolType@@UEBAPEAVPClass@@XZ:PROC ; PSymbolType::StaticType + Line 395: EXTRN ??_EPSymbolType@@UEAAPEAXI@Z:PROC ; PSymbolType::`vector deleting destructor' + Line 396: EXTRN ??0PField@@QEAA@VFName@@PEAVPType@@I_KH@Z:PROC ; PField::PField + Line 397: EXTRN ?StaticType@PSymbolConst@@UEBAPEAVPClass@@XZ:PROC ; PSymbolConst::StaticType + Line 398: EXTRN ??_EPSymbolConst@@UEAAPEAXI@Z:PROC ; PSymbolConst::`vector deleting destructor' + Line 399: EXTRN ?StaticType@PSymbolConstNumeric@@UEBAPEAVPClass@@XZ:PROC ; PSymbolConstNumeric::StaticType + Line 400: EXTRN ??_EPSymbolConstNumeric@@UEAAPEAXI@Z:PROC ; PSymbolConstNumeric::`vector deleting destructor' + Line 401: EXTRN ??0PSymbolTable@@QEAA@XZ:PROC ; PSymbolTable::PSymbolTable + Line 402: EXTRN ??1PSymbolTable@@QEAA@XZ:PROC ; PSymbolTable::~PSymbolTable + Line 403: EXTRN ?SetParentTable@PSymbolTable@@QEAAXPEAU1@@Z:PROC ; PSymbolTable::SetParentTable + Line 404: EXTRN ?AddSymbol@PSymbolTable@@QEAAPEAVPSymbol@@PEAV2@@Z:PROC ; PSymbolTable::AddSymbol + Line 405: EXTRN ?AddField@PSymbolTable@@QEAAPEAVPField@@VFName@@PEAVPType@@IAEAIPEAI@Z:PROC ; PSymbolTable::AddField + Line 406: EXTRN ?AddNativeField@PSymbolTable@@QEAAPEAVPField@@VFName@@PEAVPType@@_KIH@Z:PROC ; PSymbolTable::AddNativeField + Line 407: EXTRN ?ReadFields@PSymbolTable@@QEBA_NAEAVFSerializer@@PEAXPEBD@Z:PROC ; PSymbolTable::ReadFields + Line 408: EXTRN ?WriteFields@PSymbolTable@@QEBAXAEAVFSerializer@@PEBX1@Z:PROC ; PSymbolTable::WriteFields + Line 409: EXTRN ?AddField@PClass@@QEAAPEAVPField@@VFName@@PEAVPType@@I@Z:PROC ; PClass::AddField + Line 410: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 411: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 412: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 413: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 414: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 415: EXTRN ?Sprite@FSerializer@@QEAAAEAV1@PEBDAEAHPEAH@Z:PROC ; FSerializer::Sprite + Line 416: EXTRN ?StringPtr@FSerializer@@QEAAAEAV1@PEBDAEAPEBD@Z:PROC ; FSerializer::StringPtr + Line 417: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_JPEA_J@Z:PROC ; Serialize + Line 418: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEA_KPEA_K@Z:PROC ; Serialize + Line 419: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEANPEAN@Z:PROC ; Serialize + Line 420: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAMPEAM@Z:PROC ; Serialize + Line 421: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFTextureID@@PEAV2@@Z:PROC ; Serialize + Line 422: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAVDObject@@PEAPEAV2@PEA_N@Z:PROC ; Serialize + Line 423: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFString@@PEAV2@@Z:PROC ; Serialize + Line 424: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAUNumericValue@@PEAU2@@Z:PROC ; Serialize + Line 425: EXTRN ??$Serialize@VPClass@@@@YAAEAVFSerializer@@AEAV0@PEBDAEAPEAVPClass@@PEAPEAV1@@Z:PROC ; Serialize + Line 426: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAPEAUFState@@PEAPEAU2@PEA_N@Z:PROC ; Serialize + Line 427: EXTRN ??_EPType@@UEAAPEAXI@Z:PROC ; PType::`vector deleting destructor' + Line 428: EXTRN ??_EPErrorType@@UEAAPEAXI@Z:PROC ; PErrorType::`vector deleting destructor' + Line 429: EXTRN ??_EPVoidType@@UEAAPEAXI@Z:PROC ; PVoidType::`vector deleting destructor' + Line 430: EXTRN ??_EPBasicType@@UEAAPEAXI@Z:PROC ; PBasicType::`vector deleting destructor' + Line 431: EXTRN ??_EPCompoundType@@UEAAPEAXI@Z:PROC ; PCompoundType::`vector deleting destructor' + Line 432: EXTRN ??_EPContainerType@@UEAAPEAXI@Z:PROC ; PContainerType::`vector deleting destructor' + Line 433: EXTRN ??_EPInt@@UEAAPEAXI@Z:PROC ; PInt::`vector deleting destructor' + Line 434: EXTRN ??_EPBool@@UEAAPEAXI@Z:PROC ; PBool::`vector deleting destructor' + Line 435: EXTRN ??_EPFloat@@UEAAPEAXI@Z:PROC ; PFloat::`vector deleting destructor' + Line 436: EXTRN ??_EPString@@UEAAPEAXI@Z:PROC ; PString::`vector deleting destructor' + Line 437: EXTRN ??_EPName@@UEAAPEAXI@Z:PROC ; PName::`vector deleting destructor' + Line 438: EXTRN ??_EPSound@@UEAAPEAXI@Z:PROC ; PSound::`vector deleting destructor' + Line 439: EXTRN ??_EPSpriteID@@UEAAPEAXI@Z:PROC ; PSpriteID::`vector deleting destructor' + Line 440: EXTRN ??_EPTextureID@@UEAAPEAXI@Z:PROC ; PTextureID::`vector deleting destructor' + Line 441: EXTRN ??_EPColor@@UEAAPEAXI@Z:PROC ; PColor::`vector deleting destructor' + Line 442: EXTRN ??_EPStateLabel@@UEAAPEAXI@Z:PROC ; PStateLabel::`vector deleting destructor' + Line 443: EXTRN ??_EPPointer@@UEAAPEAXI@Z:PROC ; PPointer::`vector deleting destructor' + Line 444: EXTRN ??_EPStatePointer@@UEAAPEAXI@Z:PROC ; PStatePointer::`vector deleting destructor' + Line 445: EXTRN ??_EPObjectPointer@@UEAAPEAXI@Z:PROC ; PObjectPointer::`vector deleting destructor' + Line 446: EXTRN ??_EPClassPointer@@UEAAPEAXI@Z:PROC ; PClassPointer::`vector deleting destructor' + Line 447: EXTRN ??_EPEnum@@UEAAPEAXI@Z:PROC ; PEnum::`vector deleting destructor' + Line 448: EXTRN ??_EPArray@@UEAAPEAXI@Z:PROC ; PArray::`vector deleting destructor' + Line 449: EXTRN ??_EPStaticArray@@UEAAPEAXI@Z:PROC ; PStaticArray::`vector deleting destructor' + Line 450: EXTRN ??_EPDynArray@@UEAAPEAXI@Z:PROC ; PDynArray::`vector deleting destructor' + Line 451: EXTRN ??_EPMap@@UEAAPEAXI@Z:PROC ; PMap::`vector deleting destructor' + Line 452: EXTRN ??_EPStruct@@UEAAPEAXI@Z:PROC ; PStruct::`vector deleting destructor' + Line 453: EXTRN ??_EPPrototype@@UEAAPEAXI@Z:PROC ; PPrototype::`vector deleting destructor' + Line 454: EXTRN ??_EPClassType@@UEAAPEAXI@Z:PROC ; PClassType::`vector deleting destructor' + Line 455: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 456: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 457: EXTRN __CxxFrameHandler3:PROC + Line 458: EXTRN memcpy:PROC + Line 459: EXTRN memset:PROC + Line 460: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 461: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 462: EXTRN ?ClassDataAllocator@@3VFMemArena@@A:BYTE ; ClassDataAllocator + Line 463: EXTRN ?S_sfx@@3V?$TArray@Usfxinfo_t@@U1@@@A:BYTE ; S_sfx + Line 464: EXTRN ?RegistrationInfo@PSymbolType@@2UClassReg@@A:BYTE ; PSymbolType::RegistrationInfo + Line 465: EXTRN ?RegistrationInfo@PField@@2UClassReg@@A:BYTE ; PField::RegistrationInfo + Line 466: EXTRN ?RegistrationInfo@PSymbolConstNumeric@@2UClassReg@@A:BYTE ; PSymbolConstNumeric::RegistrationInfo + Line 467: EXTRN ?Namespaces@@3UFNamespaceManager@@A:BYTE ; Namespaces + Line 468: EXTRN ?RegistrationInfo@DThinker@@2UClassReg@@A:BYTE ; DThinker::RegistrationInfo + Line 469: EXTRN __ImageBase:BYTE + Line 470: EXTRN _fltused:DWORD + Line 471: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\udmf.cod (69 hits) + Line 109: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 110: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 111: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 112: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 113: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 114: EXTRN ??_V@YAXPEAX_K@Z:PROC ; operator delete[] + Line 115: EXTRN __std_terminate:PROC + Line 116: EXTRN qsort:PROC + Line 117: EXTRN strtod:PROC + Line 118: EXTRN strtoll:PROC + Line 119: EXTRN stricmp:PROC + Line 120: EXTRN strnicmp:PROC + Line 121: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 122: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 123: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 124: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 125: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 126: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 127: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 128: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 129: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 130: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 131: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 132: EXTRN c_sqrt:PROC + Line 133: EXTRN ?CheckOverlap@sector_t@@QEAAXXZ:PROC ; sector_t::CheckOverlap + Line 134: EXTRN ?AdjustLine@line_t@@QEAAXXZ:PROC ; line_t::AdjustLine + Line 135: EXTRN ?P_LoadTranslator@@YAXPEBD@Z:PROC ; P_LoadTranslator + Line 136: EXTRN ?P_TranslateSectorSpecial@@YAHH@Z:PROC ; P_TranslateSectorSpecial + Line 137: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 138: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 139: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 140: EXTRN ?OpenMem@FScanner@@QEAAXPEBD0H@Z:PROC ; FScanner::OpenMem + Line 141: EXTRN ?OpenString@FScanner@@QEAAXPEBDVFString@@@Z:PROC ; FScanner::OpenString + Line 142: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 143: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 144: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 145: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 146: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 147: EXTRN ?GetToken@FScanner@@QEAA_NXZ:PROC ; FScanner::GetToken + Line 148: EXTRN ?MustGetAnyToken@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetAnyToken + Line 149: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 150: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 151: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 152: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 153: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 154: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 155: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 156: EXTRN ?AddSectorTag@FTagManager@@QEAAXHH@Z:PROC ; FTagManager::AddSectorTag + Line 157: EXTRN ?AddLineID@FTagManager@@QEAAXHH@Z:PROC ; FTagManager::AddLineID + Line 158: EXTRN ?P_FindTerrain@@YAHVFName@@@Z:PROC ; P_FindTerrain + Line 159: EXTRN ?TranslateLineDef@FLevelLocals@@QEAAXPEAUline_t@@PEAUmaplinedef_t@@H@Z:PROC ; FLevelLocals::TranslateLineDef + Line 160: EXTRN ?CreateScroller@MapLoader@@AEAAXW4EScroll@@NNPEAUsector_t@@HW4EScrollPos@@@Z:PROC ; MapLoader::CreateScroller + Line 161: EXTRN ?SetTexture@MapLoader@@AEAAXPEAUsector_t@@HHPEBDAEAV?$TMap@VFString@@UFMissingCount@@U?$THashTraits@VFString@@@@U?$TValueTraits@UFMissingCount@@@@@@_N@Z:PROC ; MapLoader::SetTexture + Line 162: EXTRN ?FinishLoadingLineDef@MapLoader@@AEAAXPEAUline_t@@H@Z:PROC ; MapLoader::FinishLoadingLineDef + Line 163: EXTRN ?ProcessSideTextures@MapLoader@@AEAAX_NPEAUside_t@@PEAUsector_t@@PEAUintmapsidedef_t@@HHPEAFAEAV?$TMap@VFString@@UFMissingCount@@U?$THashTraits@VFString@@@@U?$TValueTraits@UFMissingCount@@@@@@@Z:PROC ; MapLoader::ProcessSideTextures + Line 164: EXTRN __CxxFrameHandler3:PROC + Line 165: EXTRN memcpy:PROC + Line 166: EXTRN memmove:PROC + Line 167: EXTRN memset:PROC + Line 168: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 169: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 170: EXTRN ?developer@@3VFIntCVar@@A:BYTE ; developer + Line 171: EXTRN ?GameNames@@3PAPEBDA:BYTE ; GameNames + Line 172: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 173: EXTRN ?skyflatnum@@3VFTextureID@@A:DWORD ; skyflatnum + Line 174: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 175: EXTRN ?DoomEdMap@@3V?$TMap@HUFDoomEdEntry@@U?$THashTraits@H@@U?$TValueTraits@UFDoomEdEntry@@@@@@A:BYTE ; DoomEdMap + Line 176: EXTRN __ImageBase:BYTE + Line 177: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\umapinfo.cod (41 hits) + Line 70: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 71: EXTRN atexit:PROC + Line 72: EXTRN __std_terminate:PROC + Line 73: EXTRN stricmp:PROC + Line 74: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 75: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 76: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 77: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 78: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 79: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 80: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 81: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 82: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 83: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 84: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 85: EXTRN ?Split@FString@@QEBA?AV?$TArray@VFString@@V1@@@PEBDW4EmptyTokenType@1@@Z:PROC ; FString::Split + Line 86: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 87: EXTRN ?uppercopy@@YAXPEADPEBD@Z:PROC ; uppercopy + Line 88: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 89: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 90: EXTRN ?GetToken@FScanner@@QEAA_NXZ:PROC ; FScanner::GetToken + Line 91: EXTRN ?MustGetAnyToken@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetAnyToken + Line 92: EXTRN ?TokenMustBe@FScanner@@QEAAXH@Z:PROC ; FScanner::TokenMustBe + Line 93: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 94: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 95: EXTRN ?CheckValue@FScanner@@QEAA_N_N@Z:PROC ; FScanner::CheckValue + Line 96: EXTRN ?MustGetValue@FScanner@@QEAAX_N@Z:PROC ; FScanner::MustGetValue + Line 97: EXTRN ?MustGetBoolToken@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetBoolToken + Line 98: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 99: EXTRN ?Reset@level_info_t@@QEAAXXZ:PROC ; level_info_t::Reset + Line 100: EXTRN ?FindLevelInfo@@YAPEAUlevel_info_t@@PEBD_N@Z:PROC ; FindLevelInfo + Line 101: EXTRN ?P_LoadTranslator@@YAXPEBD@Z:PROC ; P_LoadTranslator + Line 102: EXTRN ?MakeEndPic@@YA?AVFName@@PEBD@Z:PROC ; MakeEndPic + Line 103: EXTRN __CxxFrameHandler3:PROC + Line 104: EXTRN memmove:PROC + Line 105: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 106: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 107: EXTRN ?wadlevelinfos@@3V?$TArray@Ulevel_info_t@@U1@@@A:BYTE ; wadlevelinfos + Line 108: EXTRN ?AllEpisodes@@3V?$TArray@UFEpisode@@U1@@@A:BYTE ; AllEpisodes + Line 109: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 110: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\v_2ddrawer.cod (24 hits) + Line 25: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 135: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 136: EXTRN __std_terminate:PROC + Line 137: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 138: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 139: EXTRN c_sqrt:PROC + Line 140: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 141: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 142: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 143: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 144: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 145: EXTRN ?CheckFuzz@FRenderStyle@@QEAAXXZ:PROC ; FRenderStyle::CheckFuzz + Line 146: EXTRN ??_EDShape2D@@UEAAPEAXI@Z:PROC ; DShape2D::`vector deleting destructor' + Line 147: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 148: EXTRN __CxxFrameHandler3:PROC + Line 149: EXTRN cos:PROC + Line 150: EXTRN memset:PROC + Line 151: EXTRN sin:PROC + Line 152: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 153: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 154: EXTRN ?vid_rendermode@@3VFIntCVar@@A:BYTE ; vid_rendermode + Line 155: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 156: EXTRN ?transsouls@@3VFFloatCVar@@A:BYTE ; transsouls + Line 157: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\v_blend.cod (9 hits) + Line 42: EXTRN atexit:PROC + Line 43: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 44: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 45: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 46: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 47: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 48: EXTRN ?paletteflash@@3VFIntCVar@@A:BYTE ; paletteflash + Line 49: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 50: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\v_collection.cod (6 hits) + Line 17: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 18: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 19: EXTRN ?PalCheck@FTextureManager@@QEAA?AVFTextureID@@V2@@Z:PROC ; FTextureManager::PalCheck + Line 20: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 21: EXTRN __CxxFrameHandler3:PROC + Line 22: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\v_draw.cod (48 hits) + Line 65: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 66: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 67: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 68: EXTRN ?viewwindowx@@3HA:DWORD ; viewwindowx + Line 69: EXTRN ?viewwindowy@@3HA:DWORD ; viewwindowy + Line 70: EXTRN ?viewwidth@@3HA:DWORD ; viewwidth + Line 71: EXTRN ?viewheight@@3HA:DWORD ; viewheight + Line 72: EXTRN ?setsizeneeded@@3_NA:BYTE ; setsizeneeded + Line 73: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 329: EXTRN atexit:PROC + Line 330: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 331: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 332: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 333: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 334: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 335: EXTRN ?V_AddBlend@@YAXMMMMQEAM@Z:PROC ; V_AddBlend + Line 336: EXTRN ?V_AddPlayerBlend@@YAXPEAVplayer_t@@QEAMMH@Z:PROC ; V_AddPlayerBlend + Line 337: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 338: EXTRN ?TranslationToTable@@YAPEAUFRemapTable@@H@Z:PROC ; TranslationToTable + Line 339: EXTRN ?GetTextureID@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::GetTextureID + Line 340: EXTRN ?R_BlendForColormap@@YAII@Z:PROC ; R_BlendForColormap + Line 341: EXTRN ?AddTexture@F2DDrawer@@QEAAXPEAVFTexture@@AEAUDrawParms@@@Z:PROC ; F2DDrawer::AddTexture + Line 342: EXTRN ?AddShape@F2DDrawer@@QEAAXPEAVFTexture@@PEAVDShape2D@@AEAUDrawParms@@@Z:PROC ; F2DDrawer::AddShape + Line 343: EXTRN ?AddPoly@F2DDrawer@@QEAAXPEAVFTexture@@PEAU?$TVector2@M@@HNNNNU?$TAngle@N@@AEBUFColormap@@UPalEntry@@HPEAI_K@Z:PROC ; F2DDrawer::AddPoly + Line 344: EXTRN ?AddFlatFill@F2DDrawer@@QEAAXHHHHPEAVFTexture@@_N@Z:PROC ; F2DDrawer::AddFlatFill + Line 345: EXTRN ?AddColorOnlyQuad@F2DDrawer@@QEAAXHHHHUPalEntry@@PEATFRenderStyle@@@Z:PROC ; F2DDrawer::AddColorOnlyQuad + Line 346: EXTRN ?AddLine@F2DDrawer@@QEAAXHHHHHIE@Z:PROC ; F2DDrawer::AddLine + Line 347: EXTRN ?AddThickLine@F2DDrawer@@QEAAXHHHHNIE@Z:PROC ; F2DDrawer::AddThickLine + Line 348: EXTRN ?AddPixel@F2DDrawer@@QEAAXHHHI@Z:PROC ; F2DDrawer::AddPixel + Line 349: EXTRN ?ActiveRatio@@YAMHHPEAM@Z:PROC ; ActiveRatio + Line 350: EXTRN ?AspectBaseWidth@@YAHM@Z:PROC ; AspectBaseWidth + Line 351: EXTRN ?AspectBaseHeight@@YAHM@Z:PROC ; AspectBaseHeight + Line 352: EXTRN ?AspectMultiplier@@YAHM@Z:PROC ; AspectMultiplier + Line 353: EXTRN ?AspectTallerThanWide@@YA_NM@Z:PROC ; AspectTallerThanWide + Line 354: EXTRN ?GetHUDScale@DBaseStatusBar@@QEBA?AU?$TVector2@N@@XZ:PROC ; DBaseStatusBar::GetHUDScale + Line 355: EXTRN ?CallScreenSizeChanged@DBaseStatusBar@@QEAAXXZ:PROC ; DBaseStatusBar::CallScreenSizeChanged + Line 356: EXTRN ?ThrowAbortException@@YAXW4EVMAbortException@@PEBDZZ:PROC ; ThrowAbortException + Line 357: EXTRN ?LegacyRenderStyles@@3PATFRenderStyle@@A:BYTE ; LegacyRenderStyles + Line 358: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 359: EXTRN ?vid_rendermode@@3VFIntCVar@@A:BYTE ; vid_rendermode + Line 360: EXTRN ?r_viewpoint@@3UFRenderViewpoint@@A:BYTE ; r_viewpoint + Line 361: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 362: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 363: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 364: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 365: EXTRN ?gl_enhanced_nightvision@@3VFBoolCVar@@A:BYTE ; gl_enhanced_nightvision + Line 366: EXTRN __ImageBase:BYTE + Line 367: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\v_font.cod (79 hits) + Line 136: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 137: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 138: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 139: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 140: EXTRN atexit:PROC + Line 141: EXTRN __std_terminate:PROC + Line 142: EXTRN qsort:PROC + Line 143: EXTRN strncmp:PROC + Line 144: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 145: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 146: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 147: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 148: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 149: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 150: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 151: EXTRN mysnprintf:PROC + Line 152: EXTRN ??_EFFont@@UEAAPEAXI@Z:PROC ; FFont::`vector deleting destructor' + Line 153: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 154: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 155: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 156: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 157: EXTRN ??0FRemapTable@@QEAA@H@Z:PROC ; FRemapTable::FRemapTable + Line 158: EXTRN ??0FRemapTable@@QEAA@AEBU0@@Z:PROC ; FRemapTable::FRemapTable + Line 159: EXTRN ??1FRemapTable@@QEAA@XZ:PROC ; FRemapTable::~FRemapTable + Line 160: EXTRN ??4FRemapTable@@QEAAAEAU0@AEBU0@@Z:PROC ; FRemapTable::operator= + Line 161: EXTRN ?PalCheck@FTextureManager@@QEAA?AVFTextureID@@V2@@Z:PROC ; FTextureManager::PalCheck + Line 162: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 163: EXTRN ?AddTexture@FTextureManager@@QEAA?AVFTextureID@@PEAVFTexture@@@Z:PROC ; FTextureManager::AddTexture + Line 164: EXTRN ?V_GetColor@@YAHPEBIAEAVFScanner@@@Z:PROC ; V_GetColor + Line 165: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 166: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 167: EXTRN ?GetNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::GetNumForName + Line 168: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 169: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 170: EXTRN ?OpenLumpReader@FWadCollection@@QEAA?AVFileReader@@H@Z:PROC ; FWadCollection::OpenLumpReader + Line 171: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 172: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 173: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 174: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 175: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 176: EXTRN ?OpenLumpNum@FScanner@@QEAAXH@Z:PROC ; FScanner::OpenLumpNum + Line 177: EXTRN ?Close@FScanner@@QEAAXXZ:PROC ; FScanner::Close + Line 178: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 179: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 180: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 181: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 182: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 183: EXTRN ?CheckNumber@FScanner@@QEAA_NXZ:PROC ; FScanner::CheckNumber + Line 184: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 185: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 186: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 187: EXTRN ?GetCharFromString@@YAHAEAPEBE@Z:PROC ; GetCharFromString + Line 188: EXTRN ?GetPalettedPixels@FImageSource@@QEAA?AV?$TArray@EE@@H@Z:PROC ; FImageSource::GetPalettedPixels + Line 189: EXTRN ??0FImageTexture@@QEAA@PEAVFImageSource@@PEBD@Z:PROC ; FImageTexture::FImageTexture + Line 190: EXTRN ??0FFontChar1@@QEAA@PEAVFImageSource@@@Z:PROC ; FFontChar1::FFontChar1 + Line 191: EXTRN ?SetSourceRemap@FFontChar1@@QEAAXPEBE@Z:PROC ; FFontChar1::SetSourceRemap + Line 192: EXTRN ??0FFontChar2@@QEAA@HHHHHH@Z:PROC ; FFontChar2::FFontChar2 + Line 193: EXTRN ?SetSourceRemap@FFontChar2@@QEAAXPEBE@Z:PROC ; FFontChar2::SetSourceRemap + Line 194: EXTRN ??_EFSingleLumpFont@@UEAAPEAXI@Z:PROC ; FSingleLumpFont::`vector deleting destructor' + Line 195: EXTRN ??_EFSinglePicFont@@UEAAPEAXI@Z:PROC ; FSinglePicFont::`vector deleting destructor' + Line 196: EXTRN ??_EFSpecialFont@@UEAAPEAXI@Z:PROC ; FSpecialFont::`vector deleting destructor' + Line 197: EXTRN __CxxFrameHandler3:PROC + Line 198: EXTRN memcpy:PROC + Line 199: EXTRN memset:PROC + Line 200: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 201: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 202: EXTRN ?SmallFont@@3PEAVFFont@@EA:QWORD ; SmallFont + Line 203: EXTRN ?SmallFont2@@3PEAVFFont@@EA:QWORD ; SmallFont2 + Line 204: EXTRN ?BigFont@@3PEAVFFont@@EA:QWORD ; BigFont + Line 205: EXTRN ?ConFont@@3PEAVFFont@@EA:QWORD ; ConFont + Line 206: EXTRN ?IntermissionFont@@3PEAVFFont@@EA:QWORD ; IntermissionFont + Line 207: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 208: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 209: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 210: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 211: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 212: EXTRN ?ImageArena@FImageSource@@1VFMemArena@@A:BYTE ; FImageSource::ImageArena + Line 213: EXTRN ?PrintColors@@3PAHA:BYTE ; PrintColors + Line 214: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\v_framebuffer.cod (45 hits) + Line 87: EXTRN _purecall:PROC + Line 88: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 89: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 90: EXTRN atexit:PROC + Line 91: EXTRN __std_terminate:PROC + Line 92: EXTRN roundf:PROC + Line 93: EXTRN ?_Xbad_function_call@std@@YAXXZ:PROC ; std::_Xbad_function_call + Line 94: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 95: EXTRN mysnprintf:PROC + Line 96: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 97: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 98: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 99: EXTRN ?DoBlending@@YAXPEBUPalEntry@@PEAU1@HHHHH@Z:PROC ; DoBlending + Line 100: EXTRN ??1IShadowMap@@UEAA@XZ:PROC ; IShadowMap::~IShadowMap + Line 101: EXTRN ??_EIShadowMap@@UEAAPEAXI@Z:PROC ; IShadowMap::`vector deleting destructor' + Line 102: EXTRN ?V_OutputResized@@YAXHH@Z:PROC ; V_OutputResized + Line 103: EXTRN ?Dim@DFrameBuffer@@QEAAXUPalEntry@@MHHHHPEATFRenderStyle@@@Z:PROC ; DFrameBuffer::Dim + Line 104: EXTRN ?Clear@DFrameBuffer@@QEAAXHHHHHI@Z:PROC ; DFrameBuffer::Clear + Line 105: EXTRN ?DrawText@DFrameBuffer@@QEAAXPEAVFFont@@HNNPEBDHZZ:PROC ; DFrameBuffer::DrawText + Line 106: EXTRN ??_EDFrameBuffer@@UEAAPEAXI@Z:PROC ; DFrameBuffer::`vector deleting destructor' + Line 107: EXTRN ?GetUIScale@@YAHH@Z:PROC ; GetUIScale + Line 108: EXTRN ?StringWidth@FFont@@QEBAHPEBE@Z:PROC ; FFont::StringWidth + Line 109: EXTRN ?ViewportScaledWidth@@YAHHH@Z:PROC ; ViewportScaledWidth + Line 110: EXTRN ?ViewportScaledHeight@@YAHHH@Z:PROC ; ViewportScaledHeight + Line 111: EXTRN ?ViewportIsScaled43@@YA_NXZ:PROC ; ViewportIsScaled43 + Line 112: EXTRN ?I_GetTime@@YAHXZ:PROC ; I_GetTime + Line 113: EXTRN ?CheckBench@@YAXXZ:PROC ; CheckBench + Line 114: EXTRN ?OutputResized@FFlatVertexBuffer@@QEAAXHH@Z:PROC ; FFlatVertexBuffer::OutputResized + Line 115: EXTRN __CxxFrameHandler3:PROC + Line 116: EXTRN pow:PROC + Line 117: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 118: EXTRN ?translationtables@@3PAV?$TAutoGrowArray@VFRemapTablePtr@@PEAUFRemapTable@@@@A:BYTE ; translationtables + Line 119: EXTRN ?vid_rendermode@@3VFIntCVar@@A:BYTE ; vid_rendermode + Line 120: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 121: EXTRN ?con_scale@@3VFIntCVar@@A:BYTE ; con_scale + Line 122: EXTRN ?ConFont@@3PEAVFFont@@EA:QWORD ; ConFont + Line 123: EXTRN ?viewwindowx@@3HA:DWORD ; viewwindowx + Line 124: EXTRN ?viewwindowy@@3HA:DWORD ; viewwindowy + Line 125: EXTRN ?viewwidth@@3HA:DWORD ; viewwidth + Line 126: EXTRN ?viewheight@@3HA:DWORD ; viewheight + Line 127: EXTRN ?SWRenderer@@3PEAUFRenderer@@EA:QWORD ; SWRenderer + Line 128: EXTRN ?ticker@@3VFBoolCVar@@A:BYTE ; ticker + Line 129: EXTRN ?screenblocks@@3VFIntCVar@@A:BYTE ; screenblocks + Line 130: EXTRN ?r_drawvoxels@@3VFBoolCVar@@A:BYTE ; r_drawvoxels + Line 131: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\v_palette.cod (45 hits) + Line 16: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 76: EXTRN atexit:PROC + Line 77: EXTRN qsort:PROC + Line 78: EXTRN atof:PROC + Line 79: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 80: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 81: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 82: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 83: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 84: EXTRN ?OpenMem@FScanner@@QEAAXPEBD0H@Z:PROC ; FScanner::OpenMem + Line 85: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 86: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 87: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 88: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 89: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 90: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 91: EXTRN ??0FFloatCVar@@QEAA@PEBDMIP6AXAEAV0@@Z@Z:PROC ; FFloatCVar::FFloatCVar + Line 92: EXTRN ??0FColorMatcher@@QEAA@XZ:PROC ; FColorMatcher::FColorMatcher + Line 93: EXTRN ?SetPalette@FColorMatcher@@QEAAXPEBI@Z:PROC ; FColorMatcher::SetPalette + Line 94: EXTRN ?R_InitColormaps@@YAXXZ:PROC ; R_InitColormaps + Line 95: EXTRN ?DoBlending_SSE2@@YAXPEBUPalEntry@@PEAU1@HHHHH@Z:PROC ; DoBlending_SSE2 + Line 96: EXTRN ?SetFlash@DFrameBuffer@@QEAA_NUPalEntry@@H@Z:PROC ; DFrameBuffer::SetFlash + Line 97: EXTRN ?V_GetColorFromString@@YAHPEBIPEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColorFromString + Line 98: EXTRN ?V_GetColorStringByName@@YA?AVFString@@PEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColorStringByName + Line 99: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 100: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 101: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 102: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 103: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 104: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 105: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 106: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 107: EXTRN __CxxFrameHandler3:PROC + Line 108: EXTRN __chkstk:PROC + Line 109: EXTRN __vdecl_pow2:PROC + Line 110: EXTRN floorf:PROC + Line 111: EXTRN memcpy:PROC + Line 112: EXTRN memset:PROC + Line 113: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 114: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 115: EXTRN ?BaseBlendR@@3HA:DWORD ; BaseBlendR + Line 116: EXTRN ?BaseBlendG@@3HA:DWORD ; BaseBlendG + Line 117: EXTRN ?BaseBlendB@@3HA:DWORD ; BaseBlendB + Line 118: EXTRN ?BaseBlendA@@3MA:DWORD ; BaseBlendA + Line 119: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\v_pfx.cod (2 hits) + Line 17: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 18: EXTRN memcpy:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\v_text.cod (46 hits) + Line 40: EXTRN ??_EDBrokenLines@@UEAAPEAXI@Z:PROC ; DBrokenLines::`vector deleting destructor' + Line 41: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 42: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 43: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 44: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 45: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 185: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 186: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 187: EXTRN __std_terminate:PROC + Line 188: EXTRN iswspace:PROC + Line 189: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 190: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 191: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 192: EXTRN ??0FString@@QEAA@PEBD_K@Z:PROC ; FString::FString + Line 193: EXTRN ??0FString@@QEAA@D@Z:PROC ; FString::FString + Line 194: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 195: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 196: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 197: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 198: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 199: EXTRN ?AppendCStrPart@FString@@QEAAAEAV1@PEBD_K@Z:PROC ; FString::AppendCStrPart + Line 200: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 201: EXTRN ?GetColorTranslation@FFont@@QEBAPEAUFRemapTable@@W4EColorRange@@PEAUPalEntry@@@Z:PROC ; FFont::GetColorTranslation + Line 202: EXTRN ?StringWidth@FFont@@QEBAHPEBE@Z:PROC ; FFont::StringWidth + Line 203: EXTRN ?V_ParseFontColor@@YA?AW4EColorRange@@AEAPEBEHH@Z:PROC ; V_ParseFontColor + Line 204: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 205: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 206: EXTRN ?DrawTextureParms@DFrameBuffer@@IEAAXPEAVFTexture@@AEAUDrawParms@@@Z:PROC ; DFrameBuffer::DrawTextureParms + Line 207: EXTRN ?SetTextureParms@DFrameBuffer@@QEBA_NPEAUDrawParms@@PEAVFTexture@@NN@Z:PROC ; DFrameBuffer::SetTextureParms + Line 208: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 209: EXTRN ?ThrowAbortException@@YAXW4EVMAbortException@@PEBDZZ:PROC ; ThrowAbortException + Line 210: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 211: EXTRN ?ArraySize@FSerializer@@QEAAIXZ:PROC ; FSerializer::ArraySize + Line 212: EXTRN ?BeginObject@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginObject + Line 213: EXTRN ?EndObject@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndObject + Line 214: EXTRN ?BeginArray@FSerializer@@QEAA_NPEBD@Z:PROC ; FSerializer::BeginArray + Line 215: EXTRN ?EndArray@FSerializer@@QEAAXXZ:PROC ; FSerializer::EndArray + Line 216: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAIPEAI@Z:PROC ; Serialize + Line 217: EXTRN ?Serialize@@YAAEAVFSerializer@@AEAV1@PEBDAEAVFString@@PEAV2@@Z:PROC ; Serialize + Line 218: EXTRN ?ListGetInt@@YAHAEAUVMVa_List@@@Z:PROC ; ListGetInt + Line 219: EXTRN ??$ParseDrawTextureTags@UVa_List@@@DFrameBuffer@@IEBA_NPEAVFTexture@@NNIAEAUVa_List@@PEAUDrawParms@@_N@Z:PROC ; DFrameBuffer::ParseDrawTextureTags + Line 220: EXTRN ??$ParseDrawTextureTags@UVMVa_List@@@DFrameBuffer@@IEBA_NPEAVFTexture@@NNIAEAUVMVa_List@@PEAUDrawParms@@_N@Z:PROC ; DFrameBuffer::ParseDrawTextureTags + Line 221: EXTRN __CxxFrameHandler3:PROC + Line 222: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 223: EXTRN ?NumTextColors@@3HA:DWORD ; NumTextColors + Line 224: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\v_video.cod (88 hits) + Line 74: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 75: EXTRN ?cl_capfps@@3VFBoolCVar@@A:BYTE ; cl_capfps + Line 76: EXTRN ?CleanWidth@@3HA:DWORD ; CleanWidth + Line 77: EXTRN ?CleanHeight@@3HA:DWORD ; CleanHeight + Line 78: EXTRN ?CleanXfac@@3HA:DWORD ; CleanXfac + Line 79: EXTRN ?CleanYfac@@3HA:DWORD ; CleanYfac + Line 80: EXTRN ?CleanWidth_1@@3HA:DWORD ; CleanWidth_1 + Line 81: EXTRN ?CleanHeight_1@@3HA:DWORD ; CleanHeight_1 + Line 82: EXTRN ?CleanXfac_1@@3HA:DWORD ; CleanXfac_1 + Line 83: EXTRN ?CleanYfac_1@@3HA:DWORD ; CleanYfac_1 + Line 84: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 85: EXTRN ?consoleplayer@@3HA:DWORD ; consoleplayer + Line 86: EXTRN ?usergame@@3_NA:BYTE ; usergame + Line 87: EXTRN ?setsizeneeded@@3_NA:BYTE ; setsizeneeded + Line 452: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 453: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 454: EXTRN atexit:PROC + Line 455: EXTRN __std_terminate:PROC + Line 456: EXTRN atoi:PROC + Line 457: EXTRN strtol:PROC + Line 458: EXTRN strtoul:PROC + Line 459: EXTRN strnicmp:PROC + Line 460: EXTRN roundf:PROC + Line 461: EXTRN ?_Xbad_function_call@std@@YAXXZ:PROC ; std::_Xbad_function_call + Line 462: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 463: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 464: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 465: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 466: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 467: EXTRN ?atterm@@YAXP6AXXZ@Z:PROC ; atterm + Line 468: EXTRN ?I_InitGraphics@@YAXXZ:PROC ; I_InitGraphics + Line 469: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 470: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 471: EXTRN ?ResetColors@FBaseCVar@@SAXXZ:PROC ; FBaseCVar::ResetColors + Line 472: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 473: EXTRN ?SetGenericRepDefault@FBoolCVar@@UEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBoolCVar::SetGenericRepDefault + Line 474: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 475: EXTRN ?C_NewModeAdjust@@YAXXZ:PROC ; C_NewModeAdjust + Line 476: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 477: EXTRN ?CheckValue@FArgs@@QEBAPEBDPEBD@Z:PROC ; FArgs::CheckValue + Line 478: EXTRN ?InitPalette@@YAXXZ:PROC ; InitPalette + Line 479: EXTRN ?Pick@FColorMatcher@@QEAAEHHH@Z:PROC ; FColorMatcher::Pick + Line 480: EXTRN ??0DFrameBuffer@@QEAA@HH@Z:PROC ; DFrameBuffer::DFrameBuffer + Line 481: EXTRN ??1DFrameBuffer@@UEAA@XZ:PROC ; DFrameBuffer::~DFrameBuffer + Line 482: EXTRN ?GetPalette@DFrameBuffer@@QEAAPEAUPalEntry@@XZ:PROC ; DFrameBuffer::GetPalette + Line 483: EXTRN ?SetVSync@DFrameBuffer@@UEAAX_N@Z:PROC ; DFrameBuffer::SetVSync + Line 484: EXTRN ?GetCaps@DFrameBuffer@@UEAAIXZ:PROC ; DFrameBuffer::GetCaps + Line 485: EXTRN ?WriteSavePic@DFrameBuffer@@UEAAXPEAVplayer_t@@PEAVFileWriter@@HH@Z:PROC ; DFrameBuffer::WriteSavePic + Line 486: EXTRN ?WipeStartScreen@DFrameBuffer@@UEAAPEAVFTexture@@XZ:PROC ; DFrameBuffer::WipeStartScreen + Line 487: EXTRN ?WipeEndScreen@DFrameBuffer@@UEAAPEAVFTexture@@XZ:PROC ; DFrameBuffer::WipeEndScreen + Line 488: EXTRN ?SetViewportRects@DFrameBuffer@@UEAAXPEAUIntRect@@@Z:PROC ; DFrameBuffer::SetViewportRects + Line 489: EXTRN ?V_ClearFonts@@YAXXZ:PROC ; V_ClearFonts + Line 490: EXTRN ??0FScriptPosition@@QEAA@AEAVFScanner@@@Z:PROC ; FScriptPosition::FScriptPosition + Line 491: EXTRN ?Message@FScriptPosition@@QEBAXHPEBDZZ:PROC ; FScriptPosition::Message + Line 492: EXTRN ??0FMemLump@@QEAA@XZ:PROC ; FMemLump::FMemLump + Line 493: EXTRN ??4FMemLump@@QEAAAEAV0@AEBV0@@Z:PROC ; FMemLump::operator= + Line 494: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 495: EXTRN ?CheckNumForName@FWadCollection@@QEAAHPEBDH@Z:PROC ; FWadCollection::CheckNumForName + Line 496: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 497: EXTRN ?LumpLength@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::LumpLength + Line 498: EXTRN ?GetNumLumps@FWadCollection@@QEBAHXZ:PROC ; FWadCollection::GetNumLumps + Line 499: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 500: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 501: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 502: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 503: EXTRN ?ParseHex@@YAHPEBDPEAUFScriptPosition@@@Z:PROC ; ParseHex + Line 504: EXTRN ?CallScreenSizeChanged@DBaseStatusBar@@QEAAXXZ:PROC ; DBaseStatusBar::CallScreenSizeChanged + Line 505: EXTRN ?ST_LoadCrosshair@@YAX_N@Z:PROC ; ST_LoadCrosshair + Line 506: EXTRN ?I_SetFPSLimit@@YAXH@Z:PROC ; I_SetFPSLimit + Line 507: EXTRN ?SendPitchLimits@player_t@@QEBAXXZ:PROC ; player_t::SendPitchLimits + Line 508: EXTRN ?ViewportIsScaled43@@YA_NXZ:PROC ; ViewportIsScaled43 + Line 509: EXTRN ??_EDDummyFrameBuffer@@UEAAPEAXI@Z:PROC ; DDummyFrameBuffer::`vector deleting destructor' + Line 510: EXTRN __CxxFrameHandler3:PROC + Line 511: EXTRN memset:PROC + Line 512: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 513: EXTRN ?CPU@@3UCPUInfo@@A:BYTE ; CPU + Line 514: EXTRN ?Video@@3PEAVIVideo@@EA:QWORD ; Video + Line 515: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 516: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 517: EXTRN ?ColorMatcher@@3VFColorMatcher@@A:QWORD ; ColorMatcher + Line 518: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 519: EXTRN ?R_OldBlend@@3IA:DWORD ; R_OldBlend + Line 520: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 521: EXTRN ?menu_resolution_custom_width@@3VFIntCVar@@A:BYTE ; menu_resolution_custom_width + Line 522: EXTRN ?menu_resolution_custom_height@@3VFIntCVar@@A:BYTE ; menu_resolution_custom_height + Line 523: EXTRN __ImageBase:BYTE + Line 524: EXTRN _fltused:DWORD + Line 525: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\vmbuilder.cod (70 hits) + Line 753: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 754: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 755: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 756: EXTRN atexit:PROC + Line 757: EXTRN __std_terminate:PROC + Line 758: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 759: EXTRN fclose:PROC + Line 760: EXTRN fflush:PROC + Line 761: EXTRN fopen:PROC + Line 762: EXTRN __stdio_common_vfprintf:PROC + Line 763: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 764: EXTRN ?_Xbad_function_call@std@@YAXXZ:PROC ; std::_Xbad_function_call + Line 765: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 766: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 767: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 768: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 769: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 770: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 771: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 772: EXTRN ?SuperFastHash@@YAIPEBD_K@Z:PROC ; SuperFastHash + Line 773: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 774: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 775: EXTRN ?FreeAllBlocks@FMemArena@@QEAAXXZ:PROC ; FMemArena::FreeAllBlocks + Line 776: EXTRN ?GetImplicitArgs@PFunction@@QEAAHXZ:PROC ; PFunction::GetImplicitArgs + Line 777: EXTRN ?CreateRegUse@VMFunction@@IEAAXXZ:PROC ; VMFunction::CreateRegUse + Line 778: EXTRN ??0VMScriptFunction@@QEAA@VFName@@@Z:PROC ; VMScriptFunction::VMScriptFunction + Line 779: EXTRN ?Alloc@VMScriptFunction@@QEAAXHHHHHH@Z:PROC ; VMScriptFunction::Alloc + Line 780: EXTRN ??0ExpEmit@@QEAA@PEAVVMFunctionBuilder@@HH@Z:PROC ; ExpEmit::ExpEmit + Line 781: EXTRN ?Free@ExpEmit@@QEAAXPEAVVMFunctionBuilder@@@Z:PROC ; ExpEmit::Free + Line 782: EXTRN ?DumpFunction@@YAXPEAU_iobuf@@PEAVVMScriptFunction@@PEBDH@Z:PROC ; DumpFunction + Line 783: EXTRN ?EncodeRegType@@YAHUExpEmit@@@Z:PROC ; EncodeRegType + Line 784: EXTRN ??0FScriptPosition@@QEAA@AEBU0@@Z:PROC ; FScriptPosition::FScriptPosition + Line 785: EXTRN ?Message@FScriptPosition@@QEBAXHPEBDZZ:PROC ; FScriptPosition::Message + Line 786: EXTRN ?NewPrototype@@YAPEAVPPrototype@@AEBV?$TArray@PEAVPType@@PEAV1@@@0@Z:PROC ; NewPrototype + Line 787: EXTRN ??0FCompileContext@@QEAA@PEAVPNamespace@@PEAVPFunction@@PEAVPPrototype@@_NHHHAEBUVersionInfo@@@Z:PROC ; FCompileContext::FCompileContext + Line 788: EXTRN ?Resolve@FxExpression@@UEAAPEAV1@AEAUFCompileContext@@@Z:PROC ; FxExpression::Resolve + Line 789: EXTRN ?isConstant@FxExpression@@UEBA_NXZ:PROC ; FxExpression::isConstant + Line 790: EXTRN ?RequestAddress@FxExpression@@UEAA_NAEAUFCompileContext@@PEA_N@Z:PROC ; FxExpression::RequestAddress + Line 791: EXTRN ?ReturnProto@FxExpression@@UEAAPEAVPPrototype@@XZ:PROC ; FxExpression::ReturnProto + Line 792: EXTRN ?GetDirectFunction@FxExpression@@UEAAPEAVVMFunction@@PEAVPFunction@@AEBUVersionInfo@@@Z:PROC ; FxExpression::GetDirectFunction + Line 793: EXTRN ?Emit@FxExpression@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxExpression::Emit + Line 794: EXTRN ?EmitCompare@FxExpression@@UEAAXPEAVVMFunctionBuilder@@_NAEAV?$TArray@_K_K@@2@Z:PROC ; FxExpression::EmitCompare + Line 795: EXTRN ??_EFxExpression@@UEAAPEAXI@Z:PROC ; FxExpression::`vector deleting destructor' + Line 796: EXTRN ?Resolve@FxSequence@@UEAAPEAVFxExpression@@AEAUFCompileContext@@@Z:PROC ; FxSequence::Resolve + Line 797: EXTRN ?Emit@FxSequence@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxSequence::Emit + Line 798: EXTRN ?GetDirectFunction@FxSequence@@UEAAPEAVVMFunction@@PEAVPFunction@@AEBUVersionInfo@@@Z:PROC ; FxSequence::GetDirectFunction + Line 799: EXTRN ?CheckReturn@FxSequence@@UEAA_NXZ:PROC ; FxSequence::CheckReturn + Line 800: EXTRN ??_EFxSequence@@UEAAPEAXI@Z:PROC ; FxSequence::`vector deleting destructor' + Line 801: EXTRN ?Resolve@FxCompoundStatement@@UEAAPEAVFxExpression@@AEAUFCompileContext@@@Z:PROC ; FxCompoundStatement::Resolve + Line 802: EXTRN ?Emit@FxCompoundStatement@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxCompoundStatement::Emit + Line 803: EXTRN ??_EFxCompoundStatement@@UEAAPEAXI@Z:PROC ; FxCompoundStatement::`vector deleting destructor' + Line 804: EXTRN ??0FxReturnStatement@@QEAA@PEAVFxExpression@@AEBUFScriptPosition@@@Z:PROC ; FxReturnStatement::FxReturnStatement + Line 805: EXTRN ??0FxLocalVariableDeclaration@@QEAA@PEAVPType@@VFName@@PEAVFxExpression@@HAEBUFScriptPosition@@@Z:PROC ; FxLocalVariableDeclaration::FxLocalVariableDeclaration + Line 806: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 807: EXTRN ?JitDumpLog@@YAXPEAU_iobuf@@PEAVVMScriptFunction@@@Z:PROC ; JitDumpLog + Line 808: EXTRN _CxxThrowException:PROC + Line 809: EXTRN __CxxFrameHandler3:PROC + Line 810: EXTRN memcpy:PROC + Line 811: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 812: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 813: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 814: EXTRN ?ClassDataAllocator@@3VFMemArena@@A:BYTE ; ClassDataAllocator + Line 815: EXTRN ?AllFunctions@VMFunction@@2V?$TArray@PEAVVMFunction@@PEAV1@@@A:BYTE ; VMFunction::AllFunctions + Line 816: EXTRN ?ErrorCounter@FScriptPosition@@2HA:DWORD ; FScriptPosition::ErrorCounter + Line 817: EXTRN ?StrictErrors@FScriptPosition@@2_NA:BYTE ; FScriptPosition::StrictErrors + Line 818: EXTRN ?FxAlloc@@3VFMemArena@@A:BYTE ; FxAlloc + Line 819: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 820: EXTRN ?vm_jit@@3VFBoolCVar@@A:BYTE ; vm_jit + Line 821: EXTRN __ImageBase:BYTE + Line 822: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\vmdisasm.cod (5 hits) + Line 1229: EXTRN __stdio_common_vfprintf:PROC + Line 1230: EXTRN mysnprintf:PROC + Line 1231: EXTRN ?VPrintf@@YAHHPEBDPEAD@Z:PROC ; VPrintf + Line 1232: EXTRN __ImageBase:BYTE + Line 1233: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\vmexec.cod (56 hits) + Line 136: EXTRN stricmp:PROC + Line 137: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 138: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 139: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 140: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 141: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 142: EXTRN ??HFString@@QEBA?AV0@AEBV0@@Z:PROC ; FString::operator+ + Line 143: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 144: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 145: EXTRN ?ToLong@FString@@QEBAJH@Z:PROC ; FString::ToLong + Line 146: EXTRN ?ToDouble@FString@@QEBANXZ:PROC ; FString::ToDouble + Line 147: EXTRN c_asin:PROC + Line 148: EXTRN c_acos:PROC + Line 149: EXTRN c_atan:PROC + Line 150: EXTRN c_atan2:PROC + Line 151: EXTRN c_tan:PROC + Line 152: EXTRN c_sqrt:PROC + Line 153: EXTRN c_sinh:PROC + Line 154: EXTRN c_cosh:PROC + Line 155: EXTRN c_tanh:PROC + Line 156: EXTRN c_exp:PROC + Line 157: EXTRN c_log:PROC + Line 158: EXTRN c_log10:PROC + Line 159: EXTRN c_pow:PROC + Line 160: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 161: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 162: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 163: EXTRN ?V_GetColor@@YAHPEBIPEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColor + Line 164: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 165: EXTRN ?ValidateCall@FScopeBarrier@@SAXPEAVPClass@@PEAVVMFunction@@H@Z:PROC ; FScopeBarrier::ValidateCall + Line 166: EXTRN ?MaybePrintMessage@CVMAbortException@@QEAAXXZ:PROC ; CVMAbortException::MaybePrintMessage + Line 167: EXTRN ?ThrowAbortException@@YAXW4EVMAbortException@@PEBDZZ:PROC ; ThrowAbortException + Line 168: EXTRN ??0VMFrameStack@@QEAA@XZ:PROC ; VMFrameStack::VMFrameStack + Line 169: EXTRN ??1VMFrameStack@@QEAA@XZ:PROC ; VMFrameStack::~VMFrameStack + Line 170: EXTRN ?AllocFrame@VMFrameStack@@QEAAPEAUVMFrame@@PEAVVMScriptFunction@@@Z:PROC ; VMFrameStack::AllocFrame + Line 171: EXTRN ?PopFrame@VMFrameStack@@QEAAPEAUVMFrame@@XZ:PROC ; VMFrameStack::PopFrame + Line 172: EXTRN ?PCToLine@VMScriptFunction@@QEAAHPEBTVMOP@@@Z:PROC ; VMScriptFunction::PCToLine + Line 173: EXTRN _wassert:PROC + Line 174: EXTRN __tlregdtor:PROC + Line 175: EXTRN _CxxThrowException:PROC + Line 176: EXTRN __CxxFrameHandler3:PROC + Line 177: EXTRN ceil:PROC + Line 178: EXTRN floor:PROC + Line 179: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 180: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 181: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 182: EXTRN ?State@GC@@3W4EGCState@1@A:DWORD ; GC::State + Line 183: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 184: EXTRN ?S_sfx@@3V?$TArray@Usfxinfo_t@@U1@@@A:BYTE ; S_sfx + Line 185: EXTRN ?sprites@@3V?$TArray@Uspritedef_t@@U1@@@A:BYTE ; sprites + Line 186: EXTRN ?stacktrace@CVMAbortException@@2VFString@@A:QWORD ; CVMAbortException::stacktrace + Line 187: EXTRN ?VMCycles@@3PAVcycle_t@@A:BYTE ; VMCycles + Line 188: EXTRN ?VMCalls@@3PAHA:BYTE ; VMCalls + Line 189: EXTRN __ImageBase:BYTE + Line 190: EXTRN _fltused:DWORD + Line 191: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\vmframe.cod (50 hits) + Line 22: EXTRN ??_EStat_VM@@UEAAPEAXI@Z:PROC ; Stat_VM::`vector deleting destructor' + Line 159: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 160: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 161: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 162: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 163: EXTRN atexit:PROC + Line 164: EXTRN __std_terminate:PROC + Line 165: EXTRN strncpy:PROC + Line 166: EXTRN stricmp:PROC + Line 167: EXTRN __std_exception_copy:PROC + Line 168: EXTRN __std_exception_destroy:PROC + Line 169: EXTRN ??_Eexception@std@@UEAAPEAXI@Z:PROC ; std::exception::`vector deleting destructor' + Line 170: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 171: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 172: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 173: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 174: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 175: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 176: EXTRN ??0FStringf@@QEAA@PEBDZZ:PROC ; FStringf::FStringf + Line 177: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 178: EXTRN mysnprintf:PROC + Line 179: EXTRN myvsnprintf:PROC + Line 180: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 181: EXTRN ??0FStat@@QEAA@PEBD@Z:PROC ; FStat::FStat + Line 182: EXTRN ??1FStat@@UEAA@XZ:PROC ; FStat::~FStat + Line 183: EXTRN ?argc@FCommandLine@@QEAAHXZ:PROC ; FCommandLine::argc + Line 184: EXTRN ??AFCommandLine@@QEAAPEADH@Z:PROC ; FCommandLine::operator[] + Line 185: EXTRN ??0FConsoleCommand@@QEAA@PEBDP6AXAEAVFCommandLine@@PEAVAActor@@H@Z@Z:PROC ; FConsoleCommand::FConsoleCommand + Line 186: EXTRN ??1FConsoleCommand@@UEAA@XZ:PROC ; FConsoleCommand::~FConsoleCommand + Line 187: EXTRN ??_ECDoomError@@UEAAPEAXI@Z:PROC ; CDoomError::`vector deleting destructor' + Line 188: EXTRN ??_ECVMAbortException@@UEAAPEAXI@Z:PROC ; CVMAbortException::`vector deleting destructor' + Line 189: EXTRN ??_EVMFunction@@UEAAPEAXI@Z:PROC ; VMFunction::`vector deleting destructor' + Line 190: EXTRN ?FStringFormat@@YA?AVFString@@PEAUVMValue@@HPEAUVMReturn@@HH@Z:PROC ; FStringFormat + Line 191: EXTRN ?VMSelectEngine@@YAXW4EVMEngine@@@Z:PROC ; VMSelectEngine + Line 192: EXTRN ??_EVMScriptFunction@@UEAAPEAXI@Z:PROC ; VMScriptFunction::`vector deleting destructor' + Line 193: EXTRN ?JitCompile@@YAP6AHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@ZPEAVVMScriptFunction@@@Z:PROC ; JitCompile + Line 194: EXTRN ?JitCaptureStackTrace@@YA?AVFString@@H_N@Z:PROC ; JitCaptureStackTrace + Line 195: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 196: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 197: EXTRN _CxxThrowException:PROC + Line 198: EXTRN __CxxFrameHandler3:PROC + Line 199: EXTRN memmove:PROC + Line 200: EXTRN memset:PROC + Line 201: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 202: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 203: EXTRN ?ClassDataAllocator@@3VFMemArena@@A:BYTE ; ClassDataAllocator + Line 204: EXTRN ?PerfToMillisec@@3NA:QWORD ; PerfToMillisec + Line 205: EXTRN ?VMExec@@3P6AHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@ZEA:QWORD ; VMExec + Line 206: EXTRN __ImageBase:BYTE + Line 207: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\vmiterators.cod (32 hits) + Line 100: EXTRN ??_EDThinkerIterator@@UEAAPEAXI@Z:PROC ; DThinkerIterator::`vector deleting destructor' + Line 101: EXTRN ??_EDBlockLinesIterator@@UEAAPEAXI@Z:PROC ; DBlockLinesIterator::`vector deleting destructor' + Line 102: EXTRN ??_EDBlockThingsIterator@@UEAAPEAXI@Z:PROC ; DBlockThingsIterator::`vector deleting destructor' + Line 103: EXTRN ??_EDSectorTagIterator@@UEAAPEAXI@Z:PROC ; DSectorTagIterator::`vector deleting destructor' + Line 104: EXTRN ??_EDLineIdIterator@@UEAAPEAXI@Z:PROC ; DLineIdIterator::`vector deleting destructor' + Line 105: EXTRN ??_EDActorIterator@@UEAAPEAXI@Z:PROC ; DActorIterator::`vector deleting destructor' + Line 106: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 107: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 108: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 109: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 110: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 408: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 409: EXTRN __std_terminate:PROC + Line 410: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 411: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 412: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 413: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 414: EXTRN ??0FThinkerIterator@@QEAA@PEAUFLevelLocals@@PEBVPClass@@H@Z:PROC ; FThinkerIterator::FThinkerIterator + Line 415: EXTRN ?Next@FThinkerIterator@@QEAAPEAVDThinker@@_N@Z:PROC ; FThinkerIterator::Next + Line 416: EXTRN ?Reinit@FThinkerIterator@@QEAAXXZ:PROC ; FThinkerIterator::Reinit + Line 417: EXTRN ?Next@FSectorTagIterator@@QEAAHXZ:PROC ; FSectorTagIterator::Next + Line 418: EXTRN ?NextCompat@FSectorTagIterator@@QEAAH_NH@Z:PROC ; FSectorTagIterator::NextCompat + Line 419: EXTRN ?Next@FLineIdIterator@@QEAAHXZ:PROC ; FLineIdIterator::Next + Line 420: EXTRN ??0FMultiBlockLinesIterator@@QEAA@AEAUFPortalGroupArray@@PEAVAActor@@N@Z:PROC ; FMultiBlockLinesIterator::FMultiBlockLinesIterator + Line 421: EXTRN ??0FMultiBlockLinesIterator@@QEAA@AEAUFPortalGroupArray@@PEAUFLevelLocals@@NNNNNPEAUsector_t@@@Z:PROC ; FMultiBlockLinesIterator::FMultiBlockLinesIterator + Line 422: EXTRN ?Next@FMultiBlockLinesIterator@@QEAA_NPEAUCheckResult@1@@Z:PROC ; FMultiBlockLinesIterator::Next + Line 423: EXTRN ??0FMultiBlockThingsIterator@@QEAA@AEAUFPortalGroupArray@@PEAVAActor@@N_N@Z:PROC ; FMultiBlockThingsIterator::FMultiBlockThingsIterator + Line 424: EXTRN ??0FMultiBlockThingsIterator@@QEAA@AEAUFPortalGroupArray@@PEAUFLevelLocals@@NNNNN_NPEAUsector_t@@@Z:PROC ; FMultiBlockThingsIterator::FMultiBlockThingsIterator + Line 425: EXTRN ?Next@FMultiBlockThingsIterator@@QEAA_NPEAUCheckResult@1@@Z:PROC ; FMultiBlockThingsIterator::Next + Line 426: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 427: EXTRN __CxxFrameHandler3:PROC + Line 428: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\vmthunks.cod (139 hits) + Line 942: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 943: EXTRN ?StatusBar@@3PEAVDBaseStatusBar@@EA:QWORD ; StatusBar + Line 944: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 945: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 946: EXTRN ?am_showmaplabel@@3VFIntCVar@@A:BYTE ; am_showmaplabel + Line 947: EXTRN ?setsizeneeded@@3_NA:BYTE ; setsizeneeded + Line 948: EXTRN ?ACS_GlobalVars@@3U?$BoundsCheckingArray@H$0EA@@@A:BYTE ; ACS_GlobalVars + Line 949: EXTRN ?ACS_GlobalArrays@@3U?$BoundsCheckingArray@V?$TMap@HHU?$THashTraits@H@@UInitIntToZero@@@@$0EA@@@A:BYTE ; ACS_GlobalArrays + Line 950: EXTRN ?level@@3UFLevelLocals@@A:BYTE ; level + Line 951: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 952: EXTRN ?GStrings@@3VFStringTable@@A:BYTE ; GStrings + Line 3835: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 3836: EXTRN __std_terminate:PROC + Line 3837: EXTRN __stdio_common_vsprintf:PROC + Line 3838: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 3839: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 3840: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 3841: EXTRN ??0FString@@QEAA@D@Z:PROC ; FString::FString + Line 3842: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 3843: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 3844: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 3845: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 3846: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 3847: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 3848: EXTRN ?Left@FString@@QEBA?AV1@_K@Z:PROC ; FString::Left + Line 3849: EXTRN ?Mid@FString@@QEBA?AV1@_K0@Z:PROC ; FString::Mid + Line 3850: EXTRN ?IndexOf@FString@@QEBAJAEBV1@J@Z:PROC ; FString::IndexOf + Line 3851: EXTRN ?LastIndexOfBroken@FString@@QEBAJAEBV1@J@Z:PROC ; FString::LastIndexOfBroken + Line 3852: EXTRN ?LastIndexOf@FString@@QEBAJAEBV1@J@Z:PROC ; FString::LastIndexOf + Line 3853: EXTRN ?ToUpper@FString@@QEAAXXZ:PROC ; FString::ToUpper + Line 3854: EXTRN ?ToLower@FString@@QEAAXXZ:PROC ; FString::ToLower + Line 3855: EXTRN ?Substitute@FString@@QEAAXAEBV1@0@Z:PROC ; FString::Substitute + Line 3856: EXTRN ?ToLong@FString@@QEBAJH@Z:PROC ; FString::ToLong + Line 3857: EXTRN ?ToDouble@FString@@QEBANXZ:PROC ; FString::ToDouble + Line 3858: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 3859: EXTRN ?Remove@FString@@QEAAX_K0@Z:PROC ; FString::Remove + Line 3860: EXTRN ?Split@FString@@QEBAXAEAV?$TArray@VFString@@V1@@@AEBV1@W4EmptyTokenType@1@@Z:PROC ; FString::Split + Line 3861: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 3862: EXTRN c_atan2:PROC + Line 3863: EXTRN c_sqrt:PROC + Line 3864: EXTRN ?strbin1@@YA?AVFString@@PEBD@Z:PROC ; strbin1 + Line 3865: EXTRN ?ThrowAbortException@@YAXW4EVMAbortException@@PEBDZZ:PROC ; ThrowAbortException + Line 3866: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 3867: EXTRN ?Barrier@GC@@YAXPEAVDObject@@0@Z:PROC ; GC::Barrier + Line 3868: EXTRN ?CheckOverlap@sector_t@@QEAAXXZ:PROC ; sector_t::CheckOverlap + Line 3869: EXTRN ?FindLowestFloorSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindLowestFloorSurrounding + Line 3870: EXTRN ?FindHighestFloorSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindHighestFloorSurrounding + Line 3871: EXTRN ?FindNextHighestFloor@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindNextHighestFloor + Line 3872: EXTRN ?FindNextLowestFloor@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindNextLowestFloor + Line 3873: EXTRN ?FindLowestCeilingSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindLowestCeilingSurrounding + Line 3874: EXTRN ?FindHighestCeilingSurrounding@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindHighestCeilingSurrounding + Line 3875: EXTRN ?FindNextLowestCeiling@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindNextLowestCeiling + Line 3876: EXTRN ?FindNextHighestCeiling@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindNextHighestCeiling + Line 3877: EXTRN ?FindMinSurroundingLight@@YAHPEBUsector_t@@H@Z:PROC ; FindMinSurroundingLight + Line 3878: EXTRN ?FindHighestFloorPoint@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindHighestFloorPoint + Line 3879: EXTRN ?FindShortestTextureAround@@YANPEAUsector_t@@@Z:PROC ; FindShortestTextureAround + Line 3880: EXTRN ?FindShortestUpperAround@@YANPEAUsector_t@@@Z:PROC ; FindShortestUpperAround + Line 3881: EXTRN ?FindModelFloorSector@@YAPEAUsector_t@@PEAU1@N@Z:PROC ; FindModelFloorSector + Line 3882: EXTRN ?FindModelCeilingSector@@YAPEAUsector_t@@PEAU1@N@Z:PROC ; FindModelCeilingSector + Line 3883: EXTRN ?FindLowestCeilingPoint@@YANPEBUsector_t@@PEAPEAUvertex_t@@@Z:PROC ; FindLowestCeilingPoint + Line 3884: EXTRN ?NextHighestCeilingAt@@YANPEAUsector_t@@NNNNHPEAPEAU1@PEAPEAUF3DFloor@@@Z:PROC ; NextHighestCeilingAt + Line 3885: EXTRN ?NextLowestFloorAt@@YANPEAUsector_t@@NNNHNPEAPEAU1@PEAPEAUF3DFloor@@@Z:PROC ; NextLowestFloorAt + Line 3886: EXTRN ?RemoveForceField@@YAXPEAUsector_t@@@Z:PROC ; RemoveForceField + Line 3887: EXTRN ?PlaneMoving@@YAHPEAUsector_t@@H@Z:PROC ; PlaneMoving + Line 3888: EXTRN ?TransferSpecial@@YAXPEAUsector_t@@0@Z:PROC ; TransferSpecial + Line 3889: EXTRN ?GetSpecial@@YAXPEAUsector_t@@PEAUsecspecial_t@@@Z:PROC ; GetSpecial + Line 3890: EXTRN ?SetSpecial@@YAXPEAUsector_t@@PEBUsecspecial_t@@@Z:PROC ; SetSpecial + Line 3891: EXTRN ?GetTerrain@@YAHPEBUsector_t@@H@Z:PROC ; GetTerrain + Line 3892: EXTRN ?CheckPortalPlane@@YAXPEAUsector_t@@H@Z:PROC ; CheckPortalPlane + Line 3893: EXTRN ?AdjustFloorClip@@YAXPEBUsector_t@@@Z:PROC ; AdjustFloorClip + Line 3894: EXTRN ?SetColor@@YAXPEAUsector_t@@HH@Z:PROC ; SetColor + Line 3895: EXTRN ?SetFade@@YAXPEAUsector_t@@H@Z:PROC ; SetFade + Line 3896: EXTRN ?GetFloorLight@@YAHPEBUsector_t@@@Z:PROC ; GetFloorLight + Line 3897: EXTRN ?GetCeilingLight@@YAHPEBUsector_t@@@Z:PROC ; GetCeilingLight + Line 3898: EXTRN ?GetFriction@@YANPEBUsector_t@@HPEAN@Z:PROC ; GetFriction + Line 3899: EXTRN ?HighestCeilingAt@@YANPEAUsector_t@@NNPEAPEAU1@@Z:PROC ; HighestCeilingAt + Line 3900: EXTRN ?LowestFloorAt@@YANPEAUsector_t@@NNPEAPEAU1@@Z:PROC ; LowestFloorAt + Line 3901: EXTRN ?FindClusterInfo@@YAPEAUcluster_info_t@@H@Z:PROC ; FindClusterInfo + Line 3902: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 3903: EXTRN _localtime64:PROC + Line 3904: EXTRN _time64:PROC + Line 3905: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 3906: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 3907: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 3908: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 3909: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 3910: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 3911: EXTRN ?LookupString@FBehaviorContainer@@QEAAPEBDI@Z:PROC ; FBehaviorContainer::LookupString + Line 3912: EXTRN ?S_FindEnvironment@@YAPEAUReverbContainer@@PEBD@Z:PROC ; S_FindEnvironment + Line 3913: EXTRN ?S_FindEnvironment@@YAPEAUReverbContainer@@H@Z:PROC ; S_FindEnvironment + Line 3914: EXTRN ?LocateWeapon@FWeaponSlots@@QEAA_NPEAVPClassActor@@QEAH1@Z:PROC ; FWeaponSlots::LocateWeapon + Line 3915: EXTRN ?SetupWeaponSlots@FWeaponSlots@@SAXPEAVAActor@@@Z:PROC ; FWeaponSlots::SetupWeaponSlots + Line 3916: EXTRN ?GetPortalOffsetPosition@FLevelLocals@@QEAA?AU?$TVector2@N@@NNNN@Z:PROC ; FLevelLocals::GetPortalOffsetPosition + Line 3917: EXTRN ?ReplaceTextures@FLevelLocals@@QEAAXPEBD0H@Z:PROC ; FLevelLocals::ReplaceTextures + Line 3918: EXTRN ?PointInSubsector@FLevelLocals@@AEAAPEAUsubsector_t@@NN@Z:PROC ; FLevelLocals::PointInSubsector + Line 3919: EXTRN ?FindFont@FFont@@SAPEAV1@VFName@@@Z:PROC ; FFont::FindFont + Line 3920: EXTRN ?StringWidth@FFont@@QEBAHPEBE@Z:PROC ; FFont::StringWidth + Line 3921: EXTRN ?V_FindFontColor@@YA?AW4EColorRange@@VFName@@@Z:PROC ; V_FindFontColor + Line 3922: EXTRN ?V_GetFont@@YAPEAVFFont@@PEBD@Z:PROC ; V_GetFont + Line 3923: EXTRN ??RFStringTable@@QEBAPEBDPEBD@Z:PROC ; FStringTable::operator() + Line 3924: EXTRN ?SetState@FMugShot@@QEAA_NPEBD_N1@Z:PROC ; FMugShot::SetState + Line 3925: EXTRN ?GetFace@FMugShot@@QEAAPEAVFTexture@@PEAVplayer_t@@PEBDHW4StateFlags@1@@Z:PROC ; FMugShot::GetFace + Line 3926: EXTRN ?StaticType@DHUDFont@@UEBAPEAVPClass@@XZ:PROC ; DHUDFont::StaticType + Line 3927: EXTRN ??_EDHUDFont@@UEAAPEAXI@Z:PROC ; DHUDFont::`vector deleting destructor' + Line 3928: EXTRN ?SetSize@DBaseStatusBar@@QEAAXHHHHH@Z:PROC ; DBaseStatusBar::SetSize + Line 3929: EXTRN ?AttachMessage@DBaseStatusBar@@QEAAXPEAVDHUDMessageBase@@IH@Z:PROC ; DBaseStatusBar::AttachMessage + Line 3930: EXTRN ?DetachMessage@DBaseStatusBar@@QEAAPEAVDHUDMessageBase@@PEAV2@@Z:PROC ; DBaseStatusBar::DetachMessage + Line 3931: EXTRN ?DetachMessage@DBaseStatusBar@@QEAAPEAVDHUDMessageBase@@I@Z:PROC ; DBaseStatusBar::DetachMessage + Line 3932: EXTRN ?DetachAllMessages@DBaseStatusBar@@QEAAXXZ:PROC ; DBaseStatusBar::DetachAllMessages + Line 3933: EXTRN ?GetHUDScale@DBaseStatusBar@@QEBA?AU?$TVector2@N@@XZ:PROC ; DBaseStatusBar::GetHUDScale + Line 3934: EXTRN ?DrawGraphic@DBaseStatusBar@@QEAAXVFTextureID@@NNHNNNNN@Z:PROC ; DBaseStatusBar::DrawGraphic + Line 3935: EXTRN ?TransformRect@DBaseStatusBar@@QEAAXAEAN000H@Z:PROC ; DBaseStatusBar::TransformRect + Line 3936: EXTRN ?Fill@DBaseStatusBar@@QEAAXUPalEntry@@NNNNH@Z:PROC ; DBaseStatusBar::Fill + Line 3937: EXTRN ?SetClipRect@DBaseStatusBar@@QEAAXNNNNH@Z:PROC ; DBaseStatusBar::SetClipRect + Line 3938: EXTRN ?BeginStatusBar@DBaseStatusBar@@QEAAXHHH_N@Z:PROC ; DBaseStatusBar::BeginStatusBar + Line 3939: EXTRN ?BeginHUD@DBaseStatusBar@@QEAAXHHN_N@Z:PROC ; DBaseStatusBar::BeginHUD + Line 3940: EXTRN ?StatusbarToRealCoords@DBaseStatusBar@@QEBAXAEAN000@Z:PROC ; DBaseStatusBar::StatusbarToRealCoords + Line 3941: EXTRN ?GetInventoryIcon@@YAHPEAVAActor@@IPEAH@Z:PROC ; GetInventoryIcon + Line 3942: EXTRN ??0DSpotState@@QEAA@XZ:PROC ; DSpotState::DSpotState + Line 3943: EXTRN ?AddSpot@DSpotState@@QEAA_NPEAVAActor@@@Z:PROC ; DSpotState::AddSpot + Line 3944: EXTRN ?RemoveSpot@DSpotState@@QEAA_NPEAVAActor@@@Z:PROC ; DSpotState::RemoveSpot + Line 3945: EXTRN ?GetNextInList@DSpotState@@QEAAPEAVAActor@@PEAVPClassActor@@H@Z:PROC ; DSpotState::GetNextInList + Line 3946: EXTRN ?GetSpotWithMinMaxDistance@DSpotState@@QEAAPEAVAActor@@PEAVPClassActor@@NNNN@Z:PROC ; DSpotState::GetSpotWithMinMaxDistance + Line 3947: EXTRN ?GetRandomSpot@DSpotState@@QEAAPEAVAActor@@PEAVPClassActor@@_N@Z:PROC ; DSpotState::GetRandomSpot + Line 3948: EXTRN ?GetUDMFInt@@YAHPEAUFLevelLocals@@HHVFName@@@Z:PROC ; GetUDMFInt + Line 3949: EXTRN ?GetUDMFFloat@@YANPEAUFLevelLocals@@HHVFName@@@Z:PROC ; GetUDMFFloat + Line 3950: EXTRN ?GetUDMFString@@YA?AVFString@@PEAUFLevelLocals@@HHVFName@@@Z:PROC ; GetUDMFString + Line 3951: EXTRN ?Net_GetLatency@@YAHPEAH0@Z:PROC ; Net_GetLatency + Line 3952: EXTRN ?SetCameraToTexture@@YAXPEAVAActor@@AEBVFString@@N@Z:PROC ; SetCameraToTexture + Line 3953: EXTRN ?GetBottomAlignOffset@@YANPEAVFFont@@H@Z:PROC ; GetBottomAlignOffset + Line 3954: EXTRN ?SBar_DrawString@@YAXPEAVDBaseStatusBar@@PEAVDHUDFont@@AEBVFString@@NNHHNHH@Z:PROC ; SBar_DrawString + Line 3955: EXTRN ?FormatNumber@@YAXHHHHAEBVFString@@PEAV1@@Z:PROC ; FormatNumber + Line 3956: EXTRN ?IsPointInMap@@YAHPEAUFLevelLocals@@NNN@Z:PROC ; IsPointInMap + Line 3957: EXTRN __CxxFrameHandler3:PROC + Line 3958: EXTRN ?State@GC@@3W4EGCState@1@A:DWORD ; GC::State + Line 3959: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 3960: EXTRN ?RegistrationInfo@DHUDFont@@2UClassReg@@A:BYTE ; DHUDFont::RegistrationInfo + Line 3961: EXTRN ?RegistrationInfo@DSpotState@@2UClassReg@@A:BYTE ; DSpotState::RegistrationInfo + Line 3962: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\vmthunks_actors.cod (109 hits) + Line 850: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 851: EXTRN ?mStringPropertyData@AActor@@2VFSharedStringArena@@A:BYTE ; AActor::mStringPropertyData + Line 852: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 853: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 854: EXTRN ?spechit@@3V?$TArray@Uspechit_t@@U1@@@A:BYTE ; spechit + Line 855: EXTRN ?Terrains@@3V?$TArray@UFTerrainDef@@U1@@@A:BYTE ; Terrains + Line 856: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 857: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 858: EXTRN ?fasttrig@@3UFFastTrig@@A:BYTE ; fasttrig + Line 3957: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 3958: EXTRN __std_terminate:PROC + Line 3959: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 3960: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 3961: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 3962: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 3963: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 3964: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 3965: EXTRN c_atan2:PROC + Line 3966: EXTRN c_sqrt:PROC + Line 3967: EXTRN ?sin@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::sin + Line 3968: EXTRN ?cos@FFastTrig@@QEAANI@Z:PROC ; FFastTrig::cos + Line 3969: EXTRN ?Alloc@FSharedStringArena@@QEAAPEAVFString@@AEBV2@@Z:PROC ; FSharedStringArena::Alloc + Line 3970: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 3971: EXTRN ?P_CheckFor3DFloorHit@@YA_NPEAVAActor@@N_N@Z:PROC ; P_CheckFor3DFloorHit + Line 3972: EXTRN ?P_CheckFor3DCeilingHit@@YA_NPEAVAActor@@N_N@Z:PROC ; P_CheckFor3DCeilingHit + Line 3973: EXTRN ?StaticPointerSubstitution@DObject@@SAXPEAVAActor@@0@Z:PROC ; DObject::StaticPointerSubstitution + Line 3974: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 3975: EXTRN ?P_GetThingFloorType@@YAHPEAVAActor@@@Z:PROC ; P_GetThingFloorType + Line 3976: EXTRN ?P_GetSpawnableType@@YAPEAVPClassActor@@H@Z:PROC ; P_GetSpawnableType + Line 3977: EXTRN ?P_RoughMonsterSearch@@YAPEAVAActor@@PEAV1@H_N1@Z:PROC ; P_RoughMonsterSearch + Line 3978: EXTRN ?P_TestMobjLocation@@YAHPEAVAActor@@@Z:PROC ; P_TestMobjLocation + Line 3979: EXTRN ?P_TestMobjZ@@YAHPEAVAActor@@_NPEAPEAV1@@Z:PROC ; P_TestMobjZ + Line 3980: EXTRN ?P_CheckPosition@@YA_NPEAVAActor@@AEBU?$TVector2@N@@_N@Z:PROC ; P_CheckPosition + Line 3981: EXTRN ?P_CheckPosition@@YA_NPEAVAActor@@AEBU?$TVector2@N@@AEAUFCheckPosition@@_N@Z:PROC ; P_CheckPosition + Line 3982: EXTRN ?P_TryMove@@YA_NPEAVAActor@@AEBU?$TVector2@N@@HPEBUsecplane_t@@AEAUFCheckPosition@@_N@Z:PROC ; P_TryMove + Line 3983: EXTRN ?P_TryMove@@YA_NPEAVAActor@@AEBU?$TVector2@N@@HPEBUsecplane_t@@_N@Z:PROC ; P_TryMove + Line 3984: EXTRN ?P_CheckMove@@YA_NPEAVAActor@@AEBU?$TVector2@N@@AEAUFCheckPosition@@H@Z:PROC ; P_CheckMove + Line 3985: EXTRN ?P_CheckMove@@YA_NPEAVAActor@@AEBU?$TVector2@N@@H@Z:PROC ; P_CheckMove + Line 3986: EXTRN ?P_TeleportMove@@YA_NPEAVAActor@@AEBU?$TVector3@N@@_N2@Z:PROC ; P_TeleportMove + Line 3987: EXTRN ?P_CheckSight@@YAHPEAVAActor@@0H@Z:PROC ; P_CheckSight + Line 3988: EXTRN ?P_UsePuzzleItem@@YAHPEAVAActor@@H@Z:PROC ; P_UsePuzzleItem + Line 3989: EXTRN ?P_FindFloorCeiling@@YAXPEAVAActor@@H@Z:PROC ; P_FindFloorCeiling + Line 3990: EXTRN ?P_AimLineAttack@@YA?AU?$TAngle@N@@PEAVAActor@@U1@NPEAUFTranslatedLineTarget@@1H00@Z:PROC ; P_AimLineAttack + Line 3991: EXTRN ?P_LineAttack@@YAPEAVAActor@@PEAV1@U?$TAngle@N@@N1HVFName@@PEAVPClassActor@@HPEAUFTranslatedLineTarget@@PEAHNNN@Z:PROC ; P_LineAttack + Line 3992: EXTRN ?P_TraceBleed@@YAXHPEAVAActor@@U?$TAngle@N@@1@Z:PROC ; P_TraceBleed + Line 3993: EXTRN ?P_TraceBleed@@YAXHPEAVAActor@@0@Z:PROC ; P_TraceBleed + Line 3994: EXTRN ?P_TraceBleed@@YAXHPEAUFTranslatedLineTarget@@PEAVAActor@@@Z:PROC ; P_TraceBleed + Line 3995: EXTRN ?P_TraceBleed@@YAXHPEAVAActor@@@Z:PROC ; P_TraceBleed + Line 3996: EXTRN ?P_RailAttack@@YAXPEAUFRailParams@@@Z:PROC ; P_RailAttack + Line 3997: EXTRN ?P_GetRadiusDamage@@YAHPEAVAActor@@0HHH_N@Z:PROC ; P_GetRadiusDamage + Line 3998: EXTRN ?P_RadiusAttack@@YAHPEAVAActor@@0HHVFName@@HH@Z:PROC ; P_RadiusAttack + Line 3999: EXTRN ?P_GetMoveFactor@@YANPEBVAActor@@PEAN@Z:PROC ; P_GetMoveFactor + Line 4000: EXTRN ?P_ActivateLine@@YA_NPEAUline_t@@PEAVAActor@@HHPEAU?$TVector3@N@@@Z:PROC ; P_ActivateLine + Line 4001: EXTRN ?P_GiveSecret@@YAXPEAUFLevelLocals@@PEAVAActor@@_N2H@Z:PROC ; P_GiveSecret + Line 4002: EXTRN ?S_StopSound@@YAXPEAVAActor@@H@Z:PROC ; S_StopSound + Line 4003: EXTRN ?S_ChangeSoundVolume@@YAXPEAVAActor@@HN@Z:PROC ; S_ChangeSoundVolume + Line 4004: EXTRN ?S_MarkPlayerSounds@@YAXPEAVAActor@@@Z:PROC ; S_MarkPlayerSounds + Line 4005: EXTRN ?A_PlaySound@@YAXPEAVAActor@@HHNHNH@Z:PROC ; A_PlaySound + Line 4006: EXTRN ?Apply@DmgFactors@@QEAAHVFName@@H@Z:PROC ; DmgFactors::Apply + Line 4007: EXTRN ?GetReplacement@PClassActor@@QEAAPEAV1@_N@Z:PROC ; PClassActor::GetReplacement + Line 4008: EXTRN ?GetReplacee@PClassActor@@QEAAPEAV1@_N@Z:PROC ; PClassActor::GetReplacee + Line 4009: EXTRN ?GetSpriteIndex@@YAHPEBD_N@Z:PROC ; GetSpriteIndex + Line 4010: EXTRN ?RestoreSpecialPosition@AActor@@QEAAXXZ:PROC ; AActor::RestoreSpecialPosition + Line 4011: EXTRN ?IsTeammate@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsTeammate + Line 4012: EXTRN ?IsFriend@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsFriend + Line 4013: EXTRN ?IsHostile@AActor@@QEAA_NPEAV1@@Z:PROC ; AActor::IsHostile + Line 4014: EXTRN ?GetSpecies@AActor@@QEAA?AVFName@@XZ:PROC ; AActor::GetSpecies + Line 4015: EXTRN ?SpawnHealth@AActor@@QEBAHXZ:PROC ; AActor::SpawnHealth + Line 4016: EXTRN ?GetMissileDamage@AActor@@QEAAHHH@Z:PROC ; AActor::GetMissileDamage + Line 4017: EXTRN ?GetTag@AActor@@QEBAPEBDPEBD@Z:PROC ; AActor::GetTag + Line 4018: EXTRN ?AddToHash@AActor@@QEAAXXZ:PROC ; AActor::AddToHash + Line 4019: EXTRN ?RemoveFromHash@AActor@@QEAAXXZ:PROC ; AActor::RemoveFromHash + Line 4020: EXTRN ?LinkToWorld@AActor@@QEAAXPEAUFLinkContext@@_NPEAUsector_t@@@Z:PROC ; AActor::LinkToWorld + Line 4021: EXTRN ?UnlinkFromWorld@AActor@@QEAAXPEAUFLinkContext@@@Z:PROC ; AActor::UnlinkFromWorld + Line 4022: EXTRN ?SetIdle@AActor@@QEAAX_N@Z:PROC ; AActor::SetIdle + Line 4023: EXTRN ?ClearCounters@AActor@@QEAAXXZ:PROC ; AActor::ClearCounters + Line 4024: EXTRN ?Revive@AActor@@QEAAXXZ:PROC ; AActor::Revive + Line 4025: EXTRN ?ApplyDamageFactor@AActor@@QEBAHVFName@@H@Z:PROC ; AActor::ApplyDamageFactor + Line 4026: EXTRN ?GetModifiedDamage@AActor@@QEAAHVFName@@H_N@Z:PROC ; AActor::GetModifiedDamage + Line 4027: EXTRN ?P_DrawSplash@@YAXPEAUFLevelLocals@@HAEBU?$TVector3@N@@U?$TAngle@N@@H@Z:PROC ; P_DrawSplash + Line 4028: EXTRN ?FindUniqueTID@FLevelLocals@@QEAAHHH@Z:PROC ; FLevelLocals::FindUniqueTID + Line 4029: EXTRN ?GetPortalOffsetPosition@FLevelLocals@@QEAA?AU?$TVector2@N@@NNNN@Z:PROC ; FLevelLocals::GetPortalOffsetPosition + Line 4030: EXTRN ?P_CheckKeys@@YAHPEAVAActor@@H_N1@Z:PROC ; P_CheckKeys + Line 4031: EXTRN ?P_GetKeyTypeCount@@YAHXZ:PROC ; P_GetKeyTypeCount + Line 4032: EXTRN ?P_GetKeyType@@YAPEAVPClassActor@@H@Z:PROC ; P_GetKeyType + Line 4033: EXTRN ?COPY_AAPTR@@YAPEAVAActor@@PEAV1@H@Z:PROC ; COPY_AAPTR + Line 4034: EXTRN ?I_SetMusicVolume@@YAXN@Z:PROC ; I_SetMusicVolume + Line 4035: EXTRN ?P_LineTrace@@YAHPEAVAActor@@U?$TAngle@N@@N1HNNNPEAUFLineTraceData@@@Z:PROC ; P_LineTrace + Line 4036: EXTRN ?P_HitFriend@@YAHPEAVAActor@@@Z:PROC ; P_HitFriend + Line 4037: EXTRN ?P_NoiseAlert@@YAXPEAVAActor@@0_NN@Z:PROC ; P_NoiseAlert + Line 4038: EXTRN ?P_Move@@YAHPEAVAActor@@@Z:PROC ; P_Move + Line 4039: EXTRN ?P_NewChaseDir@@YAXPEAVAActor@@@Z:PROC ; P_NewChaseDir + Line 4040: EXTRN ?P_RandomChaseDir@@YAXPEAVAActor@@@Z:PROC ; P_RandomChaseDir + Line 4041: EXTRN ?P_IsVisible@@YAHPEAVAActor@@0HPEAUFLookExParams@@@Z:PROC ; P_IsVisible + Line 4042: EXTRN ?P_LookForMonsters@@YAHPEAVAActor@@@Z:PROC ; P_LookForMonsters + Line 4043: EXTRN ?P_LookForTID@@YAHPEAVAActor@@HPEAUFLookExParams@@@Z:PROC ; P_LookForTID + Line 4044: EXTRN ?P_LookForEnemies@@YAHPEAVAActor@@HPEAUFLookExParams@@@Z:PROC ; P_LookForEnemies + Line 4045: EXTRN ?P_LookForPlayers@@YAHPEAVAActor@@HPEAUFLookExParams@@@Z:PROC ; P_LookForPlayers + Line 4046: EXTRN ?A_Unblock@@YAXPEAVAActor@@_N@Z:PROC ; A_Unblock + Line 4047: EXTRN ?A_BossDeath@@YAXPEAVAActor@@@Z:PROC ; A_BossDeath + Line 4048: EXTRN ?A_Wander@@YAXPEAVAActor@@H@Z:PROC ; A_Wander + Line 4049: EXTRN ?A_DoChase@@YAXPEAVAActor@@_NPEAUFState@@2111H@Z:PROC ; A_DoChase + Line 4050: EXTRN ?A_Face@@YAXPEAVAActor@@0U?$TAngle@N@@111HN@Z:PROC ; A_Face + Line 4051: EXTRN ?P_CheckForResurrection@@YA_NPEAVAActor@@_N@Z:PROC ; P_CheckForResurrection + Line 4052: EXTRN ?CheckBossDeath@@YAHPEAVAActor@@@Z:PROC ; CheckBossDeath + Line 4053: EXTRN ?PrintPickupMessage@@YAX_NAEBVFString@@@Z:PROC ; PrintPickupMessage + Line 4054: EXTRN ?GetDefaultSpeed@@YANPEAVPClassActor@@@Z:PROC ; GetDefaultSpeed + Line 4055: EXTRN __CxxFrameHandler3:PROC + Line 4056: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\voxels.cod (37 hits) + Line 44: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 45: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 46: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 47: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 48: EXTRN ??_U@YAPEAX_K@Z:PROC ; operator new[] + Line 49: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 50: EXTRN atexit:PROC + Line 51: EXTRN __std_terminate:PROC + Line 52: EXTRN toupper:PROC + Line 53: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 54: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 55: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 56: EXTRN ??1FMemLump@@QEAA@XZ:PROC ; FMemLump::~FMemLump + Line 57: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 58: EXTRN ?ReadLump@FWadCollection@@QEAA?AVFMemLump@@H@Z:PROC ; FWadCollection::ReadLump + Line 59: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 60: EXTRN ?GetLumpFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetLumpFullName + Line 61: EXTRN ?BestColor@@YAHPEBIHHHHH@Z:PROC ; BestColor + Line 62: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 63: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 64: EXTRN ?SetCMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetCMode + Line 65: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 66: EXTRN ?GetToken@FScanner@@QEAA_NXZ:PROC ; FScanner::GetToken + Line 67: EXTRN ?MustGetAnyToken@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetAnyToken + Line 68: EXTRN ?TokenMustBe@FScanner@@QEAAXH@Z:PROC ; FScanner::TokenMustBe + Line 69: EXTRN ?MustGetToken@FScanner@@QEAAXH@Z:PROC ; FScanner::MustGetToken + Line 70: EXTRN ?CheckToken@FScanner@@QEAA_NH@Z:PROC ; FScanner::CheckToken + Line 71: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 72: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 73: EXTRN ?GetSpriteIndex@@YAHPEBD_N@Z:PROC ; GetSpriteIndex + Line 74: EXTRN ?VOX_AddVoxel@@YAXHHPEAUFVoxelDef@@@Z:PROC ; VOX_AddVoxel + Line 75: EXTRN __CxxFrameHandler3:PROC + Line 76: EXTRN memcmp:PROC + Line 77: EXTRN memcpy:PROC + Line 78: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 79: EXTRN ?GPalette@@3UFPalette@@A:BYTE ; GPalette + Line 80: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\w_wad.cod (52 hits) + Line 161: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 162: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 163: EXTRN atexit:PROC + Line 164: EXTRN __std_terminate:PROC + Line 165: EXTRN __stdio_common_vfprintf:PROC + Line 166: EXTRN __stdio_common_vsprintf:PROC + Line 167: EXTRN strrchr:PROC + Line 168: EXTRN strpbrk:PROC + Line 169: EXTRN stricmp:PROC + Line 170: EXTRN strnicmp:PROC + Line 171: EXTRN toupper:PROC + Line 172: EXTRN get_crc_table:PROC + Line 173: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 174: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 175: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 176: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 177: EXTRN ??4FString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator= + Line 178: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 179: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 180: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 181: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 182: EXTRN ?LastIndexOf@FString@@QEBAJD@Z:PROC ; FString::LastIndexOf + Line 183: EXTRN ?ToUpper@FString@@QEAAXXZ:PROC ; FString::ToUpper + Line 184: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 185: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 186: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 187: EXTRN ?AllocBuffer@FString@@IEAAX_K@Z:PROC ; FString::AllocBuffer + Line 188: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 189: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 190: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 191: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 192: EXTRN ?DirEntryExists@@YA_NPEBDPEA_N@Z:PROC ; DirEntryExists + Line 193: EXTRN ?MakeKey@@YAIPEBD@Z:PROC ; MakeKey + Line 194: EXTRN ?OpenFile@FileReader@@QEAA_NPEBD_J1@Z:PROC ; FileReader::OpenFile + Line 195: EXTRN ?OpenFilePart@FileReader@@QEAA_NAEAV1@_J1@Z:PROC ; FileReader::OpenFilePart + Line 196: EXTRN ?OpenResourceFile@FResourceFile@@SAPEAV1@PEBDAEAVFileReader@@_N2@Z:PROC ; FResourceFile::OpenResourceFile + Line 197: EXTRN ?OpenDirectory@FResourceFile@@SAPEAV1@PEBD_N@Z:PROC ; FResourceFile::OpenDirectory + Line 198: EXTRN ??0FExternalLump@@QEAA@PEBDH@Z:PROC ; FExternalLump::FExternalLump + Line 199: EXTRN ?Init@MD5Context@@QEAAXXZ:PROC ; MD5Context::Init + Line 200: EXTRN ?Update@MD5Context@@QEAAXAEAVFileReader@@I@Z:PROC ; MD5Context::Update + Line 201: EXTRN ?Final@MD5Context@@QEAAXQEAE@Z:PROC ; MD5Context::Final + Line 202: EXTRN __imp_FormatMessageA:PROC + Line 203: EXTRN __imp_LocalFree:PROC + Line 204: EXTRN __imp_GetLastError:PROC + Line 205: EXTRN __CxxFrameHandler3:PROC + Line 206: EXTRN memset:PROC + Line 207: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 208: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + Line 209: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 210: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 211: EXTRN ?hashfile@@3PEAU_iobuf@@EA:QWORD ; hashfile + Line 212: EXTRN ?nospriterename@@3_NA:BYTE ; nospriterename + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\warptexture.cod (20 hits) + Line 33: EXTRN ??_L@YAXPEAX_K1P6AX0@Z2@Z:PROC ; `eh vector constructor iterator' + Line 34: EXTRN ??_M@YAXPEAX_K1P6AX0@Z@Z:PROC ; `eh vector destructor iterator' + Line 35: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 36: EXTRN __std_terminate:PROC + Line 37: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 38: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 39: EXTRN ?FreeAllSpans@FSoftwareTexture@@IEAAXXZ:PROC ; FSoftwareTexture::FreeAllSpans + Line 40: EXTRN ??0FSoftwareTexture@@QEAA@PEAVFTexture@@@Z:PROC ; FSoftwareTexture::FSoftwareTexture + Line 41: EXTRN ?GetColumn@FSoftwareTexture@@UEAAPEBEHIPEAPEBUFSoftwareTextureSpan@@@Z:PROC ; FSoftwareTexture::GetColumn + Line 42: EXTRN ?GetColumnBgra@FSoftwareTexture@@UEAAPEBIIPEAPEBUFSoftwareTextureSpan@@@Z:PROC ; FSoftwareTexture::GetColumnBgra + Line 43: EXTRN ?GetPixelsBgra@FSoftwareTexture@@UEAAPEBIXZ:PROC ; FSoftwareTexture::GetPixelsBgra + Line 44: EXTRN ?GetPixels@FSoftwareTexture@@UEAAPEBEH@Z:PROC ; FSoftwareTexture::GetPixels + Line 45: EXTRN ??_EFSoftwareTexture@@UEAAPEAXI@Z:PROC ; FSoftwareTexture::`vector deleting destructor' + Line 46: EXTRN ??_EFWarpTexture@@UEAAPEAXI@Z:PROC ; FWarpTexture::`vector deleting destructor' + Line 47: EXTRN __CxxFrameHandler3:PROC + Line 48: EXTRN __chkstk:PROC + Line 49: EXTRN memcpy:PROC + Line 50: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 51: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 52: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\wi_stuff.cod (80 hits) + Line 100: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 101: EXTRN ?players@@3PAVplayer_t@@A:BYTE ; players + Line 565: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 566: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 567: EXTRN atexit:PROC + Line 568: EXTRN __std_terminate:PROC + Line 569: EXTRN qsort:PROC + Line 570: EXTRN stricmp:PROC + Line 571: EXTRN strnicmp:PROC + Line 572: EXTRN tolower:PROC + Line 573: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 574: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 575: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 576: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 577: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 578: EXTRN ??4FString@@QEAAAEAV0@$$QEAV0@@Z:PROC ; FString::operator= + Line 579: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 580: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 581: EXTRN ?GenRand32@FRandom@@QEAAIXZ:PROC ; FRandom::GenRand32 + Line 582: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 583: EXTRN mysnprintf:PROC + Line 584: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 585: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 586: EXTRN ??0FScanner@@QEAA@H@Z:PROC ; FScanner::FScanner + Line 587: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 588: EXTRN ?GetString@FScanner@@QEAA_NXZ:PROC ; FScanner::GetString + Line 589: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 590: EXTRN ?MustGetStringName@FScanner@@QEAAXPEBD@Z:PROC ; FScanner::MustGetStringName + Line 591: EXTRN ?CheckString@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::CheckString + Line 592: EXTRN ?MustGetNumber@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetNumber + Line 593: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 594: EXTRN ?Compare@FScanner@@QEAA_NPEBD@Z:PROC ; FScanner::Compare + Line 595: EXTRN ?MustMatchString@FScanner@@QEAAHPEBQEBD_K@Z:PROC ; FScanner::MustMatchString + Line 596: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 597: EXTRN ?LookupLevelName@level_info_t@@QEAA?AVFString@@XZ:PROC ; level_info_t::LookupLevelName + Line 598: EXTRN ?FindLevelInfo@@YAPEAUlevel_info_t@@PEBD_N@Z:PROC ; FindLevelInfo + Line 599: EXTRN ?S_StopAllChannels@@YAXXZ:PROC ; S_StopAllChannels + Line 600: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 601: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 602: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 603: EXTRN ?AddSoftRoot@GC@@YAXPEAVDObject@@@Z:PROC ; GC::AddSoftRoot + Line 604: EXTRN ?DelSoftRoot@GC@@YAXPEAVDObject@@@Z:PROC ; GC::DelSoftRoot + Line 605: EXTRN ?ScriptVar@DObject@@QEAAPEAXVFName@@PEAVPType@@@Z:PROC ; DObject::ScriptVar + Line 606: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 607: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 608: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 609: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 610: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 611: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 612: EXTRN ?CreateNew@PClass@@QEAAPEAVDObject@@XZ:PROC ; PClass::CreateNew + Line 613: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 614: EXTRN ?V_SetBlend@@YAXHHHH@Z:PROC ; V_SetBlend + Line 615: EXTRN ?CheckForTexture@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::CheckForTexture + Line 616: EXTRN ?GetTextureID@FTextureManager@@QEAA?AVFTextureID@@PEBDW4ETextureType@@I@Z:PROC ; FTextureManager::GetTextureID + Line 617: EXTRN ?FlatFill@DFrameBuffer@@QEAAXHHHHPEAVFTexture@@_N@Z:PROC ; DFrameBuffer::FlatFill + Line 618: EXTRN ?Clear@DFrameBuffer@@QEAAXHHHHHI@Z:PROC ; DFrameBuffer::Clear + Line 619: EXTRN ?DrawTexture@DFrameBuffer@@QEAAXPEAVFTexture@@NNHZZ:PROC ; DFrameBuffer::DrawTexture + Line 620: EXTRN ?FillBorder@DFrameBuffer@@QEAAXPEAVFTexture@@@Z:PROC ; DFrameBuffer::FillBorder + Line 621: EXTRN ?HU_GetPlayerWidths@@YAXAEAH00@Z:PROC ; HU_GetPlayerWidths + Line 622: EXTRN ?HU_GetRowColor@@YAHPEAVplayer_t@@_N@Z:PROC ; HU_GetRowColor + Line 623: EXTRN ?comparepoints@@YAHPEBX0@Z:PROC ; comparepoints + Line 624: EXTRN ?compareteams@@YAHPEBX0@Z:PROC ; compareteams + Line 625: EXTRN ?SN_StopAllSequences@@YAXPEAUFLevelLocals@@@Z:PROC ; SN_StopAllSequences + Line 626: EXTRN ?VMCall@@YAHPEAVVMFunction@@PEAUVMValue@@HPEAUVMReturn@@H@Z:PROC ; VMCall + Line 627: EXTRN ?NullParam@@YAXPEBD@Z:PROC ; NullParam + Line 628: EXTRN ?GetVirtualIndex@@YAIPEAVPClass@@PEBD@Z:PROC ; GetVirtualIndex + Line 629: EXTRN ??_EDInterBackground@@UEAAPEAXI@Z:PROC ; DInterBackground::`vector deleting destructor' + Line 630: EXTRN __CxxFrameHandler3:PROC + Line 631: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 632: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 633: EXTRN ?M_Random@@3VFRandom@@A:BYTE ; M_Random + Line 634: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 635: EXTRN ?multiplayer@@3_NA:BYTE ; multiplayer + Line 636: EXTRN ?deathmatch@@3VFIntCVar@@A:BYTE ; deathmatch + Line 637: EXTRN ?TexMan@@3VFTextureManager@@A:BYTE ; TexMan + Line 638: EXTRN ?screen@@3PEAVDFrameBuffer@@EA:QWORD ; screen + Line 639: EXTRN ?gameinfo@@3Ugameinfo_t@@A:BYTE ; gameinfo + Line 640: EXTRN ?currentUILevel@@3PEAUFLevelLocals@@EA:QWORD ; currentUILevel + Line 641: EXTRN __ImageBase:BYTE + Line 642: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\wildmidi_lib.cod (34 hits) + Line 111: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 112: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 113: EXTRN atexit:PROC + Line 114: EXTRN __std_terminate:PROC + Line 115: EXTRN _errno:PROC + Line 116: EXTRN free:PROC + Line 117: EXTRN malloc:PROC + Line 118: EXTRN realloc:PROC + Line 119: EXTRN atof:PROC + Line 120: EXTRN atoi:PROC + Line 121: EXTRN strrchr:PROC + Line 122: EXTRN strncpy:PROC + Line 123: EXTRN stricmp:PROC + Line 124: EXTRN strnicmp:PROC + Line 125: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 126: EXTRN ?_WM_ERROR@@YAXPEBDIH0H@Z:PROC ; _WM_ERROR + Line 127: EXTRN ?_WM_BufferFile@@YAPEAEPEBDPEAK@Z:PROC ; _WM_BufferFile + Line 128: EXTRN ?_WM_InitReader@@YA_NPEBD@Z:PROC ; _WM_InitReader + Line 129: EXTRN ?_WM_reset_reverb@@YAXPEAU_rvb@@@Z:PROC ; _WM_reset_reverb + Line 130: EXTRN ?_WM_init_reverb@@YAPEAU_rvb@@HMMMM@Z:PROC ; _WM_init_reverb + Line 131: EXTRN ?_WM_free_reverb@@YAXPEAU_rvb@@@Z:PROC ; _WM_free_reverb + Line 132: EXTRN ?_WM_do_reverb@@YAXPEAU_rvb@@PEAHH@Z:PROC ; _WM_do_reverb + Line 133: EXTRN ?_WM_load_gus_pat@@YAPEAU_sample@@PEBDH@Z:PROC ; _WM_load_gus_pat + Line 134: EXTRN ?CreateCriticalSection@@YAPEAVFInternalCriticalSection@@XZ:PROC ; CreateCriticalSection + Line 135: EXTRN ?DeleteCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; DeleteCriticalSection + Line 136: EXTRN ?EnterCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; EnterCriticalSection + Line 137: EXTRN ?LeaveCriticalSection@@YAXPEAVFInternalCriticalSection@@@Z:PROC ; LeaveCriticalSection + Line 138: EXTRN __CxxFrameHandler3:PROC + Line 139: EXTRN memset:PROC + Line 140: EXTRN pow:PROC + Line 141: EXTRN sin:PROC + Line 142: EXTRN ?wm_sfreader@@3V?$unique_ptr@VFSoundFontReader@@U?$default_delete@VFSoundFontReader@@@std@@@std@@A:QWORD ; wm_sfreader + Line 143: EXTRN __ImageBase:BYTE + Line 144: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\win32basevideo.cod (14 hits) + Line 29: EXTRN _purecall:PROC + Line 30: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 31: EXTRN atexit:PROC + Line 32: EXTRN __imp_GetMonitorInfoA:PROC + Line 33: EXTRN __imp_EnumDisplayMonitors:PROC + Line 34: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 35: EXTRN mysnprintf:PROC + Line 36: EXTRN ?I_SetWndProc@@YAXXZ:PROC ; I_SetWndProc + Line 37: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 38: EXTRN ??0FIntCVar@@QEAA@PEBDHIP6AXAEAV0@@Z@Z:PROC ; FIntCVar::FIntCVar + Line 39: EXTRN ?DumpAdapters@IVideo@@UEAAXXZ:PROC ; IVideo::DumpAdapters + Line 40: EXTRN ??_EIVideo@@UEAAPEAXI@Z:PROC ; IVideo::`vector deleting destructor' + Line 41: EXTRN ??_EWin32BaseVideo@@UEAAPEAXI@Z:PROC ; Win32BaseVideo::`vector deleting destructor' + Line 42: EXTRN __CxxFrameHandler3:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\win32glvideo.cod (49 hits) + Line 64: EXTRN _purecall:PROC + Line 65: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 66: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 67: EXTRN atexit:PROC + Line 68: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 69: EXTRN __imp_GetModuleHandleA:PROC + Line 70: EXTRN __imp_ChoosePixelFormat:PROC + Line 71: EXTRN __imp_DescribePixelFormat:PROC + Line 72: EXTRN __imp_GetDeviceCaps:PROC + Line 73: EXTRN __imp_SetPixelFormat:PROC + Line 74: EXTRN __imp_wglCreateContext:PROC + Line 75: EXTRN __imp_wglDeleteContext:PROC + Line 76: EXTRN __imp_wglGetProcAddress:PROC + Line 77: EXTRN __imp_wglMakeCurrent:PROC + Line 78: EXTRN __imp_DefWindowProcA:PROC + Line 79: EXTRN __imp_RegisterClassA:PROC + Line 80: EXTRN __imp_UnregisterClassA:PROC + Line 81: EXTRN __imp_CreateWindowExA:PROC + Line 82: EXTRN __imp_DestroyWindow:PROC + Line 83: EXTRN __imp_ShowWindow:PROC + Line 84: EXTRN __imp_GetDC:PROC + Line 85: EXTRN __imp_ReleaseDC:PROC + Line 86: EXTRN __imp_AdjustWindowRectEx:PROC + Line 87: EXTRN __imp_GetDesktopWindow:PROC + Line 88: EXTRN __imp_LoadCursorA:PROC + Line 89: EXTRN __imp_LoadIconA:PROC + Line 90: EXTRN strtod:PROC + Line 91: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 92: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 93: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 94: EXTRN ??1FBaseCVar@@UEAA@XZ:PROC ; FBaseCVar::~FBaseCVar + Line 95: EXTRN ?SetGenericRep@FBaseCVar@@QEAAXTUCVarValue@@W4ECVarType@@@Z:PROC ; FBaseCVar::SetGenericRep + Line 96: EXTRN ??0FBoolCVar@@QEAA@PEBD_NIP6AXAEAV0@@Z@Z:PROC ; FBoolCVar::FBoolCVar + Line 97: EXTRN ?DumpAdapters@IVideo@@UEAAXXZ:PROC ; IVideo::DumpAdapters + Line 98: EXTRN ??_EIVideo@@UEAAPEAXI@Z:PROC ; IVideo::`vector deleting destructor' + Line 99: EXTRN ?CheckValue@FArgs@@QEBAPEBDPEBD@Z:PROC ; FArgs::CheckValue + Line 100: EXTRN ??0Win32BaseVideo@@QEAA@XZ:PROC ; Win32BaseVideo::Win32BaseVideo + Line 101: EXTRN ?DumpAdapters@Win32BaseVideo@@UEAAXXZ:PROC ; Win32BaseVideo::DumpAdapters + Line 102: EXTRN ??_EWin32GLVideo@@UEAAPEAXI@Z:PROC ; Win32GLVideo::`vector deleting destructor' + Line 103: EXTRN ??0OpenGLFrameBuffer@OpenGLRenderer@@QEAA@PEAX_N@Z:PROC ; OpenGLRenderer::OpenGLFrameBuffer::OpenGLFrameBuffer + Line 104: EXTRN _CxxThrowException:PROC + Line 105: EXTRN __CxxFrameHandler3:PROC + Line 106: EXTRN memmove:PROC + Line 107: EXTRN ?fullscreen@@3VFBoolCVar@@A:BYTE ; fullscreen + Line 108: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 109: EXTRN ?vr_enable_quadbuffered@@3VFBoolCVar@@A:BYTE ; vr_enable_quadbuffered + Line 110: EXTRN ?vid_hdr@@3VFBoolCVar@@A:BYTE ; vid_hdr + Line 111: EXTRN ?vid_hdr_active@@3_NA:BYTE ; vid_hdr_active + Line 112: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\wm_error.cod (4 hits) + Line 33: EXTRN __acrt_iob_func:PROC + Line 34: EXTRN __stdio_common_vfprintf:PROC + Line 35: EXTRN strerror:PROC + Line 36: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\wopl_file.cod (4 hits) + Line 27: EXTRN strncpy:PROC + Line 28: EXTRN calloc:PROC + Line 29: EXTRN free:PROC + Line 30: EXTRN memcmp:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\wopn_file.cod (4 hits) + Line 37: EXTRN strncpy:PROC + Line 38: EXTRN calloc:PROC + Line 39: EXTRN free:PROC + Line 40: EXTRN memcmp:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\worldtexture.cod (22 hits) + Line 19: EXTRN _purecall:PROC + Line 20: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 21: EXTRN ??_V@YAXPEAX@Z:PROC ; operator delete[] + Line 22: EXTRN __std_terminate:PROC + Line 23: EXTRN ??1FTexture@@UEAA@XZ:PROC ; FTexture::~FTexture + Line 24: EXTRN ?GetColumnBgra@FTexture@@UEAAPEBIIPEAPEBUSpan@1@@Z:PROC ; FTexture::GetColumnBgra + Line 25: EXTRN ?GetPixelsBgra@FTexture@@UEAAPEBIXZ:PROC ; FTexture::GetPixelsBgra + Line 26: EXTRN ?CopyTrueColorPixels@FTexture@@UEAAHPEAVFBitmap@@HHHPEAUFCopyInfo@@@Z:PROC ; FTexture::CopyTrueColorPixels + Line 27: EXTRN ?CopyTrueColorTranslated@FTexture@@UEAAHPEAVFBitmap@@HHHPEAUPalEntry@@PEAUFCopyInfo@@@Z:PROC ; FTexture::CopyTrueColorTranslated + Line 28: EXTRN ?UseBasePalette@FTexture@@UEAA_NXZ:PROC ; FTexture::UseBasePalette + Line 29: EXTRN ?GetRedirect@FTexture@@UEAAPEAV1@XZ:PROC ; FTexture::GetRedirect + Line 30: EXTRN ?GetRawTexture@FTexture@@UEAAPEAV1@XZ:PROC ; FTexture::GetRawTexture + Line 31: EXTRN ?Unload@FTexture@@UEAAXXZ:PROC ; FTexture::Unload + Line 32: EXTRN ?GetFormat@FTexture@@UEAA?AW4FTextureFormat@@XZ:PROC ; FTexture::GetFormat + Line 33: EXTRN ?FillBuffer@FTexture@@UEAAXPEAEHHW4FTextureFormat@@@Z:PROC ; FTexture::FillBuffer + Line 34: EXTRN ?SetFrontSkyLayer@FTexture@@UEAAXXZ:PROC ; FTexture::SetFrontSkyLayer + Line 35: EXTRN ?CheckModified@FTexture@@UEAA_NTFRenderStyle@@@Z:PROC ; FTexture::CheckModified + Line 36: EXTRN ??0FTexture@@IEAA@PEBDH@Z:PROC ; FTexture::FTexture + Line 37: EXTRN ?CreateSpans@FTexture@@IEBAPEAPEAUSpan@1@PEBE@Z:PROC ; FTexture::CreateSpans + Line 38: EXTRN ?FreeSpans@FTexture@@IEBAXPEAPEAUSpan@1@@Z:PROC ; FTexture::FreeSpans + Line 39: EXTRN ??_EFWorldTexture@@MEAAPEAXI@Z:PROC ; FWorldTexture::`vector deleting destructor' + Line 40: EXTRN __CxxFrameHandler3:PROC + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\x86.cod (3 hits) + Line 30: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 31: EXTRN memset:PROC + Line 32: EXTRN ?batchrun@@3_NA:BYTE ; batchrun + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\xbrz.cod (15 hits) + Line 30: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 31: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 32: EXTRN atexit:PROC + Line 33: EXTRN _Init_thread_header:PROC + Line 34: EXTRN _Init_thread_abort:PROC + Line 35: EXTRN _Init_thread_footer:PROC + Line 36: EXTRN _invalid_parameter_noinfo_noreturn:PROC + Line 37: EXTRN ?_Xlength_error@std@@YAXPEBD@Z:PROC ; std::_Xlength_error + Line 38: EXTRN _CxxThrowException:PROC + Line 39: EXTRN __CxxFrameHandler3:PROC + Line 40: EXTRN memmove:PROC + Line 41: EXTRN memset:PROC + Line 42: EXTRN _Init_thread_epoch:DWORD + Line 43: EXTRN _fltused:DWORD + Line 44: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\xbrz_old.cod (1 hit) + Line 17: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\Ym2612_Emu.cod (8 hits) + Line 65: EXTRN free:PROC + Line 66: EXTRN malloc:PROC + Line 67: EXTRN log10:PROC + Line 68: EXTRN memset:PROC + Line 69: EXTRN pow:PROC + Line 70: EXTRN sin:PROC + Line 71: EXTRN __ImageBase:BYTE + Line 72: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\ym3438.cod (2 hits) + Line 40: EXTRN memset:PROC + Line 41: EXTRN __ImageBase:BYTE + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\zcc_compile.cod (238 hits) + Line 311: EXTRN ??2@YAPEAX_K@Z:PROC ; operator new + Line 312: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 313: EXTRN ?__global_delete@@YAXPEAX_K@Z:PROC ; __global_delete + Line 314: EXTRN atexit:PROC + Line 315: EXTRN _Init_thread_header:PROC + Line 316: EXTRN _Init_thread_footer:PROC + Line 317: EXTRN __std_terminate:PROC + Line 318: EXTRN stricmp:PROC + Line 319: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 320: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 321: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 322: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 323: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_K_N@Z:PROC ; FName::NameManager::FindName + Line 324: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 325: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 326: EXTRN ??4FString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator= + Line 327: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 328: EXTRN ??YFString@@QEAAAEAV0@D@Z:PROC ; FString::operator+= + Line 329: EXTRN ?Insert@FString@@QEAAX_KPEBD@Z:PROC ; FString::Insert + Line 330: EXTRN ?Format@FString@@QEAAXPEBDZZ:PROC ; FString::Format + Line 331: EXTRN ?AppendFormat@FString@@QEAAXPEBDZZ:PROC ; FString::AppendFormat + Line 332: EXTRN ?VAppendFormat@FString@@QEAAXPEBDPEAD@Z:PROC ; FString::VAppendFormat + Line 333: EXTRN ?Truncate@FString@@QEAAX_K@Z:PROC ; FString::Truncate + Line 334: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 335: EXTRN ??0FStringf@@QEAA@PEBDZZ:PROC ; FStringf::FStringf + Line 336: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 337: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 338: EXTRN ??0DObject@@QEAA@XZ:PROC ; DObject::DObject + Line 339: EXTRN ??1DObject@@UEAA@XZ:PROC ; DObject::~DObject + Line 340: EXTRN ?Serialize@DObject@@UEAAXAEAVFSerializer@@@Z:PROC ; DObject::Serialize + Line 341: EXTRN ?Destroy@DObject@@QEAAXXZ:PROC ; DObject::Destroy + Line 342: EXTRN ?PointerSubstitution@DObject@@UEAA_KPEAV1@0@Z:PROC ; DObject::PointerSubstitution + Line 343: EXTRN ?PropagateMark@DObject@@UEAA_KXZ:PROC ; DObject::PropagateMark + Line 344: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 345: EXTRN ??0FSharedStringArena@@QEAA@XZ:PROC ; FSharedStringArena::FSharedStringArena + Line 346: EXTRN ??1FSharedStringArena@@QEAA@XZ:PROC ; FSharedStringArena::~FSharedStringArena + Line 347: EXTRN ?Alloc@FSharedStringArena@@QEAAPEAVFString@@AEBV2@@Z:PROC ; FSharedStringArena::Alloc + Line 348: EXTRN ?StaticType@PSymbol@@UEBAPEAVPClass@@XZ:PROC ; PSymbol::StaticType + Line 349: EXTRN ??_EPSymbol@@UEAAPEAXI@Z:PROC ; PSymbol::`vector deleting destructor' + Line 350: EXTRN ?StaticType@PSymbolType@@UEBAPEAVPClass@@XZ:PROC ; PSymbolType::StaticType + Line 351: EXTRN ??_EPSymbolType@@UEAAPEAXI@Z:PROC ; PSymbolType::`vector deleting destructor' + Line 352: EXTRN ?StaticType@PSymbolTreeNode@@UEBAPEAVPClass@@XZ:PROC ; PSymbolTreeNode::StaticType + Line 353: EXTRN ??_EPSymbolTreeNode@@UEAAPEAXI@Z:PROC ; PSymbolTreeNode::`vector deleting destructor' + Line 354: EXTRN ??0PField@@QEAA@VFName@@PEAVPType@@I_KH@Z:PROC ; PField::PField + Line 355: EXTRN ??0PProperty@@QEAA@VFName@@AEAV?$TArray@PEAVPField@@PEAV1@@@@Z:PROC ; PProperty::PProperty + Line 356: EXTRN ??0PPropFlag@@QEAA@VFName@@PEAVPField@@H_N@Z:PROC ; PPropFlag::PPropFlag + Line 357: EXTRN ?StaticType@PSymbolConst@@UEBAPEAVPClass@@XZ:PROC ; PSymbolConst::StaticType + Line 358: EXTRN ??_EPSymbolConst@@UEAAPEAXI@Z:PROC ; PSymbolConst::`vector deleting destructor' + Line 359: EXTRN ?StaticType@PSymbolConstNumeric@@UEBAPEAVPClass@@XZ:PROC ; PSymbolConstNumeric::StaticType + Line 360: EXTRN ??_EPSymbolConstNumeric@@UEAAPEAXI@Z:PROC ; PSymbolConstNumeric::`vector deleting destructor' + Line 361: EXTRN ??0PSymbolConstString@@QEAA@VFName@@AEBVFString@@@Z:PROC ; PSymbolConstString::PSymbolConstString + Line 362: EXTRN ?StaticType@PFunction@@UEBAPEAVPClass@@XZ:PROC ; PFunction::StaticType + Line 363: EXTRN ?AddVariant@PFunction@@QEAAIPEAVPPrototype@@AEAV?$TArray@II@@AEAV?$TArray@VFName@@V1@@@PEAVVMFunction@@HH@Z:PROC ; PFunction::AddVariant + Line 364: EXTRN ??_EPFunction@@UEAAPEAXI@Z:PROC ; PFunction::`vector deleting destructor' + Line 365: EXTRN ??0PSymbolTable@@QEAA@XZ:PROC ; PSymbolTable::PSymbolTable + Line 366: EXTRN ??1PSymbolTable@@QEAA@XZ:PROC ; PSymbolTable::~PSymbolTable + Line 367: EXTRN ?SetParentTable@PSymbolTable@@QEAAXPEAU1@@Z:PROC ; PSymbolTable::SetParentTable + Line 368: EXTRN ?FindSymbol@PSymbolTable@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PSymbolTable::FindSymbol + Line 369: EXTRN ?AddSymbol@PSymbolTable@@QEAAPEAVPSymbol@@PEAV2@@Z:PROC ; PSymbolTable::AddSymbol + Line 370: EXTRN ?ReplaceSymbol@PSymbolTable@@QEAAXPEAVPSymbol@@@Z:PROC ; PSymbolTable::ReplaceSymbol + Line 371: EXTRN ?InitializeDefaults@PClass@@QEAAXXZ:PROC ; PClass::InitializeDefaults + Line 372: EXTRN ?FindVirtualIndex@PClass@@QEAAHVFName@@PEAUVariant@PFunction@@PEAV4@@Z:PROC ; PClass::FindVirtualIndex + Line 373: EXTRN ?FindSymbol@PClass@@QEBAPEAVPSymbol@@VFName@@_N@Z:PROC ; PClass::FindSymbol + Line 374: EXTRN ?CreateDerivedClass@PClass@@QEAAPEAV1@VFName@@I@Z:PROC ; PClass::CreateDerivedClass + Line 375: EXTRN ?FindClass@PClass@@SAPEAV1@VFName@@@Z:PROC ; PClass::FindClass + Line 376: EXTRN ?FindClassTentative@PClass@@QEAAPEAV1@VFName@@@Z:PROC ; PClass::FindClassTentative + Line 377: EXTRN ?S_FindSound@@YAHPEBD@Z:PROC ; S_FindSound + Line 378: EXTRN ?SetReplacement@PClassActor@@QEAA_NVFName@@@Z:PROC ; PClassActor::SetReplacement + Line 379: EXTRN ?GetSpriteIndex@@YAHPEBD_N@Z:PROC ; GetSpriteIndex + Line 380: EXTRN ?AddStateLight@@YAXPEAUFState@@PEBD@Z:PROC ; AddStateLight + Line 381: EXTRN ??0FScriptPosition@@QEAA@AEBU0@@Z:PROC ; FScriptPosition::FScriptPosition + Line 382: EXTRN ??0FScriptPosition@@QEAA@VFString@@H@Z:PROC ; FScriptPosition::FScriptPosition + Line 383: EXTRN ?Message@FScriptPosition@@QEBAXHPEBDZZ:PROC ; FScriptPosition::Message + Line 384: EXTRN ?V_GetColor@@YAHPEBIPEBDPEAUFScriptPosition@@@Z:PROC ; V_GetColor + Line 385: EXTRN ?SideFromFlags@FScopeBarrier@@SAHH@Z:PROC ; FScopeBarrier::SideFromFlags + Line 386: EXTRN ?SideFromObjectFlags@FScopeBarrier@@SAHW4EScopeFlags@@@Z:PROC ; FScopeBarrier::SideFromObjectFlags + Line 387: EXTRN ?ChangeSideInFlags@FScopeBarrier@@SAHHH@Z:PROC ; FScopeBarrier::ChangeSideInFlags + Line 388: EXTRN ?ChangeSideInObjectFlags@FScopeBarrier@@SA?AW4EScopeFlags@@W42@H@Z:PROC ; FScopeBarrier::ChangeSideInObjectFlags + Line 389: EXTRN ?FinalizeClass@@YAXPEAVPClass@@AEAVFStateDefinitions@@@Z:PROC ; FinalizeClass + Line 390: EXTRN ?FindFlag@@YAPEAUFFlagDef@@PEBVPClass@@PEBD1_N@Z:PROC ; FindFlag + Line 391: EXTRN ?HandleDeprecatedFlags@@YAXPEAVAActor@@PEAVPClassActor@@_NH@Z:PROC ; HandleDeprecatedFlags + Line 392: EXTRN ?ModActorFlag@@YAXPEAVAActor@@PEAUFFlagDef@@_N@Z:PROC ; ModActorFlag + Line 393: EXTRN ?AddStateLabel@FStateDefinitions@@QEAAXPEBD@Z:PROC ; FStateDefinitions::AddStateLabel + Line 394: EXTRN ?GetStateLabelIndex@FStateDefinitions@@QEAAHVFName@@@Z:PROC ; FStateDefinitions::GetStateLabelIndex + Line 395: EXTRN ?MakeStateDefines@FStateDefinitions@@QEAAXPEBVPClassActor@@@Z:PROC ; FStateDefinitions::MakeStateDefines + Line 396: EXTRN ?SetGotoLabel@FStateDefinitions@@QEAA_NPEBD@Z:PROC ; FStateDefinitions::SetGotoLabel + Line 397: EXTRN ?SetStop@FStateDefinitions@@QEAA_NXZ:PROC ; FStateDefinitions::SetStop + Line 398: EXTRN ?SetWait@FStateDefinitions@@QEAA_NXZ:PROC ; FStateDefinitions::SetWait + Line 399: EXTRN ?SetLoop@FStateDefinitions@@QEAA_NXZ:PROC ; FStateDefinitions::SetLoop + Line 400: EXTRN ?AddStates@FStateDefinitions@@QEAAHPEAUFState@@PEBDAEBUFScriptPosition@@@Z:PROC ; FStateDefinitions::AddStates + Line 401: EXTRN ?FindFunction@@YAPEAUAFuncDesc@@PEAVPContainerType@@PEBD@Z:PROC ; FindFunction + Line 402: EXTRN ?FindField@@YAPEAUFieldDesc@@PEAVPContainerType@@PEBD@Z:PROC ; FindField + Line 403: EXTRN ?SetImplicitArgs@@YAXPEAV?$TArray@PEAVPType@@PEAV1@@@PEAV?$TArray@II@@PEAV?$TArray@VFName@@V1@@@PEAVPContainerType@@IH@Z:PROC ; SetImplicitArgs + Line 404: EXTRN ?CreateAnonymousFunction@@YAPEAVPFunction@@PEAVPContainerType@@PEAVPType@@H@Z:PROC ; CreateAnonymousFunction + Line 405: EXTRN ?CreateDamageFunction@@YAXPEAVPNamespace@@AEBUVersionInfo@@PEAVPClassActor@@PEAVAActor@@PEAVFxExpression@@_NH@Z:PROC ; CreateDamageFunction + Line 406: EXTRN ?FindProperty@@YAPEAUFPropertyInfo@@PEBD@Z:PROC ; FindProperty + Line 407: EXTRN ?PrintString@@YAHHPEBD@Z:PROC ; PrintString + Line 408: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 409: EXTRN ?DescriptiveName@PType@@QEBAPEBDXZ:PROC ; PType::DescriptiveName + Line 410: EXTRN ?NewMap@@YAPEAVPMap@@PEAVPType@@0@Z:PROC ; NewMap + Line 411: EXTRN ?NewArray@@YAPEAVPArray@@PEAVPType@@I@Z:PROC ; NewArray + Line 412: EXTRN ?NewStaticArray@@YAPEAVPStaticArray@@PEAVPType@@@Z:PROC ; NewStaticArray + Line 413: EXTRN ?NewDynArray@@YAPEAVPDynArray@@PEAVPType@@@Z:PROC ; NewDynArray + Line 414: EXTRN ?NewPointer@@YAPEAVPPointer@@PEAVPType@@_N@Z:PROC ; NewPointer + Line 415: EXTRN ?NewClassPointer@@YAPEAVPClassPointer@@PEAVPClass@@@Z:PROC ; NewClassPointer + Line 416: EXTRN ?NewEnum@@YAPEAVPEnum@@VFName@@PEAVPTypeBase@@@Z:PROC ; NewEnum + Line 417: EXTRN ?NewStruct@@YAPEAVPStruct@@VFName@@PEAVPTypeBase@@_N@Z:PROC ; NewStruct + Line 418: EXTRN ?NewPrototype@@YAPEAVPPrototype@@AEBV?$TArray@PEAVPType@@PEAV1@@@0@Z:PROC ; NewPrototype + Line 419: EXTRN ?NewClassType@@YAPEAVPClassType@@PEAVPClass@@@Z:PROC ; NewClassType + Line 420: EXTRN ?InitNode@ZCC_AST@@QEAAPEAUZCC_TreeNode@@_KW4EZCCTreeNodeType@@PEAU2@@Z:PROC ; ZCC_AST::InitNode + Line 421: EXTRN ?AddFunction@FFunctionBuildList@@QEAAPEAVVMFunction@@PEAVPNamespace@@AEBUVersionInfo@@PEAVPFunction@@PEAVFxExpression@@AEBVFString@@_NHHH@Z:PROC ; FFunctionBuildList::AddFunction + Line 422: EXTRN ??0FCompileContext@@QEAA@PEAVPNamespace@@PEAVPContainerType@@_N@Z:PROC ; FCompileContext::FCompileContext + Line 423: EXTRN ?Resolve@FxExpression@@UEAAPEAV1@AEAUFCompileContext@@@Z:PROC ; FxExpression::Resolve + Line 424: EXTRN ?isConstant@FxExpression@@UEBA_NXZ:PROC ; FxExpression::isConstant + Line 425: EXTRN ?RequestAddress@FxExpression@@UEAA_NAEAUFCompileContext@@PEA_N@Z:PROC ; FxExpression::RequestAddress + Line 426: EXTRN ?ReturnProto@FxExpression@@UEAAPEAVPPrototype@@XZ:PROC ; FxExpression::ReturnProto + Line 427: EXTRN ?GetDirectFunction@FxExpression@@UEAAPEAVVMFunction@@PEAVPFunction@@AEBUVersionInfo@@@Z:PROC ; FxExpression::GetDirectFunction + Line 428: EXTRN ?Emit@FxExpression@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxExpression::Emit + Line 429: EXTRN ?EmitCompare@FxExpression@@UEAAXPEAVVMFunctionBuilder@@_NAEAV?$TArray@_K_K@@2@Z:PROC ; FxExpression::EmitCompare + Line 430: EXTRN ??_EFxExpression@@UEAAPEAXI@Z:PROC ; FxExpression::`vector deleting destructor' + Line 431: EXTRN ??0FxIdentifier@@QEAA@VFName@@AEBUFScriptPosition@@@Z:PROC ; FxIdentifier::FxIdentifier + Line 432: EXTRN ??0FxMemberIdentifier@@QEAA@PEAVFxExpression@@VFName@@AEBUFScriptPosition@@@Z:PROC ; FxMemberIdentifier::FxMemberIdentifier + Line 433: EXTRN ?Emit@FxConstant@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxConstant::Emit + Line 434: EXTRN ??_EFxConstant@@UEAAPEAXI@Z:PROC ; FxConstant::`vector deleting destructor' + Line 435: EXTRN ??0FxVectorValue@@QEAA@PEAVFxExpression@@00AEBUFScriptPosition@@@Z:PROC ; FxVectorValue::FxVectorValue + Line 436: EXTRN ??0FxIntCast@@QEAA@PEAVFxExpression@@_N11@Z:PROC ; FxIntCast::FxIntCast + Line 437: EXTRN ??0FxFloatCast@@QEAA@PEAVFxExpression@@@Z:PROC ; FxFloatCast::FxFloatCast + Line 438: EXTRN ??0FxStringCast@@QEAA@PEAVFxExpression@@@Z:PROC ; FxStringCast::FxStringCast + Line 439: EXTRN ??0FxTypeCast@@QEAA@PEAVFxExpression@@PEAVPType@@_N2@Z:PROC ; FxTypeCast::FxTypeCast + Line 440: EXTRN ??0FxPlusSign@@QEAA@PEAVFxExpression@@@Z:PROC ; FxPlusSign::FxPlusSign + Line 441: EXTRN ??0FxMinusSign@@QEAA@PEAVFxExpression@@@Z:PROC ; FxMinusSign::FxMinusSign + Line 442: EXTRN ??0FxUnaryNotBitwise@@QEAA@PEAVFxExpression@@@Z:PROC ; FxUnaryNotBitwise::FxUnaryNotBitwise + Line 443: EXTRN ??0FxUnaryNotBoolean@@QEAA@PEAVFxExpression@@@Z:PROC ; FxUnaryNotBoolean::FxUnaryNotBoolean + Line 444: EXTRN ??0FxSizeAlign@@QEAA@PEAVFxExpression@@H@Z:PROC ; FxSizeAlign::FxSizeAlign + Line 445: EXTRN ??0FxPreIncrDecr@@QEAA@PEAVFxExpression@@H@Z:PROC ; FxPreIncrDecr::FxPreIncrDecr + Line 446: EXTRN ??0FxPostIncrDecr@@QEAA@PEAVFxExpression@@H@Z:PROC ; FxPostIncrDecr::FxPostIncrDecr + Line 447: EXTRN ??0FxAssign@@QEAA@PEAVFxExpression@@0_N@Z:PROC ; FxAssign::FxAssign + Line 448: EXTRN ??0FxMultiAssign@@QEAA@AEAV?$TDeletingArray@PEAVFxExpression@@PEAV1@@@PEAVFxExpression@@AEBUFScriptPosition@@@Z:PROC ; FxMultiAssign::FxMultiAssign + Line 449: EXTRN ??0FxAssignSelf@@QEAA@AEBUFScriptPosition@@@Z:PROC ; FxAssignSelf::FxAssignSelf + Line 450: EXTRN ??0FxAddSub@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxAddSub::FxAddSub + Line 451: EXTRN ??0FxMulDiv@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxMulDiv::FxMulDiv + Line 452: EXTRN ??0FxPow@@QEAA@PEAVFxExpression@@0@Z:PROC ; FxPow::FxPow + Line 453: EXTRN ??0FxCompareRel@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxCompareRel::FxCompareRel + Line 454: EXTRN ??0FxCompareEq@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxCompareEq::FxCompareEq + Line 455: EXTRN ??0FxBitOp@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxBitOp::FxBitOp + Line 456: EXTRN ??0FxShift@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxShift::FxShift + Line 457: EXTRN ??0FxLtGtEq@@QEAA@PEAVFxExpression@@0@Z:PROC ; FxLtGtEq::FxLtGtEq + Line 458: EXTRN ??0FxConcat@@QEAA@PEAVFxExpression@@0@Z:PROC ; FxConcat::FxConcat + Line 459: EXTRN ??0FxBinaryLogical@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxBinaryLogical::FxBinaryLogical + Line 460: EXTRN ??0FxDotCross@@QEAA@HPEAVFxExpression@@0@Z:PROC ; FxDotCross::FxDotCross + Line 461: EXTRN ??0FxTypeCheck@@QEAA@PEAVFxExpression@@0@Z:PROC ; FxTypeCheck::FxTypeCheck + Line 462: EXTRN ??0FxConditional@@QEAA@PEAVFxExpression@@00@Z:PROC ; FxConditional::FxConditional + Line 463: EXTRN ??0FxSelf@@QEAA@AEBUFScriptPosition@@_N@Z:PROC ; FxSelf::FxSelf + Line 464: EXTRN ?Emit@FxSelf@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxSelf::Emit + Line 465: EXTRN ?Resolve@FxSuper@@UEAAPEAVFxExpression@@AEAUFCompileContext@@@Z:PROC ; FxSuper::Resolve + Line 466: EXTRN ??_EFxSuper@@UEAAPEAXI@Z:PROC ; FxSuper::`vector deleting destructor' + Line 467: EXTRN ??0FxArrayElement@@QEAA@PEAVFxExpression@@0@Z:PROC ; FxArrayElement::FxArrayElement + Line 468: EXTRN ??0FxFunctionCall@@QEAA@VFName@@0AEAV?$TDeletingArray@PEAVFxExpression@@PEAV1@@@AEBUFScriptPosition@@@Z:PROC ; FxFunctionCall::FxFunctionCall + Line 469: EXTRN ??0FxMemberFunctionCall@@QEAA@PEAVFxExpression@@VFName@@AEAV?$TDeletingArray@PEAVFxExpression@@PEAV1@@@AEBUFScriptPosition@@@Z:PROC ; FxMemberFunctionCall::FxMemberFunctionCall + Line 470: EXTRN ??0FxVMFunctionCall@@QEAA@PEAVFxExpression@@PEAVPFunction@@AEAV?$TDeletingArray@PEAVFxExpression@@PEAV1@@@AEBUFScriptPosition@@_N@Z:PROC ; FxVMFunctionCall::FxVMFunctionCall + Line 471: EXTRN ?Resolve@FxSequence@@UEAAPEAVFxExpression@@AEAUFCompileContext@@@Z:PROC ; FxSequence::Resolve + Line 472: EXTRN ?Emit@FxSequence@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxSequence::Emit + Line 473: EXTRN ?GetDirectFunction@FxSequence@@UEAAPEAVVMFunction@@PEAVPFunction@@AEBUVersionInfo@@@Z:PROC ; FxSequence::GetDirectFunction + Line 474: EXTRN ?CheckReturn@FxSequence@@UEAA_NXZ:PROC ; FxSequence::CheckReturn + Line 475: EXTRN ??_EFxSequence@@UEAAPEAXI@Z:PROC ; FxSequence::`vector deleting destructor' + Line 476: EXTRN ?Resolve@FxCompoundStatement@@UEAAPEAVFxExpression@@AEAUFCompileContext@@@Z:PROC ; FxCompoundStatement::Resolve + Line 477: EXTRN ?Emit@FxCompoundStatement@@UEAA?AUExpEmit@@PEAVVMFunctionBuilder@@@Z:PROC ; FxCompoundStatement::Emit + Line 478: EXTRN ??_EFxCompoundStatement@@UEAAPEAXI@Z:PROC ; FxCompoundStatement::`vector deleting destructor' + Line 479: EXTRN ??0FxSwitchStatement@@QEAA@PEAVFxExpression@@AEAV?$TDeletingArray@PEAVFxExpression@@PEAV1@@@AEBUFScriptPosition@@@Z:PROC ; FxSwitchStatement::FxSwitchStatement + Line 480: EXTRN ??0FxCaseStatement@@QEAA@PEAVFxExpression@@AEBUFScriptPosition@@@Z:PROC ; FxCaseStatement::FxCaseStatement + Line 481: EXTRN ??0FxIfStatement@@QEAA@PEAVFxExpression@@00AEBUFScriptPosition@@@Z:PROC ; FxIfStatement::FxIfStatement + Line 482: EXTRN ??0FxWhileLoop@@QEAA@PEAVFxExpression@@0AEBUFScriptPosition@@@Z:PROC ; FxWhileLoop::FxWhileLoop + Line 483: EXTRN ??0FxDoWhileLoop@@QEAA@PEAVFxExpression@@0AEBUFScriptPosition@@@Z:PROC ; FxDoWhileLoop::FxDoWhileLoop + Line 484: EXTRN ??0FxForLoop@@QEAA@PEAVFxExpression@@000AEBUFScriptPosition@@@Z:PROC ; FxForLoop::FxForLoop + Line 485: EXTRN ??0FxJumpStatement@@QEAA@HAEBUFScriptPosition@@@Z:PROC ; FxJumpStatement::FxJumpStatement + Line 486: EXTRN ??0FxReturnStatement@@QEAA@PEAVFxExpression@@AEBUFScriptPosition@@@Z:PROC ; FxReturnStatement::FxReturnStatement + Line 487: EXTRN ??0FxReturnStatement@@QEAA@AEAV?$TDeletingArray@PEAVFxExpression@@PEAV1@@@AEBUFScriptPosition@@@Z:PROC ; FxReturnStatement::FxReturnStatement + Line 488: EXTRN ??0FxClassPtrCast@@QEAA@PEAVPClass@@PEAVFxExpression@@@Z:PROC ; FxClassPtrCast::FxClassPtrCast + Line 489: EXTRN ??_EFxNop@@UEAAPEAXI@Z:PROC ; FxNop::`vector deleting destructor' + Line 490: EXTRN ??0FxLocalVariableDeclaration@@QEAA@PEAVPType@@VFName@@PEAVFxExpression@@HAEBUFScriptPosition@@@Z:PROC ; FxLocalVariableDeclaration::FxLocalVariableDeclaration + Line 491: EXTRN ??0FxStaticArray@@QEAA@PEAVPType@@VFName@@AEAV?$TDeletingArray@PEAVFxExpression@@PEAV1@@@AEBUFScriptPosition@@@Z:PROC ; FxStaticArray::FxStaticArray + Line 492: EXTRN ??_EFxNamedNode@@UEAAPEAXI@Z:PROC ; FxNamedNode::`vector deleting destructor' + Line 493: EXTRN ??0FxLocalArrayDeclaration@@QEAA@PEAVPType@@VFName@@AEAV?$TDeletingArray@PEAVFxExpression@@PEAV1@@@HAEBUFScriptPosition@@@Z:PROC ; FxLocalArrayDeclaration::FxLocalArrayDeclaration + Line 494: EXTRN ?P_FindLineSpecial@@YAHPEBDPEAH1@Z:PROC ; P_FindLineSpecial + Line 495: EXTRN ?isActor@@YA_NPEAVPContainerType@@@Z:PROC ; isActor + Line 496: EXTRN ?AddActorInfo@@YAXPEAVPClass@@@Z:PROC ; AddActorInfo + Line 497: EXTRN __CxxFrameHandler3:PROC + Line 498: EXTRN memmove:PROC + Line 499: EXTRN memset:PROC + Line 500: EXTRN _Init_thread_epoch:DWORD + Line 501: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 502: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 503: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 504: EXTRN ?RegistrationInfo@DObject@@2UClassReg@@A:BYTE ; DObject::RegistrationInfo + Line 505: EXTRN ?ClassDataAllocator@@3VFMemArena@@A:BYTE ; ClassDataAllocator + Line 506: EXTRN ?RegistrationInfo@PSymbolType@@2UClassReg@@A:BYTE ; PSymbolType::RegistrationInfo + Line 507: EXTRN ?RegistrationInfo@PSymbolTreeNode@@2UClassReg@@A:BYTE ; PSymbolTreeNode::RegistrationInfo + Line 508: EXTRN ?RegistrationInfo@PField@@2UClassReg@@A:BYTE ; PField::RegistrationInfo + Line 509: EXTRN ?RegistrationInfo@PProperty@@2UClassReg@@A:BYTE ; PProperty::RegistrationInfo + Line 510: EXTRN ?RegistrationInfo@PPropFlag@@2UClassReg@@A:BYTE ; PPropFlag::RegistrationInfo + Line 511: EXTRN ?RegistrationInfo@PSymbolConst@@2UClassReg@@A:BYTE ; PSymbolConst::RegistrationInfo + Line 512: EXTRN ?RegistrationInfo@PSymbolConstNumeric@@2UClassReg@@A:BYTE ; PSymbolConstNumeric::RegistrationInfo + Line 513: EXTRN ?RegistrationInfo@PSymbolConstString@@2UClassReg@@A:BYTE ; PSymbolConstString::RegistrationInfo + Line 514: EXTRN ?RegistrationInfo@PFunction@@2UClassReg@@A:BYTE ; PFunction::RegistrationInfo + Line 515: EXTRN ?AllClasses@PClass@@2V?$TArray@PEAVPClass@@PEAV1@@@A:BYTE ; PClass::AllClasses + Line 516: EXTRN ?WarnCounter@FScriptPosition@@2HA:DWORD ; FScriptPosition::WarnCounter + Line 517: EXTRN ?ErrorCounter@FScriptPosition@@2HA:DWORD ; FScriptPosition::ErrorCounter + Line 518: EXTRN ?errorout@FScriptPosition@@2_NA:BYTE ; FScriptPosition::errorout + Line 519: EXTRN ?RegistrationInfo@AActor@@2UClassReg@@A:BYTE ; AActor::RegistrationInfo + Line 520: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 521: EXTRN ?TypeError@@3PEAVPErrorType@@EA:QWORD ; TypeError + Line 522: EXTRN ?TypeAuto@@3PEAVPErrorType@@EA:QWORD ; TypeAuto + Line 523: EXTRN ?TypeSInt8@@3PEAVPInt@@EA:QWORD ; TypeSInt8 + Line 524: EXTRN ?TypeUInt8@@3PEAVPInt@@EA:QWORD ; TypeUInt8 + Line 525: EXTRN ?TypeSInt16@@3PEAVPInt@@EA:QWORD ; TypeSInt16 + Line 526: EXTRN ?TypeUInt16@@3PEAVPInt@@EA:QWORD ; TypeUInt16 + Line 527: EXTRN ?TypeSInt32@@3PEAVPInt@@EA:QWORD ; TypeSInt32 + Line 528: EXTRN ?TypeUInt32@@3PEAVPInt@@EA:QWORD ; TypeUInt32 + Line 529: EXTRN ?TypeBool@@3PEAVPBool@@EA:QWORD ; TypeBool + Line 530: EXTRN ?TypeFloat32@@3PEAVPFloat@@EA:QWORD ; TypeFloat32 + Line 531: EXTRN ?TypeFloat64@@3PEAVPFloat@@EA:QWORD ; TypeFloat64 + Line 532: EXTRN ?TypeString@@3PEAVPString@@EA:QWORD ; TypeString + Line 533: EXTRN ?TypeName@@3PEAVPName@@EA:QWORD ; TypeName + Line 534: EXTRN ?TypeSound@@3PEAVPSound@@EA:QWORD ; TypeSound + Line 535: EXTRN ?TypeColor@@3PEAVPColor@@EA:QWORD ; TypeColor + Line 536: EXTRN ?TypeTextureID@@3PEAVPTextureID@@EA:QWORD ; TypeTextureID + Line 537: EXTRN ?TypeSpriteID@@3PEAVPSpriteID@@EA:QWORD ; TypeSpriteID + Line 538: EXTRN ?TypeVector2@@3PEAVPStruct@@EA:QWORD ; TypeVector2 + Line 539: EXTRN ?TypeVector3@@3PEAVPStruct@@EA:QWORD ; TypeVector3 + Line 540: EXTRN ?TypeState@@3PEAVPStatePointer@@EA:QWORD ; TypeState + Line 541: EXTRN ?TypeStateLabel@@3PEAVPStateLabel@@EA:QWORD ; TypeStateLabel + Line 542: EXTRN ?TypeNullPtr@@3PEAVPPointer@@EA:QWORD ; TypeNullPtr + Line 543: EXTRN ?TypeVoidPtr@@3PEAVPPointer@@EA:QWORD ; TypeVoidPtr + Line 544: EXTRN ?FunctionBuildList@@3VFFunctionBuildList@@A:BYTE ; FunctionBuildList + Line 545: EXTRN ?FxAlloc@@3VFMemArena@@A:BYTE ; FxAlloc + Line 546: EXTRN __ImageBase:BYTE + Line 547: EXTRN _fltused:DWORD + Line 548: EXTRN _tls_index:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\zcc_parser.cod (82 hits) + Line 1091: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 1092: EXTRN atexit:PROC + Line 1093: EXTRN __std_terminate:PROC + Line 1094: EXTRN free:PROC + Line 1095: EXTRN malloc:PROC + Line 1096: EXTRN realloc:PROC + Line 1097: EXTRN strtoll:PROC + Line 1098: EXTRN strtoull:PROC + Line 1099: EXTRN ?M_Malloc@@YAPEAX_K@Z:PROC ; M_Malloc + Line 1100: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 1101: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 1102: EXTRN ?FindName@NameManager@FName@@QEAAHPEBD_N@Z:PROC ; FName::NameManager::FindName + Line 1103: EXTRN ??0FString@@QEAA@PEBD@Z:PROC ; FString::FString + Line 1104: EXTRN ??1FString@@QEAA@XZ:PROC ; FString::~FString + Line 1105: EXTRN ??HFString@@QEBA?AV0@AEBV0@@Z:PROC ; FString::operator+ + Line 1106: EXTRN ??YFString@@QEAAAEAV0@AEBV0@@Z:PROC ; FString::operator+= + Line 1107: EXTRN ??YFString@@QEAAAEAV0@PEBD@Z:PROC ; FString::operator+= + Line 1108: EXTRN ?ReplaceChars@FString@@QEAAXPEBDD@Z:PROC ; FString::ReplaceChars + Line 1109: EXTRN ?AttachToOther@FString@@IEAAXAEBV1@@Z:PROC ; FString::AttachToOther + Line 1110: EXTRN ?Printf@@YAHPEBDZZ:PROC ; Printf + Line 1111: EXTRN ?DPrintf@@YAHHPEBDZZ:PROC ; DPrintf + Line 1112: EXTRN ??4VersionInfo@@QEAAXPEBD@Z:PROC ; VersionInfo::operator= + Line 1113: EXTRN ?I_Error@@YAXPEBDZZ:PROC ; I_Error + Line 1114: EXTRN ?I_FatalError@@YAXPEBDZZ:PROC ; I_FatalError + Line 1115: EXTRN ??0FMemArena@@QEAA@_K@Z:PROC ; FMemArena::FMemArena + Line 1116: EXTRN ??1FMemArena@@QEAA@XZ:PROC ; FMemArena::~FMemArena + Line 1117: EXTRN ?Alloc@FMemArena@@QEAAPEAX_K@Z:PROC ; FMemArena::Alloc + Line 1118: EXTRN ??0FSharedStringArena@@QEAA@XZ:PROC ; FSharedStringArena::FSharedStringArena + Line 1119: EXTRN ??1FSharedStringArena@@QEAA@XZ:PROC ; FSharedStringArena::~FSharedStringArena + Line 1120: EXTRN ?Alloc@FSharedStringArena@@QEAAPEAVFString@@AEBV2@@Z:PROC ; FSharedStringArena::Alloc + Line 1121: EXTRN ?Alloc@FSharedStringArena@@QEAAPEAVFString@@PEBD@Z:PROC ; FSharedStringArena::Alloc + Line 1122: EXTRN ?Alloc@FSharedStringArena@@QEAAPEAVFString@@PEBD_K@Z:PROC ; FSharedStringArena::Alloc + Line 1123: EXTRN ??0PSymbolTable@@QEAA@XZ:PROC ; PSymbolTable::PSymbolTable + Line 1124: EXTRN ??1PSymbolTable@@QEAA@XZ:PROC ; PSymbolTable::~PSymbolTable + Line 1125: EXTRN ?NewNamespace@FNamespaceManager@@QEAAPEAVPNamespace@@H@Z:PROC ; FNamespaceManager::NewNamespace + Line 1126: EXTRN ??0FScanner@@QEAA@XZ:PROC ; FScanner::FScanner + Line 1127: EXTRN ??1FScanner@@QEAA@XZ:PROC ; FScanner::~FScanner + Line 1128: EXTRN ?OpenLumpNum@FScanner@@QEAAXH@Z:PROC ; FScanner::OpenLumpNum + Line 1129: EXTRN ?SetStateMode@FScanner@@QEAAX_N@Z:PROC ; FScanner::SetStateMode + Line 1130: EXTRN ?SavePos@FScanner@@QEAA?BUSavedPos@1@XZ:PROC ; FScanner::SavePos + Line 1131: EXTRN ?RestorePos@FScanner@@QEAAXAEBUSavedPos@1@@Z:PROC ; FScanner::RestorePos + Line 1132: EXTRN ?TokenName@FScanner@@SA?AVFString@@HPEBD@Z:PROC ; FScanner::TokenName + Line 1133: EXTRN ?MustGetString@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetString + Line 1134: EXTRN ?GetToken@FScanner@@QEAA_NXZ:PROC ; FScanner::GetToken + Line 1135: EXTRN ?MustGetAnyToken@FScanner@@QEAAXXZ:PROC ; FScanner::MustGetAnyToken + Line 1136: EXTRN ?UnGet@FScanner@@QEAAXXZ:PROC ; FScanner::UnGet + Line 1137: EXTRN ?GetMessageLine@FScanner@@QEAAHXZ:PROC ; FScanner::GetMessageLine + Line 1138: EXTRN ?ScriptError@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptError + Line 1139: EXTRN ?ScriptMessage@FScanner@@QEAAXPEBDZZ:PROC ; FScanner::ScriptMessage + Line 1140: EXTRN ??0FScriptPosition@@QEAA@AEBU0@@Z:PROC ; FScriptPosition::FScriptPosition + Line 1141: EXTRN ??0FScriptPosition@@QEAA@VFString@@H@Z:PROC ; FScriptPosition::FScriptPosition + Line 1142: EXTRN ?Message@FScriptPosition@@QEBAXHPEBDZZ:PROC ; FScriptPosition::Message + Line 1143: EXTRN ?Open@FileWriter@@SAPEAV1@PEBD@Z:PROC ; FileWriter::Open + Line 1144: EXTRN ?GetWadFullName@FWadCollection@@QEBAPEBDH@Z:PROC ; FWadCollection::GetWadFullName + Line 1145: EXTRN ?CheckNumForFullName@FWadCollection@@QEAAHPEBD_NH1@Z:PROC ; FWadCollection::CheckNumForFullName + Line 1146: EXTRN ?FindLump@FWadCollection@@QEAAHPEBDPEAH_N@Z:PROC ; FWadCollection::FindLump + Line 1147: EXTRN ?GetLumpFullPath@FWadCollection@@QEBA?AVFString@@H@Z:PROC ; FWadCollection::GetLumpFullPath + Line 1148: EXTRN ?GetLumpFile@FWadCollection@@QEBAHH@Z:PROC ; FWadCollection::GetLumpFile + Line 1149: EXTRN ?CheckParm@FArgs@@QEBAHPEBDH@Z:PROC ; FArgs::CheckParm + Line 1150: EXTRN ?ZCC_PrintAST@@YA?AVFString@@PEAUZCC_TreeNode@@@Z:PROC ; ZCC_PrintAST + Line 1151: EXTRN ??0ZCCCompiler@@QEAA@AEAUZCC_AST@@PEAVDObject@@AEAUPSymbolTable@@PEAVPNamespace@@HAEBUVersionInfo@@@Z:PROC ; ZCCCompiler::ZCCCompiler + Line 1152: EXTRN ??1ZCCCompiler@@QEAA@XZ:PROC ; ZCCCompiler::~ZCCCompiler + Line 1153: EXTRN ?Compile@ZCCCompiler@@QEAAHXZ:PROC ; ZCCCompiler::Compile + Line 1154: EXTRN __CxxFrameHandler3:PROC + Line 1155: EXTRN ?NameData@FName@@1UNameManager@1@A:BYTE ; FName::NameData + Line 1156: EXTRN ?NullString@FString@@1UFNullStringData@@A:BYTE ; FString::NullString + Line 1157: EXTRN ?Namespaces@@3UFNamespaceManager@@A:BYTE ; Namespaces + Line 1158: EXTRN ?WarnCounter@FScriptPosition@@2HA:DWORD ; FScriptPosition::WarnCounter + Line 1159: EXTRN ?ErrorCounter@FScriptPosition@@2HA:DWORD ; FScriptPosition::ErrorCounter + Line 1160: EXTRN ?Wads@@3VFWadCollection@@A:BYTE ; Wads + Line 1161: EXTRN ?Args@@3PEAVFArgs@@EA:QWORD ; Args + Line 1162: EXTRN ?TypeSInt32@@3PEAVPInt@@EA:QWORD ; TypeSInt32 + Line 1163: EXTRN ?TypeUInt32@@3PEAVPInt@@EA:QWORD ; TypeUInt32 + Line 1164: EXTRN ?TypeBool@@3PEAVPBool@@EA:QWORD ; TypeBool + Line 1165: EXTRN ?TypeFloat64@@3PEAVPFloat@@EA:QWORD ; TypeFloat64 + Line 1166: EXTRN ?TypeString@@3PEAVPString@@EA:QWORD ; TypeString + Line 1167: EXTRN ?TypeName@@3PEAVPName@@EA:QWORD ; TypeName + Line 1168: EXTRN ?TypeVector2@@3PEAVPStruct@@EA:QWORD ; TypeVector2 + Line 1169: EXTRN ?TypeVector3@@3PEAVPStruct@@EA:QWORD ; TypeVector3 + Line 1170: EXTRN ?TypeNullPtr@@3PEAVPPointer@@EA:QWORD ; TypeNullPtr + Line 1171: EXTRN __ImageBase:BYTE + Line 1172: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\zstrformat.cod (5 hits) + Line 85: EXTRN localeconv:PROC + Line 86: EXTRN dtoa:PROC + Line 87: EXTRN freedtoa:PROC + Line 88: EXTRN memcpy:PROC + Line 89: EXTRN _fltused:DWORD + C:\Programming\Doom-Dev\GZDoom\build_vc2017-64\src\Release\zstring.cod (30 hits) + Line 135: EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete + Line 136: EXTRN strtod:PROC + Line 137: EXTRN strtoll:PROC + Line 138: EXTRN strtoull:PROC + Line 139: EXTRN isupper:PROC + Line 140: EXTRN isspace:PROC + Line 141: EXTRN toupper:PROC + Line 142: EXTRN tolower:PROC + Line 143: EXTRN strchr:PROC + Line 144: EXTRN strstr:PROC + Line 145: EXTRN strncmp:PROC + Line 146: EXTRN strpbrk:PROC + Line 147: EXTRN __std_exception_copy:PROC + Line 148: EXTRN __std_exception_destroy:PROC + Line 149: EXTRN ??_Eexception@std@@UEAAPEAXI@Z:PROC ; std::exception::`vector deleting destructor' + Line 150: EXTRN ??_Ebad_alloc@std@@UEAAPEAXI@Z:PROC ; std::bad_alloc::`vector deleting destructor' + Line 151: EXTRN ?M_Realloc@@YAPEAXPEAX_K@Z:PROC ; M_Realloc + Line 152: EXTRN ?M_Free@@YAXPEAX@Z:PROC ; M_Free + Line 153: EXTRN ?VWorker@StringFormat@@YAHP6AHPEAXPEBDH@Z01PEAD@Z:PROC ; StringFormat::VWorker + Line 154: EXTRN __imp_HeapCreate:PROC + Line 155: EXTRN __imp_HeapAlloc:PROC + Line 156: EXTRN __imp_HeapReAlloc:PROC + Line 157: EXTRN __imp_HeapFree:PROC + Line 158: EXTRN _CxxThrowException:PROC + Line 159: EXTRN __CxxFrameHandler3:PROC + Line 160: EXTRN memcpy:PROC + Line 161: EXTRN memmove:PROC + Line 162: EXTRN memset:PROC + Line 163: EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' + Line 164: EXTRN _fltused:DWORD diff --git a/externs.zip b/externs.zip new file mode 100644 index 0000000000..e56c17d381 Binary files /dev/null and b/externs.zip differ diff --git a/p_destructible.cpp b/p_destructible.cpp new file mode 100644 index 0000000000..a3c9f88965 --- /dev/null +++ b/p_destructible.cpp @@ -0,0 +1,1073 @@ +/* +** +** +**--------------------------------------------------------------------------- +** Copyright 2018 ZZYZX +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions +** are met: +** +** 1. Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** 3. The name of the author may not be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**--------------------------------------------------------------------------- +** +*/ +#include "p_spec.h" +#include "g_levellocals.h" +#include "p_destructible.h" +#include "v_text.h" +#include "actor.h" +#include "p_trace.h" +#include "p_lnspec.h" +#include "r_sky.h" +#include "p_local.h" +#include "p_maputl.h" +#include "c_cvars.h" +#include "serializer.h" +#include "vm.h" +#include "events.h" + +//========================================================================== +// +// [ZZ] Geometry damage logic callbacks +// +//========================================================================== +void P_SetHealthGroupHealth(FHealthGroup* grp, int health) +{ + if (!grp) return; + + grp->health = health; + + // now set health of all linked objects to the same as this one + for (unsigned i = 0; i < grp->lines.Size(); i++) + { + line_t* lline = grp->lines[i]; + lline->health = health; + } + // + for (unsigned i = 0; i < grp->sectors.Size(); i++) + { + sector_t* lsector = grp->sectors[i]; + if (lsector->healthceilinggroup == grp->id) + lsector->healthceiling = health; + if (lsector->healthfloorgroup == grp->id) + lsector->healthfloor = health; + if (lsector->health3dgroup == grp->id) + lsector->health3d = health; + } +} + +void P_SetHealthGroupHealth(FLevelLocals *Level, int id, int health) +{ + P_SetHealthGroupHealth(P_GetHealthGroup(Level, id), health); +} + +void P_DamageHealthGroup(FHealthGroup* grp, void* object, AActor* source, int damage, FName damagetype, int side, int part, DVector3 position, bool isradius) +{ + if (!grp) return; + int group = grp->id; + + // now set health of all linked objects to the same as this one + for (unsigned i = 0; i < grp->lines.Size(); i++) + { + line_t* lline = grp->lines[i]; + if (lline == object) + continue; + lline->health = grp->health + damage; + P_DamageLinedef(lline, source, damage, damagetype, side, position, isradius, false); + } + // + for (unsigned i = 0; i < grp->sectors.Size(); i++) + { + sector_t* lsector = grp->sectors[i]; + + if (lsector->healthceilinggroup == group && (lsector != object || part != SECPART_Ceiling)) + { + lsector->healthceiling = grp->health + damage; + P_DamageSector(lsector, source, damage, damagetype, SECPART_Ceiling, position, isradius, false); + } + + if (lsector->healthfloorgroup == group && (lsector != object || part != SECPART_Floor)) + { + lsector->healthfloor = grp->health + damage; + P_DamageSector(lsector, source, damage, damagetype, SECPART_Floor, position, isradius, false); + } + + if (lsector->health3dgroup == group && (lsector != object || part != SECPART_3D)) + { + lsector->health3d = grp->health + damage; + P_DamageSector(lsector, source, damage, damagetype, SECPART_3D, position, isradius, false); + } + } +} + +void P_DamageLinedef(line_t* line, AActor* source, int damage, FName damagetype, int side, DVector3 position, bool isradius, bool dogroups) +{ + if (damage < 0) damage = 0; + + if (dogroups) + { + damage = E_WorldLineDamaged(line, source, damage, damagetype, side, position, isradius); + if (damage < 0) damage = 0; + } + + if (!damage) return; + + line->health -= damage; + if (line->health < 0) line->health = 0; + + // callbacks here + // first off, call special if needed + if ((line->activation & SPAC_Damage) || ((line->activation & SPAC_Death) && !line->health)) + { + int activateon = SPAC_Damage; + if (!line->health) activateon |= SPAC_Death; + P_ActivateLine(line, source, side, activateon&line->activation, &position); + } + + if (dogroups && line->healthgroup) + { + FHealthGroup* grp = P_GetHealthGroup(line->GetLevel(), line->healthgroup); + if (grp) + grp->health = line->health; + P_DamageHealthGroup(grp, line, source, damage, damagetype, side, -1, position, isradius); + } + + //Printf("P_DamageLinedef: %d damage (type=%s, source=%p), new health = %d\n", damage, damagetype.GetChars(), source, line->health); +} + +void P_DamageSector(sector_t* sector, AActor* source, int damage, FName damagetype, int part, DVector3 position, bool isradius, bool dogroups) +{ + if (damage < 0) damage = 0; + + if (dogroups) + { + damage = E_WorldSectorDamaged(sector, source, damage, damagetype, part, position, isradius); + if (damage < 0) damage = 0; + } + + if (!damage) return; + + int* sectorhealth; + int group; + int dmg; + int dth; + switch (part) + { + case SECPART_Ceiling: + sectorhealth = §or->healthceiling; + group = sector->healthceilinggroup; + dmg = SECSPAC_DamageCeiling; + dth = SECSPAC_DeathCeiling; + break; + case SECPART_Floor: + sectorhealth = §or->healthfloor; + group = sector->healthfloorgroup; + dmg = SECSPAC_DamageFloor; + dth = SECSPAC_DeathFloor; + break; + case SECPART_3D: + sectorhealth = §or->health3d; + group = sector->health3dgroup; + dmg = SECSPAC_Damage3D; + dth = SECSPAC_Death3D; + break; + default: + return; + } + + int newhealth = *sectorhealth - damage; + if (newhealth < 0) newhealth = 0; + + *sectorhealth = newhealth; + + // callbacks here + if (sector->SecActTarget) + { + sector->TriggerSectorActions(source, dmg); + if (newhealth == 0) + sector->TriggerSectorActions(source, dth); + } + + if (dogroups && group) + { + FHealthGroup* grp = P_GetHealthGroup(sector->Level, group); + if (grp) + grp->health = newhealth; + P_DamageHealthGroup(grp, sector, source, damage, damagetype, 0, part, position, isradius); + } + + //Printf("P_DamageSector: %d damage (type=%s, position=%s, source=%p), new health = %d\n", damage, damagetype.GetChars(), (part == SECPART_Ceiling) ? "ceiling" : "floor", source, newhealth); +} + + +//=========================================================================== +// +// +// +//=========================================================================== + +FHealthGroup* P_GetHealthGroup(FLevelLocals *Level, int id) +{ + FHealthGroup* grp = Level->healthGroups.CheckKey(id); + return grp; +} + +FHealthGroup* P_GetHealthGroupOrNew(FLevelLocals *Level, int id, int health) +{ + FHealthGroup* grp = Level->healthGroups.CheckKey(id); + if (!grp) + { + FHealthGroup newgrp; + newgrp.id = id; + newgrp.health = health; + grp = &(Level->healthGroups.Insert(id, newgrp)); + } + return grp; +} + +void P_InitHealthGroups(FLevelLocals *Level) +{ + Level->healthGroups.Clear(); + TArray groupsInError; + for (unsigned i = 0; i < Level->lines.Size(); i++) + { + line_t* lline = &Level->lines[i]; + if (lline->healthgroup > 0) + { + FHealthGroup* grp = P_GetHealthGroupOrNew(Level, lline->healthgroup, lline->health); + if (grp->health != lline->health) + { + Printf(TEXTCOLOR_RED "Warning: line %d in health group %d has different starting health (line health = %d, group health = %d)\n", i, lline->healthgroup, lline->health, grp->health); + groupsInError.Push(lline->healthgroup); + if (lline->health > grp->health) + grp->health = lline->health; + } + grp->lines.Push(lline); + } + } + for (unsigned i = 0; i < Level->sectors.Size(); i++) + { + sector_t* lsector = &Level->sectors[i]; + if (lsector->healthceilinggroup > 0) + { + FHealthGroup* grp = P_GetHealthGroupOrNew(Level, lsector->healthceilinggroup, lsector->healthceiling); + if (grp->health != lsector->healthceiling) + { + Printf(TEXTCOLOR_RED "Warning: sector ceiling %d in health group %d has different starting health (ceiling health = %d, group health = %d)\n", i, lsector->healthceilinggroup, lsector->healthceiling, grp->health); + groupsInError.Push(lsector->healthceilinggroup); + if (lsector->healthceiling > grp->health) + grp->health = lsector->healthceiling; + } + grp->sectors.Push(lsector); + } + if (lsector->healthfloorgroup > 0) + { + FHealthGroup* grp = P_GetHealthGroupOrNew(Level, lsector->healthfloorgroup, lsector->healthfloor); + if (grp->health != lsector->healthfloor) + { + Printf(TEXTCOLOR_RED "Warning: sector floor %d in health group %d has different starting health (floor health = %d, group health = %d)\n", i, lsector->healthfloorgroup, lsector->healthfloor, grp->health); + groupsInError.Push(lsector->healthfloorgroup); + if (lsector->healthfloor > grp->health) + grp->health = lsector->healthfloor; + } + if (lsector->healthceilinggroup != lsector->healthfloorgroup) + grp->sectors.Push(lsector); + } + } + for (unsigned i = 0; i < groupsInError.Size(); i++) + { + FHealthGroup* grp = P_GetHealthGroup(Level, groupsInError[i]); + Printf(TEXTCOLOR_GOLD "Health group %d is using the highest found health value of %d", groupsInError[i], grp->health); + } +} + +//========================================================================== +// +// P_GeometryLineAttack +// +// Applies hitscan damage to geometry (lines and sectors with health>0) +//========================================================================== + +void P_GeometryLineAttack(FTraceResults& trace, AActor* thing, int damage, FName damageType) +{ + // [ZZ] hitscan geometry damage logic + // + + // check 3d floor, but still allow the wall to take generic damage + if (trace.HitType == TRACE_HitWall && trace.Tier == TIER_FFloor) + { + if (trace.ffloor && trace.ffloor->model && trace.ffloor->model->health3d) + P_DamageSector(trace.ffloor->model, thing, damage, damageType, SECPART_3D, trace.HitPos, false, true); + } + + if (trace.HitType == TRACE_HitWall && P_CheckLinedefVulnerable(trace.Line, trace.Side)) + { + if (trace.Tier == TIER_Lower || trace.Tier == TIER_Upper) // process back sector health if any + { + sector_t* backsector = (trace.Line->sidedef[!trace.Side] ? trace.Line->sidedef[!trace.Side]->sector : nullptr); + int sectorhealth = 0; + if (backsector && trace.Tier == TIER_Lower && backsector->healthfloor > 0 && P_CheckLinedefVulnerable(trace.Line, trace.Side, SECPART_Floor)) + sectorhealth = backsector->healthfloor; + if (backsector && trace.Tier == TIER_Upper && backsector->healthceiling > 0 && P_CheckLinedefVulnerable(trace.Line, trace.Side, SECPART_Ceiling)) + sectorhealth = backsector->healthceiling; + if (sectorhealth > 0) + { + P_DamageSector(backsector, thing, damage, damageType, (trace.Tier == TIER_Upper) ? SECPART_Ceiling : SECPART_Floor, trace.HitPos, false, true); + } + } + // always process linedef health if any + if (trace.Line->health > 0) + { + P_DamageLinedef(trace.Line, thing, damage, damageType, trace.Side, trace.HitPos, false, true); + } + // fake floors are not handled + } + else if (trace.HitType == TRACE_HitFloor || trace.HitType == TRACE_HitCeiling) + { + // check for 3d floors. if a 3d floor was hit, it'll block any interaction with the sector planes at the same point, if present. + // i.e. if there are 3d floors at the same height as the sector's real floor/ceiling, and they blocked the shot, then it won't damage. + bool hit3dfloors = false; + sector_t* sector = trace.Sector; + for (auto f : sector->e->XFloor.ffloors) + { + if (!(f->flags & FF_EXISTS)) continue; + if (!(f->flags & FF_SOLID) || (f->flags & FF_SHOOTTHROUGH)) continue; + + if (!f->model) continue; + if (trace.HitType == TRACE_HitFloor && fabs(f->top.plane->ZatPoint(trace.HitPos.XY())-trace.HitPos.Z) <= EQUAL_EPSILON) + { + if (f->model->health3d) + P_DamageSector(f->model, thing, damage, damageType, SECPART_3D, trace.HitPos, false, true); + hit3dfloors = true; + } + else if (trace.HitType == TRACE_HitCeiling && fabs(f->bottom.plane->ZatPoint(trace.HitPos.XY())-trace.HitPos.Z) <= EQUAL_EPSILON) + { + if (f->model->health3d) + P_DamageSector(f->model, thing, damage, damageType, SECPART_3D, trace.HitPos, false, true); + hit3dfloors = true; + } + } + + if (hit3dfloors) + return; + + int sectorhealth = 0; + if (trace.HitType == TRACE_HitFloor && trace.Sector->healthfloor > 0 && P_CheckSectorVulnerable(trace.Sector, SECPART_Floor)) + sectorhealth = trace.Sector->healthfloor; + if (trace.HitType == TRACE_HitCeiling && trace.Sector->healthceiling > 0 && P_CheckSectorVulnerable(trace.Sector, SECPART_Ceiling)) + sectorhealth = trace.Sector->healthceiling; + if (sectorhealth > 0) + { + P_DamageSector(trace.Sector, thing, damage, damageType, (trace.HitType == TRACE_HitCeiling) ? SECPART_Ceiling : SECPART_Floor, trace.HitPos, false, true); + } + } +} + +//========================================================================== +// +// P_GeometryRadiusAttack +// +// Applies radius damage to destructible geometry (lines and sectors with health>0) +//========================================================================== + +struct pgra_data_t +{ + DVector3 pos; + line_t* line; + sector_t* sector; + int secpart; +}; + +// we use this horizontally for 2D wall distance, and in a bit fancier way for 3D wall distance +static DVector2 PGRA_ClosestPointOnLine2D(DVector2 x, DVector2 p1, DVector2 p2) +{ + DVector2 p2p1 = (p2 - p1); + DVector2 xp1 = (x - p1); + double r = p2p1 | xp1; + double len = p2p1.Length(); + r /= len; + + if (r < 0) + return p1; + if (r > len) + return p2; + + return p1 + p2p1.Unit() * r; +} + +static bool PGRA_CheckExplosionBlocked(DVector3 pt, DVector3 check, sector_t* checksector) +{ + // simple solid geometry sight check between "check" and "pt" + // expected - Trace hits nothing + check.Z += EQUAL_EPSILON; // this is so that floor under the rocket doesn't block explosion + DVector3 ptVec = (pt - check); + double ptDst = ptVec.Length() - 0.5; + ptVec.MakeUnit(); + FTraceResults res; + bool isblocked = Trace(check, checksector, ptVec, ptDst, 0, ML_BLOCKEVERYTHING, nullptr, res); + return isblocked; +} + +static void PGRA_InsertIfCloser(TMap& damageGroupPos, int group, DVector3 pt, DVector3 check, sector_t* checksector, sector_t* sector, line_t* line, int secpart) +{ + if (PGRA_CheckExplosionBlocked(pt, check, checksector)) + return; + + pgra_data_t* existing = damageGroupPos.CheckKey(group); + // not present or distance is closer + if (!existing || (((*existing).pos - check).Length() > (pt - check).Length())) + { + if (!existing) existing = &damageGroupPos.Insert(group, pgra_data_t()); + existing->pos = pt; + existing->line = line; + existing->sector = sector; + existing->secpart = secpart; + } +} + +EXTERN_CVAR(Float, splashfactor); + +void P_GeometryRadiusAttack(AActor* bombspot, AActor* bombsource, int bombdamage, int bombdistance, FName damagetype, int fulldamagedistance) +{ + TMap damageGroupPos; + + double bombdistancefloat = 1. / (double)(bombdistance - fulldamagedistance); + + // now, this is not entirely correct... but sector actions still _do_ require a valid source actor to trigger anything + if (!bombspot) + return; + if (!bombsource) + bombsource = bombspot; + + // check current sector floor and ceiling. this is the only *sector* checked, otherwise only use lines + // a bit imprecise, but should work + sector_t* srcsector = bombspot->Sector; + + if (srcsector->healthceiling > 0) + { + double dstceiling = srcsector->ceilingplane.Normal() | (bombspot->Pos() + srcsector->ceilingplane.Normal()*srcsector->ceilingplane.D); + DVector3 spotTo = bombspot->Pos() - srcsector->ceilingplane.Normal() * dstceiling; + int grp = srcsector->healthceilinggroup; + if (grp <= 0) + grp = 0x80000000 | (srcsector->sectornum & 0x0FFFFFFF); + PGRA_InsertIfCloser(damageGroupPos, grp, spotTo, bombspot->Pos(), srcsector, srcsector, nullptr, SECPART_Ceiling); + } + + if (srcsector->healthfloor > 0) + { + double dstfloor = srcsector->floorplane.Normal() | (bombspot->Pos() + srcsector->floorplane.Normal()*srcsector->floorplane.D); + DVector3 spotTo = bombspot->Pos() - srcsector->floorplane.Normal() * dstfloor; + int grp = srcsector->healthfloorgroup; + if (grp <= 0) + grp = 0x40000000 | (srcsector->sectornum & 0x0FFFFFFF); + PGRA_InsertIfCloser(damageGroupPos, grp, spotTo, bombspot->Pos(), srcsector, srcsector, nullptr, SECPART_Floor); + } + + for (auto f : srcsector->e->XFloor.ffloors) + { + if (!(f->flags & FF_EXISTS)) continue; + if (!(f->flags & FF_SOLID)) continue; + + if (!f->model || !f->model->health3d) continue; + + double ff_top = f->top.plane->ZatPoint(bombspot->Pos()); + double ff_bottom = f->bottom.plane->ZatPoint(bombspot->Pos()); + if (ff_top < ff_bottom) // ignore eldritch geometry + continue; + + int grp = f->model->health3dgroup; + if (grp <= 0) + grp = 0x20000000 | (f->model->sectornum & 0x0FFFFFFF); + + DVector3 spotTo; + + if (bombspot->Z() < ff_bottom) // use bottom plane + { + double dst = f->bottom.plane->Normal() | (bombspot->Pos() + f->bottom.plane->Normal()*f->bottom.plane->D); + spotTo = bombspot->Pos() - f->bottom.plane->Normal() * dst; + } + else if (bombspot->Z() > ff_top) // use top plane + { + double dst = f->top.plane->Normal() | (bombspot->Pos() + f->top.plane->Normal()*f->top.plane->D); + spotTo = bombspot->Pos() - f->top.plane->Normal() * dst; + } + else // explosion right inside the floor. do 100% damage + { + spotTo = bombspot->Pos(); + } + + PGRA_InsertIfCloser(damageGroupPos, grp, spotTo, bombspot->Pos(), srcsector, f->model, nullptr, SECPART_3D); + } + + // enumerate all lines around + FBoundingBox bombbox(bombspot->X(), bombspot->Y(), bombdistance); + FBlockLinesIterator it(bombbox); + line_t* ln; + int vc = validcount; + TArray lines; + while ((ln = it.Next())) // iterator and Trace both use validcount and interfere with each other + lines.Push(ln); + for (unsigned i = 0; i < lines.Size(); i++) + { + ln = lines[i]; + DVector2 pos2d = bombspot->Pos().XY(); + int sd = P_PointOnLineSide(pos2d, ln); + + side_t* side = ln->sidedef[sd]; + if (!side) continue; + sector_t* sector = side->sector; + side_t* otherside = ln->sidedef[!sd]; + sector_t* othersector = otherside ? otherside->sector : nullptr; + if (!ln->health && (!othersector || (!othersector->healthfloor && !othersector->healthceiling && !othersector->e->XFloor.ffloors.Size()))) + continue; // non-interactive geometry + + DVector2 to2d = PGRA_ClosestPointOnLine2D(bombspot->Pos().XY(), side->V1()->p, side->V2()->p); + // this gives us x/y + double distto2d = (to2d - pos2d).Length(); + double z_top1, z_top2, z_bottom1, z_bottom2; // here, z_top1 is closest to the ceiling, and z_bottom1 is closest to the floor. + z_top1 = sector->ceilingplane.ZatPoint(to2d); + z_top2 = othersector ? othersector->ceilingplane.ZatPoint(to2d) : z_top1; + z_bottom1 = sector->floorplane.ZatPoint(to2d); + z_bottom2 = othersector ? othersector->floorplane.ZatPoint(to2d) : z_bottom1; + DVector3 to3d_fullheight(to2d.X, to2d.Y, clamp(bombspot->Z(), z_bottom1, z_top1)); + + if (ln->health && P_CheckLinedefVulnerable(ln, sd)) + { + bool cantdamage = false; + bool linefullheight = !othersector || !!(ln->flags & (ML_BLOCKEVERYTHING)); + // decide specific position to affect on a line. + if (!linefullheight) + { + z_top2 = othersector->ceilingplane.ZatPoint(to2d); + z_bottom2 = othersector->floorplane.ZatPoint(to2d); + double bombz = bombspot->Z(); + if (z_top2 > z_top1) + z_top2 = z_top1; + if (z_bottom2 < z_bottom1) + z_bottom2 = z_bottom1; + if (bombz <= z_top2 && bombz >= z_bottom2) // between top and bottom opening + to3d_fullheight.Z = (z_top2 - bombz < bombz - z_bottom2) ? z_top2 : z_bottom2; + else if (bombz < z_bottom2 && bombz >= z_bottom1) + to3d_fullheight.Z = clamp(bombz, z_bottom1, z_bottom2); + else if (bombz > z_top2 && bombz <= z_top1) + to3d_fullheight.Z = clamp(bombz, z_top2, z_top1); + else cantdamage = true; + } + + if (!cantdamage) + { + if (ln->healthgroup) + { + PGRA_InsertIfCloser(damageGroupPos, ln->healthgroup, to3d_fullheight, bombspot->Pos(), srcsector, nullptr, ln, -1); + } + else if (!PGRA_CheckExplosionBlocked(to3d_fullheight, bombspot->Pos(), srcsector)) + { + // otherwise just damage line + double dst = (to3d_fullheight - bombspot->Pos()).Length(); + int damage = 0; + if (dst < bombdistance) + { + dst = clamp(dst - (double)fulldamagedistance, 0, dst); + damage = (int)((double)bombdamage * (1. - dst * bombdistancefloat)); + if (bombsource == bombspot) + damage = (int)(damage * splashfactor); + } + P_DamageLinedef(ln, bombsource, damage, damagetype, sd, to3d_fullheight, true, true); + } + } + } + + if (othersector && othersector->healthceiling && P_CheckLinedefVulnerable(ln, sd, SECPART_Ceiling)) + { + if (z_top2 < z_top1) // we have front side to hit against + { + DVector3 to3d_upper(to2d.X, to2d.Y, clamp(bombspot->Z(), z_top2, z_top1)); + int grp = othersector->healthceilinggroup; + if (grp <= 0) + grp = 0x80000000 | (othersector->sectornum & 0x0FFFFFFF); + PGRA_InsertIfCloser(damageGroupPos, grp, to3d_upper, bombspot->Pos(), srcsector, othersector, nullptr, SECPART_Ceiling); + } + } + + if (othersector && othersector->healthfloor && P_CheckLinedefVulnerable(ln, sd, SECPART_Floor)) + { + if (z_bottom2 > z_bottom1) // we have front side to hit against + { + DVector3 to3d_lower(to2d.X, to2d.Y, clamp(bombspot->Z(), z_bottom1, z_bottom2)); + int grp = othersector->healthfloorgroup; + if (grp <= 0) + grp = 0x40000000 | (othersector->sectornum & 0x0FFFFFFF); + PGRA_InsertIfCloser(damageGroupPos, grp, to3d_lower, bombspot->Pos(), srcsector, othersector, nullptr, SECPART_Floor); + } + } + + // check 3d floors + if (othersector) + { + for (auto f : othersector->e->XFloor.ffloors) + { + if (!(f->flags & FF_EXISTS)) continue; + if (!(f->flags & FF_SOLID)) continue; + + if (!f->model || !f->model->health3d) continue; + + // 3d floors over real ceiling, or under real floor, are ignored + double z_ff_top = clamp(f->top.plane->ZatPoint(to2d), z_bottom2, z_top2); + double z_ff_bottom = clamp(f->bottom.plane->ZatPoint(to2d), z_bottom2, z_top2); + if (z_ff_top < z_ff_bottom) + continue; // also ignore eldritch geometry + + DVector3 to3d_ffloor(to2d.X, to2d.Y, clamp(bombspot->Z(), z_ff_bottom, z_ff_top)); + int grp = f->model->health3dgroup; + if (grp <= 0) + grp = 0x20000000 | (f->model->sectornum & 0x0FFFFFFF); + PGRA_InsertIfCloser(damageGroupPos, grp, to3d_ffloor, bombspot->Pos(), srcsector, f->model, nullptr, SECPART_3D); + } + } + + } + + // damage health groups and sectors. + // if group & 0x80000000, this is sector ceiling without health group + // if grpup & 0x40000000, this is sector floor without health group + // otherwise this is some object in health group + TMap::ConstIterator damageGroupIt(damageGroupPos); + TMap::ConstPair* damageGroupPair; + while (damageGroupIt.NextPair(damageGroupPair)) + { + DVector3 pos = damageGroupPair->Value.pos; + double dst = (pos - bombspot->Pos()).Length(); + int damage = 0; + if (dst < bombdistance) + { + dst = clamp(dst - (double)fulldamagedistance, 0, dst); + damage = (int)((double)bombdamage * (1. - dst * bombdistancefloat)); + if (bombsource == bombspot) + damage = (int)(damage * splashfactor); + } + + // for debug + //P_SpawnParticle(damageGroupPair->Value.pos, DVector3(), DVector3(), PalEntry(0xFF, 0x00, 0x00), 1.0, 35, 5.0, 0.0, 0.0, 0); + + int grp = damageGroupPair->Key; + if (grp & 0x80000000) // sector ceiling + { + assert(damageGroupPair->Value.sector != nullptr); + P_DamageSector(damageGroupPair->Value.sector, bombsource, damage, damagetype, SECPART_Ceiling, pos, true, true); + } + else if (grp & 0x40000000) // sector floor + { + assert(damageGroupPair->Value.sector != nullptr); + P_DamageSector(damageGroupPair->Value.sector, bombsource, damage, damagetype, SECPART_Floor, pos, true, true); + } + else if (grp & 0x20000000) // sector 3d + { + assert(damageGroupPair->Value.sector != nullptr); + P_DamageSector(damageGroupPair->Value.sector, bombsource, damage, damagetype, SECPART_3D, pos, true, true); + } + else + { + assert((damageGroupPair->Value.sector != nullptr) != (damageGroupPair->Value.line != nullptr)); + if (damageGroupPair->Value.line != nullptr) + P_DamageLinedef(damageGroupPair->Value.line, bombsource, damage, damagetype, P_PointOnLineSide(pos.XY(), damageGroupPair->Value.line), pos, true, true); + else P_DamageSector(damageGroupPair->Value.sector, bombsource, damage, damagetype, damageGroupPair->Value.secpart, pos, true, true); + } + } +} + +//========================================================================== +// +// P_ProjectileHitLinedef +// +// Called if P_ExplodeMissile was called against a wall. +//========================================================================== + +bool P_ProjectileHitLinedef(AActor* mo, line_t* line) +{ + bool washit = false; + // detect 3d floor hit + if (mo->Blocking3DFloor) + { + if (mo->Blocking3DFloor->health3d > 0) + { + P_DamageSector(mo->Blocking3DFloor, mo, mo->GetMissileDamage((mo->flags4 & MF4_STRIFEDAMAGE) ? 3 : 7, 1), mo->DamageType, SECPART_3D, mo->Pos(), false, true); + washit = true; + } + } + + int wside = P_PointOnLineSide(mo->Pos(), line); + int oside = !wside; + side_t* otherside = line->sidedef[oside]; + // check if hit upper or lower part + if (otherside) + { + sector_t* othersector = otherside->sector; + // find closest pos from line to MO. + // this logic is so that steep slopes work correctly (value at the line is used, instead of value below the rocket actor) + DVector2 moRelPos = line->v1->p - mo->Pos().XY(); + DVector2 lineNormal = line->delta.Rotated90CW().Unit(); + double moRelDst = lineNormal | moRelPos; + DVector2 moPos = mo->Pos().XY() - lineNormal*fabs(moRelDst); + + double otherfloorz = othersector->floorplane.ZatPoint(moPos); + double otherceilingz = othersector->ceilingplane.ZatPoint(moPos); + double zbottom = mo->Pos().Z; + double ztop = mo->Pos().Z + mo->Height; + if (zbottom < (otherfloorz + EQUAL_EPSILON) && othersector->healthfloor > 0 && P_CheckLinedefVulnerable(line, wside, SECPART_Floor)) + { + P_DamageSector(othersector, mo, mo->GetMissileDamage((mo->flags4 & MF4_STRIFEDAMAGE) ? 3 : 7, 1), mo->DamageType, SECPART_Floor, mo->Pos(), false, true); + washit = true; + } + if (ztop > (otherceilingz - EQUAL_EPSILON) && othersector->healthceiling > 0 && P_CheckLinedefVulnerable(line, wside, SECPART_Ceiling)) + { + P_DamageSector(othersector, mo, mo->GetMissileDamage((mo->flags4 & MF4_STRIFEDAMAGE) ? 3 : 7, 1), mo->DamageType, SECPART_Ceiling, mo->Pos(), false, true); + washit = true; + } + } + + if (line->health > 0 && P_CheckLinedefVulnerable(line, wside)) + { + P_DamageLinedef(line, mo, mo->GetMissileDamage((mo->flags4 & MF4_STRIFEDAMAGE) ? 3 : 7, 1), mo->DamageType, wside, mo->Pos(), false, true); + washit = true; + } + + return washit; +} + +// part = -1 means "detect from blocking" +bool P_ProjectileHitPlane(AActor* mo, int part) +{ + if (part < 0) + { + if (mo->BlockingCeiling) + part = SECPART_Ceiling; + else if (mo->BlockingFloor) + part = SECPART_Floor; + } + + // detect 3d floor hit + if (mo->Blocking3DFloor) + { + if (mo->Blocking3DFloor->health3d > 0) + { + P_DamageSector(mo->Blocking3DFloor, mo, mo->GetMissileDamage((mo->flags4 & MF4_STRIFEDAMAGE) ? 3 : 7, 1), mo->DamageType, SECPART_3D, mo->Pos(), false, true); + return true; + } + + return false; + } + + if (part == SECPART_Floor && mo->Sector->healthfloor > 0 && P_CheckSectorVulnerable(mo->Sector, SECPART_Floor)) + { + P_DamageSector(mo->Sector, mo, mo->GetMissileDamage((mo->flags4 & MF4_STRIFEDAMAGE) ? 3 : 7, 1), mo->DamageType, SECPART_Floor, mo->Pos(), false, true); + return true; + } + else if (part == SECPART_Ceiling && mo->Sector->healthceiling > 0 && P_CheckSectorVulnerable(mo->Sector, SECPART_Ceiling)) + { + P_DamageSector(mo->Sector, mo, mo->GetMissileDamage((mo->flags4 & MF4_STRIFEDAMAGE) ? 3 : 7, 1), mo->DamageType, SECPART_Ceiling, mo->Pos(), false, true); + return true; + } + + return false; +} + +//========================================================================== +// +// P_CheckLinedefVulnerable +// +// If sectorpart is <0: returns if linedef is damageable directly +// If sectorpart is valid (SECPART_ enum): returns if sector on sidedef is +// damageable through this line at specified sectorpart +//========================================================================== + +bool P_CheckLinedefVulnerable(line_t* line, int side, int sectorpart) +{ + if (line->special == Line_Horizon) + return false; + side_t* sidedef = line->sidedef[side]; + if (!sidedef) + return false; + return true; +} + +//========================================================================== +// +// P_CheckSectorVulnerable +// +// Returns true if sector's floor or ceiling is directly damageable +//========================================================================== + +bool P_CheckSectorVulnerable(sector_t* sector, int part) +{ + if (part == SECPART_3D) + return true; + FTextureID texture = sector->GetTexture((part == SECPART_Ceiling) ? sector_t::ceiling : sector_t::floor); + secplane_t* plane = (part == SECPART_Ceiling) ? §or->ceilingplane : §or->floorplane; + if (texture == skyflatnum) + return false; + return true; +} + +/// + +FSerializer &Serialize(FSerializer &arc, const char *key, FHealthGroup& g, FHealthGroup *def) +{ + if (arc.BeginObject(key)) + { + arc("id", g.id) + ("health", g.health) + .EndObject(); + } + return arc; +} + +void P_SerializeHealthGroups(FSerializer& arc) +{ + // todo : stuff + if (arc.BeginArray("healthgroups")) + { + if (arc.isReading()) + { + TArray readGroups; + int sz = arc.ArraySize(); + for (int i = 0; i < sz; i++) + { + FHealthGroup grp; + arc(nullptr, grp); + FHealthGroup* existinggrp = P_GetHealthGroup(grp.id); + if (!existinggrp) + continue; + existinggrp->health = grp.health; + } + } + else + { + TMap::ConstIterator it(level.healthGroups); + TMap::ConstPair* pair; + while (it.NextPair(pair)) + { + FHealthGroup grp = pair->Value; + arc(nullptr, grp); + } + } + + arc.EndArray(); + } +} + +// ===================== zscript interface ===================== +// +// ============================================================= + +DEFINE_FIELD_X(HealthGroup, FHealthGroup, id) +DEFINE_FIELD_X(HealthGroup, FHealthGroup, health) +DEFINE_FIELD_X(HealthGroup, FHealthGroup, sectors) +DEFINE_FIELD_X(HealthGroup, FHealthGroup, lines) + +DEFINE_ACTION_FUNCTION(FHealthGroup, Find) +{ + PARAM_PROLOGUE; + PARAM_INT(id); + FHealthGroup* grp = P_GetHealthGroup(id); + ACTION_RETURN_POINTER(grp); +} + +DEFINE_ACTION_FUNCTION(FHealthGroup, SetHealth) +{ + PARAM_SELF_STRUCT_PROLOGUE(FHealthGroup); + PARAM_INT(health); + P_SetHealthGroupHealth(self, health); + return 0; +} + +DEFINE_ACTION_FUNCTION(FDestructible, DamageSector) +{ + PARAM_PROLOGUE; + PARAM_POINTER(sec, sector_t); + PARAM_OBJECT(source, AActor); + PARAM_INT(damage); + PARAM_NAME(damagetype); + PARAM_INT(part); + PARAM_FLOAT(position_x); + PARAM_FLOAT(position_y); + PARAM_FLOAT(position_z); + PARAM_BOOL(isradius); + P_DamageSector(sec, source, damage, damagetype, part, DVector3(position_x, position_y, position_z), isradius, true); + return 0; +} + +DEFINE_ACTION_FUNCTION(FDestructible, DamageLinedef) +{ + PARAM_PROLOGUE; + PARAM_POINTER(def, line_t); + PARAM_OBJECT(source, AActor); + PARAM_INT(damage); + PARAM_NAME(damagetype); + PARAM_INT(side); + PARAM_FLOAT(position_x); + PARAM_FLOAT(position_y); + PARAM_FLOAT(position_z); + PARAM_BOOL(isradius); + P_DamageLinedef(def, source, damage, damagetype, side, DVector3(position_x, position_y, position_z), isradius, true); + return 0; +} + +DEFINE_ACTION_FUNCTION(FDestructible, GeometryLineAttack) +{ + PARAM_PROLOGUE; + PARAM_POINTER(trace, FTraceResults); + PARAM_OBJECT(thing, AActor); + PARAM_INT(damage); + PARAM_NAME(damagetype); + P_GeometryLineAttack(*trace, thing, damage, damagetype); + return 0; +} + +DEFINE_ACTION_FUNCTION(FDestructible, GeometryRadiusAttack) +{ + PARAM_PROLOGUE; + PARAM_OBJECT(bombspot, AActor); + PARAM_OBJECT(bombsource, AActor); + PARAM_INT(bombdamage); + PARAM_INT(bombdistance); + PARAM_NAME(damagetype); + PARAM_INT(fulldamagedistance); + P_GeometryRadiusAttack(bombspot, bombsource, bombdamage, bombdistance, damagetype, fulldamagedistance); + return 0; +} + +DEFINE_ACTION_FUNCTION(FDestructible, ProjectileHitLinedef) +{ + PARAM_PROLOGUE; + PARAM_OBJECT(projectile, AActor); + PARAM_POINTER(def, line_t); + ACTION_RETURN_BOOL(P_ProjectileHitLinedef(projectile, def)); +} + +DEFINE_ACTION_FUNCTION(FDestructible, ProjectileHitPlane) +{ + PARAM_PROLOGUE; + PARAM_OBJECT(projectile, AActor); + PARAM_INT(part); + ACTION_RETURN_BOOL(P_ProjectileHitPlane(projectile, part)); +} + +DEFINE_ACTION_FUNCTION(FDestructible, CheckLinedefVulnerable) +{ + PARAM_PROLOGUE; + PARAM_POINTER(def, line_t); + PARAM_INT(side); + PARAM_INT(part); + ACTION_RETURN_BOOL(P_CheckLinedefVulnerable(def, side, part)); +} + +DEFINE_ACTION_FUNCTION(FDestructible, CheckSectorVulnerable) +{ + PARAM_PROLOGUE; + PARAM_POINTER(sec, sector_t); + PARAM_INT(part); + ACTION_RETURN_BOOL(P_CheckSectorVulnerable(sec, part)); +} + +DEFINE_ACTION_FUNCTION(_Line, GetHealth) +{ + PARAM_SELF_STRUCT_PROLOGUE(line_t); + if (self->healthgroup) + { + FHealthGroup* grp = P_GetHealthGroup(self->healthgroup); + if (grp) ACTION_RETURN_INT(grp->health); + } + + ACTION_RETURN_INT(self->health); +} + +DEFINE_ACTION_FUNCTION(_Line, SetHealth) +{ + PARAM_SELF_STRUCT_PROLOGUE(line_t); + PARAM_INT(newhealth); + + if (newhealth < 0) + newhealth = 0; + + self->health = newhealth; + if (self->healthgroup) + { + FHealthGroup* grp = P_GetHealthGroup(self->healthgroup); + if (grp) P_SetHealthGroupHealth(grp, newhealth); + } + + return 0; +} + +DEFINE_ACTION_FUNCTION(_Sector, GetHealth) +{ + PARAM_SELF_STRUCT_PROLOGUE(sector_t); + PARAM_INT(part); + + FHealthGroup* grp; + switch (part) + { + case SECPART_Floor: + ACTION_RETURN_INT((self->healthfloorgroup && (grp = P_GetHealthGroup(self->healthfloorgroup))) ? grp->health : self->healthfloor); + case SECPART_Ceiling: + ACTION_RETURN_INT((self->healthceilinggroup && (grp = P_GetHealthGroup(self->healthceilinggroup))) ? grp->health : self->healthceiling); + case SECPART_3D: + ACTION_RETURN_INT((self->health3dgroup && (grp = P_GetHealthGroup(self->health3dgroup))) ? grp->health : self->health3d); + default: + ACTION_RETURN_INT(0); + } +} + +DEFINE_ACTION_FUNCTION(_Sector, SetHealth) +{ + PARAM_SELF_STRUCT_PROLOGUE(sector_t); + PARAM_INT(part); + PARAM_INT(newhealth); + + if (newhealth < 0) + newhealth = 0; + + int group; + int* health; + switch (part) + { + case SECPART_Floor: + group = self->healthfloorgroup; + health = &self->healthfloor; + break; + case SECPART_Ceiling: + group = self->healthceilinggroup; + health = &self->healthceiling; + break; + case SECPART_3D: + group = self->health3dgroup; + health = &self->health3d; + break; + default: + return 0; + } + + FHealthGroup* grp = group ? P_GetHealthGroup(group) : nullptr; + *health = newhealth; + if (grp) P_SetHealthGroupHealth(grp, newhealth); + return 0; +} \ No newline at end of file diff --git a/p_destructible.h b/p_destructible.h new file mode 100644 index 0000000000..bd6423323b --- /dev/null +++ b/p_destructible.h @@ -0,0 +1,43 @@ +#pragma once + +#include "tarray.h" +#include "r_defs.h" +#include "p_trace.h" + +// [ZZ] Destructible geometry related +struct FHealthGroup +{ + TArray sectors; + TArray lines; + int health; + int id; +}; + +// for P_DamageSector +enum +{ + SECPART_Floor = 0, + SECPART_Ceiling = 1, + SECPART_3D = 2 +}; + + +void P_SetHealthGroupHealth(FHealthGroup* group, int health); +void P_SetHealthGroupHealth(FLevelLocals *Level, int group, int health); + +void P_InitHealthGroups(FLevelLocals *Level); +FHealthGroup* P_GetHealthGroup(FLevelLocals *Level, int id); +FHealthGroup* P_GetHealthGroupOrNew(FLevelLocals *Level, int id, int startinghealth); + +void P_DamageSector(sector_t* sector, AActor* source, int damage, FName damagetype, int part, DVector3 position, bool isradius, bool dogroups); +void P_DamageLinedef(line_t* line, AActor* source, int damage, FName damagetype, int side, DVector3 position, bool isradius, bool dogroups); + +void P_GeometryLineAttack(FTraceResults& trace, AActor* thing, int damage, FName damageType); +void P_GeometryRadiusAttack(AActor* bombspot, AActor* bombsource, int bombdamage, int bombdistance, FName damagetype, int fulldamagedistance); +bool P_ProjectileHitLinedef(AActor* projectile, line_t* line); +bool P_ProjectileHitPlane(AActor* projectile, int part); + +bool P_CheckLinedefVulnerable(line_t* line, int side, int part = -1); +bool P_CheckSectorVulnerable(sector_t* sector, int part); + +void P_SerializeHealthGroups(FSerializer& arc); \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5ea333a394..8e6d07fb4d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -570,17 +570,17 @@ if( HAVE_MMX ) add_definitions( -DHAVE_MMX=1 ) set( SYSTEM_SOURCES ${SYSTEM_SOURCES} - textures/hires/hqnx_asm/hq2x_asm.cpp - textures/hires/hqnx_asm/hq3x_asm.cpp - textures/hires/hqnx_asm/hq4x_asm.cpp - textures/hires/hqnx_asm/hqnx_asm_Image.cpp) + gamedata/textures/hires/hqnx_asm/hq2x_asm.cpp + gamedata/textures/hires/hqnx_asm/hq3x_asm.cpp + gamedata/textures/hires/hqnx_asm/hq4x_asm.cpp + gamedata/textures/hires/hqnx_asm/hqnx_asm_Image.cpp) if( ZD_CMAKE_COMPILER_IS_GNUCXX_COMPATIBLE ) set_source_files_properties( - textures/hires/hqnx_asm/hq2x_asm.cpp - textures/hires/hqnx_asm/hq3x_asm.cpp - textures/hires/hqnx_asm/hq4x_asm.cpp - textures/hires/gl_hqresize.cpp + gamedata/textures/hires/hqnx_asm/hq2x_asm.cpp + gamedata/textures/hires/hqnx_asm/hq3x_asm.cpp + gamedata/textures/hires/hqnx_asm/hq4x_asm.cpp + gamedata/textures/hires/gl_hqresize.cpp PROPERTIES COMPILE_FLAGS "-mmmx" ) endif( ZD_CMAKE_COMPILER_IS_GNUCXX_COMPATIBLE ) endif( HAVE_MMX ) @@ -603,16 +603,16 @@ else() endif() add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/xlat_parser.c ${CMAKE_CURRENT_BINARY_DIR}/xlat_parser.h - COMMAND lemon -C${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/xlat/xlat_parser.y - DEPENDS lemon ${CMAKE_CURRENT_SOURCE_DIR}/xlat/xlat_parser.y ) + COMMAND lemon -C${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/gamedata/xlat/xlat_parser.y + DEPENDS lemon ${CMAKE_CURRENT_SOURCE_DIR}/gamedata/xlat/xlat_parser.y ) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zcc-parse.c ${CMAKE_CURRENT_BINARY_DIR}/zcc-parse.h COMMAND lemon -C${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/scripting/zscript/zcc-parse.lemon DEPENDS lemon ${CMAKE_CURRENT_SOURCE_DIR}/scripting/zscript/zcc-parse.lemon ) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sc_man_scanner.h - COMMAND re2c --no-generation-date -s -o ${CMAKE_CURRENT_BINARY_DIR}/sc_man_scanner.h ${CMAKE_CURRENT_SOURCE_DIR}/sc_man_scanner.re - DEPENDS re2c ${CMAKE_CURRENT_SOURCE_DIR}/sc_man_scanner.re ) + COMMAND re2c --no-generation-date -s -o ${CMAKE_CURRENT_BINARY_DIR}/sc_man_scanner.h ${CMAKE_CURRENT_SOURCE_DIR}/utility/sc_man_scanner.re + DEPENDS re2c ${CMAKE_CURRENT_SOURCE_DIR}/utility/sc_man_scanner.re ) include_directories( ${CMAKE_CURRENT_BINARY_DIR} ) @@ -653,7 +653,13 @@ file( GLOB HEADER_FILES fragglescript/*.h g_shared/*.h g_statusbar/*.h - g_inventory/*.h + gamedata/*.h + gamedata/resourcefiles/*.h + gamedata/textures/*.h + gamedata/textures/hires/hqnx/*.h + gamedata/textures/hires/hqnx_asm/*.h + gamedata/textures/hires/xbr/*.h + gamedata/xlat/*.h intermission/*.h maploader/*.h menu/*.h @@ -667,14 +673,11 @@ file( GLOB HEADER_FILES win32/*.h r_data/*.h r_data/models/*.h - rapidjson/*.h - resourcefiles/*.h - sfmt/*.h + utility/rapidjson/*.h + utility/sfmt/*.h + utility/math./*h + utility/*.h sound/*.h - textures/*.h - textures/hires/hqnx/*.h - textures/hires/hqnx_asm/*.h - textures/hires/xbr/*.h scripting/*.h scripting/backend/*.h scripting/decorate/*.h @@ -687,106 +690,105 @@ file( GLOB HEADER_FILES sound/timidity/*.h sound/timiditypp/*.h sound/wildmidi/*.h - xlat/*.h - swrenderer/*.h - swrenderer/textures/*.h - swrenderer/drawers/*.h - swrenderer/scene/*.h - swrenderer/segments/*.h - swrenderer/line/*.h - swrenderer/plane/*.h - swrenderer/things/*.h - swrenderer/viewport/*.h - polyrenderer/*.h - polyrenderer/math/*.h - polyrenderer/drawers/*.h - polyrenderer/scene/*.h - hwrenderer/data/*.h - hwrenderer/dynlights/*.h - hwrenderer/models/*.h - hwrenderer/postprocessing/*.h - hwrenderer/scene/*.h - hwrenderer/textures/*.h - hwrenderer/utility/*.h - gl/*.h - gl/models/*.h - gl/renderer/*.h - gl/scene/*.h - gl/shaders/*.h - gl/system/*.h - gl/textures/*.h - gl_load/*.h + rendering/swrenderer/*.h + rendering/swrenderer/textures/*.h + rendering/swrenderer/drawers/*.h + rendering/swrenderer/scene/*.h + rendering/swrenderer/segments/*.h + rendering/swrenderer/line/*.h + rendering/swrenderer/plane/*.h + rendering/swrenderer/things/*.h + rendering/swrenderer/viewport/*.h + rendering/polyrenderer/*.h + rendering/polyrenderer/math/*.h + rendering/polyrenderer/drawers/*.h + rendering/polyrenderer/scene/*.h + rendering/hwrenderer/data/*.h + rendering/hwrenderer/dynlights/*.h + rendering/hwrenderer/models/*.h + rendering/hwrenderer/postprocessing/*.h + rendering/hwrenderer/scene/*.h + rendering/hwrenderer/textures/*.h + rendering/hwrenderer/utility/*.h + rendering/gl/*.h + rendering/gl/models/*.h + rendering/gl/renderer/*.h + rendering/gl/scene/*.h + rendering/gl/shaders/*.h + rendering/gl/system/*.h + rendering/gl/textures/*.h + rendering/gl_load/*.h *.h ) set ( SWRENDER_SOURCES - swrenderer/r_swcolormaps.cpp - swrenderer/r_swrenderer.cpp - swrenderer/r_memory.cpp - swrenderer/r_renderthread.cpp - swrenderer/drawers/r_draw.cpp - swrenderer/drawers/r_draw_pal.cpp - swrenderer/drawers/r_draw_rgba.cpp - swrenderer/drawers/r_thread.cpp - swrenderer/scene/r_3dfloors.cpp - swrenderer/scene/r_light.cpp - swrenderer/scene/r_opaque_pass.cpp - swrenderer/scene/r_portal.cpp - swrenderer/scene/r_scene.cpp - swrenderer/scene/r_translucent_pass.cpp - swrenderer/viewport/r_drawerargs.cpp - swrenderer/viewport/r_skydrawer.cpp - swrenderer/viewport/r_spandrawer.cpp - swrenderer/viewport/r_spritedrawer.cpp - swrenderer/viewport/r_viewport.cpp - swrenderer/viewport/r_walldrawer.cpp - swrenderer/line/r_line.cpp - swrenderer/line/r_farclip_line.cpp - swrenderer/line/r_walldraw.cpp - swrenderer/line/r_wallsetup.cpp - swrenderer/line/r_fogboundary.cpp - swrenderer/line/r_renderdrawsegment.cpp - swrenderer/segments/r_clipsegment.cpp - swrenderer/segments/r_drawsegment.cpp - swrenderer/segments/r_portalsegment.cpp - swrenderer/things/r_visiblesprite.cpp - swrenderer/things/r_visiblespritelist.cpp - swrenderer/things/r_voxel.cpp - swrenderer/things/r_particle.cpp - swrenderer/things/r_playersprite.cpp - swrenderer/things/r_sprite.cpp - swrenderer/things/r_wallsprite.cpp - swrenderer/things/r_decal.cpp - swrenderer/things/r_model.cpp - swrenderer/plane/r_visibleplane.cpp - swrenderer/plane/r_visibleplanelist.cpp - swrenderer/plane/r_skyplane.cpp - swrenderer/plane/r_planerenderer.cpp - swrenderer/plane/r_flatplane.cpp - swrenderer/plane/r_slopeplane.cpp + rendering/swrenderer/r_swcolormaps.cpp + rendering/swrenderer/r_swrenderer.cpp + rendering/swrenderer/r_memory.cpp + rendering/swrenderer/r_renderthread.cpp + rendering/swrenderer/drawers/r_draw.cpp + rendering/swrenderer/drawers/r_draw_pal.cpp + rendering/swrenderer/drawers/r_draw_rgba.cpp + rendering/swrenderer/drawers/r_thread.cpp + rendering/swrenderer/scene/r_3dfloors.cpp + rendering/swrenderer/scene/r_light.cpp + rendering/swrenderer/scene/r_opaque_pass.cpp + rendering/swrenderer/scene/r_portal.cpp + rendering/swrenderer/scene/r_scene.cpp + rendering/swrenderer/scene/r_translucent_pass.cpp + rendering/swrenderer/viewport/r_drawerargs.cpp + rendering/swrenderer/viewport/r_skydrawer.cpp + rendering/swrenderer/viewport/r_spandrawer.cpp + rendering/swrenderer/viewport/r_spritedrawer.cpp + rendering/swrenderer/viewport/r_viewport.cpp + rendering/swrenderer/viewport/r_walldrawer.cpp + rendering/swrenderer/line/r_line.cpp + rendering/swrenderer/line/r_farclip_line.cpp + rendering/swrenderer/line/r_walldraw.cpp + rendering/swrenderer/line/r_wallsetup.cpp + rendering/swrenderer/line/r_fogboundary.cpp + rendering/swrenderer/line/r_renderdrawsegment.cpp + rendering/swrenderer/segments/r_clipsegment.cpp + rendering/swrenderer/segments/r_drawsegment.cpp + rendering/swrenderer/segments/r_portalsegment.cpp + rendering/swrenderer/things/r_visiblesprite.cpp + rendering/swrenderer/things/r_visiblespritelist.cpp + rendering/swrenderer/things/r_voxel.cpp + rendering/swrenderer/things/r_particle.cpp + rendering/swrenderer/things/r_playersprite.cpp + rendering/swrenderer/things/r_sprite.cpp + rendering/swrenderer/things/r_wallsprite.cpp + rendering/swrenderer/things/r_decal.cpp + rendering/swrenderer/things/r_model.cpp + rendering/swrenderer/plane/r_visibleplane.cpp + rendering/swrenderer/plane/r_visibleplanelist.cpp + rendering/swrenderer/plane/r_skyplane.cpp + rendering/swrenderer/plane/r_planerenderer.cpp + rendering/swrenderer/plane/r_flatplane.cpp + rendering/swrenderer/plane/r_slopeplane.cpp ) set( POLYRENDER_SOURCES - polyrenderer/poly_renderer.cpp - polyrenderer/poly_renderthread.cpp - polyrenderer/scene/poly_scene.cpp - polyrenderer/scene/poly_portal.cpp - polyrenderer/scene/poly_cull.cpp - polyrenderer/scene/poly_decal.cpp - polyrenderer/scene/poly_particle.cpp - polyrenderer/scene/poly_plane.cpp - polyrenderer/scene/poly_playersprite.cpp - polyrenderer/scene/poly_wall.cpp - polyrenderer/scene/poly_wallsprite.cpp - polyrenderer/scene/poly_sprite.cpp - polyrenderer/scene/poly_model.cpp - polyrenderer/scene/poly_sky.cpp - polyrenderer/scene/poly_light.cpp - polyrenderer/drawers/poly_buffer.cpp - polyrenderer/drawers/poly_triangle.cpp - polyrenderer/drawers/poly_draw_args.cpp - polyrenderer/drawers/screen_triangle.cpp - polyrenderer/math/gpu_types.cpp + rendering/polyrenderer/poly_renderer.cpp + rendering/polyrenderer/poly_renderthread.cpp + rendering/polyrenderer/scene/poly_scene.cpp + rendering/polyrenderer/scene/poly_portal.cpp + rendering/polyrenderer/scene/poly_cull.cpp + rendering/polyrenderer/scene/poly_decal.cpp + rendering/polyrenderer/scene/poly_particle.cpp + rendering/polyrenderer/scene/poly_plane.cpp + rendering/polyrenderer/scene/poly_playersprite.cpp + rendering/polyrenderer/scene/poly_wall.cpp + rendering/polyrenderer/scene/poly_wallsprite.cpp + rendering/polyrenderer/scene/poly_sprite.cpp + rendering/polyrenderer/scene/poly_model.cpp + rendering/polyrenderer/scene/poly_sky.cpp + rendering/polyrenderer/scene/poly_light.cpp + rendering/polyrenderer/drawers/poly_buffer.cpp + rendering/polyrenderer/drawers/poly_triangle.cpp + rendering/polyrenderer/drawers/poly_draw_args.cpp + rendering/polyrenderer/drawers/screen_triangle.cpp + rendering/polyrenderer/math/gpu_types.cpp ) # These files will be flagged as "headers" so that they appear in project files @@ -796,9 +798,9 @@ set( NOT_COMPILED_SOURCE_FILES ${SWRENDER_SOURCES} ${POLYRENDER_SOURCES} sc_man_scanner.h - sc_man_scanner.re + utility/sc_man_scanner.re g_statusbar/sbarinfo_commands.cpp - xlat/xlat_parser.y + gamedata/xlat/xlat_parser.y xlat_parser.c xlat_parser.h scripting/zscript/zcc-parse.lemon @@ -823,9 +825,9 @@ set( VM_JIT_SOURCES # Enable fast math for some sources set( FASTMATH_SOURCES - swrenderer/r_all.cpp - swrenderer/r_swscene.cpp - polyrenderer/poly_all.cpp + rendering/swrenderer/r_all.cpp + rendering/swrenderer/r_swscene.cpp + rendering/polyrenderer/poly_all.cpp sound/oplsynth/opl_mus_player.cpp sound/mpg123_decoder.cpp sound/music_midi_base.cpp @@ -833,32 +835,32 @@ set( FASTMATH_SOURCES sound/sndfile_decoder.cpp sound/timiditypp/fft4g.cpp sound/timiditypp/reverb.cpp - textures/hires/hqnx/init.cpp - textures/hires/hqnx/hq2x.cpp - textures/hires/hqnx/hq3x.cpp - textures/hires/hqnx/hq4x.cpp - textures/hires/xbr/xbrz.cpp - textures/hires/xbr/xbrz_old.cpp - gl_load/gl_load.c - hwrenderer/postprocessing/hw_postprocess_cvars.cpp - hwrenderer/postprocessing/hw_postprocessshader.cpp - hwrenderer/dynlights/hw_dynlightdata.cpp - hwrenderer/scene/hw_bsp.cpp - hwrenderer/scene/hw_fakeflat.cpp - hwrenderer/scene/hw_decal.cpp - hwrenderer/scene/hw_drawinfo.cpp - hwrenderer/scene/hw_drawlist.cpp - hwrenderer/scene/hw_clipper.cpp - hwrenderer/scene/hw_flats.cpp - hwrenderer/scene/hw_portal.cpp - hwrenderer/scene/hw_renderhacks.cpp - hwrenderer/scene/hw_sky.cpp - hwrenderer/scene/hw_skyportal.cpp - hwrenderer/scene/hw_sprites.cpp - hwrenderer/scene/hw_spritelight.cpp - hwrenderer/scene/hw_walls.cpp - hwrenderer/scene/hw_walls_vertex.cpp - hwrenderer/scene/hw_weapon.cpp + gamedata/textures/hires/hqnx/init.cpp + gamedata/textures/hires/hqnx/hq2x.cpp + gamedata/textures/hires/hqnx/hq3x.cpp + gamedata/textures/hires/hqnx/hq4x.cpp + gamedata/textures/hires/xbr/xbrz.cpp + gamedata/textures/hires/xbr/xbrz_old.cpp + rendering/gl_load/gl_load.c + rendering/hwrenderer/postprocessing/hw_postprocess_cvars.cpp + rendering/hwrenderer/postprocessing/hw_postprocessshader.cpp + rendering/hwrenderer/dynlights/hw_dynlightdata.cpp + rendering/hwrenderer/scene/hw_bsp.cpp + rendering/hwrenderer/scene/hw_fakeflat.cpp + rendering/hwrenderer/scene/hw_decal.cpp + rendering/hwrenderer/scene/hw_drawinfo.cpp + rendering/hwrenderer/scene/hw_drawlist.cpp + rendering/hwrenderer/scene/hw_clipper.cpp + rendering/hwrenderer/scene/hw_flats.cpp + rendering/hwrenderer/scene/hw_portal.cpp + rendering/hwrenderer/scene/hw_renderhacks.cpp + rendering/hwrenderer/scene/hw_sky.cpp + rendering/hwrenderer/scene/hw_skyportal.cpp + rendering/hwrenderer/scene/hw_sprites.cpp + rendering/hwrenderer/scene/hw_spritelight.cpp + rendering/hwrenderer/scene/hw_walls.cpp + rendering/hwrenderer/scene/hw_walls_vertex.cpp + rendering/hwrenderer/scene/hw_weapon.cpp r_data/models/models.cpp r_data/matrix.cpp sound/adlmidi/adldata.cpp @@ -890,7 +892,6 @@ set( FASTMATH_SOURCES ) set (PCH_SOURCES - actorptrselect.cpp am_map.cpp b_bot.cpp b_func.cpp @@ -906,124 +907,66 @@ set (PCH_SOURCES c_dispatch.cpp c_expr.cpp c_functions.cpp - cmdlib.cpp - colormatcher.cpp - configfile.cpp ct_chat.cpp cycler.cpp - d_dehacked.cpp d_iwad.cpp d_main.cpp d_anonstats.cpp d_net.cpp d_netinfo.cpp d_protocol.cpp - decallib.cpp dobject.cpp dobjgc.cpp dobjtype.cpp doomstat.cpp - dsectoreffect.cpp - dthinker.cpp f_wipe.cpp - files.cpp - files_decompress.cpp - g_doomedmap.cpp + g_cvars.cpp + g_dumpinfo.cpp g_game.cpp g_hub.cpp g_level.cpp - g_mapinfo.cpp - g_skill.cpp gameconfigfile.cpp - gi.cpp gitinfo.cpp hu_scores.cpp - i_module.cpp i_net.cpp - i_time.cpp - info.cpp - keysections.cpp - m_alloc.cpp - m_argv.cpp - m_bbox.cpp m_cheat.cpp m_joy.cpp m_misc.cpp - m_png.cpp - m_random.cpp - memarena.cpp - md5.cpp - name.cpp - nodebuild.cpp - nodebuild_classify_nosse2.cpp - nodebuild_events.cpp - nodebuild_extract.cpp - nodebuild_gl.cpp - nodebuild_utility.cpp - p_3dfloors.cpp - p_3dmidtex.cpp p_acs.cpp p_actionfunctions.cpp - p_ceiling.cpp p_conversation.cpp p_destructible.cpp - p_doors.cpp p_effect.cpp p_enemy.cpp - p_floor.cpp p_interaction.cpp - p_lights.cpp - p_linkedsectors.cpp p_lnspec.cpp p_map.cpp p_maputl.cpp p_mobj.cpp p_openmap.cpp - p_pillar.cpp - p_plats.cpp p_pspr.cpp - p_pusher.cpp p_saveg.cpp - p_scroll.cpp - p_secnodes.cpp - p_sectors.cpp p_setup.cpp - p_sight.cpp p_spec.cpp p_states.cpp - p_switch.cpp - p_tags.cpp - p_teleport.cpp - p_terrain.cpp p_things.cpp p_tick.cpp - p_trace.cpp p_usdf.cpp p_user.cpp - p_xlat.cpp - parsecontext.cpp - po_man.cpp - portal.cpp r_utility.cpp r_sky.cpp r_videoscale.cpp s_advsound.cpp s_environment.cpp - s_playlist.cpp s_sndseq.cpp s_sound.cpp serializer.cpp - sc_man.cpp scriptutil.cpp st_stuff.cpp statistics.cpp stats.cpp - stringtable.cpp - teaminfo.cpp - umapinfo.cpp v_2ddrawer.cpp v_blend.cpp - v_collection.cpp v_draw.cpp v_font.cpp v_framebuffer.cpp @@ -1031,66 +974,103 @@ set (PCH_SOURCES v_pfx.cpp v_text.cpp v_video.cpp - w_wad.cpp wi_stuff.cpp - zstrformat.cpp - g_inventory/a_keys.cpp - g_inventory/a_pickups.cpp - g_inventory/a_weapons.cpp + gamedata/a_keys.cpp + gamedata/a_weapons.cpp + gamedata/decallib.cpp + gamedata/g_mapinfo.cpp + gamedata/g_skill.cpp + gamedata/gi.cpp + gamedata/stringtable.cpp + gamedata/umapinfo.cpp + gamedata/w_wad.cpp + gamedata/d_dehacked.cpp + gamedata/g_doomedmap.cpp + gamedata/info.cpp + gamedata/keysections.cpp + gamedata/p_terrain.cpp + gamedata/teaminfo.cpp + g_shared/a_pickups.cpp g_shared/a_action.cpp g_shared/a_decals.cpp + g_shared/a_decalfx.cpp + g_shared/a_doors.cpp g_shared/a_dynlight.cpp g_shared/a_flashfader.cpp g_shared/a_lightning.cpp g_shared/a_morph.cpp g_shared/a_quake.cpp g_shared/a_specialspot.cpp - g_shared/hudmessages.cpp - g_shared/shared_hud.cpp + g_shared/a_ceiling.cpp + g_shared/a_floor.cpp + g_shared/a_lights.cpp + g_shared/a_lighttransfer.cpp + g_shared/a_pillar.cpp + g_shared/a_plats.cpp + g_shared/a_pusher.cpp + g_shared/a_scroll.cpp + g_shared/dsectoreffect.cpp + g_shared/p_secnodes.cpp + g_shared/p_sectors.cpp + g_shared/p_sight.cpp + g_shared/p_switch.cpp + g_shared/p_tags.cpp + g_shared/p_teleport.cpp + g_shared/actorptrselect.cpp + g_shared/dthinker.cpp + g_shared/p_3dfloors.cpp + g_shared/p_3dmidtex.cpp + g_shared/p_linkedsectors.cpp + g_shared/p_trace.cpp + g_shared/po_man.cpp + g_shared/portal.cpp + g_statusbar/hudmessages.cpp + g_statusbar/shared_hud.cpp g_statusbar/sbarinfo.cpp g_statusbar/sbar_mugshot.cpp g_statusbar/shared_sbar.cpp - gl/renderer/gl_renderer.cpp - gl/renderer/gl_renderstate.cpp - gl/renderer/gl_renderbuffers.cpp - gl/renderer/gl_postprocess.cpp - gl/renderer/gl_postprocessstate.cpp - gl/renderer/gl_stereo3d.cpp - gl/renderer/gl_scene.cpp - gl/shaders/gl_shader.cpp - gl/shaders/gl_shaderprogram.cpp - gl/shaders/gl_postprocessshader.cpp - gl_load/gl_interface.cpp - gl/system/gl_framebuffer.cpp - gl/system/gl_debug.cpp - gl/system/gl_buffers.cpp - gl/textures/gl_hwtexture.cpp - gl/textures/gl_samplers.cpp - hwrenderer/data/hw_vertexbuilder.cpp - hwrenderer/data/flatvertices.cpp - hwrenderer/data/hw_viewpointbuffer.cpp - hwrenderer/dynlights/hw_aabbtree.cpp - hwrenderer/dynlights/hw_shadowmap.cpp - hwrenderer/dynlights/hw_lightbuffer.cpp - hwrenderer/models/hw_models.cpp - hwrenderer/scene/hw_skydome.cpp - hwrenderer/scene/hw_drawlistadd.cpp - hwrenderer/scene/hw_renderstate.cpp - hwrenderer/postprocessing/hw_postprocess.cpp - hwrenderer/postprocessing/hw_postprocess_cvars.cpp - hwrenderer/postprocessing/hw_postprocessshader.cpp - hwrenderer/postprocessing/hw_shadowmapshader.cpp - hwrenderer/postprocessing/hw_presentshader.cpp - hwrenderer/postprocessing/hw_present3dRowshader.cpp - hwrenderer/textures/hw_material.cpp - hwrenderer/textures/hw_precache.cpp - hwrenderer/utility/hw_clock.cpp - hwrenderer/utility/hw_cvars.cpp - hwrenderer/utility/hw_draw2d.cpp - hwrenderer/utility/hw_lighting.cpp - hwrenderer/utility/hw_shaderpatcher.cpp - hwrenderer/utility/hw_vrmodes.cpp + rendering/gl/renderer/gl_renderer.cpp + rendering/gl/renderer/gl_renderstate.cpp + rendering/gl/renderer/gl_renderbuffers.cpp + rendering/gl/renderer/gl_postprocess.cpp + rendering/gl/renderer/gl_postprocessstate.cpp + rendering/gl/renderer/gl_stereo3d.cpp + rendering/gl/renderer/gl_scene.cpp + rendering/gl/shaders/gl_shader.cpp + rendering/gl/shaders/gl_shaderprogram.cpp + rendering/gl/shaders/gl_postprocessshader.cpp + rendering/gl_load/gl_interface.cpp + rendering/gl/system/gl_framebuffer.cpp + rendering/gl/system/gl_debug.cpp + rendering/gl/system/gl_buffers.cpp + rendering/gl/textures/gl_hwtexture.cpp + rendering/gl/textures/gl_samplers.cpp + rendering/hwrenderer/data/hw_vertexbuilder.cpp + rendering/hwrenderer/data/flatvertices.cpp + rendering/hwrenderer/data/hw_viewpointbuffer.cpp + rendering/hwrenderer/dynlights/hw_aabbtree.cpp + rendering/hwrenderer/dynlights/hw_shadowmap.cpp + rendering/hwrenderer/dynlights/hw_lightbuffer.cpp + rendering/hwrenderer/models/hw_models.cpp + rendering/hwrenderer/scene/hw_skydome.cpp + rendering/hwrenderer/scene/hw_drawlistadd.cpp + rendering/hwrenderer/scene/hw_renderstate.cpp + rendering/hwrenderer/postprocessing/hw_postprocess.cpp + rendering/hwrenderer/postprocessing/hw_postprocess_cvars.cpp + rendering/hwrenderer/postprocessing/hw_postprocessshader.cpp + rendering/hwrenderer/postprocessing/hw_shadowmapshader.cpp + rendering/hwrenderer/postprocessing/hw_presentshader.cpp + rendering/hwrenderer/postprocessing/hw_present3dRowshader.cpp + rendering/hwrenderer/textures/hw_material.cpp + rendering/hwrenderer/textures/hw_precache.cpp + rendering/hwrenderer/utility/hw_clock.cpp + rendering/hwrenderer/utility/hw_cvars.cpp + rendering/hwrenderer/utility/hw_draw2d.cpp + rendering/hwrenderer/utility/hw_lighting.cpp + rendering/hwrenderer/utility/hw_shaderpatcher.cpp + rendering/hwrenderer/utility/hw_vrmodes.cpp maploader/edata.cpp + maploader/specials.cpp maploader/maploader.cpp maploader/slopes.cpp maploader/glnodes.cpp @@ -1106,46 +1086,48 @@ set (PCH_SOURCES menu/optionmenu.cpp menu/playermenu.cpp menu/resolutionmenu.cpp - resourcefiles/ancientzip.cpp - resourcefiles/file_7z.cpp - resourcefiles/file_grp.cpp - resourcefiles/file_lump.cpp - resourcefiles/file_rff.cpp - resourcefiles/file_wad.cpp - resourcefiles/file_zip.cpp - resourcefiles/file_pak.cpp - resourcefiles/file_directory.cpp - resourcefiles/resourcefile.cpp - textures/animations.cpp - textures/anim_switches.cpp - textures/bitmap.cpp - textures/texture.cpp - textures/image.cpp - textures/imagetexture.cpp - textures/texturemanager.cpp - textures/multipatchtexturebuilder.cpp - textures/skyboxtexture.cpp - textures/formats/automaptexture.cpp - textures/formats/brightmaptexture.cpp - textures/formats/buildtexture.cpp - textures/formats/canvastexture.cpp - textures/formats/ddstexture.cpp - textures/formats/flattexture.cpp - textures/formats/fontchars.cpp - textures/formats/imgztexture.cpp - textures/formats/jpegtexture.cpp - textures/formats/md5check.cpp - textures/formats/multipatchtexture.cpp - textures/formats/patchtexture.cpp - textures/formats/pcxtexture.cpp - textures/formats/pngtexture.cpp - textures/formats/rawpagetexture.cpp - textures/formats/emptytexture.cpp - textures/formats/shadertexture.cpp - textures/formats/tgatexture.cpp - textures/hires/hqresize.cpp - textures/hires/hirestex.cpp - xlat/parse_xlat.cpp + gamedata/resourcefiles/ancientzip.cpp + gamedata/resourcefiles/file_7z.cpp + gamedata/resourcefiles/file_grp.cpp + gamedata/resourcefiles/file_lump.cpp + gamedata/resourcefiles/file_rff.cpp + gamedata/resourcefiles/file_wad.cpp + gamedata/resourcefiles/file_zip.cpp + gamedata/resourcefiles/file_pak.cpp + gamedata/resourcefiles/file_directory.cpp + gamedata/resourcefiles/resourcefile.cpp + gamedata/textures/animations.cpp + gamedata/textures/anim_switches.cpp + gamedata/textures/bitmap.cpp + gamedata/textures/texture.cpp + gamedata/textures/image.cpp + gamedata/textures/imagetexture.cpp + gamedata/textures/texturemanager.cpp + gamedata/textures/multipatchtexturebuilder.cpp + gamedata/textures/skyboxtexture.cpp + gamedata/textures/formats/automaptexture.cpp + gamedata/textures/formats/brightmaptexture.cpp + gamedata/textures/formats/buildtexture.cpp + gamedata/textures/formats/canvastexture.cpp + gamedata/textures/formats/ddstexture.cpp + gamedata/textures/formats/flattexture.cpp + gamedata/textures/formats/fontchars.cpp + gamedata/textures/formats/imgztexture.cpp + gamedata/textures/formats/jpegtexture.cpp + gamedata/textures/formats/md5check.cpp + gamedata/textures/formats/multipatchtexture.cpp + gamedata/textures/formats/patchtexture.cpp + gamedata/textures/formats/pcxtexture.cpp + gamedata/textures/formats/pngtexture.cpp + gamedata/textures/formats/rawpagetexture.cpp + gamedata/textures/formats/emptytexture.cpp + gamedata/textures/formats/shadertexture.cpp + gamedata/textures/formats/tgatexture.cpp + gamedata/textures/hires/hqresize.cpp + gamedata/textures/hires/hirestex.cpp + gamedata/p_xlat.cpp + gamedata/xlat/parse_xlat.cpp + gamedata/xlat/parsecontext.cpp fragglescript/t_func.cpp fragglescript/t_load.cpp fragglescript/t_oper.cpp @@ -1196,7 +1178,7 @@ set (PCH_SOURCES scripting/zscript/ast.cpp scripting/zscript/zcc_compile.cpp scripting/zscript/zcc_parser.cpp - sfmt/SFMT.cpp + utility/sfmt/SFMT.cpp sound/i_music.cpp sound/i_sound.cpp sound/i_soundfont.cpp @@ -1261,10 +1243,35 @@ set (PCH_SOURCES sound/wildmidi/reverb.cpp sound/wildmidi/wildmidi_lib.cpp sound/wildmidi/wm_error.cpp - swrenderer/textures/r_swtexture.cpp - swrenderer/textures/warptexture.cpp - swrenderer/textures/swcanvastexture.cpp + rendering/swrenderer/textures/r_swtexture.cpp + rendering/swrenderer/textures/warptexture.cpp + rendering/swrenderer/textures/swcanvastexture.cpp events.cpp + utility/files.cpp + utility/files_decompress.cpp + utility/m_png.cpp + utility/m_random.cpp + utility/memarena.cpp + utility/md5.cpp + utility/nodebuilder/nodebuild.cpp + utility/nodebuilder/nodebuild_classify_nosse2.cpp + utility/nodebuilder/nodebuild_events.cpp + utility/nodebuilder/nodebuild_extract.cpp + utility/nodebuilder/nodebuild_gl.cpp + utility/nodebuilder/nodebuild_utility.cpp + utility/sc_man.cpp + utility/cmdlib.cpp + utility/colormatcher.cpp + utility/configfile.cpp + utility/i_module.cpp + utility/i_time.cpp + utility/m_alloc.cpp + utility/m_argv.cpp + utility/m_bbox.cpp + utility/name.cpp + utility/s_playlist.cpp + utility/v_collection.cpp + utility/zstrformat.cpp ) if( ${HAVE_VM_JIT} ) @@ -1282,33 +1289,33 @@ add_executable( zdoom WIN32 MACOSX_BUNDLE ${SYSTEM_SOURCES} ${FASTMATH_SOURCES} ${PCH_SOURCES} - x86.cpp - strnatcmp.c - zstring.cpp - math/asin.c - math/atan.c - math/const.c - math/cosh.c - math/exp.c - math/isnan.c - math/log.c - math/log10.c - math/mtherr.c - math/polevl.c - math/pow.c - math/powi.c - math/sin.c - math/sinh.c - math/sqrt.c - math/tan.c - math/tanh.c - math/fastsin.cpp + utility/x86.cpp + utility/strnatcmp.c + utility/zstring.cpp + utility/math/asin.c + utility/math/atan.c + utility/math/const.c + utility/math/cosh.c + utility/math/exp.c + utility/math/isnan.c + utility/math/log.c + utility/math/log10.c + utility/math/mtherr.c + utility/math/polevl.c + utility/math/pow.c + utility/math/powi.c + utility/math/sin.c + utility/math/sinh.c + utility/math/sqrt.c + utility/math/tan.c + utility/math/tanh.c + utility/math/fastsin.cpp zzautozend.cpp ) set_source_files_properties( ${FASTMATH_SOURCES} PROPERTIES COMPILE_FLAGS ${ZD_FASTMATH_FLAG} ) set_source_files_properties( xlat/parse_xlat.cpp PROPERTIES OBJECT_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/xlat_parser.c" ) -set_source_files_properties( sc_man.cpp PROPERTIES OBJECT_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/sc_man_scanner.h" ) +set_source_files_properties( utility/sc_man.cpp PROPERTIES OBJECT_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/sc_man_scanner.h" ) set_source_files_properties( ${NOT_COMPILED_SOURCE_FILES} PROPERTIES HEADER_FILE_ONLY TRUE ) @@ -1329,13 +1336,16 @@ target_link_libraries( zdoom ${ZDOOM_LIBS} gdtoa dumb lzma ) include_directories( . g_statusbar g_shared - g_inventory + gamedata + gamedata/textures + rendering sound - textures sound/oplsynth sound/timidity sound/wildmidi xlat + utility + utility/nodebuilder scripting scripting/vm ../gdtoa @@ -1444,52 +1454,54 @@ source_group("External\\Math" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/m source_group("External\\RapidJSON" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rapidjson/.+") source_group("External\\SFMT" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sfmt/.+") source_group("FraggleScript" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/fragglescript/.+") +source_group("Game Data" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gamedata/.+") +source_group("Game Data\\Resource Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gamedata/resourcefiles/.+") +source_group("Game Data\\Textures" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/textures/.+") +source_group("Game Data\\Textures\\Hires" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/textures/hires/.+") +source_group("Game Data\\Textures\\Hires\\HQ Resize" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/textures/hires/hqnx/.+") +source_group("Game Data\\Textures\\Hires\\HQ Resize MMX version" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/textures/hires/hqnx_asm/.+") +source_group("Game Data\\Textures\\Hires\\XBRZ" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/textures/hires/xbr/.+") +source_group("Game Data\\Textures\\Formats" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/textures/formats/.+") source_group("Intermission" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/intermission/.+") source_group("Map Loader" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/maploader/.+") source_group("Menu" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/menu/.+") -source_group("Hardware Renderer" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gl/.+") -source_group("Hardware Renderer\\Data" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/hwrenderer/data/.+") -source_group("Hardware Renderer\\Dynamic Lights" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/hwrenderer/dynlights/.+") -source_group("Hardware Renderer\\Models" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/hwrenderer/models/.+") -source_group("Hardware Renderer\\Postprocessing" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/hwrenderer/postprocessing/.+") -source_group("Hardware Renderer\\Renderer" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/hwrenderer/renderer/.+") -source_group("Hardware Renderer\\Scene" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/hwrenderer/scene/.+") -source_group("Hardware Renderer\\Shaders" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/hwrenderer/shaders/.+") -source_group("Hardware Renderer\\System" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/hwrenderer/system/.+") -source_group("Hardware Renderer\\Textures" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/hwrenderer/textures/.+") -source_group("Hardware Renderer\\Utilities" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/hwrenderer/utility/.+") -source_group("OpenGL Loader" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gl_load/.+") -source_group("OpenGL Renderer" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gl/.+") -source_group("OpenGL Renderer\\Data" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gl/data/.+") -source_group("OpenGL Renderer\\Dynamic Lights" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gl/dynlights/.+") -source_group("OpenGL Renderer\\Renderer" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gl/renderer/.+") -source_group("OpenGL Renderer\\Scene" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gl/scene/.+") -source_group("OpenGL Renderer\\Shaders" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gl/shaders/.+") -source_group("OpenGL Renderer\\System" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gl/system/.+") -source_group("OpenGL Renderer\\Textures" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gl/textures/.+") -source_group("OpenGL Renderer\\Utilities" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gl/utility/.+") -source_group("Software Renderer" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/swrenderer/.+") -source_group("Software Renderer\\Drawers" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/swrenderer/drawers/.+") -source_group("Software Renderer\\Scene" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/swrenderer/scene/.+") -source_group("Software Renderer\\Segments" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/swrenderer/segments/.+") -source_group("Software Renderer\\Line" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/swrenderer/line/.+") -source_group("Software Renderer\\Plane" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/swrenderer/plane/.+") -source_group("Software Renderer\\Things" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/swrenderer/things/.+") -source_group("Software Renderer\\Viewport" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/swrenderer/viewport/.+") -source_group("Poly Renderer" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/polyrenderer/.+") -source_group("Poly Renderer\\Math" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/polyrenderer/math/.+") -source_group("Poly Renderer\\Drawers" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/polyrenderer/drawers/.+") -source_group("Poly Renderer\\Scene" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/polyrenderer/scene/.+") +source_group("Rendering" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/.+") +source_group("Rendering\\Hardware Renderer" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/gl/.+") +source_group("Rendering\\Hardware Renderer\\Data" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/hwrenderer/data/.+") +source_group("Rendering\\Hardware Renderer\\Dynamic Lights" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/hwrenderer/dynlights/.+") +source_group("Rendering\\Hardware Renderer\\Models" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/hwrenderer/models/.+") +source_group("Rendering\\Hardware Renderer\\Postprocessing" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/hwrenderer/postprocessing/.+") +source_group("Rendering\\Hardware Renderer\\Renderer" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/hwrenderer/renderer/.+") +source_group("Rendering\\Hardware Renderer\\Scene" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/hwrenderer/scene/.+") +source_group("Rendering\\Hardware Renderer\\Shaders" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/hwrenderer/shaders/.+") +source_group("Rendering\\Hardware Renderer\\System" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/hwrenderer/system/.+") +source_group("Rendering\\Hardware Renderer\\Textures" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/hwrenderer/textures/.+") +source_group("Rendering\\Hardware Renderer\\Utilities" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/hwrenderer/utility/.+") +source_group("Rendering\\OpenGL Loader" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/gl_load/.+") +source_group("Rendering\\OpenGL Renderer" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/gl/.+") +source_group("Rendering\\OpenGL Renderer\\Data" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/gl/data/.+") +source_group("Rendering\\OpenGL Renderer\\Dynamic Lights" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/gl/dynlights/.+") +source_group("Rendering\\OpenGL Renderer\\Renderer" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/gl/renderer/.+") +source_group("Rendering\\OpenGL Renderer\\Scene" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/gl/scene/.+") +source_group("Rendering\\OpenGL Renderer\\Shaders" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/gl/shaders/.+") +source_group("Rendering\\OpenGL Renderer\\System" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/gl/system/.+") +source_group("Rendering\\OpenGL Renderer\\Textures" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/gl/textures/.+") +source_group("Rendering\\OpenGL Renderer\\Utilities" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/gl/utility/.+") +source_group("Rendering\\Software Renderer" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/swrenderer/.+") +source_group("Rendering\\Software Renderer\\Drawers" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/swrenderer/drawers/.+") +source_group("Rendering\\Software Renderer\\Scene" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/swrenderer/scene/.+") +source_group("Rendering\\Software Renderer\\Segments" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/swrenderer/segments/.+") +source_group("Rendering\\Software Renderer\\Line" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/swrenderer/line/.+") +source_group("Rendering\\Software Renderer\\Plane" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/swrenderer/plane/.+") +source_group("Rendering\\Software Renderer\\Things" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/swrenderer/things/.+") +source_group("Rendering\\Software Renderer\\Viewport" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/swrenderer/viewport/.+") +source_group("Rendering\\Poly Renderer" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/polyrenderer/.+") +source_group("Rendering\\Poly Renderer\\Math" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/polyrenderer/math/.+") +source_group("Rendering\\Poly Renderer\\Drawers" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/polyrenderer/drawers/.+") +source_group("Rendering\\Poly Renderer\\Scene" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/rendering/polyrenderer/scene/.+") source_group("Render Data" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/r_data/.+") -source_group("Render Data\\Textures" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/textures/.+") -source_group("Render Data\\Textures\\Hires" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/textures/hires/.+") -source_group("Render Data\\Textures\\Hires\\HQ Resize" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/textures/hires/hqnx/.+") -source_group("Render Data\\Textures\\Hires\\HQ Resize MMX version" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/textures/hires/hqnx_asm/.+") -source_group("Render Data\\Textures\\Hires\\XBRZ" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/textures/hires/xbr/.+") -source_group("Render Data\\Textures\\Formats" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/textures/formats/.+") source_group("Render Data\\Models" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/r_data/models/.+") source_group("Render Interface" FILES r_defs.h r_renderer.h r_sky.cpp r_sky.h r_state.h r_utility.cpp r_utility.h) -source_group("Resource Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/resourcefiles/.+") source_group("Platforms\\POSIX Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/posix/.+") source_group("Platforms\\Cocoa Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/posix/cocoa/.+") source_group("Platforms\\OS X Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/posix/osx/.+") @@ -1501,8 +1513,13 @@ source_group("Scripting\\ZScript frontend" REGULAR_EXPRESSION "^${CMAKE_CURRENT_ source_group("Scripting\\Compiler backend" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/scripting/backend/.+") source_group("Scripting\\VM" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/scripting/vm/.+") source_group("Scripting" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/scripting/.+") +source_group("Utility" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/utility/.+") +source_group("Utility\\Node Builder" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/utility/nodebuilder/.+") +source_group("Utility\\Math" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/utility/math/.+") +source_group("Utility\\RapidJSON" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/utility/rapidjson/.+") +source_group("Utility\\SFMT" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/utility/sfmt/.+") source_group("Shared Game" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/g_shared/.+") source_group("Statusbar" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/g_statusbar/.+") source_group("Versioning" FILES version.h win32/zdoom.rc) source_group("Xlat" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/xlat/.+" FILES ${CMAKE_CURRENT_BINARY_DIR}/xlat_parser.c ${CMAKE_CURRENT_BINARY_DIR}/xlat_parser.h) -source_group("Source Files" FILES ${CMAKE_CURRENT_BINARY_DIR}/sc_man_scanner.h sc_man_scanner.re) +source_group("Source Files" FILES ${CMAKE_CURRENT_BINARY_DIR}/sc_man_scanner.h utility/sc_man_scanner.re) diff --git a/src/actor.h b/src/actor.h index a89f0a744a..b53a92a636 100644 --- a/src/actor.h +++ b/src/actor.h @@ -54,6 +54,8 @@ struct FPortalGroupArray; struct visstyle_t; class FLightDefaults; struct FSection; +struct FLevelLocals; +struct FDynamicLight; // // NOTES: AActor // @@ -89,8 +91,7 @@ struct FSection; // // Every actor is linked into a single sector // based on its origin coordinates. -// The subsector_t is found with R_PointInSubsector(x,y), -// and the sector_t can be found with subsector->sector. +// The subsector_t is found with PointInSector(x,y). // The sector links are only used by the rendering code, // the play simulation does not care about them at all. // @@ -451,6 +452,7 @@ enum ActorRenderFlag RF_SPRITEFLIP = 0x08000000, // sprite flipped on x-axis RF_ZDOOMTRANS = 0x10000000, // is not normally transparent in Vanilla Doom + RF_NOINTERPOLATEVIEW = 0x40000000, // don't interpolate the view next frame if this actor is a camera. }; // This translucency value produces the closest match to Heretic's TINTTAB. @@ -637,8 +639,8 @@ class AActor : public DThinker DECLARE_CLASS_WITH_META (AActor, DThinker, PClassActor) HAS_OBJECT_POINTERS public: - AActor () throw(); - AActor (const AActor &other) throw(); + AActor() = default; + AActor(const AActor &other) = delete; // Calling this would be disastrous. AActor &operator= (const AActor &other); ~AActor (); @@ -648,7 +650,7 @@ public: virtual void PostBeginPlay() override; // Called immediately before the actor's first tick virtual void Tick() override; - static AActor *StaticSpawn (PClassActor *type, const DVector3 &pos, replace_t allowreplacement, bool SpawningMapThing = false); + static AActor *StaticSpawn (FLevelLocals *Level, PClassActor *type, const DVector3 &pos, replace_t allowreplacement, bool SpawningMapThing = false); inline AActor *GetDefault () const { @@ -752,7 +754,7 @@ public: void ClearInventory(); // Returns true if this view is considered "local" for the player. - bool CheckLocalView (int playernum) const; + bool CheckLocalView() const; // Finds the first item of a particular type. AActor *FindInventory (PClassActor *type, bool subclass=false); @@ -899,74 +901,12 @@ public: return other->PosRelative(this) - Pos(); } - DVector2 Vec2Offset(double dx, double dy, bool absolute = false) - { - if (absolute) - { - return { X() + dx, Y() + dy }; - } - else - { - return P_GetOffsetPosition(X(), Y(), dx, dy); - } - } - - - DVector3 Vec2OffsetZ(double dx, double dy, double atz, bool absolute = false) - { - if (absolute) - { - return{ X() + dx, Y() + dy, atz }; - } - else - { - DVector2 v = P_GetOffsetPosition(X(), Y(), dx, dy); - return DVector3(v, atz); - } - } - - DVector2 Vec2Angle(double length, DAngle angle, bool absolute = false) - { - if (absolute) - { - return{ X() + length * angle.Cos(), Y() + length * angle.Sin() }; - } - else - { - return P_GetOffsetPosition(X(), Y(), length*angle.Cos(), length*angle.Sin()); - } - } - - DVector3 Vec3Offset(double dx, double dy, double dz, bool absolute = false) - { - if (absolute) - { - return { X() + dx, Y() + dy, Z() + dz }; - } - else - { - DVector2 v = P_GetOffsetPosition(X(), Y(), dx, dy); - return DVector3(v, Z() + dz); - } - } - - DVector3 Vec3Offset(const DVector3 &ofs, bool absolute = false) - { - return Vec3Offset(ofs.X, ofs.Y, ofs.Z, absolute); - } - - DVector3 Vec3Angle(double length, DAngle angle, double dz, bool absolute = false) - { - if (absolute) - { - return{ X() + length * angle.Cos(), Y() + length * angle.Sin(), Z() + dz }; - } - else - { - DVector2 v = P_GetOffsetPosition(X(), Y(), length*angle.Cos(), length*angle.Sin()); - return DVector3(v, Z() + dz); - } - } + DVector2 Vec2Offset(double dx, double dy, bool absolute = false); + DVector3 Vec2OffsetZ(double dx, double dy, double atz, bool absolute = false); + DVector2 Vec2Angle(double length, DAngle angle, bool absolute = false); + DVector3 Vec3Offset(double dx, double dy, double dz, bool absolute = false); + DVector3 Vec3Offset(const DVector3 &ofs, bool absolute = false); + DVector3 Vec3Angle(double length, DAngle angle, double dz, bool absolute = false); void ClearInterpolation(); @@ -1240,19 +1180,16 @@ public: // ThingIDs - static void ClearTIDHashes (); void AddToHash (); void RemoveFromHash (); private: - static AActor *TIDHash[128]; static inline int TIDHASH (int key) { return key & 127; } public: static FSharedStringArena mStringPropertyData; private: friend class FActorIterator; - friend bool P_IsTIDUsed(int tid); bool FixMapthingPos(); @@ -1487,27 +1424,28 @@ public: int ApplyDamageFactor(FName damagetype, int damage) const; int GetModifiedDamage(FName damagetype, int damage, bool passive); void DeleteAttachedLights(); - static void DeleteAllAttachedLights(); - static void RecreateAllAttachedLights(); + bool isFrozen(); bool hasmodel; }; class FActorIterator { + friend struct FLevelLocals; +protected: + FActorIterator (AActor **hash, int i) : TIDHash(hash), base (nullptr), id (i) + { + } + FActorIterator (AActor **hash, int i, AActor *start) : TIDHash(hash), base (start), id (i) + { + } public: - FActorIterator (int i) : base (NULL), id (i) - { - } - FActorIterator (int i, AActor *start) : base (start), id (i) - { - } AActor *Next () { if (id == 0) - return NULL; + return nullptr; if (!base) - base = AActor::TIDHash[id & 127]; + base = TIDHash[id & 127]; else base = base->inext; @@ -1522,37 +1460,23 @@ public: } private: + AActor **TIDHash; AActor *base; int id; }; -template -class TActorIterator : public FActorIterator -{ -public: - TActorIterator (int id) : FActorIterator (id) {} - T *Next () - { - AActor *actor; - do - { - actor = FActorIterator::Next (); - } while (actor && !actor->IsKindOf (RUNTIME_CLASS(T))); - return static_cast(actor); - } -}; - class NActorIterator : public FActorIterator { + friend struct FLevelLocals; const PClass *type; +protected: + NActorIterator (AActor **hash, const PClass *cls, int id) : FActorIterator (hash, id) { type = cls; } + NActorIterator (AActor **hash, FName cls, int id) : FActorIterator (hash, id) { type = PClass::FindClass(cls); } public: - NActorIterator (const PClass *cls, int id) : FActorIterator (id) { type = cls; } - NActorIterator (FName cls, int id) : FActorIterator (id) { type = PClass::FindClass(cls); } - NActorIterator (const char *cls, int id) : FActorIterator (id) { type = PClass::FindClass(cls); } AActor *Next () { AActor *actor; - if (type == NULL) return NULL; + if (type == nullptr) return nullptr; do { actor = FActorIterator::Next (); @@ -1561,39 +1485,36 @@ public: } }; -bool P_IsTIDUsed(int tid); -int P_FindUniqueTID(int start_tid, int limit); - PClassActor *ClassForSpawn(FName classname); -inline AActor *Spawn(PClassActor *type) +inline AActor *Spawn(FLevelLocals *Level, PClassActor *type) { - return AActor::StaticSpawn(type, DVector3(0, 0, 0), NO_REPLACE); + return AActor::StaticSpawn(Level, type, DVector3(0, 0, 0), NO_REPLACE); } -inline AActor *Spawn(PClassActor *type, const DVector3 &pos, replace_t allowreplacement) +inline AActor *Spawn(FLevelLocals *Level, PClassActor *type, const DVector3 &pos, replace_t allowreplacement) { - return AActor::StaticSpawn(type, pos, allowreplacement); + return AActor::StaticSpawn(Level, type, pos, allowreplacement); } -inline AActor *Spawn(FName type) +inline AActor *Spawn(FLevelLocals *Level, FName type) { - return AActor::StaticSpawn(ClassForSpawn(type), DVector3(0, 0, 0), NO_REPLACE); + return AActor::StaticSpawn(Level, ClassForSpawn(type), DVector3(0, 0, 0), NO_REPLACE); } -inline AActor *Spawn(FName type, const DVector3 &pos, replace_t allowreplacement) +inline AActor *Spawn(FLevelLocals *Level, FName type, const DVector3 &pos, replace_t allowreplacement) { - return AActor::StaticSpawn(ClassForSpawn(type), pos, allowreplacement); + return AActor::StaticSpawn(Level, ClassForSpawn(type), pos, allowreplacement); } -template inline T *Spawn(const DVector3 &pos, replace_t allowreplacement) +template inline T *Spawn(FLevelLocals *Level, const DVector3 &pos, replace_t allowreplacement) { - return static_cast(AActor::StaticSpawn(RUNTIME_CLASS(T), pos, allowreplacement)); + return static_cast(AActor::StaticSpawn(Level, RUNTIME_CLASS(T), pos, allowreplacement)); } -template inline T *Spawn() // for inventory items we do not need coordinates and replacement info. +template inline T *Spawn(FLevelLocals *Level) // for inventory items we do not need coordinates and replacement info. { - return static_cast(AActor::StaticSpawn(RUNTIME_CLASS(T), DVector3(0, 0, 0), NO_REPLACE)); + return static_cast(AActor::StaticSpawn(Level, RUNTIME_CLASS(T), DVector3(0, 0, 0), NO_REPLACE)); } inline PClassActor *PClass::FindActor(FName name) diff --git a/src/actorinlines.h b/src/actorinlines.h index 091160fca4..3e4f7684bb 100644 --- a/src/actorinlines.h +++ b/src/actorinlines.h @@ -8,30 +8,24 @@ inline DVector3 AActor::PosRelative(int portalgroup) const { - return Pos() + level.Displacements.getOffset(Sector->PortalGroup, portalgroup); + return Pos() + Level->Displacements.getOffset(Sector->PortalGroup, portalgroup); } inline DVector3 AActor::PosRelative(const AActor *other) const { - return Pos() + level.Displacements.getOffset(Sector->PortalGroup, other->Sector->PortalGroup); + return Pos() + Level->Displacements.getOffset(Sector->PortalGroup, other->Sector->PortalGroup); } inline DVector3 AActor::PosRelative(sector_t *sec) const { - return Pos() + level.Displacements.getOffset(Sector->PortalGroup, sec->PortalGroup); + return Pos() + Level->Displacements.getOffset(Sector->PortalGroup, sec->PortalGroup); } inline DVector3 AActor::PosRelative(const line_t *line) const { - return Pos() + level.Displacements.getOffset(Sector->PortalGroup, line->frontsector->PortalGroup); + return Pos() + Level->Displacements.getOffset(Sector->PortalGroup, line->frontsector->PortalGroup); } -inline DVector3 PosRelative(const DVector3 &pos, line_t *line, sector_t *refsec = NULL) -{ - return pos + level.Displacements.getOffset(refsec->PortalGroup, line->frontsector->PortalGroup); -} - - inline void AActor::ClearInterpolation() { Prev = Pos(); @@ -61,7 +55,7 @@ inline double AActor::GetBobOffset(double ticfrac) const { return 0; } - return BobSin(FloatBobPhase + level.maptime + ticfrac) * FloatBobStrength; + return BobSin(FloatBobPhase + Level->maptime + ticfrac) * FloatBobStrength; } inline double AActor::GetCameraHeight() const @@ -78,7 +72,7 @@ inline FDropItem *AActor::GetDropItems() const inline double AActor::GetGravity() const { if (flags & MF_NOGRAVITY) return 0; - return level.gravity * Sector->gravity * Gravity * 0.00125; + return Level->gravity * Sector->gravity * Gravity * 0.00125; } inline double AActor::AttackOffset(double offset) @@ -92,4 +86,95 @@ inline double AActor::AttackOffset(double offset) return 8 + offset; } -} \ No newline at end of file +} + +inline DVector2 AActor::Vec2Offset(double dx, double dy, bool absolute) +{ + if (absolute) + { + return { X() + dx, Y() + dy }; + } + else + { + return Level->GetPortalOffsetPosition(X(), Y(), dx, dy); + } +} + + +inline DVector3 AActor::Vec2OffsetZ(double dx, double dy, double atz, bool absolute) +{ + if (absolute) + { + return{ X() + dx, Y() + dy, atz }; + } + else + { + DVector2 v = Level->GetPortalOffsetPosition(X(), Y(), dx, dy); + return DVector3(v, atz); + } +} + +inline DVector2 AActor::Vec2Angle(double length, DAngle angle, bool absolute) +{ + if (absolute) + { + return{ X() + length * angle.Cos(), Y() + length * angle.Sin() }; + } + else + { + return Level->GetPortalOffsetPosition(X(), Y(), length*angle.Cos(), length*angle.Sin()); + } +} + +inline DVector3 AActor::Vec3Offset(double dx, double dy, double dz, bool absolute) +{ + if (absolute) + { + return { X() + dx, Y() + dy, Z() + dz }; + } + else + { + DVector2 v = Level->GetPortalOffsetPosition(X(), Y(), dx, dy); + return DVector3(v, Z() + dz); + } +} + +inline DVector3 AActor::Vec3Offset(const DVector3 &ofs, bool absolute) +{ + return Vec3Offset(ofs.X, ofs.Y, ofs.Z, absolute); +} + +inline DVector3 AActor::Vec3Angle(double length, DAngle angle, double dz, bool absolute) +{ + if (absolute) + { + return{ X() + length * angle.Cos(), Y() + length * angle.Sin(), Z() + dz }; + } + else + { + DVector2 v = Level->GetPortalOffsetPosition(X(), Y(), length*angle.Cos(), length*angle.Sin()); + return DVector3(v, Z() + dz); + } +} + +inline bool AActor::isFrozen() +{ + if (!(flags5 & MF5_NOTIMEFREEZE)) + { + auto state = Level->isFrozen(); + if (state) + { + if (player == nullptr || player->Bot != nullptr) return true; + + // This is the only place in the entire game where the two freeze flags need different treatment. + // The time freezer flag also freezes other players, the global setting does not. + + if ((state & 1) && player->timefreezer == 0) + { + return true; + } + } + } + return false; +} + diff --git a/src/am_map.cpp b/src/am_map.cpp index a5c6157581..a317c1190f 100644 --- a/src/am_map.cpp +++ b/src/am_map.cpp @@ -26,6 +26,7 @@ //----------------------------------------------------------------------------- #include +#include #include "doomdef.h" #include "templates.h" @@ -45,6 +46,8 @@ #include "sbar.h" #include "d_player.h" #include "p_blockmap.h" +#include "g_game.h" +#include "v_video.h" #include "m_cheat.h" #include "c_dispatch.h" @@ -65,29 +68,100 @@ #include "earcut.hpp" +//============================================================================= +// +// Global state +// +//============================================================================= + +enum +{ + AM_NUMMARKPOINTS = 10, +}; + +// C++ cannot do static const floats in a class, so these need to be global... +static const double PLAYERRADIUS = 16.; // player radius for automap checking +static const double M_ZOOMIN = (1.02); // how much zoom-in per tic - goes to 2x in 1 second +static const double M_ZOOMOUT = (1 / 1.02); // how much zoom-out per tic - pulls out to 0.5x in 1 second + +static FTextureID marknums[AM_NUMMARKPOINTS]; // numbers used for marking by the automap +bool automapactive = false; + +//============================================================================= +// +// Types +// +//============================================================================= + +struct fpoint_t +{ + int x, y; +}; + +struct fline_t +{ + fpoint_t a, b; +}; + +struct mpoint_t +{ + double x, y; +}; + +struct mline_t +{ + mpoint_t a, b; +}; + +struct islope_t +{ + double slp, islp; +}; + //============================================================================= // // CVARs // //============================================================================= -CVAR (Int, am_rotate, 0, CVAR_ARCHIVE); -CVAR (Int, am_overlay, 0, CVAR_ARCHIVE); -CVAR (Bool, am_showsecrets, true, CVAR_ARCHIVE); -CVAR (Bool, am_showmonsters, true, CVAR_ARCHIVE); -CVAR (Bool, am_showitems, false, CVAR_ARCHIVE); -CVAR (Bool, am_showtime, true, CVAR_ARCHIVE); -CVAR (Bool, am_showtotaltime, false, CVAR_ARCHIVE); -CVAR (Int, am_colorset, 0, CVAR_ARCHIVE); -CVAR (Bool, am_customcolors, true, CVAR_ARCHIVE); -CVAR (Int, am_map_secrets, 1, CVAR_ARCHIVE); -CVAR (Int, am_drawmapback, 1, CVAR_ARCHIVE); -CVAR (Bool, am_showkeys, true, CVAR_ARCHIVE); -CVAR (Bool, am_showkeys_always, false, CVAR_ARCHIVE); -CVAR (Int, am_showtriggerlines, 0, CVAR_ARCHIVE); -CVAR (Int, am_showthingsprites, 0, CVAR_ARCHIVE); +CVAR(Bool, am_textured, false, CVAR_ARCHIVE) +CVAR(Int, am_showsubsector, -1, 0); -CUSTOM_CVAR (Int, am_emptyspacemargin, 0, CVAR_ARCHIVE) + +CUSTOM_CVAR(Int, am_showalllines, -1, CVAR_NOINITCALL) // This is a cheat so don't save it. +{ + if (primaryLevel && primaryLevel->automap) + primaryLevel->automap->UpdateShowAllLines(); +} + +EXTERN_CVAR(Bool, sv_cheats) +CUSTOM_CVAR(Int, am_cheat, 0, 0) +{ + // No automap cheat in net games when cheats are disabled! + if (netgame && !sv_cheats && self != 0) + { + self = 0; + } +} + + +CVAR(Int, am_rotate, 0, CVAR_ARCHIVE); +CVAR(Int, am_overlay, 0, CVAR_ARCHIVE); +CVAR(Bool, am_showsecrets, true, CVAR_ARCHIVE); +CVAR(Bool, am_showmonsters, true, CVAR_ARCHIVE); +CVAR(Bool, am_showitems, false, CVAR_ARCHIVE); +CVAR(Bool, am_showtime, true, CVAR_ARCHIVE); +CVAR(Bool, am_showtotaltime, false, CVAR_ARCHIVE); +CVAR(Int, am_colorset, 0, CVAR_ARCHIVE); +CVAR(Bool, am_customcolors, true, CVAR_ARCHIVE); +CVAR(Int, am_map_secrets, 1, CVAR_ARCHIVE); +CVAR(Int, am_drawmapback, 1, CVAR_ARCHIVE); +CVAR(Bool, am_showkeys, true, CVAR_ARCHIVE); +CVAR(Int, am_showtriggerlines, 0, CVAR_ARCHIVE); +CVAR(Int, am_showthingsprites, 0, CVAR_ARCHIVE); +CVAR (Bool, am_showkeys_always, false, CVAR_ARCHIVE); + +CUSTOM_CVAR(Int, am_emptyspacemargin, 0, CVAR_ARCHIVE) { if (self < 0) { @@ -98,12 +172,86 @@ CUSTOM_CVAR (Int, am_emptyspacemargin, 0, CVAR_ARCHIVE) self = 90; } - if (nullptr != StatusBar) + if (nullptr != StatusBar && primaryLevel && primaryLevel->automap) { - AM_NewResolution(); + primaryLevel->automap->NewResolution(); } } +//============================================================================= +// +// map functions +// +//============================================================================= + +CVAR(Bool, am_followplayer, true, CVAR_ARCHIVE) +CVAR(Bool, am_portaloverlay, true, CVAR_ARCHIVE) +CVAR(Bool, am_showgrid, false, CVAR_ARCHIVE) +CVAR(Float, am_zoomdir, 0, CVAR_ARCHIVE) + +CCMD(am_togglefollow) +{ + am_followplayer = !am_followplayer; + if (primaryLevel && primaryLevel->automap) + primaryLevel->automap->ResetFollowLocation(); + Printf("%s\n", GStrings(am_followplayer ? "AMSTR_FOLLOWON" : "AMSTR_FOLLOWOFF")); +} + +CCMD(am_togglegrid) +{ + am_showgrid = !am_showgrid; + Printf("%s\n", GStrings(am_showgrid ? "AMSTR_GRIDON" : "AMSTR_GRIDOFF")); +} + +CCMD(am_toggletexture) +{ + am_textured = !am_textured; + Printf("%s\n", GStrings(am_textured ? "AMSTR_TEXON" : "AMSTR_TEXOFF")); +} + +CCMD(am_setmark) +{ + if (primaryLevel && primaryLevel->automap) + { + int m = primaryLevel->automap->addMark(); + if (m >= 0) + { + Printf("%s %d\n", GStrings("AMSTR_MARKEDSPOT"), m); + } + } +} + +CCMD(am_clearmarks) +{ + if (primaryLevel && primaryLevel->automap && primaryLevel->automap->clearMarks()) + { + Printf("%s\n", GStrings("AMSTR_MARKSCLEARED")); + } +} + +CCMD(am_gobig) +{ + if (primaryLevel && primaryLevel->automap) + primaryLevel->automap->GoBig(); +} + +CCMD(togglemap) +{ + if (gameaction == ga_nothing) + { + gameaction = ga_togglemap; + } +} + +CCMD(am_zoom) +{ + if (argv.argc() >= 2) + { + am_zoomdir = (float)atof(argv[1]); + } +} + + //============================================================================= // // Automap colors @@ -224,7 +372,7 @@ static const char *ColorNames[] = { "UnexploredSecretColor", "PortalColor", "AlmostBackgroundColor", - NULL + nullptr }; struct AMColorset @@ -522,12 +670,61 @@ void AM_ClearColorsets() AMModOverlay.defined = false; AMMod.defined = false; } + //============================================================================= // // // //============================================================================= +static void AM_initColors(bool overlayed) +{ + if (overlayed) + { + if (am_customcolors && AMModOverlay.defined) + { + AMColors = AMModOverlay; + } + else + { + AMColors.initFromCVars(cv_overlay); + } + } + else if (am_customcolors && AMMod.defined) + { + AMColors = AMMod; + } + else switch (am_colorset) + { + default: + /* Use the custom colors in the am_* cvars */ + AMColors.initFromCVars(cv_standard); + break; + + case 1: // Doom + // Use colors corresponding to the original Doom's + AMColors.initFromColors(DoomColors, false); + break; + + case 2: // Strife + // Use colors corresponding to the original Strife's + AMColors.initFromColors(StrifeColors, false); + break; + + case 3: // Raven + // Use colors corresponding to the original Raven's + AMColors.initFromColors(RavenColors, true); + break; + + } +} + +//============================================================================= +// +// custom color parser +// +//============================================================================= + void FMapInfoParser::ParseAMColors(bool overlay) { bool colorset = false; @@ -579,7 +776,7 @@ void FMapInfoParser::ParseAMColors(bool overlay) else { int i; - for (i = 0; ColorNames[i] != NULL; i++) + for (i = 0; ColorNames[i] != nullptr; i++) { if (nextKey.CompareNoCase(ColorNames[i]) == 0) { @@ -587,13 +784,13 @@ void FMapInfoParser::ParseAMColors(bool overlay) FString color = sc.String; FString colorName = V_GetColorStringByName(color); if(!colorName.IsEmpty()) color = colorName; - int colorval = V_GetColorFromString(NULL, color); + int colorval = V_GetColorFromString(nullptr, color); cset.c[i].FromRGB(RPART(colorval), GPART(colorval), BPART(colorval)); colorset = true; break; } } - if (ColorNames[i]== NULL) + if (ColorNames[i]== nullptr) { sc.ScriptError("Unknown key '%s'", nextKey.GetChars()); } @@ -601,136 +798,6 @@ void FMapInfoParser::ParseAMColors(bool overlay) } } -//============================================================================= -// -// -// -//============================================================================= - -// scale on entry -#define INITSCALEMTOF .2 -// used by MTOF to scale from map-to-frame-buffer coords -static double scale_mtof = INITSCALEMTOF; -// used by FTOM to scale from frame-buffer-to-map coords (=1/scale_mtof) -static double scale_ftom; - -// translates between frame-buffer and map distances -inline double FTOM(double x) -{ - return x * scale_ftom; -} - -inline double MTOF(double x) -{ - return x * scale_mtof; -} - -static int bigstate = 0; -static bool textured = 1; // internal toggle for texture mode -static int MapPortalGroup; - -CUSTOM_CVAR(Bool, am_textured, false, CVAR_ARCHIVE) -{ - textured |= self; -} - -CVAR(Int, am_showsubsector, -1, 0); - - -// Disable the ML_DONTDRAW line flag if x% of all lines in a map are flagged with it -// (To counter annoying mappers who think they are smart by making the automap unusable) -bool am_showallenabled; - -CUSTOM_CVAR (Int, am_showalllines, -1, 0) // This is a cheat so don't save it. -{ - int flagged = 0; - int total = 0; - if (self > 0 && level.lines.Size() > 0) - { - for(auto &line : level.lines) - { - // disregard intra-sector lines - if (line.frontsector == line.backsector) continue; - - // disregard control sectors for deep water - if (line.frontsector->e->FakeFloor.Sectors.Size() > 0) continue; - - // disregard control sectors for 3D-floors - if (line.frontsector->e->XFloor.attached.Size() > 0) continue; - - total++; - if (line.flags & ML_DONTDRAW) flagged++; - } - am_showallenabled = (flagged * 100 / total >= self); - } - else if (self == 0) - { - am_showallenabled = true; - } - else - { - am_showallenabled = false; - } -} - -EXTERN_CVAR (Bool, sv_cheats) -CUSTOM_CVAR (Int, am_cheat, 0, 0) -{ - // No automap cheat in net games when cheats are disabled! - if (netgame && !sv_cheats && self != 0) - { - self = 0; - } -} - - - -#define AM_NUMMARKPOINTS 10 - -// player radius for automap checking -#define PLAYERRADIUS 16. - -// how much the automap moves window per tic in frame-buffer coordinates -// moves 140 pixels at 320x200 in 1 second -#define F_PANINC (140/TICRATE) -// how much zoom-in per tic -// goes to 2x in 1 second -#define M_ZOOMIN (1.02) -// how much zoom-out per tic -// pulls out to 0.5x in 1 second -#define M_ZOOMOUT (1/1.02) - -// translates between frame-buffer and map coordinates -#define CXMTOF(x) int(MTOF((x)-m_x)/* - f_x*/) -#define CYMTOF(y) int(f_h - MTOF((y)-m_y)/* + f_y*/) - -struct fpoint_t -{ - int x, y; -}; - -struct fline_t -{ - fpoint_t a, b; -}; - -struct mpoint_t -{ - double x, y; -}; - -struct mline_t -{ - mpoint_t a, b; -}; - -struct islope_t -{ - double slp, islp; -}; - - - //============================================================================= // // The vector graphics for the automap. @@ -744,169 +811,11 @@ static TArray CheatMapArrow; static TArray CheatKey; static TArray EasyKey; -#define L(a,b,c,d) { {(a), (b)}, {(c), (d)} } -static mline_t triangle_guy[] = { - L (-.867,-.5, .867,-.5), - L (.867,-.5, 0,1), - L (0,1, -.867,-.5) -}; -#define NUMTRIANGLEGUYLINES (sizeof(triangle_guy)/sizeof(mline_t)) - -static mline_t thintriangle_guy[] = { - L (-.5,-.7, 1,0), - L (1,0, -.5,.7), - L (-.5,.7, -.5,-.7) -}; -#define NUMTHINTRIANGLEGUYLINES (sizeof(thintriangle_guy)/sizeof(mline_t)) - -static mline_t square_guy[] = { - L (0,1,1,0), - L (1,0,0,-1), - L (0,-1,-1,0), - L (-1,0,0,1) -}; -#define NUMSQUAREGUYLINES (sizeof(square_guy)/sizeof(mline_t)) - -//============================================================================= -// -// -// -//============================================================================= - -static int grid = 0; - -bool automapactive = false; - -// location of window on screen -static int f_x; -static int f_y; - -// size of window on screen -static int f_w; -static int f_h; - -static int amclock; - -static mpoint_t m_paninc; // how far the window pans each tic (map coords) -static double mtof_zoommul; // how far the window zooms in each tic (map coords) -static double am_zoomdir; - -static double m_x, m_y; // LL x,y where the window is on the map (map coords) -static double m_x2, m_y2; // UR x,y where the window is on the map (map coords) - -// -// width/height of window on map (map coords) -// -static double m_w; -static double m_h; - -// based on level size -static double min_x, min_y, max_x, max_y; - -static double max_w; // max_x-min_x, -static double max_h; // max_y-min_y - -// based on player size -static double min_w; -static double min_h; - - -static double min_scale_mtof; // used to tell when to stop zooming out -static double max_scale_mtof; // used to tell when to stop zooming in - -// old stuff for recovery later -static double old_m_w, old_m_h; -static double old_m_x, old_m_y; - -// old location used by the Follower routine -static mpoint_t f_oldloc; - -static FTextureID marknums[10]; // numbers used for marking by the automap -static mpoint_t markpoints[AM_NUMMARKPOINTS]; // where the points are -static int markpointnum = 0; // next point to be assigned - -static FTextureID mapback; // the automap background -static double mapystart=0; // y-value for the start of the map bitmap...used in the parallax stuff. -static double mapxstart=0; //x-value for the bitmap. - -static bool stopped = true; - -static void AM_calcMinMaxMtoF(); - -static void DrawMarker (FTexture *tex, double x, double y, int yadjust, - INTBOOL flip, double xscale, double yscale, int translation, double alpha, uint32_t fillcolor, FRenderStyle renderstyle); - -void AM_rotatePoint (double *x, double *y); -void AM_rotate (double *x, double *y, DAngle an); -void AM_doFollowPlayer (); - - -//============================================================================= -// -// map functions -// -//============================================================================= - -bool AM_addMark (); -bool AM_clearMarks (); -void AM_saveScaleAndLoc (); -void AM_restoreScaleAndLoc (); -void AM_minOutWindowScale (); - - -CVAR(Bool, am_followplayer, true, CVAR_ARCHIVE) -CVAR(Bool, am_portaloverlay, true, CVAR_ARCHIVE) - - -CCMD(am_togglefollow) -{ - am_followplayer = !am_followplayer; - f_oldloc.x = FLT_MAX; - Printf ("%s\n", GStrings(am_followplayer ? "AMSTR_FOLLOWON" : "AMSTR_FOLLOWOFF")); -} - -CCMD(am_togglegrid) -{ - grid = !grid; - Printf ("%s\n", GStrings(grid ? "AMSTR_GRIDON" : "AMSTR_GRIDOFF")); -} - -CCMD(am_toggletexture) -{ - if (am_textured) - { - textured = !textured; - Printf ("%s\n", GStrings(textured ? "AMSTR_TEXON" : "AMSTR_TEXOFF")); - } -} - -CCMD(am_setmark) -{ - if (AM_addMark()) - { - Printf ("%s %d\n", GStrings("AMSTR_MARKEDSPOT"), markpointnum); - } -} - -CCMD(am_clearmarks) -{ - if (AM_clearMarks()) - { - Printf ("%s\n", GStrings("AMSTR_MARKSCLEARED")); - } -} - -CCMD(am_gobig) -{ - bigstate = !bigstate; - if (bigstate) - { - AM_saveScaleAndLoc(); - AM_minOutWindowScale(); - } - else - AM_restoreScaleAndLoc(); -} +static std::array thintriangle_guy = { { + {{-.5,-.7}, {1,0}}, + {{1,0}, {-.5,.7}}, + {{-.5,.7}, {-.5,-.7}} +} }; //============================================================================= // @@ -914,9 +823,9 @@ CCMD(am_gobig) // //============================================================================= -void AM_ParseArrow(TArray &Arrow, const char *lumpname) +static void AM_ParseArrow(TArray &Arrow, const char *lumpname) { - const int R = int((8*PLAYERRADIUS)/7); + const int R = int((8 * PLAYERRADIUS) / 7); FScanner sc; int lump = Wads.CheckNumForFullName(lumpname, true); if (lump >= 0) @@ -961,22 +870,192 @@ void AM_StaticInit() char namebuf[9]; - for (int i = 0; i < 10; i++) + for (int i = 0; i < AM_NUMMARKPOINTS; i++) { - mysnprintf (namebuf, countof(namebuf), "AMMNUM%d", i); - marknums[i] = TexMan.CheckForTexture (namebuf, ETextureType::MiscPatch); + mysnprintf(namebuf, countof(namebuf), "AMMNUM%d", i); + marknums[i] = TexMan.CheckForTexture(namebuf, ETextureType::MiscPatch); } - markpointnum = 0; - mapback.SetInvalid(); } + +//============================================================================= +// +// the actual automap class definition +// +//============================================================================= + +IMPLEMENT_CLASS(DAutomapBase, true, false); + +class DAutomap :public DAutomapBase +{ + DECLARE_CLASS(DAutomap, DAutomapBase) + + enum + { + F_PANINC = 140 / TICRATE, // how much the automap moves window per tic in frame-buffer coordinates moves 140 pixels at 320x200 in 1 second + }; + + //FLevelLocals *Level; + // scale on entry + // used by MTOF to scale from map-to-frame-buffer coords + double scale_mtof = .2; + // used by FTOM to scale from frame-buffer-to-map coords (=1/scale_mtof) + double scale_ftom; + + int bigstate; + int MapPortalGroup; + + // Disable the ML_DONTDRAW line flag if x% of all lines in a map are flagged with it + // (To counter annoying mappers who think they are smart by making the automap unusable) + bool am_showallenabled; + + // location of window on screen + int f_x; + int f_y; + + // size of window on screen + int f_w; + int f_h; + + int amclock; + + mpoint_t m_paninc; // how far the window pans each tic (map coords) + double mtof_zoommul; // how far the window zooms in each tic (map coords) + + double m_x, m_y; // LL x,y where the window is on the map (map coords) + double m_x2, m_y2; // UR x,y where the window is on the map (map coords) + + // + // width/height of window on map (map coords) + // + double m_w; + double m_h; + + // based on level size + double min_x, min_y, max_x, max_y; + + double max_w; // max_x-min_x, + double max_h; // max_y-min_y + + // based on player size + double min_w; + double min_h; + + + double min_scale_mtof; // used to tell when to stop zooming out + double max_scale_mtof; // used to tell when to stop zooming in + + // old stuff for recovery later + double old_m_w, old_m_h; + double old_m_x, old_m_y; + + // old location used by the Follower routine + mpoint_t f_oldloc; + + mpoint_t markpoints[AM_NUMMARKPOINTS]; // where the points are + int markpointnum = 0; // next point to be assigned + + FTextureID mapback; // the automap background + double mapystart = 0; // y-value for the start of the map bitmap...used in the parallax stuff. + double mapxstart = 0; //x-value for the bitmap. + + TArray points; + + // translates between frame-buffer and map distances + double FTOM(double x) + { + return x * scale_ftom; + } + + double MTOF(double x) + { + return x * scale_mtof; + } + + // translates between frame-buffer and map coordinates + int CXMTOF(double x) + { + return int(MTOF((x)-m_x)/* - f_x*/); + } + + int CYMTOF(double y) + { + return int(f_h - MTOF((y)-m_y)/* + f_y*/); + } + + void calcMinMaxMtoF(); + + void DrawMarker(FTexture *tex, double x, double y, int yadjust, + INTBOOL flip, double xscale, double yscale, int translation, double alpha, uint32_t fillcolor, FRenderStyle renderstyle); + + void rotatePoint(double *x, double *y); + void rotate(double *x, double *y, DAngle an); + void doFollowPlayer(); + void saveScaleAndLoc(); + void restoreScaleAndLoc(); + void minOutWindowScale(); + void activateNewScale(); + void findMinMaxBoundaries(); + void ClipRotatedExtents(double pivotx, double pivoty); + void ScrollParchment(double dmapx, double dmapy); + void changeWindowLoc(); + void maxOutWindowScale(); + void changeWindowScale(); + void clearFB(const AMColor &color); + bool clipMline(mline_t *ml, fline_t *fl); + void drawMline(mline_t *ml, const AMColor &color); + void drawMline(mline_t *ml, int colorindex); + void drawGrid(int color); + void drawSubsectors(); + void drawSeg(seg_t *seg, const AMColor &color); + void drawPolySeg(FPolySeg *seg, const AMColor &color); + void showSS(); + void drawWalls(bool allmap); + void drawLineCharacter(const mline_t *lineguy, size_t lineguylines, double scale, DAngle angle, const AMColor &color, double x, double y); + void drawPlayers(); + void drawKeys(); + void drawThings(); + void drawMarks(); + void drawAuthorMarkers(); + void drawCrosshair(const AMColor &color); + + +public: + bool Responder(event_t* ev, bool last) override; + void Ticker(void) override; + void Drawer(int bottom) override; + void NewResolution() override; + void LevelInit() override; + void UpdateShowAllLines() override; + void Serialize(FSerializer &arc) override; + void GoBig() override; + void ResetFollowLocation() override; + int addMark() override; + bool clearMarks() override; + DVector2 GetPosition() override; + void startDisplay() override; + +}; + +IMPLEMENT_CLASS(DAutomap, false, false) + + +//============================================================================= +// +// +// +//============================================================================= + + + + //============================================================================= // // called by the coordinate drawer // //============================================================================= -DVector2 AM_GetPosition() +DVector2 DAutomap::GetPosition() { return DVector2((m_x + m_w / 2), (m_y + m_h / 2)); } @@ -987,7 +1066,7 @@ DVector2 AM_GetPosition() // //============================================================================= -void AM_activateNewScale () +void DAutomap::activateNewScale () { m_x += m_w/2; m_y += m_h/2; @@ -1005,7 +1084,7 @@ void AM_activateNewScale () // //============================================================================= -void AM_saveScaleAndLoc () +void DAutomap::saveScaleAndLoc () { old_m_x = m_x; old_m_y = m_y; @@ -1019,7 +1098,7 @@ void AM_saveScaleAndLoc () // //============================================================================= -void AM_restoreScaleAndLoc () +void DAutomap::restoreScaleAndLoc () { m_w = old_m_w; m_h = old_m_h; @@ -1047,16 +1126,17 @@ void AM_restoreScaleAndLoc () // //============================================================================= -bool AM_addMark () +int DAutomap::addMark () { if (marknums[0].isValid()) { + auto m = markpointnum; markpoints[markpointnum].x = m_x + m_w/2; markpoints[markpointnum].y = m_y + m_h/2; markpointnum = (markpointnum + 1) % AM_NUMMARKPOINTS; - return true; + return m; } - return false; + return -1; } //============================================================================= @@ -1066,12 +1146,12 @@ bool AM_addMark () // //============================================================================= -static void AM_findMinMaxBoundaries () +void DAutomap::findMinMaxBoundaries () { min_x = min_y = FLT_MAX; max_x = max_y = FIXED_MIN; - for (auto &vert : level.vertexes) + for (auto &vert : Level->vertexes) { if (vert.fX() < min_x) min_x = vert.fX(); @@ -1090,7 +1170,7 @@ static void AM_findMinMaxBoundaries () min_w = 2*PLAYERRADIUS; // const? never changed? min_h = 2*PLAYERRADIUS; - AM_calcMinMaxMtoF(); + calcMinMaxMtoF(); } //============================================================================= @@ -1099,7 +1179,7 @@ static void AM_findMinMaxBoundaries () // //============================================================================= -static void AM_calcMinMaxMtoF() +void DAutomap::calcMinMaxMtoF() { const double safe_frame = 1.0 - am_emptyspacemargin / 100.0; double a = safe_frame * (SCREENWIDTH / max_w); @@ -1115,7 +1195,7 @@ static void AM_calcMinMaxMtoF() // //============================================================================= -static void AM_ClipRotatedExtents (double pivotx, double pivoty) +void DAutomap::ClipRotatedExtents (double pivotx, double pivoty) { if (am_rotate == 0 || (am_rotate == 2 && !viewactive)) { @@ -1129,51 +1209,6 @@ static void AM_ClipRotatedExtents (double pivotx, double pivoty) else if (m_y + m_h/2 < min_y) m_y = min_y - m_h/2; } - else - { -#if 0 - double rmin_x, rmin_y, rmax_x, rmax_y; - double xs[5], ys[5]; - int i; - - xs[0] = min_x; ys[0] = min_y; - xs[1] = max_x; ys[1] = min_y; - xs[2] = max_x; ys[2] = max_y; - xs[3] = min_x; ys[3] = max_y; - xs[4] = m_x + m_w/2; ys[4] = m_y + m_h/2; - rmin_x = rmin_y = FLT_MAX; - rmax_x = rmax_y = FIXED_MIN; - - for (i = 0; i < 5; ++i) - { - xs[i] -= pivotx; - ys[i] -= pivoty; - AM_rotate (&xs[i], &ys[i], 90. - players[consoleplayer].camera->Angles.Yaw); - - if (i == 5) - break; -// xs[i] += pivotx; -// ys[i] += pivoty; - - if (xs[i] < rmin_x) rmin_x = xs[i]; - if (xs[i] > rmax_x) rmax_x = xs[i]; - if (ys[i] < rmin_y) rmin_y = ys[i]; - if (ys[i] > rmax_y) rmax_y = ys[i]; - } - if (rmax_x < 0) - xs[4] = -rmax_x; - else if (rmin_x > 0) - xs[4] = -rmin_x; - -// if (ys[4] > rmax_y) -// ys[4] = rmax_y; -// else if (ys[4] < rmin_y) -// ys[4] = rmin_y; - AM_rotate (&xs[4], &ys[4], 270. - players[consoleplayer].camera->Angles.Yaw); - m_x = xs[4] + pivotx - m_w/2; - m_y = ys[4] + pivoty - m_h/2; -#endif - } m_x2 = m_x + m_w; m_y2 = m_y + m_h; @@ -1185,7 +1220,7 @@ static void AM_ClipRotatedExtents (double pivotx, double pivoty) // //============================================================================= -static void AM_ScrollParchment (double dmapx, double dmapy) +void DAutomap::ScrollParchment (double dmapx, double dmapy) { mapxstart = mapxstart - dmapx * scale_mtof; mapystart = mapystart - dmapy * scale_mtof; @@ -1197,7 +1232,7 @@ static void AM_ScrollParchment (double dmapx, double dmapy) { FTexture *backtex = TexMan.GetTexture(mapback); - if (backtex != NULL) + if (backtex != nullptr) { int pwidth = backtex->GetDisplayWidth(); int pheight = backtex->GetDisplayHeight(); @@ -1220,7 +1255,7 @@ static void AM_ScrollParchment (double dmapx, double dmapy) // //============================================================================= -void AM_changeWindowLoc () +void DAutomap::changeWindowLoc () { if (m_paninc.x || m_paninc.y) { @@ -1238,14 +1273,14 @@ void AM_changeWindowLoc () oincy = incy = m_paninc.y * SCREENHEIGHT / 200; if (am_rotate == 1 || (am_rotate == 2 && viewactive)) { - AM_rotate(&incx, &incy, players[consoleplayer].camera->Angles.Yaw - 90.); + rotate(&incx, &incy, players[consoleplayer].camera->Angles.Yaw - 90.); } m_x += incx; m_y += incy; - AM_ClipRotatedExtents (oldmx + m_w/2, oldmy + m_h/2); - AM_ScrollParchment (m_x != oldmx ? oincx : 0, m_y != oldmy ? -oincy : 0); + ClipRotatedExtents (oldmx + m_w/2, oldmy + m_h/2); + ScrollParchment (m_x != oldmx ? oincx : 0, m_y != oldmy ? -oincy : 0); } @@ -1255,21 +1290,10 @@ void AM_changeWindowLoc () // //============================================================================= -void AM_initVariables () +void DAutomap::startDisplay() { int pnum; - automapactive = true; - - // Reset AM buttons - Button_AM_PanLeft.Reset(); - Button_AM_PanRight.Reset(); - Button_AM_PanUp.Reset(); - Button_AM_PanDown.Reset(); - Button_AM_ZoomIn.Reset(); - Button_AM_ZoomOut.Reset(); - - f_oldloc.x = FLT_MAX; amclock = 0; @@ -1287,7 +1311,7 @@ void AM_initVariables () assert(pnum >= 0 && pnum < MAXPLAYERS); m_x = players[pnum].camera->X() - m_w/2; m_y = players[pnum].camera->Y() - m_h/2; - AM_changeWindowLoc(); + changeWindowLoc(); // for saving & restoring old_m_x = m_x; @@ -1302,55 +1326,7 @@ void AM_initVariables () // //============================================================================= -static void AM_initColors (bool overlayed) -{ - if (overlayed) - { - if (am_customcolors && AMModOverlay.defined) - { - AMColors = AMModOverlay; - } - else - { - AMColors.initFromCVars(cv_overlay); - } - } - else if (am_customcolors && AMMod.defined) - { - AMColors = AMMod; - } - else switch(am_colorset) - { - default: - /* Use the custom colors in the am_* cvars */ - AMColors.initFromCVars(cv_standard); - break; - - case 1: // Doom - // Use colors corresponding to the original Doom's - AMColors.initFromColors(DoomColors, false); - break; - - case 2: // Strife - // Use colors corresponding to the original Strife's - AMColors.initFromColors(StrifeColors, false); - break; - - case 3: // Raven - // Use colors corresponding to the original Raven's - AMColors.initFromColors(RavenColors, true); - break; - - } -} - -//============================================================================= -// -// -// -//============================================================================= - -bool AM_clearMarks () +bool DAutomap::clearMarks () { for (int i = AM_NUMMARKPOINTS-1; i >= 0; i--) markpoints[i].x = -1; // means empty @@ -1364,63 +1340,35 @@ bool AM_clearMarks () // //============================================================================= -void AM_LevelInit () +void DAutomap::LevelInit () { - if (level.info->MapBackground.Len() == 0) + if (Level->info->MapBackground.Len() == 0) { mapback = TexMan.CheckForTexture("AUTOPAGE", ETextureType::MiscPatch); } else { - mapback = TexMan.CheckForTexture(level.info->MapBackground, ETextureType::MiscPatch); + mapback = TexMan.CheckForTexture(Level->info->MapBackground, ETextureType::MiscPatch); } - AM_clearMarks(); + clearMarks(); - AM_findMinMaxBoundaries(); + findMinMaxBoundaries(); scale_mtof = min_scale_mtof / 0.7; if (scale_mtof > max_scale_mtof) scale_mtof = min_scale_mtof; scale_ftom = 1 / scale_mtof; - am_showalllines.Callback(); + UpdateShowAllLines(); } -//============================================================================= -// -// -// -//============================================================================= - -void AM_Stop () -{ - automapactive = false; - stopped = true; - viewactive = true; -} - -//============================================================================= -// -// -// -//============================================================================= - -void AM_Start () -{ - if (!stopped) AM_Stop(); - stopped = false; - AM_initVariables(); -} - - - //============================================================================= // // set the window scale to the maximum size // //============================================================================= -void AM_minOutWindowScale () +void DAutomap::minOutWindowScale () { scale_mtof = min_scale_mtof; scale_ftom = 1/ scale_mtof; @@ -1432,7 +1380,7 @@ void AM_minOutWindowScale () // //============================================================================= -void AM_maxOutWindowScale () +void DAutomap::maxOutWindowScale () { scale_mtof = max_scale_mtof; scale_ftom = 1 / scale_mtof; @@ -1444,7 +1392,7 @@ void AM_maxOutWindowScale () // //============================================================================= -void AM_NewResolution() +void DAutomap::NewResolution() { double oldmin = min_scale_mtof; @@ -1452,73 +1400,26 @@ void AM_NewResolution() { return; // [SP] Not in a game, exit! } - AM_calcMinMaxMtoF(); + calcMinMaxMtoF(); scale_mtof = scale_mtof * min_scale_mtof / oldmin; scale_ftom = 1 / scale_mtof; if (scale_mtof < min_scale_mtof) - AM_minOutWindowScale(); + minOutWindowScale(); else if (scale_mtof > max_scale_mtof) - AM_maxOutWindowScale(); + maxOutWindowScale(); f_w = screen->GetWidth(); f_h = StatusBar->GetTopOfStatusbar(); - AM_activateNewScale(); + activateNewScale(); } -//============================================================================= -// -// -// -//============================================================================= - -CCMD (togglemap) -{ - if (gameaction == ga_nothing) - { - gameaction = ga_togglemap; - } -} - -//============================================================================= -// -// -// -//============================================================================= - -void AM_ToggleMap () -{ - if (gamestate != GS_LEVEL) - return; - - // Don't activate the automap if we're not allowed to use it. - if (dmflags2 & DF2_NO_AUTOMAP) - return; - - if (!automapactive) - { - AM_Start (); - viewactive = (am_overlay != 0.f); - } - else - { - if (am_overlay==1 && viewactive) - { - viewactive = false; - } - else - { - AM_Stop (); - } - } -} - //============================================================================= // // Handle events (user inputs) in automap mode // //============================================================================= -bool AM_Responder (event_t *ev, bool last) +bool DAutomap::Responder (event_t *ev, bool last) { if (automapactive && (ev->type == EV_KeyDown || ev->type == EV_KeyUp)) { @@ -1529,7 +1430,7 @@ bool AM_Responder (event_t *ev, bool last) if (!strnicmp(defbind, "+am_pan", 7)) return false; } - bool res = C_DoKey(ev, &AutomapBindings, NULL); + bool res = C_DoKey(ev, &AutomapBindings, nullptr); if (res && ev->type == EV_KeyUp && !last) { // If this is a release event we also need to check if it released a button in the main Bindings @@ -1549,7 +1450,7 @@ bool AM_Responder (event_t *ev, bool last) // //============================================================================= -void AM_changeWindowScale () +void DAutomap::changeWindowScale () { double mtof_zoommul; @@ -1580,17 +1481,9 @@ void AM_changeWindowScale () scale_ftom = 1 / scale_mtof; if (scale_mtof < min_scale_mtof) - AM_minOutWindowScale(); + minOutWindowScale(); else if (scale_mtof > max_scale_mtof) - AM_maxOutWindowScale(); -} - -CCMD(am_zoom) -{ - if (argv.argc() >= 2) - { - am_zoomdir = atof(argv[1]); - } + maxOutWindowScale(); } //============================================================================= @@ -1599,7 +1492,7 @@ CCMD(am_zoom) // //============================================================================= -void AM_doFollowPlayer () +void DAutomap::doFollowPlayer () { double sx, sy; auto cam = players[consoleplayer].camera; @@ -1620,9 +1513,9 @@ void AM_doFollowPlayer () sy = (f_oldloc.y - ampos.Y); if (am_rotate == 1 || (am_rotate == 2 && viewactive)) { - AM_rotate(&sx, &sy, cam->Angles.Yaw - 90); + rotate(&sx, &sy, cam->Angles.Yaw - 90); } - AM_ScrollParchment(sx, sy); + ScrollParchment(sx, sy); f_oldloc.x = ampos.X; f_oldloc.y = ampos.Y; @@ -1636,7 +1529,7 @@ void AM_doFollowPlayer () // //============================================================================= -void AM_Ticker () +void DAutomap::Ticker () { if (!automapactive) return; @@ -1645,7 +1538,7 @@ void AM_Ticker () if (am_followplayer) { - AM_doFollowPlayer(); + doFollowPlayer(); } else { @@ -1658,11 +1551,11 @@ void AM_Ticker () // Change the zoom if necessary if (Button_AM_ZoomIn.bDown || Button_AM_ZoomOut.bDown || am_zoomdir != 0) - AM_changeWindowScale(); + changeWindowScale(); // Change x,y location //if (m_paninc.x || m_paninc.y) - AM_changeWindowLoc(); + changeWindowLoc(); } @@ -1672,7 +1565,7 @@ void AM_Ticker () // //============================================================================= -void AM_clearFB (const AMColor &color) +void DAutomap::clearFB (const AMColor &color) { bool drawback = mapback.isValid() && am_drawmapback != 0; if (am_drawmapback == 2) @@ -1691,7 +1584,7 @@ void AM_clearFB (const AMColor &color) else { FTexture *backtex = TexMan.GetTexture(mapback); - if (backtex != NULL) + if (backtex != nullptr) { int pwidth = backtex->GetDisplayWidth(); int pheight = backtex->GetDisplayHeight(); @@ -1720,7 +1613,7 @@ void AM_clearFB (const AMColor &color) // //============================================================================= -bool AM_clipMline (mline_t *ml, fline_t *fl) +bool DAutomap::clipMline (mline_t *ml, fline_t *fl) { enum { LEFT =1, @@ -1737,12 +1630,14 @@ bool AM_clipMline (mline_t *ml, fline_t *fl) int dx; int dy; -#define DOOUTCODE(oc, mx, my) \ - (oc) = 0; \ - if ((my) < 0) (oc) |= TOP; \ - else if ((my) >= f_h) (oc) |= BOTTOM; \ - if ((mx) < 0) (oc) |= LEFT; \ - else if ((mx) >= f_w) (oc) |= RIGHT; + auto DOOUTCODE = [this](int &oc, double mx, double my) + { + oc = 0; + if (my < 0) oc |= TOP; + else if (my >= f_h) oc |= BOTTOM; + if (mx < 0) oc |= LEFT; + else if (mx >= f_w) oc |= RIGHT; + }; // do trivial rejects and outcodes if (ml->a.y > m_y2) @@ -1838,8 +1733,6 @@ bool AM_clipMline (mline_t *ml, fline_t *fl) return true; } -#undef DOOUTCODE - //============================================================================= // @@ -1847,19 +1740,19 @@ bool AM_clipMline (mline_t *ml, fline_t *fl) // //============================================================================= -void AM_drawMline (mline_t *ml, const AMColor &color) +void DAutomap::drawMline (mline_t *ml, const AMColor &color) { fline_t fl; - if (AM_clipMline (ml, &fl)) + if (clipMline (ml, &fl)) { screen->DrawLine (f_x + fl.a.x, f_y + fl.a.y, f_x + fl.b.x, f_y + fl.b.y, color.Index, color.RGB); } } -inline void AM_drawMline (mline_t *ml, int colorindex) +void DAutomap::drawMline (mline_t *ml, int colorindex) { - AM_drawMline(ml, AMColors[colorindex]); + drawMline(ml, AMColors[colorindex]); } //============================================================================= @@ -1868,15 +1761,15 @@ inline void AM_drawMline (mline_t *ml, int colorindex) // //============================================================================= -void AM_drawGrid (int color) +void DAutomap::drawGrid (int color) { double x, y; double start, end; mline_t ml; double minlen, extx, exty; double minx, miny; - auto bmaporgx = level.blockmap.bmaporgx; - auto bmaporgy = level.blockmap.bmaporgy; + auto bmaporgx = Level->blockmap.bmaporgx; + auto bmaporgy = Level->blockmap.bmaporgy; // [RH] Calculate a minimum for how long the grid lines should be so that // they cover the screen at any rotation. @@ -1902,10 +1795,10 @@ void AM_drawGrid (int color) ml.b.y = ml.a.y + minlen; if (am_rotate == 1 || (am_rotate == 2 && viewactive)) { - AM_rotatePoint (&ml.a.x, &ml.a.y); - AM_rotatePoint (&ml.b.x, &ml.b.y); + rotatePoint (&ml.a.x, &ml.a.y); + rotatePoint (&ml.b.x, &ml.b.y); } - AM_drawMline(&ml, color); + drawMline(&ml, color); } // Figure out start of horizontal gridlines @@ -1922,10 +1815,10 @@ void AM_drawGrid (int color) ml.b.y = y; if (am_rotate == 1 || (am_rotate == 2 && viewactive)) { - AM_rotatePoint (&ml.a.x, &ml.a.y); - AM_rotatePoint (&ml.b.x, &ml.b.y); + rotatePoint (&ml.a.x, &ml.a.y); + rotatePoint (&ml.b.x, &ml.b.y); } - AM_drawMline (&ml, color); + drawMline (&ml, color); } } @@ -2053,9 +1946,8 @@ sector_t * AM_FakeFlat(AActor *viewer, sector_t * sec, sector_t * dest) // //============================================================================= -void AM_drawSubsectors() +void DAutomap::drawSubsectors() { - static TArray points; std::vector indices; double scale = scale_mtof; DAngle rotation; @@ -2067,7 +1959,7 @@ void AM_drawSubsectors() PalEntry flatcolor; mpoint_t originpt; - auto &subsectors = level.subsectors; + auto &subsectors = Level->subsectors; for (unsigned i = 0; i < subsectors.Size(); ++i) { auto sub = &subsectors[i]; @@ -2094,7 +1986,7 @@ void AM_drawSubsectors() sub->firstline[j].v1->fY() }; if (am_rotate == 1 || (am_rotate == 2 && viewactive)) { - AM_rotatePoint(&pt.x, &pt.y); + rotatePoint(&pt.x, &pt.y); } points[j].X = float(f_x + ((pt.x - m_x) * scale)); points[j].Y = float(f_y + (f_h - (pt.y - m_y) * scale)); @@ -2185,13 +2077,13 @@ void AM_drawSubsectors() // Apply the floor's rotation to the texture origin. if (rotation != 0) { - AM_rotate(&originpt.x, &originpt.y, rotation); + rotate(&originpt.x, &originpt.y, rotation); } // Apply the automap's rotation to the texture origin. if (am_rotate == 1 || (am_rotate == 2 && viewactive)) { rotation = rotation + 90. - players[consoleplayer].camera->Angles.Yaw; - AM_rotatePoint(&originpt.x, &originpt.y); + rotatePoint(&originpt.x, &originpt.y); } originx = f_x + ((originpt.x - m_x) * scale); originy = f_y + (f_h - (originpt.y - m_y) * scale); @@ -2207,7 +2099,7 @@ void AM_drawSubsectors() colormap.Desaturation = 255 - (255 - colormap.Desaturation) / 4; } // make table based fog visible on the automap as well. - if (level.flags & LEVEL_HASFADETABLE) + if (Level->flags & LEVEL_HASFADETABLE) { colormap.FadeColor = PalEntry(0, 128, 128, 128); } @@ -2260,7 +2152,7 @@ static int AM_CheckSecret(line_t *line) { if (AMColors.isValid(AMColors.SecretSectorColor)) { - if (line->frontsector != NULL) + if (line->frontsector != nullptr) { if (line->frontsector->wasSecret()) { @@ -2268,7 +2160,7 @@ static int AM_CheckSecret(line_t *line) if (am_map_secrets==2 && !(line->flags & ML_SECRET)) return 2; } } - if (line->backsector != NULL) + if (line->backsector != nullptr) { if (line->backsector->wasSecret()) { @@ -2287,7 +2179,7 @@ static int AM_CheckSecret(line_t *line) // //============================================================================= -void AM_drawSeg(seg_t *seg, const AMColor &color) +void DAutomap::drawSeg(seg_t *seg, const AMColor &color) { mline_t l; l.a.x = seg->v1->fX(); @@ -2297,13 +2189,13 @@ void AM_drawSeg(seg_t *seg, const AMColor &color) if (am_rotate == 1 || (am_rotate == 2 && viewactive)) { - AM_rotatePoint (&l.a.x, &l.a.y); - AM_rotatePoint (&l.b.x, &l.b.y); + rotatePoint (&l.a.x, &l.a.y); + rotatePoint (&l.b.x, &l.b.y); } - AM_drawMline(&l, color); + drawMline(&l, color); } -void AM_drawPolySeg(FPolySeg *seg, const AMColor &color) +void DAutomap::drawPolySeg(FPolySeg *seg, const AMColor &color) { mline_t l; l.a.x = seg->v1.pos.X; @@ -2313,38 +2205,38 @@ void AM_drawPolySeg(FPolySeg *seg, const AMColor &color) if (am_rotate == 1 || (am_rotate == 2 && viewactive)) { - AM_rotatePoint (&l.a.x, &l.a.y); - AM_rotatePoint (&l.b.x, &l.b.y); + rotatePoint (&l.a.x, &l.a.y); + rotatePoint (&l.b.x, &l.b.y); } - AM_drawMline(&l, color); + drawMline(&l, color); } -void AM_showSS() +void DAutomap::showSS() { - if (am_showsubsector >= 0 && (unsigned)am_showsubsector < level.subsectors.Size()) + if (am_showsubsector >= 0 && (unsigned)am_showsubsector < Level->subsectors.Size()) { AMColor yellow; yellow.FromRGB(255,255,0); AMColor red; red.FromRGB(255,0,0); - subsector_t *sub = &level.subsectors[am_showsubsector]; + subsector_t *sub = &Level->subsectors[am_showsubsector]; for (unsigned int i = 0; i < sub->numlines; i++) { - AM_drawSeg(sub->firstline + i, yellow); + drawSeg(sub->firstline + i, yellow); } - for (auto &poly : level.Polyobjects) + for (auto &poly : Level->Polyobjects) { FPolyNode *pnode = poly.subsectorlinks; - while (pnode != NULL) + while (pnode != nullptr) { if (pnode->subsector == sub) { for (unsigned j = 0; j < pnode->segs.Size(); j++) { - AM_drawPolySeg(&pnode->segs[j], red); + drawPolySeg(&pnode->segs[j], red); } } pnode = pnode->snext; @@ -2442,15 +2334,15 @@ bool AM_checkSectorActions (sector_t *sector, bool (*function)(int, int *), int // [TP] Check whether there's a boundary on the provided line for a special that satisfies the provided function. // It's a boundary if the line can activate the special or the line's bordering sectors can activate it. // If found, specialptr and argsptr will be filled with special and args if given. -bool AM_checkSpecialBoundary (line_t &line, bool (*function)(int, int *), int *specialptr = NULL, int **argsptr = NULL) +bool AM_checkSpecialBoundary (line_t &line, bool (*function)(int, int *), int *specialptr = nullptr, int **argsptr = nullptr) { - if (specialptr == NULL) + if (specialptr == nullptr) { static int sink; specialptr = &sink; } - if (argsptr == NULL) + if (argsptr == nullptr) { static int *sink; argsptr = &sink; @@ -2467,7 +2359,7 @@ bool AM_checkSpecialBoundary (line_t &line, bool (*function)(int, int *), int *s // Check sector actions in the line's front sector -- the action has to be use-activated in order to // show up if this is a one-sided line, because the player cannot trigger sector actions by crossing // a one-sided line (since that's impossible, duh). - if (AM_checkSectorActions(line.frontsector, function, specialptr, argsptr, line.backsector == NULL)) + if (AM_checkSectorActions(line.frontsector, function, specialptr, argsptr, line.backsector == nullptr)) return true; // If it has a back sector, check sector actions in that. @@ -2501,7 +2393,7 @@ bool AM_isTriggerBoundary (line_t &line) return am_showtriggerlines == 1? AM_checkSpecialBoundary(line, [](int special, int *) { FLineSpecial *spec = P_GetLineSpecialInfo(special); - return spec != NULL + return spec != nullptr && spec->max_args >= 0 && special != Door_Open && special != Door_Close @@ -2512,14 +2404,14 @@ bool AM_isTriggerBoundary (line_t &line) }) : AM_checkSpecialBoundary(line, [](int special, int *) { FLineSpecial *spec = P_GetLineSpecialInfo(special); - return spec != NULL + return spec != nullptr && spec->max_args >= 0; }); } -bool AM_isLockBoundary (line_t &line, int *lockptr = NULL) +bool AM_isLockBoundary (line_t &line, int *lockptr = nullptr) { - if (lockptr == NULL) + if (lockptr == nullptr) { static int sink; lockptr = &sink; @@ -2572,26 +2464,26 @@ bool AM_isLockBoundary (line_t &line, int *lockptr = NULL) // //============================================================================= -void AM_drawWalls (bool allmap) +void DAutomap::drawWalls (bool allmap) { static mline_t l; int lock, color; - int numportalgroups = am_portaloverlay ? level.Displacements.size : 0; + int numportalgroups = am_portaloverlay ? Level->Displacements.size : 0; for (int p = numportalgroups - 1; p >= -1; p--) { if (p == MapPortalGroup) continue; - for (auto &line : level.lines) + for (auto &line : Level->lines) { int pg; if (line.sidedef[0]->Flags & WALLF_POLYOBJ) { // For polyobjects we must test the surrounding sector to get the proper group. - pg = P_PointInSector(line.v1->fX() + line.Delta().X / 2, line.v1->fY() + line.Delta().Y / 2)->PortalGroup; + pg = Level->PointInSector(line.v1->fX() + line.Delta().X / 2, line.v1->fY() + line.Delta().Y / 2)->PortalGroup; } else { @@ -2601,7 +2493,7 @@ void AM_drawWalls (bool allmap) bool portalmode = numportalgroups > 0 && pg != MapPortalGroup; if (pg == p) { - offset = level.Displacements.getOffset(pg, MapPortalGroup); + offset = Level->Displacements.getOffset(pg, MapPortalGroup); } else if (p == -1 && (pg == MapPortalGroup || !am_portaloverlay)) { @@ -2616,8 +2508,8 @@ void AM_drawWalls (bool allmap) if (am_rotate == 1 || (am_rotate == 2 && viewactive)) { - AM_rotatePoint(&l.a.x, &l.a.y); - AM_rotatePoint(&l.b.x, &l.b.y); + rotatePoint(&l.a.x, &l.a.y); + rotatePoint(&l.b.x, &l.b.y); } if (am_cheat != 0 || (line.flags & ML_MAPPED)) @@ -2633,37 +2525,37 @@ void AM_drawWalls (bool allmap) if (line.automapstyle > AMLS_Default && line.automapstyle < AMLS_COUNT && (am_cheat == 0 || am_cheat >= 4)) { - AM_drawMline(&l, AUTOMAP_LINE_COLORS[line.automapstyle]); + drawMline(&l, AUTOMAP_LINE_COLORS[line.automapstyle]); continue; } if (portalmode) { - AM_drawMline(&l, AMColors.PortalColor); + drawMline(&l, AMColors.PortalColor); } else if (AM_CheckSecret(&line) == 1) { // map secret sectors like Boom - AM_drawMline(&l, AMColors.SecretSectorColor); + drawMline(&l, AMColors.SecretSectorColor); } else if (AM_CheckSecret(&line) == 2) { - AM_drawMline(&l, AMColors.UnexploredSecretColor); + drawMline(&l, AMColors.UnexploredSecretColor); } else if (line.flags & ML_SECRET) { // secret door - if (am_cheat != 0 && line.backsector != NULL) - AM_drawMline(&l, AMColors.SecretWallColor); + if (am_cheat != 0 && line.backsector != nullptr) + drawMline(&l, AMColors.SecretWallColor); else - AM_drawMline(&l, AMColors.WallColor); + drawMline(&l, AMColors.WallColor); } else if (AM_isTeleportBoundary(line) && AMColors.isValid(AMColors.IntraTeleportColor)) { // intra-level teleporters - AM_drawMline(&l, AMColors.IntraTeleportColor); + drawMline(&l, AMColors.IntraTeleportColor); } else if (AM_isExitBoundary(line) && AMColors.isValid(AMColors.InterTeleportColor)) { // inter-level/game-ending teleporters - AM_drawMline(&l, AMColors.InterTeleportColor); + drawMline(&l, AMColors.InterTeleportColor); } else if (AM_isLockBoundary(line, &lock)) { @@ -2676,40 +2568,40 @@ void AM_drawWalls (bool allmap) if (color >= 0) c.FromRGB(RPART(color), GPART(color), BPART(color)); else c = AMColors[AMColors.LockedColor]; - AM_drawMline(&l, c); + drawMline(&l, c); } else { - AM_drawMline(&l, AMColors.LockedColor); // locked special + drawMline(&l, AMColors.LockedColor); // locked special } } else if (am_showtriggerlines && AMColors.isValid(AMColors.SpecialWallColor) && AM_isTriggerBoundary(line)) { - AM_drawMline(&l, AMColors.SpecialWallColor); // wall with special non-door action the player can do + drawMline(&l, AMColors.SpecialWallColor); // wall with special non-door action the player can do } - else if (line.backsector == NULL) + else if (line.backsector == nullptr) { - AM_drawMline(&l, AMColors.WallColor); // one-sided wall + drawMline(&l, AMColors.WallColor); // one-sided wall } else if (line.backsector->floorplane != line.frontsector->floorplane) { - AM_drawMline(&l, AMColors.FDWallColor); // floor level change + drawMline(&l, AMColors.FDWallColor); // floor level change } else if (line.backsector->ceilingplane != line.frontsector->ceilingplane) { - AM_drawMline(&l, AMColors.CDWallColor); // ceiling level change + drawMline(&l, AMColors.CDWallColor); // ceiling level change } else if (AM_Check3DFloors(&line)) { - AM_drawMline(&l, AMColors.EFWallColor); // Extra floor border + drawMline(&l, AMColors.EFWallColor); // Extra floor border } else if (am_cheat > 0 && am_cheat < 4) { - AM_drawMline(&l, AMColors.TSWallColor); + drawMline(&l, AMColors.TSWallColor); } } else if (allmap || (line.flags & ML_REVEALED)) @@ -2721,7 +2613,7 @@ void AM_drawWalls (bool allmap) continue; } } - AM_drawMline(&l, AMColors.NotSeenColor); + drawMline(&l, AMColors.NotSeenColor); } } } @@ -2735,7 +2627,7 @@ void AM_drawWalls (bool allmap) // //============================================================================= -void AM_rotate(double *xp, double *yp, DAngle a) +void DAutomap::rotate(double *xp, double *yp, DAngle a) { static DAngle angle_saved = 0.; static double sinrot = 0; @@ -2763,13 +2655,13 @@ void AM_rotate(double *xp, double *yp, DAngle a) // //============================================================================= -void AM_rotatePoint (double *x, double *y) +void DAutomap::rotatePoint (double *x, double *y) { double pivotx = m_x + m_w/2; double pivoty = m_y + m_h/2; *x -= pivotx; *y -= pivoty; - AM_rotate (x, y, -players[consoleplayer].camera->Angles.Yaw + 90.); + rotate (x, y, -players[consoleplayer].camera->Angles.Yaw + 90.); *x += pivotx; *y += pivoty; } @@ -2780,30 +2672,23 @@ void AM_rotatePoint (double *x, double *y) // //============================================================================= -void -AM_drawLineCharacter -( const mline_t *lineguy, - int lineguylines, - double scale, - DAngle angle, - const AMColor &color, - double x, - double y ) +void DAutomap::drawLineCharacter(const mline_t *lineguy, size_t lineguylines, double scale, DAngle angle, const AMColor &color, double x, double y) { - int i; mline_t l; - for (i=0;i= 2 && am_cheat != 4 && am_showthingsprites > 0) { @@ -2856,7 +2742,7 @@ void AM_drawPlayers () if (am_rotate == 1 || (am_rotate == 2 && viewactive)) { angle = 90.; - AM_rotatePoint (&pt.x, &pt.y); + rotatePoint (&pt.x, &pt.y); } else { @@ -2873,7 +2759,7 @@ void AM_drawPlayers () arrow = &MapArrow[0]; numarrowlines = MapArrow.Size(); } - AM_drawLineCharacter(arrow, numarrowlines, 0, angle, AMColors[AMColors.YourColor], pt.x, pt.y); + drawLineCharacter(arrow, numarrowlines, 0, angle, AMColors[AMColors.YourColor], pt.x, pt.y); return; } @@ -2882,7 +2768,7 @@ void AM_drawPlayers () player_t *p = &players[i]; AMColor color; - if (!playeringame[i] || p->mo == NULL) + if (!playeringame[i] || p->mo == nullptr) { continue; } @@ -2906,13 +2792,13 @@ void AM_drawPlayers () { float h, s, v, r, g, b; - D_GetPlayerColor (i, &h, &s, &v, NULL); + D_GetPlayerColor (i, &h, &s, &v, nullptr); HSVtoRGB (&r, &g, &b, h, s, v); color.FromRGB(clamp (int(r*255.f),0,255), clamp (int(g*255.f),0,255), clamp (int(b*255.f),0,255)); } - if (p->mo != NULL) + if (p->mo != nullptr) { DVector3 pos = p->mo->PosRelative(MapPortalGroup); pt.x = pos.X; @@ -2922,11 +2808,11 @@ void AM_drawPlayers () if (am_rotate == 1 || (am_rotate == 2 && viewactive)) { - AM_rotatePoint (&pt.x, &pt.y); + rotatePoint (&pt.x, &pt.y); angle -= players[consoleplayer].camera->Angles.Yaw - 90.; } - AM_drawLineCharacter(&MapArrow[0], MapArrow.Size(), 0, angle, color, pt.x, pt.y); + drawLineCharacter(&MapArrow[0], MapArrow.Size(), 0, angle, color, pt.x, pt.y); } } } @@ -2937,16 +2823,16 @@ void AM_drawPlayers () // //============================================================================= -void AM_drawKeys () +void DAutomap::drawKeys () { AMColor color; mpoint_t p; DAngle angle; - TThinkerIterator it(NAME_Key); + auto it = Level->GetThinkerIterator(NAME_Key); AActor *key; - while ((key = it.Next()) != NULL) + while ((key = it.Next()) != nullptr) { DVector3 pos = key->PosRelative(MapPortalGroup); p.x = pos.X; @@ -2956,7 +2842,7 @@ void AM_drawKeys () if (am_rotate == 1 || (am_rotate == 2 && viewactive)) { - AM_rotatePoint (&p.x, &p.y); + rotatePoint (&p.x, &p.y); angle += -players[consoleplayer].camera->Angles.Yaw + 90.; } @@ -2969,7 +2855,7 @@ void AM_drawKeys () if (c >= 0) color.FromRGB(RPART(c), GPART(c), BPART(c)); else color = AMColors[AMColors.ThingColor_CountItem]; - AM_drawLineCharacter(&EasyKey[0], EasyKey.Size(), 0, 0., color, p.x, p.y); + drawLineCharacter(&EasyKey[0], EasyKey.Size(), 0, 0., color, p.x, p.y); } } } @@ -2979,14 +2865,14 @@ void AM_drawKeys () // // //============================================================================= -void AM_drawThings () +void DAutomap::drawThings () { AMColor color; AActor* t; mpoint_t p; DAngle angle; - for (auto &sec : level.sectors) + for (auto &sec : Level->sectors) { t = sec.thinglist; while (t) @@ -2999,12 +2885,12 @@ void AM_drawThings () if (am_showthingsprites > 0 && t->sprite > 0) { - FTexture *texture = NULL; + FTexture *texture = nullptr; spriteframe_t *frame; int rotation = 0; // try all modes backwards until a valid texture has been found. - for(int show = am_showthingsprites; show > 0 && texture == NULL; show--) + for(int show = am_showthingsprites; show > 0 && texture == nullptr; show--) { const spritedef_t& sprite = sprites[t->sprite]; const size_t spriteIndex = sprite.spriteframes + (show > 1 ? t->frame : 0); @@ -3022,7 +2908,7 @@ void AM_drawThings () texture = TexMan.GetTexture(textureID, true); } - if (texture == NULL) goto drawTriangle; // fall back to standard display if no sprite can be found. + if (texture == nullptr) goto drawTriangle; // fall back to standard display if no sprite can be found. const double spriteXScale = (t->Scale.X * (10. / 16.) * scale_mtof); const double spriteYScale = (t->Scale.Y * (10. / 16.) * scale_mtof); @@ -3037,7 +2923,7 @@ void AM_drawThings () if (am_rotate == 1 || (am_rotate == 2 && viewactive)) { - AM_rotatePoint (&p.x, &p.y); + rotatePoint (&p.x, &p.y); angle += -players[consoleplayer].camera->Angles.Yaw + 90.; } @@ -3068,7 +2954,7 @@ void AM_drawThings () if (c >= 0) color.FromRGB(RPART(c), GPART(c), BPART(c)); else color = AMColors[AMColors.ThingColor_CountItem]; - AM_drawLineCharacter(&CheatKey[0], CheatKey.Size(), 0, 0., color, p.x, p.y); + drawLineCharacter(&CheatKey[0], CheatKey.Size(), 0, 0., color, p.x, p.y); color.Index = -1; } else @@ -3084,7 +2970,7 @@ void AM_drawThings () if (color.Index != -1) { - AM_drawLineCharacter(thintriangle_guy, NUMTHINTRIANGLEGUYLINES, 16, angle, color, p.x, p.y); + drawLineCharacter(thintriangle_guy.data(), thintriangle_guy.size(), 16, angle, color, p.x, p.y); } if (am_cheat == 3 || am_cheat == 6) @@ -3097,7 +2983,7 @@ void AM_drawThings () { { -1, 1 }, { -1, -1 } }, }; - AM_drawLineCharacter (box, 4, t->radius, angle - t->Angles.Yaw, color, p.x, p.y); + drawLineCharacter (box, 4, t->radius, angle - t->Angles.Yaw, color, p.x, p.y); } } } @@ -3112,16 +2998,16 @@ void AM_drawThings () // //============================================================================= -static void DrawMarker (FTexture *tex, double x, double y, int yadjust, +void DAutomap::DrawMarker (FTexture *tex, double x, double y, int yadjust, INTBOOL flip, double xscale, double yscale, int translation, double alpha, uint32_t fillcolor, FRenderStyle renderstyle) { - if (tex == NULL || !tex->isValid()) + if (tex == nullptr || !tex->isValid()) { return; } if (am_rotate == 1 || (am_rotate == 2 && viewactive)) { - AM_rotatePoint (&x, &y); + rotatePoint (&x, &y); } screen->DrawTexture (tex, CXMTOF(x) + f_x, CYMTOF(y) + yadjust + f_y, DTA_DestWidthF, tex->GetDisplayWidthDouble() * CleanXfac * xscale, @@ -3144,7 +3030,7 @@ static void DrawMarker (FTexture *tex, double x, double y, int yadjust, // //============================================================================= -void AM_drawMarks () +void DAutomap::drawMarks () { for (int i = 0; i < AM_NUMMARKPOINTS; i++) { @@ -3162,15 +3048,15 @@ void AM_drawMarks () // //============================================================================= -void AM_drawAuthorMarkers () +void DAutomap::drawAuthorMarkers () { // [RH] Draw any actors derived from AMapMarker on the automap. // If args[0] is 0, then the actor's sprite is drawn at its own location. // Otherwise, its sprite is drawn at the location of any actors whose TIDs match args[0]. - TThinkerIterator it ("MapMarker", STAT_MAPMARKER); + auto it = Level->GetThinkerIterator(NAME_MapMarker, STAT_MAPMARKER); AActor *mark; - while ((mark = it.Next()) != NULL) + while ((mark = it.Next()) != nullptr) { if (mark->flags2 & MF2_DORMANT) { @@ -3207,17 +3093,17 @@ void AM_drawAuthorMarkers () tex = TexMan.GetTexture(picnum); } } - FActorIterator it (mark->args[0]); + auto it = Level->GetActorIterator(mark->args[0]); AActor *marked = mark->args[0] == 0 ? mark : it.Next(); - while (marked != NULL) + while (marked != nullptr) { if (mark->args[1] == 0 || (mark->args[1] == 1 && (marked->subsector->flags & SSECMF_DRAWN))) { DrawMarker (tex, marked->X(), marked->Y(), 0, flip, mark->Scale.X, mark->Scale.Y, mark->Translation, mark->Alpha, mark->fillcolor, mark->RenderStyle); } - marked = mark->args[0] != 0 ? it.Next() : NULL; + marked = mark->args[0] != 0 ? it.Next() : nullptr; } } } @@ -3228,7 +3114,7 @@ void AM_drawAuthorMarkers () // //============================================================================= -void AM_drawCrosshair (const AMColor &color) +void DAutomap::drawCrosshair (const AMColor &color) { screen->DrawPixel(f_w/2, (f_h+1)/2, color.Index, color.RGB); } @@ -3239,12 +3125,12 @@ void AM_drawCrosshair (const AMColor &color) // //============================================================================= -void AM_Drawer (int bottom) +void DAutomap::Drawer (int bottom) { if (!automapactive) return; - bool allmap = (level.flags2 & LEVEL2_ALLMAP) != 0; + bool allmap = (Level->flags2 & LEVEL2_ALLMAP) != 0; bool allthings = allmap && players[consoleplayer].mo->FindInventory(NAME_PowerScanner, true) != nullptr; if (am_portaloverlay) @@ -3265,7 +3151,7 @@ void AM_Drawer (int bottom) f_w = screen->GetWidth (); f_h = bottom; - AM_clearFB(AMColors[AMColors.Background]); + clearFB(AMColors[AMColors.Background]); } else { @@ -3274,29 +3160,28 @@ void AM_Drawer (int bottom) f_w = viewwidth; f_h = viewheight; } - AM_activateNewScale(); + activateNewScale(); - if (am_textured && textured && !viewactive) - AM_drawSubsectors(); + if (am_textured && !viewactive) + drawSubsectors(); - if (grid) - AM_drawGrid(AMColors.GridColor); + if (am_showgrid) + drawGrid(AMColors.GridColor); - AM_drawWalls(allmap); - AM_drawPlayers(); + drawWalls(allmap); + drawPlayers(); if (G_SkillProperty(SKILLP_EasyKey) || am_showkeys_always) - AM_drawKeys(); + drawKeys(); if ((am_cheat >= 2 && am_cheat != 4) || allthings) - AM_drawThings(); + drawThings(); - AM_drawAuthorMarkers(); + drawAuthorMarkers(); if (!viewactive) - AM_drawCrosshair(AMColors[AMColors.XHairColor]); + drawCrosshair(AMColors[AMColors.XHairColor]); - AM_drawMarks(); - - AM_showSS(); + drawMarks(); + showSS(); } //============================================================================= @@ -3305,14 +3190,156 @@ void AM_Drawer (int bottom) // //============================================================================= -void AM_SerializeMarkers(FSerializer &arc) +void DAutomap::Serialize(FSerializer &arc) { - if (arc.BeginObject("automarkers")) + Super::Serialize(arc); + // This only stores those variables which do not get set each time the automap is either activated or drawn. + // Especially the screen coordinates can not be brought over because the display settings may have changed. + arc("markpointnum", markpointnum) + .Array("markpoints", &markpoints[0].x, AM_NUMMARKPOINTS * 2) // write as a double array. + ("scale_mtof", scale_mtof) + ("scale_ftom", scale_ftom) + ("bigstate", bigstate) + ("min_x", min_x) + ("min_y", min_y) + ("max_x", max_x) + ("max_y", max_y) + ("min_w", min_w) + ("min_h", min_h) + ("max_w", max_w) + ("max_h", max_h) + ("min_scale_mtof", min_scale_mtof) + ("max_scale_mtof", max_scale_mtof) + ("mapback", mapback) + ("level", Level); + +} + + +//============================================================================= +// +// +// +//============================================================================= + +void DAutomap::UpdateShowAllLines() +{ + int val = am_showalllines; + int flagged = 0; + int total = 0; + if (val > 0 && Level->lines.Size() > 0) { - arc("markpointnum", markpointnum) - .Array("markpoints", &markpoints[0].x, AM_NUMMARKPOINTS*2) // write as a double array. - ("scale_mtof", scale_mtof) - ("scale_ftom", scale_ftom) - .EndObject(); + for (auto &line : Level->lines) + { + // disregard intra-sector lines + if (line.frontsector == line.backsector) continue; + + // disregard control sectors for deep water + if (line.frontsector->e->FakeFloor.Sectors.Size() > 0) continue; + + // disregard control sectors for 3D-floors + if (line.frontsector->e->XFloor.attached.Size() > 0) continue; + + total++; + if (line.flags & ML_DONTDRAW) flagged++; + } + am_showallenabled = (flagged * 100 / total >= val); + } + else if (val == 0) + { + am_showallenabled = true; + } + else + { + am_showallenabled = false; } } + +void DAutomap::GoBig() +{ + bigstate = !bigstate; + if (bigstate) + { + saveScaleAndLoc(); + minOutWindowScale(); + } + else + restoreScaleAndLoc(); +} + +void DAutomap::ResetFollowLocation() +{ + f_oldloc.x = FLT_MAX; +} + + +//============================================================================= +// +// +// +//============================================================================= + +void AM_Stop() +{ + automapactive = false; + viewactive = true; +} + +//============================================================================= +// +// +// +//============================================================================= + +void AM_ToggleMap() +{ + if (gamestate != GS_LEVEL) + return; + + // Don't activate the automap if we're not allowed to use it. + if (dmflags2 & DF2_NO_AUTOMAP) + return; + + // ... or if there is no automap. + if (!primaryLevel || !primaryLevel->automap) + return; + + if (!automapactive) + { + // Reset AM buttons + Button_AM_PanLeft.Reset(); + Button_AM_PanRight.Reset(); + Button_AM_PanUp.Reset(); + Button_AM_PanDown.Reset(); + Button_AM_ZoomIn.Reset(); + Button_AM_ZoomOut.Reset(); + + primaryLevel->automap->startDisplay(); + automapactive = true; + viewactive = (am_overlay != 0.f); + } + else + { + if (am_overlay == 1 && viewactive) + { + viewactive = false; + } + else + { + AM_Stop(); + } + } +} + +//============================================================================= +// +// +// +//============================================================================= + +DAutomapBase *AM_Create(FLevelLocals *Level) +{ + auto am = Create(); + am->Level = Level; + return am; +} diff --git a/src/am_map.h b/src/am_map.h index 22bb34670c..3665e44383 100644 --- a/src/am_map.h +++ b/src/am_map.h @@ -22,31 +22,44 @@ #ifndef __AMMAP_H__ #define __AMMAP_H__ +#include "dobject.h" + struct event_t; class FSerializer; +struct FLevelLocals; +class DAutomapBase : public DObject +{ + DECLARE_ABSTRACT_CLASS(DAutomapBase, DObject); +public: + FLevelLocals *Level; // temporary location so that it can be set from the outside. + + // Called by main loop. + virtual bool Responder(event_t* ev, bool last) = 0; + + // Called by main loop. + virtual void Ticker(void) = 0; + + // Called by main loop, + // called instead of view drawer if automap active. + virtual void Drawer(int bottom) = 0; + + virtual void NewResolution() = 0; + virtual void LevelInit() = 0; + virtual void UpdateShowAllLines() = 0; + virtual void GoBig() = 0; + virtual void ResetFollowLocation() = 0; + virtual int addMark() = 0; + virtual bool clearMarks() = 0; + virtual DVector2 GetPosition() = 0; + virtual void startDisplay() = 0; + +}; void AM_StaticInit(); void AM_ClearColorsets(); // reset data for a restart. - -// Called by main loop. -bool AM_Responder (event_t* ev, bool last); - -// Called by main loop. -void AM_Ticker (void); - -// Called by main loop, -// called instead of view drawer if automap active. -void AM_Drawer (int bottom); - -// Called to force the automap to quit -// if the level is completed while it is up. -void AM_Stop (void); - -void AM_NewResolution (); -void AM_ToggleMap (); -void AM_LevelInit (); -void AM_SerializeMarkers(FSerializer &arc); - +DAutomapBase *AM_Create(FLevelLocals *Level); +void AM_Stop(); +void AM_ToggleMap(); #endif diff --git a/src/b_bot.cpp b/src/b_bot.cpp index f02184282b..bb15fc8bc4 100644 --- a/src/b_bot.cpp +++ b/src/b_bot.cpp @@ -40,7 +40,7 @@ #include "c_cvars.h" #include "c_dispatch.h" #include "b_bot.h" -#include "doomstat.h" +#include "g_game.h" #include "p_local.h" #include "cmdlib.h" #include "teaminfo.h" @@ -49,6 +49,7 @@ #include "d_player.h" #include "w_wad.h" #include "vm.h" +#include "g_levellocals.h" IMPLEMENT_CLASS(DBot, false, true) @@ -63,8 +64,7 @@ IMPLEMENT_POINTERS_END DEFINE_FIELD(DBot, dest) -DBot::DBot () -: DThinker(STAT_BOT) +void DBot::Construct() { Clear (); } @@ -138,20 +138,19 @@ void DBot::Tick () { Super::Tick (); - if (player->mo == nullptr || bglobal.freeze) + if (player->mo == nullptr || Level->isFrozen()) { return; } BotThinkCycles.Clock(); - bglobal.m_Thinking = true; + Level->BotInfo.m_Thinking = true; Think (); - bglobal.m_Thinking = false; + Level->BotInfo.m_Thinking = false; BotThinkCycles.Unclock(); } CVAR (Int, bot_next_color, 11, 0) -CVAR (Bool, bot_observer, false, 0) CCMD (addbot) { @@ -174,9 +173,9 @@ CCMD (addbot) } if (argv.argc() > 1) - bglobal.SpawnBot (argv[1]); + primaryLevel->BotInfo.SpawnBot (argv[1]); else - bglobal.SpawnBot (nullptr); + primaryLevel->BotInfo.SpawnBot (nullptr); } void FCajunMaster::ClearPlayer (int i, bool keepTeam) @@ -233,7 +232,7 @@ CCMD (freeze) CCMD (listbots) { - botinfo_t *thebot = bglobal.botinfo; + botinfo_t *thebot = primaryLevel->BotInfo.botinfo; int count = 0; while (thebot) diff --git a/src/b_bot.h b/src/b_bot.h index 393650cf46..a4f632eae9 100644 --- a/src/b_bot.h +++ b/src/b_bot.h @@ -116,12 +116,12 @@ public: void ClearPlayer (int playernum, bool keepTeam); //(b_game.cpp) - void Main (); + void Main (FLevelLocals *Level); void Init (); void End(); bool SpawnBot (const char *name, int color = NOCOLOR); - void TryAddBot (uint8_t **stream, int player); - void RemoveAllBots (bool fromlist); + void TryAddBot (FLevelLocals *Level, uint8_t **stream, int player); + void RemoveAllBots (FLevelLocals *Level, bool fromlist); bool LoadBots (); void ForgetBots (); @@ -129,7 +129,7 @@ public: void StartTravel (); void FinishTravel (); bool IsLeader (player_t *player); - void SetBodyAt (const DVector3 &pos, int hostnum); + void SetBodyAt (FLevelLocals *Level, const DVector3 &pos, int hostnum); double FakeFire (AActor *source, AActor *dest, ticcmd_t *cmd); bool SafeCheckPosition (AActor *actor, double x, double y, FCheckPosition &tm); void BotTick(AActor *mo); @@ -139,8 +139,9 @@ public: bool IsDangerous (sector_t *sec); TArray getspawned; //Array of bots (their names) which should be spawned when starting a game. - uint8_t freeze; //Game in freeze mode. - uint8_t changefreeze; //Game wants to change freeze mode. + + //uint8_t freeze; //Game in freeze mode. + //uint8_t changefreeze; //Game wants to change freeze mode. int botnum; botinfo_t *botinfo; int spawn_tries; @@ -153,12 +154,11 @@ public: private: //(b_game.cpp) - bool DoAddBot (uint8_t *info, botskill_t skill); + bool DoAddBot (FLevelLocals *Level, uint8_t *info, botskill_t skill); protected: bool ctf; int t_join; - bool observer; //Consoleplayer is observer. }; class DBot : public DThinker @@ -166,7 +166,8 @@ class DBot : public DThinker DECLARE_CLASS(DBot,DThinker) HAS_OBJECT_POINTERS public: - DBot (); + static const int DEFAULT_STAT = STAT_BOT; + void Construct (); void Clear (); void Serialize(FSerializer &arc); @@ -236,15 +237,9 @@ private: //Externs -extern FCajunMaster bglobal; extern cycle_t BotThinkCycles, BotSupportCycles; EXTERN_CVAR (Float, bot_flag_return_time) EXTERN_CVAR (Int, bot_next_color) -EXTERN_CVAR (Bool, bot_allow_duds) -EXTERN_CVAR (Int, bot_maxcorpses) -EXTERN_CVAR (Bool, bot_observer) -EXTERN_CVAR (Bool, bot_watersplash) -EXTERN_CVAR (Bool, bot_chat) #endif // __B_BOT_H__ diff --git a/src/b_func.cpp b/src/b_func.cpp index 0613cacaec..f9925f5343 100644 --- a/src/b_func.cpp +++ b/src/b_func.cpp @@ -73,7 +73,7 @@ bool DBot::Reachable (AActor *rtarget) double estimated_dist = player->mo->Distance2D(rtarget); bool reachable = true; - FPathTraverse it(player->mo->X()+player->mo->Vel.X, player->mo->Y()+player->mo->Vel.Y, rtarget->X(), rtarget->Y(), PT_ADDLINES|PT_ADDTHINGS); + FPathTraverse it(Level, player->mo->X()+player->mo->Vel.X, player->mo->Y()+player->mo->Vel.Y, rtarget->X(), rtarget->Y(), PT_ADDLINES|PT_ADDTHINGS); intercept_t *in; while ((in = it.Next())) { @@ -105,7 +105,7 @@ bool DBot::Reachable (AActor *rtarget) double ceilingheight = s->ceilingplane.ZatPoint (hitx, hity); double floorheight = s->floorplane.ZatPoint (hitx, hity); - if (!bglobal.IsDangerous (s) && //Any nukage/lava? + if (!Level->BotInfo.IsDangerous (s) && //Any nukage/lava? (floorheight <= (last_z+MAXMOVEHEIGHT) && ((ceilingheight == floorheight && line->special) || (ceilingheight - floorheight) >= player->mo->Height))) //Does it fit? @@ -235,8 +235,8 @@ void DBot::Dofire (ticcmd_t *cmd) // prediction aiming Dist = player->mo->Distance2D(enemy); fm = Dist / GetDefaultByType (GetBotInfo(player->ReadyWeapon).projectileType)->Speed; - bglobal.SetBodyAt(enemy->Pos() + enemy->Vel.XY() * fm * 2, 1); - Angle = player->mo->AngleTo(bglobal.body1); + Level->BotInfo.SetBodyAt(Level, enemy->Pos() + enemy->Vel.XY() * fm * 2, 1); + Angle = player->mo->AngleTo(Level->BotInfo.body1); if (Check_LOS (enemy, SHOOTFOV)) no_fire = false; } @@ -300,7 +300,7 @@ extern int BotWTG; void FCajunMaster::BotTick(AActor *mo) { BotSupportCycles.Clock(); - bglobal.m_Thinking = true; + m_Thinking = true; for (int i = 0; i < MAXPLAYERS; i++) { if (!playeringame[i] || players[i].Bot == NULL) @@ -333,7 +333,7 @@ void FCajunMaster::BotTick(AActor *mo) } } } - bglobal.m_Thinking = false; + m_Thinking = false; BotSupportCycles.Unclock(); } @@ -345,7 +345,6 @@ AActor *DBot::Choose_Mate () int count; double closest_dist, test; AActor *target; - AActor *observer; //is mate alive? if (mate) @@ -365,10 +364,6 @@ AActor *DBot::Choose_Mate () target = NULL; closest_dist = FLT_MAX; - if (bot_observer) - observer = players[consoleplayer].mo; - else - observer = NULL; //Check for player friends for (count = 0; count < MAXPLAYERS; count++) @@ -380,9 +375,8 @@ AActor *DBot::Choose_Mate () && player->mo != client->mo && (player->mo->IsTeammate (client->mo) || !deathmatch) && client->mo->health > 0 - && client->mo != observer && ((player->mo->health/2) <= client->mo->health || !deathmatch) - && !bglobal.IsLeader(client)) //taken? + && !Level->BotInfo.IsLeader(client)) //taken? { if (P_CheckSight (player->mo, client->mo, SF_IGNOREVISIBILITY)) { @@ -401,7 +395,7 @@ AActor *DBot::Choose_Mate () //Make a introducing to mate. if(target && target!=last_mate) { - if((P_Random()%(200*bglobal.botnum))<3) + if((P_Random()%(200*Level->BotInfo.botnum))<3) { chat = c_teamup; if(target->bot) @@ -423,7 +417,6 @@ AActor *DBot::Find_enemy () double closest_dist, temp; //To target. AActor *target; DAngle vangle; - AActor *observer; if (!deathmatch) { // [RH] Take advantage of the Heretic/Hexen code to be a little smarter @@ -439,17 +432,12 @@ AActor *DBot::Find_enemy () target = NULL; closest_dist = FLT_MAX; - if (bot_observer) - observer = players[consoleplayer].mo; - else - observer = NULL; for (count = 0; count < MAXPLAYERS; count++) { player_t *client = &players[count]; if (playeringame[count] && !player->mo->IsTeammate (client->mo) - && client->mo != observer && client->mo->health > 0 && player->mo != client->mo) { @@ -479,7 +467,7 @@ AActor *DBot::Find_enemy () //Creates a temporary mobj (invisible) at the given location. -void FCajunMaster::SetBodyAt (const DVector3 &pos, int hostnum) +void FCajunMaster::SetBodyAt (FLevelLocals *Level, const DVector3 &pos, int hostnum) { if (hostnum == 1) { @@ -489,7 +477,7 @@ void FCajunMaster::SetBodyAt (const DVector3 &pos, int hostnum) } else { - body1 = Spawn ("CajunBodyNode", pos, NO_REPLACE); + body1 = Spawn (Level, "CajunBodyNode", pos, NO_REPLACE); } } else if (hostnum == 2) @@ -500,7 +488,7 @@ void FCajunMaster::SetBodyAt (const DVector3 &pos, int hostnum) } else { - body2 = Spawn ("CajunBodyNode", pos, NO_REPLACE); + body2 = Spawn (Level, "CajunBodyNode", pos, NO_REPLACE); } } } @@ -517,7 +505,7 @@ void FCajunMaster::SetBodyAt (const DVector3 &pos, int hostnum) //Emulates missile travel. Returns distance travelled. double FCajunMaster::FakeFire (AActor *source, AActor *dest, ticcmd_t *cmd) { - AActor *th = Spawn ("CajunTrace", source->PosPlusZ(4*8.), NO_REPLACE); + AActor *th = Spawn (source->Level, "CajunTrace", source->PosPlusZ(4*8.), NO_REPLACE); th->target = source; // where it came from @@ -543,9 +531,9 @@ DAngle DBot::FireRox (AActor *enemy, ticcmd_t *cmd) AActor *actor; double m; - bglobal.SetBodyAt(player->mo->PosPlusZ(player->mo->Height / 2) + player->mo->Vel.XY() * 5, 2); + Level->BotInfo.SetBodyAt(Level, player->mo->PosPlusZ(player->mo->Height / 2) + player->mo->Vel.XY() * 5, 2); - actor = bglobal.body2; + actor = Level->BotInfo.body2; dist = actor->Distance2D (enemy); if (dist < SAFE_SELF_MISDIST) @@ -553,24 +541,24 @@ DAngle DBot::FireRox (AActor *enemy, ticcmd_t *cmd) //Predict. m = ((dist+1) / GetDefaultByName("Rocket")->Speed); - bglobal.SetBodyAt(DVector3((enemy->Pos() + enemy->Vel * (m + 2)), ONFLOORZ), 1); + Level->BotInfo.SetBodyAt(Level, DVector3((enemy->Pos() + enemy->Vel * (m + 2)), ONFLOORZ), 1); //try the predicted location - if (P_CheckSight (actor, bglobal.body1, SF_IGNOREVISIBILITY)) //See the predicted location, so give a test missile + if (P_CheckSight (actor, Level->BotInfo.body1, SF_IGNOREVISIBILITY)) //See the predicted location, so give a test missile { FCheckPosition tm; - if (bglobal.SafeCheckPosition (player->mo, actor->X(), actor->Y(), tm)) + if (Level->BotInfo.SafeCheckPosition (player->mo, actor->X(), actor->Y(), tm)) { - if (bglobal.FakeFire (actor, bglobal.body1, cmd) >= SAFE_SELF_MISDIST) + if (Level->BotInfo.FakeFire (actor, Level->BotInfo.body1, cmd) >= SAFE_SELF_MISDIST) { - return actor->AngleTo(bglobal.body1); + return actor->AngleTo(Level->BotInfo.body1); } } } //Try fire straight. if (P_CheckSight (actor, enemy, 0)) { - if (bglobal.FakeFire (player->mo, enemy, cmd) >= SAFE_SELF_MISDIST) + if (Level->BotInfo.FakeFire (player->mo, enemy, cmd) >= SAFE_SELF_MISDIST) { return player->mo->AngleTo(enemy); } diff --git a/src/b_game.cpp b/src/b_game.cpp index 516986e718..cc362b7643 100644 --- a/src/b_game.cpp +++ b/src/b_game.cpp @@ -96,9 +96,6 @@ Everything that is changed is marked (maybe commented) with "Added by MC" static FRandom pr_botspawn ("BotSpawn"); -//Externs -FCajunMaster bglobal; - cycle_t BotThinkCycles, BotSupportCycles; int BotWTG; @@ -129,7 +126,7 @@ FCajunMaster::~FCajunMaster() } //This function is called every tick (from g_game.c). -void FCajunMaster::Main () +void FCajunMaster::Main(FLevelLocals *Level) { BotThinkCycles.Reset(); @@ -137,7 +134,7 @@ void FCajunMaster::Main () return; //Add new bots? - if (wanted_botnum > botnum && !freeze) + if (wanted_botnum > botnum && !Level->isFrozen()) { if (t_join == ((wanted_botnum - botnum) * SPAWN_DELAY)) { @@ -151,24 +148,6 @@ void FCajunMaster::Main () //Check if player should go observer. Or un observe FLinkContext ctx; - if (bot_observer && !observer && !netgame) - { - Printf ("%s is now observer\n", players[consoleplayer].userinfo.GetName()); - observer = true; - players[consoleplayer].mo->UnlinkFromWorld (&ctx); - players[consoleplayer].mo->flags = MF_DROPOFF|MF_NOBLOCKMAP|MF_NOCLIP|MF_NOTDMATCH|MF_NOGRAVITY|MF_FRIENDLY; - players[consoleplayer].mo->flags2 |= MF2_FLY; - players[consoleplayer].mo->LinkToWorld (&ctx); - } - else if (!bot_observer && observer && !netgame) //Go back - { - Printf ("%s returned to the fray\n", players[consoleplayer].userinfo.GetName()); - observer = false; - players[consoleplayer].mo->UnlinkFromWorld (&ctx); - players[consoleplayer].mo->flags = MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|MF_PICKUP|MF_NOTDMATCH|MF_FRIENDLY; - players[consoleplayer].mo->flags2 &= ~MF2_FLY; - players[consoleplayer].mo->LinkToWorld (&ctx); - } } void FCajunMaster::Init () @@ -176,8 +155,6 @@ void FCajunMaster::Init () botnum = 0; firstthing = nullptr; spawn_tries = 0; - freeze = false; - observer = false; body1 = nullptr; body2 = nullptr; @@ -340,7 +317,7 @@ bool FCajunMaster::SpawnBot (const char *name, int color) return true; } -void FCajunMaster::TryAddBot (uint8_t **stream, int player) +void FCajunMaster::TryAddBot (FLevelLocals *Level, uint8_t **stream, int player) { int botshift = ReadByte (stream); char *info = ReadString (stream); @@ -363,7 +340,7 @@ void FCajunMaster::TryAddBot (uint8_t **stream, int player) } } - if (DoAddBot ((uint8_t *)info, skill)) + if (DoAddBot (Level,(uint8_t *)info, skill)) { //Increment this. botnum++; @@ -384,7 +361,7 @@ void FCajunMaster::TryAddBot (uint8_t **stream, int player) delete[] info; } -bool FCajunMaster::DoAddBot (uint8_t *info, botskill_t skill) +bool FCajunMaster::DoAddBot (FLevelLocals *Level, uint8_t *info, botskill_t skill) { int bnum; @@ -405,7 +382,7 @@ bool FCajunMaster::DoAddBot (uint8_t *info, botskill_t skill) D_ReadUserInfoStrings (bnum, &info, false); multiplayer = true; //Prevents cheating and so on; emulates real netgame (almost). - players[bnum].Bot = Create(); + players[bnum].Bot = Level->CreateThinker(); players[bnum].Bot->player = &players[bnum]; players[bnum].Bot->skill = skill; playeringame[bnum] = true; @@ -417,38 +394,37 @@ bool FCajunMaster::DoAddBot (uint8_t *info, botskill_t skill) else Printf ("%s joined the game\n", players[bnum].userinfo.GetName()); - G_DoReborn (bnum, true); + Level->DoReborn (bnum, true); return true; } -void FCajunMaster::RemoveAllBots (bool fromlist) +void FCajunMaster::RemoveAllBots (FLevelLocals *Level, bool fromlist) { int i, j; for (i = 0; i < MAXPLAYERS; ++i) { - if (players[i].Bot != NULL) + if (Level->Players[i]->Bot != nullptr) { // If a player is looking through this bot's eyes, make him // look through his own eyes instead. for (j = 0; j < MAXPLAYERS; ++j) { - if (i != j && playeringame[j] && players[j].Bot == NULL) + if (i != j && Level->PlayerInGame(j) && Level->Players[j]->Bot == nullptr) { - if (players[j].camera == players[i].mo) + if (Level->Players[j]->camera == Level->Players[i]->mo) { - players[j].camera = players[j].mo; - if (j == consoleplayer) + Level->Players[j]->camera = Level->Players[j]->mo; + if (Level->isConsolePlayer(Level->Players[j]->mo)) { - StatusBar->AttachToPlayer (players + j); + StatusBar->AttachToPlayer (Level->Players[j]); } } } } // [ZZ] run event hook - E_PlayerDisconnected(i); - // - level.Behaviors.StartTypedScripts (SCRIPT_Disconnect, players[i].mo, true, i, true); + Level->localEventManager->PlayerDisconnected(i); + Level->Behaviors.StartTypedScripts (SCRIPT_Disconnect, Level->Players[i]->mo, true, i, true); ClearPlayer (i, !fromlist); } } @@ -521,7 +497,7 @@ bool FCajunMaster::LoadBots () bool gotteam = false; int loaded_bots = 0; - bglobal.ForgetBots (); + ForgetBots (); tmp = M_GetCajunPath(BOTFILENAME); if (tmp.IsEmpty()) { @@ -637,9 +613,9 @@ bool FCajunMaster::LoadBots () appendinfo (newinfo->info, "team"); appendinfo (newinfo->info, "255"); } - newinfo->next = bglobal.botinfo; + newinfo->next = botinfo; newinfo->lastteam = TEAM_NONE; - bglobal.botinfo = newinfo; + botinfo = newinfo; loaded_bots++; } Printf ("%d bots read from %s\n", loaded_bots, BOTFILENAME); @@ -654,11 +630,3 @@ ADD_STAT (bots) BotWTG); return out; } - -DEFINE_ACTION_FUNCTION(FLevelLocals, RemoveAllBots) -{ - PARAM_PROLOGUE; - PARAM_BOOL(fromlist); - bglobal.RemoveAllBots(fromlist); - return 0; -} diff --git a/src/b_move.cpp b/src/b_move.cpp index 52ae724dc0..a22867af14 100644 --- a/src/b_move.cpp +++ b/src/b_move.cpp @@ -104,7 +104,7 @@ bool DBot::Move (ticcmd_t *cmd) tryx = player->mo->X() + 8*xspeed[player->mo->movedir]; tryy = player->mo->Y() + 8*yspeed[player->mo->movedir]; - try_ok = bglobal.CleanAhead (player->mo, tryx, tryy, cmd); + try_ok = Level->BotInfo.CleanAhead (player->mo, tryx, tryy, cmd); if (!try_ok) //Anything blocking that could be opened etc.. { diff --git a/src/b_think.cpp b/src/b_think.cpp index 82954d83e1..4152e475d7 100644 --- a/src/b_think.cpp +++ b/src/b_think.cpp @@ -289,7 +289,7 @@ void DBot::ThinkForMove (ticcmd_t *cmd) r = pr_botmove(); if (r < 128) { - TThinkerIterator it (NAME_Inventory, MAX_STATNUM+1, bglobal.firstthing); + auto it = player->mo->Level->GetThinkerIterator(NAME_Inventory, MAX_STATNUM+1, Level->BotInfo.firstthing); auto item = it.Next(); if (item != NULL || (item = it.Next()) != NULL) @@ -304,7 +304,7 @@ void DBot::ThinkForMove (ticcmd_t *cmd) { item = it.Next(); } - bglobal.firstthing = item; + Level->BotInfo.firstthing = item; dest = item; } } @@ -356,9 +356,6 @@ void DBot::WhatToGet (AActor *item) } int weapgiveammo = (alwaysapplydmflags || deathmatch) && !(dmflags & DF_WEAPONS_STAY); - //if(pos && !bglobal.thingvis[pos->id][item->id]) continue; -// if (item->IsKindOf (RUNTIME_CLASS(AArtifact))) -// return; // don't know how to use artifacts if (item->IsKindOf(NAME_Weapon)) { // FIXME diff --git a/src/bbannouncer.cpp b/src/bbannouncer.cpp index 80de8b979f..f0533cac17 100644 --- a/src/bbannouncer.cpp +++ b/src/bbannouncer.cpp @@ -182,9 +182,9 @@ static FRandom pr_bbannounce ("BBAnnounce"); void DoVoiceAnnounce (const char *sound) { // Don't play announcements too close together - if (LastAnnounceTime == 0 || LastAnnounceTime <= level.time-5) + if (LastAnnounceTime == 0 || LastAnnounceTime <= primaryLevel->time-5) { - LastAnnounceTime = level.time; + LastAnnounceTime = primaryLevel->time; S_Sound (CHAN_VOICE, sound, 1, ATTN_NONE); } } @@ -224,7 +224,7 @@ bool AnnounceKill (AActor *killer, AActor *killee) if (cl_bbannounce && deathmatch) { - bool playSound = killee->CheckLocalView (consoleplayer); + bool playSound = killee->CheckLocalView(); if (killer == NULL) { // The world killed the player @@ -258,7 +258,7 @@ bool AnnounceKill (AActor *killer, AActor *killee) // Blood only plays the announcement sound on the killer's // computer. I think it sounds neater to also hear it on // the killee's machine. - playSound |= killer->CheckLocalView (consoleplayer); + playSound |= killer->CheckLocalView(); } message = GStrings(choice->Message); @@ -302,8 +302,8 @@ bool AnnounceTelefrag (AActor *killer, AActor *killee) killee->player->userinfo.GetName(), killer->player->userinfo.GetName()); Printf (PRINT_MEDIUM, "%s\n", assembled); } - if (killee->CheckLocalView (consoleplayer) || - killer->CheckLocalView (consoleplayer)) + if (killee->CheckLocalView() || + killer->CheckLocalView()) { DoVoiceAnnounce (TelefragSounds[rannum % 7]); } @@ -337,7 +337,7 @@ bool AnnounceSpreeLoss (AActor *who) { if (cl_bbannounce) { - if (who->CheckLocalView (consoleplayer)) + if (who->CheckLocalView()) { DoVoiceAnnounce (TooBadSounds[M_Random() % 3]); } @@ -357,7 +357,7 @@ bool AnnounceMultikill (AActor *who) { if (cl_bbannounce) { - if (who->CheckLocalView (consoleplayer)) + if (who->CheckLocalView()) { DoVoiceAnnounce (GoodJobSounds[M_Random() % 3]); } diff --git a/src/c_bind.cpp b/src/c_bind.cpp index f2758ab139..0427d5c454 100644 --- a/src/c_bind.cpp +++ b/src/c_bind.cpp @@ -753,7 +753,6 @@ bool C_DoKey (event_t *ev, FKeyBindings *binds, FKeyBindings *doublebinds) dclickmask = 1 << (ev->data1 & 7); dclick = false; - // This used level.time which didn't work outside a level. nowtime = (unsigned)I_msTime(); if (doublebinds != NULL && int(DClickTime[ev->data1] - nowtime) > 0 && ev->type == EV_KeyDown) { diff --git a/src/c_cmds.cpp b/src/c_cmds.cpp index 54dcc52aeb..b33dd91ce0 100644 --- a/src/c_cmds.cpp +++ b/src/c_cmds.cpp @@ -47,7 +47,6 @@ #include "c_dispatch.h" #include "i_system.h" - #include "doomerrors.h" #include "doomstat.h" #include "gstrings.h" @@ -68,6 +67,7 @@ #include "r_utility.h" #include "c_functions.h" #include "g_levellocals.h" +#include "v_video.h" extern FILE *Logfile; extern bool insave; @@ -366,7 +366,7 @@ CCMD (changemap) if (argv.argc() > 1) { const char *mapname = argv[1]; - if (!strcmp(mapname, "*")) mapname = level.MapName.GetChars(); + if (!strcmp(mapname, "*")) mapname = primaryLevel->MapName.GetChars(); try { @@ -945,7 +945,8 @@ static void PrintFilteredActorList(const ActorTypeChecker IsActorType, const cha } } } - TThinkerIterator it; + // This only works on the primary level. + auto it = primaryLevel->GetThinkerIterator(); while ( (mo = it.Next()) ) { @@ -1055,20 +1056,21 @@ CCMD(changesky) if (netgame || argv.argc()<2) return; + // This only alters the primary level's sky setting. For testing out a sky that is sufficient. sky1name = argv[1]; if (sky1name[0] != 0) { FTextureID newsky = TexMan.GetTextureID(sky1name, ETextureType::Wall, FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_ReturnFirst); if (newsky.Exists()) { - sky1texture = level.skytexture1 = newsky; + primaryLevel->skytexture1 = newsky; } else { Printf("changesky: Texture '%s' not found\n", sky1name); } } - R_InitSkyMap (); + InitSkyMap (primaryLevel); } //----------------------------------------------------------------------------- @@ -1099,9 +1101,9 @@ CCMD(nextmap) return; } - if (level.NextMap.Len() > 0 && level.NextMap.Compare("enDSeQ", 6)) + if (primaryLevel->NextMap.Len() > 0 && primaryLevel->NextMap.Compare("enDSeQ", 6)) { - G_DeferedInitNew(level.NextMap); + G_DeferedInitNew(primaryLevel->NextMap); } else { @@ -1123,9 +1125,9 @@ CCMD(nextsecret) return; } - if (level.NextSecretMap.Len() > 0 && level.NextSecretMap.Compare("enDSeQ", 6)) + if (primaryLevel->NextSecretMap.Len() > 0 && primaryLevel->NextSecretMap.Compare("enDSeQ", 6)) { - G_DeferedInitNew(level.NextSecretMap); + G_DeferedInitNew(primaryLevel->NextSecretMap); } else { @@ -1170,10 +1172,10 @@ static void PrintSecretString(const char *string, bool thislevel) { auto secnum = (unsigned)strtoull(string+2, (char**)&string, 10); if (*string == ';') string++; - if (thislevel && secnum < level.sectors.Size()) + if (thislevel && secnum < primaryLevel->sectors.Size()) { - if (level.sectors[secnum].isSecret()) colstr = TEXTCOLOR_RED; - else if (level.sectors[secnum].wasSecret()) colstr = TEXTCOLOR_GREEN; + if (primaryLevel->sectors[secnum].isSecret()) colstr = TEXTCOLOR_RED; + else if (primaryLevel->sectors[secnum].wasSecret()) colstr = TEXTCOLOR_GREEN; else colstr = TEXTCOLOR_ORANGE; } } @@ -1181,7 +1183,7 @@ static void PrintSecretString(const char *string, bool thislevel) { long tid = (long)strtoll(string+2, (char**)&string, 10); if (*string == ';') string++; - FActorIterator it(tid); + auto it = primaryLevel->GetActorIterator(tid); AActor *actor; bool foundone = false; if (thislevel) @@ -1214,8 +1216,8 @@ static void PrintSecretString(const char *string, bool thislevel) CCMD(secret) { - const char *mapname = argv.argc() < 2? level.MapName.GetChars() : argv[1]; - bool thislevel = !stricmp(mapname, level.MapName); + const char *mapname = argv.argc() < 2? primaryLevel->MapName.GetChars() : argv[1]; + bool thislevel = !stricmp(mapname, primaryLevel->MapName); bool foundsome = false; int lumpno=Wads.CheckNumForName("SECRETS"); diff --git a/src/c_console.cpp b/src/c_console.cpp index 8d2d1dfcae..b25303c266 100644 --- a/src/c_console.cpp +++ b/src/c_console.cpp @@ -34,7 +34,7 @@ #include "templates.h" #include "p_setup.h" - +#include "i_system.h" #include "version.h" #include "g_game.h" #include "c_bind.h" @@ -1243,7 +1243,7 @@ void C_FullConsole () if (gamestate != GS_STARTUP) { gamestate = GS_FULLCONSOLE; - level.Music = ""; + primaryLevel->Music = ""; S_Start (); P_FreeLevelData (); V_SetBlend (0,0,0,0); diff --git a/src/c_console.h b/src/c_console.h index 9e563b3eff..17aaf5de73 100644 --- a/src/c_console.h +++ b/src/c_console.h @@ -51,7 +51,6 @@ constate_e; extern int PrintColors[PRINTLEVELS + 2]; extern constate_e ConsoleState; -extern int ConBottom; // Initialize the console void C_InitConsole (int width, int height, bool ingame); @@ -65,6 +64,7 @@ void C_Ticker (void); void AddToConsole (int printlevel, const char *string); int PrintString (int printlevel, const char *string); +int PrintStringHigh (const char *string); int VPrintf (int printlevel, const char *format, va_list parms) GCCFORMAT(2); void C_DrawConsole (); diff --git a/src/c_cvars.cpp b/src/c_cvars.cpp index 0345a7bd1b..bda309361d 100644 --- a/src/c_cvars.cpp +++ b/src/c_cvars.cpp @@ -40,9 +40,9 @@ #include "c_console.h" #include "c_dispatch.h" -#include "doomstat.h" +#include "g_game.h" #include "d_player.h" - +#include "v_video.h" #include "d_netinf.h" #include "menu/menu.h" diff --git a/src/c_dispatch.cpp b/src/c_dispatch.cpp index 3a44db79df..127f5f2f65 100644 --- a/src/c_dispatch.cpp +++ b/src/c_dispatch.cpp @@ -45,7 +45,7 @@ #include "c_console.h" #include "c_dispatch.h" #include "m_argv.h" -#include "doomstat.h" +#include "g_game.h" #include "d_player.h" #include "configfile.h" #include "v_text.h" @@ -54,6 +54,7 @@ #include "serializer.h" #include "menu/menu.h" #include "vm.h" +#include "g_levellocals.h" // MACROS ------------------------------------------------------------------ diff --git a/src/ct_chat.cpp b/src/ct_chat.cpp index ec3c4f4e21..31dd40f8a2 100644 --- a/src/ct_chat.cpp +++ b/src/ct_chat.cpp @@ -27,7 +27,7 @@ #include "m_swap.h" #include "hu_stuff.h" #include "s_sound.h" -#include "doomstat.h" +#include "g_game.h" #include "st_stuff.h" #include "c_console.h" #include "c_dispatch.h" @@ -38,6 +38,7 @@ #include "d_net.h" #include "d_event.h" #include "sbar.h" +#include "v_video.h" #define QUEUESIZE 128 #define MESSAGESIZE 128 diff --git a/src/d_event.h b/src/d_event.h index 22988cda54..4aeb4979c0 100644 --- a/src/d_event.h +++ b/src/d_event.h @@ -25,6 +25,7 @@ #include "basictypes.h" +#include // @@ -58,7 +59,7 @@ struct event_t enum gameaction_t : int { ga_nothing, - ga_loadlevel, + ga_loadlevel, // not used. ga_newgame, ga_newgame2, ga_recordgame, @@ -119,6 +120,7 @@ typedef enum // Called by IO functions when input is detected. void D_PostEvent (const event_t* ev); void D_RemoveNextCharEvent(); +void D_Render(std::function action, bool interpolate); // @@ -127,8 +129,6 @@ void D_RemoveNextCharEvent(); #define MAXEVENTS 128 extern event_t events[MAXEVENTS]; -extern int eventhead; -extern int eventtail; extern gameaction_t gameaction; diff --git a/src/d_main.cpp b/src/d_main.cpp index b5aaced2d3..a2c758e0bc 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -99,6 +99,8 @@ #include "events.h" #include "vm.h" #include "types.h" +#include "i_system.h" +#include "g_cvars.h" #include "r_data/r_vanillatrans.h" EXTERN_CVAR(Bool, hud_althud) @@ -170,7 +172,7 @@ CUSTOM_CVAR (Int, fraglimit, 0, CVAR_SERVERINFO) if (playeringame[i] && self <= D_GetFragCount(&players[i])) { Printf ("%s\n", GStrings("TXT_FRAGLIMIT")); - G_ExitLevel (0, false); + primaryLevel->ExitLevel (0, false); break; } } @@ -271,7 +273,7 @@ void D_ProcessEvents (void) if (M_Responder (ev)) continue; // menu ate the event // check events - if (ev->type != EV_Mouse && E_Responder(ev)) // [ZZ] ZScript ate the event // update 07.03.17: mouse events are handled directly + if (ev->type != EV_Mouse && primaryLevel->localEventManager->Responder(ev)) // [ZZ] ZScript ate the event // update 07.03.17: mouse events are handled directly continue; G_Responder (ev); } @@ -293,7 +295,7 @@ void D_PostEvent (const event_t *ev) return; } events[eventhead] = *ev; - if (ev->type == EV_Mouse && menuactive == MENU_Off && ConsoleState != c_down && ConsoleState != c_falling && !E_Responder(ev) && !paused) + if (ev->type == EV_Mouse && menuactive == MENU_Off && ConsoleState != c_down && ConsoleState != c_falling && !primaryLevel->localEventManager->Responder(ev) && !paused) { if (Button_Mlook.bDown || freelook) { @@ -351,6 +353,35 @@ void D_RemoveNextCharEvent() } } +//========================================================================== +// +// Render wrapper. +// This function contains all the needed setup and cleanup for starting a render job. +// +//========================================================================== + +void D_Render(std::function action, bool interpolate) +{ + for (auto Level : AllLevels()) + { + // Check for the presence of dynamic lights at the start of the frame once. + if ((gl_lights && vid_rendermode == 4) || (r_dynlights && vid_rendermode != 4)) + { + Level->HasDynamicLights = !!Level->lights; + } + else Level->HasDynamicLights = false; // lights are off so effectively we have none. + if (interpolate) Level->interpolator.DoInterpolations(I_GetTimeFrac()); + P_FindParticleSubsectors(Level); + PO_LinkToSubsectors(Level); + } + action(); + + if (interpolate) for (auto Level : AllLevels()) + { + Level->interpolator.RestoreInterpolations(); + } +} + //========================================================================== // // CVAR dmflags @@ -361,8 +392,7 @@ CUSTOM_CVAR (Int, dmflags, 0, CVAR_SERVERINFO) { // In case DF_NO_FREELOOK was changed, reinitialize the sky // map. (If no freelook, then no need to stretch the sky.) - if (sky1texture.isValid()) - R_InitSkyMap (); + R_InitSkyMap (); if (self & DF_NO_FREELOOK) { @@ -502,36 +532,40 @@ CVAR (Flag, sv_respawnsuper, dmflags2, DF2_RESPAWN_SUPER); // //========================================================================== -int i_compatflags, i_compatflags2; // internal compatflags composed from the compatflags CVAR and MAPINFO settings -int ii_compatflags, ii_compatflags2, ib_compatflags; - EXTERN_CVAR(Int, compatmode) -static int GetCompatibility(int mask) +static int GetCompatibility(FLevelLocals *Level, int mask) { - if (level.info == NULL) return mask; - else return (mask & ~level.info->compatmask) | (level.info->compatflags & level.info->compatmask); + if (Level->info == nullptr) return mask; + else return (mask & ~Level->info->compatmask) | (Level->info->compatflags & Level->info->compatmask); } -static int GetCompatibility2(int mask) +static int GetCompatibility2(FLevelLocals *Level, int mask) { - return (level.info == NULL) ? mask - : (mask & ~level.info->compatmask2) | (level.info->compatflags2 & level.info->compatmask2); + return (Level->info == nullptr) ? mask + : (mask & ~Level->info->compatmask2) | (Level->info->compatflags2 & Level->info->compatmask2); } CUSTOM_CVAR (Int, compatflags, 0, CVAR_ARCHIVE|CVAR_SERVERINFO) { - int old = i_compatflags; - i_compatflags = GetCompatibility(self) | ii_compatflags; - if ((old ^ i_compatflags) & COMPATF_POLYOBJ) + for (auto Level : AllLevels()) { - FPolyObj::ClearAllSubsectorLinks(); + int old = Level->i_compatflags; + Level->i_compatflags = GetCompatibility(Level, self) | Level->ii_compatflags; + if ((old ^ Level->i_compatflags) & COMPATF_POLYOBJ) + { + Level->ClearAllSubsectorLinks(); + } } } CUSTOM_CVAR (Int, compatflags2, 0, CVAR_ARCHIVE|CVAR_SERVERINFO) { - i_compatflags2 = GetCompatibility2(self) | ii_compatflags2; + for (auto Level : AllLevels()) + { + Level->i_compatflags2 = GetCompatibility2(Level, self) | Level->ii_compatflags2; + Level->SetCompatLineOnSide(true); + } } CUSTOM_CVAR(Int, compatmode, 0, CVAR_ARCHIVE|CVAR_NOINITCALL) @@ -746,19 +780,16 @@ void D_Display () //E_RenderFrame(); // - // Check for the presence of dynamic lights at the start of the frame once. - if ((gl_lights && vid_rendermode == 4) || (r_dynlights && vid_rendermode != 4)) + D_Render([&]() { - level.HasDynamicLights = !!level.lights; - } - else level.HasDynamicLights = false; // lights are off so effectively we have none. - - viewsec = screen->RenderView(&players[consoleplayer]); + viewsec = screen->RenderView(&players[consoleplayer]); + }, true); + screen->Begin2D(); screen->DrawBlend(viewsec); if (automapactive) { - AM_Drawer (hud_althud? viewheight : StatusBar->GetTopOfStatusbar()); + primaryLevel->automap->Drawer (hud_althud? viewheight : StatusBar->GetTopOfStatusbar()); } // for timing the statusbar code. @@ -928,7 +959,7 @@ void D_Display () void D_ErrorCleanup () { savegamerestore = false; - bglobal.RemoveAllBots (true); + primaryLevel->BotInfo.RemoveAllBots (primaryLevel, true); D_QuitNetGame (); if (demorecording || demoplayback) G_CheckDemoStatus (); @@ -2524,14 +2555,14 @@ void D_DoomMain (void) PClassActor::StaticSetActorNums(); //Added by MC: - bglobal.getspawned.Clear(); + primaryLevel->BotInfo.getspawned.Clear(); argcount = Args->CheckParmList("-bots", &args); for (p = 0; p < argcount; ++p) { - bglobal.getspawned.Push(args[p]); + primaryLevel->BotInfo.getspawned.Push(args[p]); } - bglobal.spawn_tries = 0; - bglobal.wanted_botnum = bglobal.getspawned.Size(); + primaryLevel->BotInfo.spawn_tries = 0; + primaryLevel->BotInfo.wanted_botnum = primaryLevel->BotInfo.getspawned.Size(); if (!batchrun) Printf ("P_Init: Init Playloop state.\n"); StartScreen->LoadingStatus ("Init game engine", 0x3f); @@ -2695,8 +2726,11 @@ void D_DoomMain (void) // clean up game state ST_Clear(); D_ErrorCleanup (); - DThinker::DestroyThinkersInList(STAT_STATIC); - E_Shutdown(false); + for (auto Level : AllLevels()) + { + Level->Thinkers.DestroyThinkersInList(STAT_STATIC); + } + staticEventManager.Shutdown(); P_FreeLevelData(); M_SaveDefaults(NULL); // save config before the restart diff --git a/src/d_net.cpp b/src/d_net.cpp index 2fc7c81c30..0d497bcbd8 100644 --- a/src/d_net.cpp +++ b/src/d_net.cpp @@ -61,8 +61,10 @@ #include "a_keys.h" #include "intermission/intermission.h" #include "g_levellocals.h" +#include "actorinlines.h" #include "events.h" #include "i_time.h" +#include "i_system.h" #include "vm.h" EXTERN_CVAR (Int, disableautosave) @@ -2079,17 +2081,12 @@ uint8_t *FDynamicBuffer::GetData (int *len) } -static int KillAll(PClassActor *cls) -{ - return P_Massacre(false, cls); -} - -static int RemoveClass(const PClass *cls) +static int RemoveClass(FLevelLocals *Level, const PClass *cls) { AActor *actor; int removecount = 0; bool player = false; - TThinkerIterator iterator(cls); + auto iterator = Level->GetThinkerIterator(cls->TypeName); while ((actor = iterator.Next())) { if (actor->IsA(cls)) @@ -2225,8 +2222,8 @@ void Net_DoCommand (int type, uint8_t **stream, int player) s = ReadString (stream); // Using LEVEL_NOINTERMISSION tends to throw the game out of sync. // That was a long time ago. Maybe it works now? - level.flags |= LEVEL_CHANGEMAPCHEAT; - G_ChangeLevel(s, pos, 0); + primaryLevel->flags |= LEVEL_CHANGEMAPCHEAT; + primaryLevel->ChangeLevel(s, pos, 0); break; case DEM_SUICIDE: @@ -2234,11 +2231,11 @@ void Net_DoCommand (int type, uint8_t **stream, int player) break; case DEM_ADDBOT: - bglobal.TryAddBot (stream, player); + primaryLevel->BotInfo.TryAddBot (primaryLevel, stream, player); break; case DEM_KILLBOTS: - bglobal.RemoveAllBots (true); + primaryLevel->BotInfo.RemoveAllBots (primaryLevel, true); Printf ("Removed all bots\n"); break; @@ -2333,14 +2330,14 @@ void Net_DoCommand (int type, uint8_t **stream, int player) const AActor *def = GetDefaultByType (typeinfo); DVector3 spawnpos = source->Vec3Angle(def->radius * 2 + source->radius, source->Angles.Yaw, 8.); - AActor *spawned = Spawn (typeinfo, spawnpos, ALLOW_REPLACE); + AActor *spawned = Spawn (primaryLevel, typeinfo, spawnpos, ALLOW_REPLACE); if (spawned != NULL) { if (type == DEM_SUMMONFRIEND || type == DEM_SUMMONFRIEND2 || type == DEM_SUMMONMBF) { if (spawned->CountsAsKill()) { - level.total_monsters--; + primaryLevel->total_monsters--; } spawned->FriendPlayer = player + 1; spawned->flags |= MF_FRIENDLY; @@ -2510,7 +2507,7 @@ void Net_DoCommand (int type, uint8_t **stream, int player) } if (!CheckCheatmode(player == consoleplayer)) { - P_ExecuteSpecial(snum, NULL, players[player].mo, false, arg[0], arg[1], arg[2], arg[3], arg[4]); + P_ExecuteSpecial(primaryLevel, snum, NULL, players[player].mo, false, arg[0], arg[1], arg[2], arg[3], arg[4]); } } break; @@ -2563,11 +2560,11 @@ void Net_DoCommand (int type, uint8_t **stream, int player) if (cls != NULL) { - killcount = KillAll(cls); - PClassActor *cls_rep = cls->GetReplacement(); + killcount = primaryLevel->Massacre(false, cls->TypeName); + PClassActor *cls_rep = cls->GetReplacement(primaryLevel); if (cls != cls_rep) { - killcount += KillAll(cls_rep); + killcount += primaryLevel->Massacre(false, cls_rep->TypeName); } Printf ("Killed %d monsters of type %s.\n",killcount, s); } @@ -2585,11 +2582,11 @@ void Net_DoCommand (int type, uint8_t **stream, int player) PClassActor *cls = PClass::FindActor(s); if (cls != NULL && cls->IsDescendantOf(RUNTIME_CLASS(AActor))) { - removecount = RemoveClass(cls); - const PClass *cls_rep = cls->GetReplacement(); + removecount = RemoveClass(primaryLevel, cls); + const PClass *cls_rep = cls->GetReplacement(primaryLevel); if (cls != cls_rep) { - removecount += RemoveClass(cls_rep); + removecount += RemoveClass(primaryLevel, cls_rep); } Printf("Removed %d actors of type %s.\n", removecount, s); } @@ -2663,7 +2660,7 @@ void Net_DoCommand (int type, uint8_t **stream, int player) case DEM_FINISHGAME: // Simulate an end-of-game action - G_ChangeLevel(NULL, 0, 0); + primaryLevel->ChangeLevel(NULL, 0, 0); break; case DEM_NETEVENT: @@ -2674,7 +2671,7 @@ void Net_DoCommand (int type, uint8_t **stream, int player) for (int i = 0; i < 3; i++) arg[i] = ReadLong(stream); bool manual = !!ReadByte(stream); - E_Console(player, s, arg[0], arg[1], arg[2], manual); + primaryLevel->localEventManager->Console(player, s, arg[0], arg[1], arg[2], manual); } break; @@ -2701,7 +2698,7 @@ static void RunScript(uint8_t **stream, AActor *pawn, int snum, int argn, int al arg[i] = argval; } } - P_StartScript(pawn, NULL, snum, level.MapName, arg, MIN(countof(arg), argn), ACS_NET | always); + P_StartScript(pawn->Level, pawn, NULL, snum, primaryLevel->MapName, arg, MIN(countof(arg), argn), ACS_NET | always); } void Net_SkipCommand (int type, uint8_t **stream) diff --git a/src/d_protocol.cpp b/src/d_protocol.cpp index 1a0ebcc023..1079419768 100644 --- a/src/d_protocol.cpp +++ b/src/d_protocol.cpp @@ -32,7 +32,7 @@ ** */ -#include "i_system.h" + #include "d_protocol.h" #include "d_net.h" #include "doomstat.h" diff --git a/src/dobject.cpp b/src/dobject.cpp index 9e2e01a3a2..b16e69d9ba 100644 --- a/src/dobject.cpp +++ b/src/dobject.cpp @@ -488,6 +488,8 @@ void DObject::StaticPointerSubstitution (AActor *old, AActor *notOld) DObject *probe; size_t changed = 0; int i; + + if (old == nullptr) return; // Go through all objects. i = 0;DObject *last=0; @@ -515,8 +517,8 @@ void DObject::StaticPointerSubstitution (AActor *old, AActor *notOld) } } - // Go through sectors. - for (auto &sec : level.sectors) + // Go through sectors. Only the level this actor belongs to is relevant. + for (auto &sec : old->Level->sectors) { if (sec.SoundTarget == old) sec.SoundTarget = notOld; } diff --git a/src/dobject.h b/src/dobject.h index b57f75bedf..a4e16dc0b9 100644 --- a/src/dobject.h +++ b/src/dobject.h @@ -37,7 +37,7 @@ #include #include #include "doomtype.h" -#include "i_system.h" + #include "vectors.h" class PClass; diff --git a/src/dobjgc.cpp b/src/dobjgc.cpp index 8359eba3c8..bed2caa08f 100644 --- a/src/dobjgc.cpp +++ b/src/dobjgc.cpp @@ -96,9 +96,6 @@ #define DEFAULT_GCMUL 400 // GC runs 'quadruple the speed' of memory allocation // Number of sectors to mark for each step. -#define SECTORSTEPSIZE 32 -#define POLYSTEPSIZE 120 -#define SIDEDEFSTEPSIZE 240 #define GCSTEPSIZE 1024u #define GCSWEEPMAX 40 @@ -107,22 +104,6 @@ // TYPES ------------------------------------------------------------------- -// This object is responsible for marking sectors during the propagate -// stage. In case there are many, many sectors, it lets us break them -// up instead of marking them all at once. -class DSectorMarker : public DObject -{ - DECLARE_CLASS(DSectorMarker, DObject) -public: - DSectorMarker() : SecNum(0),PolyNum(0),SideNum(0) {} - size_t PropagateMark(); - int SecNum; - int PolyNum; - int SideNum; -}; - -IMPLEMENT_CLASS(DSectorMarker, false, false) - // EXTERNAL FUNCTION PROTOTYPES -------------------------------------------- // PUBLIC FUNCTION PROTOTYPES ---------------------------------------------- @@ -154,8 +135,6 @@ bool FinalGC; // PRIVATE DATA DEFINITIONS ------------------------------------------------ -static DSectorMarker *SectorMarker; - // CODE -------------------------------------------------------------------- //========================================================================== @@ -303,10 +282,10 @@ static void MarkRoot() Mark(StatusBar); M_MarkMenus(); Mark(DIntermissionController::CurrentIntermission); - DThinker::MarkRoots(); - Mark(E_FirstEventHandler); - Mark(E_LastEventHandler); - level.Mark(); + Mark(staticEventManager.FirstEventHandler); + Mark(staticEventManager.LastEventHandler); + for (auto Level : AllLevels()) + Level->Mark(); // Mark players. for (i = 0; i < MAXPLAYERS; i++) @@ -314,27 +293,12 @@ static void MarkRoot() if (playeringame[i]) players[i].PropagateMark(); } - // Mark sound sequences. - DSeqNode::StaticMarkHead(); // Mark sectors. - if (SectorMarker == nullptr && level.sectors.Size() > 0) + + for (auto Level : AllLevels()) { - SectorMarker = Create(); + Level->Mark(); } - else if (level.sectors.Size() == 0) - { - SectorMarker = nullptr; - } - else - { - SectorMarker->SecNum = 0; - } - Mark(SectorMarker); - Mark(interpolator.Head); - // Mark bot stuff. - Mark(bglobal.firstthing); - Mark(bglobal.body1); - Mark(bglobal.body2); // NextToThink must not be freed while thinkers are ticking. Mark(NextToThink); // Mark soft roots. @@ -617,77 +581,6 @@ void DelSoftRoot(DObject *obj) } -//========================================================================== -// -// DSectorMarker :: PropagateMark -// -// Propagates marks across a few sectors and reinserts itself into the -// gray list if it didn't do them all. -// -//========================================================================== - -size_t DSectorMarker::PropagateMark() -{ - int i; - int marked = 0; - bool moretodo = false; - int numsectors = level.sectors.Size(); - - for (i = 0; i < SECTORSTEPSIZE && SecNum + i < numsectors; ++i) - { - sector_t *sec = &level.sectors[SecNum + i]; - GC::Mark(sec->SoundTarget); - GC::Mark(sec->SecActTarget); - GC::Mark(sec->floordata); - GC::Mark(sec->ceilingdata); - GC::Mark(sec->lightingdata); - for(int j=0;j<4;j++) GC::Mark(sec->interpolations[j]); - } - marked += i * sizeof(sector_t); - if (SecNum + i < numsectors) - { - SecNum += i; - moretodo = true; - } - - if (!moretodo && level.Polyobjects.Size() > 0) - { - for (i = 0; i < POLYSTEPSIZE && PolyNum + i < (int)level.Polyobjects.Size(); ++i) - { - GC::Mark(level.Polyobjects[PolyNum + i].interpolation); - } - marked += i * sizeof(FPolyObj); - if (PolyNum + i < (int)level.Polyobjects.Size()) - { - PolyNum += i; - moretodo = true; - } - } - if (!moretodo && level.sides.Size() > 0) - { - for (i = 0; i < SIDEDEFSTEPSIZE && SideNum + i < (int)level.sides.Size(); ++i) - { - side_t *side = &level.sides[SideNum + i]; - for (int j = 0; j < 3; j++) GC::Mark(side->textures[j].interpolation); - } - marked += i * sizeof(side_t); - if (SideNum + i < (int)level.sides.Size()) - { - SideNum += i; - moretodo = true; - } - } - // If there are more sectors to mark, put ourself back into the gray - // list. - if (moretodo) - { - Black2Gray(); - GCNext = GC::Gray; - GC::Gray = this; - } - return marked; -} - //========================================================================== // // STAT gc diff --git a/src/dobjtype.cpp b/src/dobjtype.cpp index 2e7a006b16..c0c8e24323 100644 --- a/src/dobjtype.cpp +++ b/src/dobjtype.cpp @@ -49,6 +49,7 @@ #include "vm.h" #include "types.h" #include "scriptutil.h" +#include "i_system.h" // MACROS ------------------------------------------------------------------ @@ -562,12 +563,7 @@ void PClass::InitializeDefaults() assert(Defaults == nullptr); Defaults = (uint8_t *)M_Malloc(Size); - // run the constructor on the defaults to set the vtbl pointer which is needed to run class-aware functions on them. - // Temporarily setting bSerialOverride prevents linking into the thinker chains. - auto s = DThinker::bSerialOverride; - DThinker::bSerialOverride = true; ConstructNative(Defaults); - DThinker::bSerialOverride = s; // We must unlink the defaults from the class list because it's just a static block of data to the engine. DObject *optr = (DObject*)Defaults; GC::Root = optr->ObjNext; diff --git a/src/doomdata.h b/src/doomdata.h index ee0b21f324..05bcfbfc12 100644 --- a/src/doomdata.h +++ b/src/doomdata.h @@ -151,7 +151,9 @@ enum ELineFlags : unsigned ML_MAPPED = 0x00000100, // set if already drawn in automap ML_REPEAT_SPECIAL = 0x00000200, // special is repeatable + // 0x400, 0x800 and 0x1000 are ML_SPAC_MASK, they can be used for internal things but not for real map flags. ML_ADDTRANS = 0x00000400, // additive translucency (can only be set internally) + ML_COMPATSIDE = 0x00000800, // for compatible PointOnLineSide checks. Using the global compatibility check would be a bit expensive for this check. // Extended flags ML_MONSTERSCANACTIVATE = 0x00002000, // [RH] Monsters (as well as players) can activate the line diff --git a/src/doomdef.h b/src/doomdef.h index b324fa90f9..a8f0250d55 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -71,33 +71,6 @@ enum }; -// The current state of the game: whether we are -// playing, gazing at the intermission screen, -// the game final animation, or a demo. -enum gamestate_t : int -{ - GS_LEVEL, - GS_INTERMISSION, - GS_FINALE, - GS_DEMOSCREEN, - GS_FULLCONSOLE, // [RH] Fullscreen console - GS_HIDECONSOLE, // [RH] The menu just did something that should hide fs console - GS_STARTUP, // [RH] Console is fullscreen, and game is just starting - GS_TITLELEVEL, // [RH] A combination of GS_LEVEL and GS_DEMOSCREEN - - GS_FORCEWIPE = -1, - GS_FORCEWIPEFADE = -2, - GS_FORCEWIPEBURN = -3, - GS_FORCEWIPEMELT = -4 -}; - -extern gamestate_t gamestate; - -// wipegamestate can be set to -1 -// to force a wipe on the next draw -extern gamestate_t wipegamestate; - - typedef float skill_t; /* diff --git a/src/doomerrors.h b/src/doomerrors.h index 52bc3c12bb..9847120e6c 100644 --- a/src/doomerrors.h +++ b/src/doomerrors.h @@ -39,6 +39,7 @@ #include #include #include +#include "doomtype.h" #define MAX_ERRORTEXT 1024 @@ -103,4 +104,7 @@ public: CFatalError(const char *message) : CDoomError(message) {} }; +void I_Error (const char *error, ...) GCCPRINTF(1,2); +void I_FatalError (const char *error, ...) GCCPRINTF(1,2); + #endif //__ERRORS_H__ diff --git a/src/doomstat.cpp b/src/doomstat.cpp index edca955e14..b6f0e78710 100644 --- a/src/doomstat.cpp +++ b/src/doomstat.cpp @@ -50,14 +50,21 @@ CVAR (Bool, alwaysapplydmflags, false, CVAR_SERVERINFO); CUSTOM_CVAR (Float, teamdamage, 0.f, CVAR_SERVERINFO) { - level.teamdamage = self; + for (auto Level : AllLevels()) + { + Level->teamdamage = self; + } } CUSTOM_CVAR (String, language, "auto", CVAR_ARCHIVE) { SetLanguageIDs (); GStrings.LoadStrings (false); - if (level.info != NULL) level.LevelName = level.info->LookupLevelName(); + for (auto Level : AllLevels()) + { + // does this even make sense on secondary levels...? + if (Level->info != nullptr) Level->LevelName = Level->info->LookupLevelName(); + } } // [RH] Network arbitrator diff --git a/src/doomstat.h b/src/doomstat.h index 6f0007f4c4..23356b25ff 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -248,7 +248,6 @@ EXTERN_CVAR (Int, dmflags2); // [BC] EXTERN_CVAR (Int, compatflags); EXTERN_CVAR (Int, compatflags2); -extern int i_compatflags, i_compatflags2, ii_compatflags, ii_compatflags2, ib_compatflags; // Filters from AddAutoloadFiles(). Used to filter files from archives. extern FString LumpFilterIWAD; diff --git a/src/errors.h b/src/errors.h deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/events.cpp b/src/events.cpp index f711f17544..033d647b1e 100755 --- a/src/events.cpp +++ b/src/events.cpp @@ -39,24 +39,27 @@ #include "actor.h" #include "c_dispatch.h" #include "d_net.h" +#include "g_game.h" #include "info.h" -DStaticEventHandler* E_FirstEventHandler = nullptr; -DStaticEventHandler* E_LastEventHandler = nullptr; +EventManager staticEventManager; +EventManager eventManager; -bool E_RegisterHandler(DStaticEventHandler* handler) + +bool EventManager::RegisterHandler(DStaticEventHandler* handler) { if (handler == nullptr || handler->ObjectFlags & OF_EuthanizeMe) return false; - if (E_CheckHandler(handler)) + if (CheckHandler(handler)) return false; handler->OnRegister(); + handler->owner = this; // link into normal list // update: link at specific position based on order. DStaticEventHandler* before = nullptr; - for (DStaticEventHandler* existinghandler = E_FirstEventHandler; existinghandler; existinghandler = existinghandler->next) + for (DStaticEventHandler* existinghandler = FirstEventHandler; existinghandler; existinghandler = existinghandler->next) { if (existinghandler->Order > handler->Order) { @@ -65,11 +68,6 @@ bool E_RegisterHandler(DStaticEventHandler* handler) } } - // 1. MyHandler2->1: - // E_FirstEventHandler = MyHandler2, E_LastEventHandler = MyHandler2 - // 2. MyHandler3->2: - // E_FirstEventHandler = MyHandler2, E_LastEventHandler = MyHandler3 - // (Yes, all those write barriers here are really needed!) if (before != nullptr) { @@ -86,9 +84,9 @@ bool E_RegisterHandler(DStaticEventHandler* handler) GC::WriteBarrier(handler, before->prev); before->prev = handler; GC::WriteBarrier(before, handler); - if (before == E_FirstEventHandler) + if (before == FirstEventHandler) { - E_FirstEventHandler = handler; + FirstEventHandler = handler; GC::WriteBarrier(handler); } } @@ -96,11 +94,11 @@ bool E_RegisterHandler(DStaticEventHandler* handler) { // so if before is null, it means add last. // it can also mean that we have no handlers at all yet. - handler->prev = E_LastEventHandler; - GC::WriteBarrier(handler, E_LastEventHandler); + handler->prev = LastEventHandler; + GC::WriteBarrier(handler, LastEventHandler); handler->next = nullptr; - if (E_FirstEventHandler == nullptr) E_FirstEventHandler = handler; - E_LastEventHandler = handler; + if (FirstEventHandler == nullptr) FirstEventHandler = handler; + LastEventHandler = handler; GC::WriteBarrier(handler); if (handler->prev != nullptr) { @@ -117,11 +115,11 @@ bool E_RegisterHandler(DStaticEventHandler* handler) return true; } -bool E_UnregisterHandler(DStaticEventHandler* handler) +bool EventManager::UnregisterHandler(DStaticEventHandler* handler) { if (handler == nullptr || handler->ObjectFlags & OF_EuthanizeMe) return false; - if (!E_CheckHandler(handler)) + if (!CheckHandler(handler)) return false; handler->OnUnregister(); @@ -137,14 +135,14 @@ bool E_UnregisterHandler(DStaticEventHandler* handler) handler->next->prev = handler->prev; GC::WriteBarrier(handler->next, handler->prev); } - if (handler == E_FirstEventHandler) + if (handler == FirstEventHandler) { - E_FirstEventHandler = handler->next; + FirstEventHandler = handler->next; GC::WriteBarrier(handler->next); } - if (handler == E_LastEventHandler) + if (handler == LastEventHandler) { - E_LastEventHandler = handler->prev; + LastEventHandler = handler->prev; GC::WriteBarrier(handler->prev); } if (handler->IsStatic()) @@ -155,7 +153,7 @@ bool E_UnregisterHandler(DStaticEventHandler* handler) return true; } -bool E_SendNetworkEvent(FString name, int arg1, int arg2, int arg3, bool manual) +bool EventManager::SendNetworkEvent(FString name, int arg1, int arg2, int arg3, bool manual) { if (gamestate != GS_LEVEL) return false; @@ -171,73 +169,21 @@ bool E_SendNetworkEvent(FString name, int arg1, int arg2, int arg3, bool manual) return true; } -bool E_CheckHandler(DStaticEventHandler* handler) +bool EventManager::CheckHandler(DStaticEventHandler* handler) { - for (DStaticEventHandler* lhandler = E_FirstEventHandler; lhandler; lhandler = lhandler->next) + for (DStaticEventHandler* lhandler = FirstEventHandler; lhandler; lhandler = lhandler->next) if (handler == lhandler) return true; return false; } -bool E_IsStaticType(PClass* type) +bool EventManager::IsStaticType(PClass* type) { assert(type != nullptr); assert(type->IsDescendantOf(RUNTIME_CLASS(DStaticEventHandler))); return !type->IsDescendantOf(RUNTIME_CLASS(DEventHandler)); } -void E_SerializeEvents(FSerializer& arc) -{ - // todo : stuff - if (arc.BeginArray("eventhandlers")) - { - int numlocalhandlers = 0; - TArray handlers; - if (arc.isReading()) - { - numlocalhandlers = arc.ArraySize(); - // delete all current local handlers, if any - for (DStaticEventHandler* lhandler = E_FirstEventHandler; lhandler; lhandler = lhandler->next) - if (!lhandler->IsStatic()) lhandler->Destroy(); - } - else - { - for (DStaticEventHandler* lhandler = E_FirstEventHandler; lhandler; lhandler = lhandler->next) - { - if (lhandler->IsStatic()) continue; - numlocalhandlers++; - handlers.Push(lhandler); - } - } - - for (int i = 0; i < numlocalhandlers; i++) - { - // serialize the object properly. - if (arc.isReading()) - { - // get object and put it into the array - DStaticEventHandler* lhandler; - arc(nullptr, lhandler); - if (lhandler != nullptr) - handlers.Push(lhandler); - } - else - { - ::Serialize(arc, nullptr, handlers[i], nullptr); - } - } - - if (arc.isReading()) - { - // add all newly deserialized handlers into the list - for (int i = 0; i < numlocalhandlers; i++) - E_RegisterHandler(handlers[i]); - } - - arc.EndArray(); - } -} - -static PClass* E_GetHandlerClass(const FString& typeName) +static PClass* GetHandlerClass(const FString& typeName) { PClass* type = PClass::FindClass(typeName); @@ -253,11 +199,11 @@ static PClass* E_GetHandlerClass(const FString& typeName) return type; } -static void E_InitHandler(PClass* type) +void EventManager::InitHandler(PClass* type) { // check if type already exists, don't add twice. bool typeExists = false; - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) { if (handler->IsA(type)) { @@ -268,27 +214,27 @@ static void E_InitHandler(PClass* type) if (typeExists) return; DStaticEventHandler* handler = (DStaticEventHandler*)type->CreateNew(); - E_RegisterHandler(handler); + RegisterHandler(handler); } -void E_InitStaticHandlers(bool map) +void EventManager::InitStaticHandlers(bool map) { // don't initialize map handlers if restoring from savegame. if (savegamerestore) return; // just make sure - E_Shutdown(map); + Shutdown(); // initialize event handlers from gameinfo for (const FString& typeName : gameinfo.EventHandlers) { - PClass* type = E_GetHandlerClass(typeName); + PClass* type = GetHandlerClass(typeName); // don't init the really global stuff here on startup initialization. // don't init map-local global stuff here on level setup. - if (map == E_IsStaticType(type)) + if (map == IsStaticType(type)) continue; - E_InitHandler(type); + InitHandler(type); } if (!map) @@ -297,107 +243,105 @@ void E_InitStaticHandlers(bool map) // initialize event handlers from mapinfo for (const FString& typeName : level.info->EventHandlers) { - PClass* type = E_GetHandlerClass(typeName); - if (E_IsStaticType(type)) + PClass* type = GetHandlerClass(typeName); + if (IsStaticType(type)) I_Error("Fatal: invalid event handler class %s in MAPINFO!\nMap-specific event handlers cannot be static.\n", typeName.GetChars()); - E_InitHandler(type); + InitHandler(type); } } -void E_Shutdown(bool map) +void EventManager::Shutdown() { // delete handlers. - for (DStaticEventHandler* handler = E_LastEventHandler; handler; handler = handler->prev) + for (DStaticEventHandler* handler = LastEventHandler; handler; handler = handler->prev) { - if (handler->IsStatic() == !map) - handler->Destroy(); + handler->Destroy(); } } -#define DEFINE_EVENT_LOOPER(name) void E_##name() \ +#define DEFINE_EVENT_LOOPER(name, play) void EventManager::name() \ { \ - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) \ + if (ShouldCallStatic(play)) staticEventManager.name(); \ + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) \ handler->name(); \ } + // note for the functions below. // *Unsafe is executed on EVERY map load/close, including savegame loading, etc. // There is no point in allowing non-static handlers to receive unsafe event separately, as there is no point in having static handlers receive safe event. // Because the main point of safe WorldLoaded/Unloading is that it will be preserved in savegames. -void E_WorldLoaded() +void EventManager::WorldLoaded() { - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) { - if (handler->IsStatic()) continue; if (savegamerestore) continue; // don't execute WorldLoaded for handlers loaded from the savegame. handler->WorldLoaded(); } } -void E_WorldUnloaded() +void EventManager::WorldUnloaded() { - for (DStaticEventHandler* handler = E_LastEventHandler; handler; handler = handler->prev) + for (DStaticEventHandler* handler = LastEventHandler; handler; handler = handler->prev) { - if (handler->IsStatic()) continue; handler->WorldUnloaded(); } } -void E_WorldLoadedUnsafe() +bool EventManager::ShouldCallStatic(bool forplay) { - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) - { - if (!handler->IsStatic()) continue; - handler->WorldLoaded(); - } + return this != &staticEventManager && Level == primaryLevel; } -void E_WorldUnloadedUnsafe() -{ - for (DStaticEventHandler* handler = E_LastEventHandler; handler; handler = handler->prev) - { - if (!handler->IsStatic()) continue; - handler->WorldUnloaded(); - } -} - -void E_WorldThingSpawned(AActor* actor) +void EventManager::WorldThingSpawned(AActor* actor) { // don't call anything if actor was destroyed on PostBeginPlay/BeginPlay/whatever. if (actor->ObjectFlags & OF_EuthanizeMe) return; - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + + if (ShouldCallStatic(true)) staticEventManager.WorldThingSpawned(actor); + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) handler->WorldThingSpawned(actor); } -void E_WorldThingDied(AActor* actor, AActor* inflictor) +void EventManager::WorldThingDied(AActor* actor, AActor* inflictor) { // don't call anything if actor was destroyed on PostBeginPlay/BeginPlay/whatever. if (actor->ObjectFlags & OF_EuthanizeMe) return; - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + + if (ShouldCallStatic(true)) staticEventManager.WorldThingDied(actor, inflictor); + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) handler->WorldThingDied(actor, inflictor); } -void E_WorldThingRevived(AActor* actor) +void EventManager::WorldThingRevived(AActor* actor) { // don't call anything if actor was destroyed on PostBeginPlay/BeginPlay/whatever. if (actor->ObjectFlags & OF_EuthanizeMe) return; - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + + if (ShouldCallStatic(true)) staticEventManager.WorldThingRevived(actor); + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) handler->WorldThingRevived(actor); } -void E_WorldThingDamaged(AActor* actor, AActor* inflictor, AActor* source, int damage, FName mod, int flags, DAngle angle) +void EventManager::WorldThingDamaged(AActor* actor, AActor* inflictor, AActor* source, int damage, FName mod, int flags, DAngle angle) { // don't call anything if actor was destroyed on PostBeginPlay/BeginPlay/whatever. if (actor->ObjectFlags & OF_EuthanizeMe) return; - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + + if (ShouldCallStatic(true)) staticEventManager.WorldThingDamaged(actor, inflictor, source, damage, mod, flags, angle); + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) handler->WorldThingDamaged(actor, inflictor, source, damage, mod, flags, angle); } -void E_WorldThingDestroyed(AActor* actor) +void EventManager::WorldThingDestroyed(AActor* actor) { // don't call anything if actor was destroyed on PostBeginPlay/BeginPlay/whatever. if (actor->ObjectFlags & OF_EuthanizeMe) @@ -406,73 +350,92 @@ void E_WorldThingDestroyed(AActor* actor) // this is because Destroyed should be reverse of Spawned. we don't want to catch random inventory give failures. if (!(actor->ObjectFlags & OF_Spawned)) return; - for (DStaticEventHandler* handler = E_LastEventHandler; handler; handler = handler->prev) + + for (DStaticEventHandler* handler = LastEventHandler; handler; handler = handler->prev) handler->WorldThingDestroyed(actor); + + if (ShouldCallStatic(true)) staticEventManager.WorldThingDestroyed(actor); } -void E_WorldLinePreActivated(line_t* line, AActor* actor, int activationType, bool* shouldactivate) +void EventManager::WorldLinePreActivated(line_t* line, AActor* actor, int activationType, bool* shouldactivate) { - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + if (ShouldCallStatic(true)) staticEventManager.WorldLinePreActivated(line, actor, activationType, shouldactivate); + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) handler->WorldLinePreActivated(line, actor, activationType, shouldactivate); } -void E_WorldLineActivated(line_t* line, AActor* actor, int activationType) +void EventManager::WorldLineActivated(line_t* line, AActor* actor, int activationType) { - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + if (ShouldCallStatic(true)) staticEventManager.WorldLineActivated(line, actor, activationType); + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) handler->WorldLineActivated(line, actor, activationType); } -int E_WorldSectorDamaged(sector_t* sector, AActor* source, int damage, FName damagetype, int part, DVector3 position, bool isradius) +int EventManager::WorldSectorDamaged(sector_t* sector, AActor* source, int damage, FName damagetype, int part, DVector3 position, bool isradius) { - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + if (ShouldCallStatic(true)) staticEventManager.WorldSectorDamaged(sector, source, damage, damagetype, part, position, isradius); + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) damage = handler->WorldSectorDamaged(sector, source, damage, damagetype, part, position, isradius); return damage; } -int E_WorldLineDamaged(line_t* line, AActor* source, int damage, FName damagetype, int side, DVector3 position, bool isradius) +int EventManager::WorldLineDamaged(line_t* line, AActor* source, int damage, FName damagetype, int side, DVector3 position, bool isradius) { - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + if (ShouldCallStatic(true)) staticEventManager.WorldLineDamaged(line, source, damage, damagetype, side, position, isradius); + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) damage = handler->WorldLineDamaged(line, source, damage, damagetype, side, position, isradius); return damage; } -void E_PlayerEntered(int num, bool fromhub) +void EventManager::PlayerEntered(int num, bool fromhub) { // this event can happen during savegamerestore. make sure that local handlers don't receive it. // actually, global handlers don't want it too. if (savegamerestore && !fromhub) return; - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + if (ShouldCallStatic(true)) staticEventManager.PlayerEntered(num, fromhub); + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) handler->PlayerEntered(num, fromhub); } -void E_PlayerRespawned(int num) +void EventManager::PlayerRespawned(int num) { - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + if (ShouldCallStatic(true)) staticEventManager.PlayerRespawned(num); + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) handler->PlayerRespawned(num); } -void E_PlayerDied(int num) +void EventManager::PlayerDied(int num) { - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + if (ShouldCallStatic(true)) staticEventManager.PlayerDied(num); + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) handler->PlayerDied(num); } -void E_PlayerDisconnected(int num) +void EventManager::PlayerDisconnected(int num) { - for (DStaticEventHandler* handler = E_LastEventHandler; handler; handler = handler->prev) + for (DStaticEventHandler* handler = LastEventHandler; handler; handler = handler->prev) handler->PlayerDisconnected(num); + + if (ShouldCallStatic(true)) staticEventManager.PlayerDisconnected(num); } -bool E_Responder(const event_t* ev) +bool EventManager::Responder(const event_t* ev) { bool uiProcessorsFound = false; if (ev->type == EV_GUI_Event) { // iterate handlers back to front by order, and give them this event. - for (DStaticEventHandler* handler = E_LastEventHandler; handler; handler = handler->prev) + for (DStaticEventHandler* handler = LastEventHandler; handler; handler = handler->prev) { if (handler->IsUiProcessor) { @@ -485,7 +448,7 @@ bool E_Responder(const event_t* ev) else { // not sure if we want to handle device changes, but whatevs. - for (DStaticEventHandler* handler = E_LastEventHandler; handler; handler = handler->prev) + for (DStaticEventHandler* handler = LastEventHandler; handler; handler = handler->prev) { if (handler->IsUiProcessor) uiProcessorsFound = true; @@ -493,77 +456,92 @@ bool E_Responder(const event_t* ev) return true; // event was processed } } + if (ShouldCallStatic(false)) uiProcessorsFound = staticEventManager.Responder(ev); return (uiProcessorsFound && (ev->type == EV_Mouse)); // mouse events are eaten by the event system if there are any uiprocessors. } -void E_Console(int player, FString name, int arg1, int arg2, int arg3, bool manual) +void EventManager::Console(int player, FString name, int arg1, int arg2, int arg3, bool manual) { - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + if (ShouldCallStatic(false)) staticEventManager.Console(player, name, arg1, arg2, arg3, manual); + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) handler->ConsoleProcess(player, name, arg1, arg2, arg3, manual); } -void E_RenderOverlay(EHudState state) +void EventManager::RenderOverlay(EHudState state) { - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + if (ShouldCallStatic(false)) staticEventManager.RenderOverlay(state); + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) handler->RenderOverlay(state); } -bool E_CheckUiProcessors() +bool EventManager::CheckUiProcessors() { - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + if (ShouldCallStatic(false)) + { + if (staticEventManager.CheckUiProcessors()) return true; + } + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) if (handler->IsUiProcessor) return true; return false; } -bool E_CheckRequireMouse() +bool EventManager::CheckRequireMouse() { - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + if (ShouldCallStatic(false)) + { + if (staticEventManager.CheckRequireMouse()) return true; + } + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) if (handler->IsUiProcessor && handler->RequireMouse) return true; return false; } -bool E_CheckReplacement( PClassActor *replacee, PClassActor **replacement ) +bool EventManager::CheckReplacement( PClassActor *replacee, PClassActor **replacement ) { bool final = false; - for (DStaticEventHandler *handler = E_FirstEventHandler; handler; handler = handler->next) + + // This is play scope but unlike in-game events needs to be handled like UI by static handlers. + if (ShouldCallStatic(false)) final = staticEventManager.CheckReplacement(replacee, replacement); + + for (DStaticEventHandler *handler = FirstEventHandler; handler; handler = handler->next) handler->CheckReplacement(replacee,replacement,&final); return final; } -bool E_CheckReplacee(PClassActor **replacee, PClassActor *replacement) +bool EventManager::CheckReplacee(PClassActor **replacee, PClassActor *replacement) { bool final = false; - for (DStaticEventHandler *handler = E_FirstEventHandler; handler; handler = handler->next) + if (ShouldCallStatic(false)) final = staticEventManager.CheckReplacee(replacee, replacement); + + for (DStaticEventHandler *handler = FirstEventHandler; handler; handler = handler->next) handler->CheckReplacee(replacee, replacement, &final); return final; } -void E_NewGame(EventHandlerType handlerType) +void EventManager::NewGame() { - bool isStatic = handlerType == EventHandlerType::Global; - - // Shut down all per-map event handlers before static NewGame events. - if (isStatic) - E_Shutdown(true); - - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + //This is called separately for static and local handlers, so no forwarding here. + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) { - if (handler->IsStatic() == isStatic) - handler->NewGame(); + handler->NewGame(); } } // normal event loopers (non-special, argument-less) -DEFINE_EVENT_LOOPER(RenderFrame) -DEFINE_EVENT_LOOPER(WorldLightning) -DEFINE_EVENT_LOOPER(WorldTick) -DEFINE_EVENT_LOOPER(UiTick) -DEFINE_EVENT_LOOPER(PostUiTick) +DEFINE_EVENT_LOOPER(RenderFrame, false) +DEFINE_EVENT_LOOPER(WorldLightning, true) +DEFINE_EVENT_LOOPER(WorldTick, true) +DEFINE_EVENT_LOOPER(UiTick, false) +DEFINE_EVENT_LOOPER(PostUiTick, false) // declarations IMPLEMENT_CLASS(DStaticEventHandler, false, true); @@ -643,8 +621,10 @@ DEFINE_ACTION_FUNCTION(DStaticEventHandler, SetOrder) PARAM_SELF_PROLOGUE(DStaticEventHandler); PARAM_INT(order); - if (E_CheckHandler(self)) + /* not really needed - this is never checked again. To re-add, the handlers need a pointer to their manager but that's not worth it just for this check. + if (eventManager.CheckHandler(self)) return 0; + */ self->Order = order; return 0; @@ -659,14 +639,14 @@ DEFINE_ACTION_FUNCTION(DEventHandler, SendNetworkEvent) PARAM_INT(arg3); // - ACTION_RETURN_BOOL(E_SendNetworkEvent(name, arg1, arg2, arg3, false)); + ACTION_RETURN_BOOL(currentVMLevel->localEventManager->SendNetworkEvent(name, arg1, arg2, arg3, false)); } DEFINE_ACTION_FUNCTION(DEventHandler, Find) { PARAM_PROLOGUE; PARAM_CLASS(t, DStaticEventHandler); - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + for (DStaticEventHandler* handler = currentVMLevel->localEventManager->FirstEventHandler; handler; handler = handler->next) if (handler->GetClass() == t) // check precise class ACTION_RETURN_OBJECT(handler); ACTION_RETURN_OBJECT(nullptr); @@ -677,7 +657,7 @@ DEFINE_ACTION_FUNCTION(DStaticEventHandler, Find) { PARAM_PROLOGUE; PARAM_CLASS(t, DStaticEventHandler); - for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next) + for (DStaticEventHandler* handler = staticEventManager.FirstEventHandler; handler; handler = handler->next) if (handler->GetClass() == t) // check precise class ACTION_RETURN_OBJECT(handler); ACTION_RETURN_OBJECT(nullptr); @@ -725,11 +705,11 @@ void DStaticEventHandler::OnUnregister() } } -static FWorldEvent E_SetupWorldEvent() +FWorldEvent EventManager::SetupWorldEvent() { FWorldEvent e; e.IsSaveGame = savegamerestore; - e.IsReopen = level.FromSnapshot && !savegamerestore; // each one by itself isnt helpful, but with hub load we have savegamerestore==0 and level.FromSnapshot==1. + e.IsReopen = Level->FromSnapshot && !savegamerestore; // each one by itself isnt helpful, but with hub load we have savegamerestore==0 and level.FromSnapshot==1. e.DamageAngle = 0.0; return e; } @@ -740,7 +720,7 @@ void DStaticEventHandler::WorldLoaded() { // don't create excessive DObjects if not going to be processed anyway if (isEmpty(func)) return; - FWorldEvent e = E_SetupWorldEvent(); + FWorldEvent e = owner->SetupWorldEvent(); VMValue params[2] = { (DStaticEventHandler*)this, &e }; VMCall(func, params, 2, nullptr, 0); } @@ -752,7 +732,7 @@ void DStaticEventHandler::WorldUnloaded() { // don't create excessive DObjects if not going to be processed anyway if (isEmpty(func)) return; - FWorldEvent e = E_SetupWorldEvent(); + FWorldEvent e = owner->SetupWorldEvent(); VMValue params[2] = { (DStaticEventHandler*)this, &e }; VMCall(func, params, 2, nullptr, 0); } @@ -764,7 +744,7 @@ void DStaticEventHandler::WorldThingSpawned(AActor* actor) { // don't create excessive DObjects if not going to be processed anyway if (isEmpty(func)) return; - FWorldEvent e = E_SetupWorldEvent(); + FWorldEvent e = owner->SetupWorldEvent(); e.Thing = actor; VMValue params[2] = { (DStaticEventHandler*)this, &e }; VMCall(func, params, 2, nullptr, 0); @@ -777,7 +757,7 @@ void DStaticEventHandler::WorldThingDied(AActor* actor, AActor* inflictor) { // don't create excessive DObjects if not going to be processed anyway if (isEmpty(func)) return; - FWorldEvent e = E_SetupWorldEvent(); + FWorldEvent e = owner->SetupWorldEvent(); e.Thing = actor; e.Inflictor = inflictor; VMValue params[2] = { (DStaticEventHandler*)this, &e }; @@ -791,7 +771,7 @@ void DStaticEventHandler::WorldThingRevived(AActor* actor) { // don't create excessive DObjects if not going to be processed anyway if (isEmpty(func)) return; - FWorldEvent e = E_SetupWorldEvent(); + FWorldEvent e = owner->SetupWorldEvent(); e.Thing = actor; VMValue params[2] = { (DStaticEventHandler*)this, &e }; VMCall(func, params, 2, nullptr, 0); @@ -804,7 +784,7 @@ void DStaticEventHandler::WorldThingDamaged(AActor* actor, AActor* inflictor, AA { // don't create excessive DObjects if not going to be processed anyway if (isEmpty(func)) return; - FWorldEvent e = E_SetupWorldEvent(); + FWorldEvent e = owner->SetupWorldEvent(); e.Thing = actor; e.Inflictor = inflictor; e.Damage = damage; @@ -823,7 +803,7 @@ void DStaticEventHandler::WorldThingDestroyed(AActor* actor) { // don't create excessive DObjects if not going to be processed anyway if (isEmpty(func)) return; - FWorldEvent e = E_SetupWorldEvent(); + FWorldEvent e = owner->SetupWorldEvent(); e.Thing = actor; VMValue params[2] = { (DStaticEventHandler*)this, &e }; VMCall(func, params, 2, nullptr, 0); @@ -836,7 +816,7 @@ void DStaticEventHandler::WorldLinePreActivated(line_t* line, AActor* actor, int { // don't create excessive DObjects if not going to be processed anyway if (isEmpty(func)) return; - FWorldEvent e = E_SetupWorldEvent(); + FWorldEvent e = owner->SetupWorldEvent(); e.Thing = actor; e.ActivatedLine = line; e.ActivationType = activationType; @@ -853,7 +833,7 @@ void DStaticEventHandler::WorldLineActivated(line_t* line, AActor* actor, int ac { // don't create excessive DObjects if not going to be processed anyway if (isEmpty(func)) return; - FWorldEvent e = E_SetupWorldEvent(); + FWorldEvent e = owner->SetupWorldEvent(); e.Thing = actor; e.ActivatedLine = line; e.ActivationType = activationType; @@ -868,7 +848,7 @@ int DStaticEventHandler::WorldSectorDamaged(sector_t* sector, AActor* source, in { // don't create excessive DObjects if not going to be processed anyway if (isEmpty(func)) return damage; - FWorldEvent e = E_SetupWorldEvent(); + FWorldEvent e = owner->SetupWorldEvent(); e.DamageSource = source; e.DamageSector = sector; e.NewDamage = e.Damage = damage; @@ -891,7 +871,7 @@ int DStaticEventHandler::WorldLineDamaged(line_t* line, AActor* source, int dama { // don't create excessive DObjects if not going to be processed anyway if (isEmpty(func)) return damage; - FWorldEvent e = E_SetupWorldEvent(); + FWorldEvent e = owner->SetupWorldEvent(); e.DamageSource = source; e.DamageLine = line; e.NewDamage = e.Damage = damage; @@ -914,7 +894,7 @@ void DStaticEventHandler::WorldLightning() { // don't create excessive DObjects if not going to be processed anyway if (isEmpty(func)) return; - FWorldEvent e = E_SetupWorldEvent(); + FWorldEvent e = owner->SetupWorldEvent(); VMValue params[2] = { (DStaticEventHandler*)this, &e }; VMCall(func, params, 2, nullptr, 0); } @@ -931,7 +911,7 @@ void DStaticEventHandler::WorldTick() } } -static FRenderEvent E_SetupRenderEvent() +FRenderEvent EventManager::SetupRenderEvent() { FRenderEvent e; auto &vp = r_viewpoint; @@ -951,7 +931,7 @@ void DStaticEventHandler::RenderFrame() { // don't create excessive DObjects if not going to be processed anyway if (isEmpty(func)) return; - FRenderEvent e = E_SetupRenderEvent(); + FRenderEvent e = owner->SetupRenderEvent; VMValue params[2] = { (DStaticEventHandler*)this, &e }; VMCall(func, params, 2, nullptr, 0); } @@ -964,7 +944,7 @@ void DStaticEventHandler::RenderOverlay(EHudState state) { // don't create excessive DObjects if not going to be processed anyway if (isEmpty(func)) return; - FRenderEvent e = E_SetupRenderEvent(); + FRenderEvent e = owner->SetupRenderEvent(); e.HudState = int(state); VMValue params[2] = { (DStaticEventHandler*)this, &e }; VMCall(func, params, 2, nullptr, 0); @@ -1189,7 +1169,7 @@ void DStaticEventHandler::ConsoleProcess(int player, FString name, int arg1, int } } -void DStaticEventHandler::CheckReplacement( PClassActor *replacee, PClassActor **replacement, bool *final ) +void DStaticEventHandler::CheckReplacement(PClassActor *replacee, PClassActor **replacement, bool *final ) { IFVIRTUAL(DStaticEventHandler, CheckReplacement) { @@ -1233,7 +1213,7 @@ void DStaticEventHandler::NewGame() // void DStaticEventHandler::OnDestroy() { - E_UnregisterHandler(this); + eventManager.UnregisterHandler(this); Super::OnDestroy(); } @@ -1254,7 +1234,7 @@ CCMD(event) for (int i = 0; i < argn; i++) arg[i] = atoi(argv[2 + i]); // call locally - E_Console(-1, argv[1], arg[0], arg[1], arg[2], true); + primaryLevel->localEventManager->Console(-1, argv[1], arg[0], arg[1], arg[2], true); } } @@ -1279,6 +1259,6 @@ CCMD(netevent) for (int i = 0; i < argn; i++) arg[i] = atoi(argv[2 + i]); // call networked - E_SendNetworkEvent(argv[1], arg[0], arg[1], arg[2], true); + primaryLevel->localEventManager->SendNetworkEvent(argv[1], arg[0], arg[1], arg[2], true); } } diff --git a/src/events.h b/src/events.h index dbd408a425..b207f924bf 100755 --- a/src/events.h +++ b/src/events.h @@ -1,5 +1,4 @@ -#ifndef EVENTS_H -#define EVENTS_H +#pragma once #include "dobject.h" #include "serializer.h" @@ -8,6 +7,7 @@ #include "sbar.h" class DStaticEventHandler; +struct EventManager; enum class EventHandlerType { @@ -15,89 +15,6 @@ enum class EventHandlerType PerMap }; -// register -bool E_RegisterHandler(DStaticEventHandler* handler); -// unregister -bool E_UnregisterHandler(DStaticEventHandler* handler); -// find -bool E_CheckHandler(DStaticEventHandler* handler); -// check type -bool E_IsStaticType(PClass* type); -// init static handlers -void E_InitStaticHandlers(bool map); -// shutdown handlers -void E_Shutdown(bool map); - -// called right after the map has loaded (approximately same time as OPEN ACS scripts) -void E_WorldLoaded(); -// called when the map is about to unload (approximately same time as UNLOADING ACS scripts) -void E_WorldUnloaded(); -// called right after the map has loaded (every time, UNSAFE VERSION) -void E_WorldLoadedUnsafe(); -// called right before the map is unloaded (every time, UNSAFE VERSION) -void E_WorldUnloadedUnsafe(); -// called around PostBeginPlay of each actor. -void E_WorldThingSpawned(AActor* actor); -// called after AActor::Die of each actor. -void E_WorldThingDied(AActor* actor, AActor* inflictor); -// called after AActor::Revive. -void E_WorldThingRevived(AActor* actor); -// called before P_DamageMobj and before AActor::DamageMobj virtuals. -void E_WorldThingDamaged(AActor* actor, AActor* inflictor, AActor* source, int damage, FName mod, int flags, DAngle angle); -// called before AActor::Destroy of each actor. -void E_WorldThingDestroyed(AActor* actor); -// called in P_ActivateLine before executing special, set shouldactivate to false to prevent activation. -void E_WorldLinePreActivated(line_t* line, AActor* actor, int activationType, bool* shouldactivate); -// called in P_ActivateLine after successful special execution. -void E_WorldLineActivated(line_t* line, AActor* actor, int activationType); -// called in P_DamageSector and P_DamageLinedef before receiving damage to the sector. returns actual damage -int E_WorldSectorDamaged(sector_t* sector, AActor* source, int damage, FName damagetype, int part, DVector3 position, bool isradius); -// called in P_DamageLinedef before receiving damage to the linedef. returns actual damage -int E_WorldLineDamaged(line_t* line, AActor* source, int damage, FName damagetype, int side, DVector3 position, bool isradius); -// same as ACS SCRIPT_Lightning -void E_WorldLightning(); -// this executes on every tick, before everything, only when in valid level and not paused -void E_WorldTick(); -// this executes on every tick on UI side, always -void E_UiTick(); -// this executes on every tick on UI side, always AND immediately after everything else -void E_PostUiTick(); -// called on each render frame once. -void E_RenderFrame(); -// called after everything's been rendered, but before console/menus -void E_RenderOverlay(EHudState state); -// this executes when a player enters the level (once). PlayerEnter+inhub = RETURN -void E_PlayerEntered(int num, bool fromhub); -// this executes when a player respawns. includes resurrect cheat. -void E_PlayerRespawned(int num); -// this executes when a player dies (partially duplicating worldthingdied, but whatever) -void E_PlayerDied(int num); -// this executes when a player leaves the game -void E_PlayerDisconnected(int num); -// this executes on events. -bool E_Responder(const event_t* ev); // splits events into InputProcess and UiProcess -// this executes on console/net events. -void E_Console(int player, FString name, int arg1, int arg2, int arg3, bool manual); - -// called when looking up the replacement for an actor class -bool E_CheckReplacement(PClassActor* replacee, PClassActor** replacement); -// called when looking up the replaced for an actor class -bool E_CheckReplacee(PClassActor** replacee, PClassActor* replacement); - -// called on new game -void E_NewGame(EventHandlerType handlerType); - -// send networked event. unified function. -bool E_SendNetworkEvent(FString name, int arg1, int arg2, int arg3, bool manual); - -// check if there is anything that should receive GUI events -bool E_CheckUiProcessors(); -// check if we need native mouse due to UiProcessors -bool E_CheckRequireMouse(); - -// serialization stuff -void E_SerializeEvents(FSerializer& arc); - // ============================================== // // EventHandler - base class @@ -117,6 +34,7 @@ public: IsUiProcessor = false; } + EventManager *owner; DStaticEventHandler* prev; DStaticEventHandler* next; virtual bool IsStatic() { return true; } @@ -141,6 +59,8 @@ public: } */ + arc("next", next); + arc("prev", prev); arc("Order", Order); arc("IsUiProcessor", IsUiProcessor); arc("RequireMouse", RequireMouse); @@ -200,8 +120,6 @@ class DEventHandler : public DStaticEventHandler public: bool IsStatic() override { return false; } }; -extern DStaticEventHandler* E_FirstEventHandler; -extern DStaticEventHandler* E_LastEventHandler; struct FRenderEvent { @@ -311,4 +229,106 @@ struct FReplacedEvent bool IsFinal; }; -#endif +struct EventManager +{ + FLevelLocals *Level = nullptr; + DStaticEventHandler* FirstEventHandler = nullptr; + DStaticEventHandler* LastEventHandler = nullptr; + + EventManager() = default; + EventManager(FLevelLocals *l) { Level = l; } + ~EventManager() { Shutdown(); } + bool ShouldCallStatic(bool forplay); + + // register + bool RegisterHandler(DStaticEventHandler* handler); + // unregister + bool UnregisterHandler(DStaticEventHandler* handler); + // find + bool CheckHandler(DStaticEventHandler* handler); + // check type + bool IsStaticType(PClass* type); + // init static handlers + void InitStaticHandlers(bool map); + // shutdown handlers + void Shutdown(); + + // called right after the map has loaded (approximately same time as OPEN ACS scripts) + void WorldLoaded(); + // called when the map is about to unload (approximately same time as UNLOADING ACS scripts) + void WorldUnloaded(); + // called around PostBeginPlay of each actor. + void WorldThingSpawned(AActor* actor); + // called after AActor::Die of each actor. + void WorldThingDied(AActor* actor, AActor* inflictor); + // called after AActor::Revive. + void WorldThingRevived(AActor* actor); + // called before P_DamageMobj and before AActor::DamageMobj virtuals. + void WorldThingDamaged(AActor* actor, AActor* inflictor, AActor* source, int damage, FName mod, int flags, DAngle angle); + // called before AActor::Destroy of each actor. + void WorldThingDestroyed(AActor* actor); + // called in P_ActivateLine before executing special, set shouldactivate to false to prevent activation. + void WorldLinePreActivated(line_t* line, AActor* actor, int activationType, bool* shouldactivate); + // called in P_ActivateLine after successful special execution. + void WorldLineActivated(line_t* line, AActor* actor, int activationType); + // called in P_DamageSector and P_DamageLinedef before receiving damage to the sector. returns actual damage + int WorldSectorDamaged(sector_t* sector, AActor* source, int damage, FName damagetype, int part, DVector3 position, bool isradius); + // called in P_DamageLinedef before receiving damage to the linedef. returns actual damage + int WorldLineDamaged(line_t* line, AActor* source, int damage, FName damagetype, int side, DVector3 position, bool isradius); + // same as ACS SCRIPT_Lightning + void WorldLightning(); + // this executes on every tick, before everything, only when in valid level and not paused + void WorldTick(); + // this executes on every tick on UI side, always + void UiTick(); + // this executes on every tick on UI side, always AND immediately after everything else + void PostUiTick(); + // called on each render frame once. + void RenderFrame(); + // called after everything's been rendered, but before console/menus + void RenderOverlay(EHudState state); + // this executes when a player enters the level (once). PlayerEnter+inhub = RETURN + void PlayerEntered(int num, bool fromhub); + // this executes when a player respawns. includes resurrect cheat. + void PlayerRespawned(int num); + // this executes when a player dies (partially duplicating worldthingdied, but whatever) + void PlayerDied(int num); + // this executes when a player leaves the game + void PlayerDisconnected(int num); + // this executes on events. + bool Responder(const event_t* ev); // splits events into InputProcess and UiProcess + // this executes on console/net events. + void Console(int player, FString name, int arg1, int arg2, int arg3, bool manual); + + // called when looking up the replacement for an actor class + bool CheckReplacement(PClassActor* replacee, PClassActor** replacement); + // called when looking up the replaced for an actor class + bool CheckReplacee(PClassActor** replacee, PClassActor* replacement); + + // called on new game + void NewGame(); + + // send networked event. unified function. + bool SendNetworkEvent(FString name, int arg1, int arg2, int arg3, bool manual); + + // check if there is anything that should receive GUI events + bool CheckUiProcessors(); + // check if we need native mouse due to UiProcessors + bool CheckRequireMouse(); + + void InitHandler(PClass* type); + FWorldEvent SetupWorldEvent(); + FRenderEvent SetupRenderEvent(); + + void SetOwnerForHandlers() + { + for (DStaticEventHandler* existinghandler = FirstEventHandler; existinghandler; existinghandler = existinghandler->next) + { + existinghandler->owner = this; + } + } + +}; + +extern EventManager eventManager; +extern EventManager staticEventManager; diff --git a/src/fragglescript/t_cmd.cpp b/src/fragglescript/t_cmd.cpp index f3673c2776..905c47c992 100644 --- a/src/fragglescript/t_cmd.cpp +++ b/src/fragglescript/t_cmd.cpp @@ -77,7 +77,7 @@ static void FS_Gimme(const char * what) // //========================================================================== -void FS_MapCmd(FScanner &sc) +void FS_MapCmd(FLevelLocals *Level, FScanner &sc) { char nextmap[9]; int NextSkill = -1; @@ -108,7 +108,7 @@ void FS_MapCmd(FScanner &sc) flags &= ~(CHANGELEVEL_RESETINVENTORY|CHANGELEVEL_RESETHEALTH); } } - G_ChangeLevel(nextmap, 0, flags, NextSkill); + Level->ChangeLevel(nextmap, 0, flags, NextSkill); } //========================================================================== @@ -154,12 +154,12 @@ void FS_EmulateCmd(FLevelLocals *Level, char * string) { sc.MustGetFloat(); double playerviewheight = sc.Float; - for(int i=0;iPlayers) { // No, this is not correct. But this is the way Legacy WADs expect it to be handled! - if (players[i].mo != NULL) players[i].mo->FloatVar(NAME_ViewHeight) = playerviewheight; - players[i].viewheight = playerviewheight; - players[i].Uncrouch(); + if (p->mo != nullptr) p->mo->FloatVar(NAME_ViewHeight) = playerviewheight; + p->viewheight = playerviewheight; + p->Uncrouch(); } while (sc.GetString()) { @@ -168,7 +168,7 @@ void FS_EmulateCmd(FLevelLocals *Level, char * string) } else if (sc.Compare("map")) { - FS_MapCmd(sc); + FS_MapCmd(Level, sc); } else if (sc.Compare("gr_fogdensity")) { diff --git a/src/fragglescript/t_func.cpp b/src/fragglescript/t_func.cpp index d5b6592c25..9efabd6b19 100644 --- a/src/fragglescript/t_func.cpp +++ b/src/fragglescript/t_func.cpp @@ -50,6 +50,7 @@ #include "actorinlines.h" #include "scriptutil.h" #include "vm.h" +#include "a_lights.h" static FRandom pr_script("FScript"); @@ -269,7 +270,7 @@ int FParser::T_GetPlayerNum(const svalue_t &arg) //script_error("mobj not a player!\n"); return -1; } - playernum = int(arg.value.mobj->player - players); + playernum = Level->PlayerNum(arg.value.mobj->player); } else playernum = intvalue(arg); @@ -278,7 +279,7 @@ int FParser::T_GetPlayerNum(const svalue_t &arg) { return -1; } - if(!playeringame[playernum]) // no error, just return -1 + if(!Level->PlayerInGame(playernum)) // no error, just return -1 { return -1; } @@ -288,7 +289,7 @@ int FParser::T_GetPlayerNum(const svalue_t &arg) AActor *FParser::T_GetPlayerActor(const svalue_t &arg) { int num = T_GetPlayerNum(arg); - return num == -1 ? nullptr : players[num].mo; + return num == -1 ? nullptr : Level->Players[num]->mo; } PClassActor *T_ClassType(const svalue_t &arg) @@ -296,33 +297,6 @@ PClassActor *T_ClassType(const svalue_t &arg) return PClass::FindActor(stringvalue(arg)); } -//========================================================================== -// -// Finds a sector from a tag. This has been extended to allow looking for -// sectors directly by passing a negative value -// -//========================================================================== -class FSSectorTagIterator : public FSectorTagIterator -{ -public: - FSSectorTagIterator(int tag) - : FSectorTagIterator(tag) - { - if (tag < 0) - { - searchtag = INT_MIN; - start = tag == -32768? 0 : -tag < (int)level.sectors.Size()? -tag : -1; - } - } -}; - -inline int T_FindFirstSectorFromTag(int tagnum) -{ - FSSectorTagIterator it(tagnum); - return it.Next(); -} - - //========================================================================== // // Get an ammo type @@ -587,7 +561,7 @@ void FParser::SF_Include(void) else mysnprintf(tempstr, countof(tempstr), "%i", (int)t_argv[0].value.i); - Script->ParseInclude(tempstr); + Script->ParseInclude(Level, tempstr); } } @@ -635,7 +609,7 @@ void FParser::SF_Clock(void) void FParser::SF_ExitLevel(void) { - G_ExitLevel(0, false); + Level->ExitLevel(0, false); } //========================================================================== @@ -647,7 +621,7 @@ void FParser::SF_ExitLevel(void) void FParser::SF_Tip(void) { if (t_argc>0 && Script->trigger && - Script->trigger->CheckLocalView(consoleplayer)) + Script->trigger->CheckLocalView()) { C_MidPrint(SmallFont, GetFormatString(0).GetChars()); } @@ -686,7 +660,7 @@ void FParser::SF_PlayerTip(void) if (CheckArgs(1)) { int plnum = T_GetPlayerNum(t_argv[0]); - if (plnum!=-1 && players[plnum].mo->CheckLocalView(consoleplayer)) + if (plnum!=-1 && Level->Players[plnum]->mo->CheckLocalView()) { C_MidPrint(SmallFont, GetFormatString(1).GetChars()); } @@ -702,7 +676,7 @@ void FParser::SF_PlayerTip(void) void FParser::SF_Message(void) { if (t_argc>0 && Script->trigger && - Script->trigger->CheckLocalView(consoleplayer)) + Script->trigger->CheckLocalView()) { Printf(PRINT_HIGH, "%s\n", GetFormatString(0).GetChars()); } @@ -719,7 +693,7 @@ void FParser::SF_PlayerMsg(void) if (CheckArgs(1)) { int plnum = T_GetPlayerNum(t_argv[0]); - if (plnum!=-1 && players[plnum].mo->CheckLocalView(consoleplayer)) + if (plnum!=-1 && Level->Players[plnum]->mo->CheckLocalView()) { Printf(PRINT_HIGH, "%s\n", GetFormatString(1).GetChars()); } @@ -741,7 +715,7 @@ void FParser::SF_PlayerInGame(void) if (plnum!=-1) { t_return.type = svt_int; - t_return.value.i = playeringame[plnum]; + t_return.value.i = Level->PlayerInGame(plnum); } } } @@ -760,7 +734,7 @@ void FParser::SF_PlayerName(void) { player_t *pl=NULL; if (Script->trigger) pl = Script->trigger->player; - if(pl) plnum = int(pl - players); + if(pl) plnum = Level->PlayerNum(pl); else plnum=-1; } else @@ -769,7 +743,7 @@ void FParser::SF_PlayerName(void) if(plnum !=-1) { t_return.type = svt_string; - t_return.string = players[plnum].userinfo.GetName(); + t_return.string = Level->Players[plnum]->userinfo.GetName(); } else { @@ -791,7 +765,7 @@ void FParser::SF_PlayerObj(void) { player_t *pl=NULL; if (Script->trigger) pl = Script->trigger->player; - if(pl) plnum = int(pl - players); + if(pl) plnum = Level->PlayerNum(pl); else plnum=-1; } else @@ -800,7 +774,7 @@ void FParser::SF_PlayerObj(void) if(plnum !=-1) { t_return.type = svt_mobj; - t_return.value.mobj = players[plnum].mo; + t_return.value.mobj = Level->Players[plnum]->mo; } else { @@ -831,7 +805,7 @@ void FParser::SF_Player(void) if(mo && mo->player) // haleyjd: added mo->player { - t_return.value.i = (int)(mo->player - players); + t_return.value.i = Level->PlayerNum(mo->player); } else { @@ -866,7 +840,7 @@ void FParser::SF_Spawn(void) // [Graf Zahl] added option of spawning with a relative z coordinate if(t_argc > 5) { - if (intvalue(t_argv[5])) pos.Z += P_PointInSector(pos)->floorplane.ZatPoint(pos); + if (intvalue(t_argv[5])) pos.Z += Level->PointInSector(pos)->floorplane.ZatPoint(pos); } } else @@ -881,7 +855,7 @@ void FParser::SF_Spawn(void) } t_return.type = svt_mobj; - t_return.value.mobj = Spawn(pclass, pos, ALLOW_REPLACE); + t_return.value.mobj = Spawn(Level, pclass, pos, ALLOW_REPLACE); if (t_return.value.mobj) { @@ -1067,7 +1041,7 @@ void FParser::SF_Teleport(void) } if(mo) - EV_Teleport(0, tag, NULL, 0, mo, TELF_DESTFOG | TELF_SOURCEFOG); + Level->EV_Teleport(0, tag, NULL, 0, mo, TELF_DESTFOG | TELF_SOURCEFOG); } } @@ -1096,7 +1070,7 @@ void FParser::SF_SilentTeleport(void) } if(mo) - EV_Teleport(0, tag, NULL, 0, mo, TELF_KEEPORIENTATION); + Level->EV_Teleport(0, tag, NULL, 0, mo, TELF_KEEPORIENTATION); } } @@ -1150,7 +1124,7 @@ void FParser::SF_ObjSector(void) } t_return.type = svt_int; - t_return.value.i = mo ? tagManager.GetFirstSectorTag(mo->Sector) : 0; // nullptr check + t_return.value.i = mo ? Level->GetFirstSectorTag(mo->Sector) : 0; // nullptr check } //========================================================================== @@ -1429,8 +1403,8 @@ void FParser::SF_SetCamera(void) if (CheckArgs(1)) { - player=Script->trigger->player; - if (!player) player=&players[0]; + player = Script->trigger->player; + if (!player) player = Level->Players[0]; newcamera = actorvalue(t_argv[0]); if(!newcamera) @@ -1449,7 +1423,7 @@ void FParser::SF_SetCamera(void) if (t_argc < 4) newcamera->Angles.Pitch = 0.; else newcamera->Angles.Pitch = clamp(floatvalue(t_argv[3]), -50., 50.) * (20. / 32.); player->camera=newcamera; - R_ResetViewInterpolation(); + newcamera->renderflags |= RF_NOINTERPOLATEVIEW; } } @@ -1462,8 +1436,8 @@ void FParser::SF_SetCamera(void) void FParser::SF_ClearCamera(void) { player_t * player; - player=Script->trigger->player; - if (!player) player=&players[0]; + player = Script->trigger->player; + if (!player) player = Level->Players[0]; AActor * cam=player->camera; if (cam) @@ -1518,7 +1492,7 @@ void FParser::SF_StartSectorSound(void) tagnum = intvalue(t_argv[0]); int i=-1; - FSSectorTagIterator itr(tagnum); + auto itr = Level->GetSectorTagIterator(tagnum); while ((i = itr.Next()) >= 0) { sector = &Level->sectors[i]; @@ -1555,7 +1529,7 @@ void FParser::SF_FloorHeight(void) // set all sectors with tag - FSSectorTagIterator itr(tagnum); + auto itr = Level->GetSectorTagIterator(tagnum); while ((i = itr.Next()) >= 0) { auto &sec = Level->sectors[i]; @@ -1574,7 +1548,7 @@ void FParser::SF_FloorHeight(void) } else { - secnum = T_FindFirstSectorFromTag(tagnum); + secnum = Level->FindFirstSectorFromTag(tagnum); if(secnum < 0) { script_error("sector not found with tagnum %i\n", tagnum); @@ -1610,10 +1584,10 @@ void FParser::SF_MoveFloor(void) // move all sectors with tag - FSSectorTagIterator itr(tagnum); + auto itr = Level->GetSectorTagIterator(tagnum); while ((secnum = itr.Next()) >= 0) { - P_CreateFloor(&Level->sectors[secnum], DFloor::floorMoveToValue, NULL, platspeed, destheight, crush, 0, false, false); + Level->CreateFloor(&Level->sectors[secnum], DFloor::floorMoveToValue, NULL, platspeed, destheight, crush, 0, false, false); } } } @@ -1645,7 +1619,7 @@ void FParser::SF_CeilingHeight(void) dest = floatvalue(t_argv[1]); // set all sectors with tag - FSSectorTagIterator itr(tagnum); + auto itr = Level->GetSectorTagIterator(tagnum); while ((i = itr.Next()) >= 0) { auto &sec = Level->sectors[i]; @@ -1664,7 +1638,7 @@ void FParser::SF_CeilingHeight(void) } else { - secnum = T_FindFirstSectorFromTag(tagnum); + secnum = Level->FindFirstSectorFromTag(tagnum); if(secnum < 0) { script_error("sector not found with tagnum %i\n", tagnum); @@ -1702,10 +1676,10 @@ void FParser::SF_MoveCeiling(void) silent=t_argc>4 ? intvalue(t_argv[4]):1; // move all sectors with tag - FSSectorTagIterator itr(tagnum); + auto itr = Level->GetSectorTagIterator(tagnum); while ((secnum = itr.Next()) >= 0) { - P_CreateCeiling(&Level->sectors[secnum], DCeiling::ceilMoveToValue, NULL, tagnum, platspeed, platspeed, destheight, crush, silent | 4, 0, DCeiling::ECrushMode::crushDoom); + Level->CreateCeiling(&Level->sectors[secnum], DCeiling::ceilMoveToValue, NULL, tagnum, platspeed, platspeed, destheight, crush, silent | 4, 0, DCeiling::ECrushMode::crushDoom); } } } @@ -1727,7 +1701,7 @@ void FParser::SF_LightLevel(void) tagnum = intvalue(t_argv[0]); // argv is sector tag - secnum = T_FindFirstSectorFromTag(tagnum); + secnum = Level->FindFirstSectorFromTag(tagnum); if(secnum < 0) { @@ -1741,7 +1715,7 @@ void FParser::SF_LightLevel(void) int i = -1; // set all sectors with tag - FSSectorTagIterator itr(tagnum); + auto itr = Level->GetSectorTagIterator(tagnum); while ((i = itr.Next()) >= 0) { Level->sectors[i].SetLightLevel(intvalue(t_argv[1])); @@ -1768,11 +1742,9 @@ class DLightLevel : public DLighting unsigned char destlevel; unsigned char speed; - DLightLevel() = default; - public: - DLightLevel(sector_t * s,int destlevel,int speed); + void Construct(sector_t * s,int destlevel,int speed); void Serialize(FSerializer &arc); void Tick (); void OnDestroy() { Super::OnDestroy(); m_Sector->lightingdata = nullptr; } @@ -1833,8 +1805,9 @@ void DLightLevel::Tick() //========================================================================== // //========================================================================== -DLightLevel::DLightLevel(sector_t * s,int _destlevel,int _speed) : DLighting(s) +void DLightLevel::Construct(sector_t * s,int _destlevel,int _speed) { + Super::Construct(s); destlevel=_destlevel; speed=_speed; s->lightingdata=this; @@ -1859,10 +1832,10 @@ void FParser::SF_FadeLight(void) destlevel = intvalue(t_argv[1]); speed = t_argc>2 ? intvalue(t_argv[2]) : 1; - FSectorTagIterator it(sectag); + auto it = Level->GetSectorTagIterator(sectag); while ((i = it.Next()) >= 0) { - if (!Level->sectors[i].lightingdata) Create(&Level->sectors[i],destlevel,speed); + if (!Level->sectors[i].lightingdata) Level->CreateThinker(&Level->sectors[i],destlevel,speed); } } } @@ -1882,7 +1855,7 @@ void FParser::SF_FloorTexture(void) tagnum = intvalue(t_argv[0]); // argv is sector tag - secnum = T_FindFirstSectorFromTag(tagnum); + secnum = Level->FindFirstSectorFromTag(tagnum); if(secnum < 0) { script_error("sector not found with tagnum %i\n", tagnum); return;} @@ -1895,7 +1868,7 @@ void FParser::SF_FloorTexture(void) FTextureID picnum = TexMan.GetTextureID(t_argv[1].string, ETextureType::Flat, FTextureManager::TEXMAN_Overridable); // set all sectors with tag - FSSectorTagIterator itr(tagnum); + auto itr = Level->GetSectorTagIterator(tagnum); while ((i = itr.Next()) >= 0) { Level->sectors[i].SetTexture(sector_t::floor, picnum); @@ -1934,7 +1907,7 @@ void FParser::SF_SectorColormap(void) tagnum = intvalue(t_argv[0]); // argv is sector tag - secnum = T_FindFirstSectorFromTag(tagnum); + secnum = Level->FindFirstSectorFromTag(tagnum); if(secnum < 0) { script_error("sector not found with tagnum %i\n", tagnum); return;} @@ -1945,7 +1918,7 @@ void FParser::SF_SectorColormap(void) { uint32_t cm = R_ColormapNumForName(t_argv[1].value.s); - FSSectorTagIterator itr(tagnum); + auto itr = Level->GetSectorTagIterator(tagnum); while ((i = itr.Next()) >= 0) { sectors[i].midmap=cm; @@ -1972,7 +1945,7 @@ void FParser::SF_CeilingTexture(void) tagnum = intvalue(t_argv[0]); // argv is sector tag - secnum = T_FindFirstSectorFromTag(tagnum); + secnum = Level->FindFirstSectorFromTag(tagnum); if(secnum < 0) { script_error("sector not found with tagnum %i\n", tagnum); return;} @@ -1985,7 +1958,7 @@ void FParser::SF_CeilingTexture(void) FTextureID picnum = TexMan.GetTextureID(t_argv[1].string, ETextureType::Flat, FTextureManager::TEXMAN_Overridable); // set all sectors with tag - FSSectorTagIterator itr(tagnum); + auto itr = Level->GetSectorTagIterator(tagnum); while ((i = itr.Next()) >= 0) { Level->sectors[i].SetTexture(sector_t::ceiling, picnum); @@ -2042,7 +2015,7 @@ void FParser::SF_OpenDoor(void) if(t_argc > 2) speed = intvalue(t_argv[2]); else speed = 1; // 1= normal speed - EV_DoDoor(wait_time ? DDoor::doorRaise : DDoor::doorOpen, NULL, NULL, sectag, 2. * clamp(speed, 1, 127), wait_time, 0, 0); + Level->EV_DoDoor(wait_time ? DDoor::doorRaise : DDoor::doorOpen, NULL, NULL, sectag, 2. * clamp(speed, 1, 127), wait_time, 0, 0); } } @@ -2067,7 +2040,7 @@ void FParser::SF_CloseDoor(void) if(t_argc > 1) speed = intvalue(t_argv[1]); else speed = 1; // 1= normal speed - EV_DoDoor(DDoor::doorClose, NULL, NULL, sectag, 2.*clamp(speed, 1, 127), 0, 0, 0); + Level->EV_DoDoor(DDoor::doorClose, NULL, NULL, sectag, 2.*clamp(speed, 1, 127), 0, 0, 0); } } @@ -2097,8 +2070,8 @@ void FParser::SF_LineTrigger() maplinedef_t mld; mld.special=intvalue(t_argv[0]); mld.tag=t_argc > 1 ? intvalue(t_argv[1]) : 0; - P_TranslateLineDef(&line, &mld); - P_ExecuteSpecial(line.special, NULL, Script->trigger, false, + Level->TranslateLineDef(&line, &mld); + P_ExecuteSpecial(Level, line.special, NULL, Script->trigger, false, line.args[0],line.args[1],line.args[2],line.args[3],line.args[4]); } } @@ -2157,7 +2130,7 @@ void FParser::SF_SetLineBlocking(void) { blocking=blocks[blocking]; int tag=intvalue(t_argv[0]); - FLineIdIterator itr(tag); + auto itr = Level->GetLineIdIterator(tag); int i; while ((i = itr.Next()) >= 0) { @@ -2180,7 +2153,7 @@ void FParser::SF_SetLineMonsterBlocking(void) int blocking = intvalue(t_argv[1]) ? (int)ML_BLOCKMONSTERS : 0; int tag=intvalue(t_argv[0]); - FLineIdIterator itr(tag); + auto itr = Level->GetLineIdIterator(tag); int i; while ((i = itr.Next()) >= 0) { @@ -2237,7 +2210,7 @@ void FParser::SF_SetLineTexture(void) texture = stringvalue(t_argv[3]); texturenum = TexMan.GetTextureID(texture, ETextureType::Wall, FTextureManager::TEXMAN_Overridable); - FLineIdIterator itr(tag); + auto itr = Level->GetLineIdIterator(tag); while ((i = itr.Next()) >= 0) { // bad sidedef, Hexen just SEGV'd here! @@ -2257,7 +2230,7 @@ void FParser::SF_SetLineTexture(void) int sections = intvalue(t_argv[3]); // set all sectors with tag - FLineIdIterator itr(tag); + auto itr = Level->GetLineIdIterator(tag); while ((i = itr.Next()) >= 0) { side_t *sided = Level->lines[i].sidedef[side]; @@ -2447,13 +2420,13 @@ void FParser::SF_PlayerKeys(void) if(t_argc == 2) { t_return.type = svt_int; - t_return.value.i = CheckInventory(players[playernum].mo, keyname); + t_return.value.i = CheckInventory(Level->Players[playernum]->mo, keyname); return; } else { givetake = intvalue(t_argv[2]); - ScriptUtil::Exec(givetake?NAME_GiveInventory : NAME_TakeInventory, ScriptUtil::Pointer, players[playernum].mo, ScriptUtil::Int, keyname.GetIndex(), ScriptUtil::Int, 1, ScriptUtil::End); + ScriptUtil::Exec(givetake?NAME_GiveInventory : NAME_TakeInventory, ScriptUtil::Pointer, Level->Players[playernum]->mo, ScriptUtil::Int, keyname.GetIndex(), ScriptUtil::Int, 1, ScriptUtil::End); t_return.type = svt_int; t_return.value.i = 0; } @@ -2532,14 +2505,14 @@ void FParser::SF_PlayerWeapon() if (t_argc == 2) { - AActor * wp = players[playernum].mo->FindInventory(ti); + AActor * wp = Level->Players[playernum]->mo->FindInventory(ti); t_return.type = svt_int; t_return.value.i = wp!=NULL; return; } else { - AActor * wp = players[playernum].mo->FindInventory(ti); + AActor * wp = Level->Players[playernum]->mo->FindInventory(ti); newweapon = !!intvalue(t_argv[2]); if (!newweapon) @@ -2548,14 +2521,14 @@ void FParser::SF_PlayerWeapon() { wp->Destroy(); // If the weapon is active pick a replacement. Legacy didn't do this! - if (players[playernum].PendingWeapon==wp) players[playernum].PendingWeapon=WP_NOCHANGE; - if (players[playernum].ReadyWeapon==wp) + if (Level->Players[playernum]->PendingWeapon==wp) Level->Players[playernum]->PendingWeapon=WP_NOCHANGE; + if (Level->Players[playernum]->ReadyWeapon==wp) { - players[playernum].ReadyWeapon=nullptr; + Level->Players[playernum]->ReadyWeapon=nullptr; IFVM(PlayerPawn, PickNewWeapon) { - VMValue param[] = { players[playernum].mo, (void*)nullptr }; + VMValue param[] = { Level->Players[playernum]->mo, (void*)nullptr }; VMCall(func, param, 2, nullptr, 0); } } @@ -2565,9 +2538,9 @@ void FParser::SF_PlayerWeapon() { if (!wp) { - auto pw=players[playernum].PendingWeapon; - players[playernum].mo->GiveInventoryType(ti); - players[playernum].PendingWeapon=pw; + auto pw=Level->Players[playernum]->PendingWeapon; + Level->Players[playernum]->mo->GiveInventoryType(ti); + Level->Players[playernum]->PendingWeapon=pw; } } @@ -2616,13 +2589,13 @@ void FParser::SF_PlayerSelectedWeapon() return; } - players[playernum].PendingWeapon = players[playernum].mo->FindInventory(ti); + Level->Players[playernum]->PendingWeapon = Level->Players[playernum]->mo->FindInventory(ti); } t_return.type = svt_int; for(int i=0;i<9;i++) { - if (players[playernum].ReadyWeapon->GetClass ()->TypeName == FName(WeaponNames[i])) + if (Level->Players[playernum]->ReadyWeapon->GetClass ()->TypeName == FName(WeaponNames[i])) { t_return.value.i=i; break; @@ -2648,7 +2621,7 @@ void FParser::SF_GiveInventory(void) if(t_argc == 2) count=1; else count=intvalue(t_argv[2]); - ScriptUtil::Exec(NAME_GiveInventory, ScriptUtil::Pointer, players[playernum].mo, ScriptUtil::Int, FName(stringvalue(t_argv[1])).GetIndex(), ScriptUtil::Int, count, ScriptUtil::End); + ScriptUtil::Exec(NAME_GiveInventory, ScriptUtil::Pointer, Level->Players[playernum]->mo, ScriptUtil::Int, FName(stringvalue(t_argv[1])).GetIndex(), ScriptUtil::Int, count, ScriptUtil::End); t_return.type = svt_int; t_return.value.i = 0; } @@ -2671,7 +2644,7 @@ void FParser::SF_TakeInventory(void) if(t_argc == 2) count=32767; else count=intvalue(t_argv[2]); - ScriptUtil::Exec(NAME_TakeInventory, ScriptUtil::Pointer, players[playernum].mo, ScriptUtil::Int, FName(stringvalue(t_argv[1])).GetIndex(), ScriptUtil::Int, count, ScriptUtil::End); + ScriptUtil::Exec(NAME_TakeInventory, ScriptUtil::Pointer, Level->Players[playernum]->mo, ScriptUtil::Int, FName(stringvalue(t_argv[1])).GetIndex(), ScriptUtil::Int, count, ScriptUtil::End); t_return.type = svt_int; t_return.value.i = 0; } @@ -2696,7 +2669,7 @@ void FParser::SF_CheckInventory(void) return; } t_return.type = svt_int; - t_return.value.i = CheckInventory(players[playernum].mo, stringvalue(t_argv[1])); + t_return.value.i = CheckInventory(Level->Players[playernum]->mo, stringvalue(t_argv[1])); } } @@ -2853,7 +2826,7 @@ void FParser::SF_AmbientSound(void) void FParser::SF_ExitSecret(void) { - G_SecretExitLevel(0); + Level->SecretExitLevel(0); } @@ -2928,9 +2901,9 @@ void FParser::SF_SpawnExplosion() if(t_argc > 3) pos.Z = floatvalue(t_argv[3]); else - pos.Z = P_PointInSector(pos)->floorplane.ZatPoint(pos); + pos.Z = Level->PointInSector(pos)->floorplane.ZatPoint(pos); - spawn = Spawn (pclass, pos, ALLOW_REPLACE); + spawn = Spawn (Level, pclass, pos, ALLOW_REPLACE); t_return.type = svt_int; t_return.value.i=0; if (spawn) @@ -3249,10 +3222,10 @@ void FParser::SF_PlayerAddFrag() { playernum1 = T_GetPlayerNum(t_argv[0]); - players[playernum1].fragcount++; + Level->Players[playernum1]->fragcount++; t_return.type = svt_int; - t_return.value.f = players[playernum1].fragcount; + t_return.value.f = Level->Players[playernum1]->fragcount; } else @@ -3260,10 +3233,10 @@ void FParser::SF_PlayerAddFrag() playernum1 = T_GetPlayerNum(t_argv[0]); playernum2 = T_GetPlayerNum(t_argv[1]); - players[playernum1].frags[playernum2]++; + Level->Players[playernum1]->frags[playernum2]++; t_return.type = svt_int; - t_return.value.f = players[playernum1].frags[playernum2]; + t_return.value.f = Level->Players[playernum1]->frags[playernum2]; } } } @@ -3642,10 +3615,10 @@ void FParser::SF_ThingCount(void) pClass=T_GetMobjType(t_argv[0]); if (!pClass) return; // If we want to count map items we must consider actor replacement - pClass = pClass->GetReplacement(); + pClass = pClass->GetReplacement(Level); -again: - TThinkerIterator it; + again: + auto it = Level->GetThinkerIterator(); if (t_argc<2 || intvalue(t_argv[1])==0 || pClass->IsDescendantOf(NAME_Inventory)) { @@ -3671,7 +3644,7 @@ again: { // Again, with decorate replacements replacemented = true; - PClassActor *newkind = pClass->GetReplacement(); + PClassActor *newkind = pClass->GetReplacement(Level); if (newkind != pClass) { pClass = newkind; @@ -3700,7 +3673,7 @@ void FParser::SF_SetColor(void) { tagnum = intvalue(t_argv[0]); - secnum = T_FindFirstSectorFromTag(tagnum); + secnum = Level->FindFirstSectorFromTag(tagnum); if(secnum < 0) { @@ -3721,7 +3694,7 @@ void FParser::SF_SetColor(void) else return; // set all sectors with tag - FSSectorTagIterator itr(tagnum); + auto itr = Level->GetSectorTagIterator(tagnum); while ((i = itr.Next()) >= 0) { Level->sectors[i].SetColor(color, 0); @@ -3761,7 +3734,7 @@ void FParser::SF_SpawnShot2(void) t_return.type = svt_mobj; - AActor *mo = Spawn(pclass, source->PosPlusZ(z), ALLOW_REPLACE); + AActor *mo = Spawn(Level, pclass, source->PosPlusZ(z), ALLOW_REPLACE); if (mo) { S_Sound(mo, CHAN_VOICE, mo->SeeSound, 1, ATTN_NORM); @@ -3786,13 +3759,13 @@ void FParser::SF_KillInSector() { if (CheckArgs(1)) { - TThinkerIterator it; + auto it = Level->GetThinkerIterator(); AActor * mo; int tag=intvalue(t_argv[0]); while ((mo=it.Next())) { - if (mo->flags3&MF3_ISMONSTER && tagManager.SectorHasTag(mo->Sector, tag)) P_DamageMobj(mo, NULL, NULL, 1000000, NAME_Massacre); + if (mo->flags3&MF3_ISMONSTER && Level->SectorHasTag(mo->Sector, tag)) P_DamageMobj(mo, NULL, NULL, 1000000, NAME_Massacre); } } } @@ -3814,7 +3787,7 @@ void FParser::SF_SetLineTrigger() id=intvalue(t_argv[0]); spec=intvalue(t_argv[1]); if (t_argc>2) tag=intvalue(t_argv[2]); - FLineIdIterator itr(id); + auto itr = Level->GetLineIdIterator(id); while ((i = itr.Next()) >= 0) { maplinedef_t mld; @@ -3822,7 +3795,7 @@ void FParser::SF_SetLineTrigger() mld.tag = tag; mld.flags = 0; int f = Level->lines[i].flags; - P_TranslateLineDef(&Level->lines[i], &mld); + Level->TranslateLineDef(&Level->lines[i], &mld); Level->lines[i].flags = (Level->lines[i].flags & (ML_MONSTERSCANACTIVATE | ML_REPEAT_SPECIAL | ML_SPAC_MASK | ML_FIRSTSIDEONLY)) | (f & ~(ML_MONSTERSCANACTIVATE | ML_REPEAT_SPECIAL | ML_SPAC_MASK | ML_FIRSTSIDEONLY)); @@ -3848,7 +3821,7 @@ void FParser::RunLineSpecial(const FLineSpecial *spec) if (t_argc>i) args[i]=intvalue(t_argv[i]); else args[i] = 0; } - t_return.value.i = P_ExecuteSpecial(spec->number, NULL,Script->trigger,false, args[0],args[1],args[2],args[3],args[4]); + t_return.value.i = P_ExecuteSpecial(Level, spec->number, NULL,Script->trigger,false, args[0],args[1],args[2],args[3],args[4]); } } diff --git a/src/fragglescript/t_load.cpp b/src/fragglescript/t_load.cpp index 930c69682f..7f5d8024f7 100644 --- a/src/fragglescript/t_load.cpp +++ b/src/fragglescript/t_load.cpp @@ -143,8 +143,8 @@ void FScriptLoader::ParseInfoCmd(char *line, FString &scriptsrc) sc.MustGetStringName("="); sc.MustGetString(); - sky2texture = sky1texture = Level->skytexture1 = Level->skytexture2 = TexMan.GetTextureID (sc.String, ETextureType::Wall, FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_ReturnFirst); - R_InitSkyMap (); + Level->skytexture1 = Level->skytexture2 = TexMan.GetTextureID (sc.String, ETextureType::Wall, FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_ReturnFirst); + InitSkyMap (Level); } else if (sc.Compare("interpic")) { @@ -262,7 +262,7 @@ bool FScriptLoader::ParseInfo(MapData * map) I_Error("Only one FraggleThinker is allowed to exist at a time.\nCheck your code."); } - auto th = Create(); + auto th = Level->CreateThinker(); th->LevelScript->data = copystring(scriptsrc.GetChars()); Level->FraggleScriptThinker = th; @@ -294,9 +294,9 @@ void T_LoadScripts(FLevelLocals *Level, MapData *map) // the default translator is being used. // Custom translators will not be patched. if ((gameinfo.gametype == GAME_Doom || gameinfo.gametype == GAME_Heretic) && Level->info->Translator.IsEmpty() && - Level->maptype == MAPTYPE_DOOM && SimpleLineTranslations.Size() > 272 && SimpleLineTranslations[272 - 2*HasScripts].special == FS_Execute) + Level->maptype == MAPTYPE_DOOM && Level->Translator->SimpleLineTranslations.Size() > 272 && Level->Translator->SimpleLineTranslations[272 - 2*HasScripts].special == FS_Execute) { - std::swap(SimpleLineTranslations[270], SimpleLineTranslations[272]); + std::swap(Level->Translator->SimpleLineTranslations[270], Level->Translator->SimpleLineTranslations[272]); } } diff --git a/src/fragglescript/t_oper.cpp b/src/fragglescript/t_oper.cpp index 3208eb9e66..8b4368db77 100644 --- a/src/fragglescript/t_oper.cpp +++ b/src/fragglescript/t_oper.cpp @@ -31,6 +31,7 @@ /* includes ************************/ #include "t_script.h" +#include "g_levellocals.h" #define evaluate_leftnright(a, b, c) {\ @@ -84,7 +85,7 @@ void FParser::OPequals(svalue_t &result, int start, int n, int stop) { DFsVariable *var; - var = Script->FindVariable(Tokens[start]); + var = Script->FindVariable(Tokens[start], Level->FraggleScriptThinker->GlobalScript); if(var) { @@ -478,7 +479,7 @@ void FParser::OPincrement(svalue_t &result, int start, int n, int stop) { DFsVariable *var; - var = Script->FindVariable(Tokens[stop]); + var = Script->FindVariable(Tokens[stop], Level->FraggleScriptThinker->GlobalScript); if(!var) { script_error("unknown variable '%s'\n", Tokens[stop]); @@ -503,7 +504,7 @@ void FParser::OPincrement(svalue_t &result, int start, int n, int stop) svalue_t newvalue; DFsVariable *var; - var = Script->FindVariable(Tokens[start]); + var = Script->FindVariable(Tokens[start], Level->FraggleScriptThinker->GlobalScript); if(!var) { script_error("unknown variable '%s'\n", Tokens[start]); @@ -541,7 +542,7 @@ void FParser::OPdecrement(svalue_t &result, int start, int n, int stop) { DFsVariable *var; - var = Script->FindVariable(Tokens[stop]); + var = Script->FindVariable(Tokens[stop], Level->FraggleScriptThinker->GlobalScript); if(!var) { script_error("unknown variable '%s'\n", Tokens[stop]); @@ -567,7 +568,7 @@ void FParser::OPdecrement(svalue_t &result, int start, int n, int stop) svalue_t newvalue; DFsVariable *var; - var = Script->FindVariable(Tokens[start]); + var = Script->FindVariable(Tokens[start], Level->FraggleScriptThinker->GlobalScript); if(!var) { script_error("unknown variable '%s'\n", Tokens[start]); diff --git a/src/fragglescript/t_parse.cpp b/src/fragglescript/t_parse.cpp index d7747b1bc2..78bfc3aed1 100644 --- a/src/fragglescript/t_parse.cpp +++ b/src/fragglescript/t_parse.cpp @@ -34,7 +34,7 @@ #include #include "t_script.h" #include "v_text.h" - +#include "g_levellocals.h" CVAR(Bool, script_debug, false, 0) @@ -561,7 +561,7 @@ void FParser::SimpleEvaluate(svalue_t &returnvar, int n) break; case name_: - var = Script->FindVariable(Tokens[n]); + var = Script->FindVariable(Tokens[n], Level->FraggleScriptThinker->GlobalScript); if(!var) { script_error("unknown variable '%s'\n", Tokens[n]); diff --git a/src/fragglescript/t_prepro.cpp b/src/fragglescript/t_prepro.cpp index d5667d7c7b..4c75b95f0c 100644 --- a/src/fragglescript/t_prepro.cpp +++ b/src/fragglescript/t_prepro.cpp @@ -333,13 +333,13 @@ char *DFsScript::ProcessFindChar(char *datap, char find) // //========================================================================== -void DFsScript::DryRunScript() +void DFsScript::DryRunScript(FLevelLocals *Level) { char *end = data + len; char *rover = data; // allocate space for the tokens - FParser parse(&level, this); + FParser parse(Level, this); try { while(rover < end && *rover) @@ -387,11 +387,11 @@ void DFsScript::DryRunScript() // //========================================================================== -void DFsScript::Preprocess() +void DFsScript::Preprocess(FLevelLocals *Level) { len = (int)strlen(data); ProcessFindChar(data, 0); // fill in everything - DryRunScript(); + DryRunScript(Level); } //========================================================================== @@ -406,7 +406,7 @@ void DFsScript::Preprocess() // //========================================================================== -void DFsScript::ParseInclude(char *lumpname) +void DFsScript::ParseInclude(FLevelLocals *Level, char *lumpname) { int lumpnum; char *lump; @@ -429,7 +429,7 @@ void DFsScript::ParseInclude(char *lumpname) ProcessFindChar(lump, 0); // now parse the lump - FParser parse(&level, this); + FParser parse(Level, this); parse.Run(lump, lump, lump+lumplen); // free the lump diff --git a/src/fragglescript/t_script.cpp b/src/fragglescript/t_script.cpp index 9fb156fee3..fd2cbcefcc 100644 --- a/src/fragglescript/t_script.cpp +++ b/src/fragglescript/t_script.cpp @@ -176,8 +176,6 @@ void DFsScript::OnDestroy() void DFsScript::Serialize(FSerializer &arc) { Super::Serialize(arc); - // don't save a reference to the global script, which contains unserializable data. - if (parent == level.FraggleScriptThinker->GlobalScript) parent = nullptr; arc("data", data) ("scriptnum", scriptnum) @@ -188,8 +186,6 @@ void DFsScript::Serialize(FSerializer &arc) .Array("sections", sections, SECTIONSLOTS) .Array("variables", variables, VARIABLESLOTS) .Array("children", children, MAXSCRIPTS); - - if (parent == nullptr) parent = level.FraggleScriptThinker->GlobalScript; } //========================================================================== @@ -200,7 +196,7 @@ void DFsScript::Serialize(FSerializer &arc) // //========================================================================== -void DFsScript::ParseScript(char *position) +void DFsScript::ParseScript(char *position, DFraggleThinker *th) { if (position == nullptr) { @@ -215,11 +211,11 @@ void DFsScript::ParseScript(char *position) return; } - level.FraggleScriptThinker->trigger_obj = trigger; // set trigger + th->trigger_obj = trigger; // set trigger variable. try { - FParser parse(&level, this); + FParser parse(th->Level, this); parse.Run(position, data, data + len); } catch (CFraggleScriptError &err) @@ -361,24 +357,18 @@ IMPLEMENT_POINTERS_END //========================================================================== // +// This thinker is a little unusual from all the rest, because it +// needs to construct some non-serializable data. // +// This cannot be done in Construct, but requires an actual constructor, +// so that even a deserialized ionstance is fully set up. // //========================================================================== DFraggleThinker::DFraggleThinker() -: DThinker(STAT_SCRIPTS) { GlobalScript = Create(); GC::WriteBarrier(this, GlobalScript); - // do not create resources which will be filled in by the serializer if being called from there. - if (!bSerialOverride) - { - RunningScripts = Create(); - GC::WriteBarrier(this, RunningScripts); - LevelScript = Create(); - LevelScript->parent = GlobalScript; - GC::WriteBarrier(this, LevelScript); - } InitFunctions(); } @@ -388,6 +378,21 @@ DFraggleThinker::DFraggleThinker() // //========================================================================== +void DFraggleThinker::Construct() +{ + RunningScripts = Create(); + GC::WriteBarrier(this, RunningScripts); + LevelScript = Create(); + LevelScript->parent = nullptr; + GC::WriteBarrier(this, LevelScript); +} + +//========================================================================== +// +// +// +//========================================================================== + void DFraggleThinker::OnDestroy() { DRunningScript *p = RunningScripts; @@ -456,10 +461,10 @@ bool DFraggleThinker::wait_finished(DRunningScript *script) case wt_tagwait: { int secnum; - FSectorTagIterator itr(script->wait_data); + auto itr = Level->GetSectorTagIterator(script->wait_data); while ((secnum = itr.Next()) >= 0) { - sector_t *sec = &level.sectors[secnum]; + sector_t *sec = &Level->sectors[secnum]; if(sec->floordata || sec->ceilingdata || sec->lightingdata) return false; // not finished } @@ -523,7 +528,7 @@ void DFraggleThinker::Tick() next = current->next; // save before freeing // continue the script - current->script->ParseScript (current->script->data + current->save_point); + current->script->ParseScript (current->script->data + current->save_point, this); // free current->Destroy(); @@ -611,10 +616,10 @@ void T_PreprocessScripts(FLevelLocals *Level) // get the other scripts // levelscript started by player 0 'superplayer' - th->LevelScript->trigger = players[0].mo; + th->LevelScript->trigger = Level->Players[0]->mo; - th->LevelScript->Preprocess(); - th->LevelScript->ParseScript(); + th->LevelScript->Preprocess(Level); + th->LevelScript->ParseScript(nullptr, th); } } @@ -662,6 +667,6 @@ CCMD(fpuke) } else { - T_RunScript(&level, atoi(argv[1]), players[consoleplayer].mo); + T_RunScript(players[consoleplayer].mo->Level, atoi(argv[1]), players[consoleplayer].mo); } } diff --git a/src/fragglescript/t_script.h b/src/fragglescript/t_script.h index 11c0c0ba49..f213008871 100644 --- a/src/fragglescript/t_script.h +++ b/src/fragglescript/t_script.h @@ -35,6 +35,8 @@ #pragma pointers_to_members( full_generality, single_inheritance ) #endif +class DFraggleThinker; + class CFraggleScriptError : public CDoomError { @@ -341,7 +343,7 @@ public: void NewFunction(const char *name, void (FParser::*handler)()); DFsVariable *VariableForName(const char *name); - DFsVariable *FindVariable(const char *name); + DFsVariable *FindVariable(const char *name, DFsScript *global); void ClearVariables(bool complete= false); DFsVariable *NewLabel(char *labelptr); char *LabelValue(const svalue_t &v); @@ -360,10 +362,10 @@ public: DFsSection *FindSectionStart(const char *brace); DFsSection *FindSectionEnd(const char *brace); char *ProcessFindChar(char *data, char find); - void DryRunScript(); - void Preprocess(); - void ParseInclude(char *lumpname); - void ParseScript(char *rover = NULL); + void DryRunScript(FLevelLocals *Level); + void Preprocess(FLevelLocals *Level); + void ParseInclude(FLevelLocals *Level, char *lumpname); + void ParseScript(char *rover, DFraggleThinker *th); void ParseData(char *rover, char *data, char *end); }; @@ -688,7 +690,7 @@ class DFraggleThinker : public DThinker DECLARE_CLASS(DFraggleThinker, DThinker) HAS_OBJECT_POINTERS public: - + static const int DEFAULT_STAT = STAT_SCRIPTS; int zoom = 1; AActor *trigger_obj; // this is a transient pointer not being subjected to GC. TObjPtr GlobalScript; @@ -696,7 +698,8 @@ public: TObjPtr RunningScripts; TArray > SpawnedThings; - DFraggleThinker(); + DFraggleThinker(); // This class needs a real constructor because it has non-serializable content. + void Construct(); void OnDestroy() override; diff --git a/src/fragglescript/t_spec.cpp b/src/fragglescript/t_spec.cpp index c52f4cd299..5361c7c1e3 100644 --- a/src/fragglescript/t_spec.cpp +++ b/src/fragglescript/t_spec.cpp @@ -429,7 +429,7 @@ void FParser::spec_script() newscript->parent = Script; // remember parent // preprocess the newscript now - newscript->Preprocess(); + newscript->Preprocess(Level); // we dont want to run the newscript, only add it // jump past the newscript in parsing diff --git a/src/fragglescript/t_variable.cpp b/src/fragglescript/t_variable.cpp index 25776970e4..c73bf14fc8 100644 --- a/src/fragglescript/t_variable.cpp +++ b/src/fragglescript/t_variable.cpp @@ -364,7 +364,7 @@ DFsVariable *DFsScript::VariableForName(const char *name) // //========================================================================== -DFsVariable *DFsScript::FindVariable(const char *name) +DFsVariable *DFsScript::FindVariable(const char *name, DFsScript *GlobalScript) { DFsVariable *var; DFsScript *current = this; @@ -374,7 +374,13 @@ DFsVariable *DFsScript::FindVariable(const char *name) // check this script if ((var = current->VariableForName(name))) return var; - current = current->parent; // try the parent of this one + + // Since the global script cannot be serialized, we cannot store a pointer to it, because this cannot be safely restored during deserialization. + // To compensate we need to check the relationship explicitly here. + if (current->parent == nullptr && current != GlobalScript) + current = GlobalScript; + else + current = current->parent; // try the parent of this one } return NULL; // no variable diff --git a/src/g_cvars.cpp b/src/g_cvars.cpp new file mode 100644 index 0000000000..67d18179fa --- /dev/null +++ b/src/g_cvars.cpp @@ -0,0 +1,111 @@ +/* + ** g_cvars.cpp + ** collects all the CVARs that were scattered all across the code before + ** + **--------------------------------------------------------------------------- + ** Copyright 1998-2016 Randy Heit + ** Copyright 2003-2018 Christoph Oelckers + ** All rights reserved. + ** + ** Redistribution and use in source and binary forms, with or without + ** modification, are permitted provided that the following conditions + ** are met: + ** + ** 1. Redistributions of source code must retain the above copyright + ** notice, this list of conditions and the following disclaimer. + ** 2. Redistributions in binary form must reproduce the above copyright + ** notice, this list of conditions and the following disclaimer in the + ** documentation and/or other materials provided with the distribution. + ** 3. The name of the author may not be used to endorse or promote products + ** derived from this software without specific prior written permission. + ** + ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + ** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + **--------------------------------------------------------------------------- + ** + */ + +#include "c_cvars.h" +#include "g_levellocals.h" +#include "g_game.h" + +CVAR (Bool, cl_spreaddecals, true, CVAR_ARCHIVE) +CVAR(Bool, var_pushers, true, CVAR_SERVERINFO); +CVAR(Bool, gl_cachenodes, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) +CVAR(Float, gl_cachetime, 0.6f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) + + +CUSTOM_CVAR (Bool, gl_lights, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) +{ + for (auto Level : AllLevels()) + { + if (self) Level->RecreateAllAttachedLights(); + else Level->DeleteAllAttachedLights(); + } +} + +CUSTOM_CVAR(Int, sv_corpsequeuesize, 64, CVAR_ARCHIVE|CVAR_SERVERINFO) +{ + if (self > 0) + { + for (auto Level : AllLevels()) + { + auto &corpsequeue = Level->CorpseQueue; + while (corpsequeue.Size() > (unsigned)self) + { + AActor *corpse = corpsequeue[0]; + if (corpse) corpse->Destroy(); + corpsequeue.Delete(0); + } + } + } +} + +CUSTOM_CVAR (Int, cl_maxdecals, 1024, CVAR_ARCHIVE) +{ + if (self < 0) + { + self = 0; + } + else for (auto Level : AllLevels()) + { + while (Level->ImpactDecalCount > self) + { + DThinker *thinker = Level->FirstThinker(STAT_AUTODECAL); + if (thinker != NULL) + { + thinker->Destroy(); + } + } + } +} + + +// [BC] Allow the maximum number of particles to be specified by a cvar (so people +// with lots of nice hardware can have lots of particles!). +CUSTOM_CVAR(Int, r_maxparticles, 4000, CVAR_ARCHIVE) +{ + if (self == 0) + self = 4000; + else if (self > 65535) + self = 65535; + else if (self < 100) + self = 100; + + if (gamestate != GS_STARTUP) + { + for (auto Level : AllLevels()) + { + P_InitParticles(Level); + } + } +} + diff --git a/src/g_cvars.h b/src/g_cvars.h new file mode 100644 index 0000000000..35930b2a2a --- /dev/null +++ b/src/g_cvars.h @@ -0,0 +1,9 @@ + +#pragma once + +#include "c_cvars.h" + + +EXTERN_CVAR(Bool, r_dynlights) +EXTERN_CVAR(Bool, gl_lights) + diff --git a/src/g_dumpinfo.cpp b/src/g_dumpinfo.cpp new file mode 100644 index 0000000000..c07f36e601 --- /dev/null +++ b/src/g_dumpinfo.cpp @@ -0,0 +1,351 @@ +/* + ** g_dumpinfo.cpp + ** diagnostic CCMDs that output info about the current game + ** + **--------------------------------------------------------------------------- + ** Copyright 1998-2016 Randy Heit + ** Copyright 2003-2018 Christoph Oelckers + ** All rights reserved. + ** + ** Redistribution and use in source and binary forms, with or without + ** modification, are permitted provided that the following conditions + ** are met: + ** + ** 1. Redistributions of source code must retain the above copyright + ** notice, this list of conditions and the following disclaimer. + ** 2. Redistributions in binary form must reproduce the above copyright + ** notice, this list of conditions and the following disclaimer in the + ** documentation and/or other materials provided with the distribution. + ** 3. The name of the author may not be used to endorse or promote products + ** derived from this software without specific prior written permission. + ** + ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + ** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + **--------------------------------------------------------------------------- + ** + */ + +#include "c_dispatch.h" +#include "g_levellocals.h" +#include "a_dynlight.h" +#include "a_sharedglobal.h" +#include "d_net.h" +#include "p_setup.h" +#include "w_wad.h" +#include "v_text.h" +#include "c_functions.h" + +//========================================================================== +// +// CCMDs +// +//========================================================================== + +CCMD(listlights) +{ + int walls, sectors; + int allwalls=0, allsectors=0, allsubsecs = 0; + int i=0, shadowcount = 0; + FDynamicLight * dl; + + for (auto Level : AllLevels()) + { + Printf("Lights for %s\n", Level->MapName.GetChars()); + for (dl = Level->lights; dl; dl = dl->next) + { + walls=0; + sectors=0; + Printf("%s at (%f, %f, %f), color = 0x%02x%02x%02x, radius = %f %s %s", + dl->target->GetClass()->TypeName.GetChars(), + dl->X(), dl->Y(), dl->Z(), dl->GetRed(), dl->GetGreen(), dl->GetBlue(), + dl->radius, dl->IsAttenuated()? "attenuated" : "", dl->shadowmapped? "shadowmapped" : ""); + i++; + shadowcount += dl->shadowmapped; + + if (dl->target) + { + FTextureID spr = sprites[dl->target->sprite].GetSpriteFrame(dl->target->frame, 0, 0., nullptr); + Printf(", frame = %s ", TexMan.GetTexture(spr)->GetName().GetChars()); + } + + + FLightNode * node; + + node=dl->touching_sides; + + while (node) + { + walls++; + allwalls++; + node = node->nextTarget; + } + + + node = dl->touching_sector; + + while (node) + { + allsectors++; + sectors++; + node = node->nextTarget; + } + Printf("- %d walls, %d sectors\n", walls, sectors); + + } + Printf("%i dynamic lights, %d shadowmapped, %d walls, %d sectors\n\n\n", i, shadowcount, allwalls, allsectors); + } +} + +CCMD (countdecals) +{ + for (auto Level : AllLevels()) + { + auto iterator = Level->GetThinkerIterator(NAME_None, STAT_AUTODECAL); + int count = 0; + + while (iterator.Next()) + count++; + + Printf("%s: Counted %d impact decals\n", Level->MapName.GetChars(), count); + } +} + +CCMD (spray) +{ + if (who == NULL || argv.argc() < 2) + { + Printf ("Usage: spray \n"); + return; + } + + Net_WriteByte (DEM_SPRAY); + Net_WriteString (argv[1]); +} + +//========================================================================== +// +// CCMD mapchecksum +// +//========================================================================== + +CCMD (mapchecksum) +{ + MapData *map; + uint8_t cksum[16]; + + if (argv.argc() < 2) + { + Printf("Usage: mapchecksum ...\n"); + } + for (int i = 1; i < argv.argc(); ++i) + { + map = P_OpenMapData(argv[i], true); + if (map == NULL) + { + Printf("Cannot load %s as a map\n", argv[i]); + } + else + { + map->GetChecksum(cksum); + const char *wadname = Wads.GetWadName(Wads.GetLumpFile(map->lumpnum)); + delete map; + for (size_t j = 0; j < sizeof(cksum); ++j) + { + Printf("%02X", cksum[j]); + } + Printf(" // %s %s\n", wadname, argv[i]); + } + } +} + +//========================================================================== +// +// CCMD hiddencompatflags +// +//========================================================================== + +CCMD (hiddencompatflags) +{ + for(auto Level : AllLevels()) + { + Printf("%s: %08x %08x %08x\n", Level->MapName.GetChars(), Level->ii_compatflags, Level->ii_compatflags2, Level->ib_compatflags); + } +} + +CCMD(dumpportals) +{ + for (auto Level : AllLevels()) + { + Printf("Portal groups for %s\n", Level->MapName.GetChars()); + for (unsigned i = 0; i < Level->portalGroups.Size(); i++) + { + auto p = Level->portalGroups[i]; + double xdisp = p->mDisplacement.X; + double ydisp = p->mDisplacement.Y; + Printf(PRINT_LOG, "Portal #%d, %s, displacement = (%f,%f)\n", i, p->plane == 0 ? "floor" : "ceiling", + xdisp, ydisp); + Printf(PRINT_LOG, "Coverage:\n"); + for (auto &sub : Level->subsectors) + { + auto port = sub.render_sector->GetPortalGroup(p->plane); + if (port == p) + { + Printf(PRINT_LOG, "\tSubsector %d (%d):\n\t\t", sub.Index(), sub.render_sector->sectornum); + for (unsigned k = 0; k < sub.numlines; k++) + { + Printf(PRINT_LOG, "(%.3f,%.3f), ", sub.firstline[k].v1->fX() + xdisp, sub.firstline[k].v1->fY() + ydisp); + } + Printf(PRINT_LOG, "\n\t\tCovered by subsectors:\n"); + FPortalCoverage *cov = &sub.portalcoverage[p->plane]; + for (int l = 0; l < cov->sscount; l++) + { + subsector_t *csub = &Level->subsectors[cov->subsectors[l]]; + Printf(PRINT_LOG, "\t\t\t%5d (%4d): ", cov->subsectors[l], csub->render_sector->sectornum); + for (unsigned m = 0; m < csub->numlines; m++) + { + Printf(PRINT_LOG, "(%.3f,%.3f), ", csub->firstline[m].v1->fX(), csub->firstline[m].v1->fY()); + } + Printf(PRINT_LOG, "\n"); + } + } + } + } + } +} + +ADD_STAT (interpolations) +{ + FString out; + for (auto Level : AllLevels()) + { + if (out.Len() > 0) out << '\n'; + out.AppendFormat("%s: %d interpolations", Level->MapName.GetChars(), Level->interpolator.CountInterpolations ()); + + } + return out; +} + +CCMD(printsections) +{ + void PrintSections(FLevelLocals *Level); + for (auto Level : AllLevels()) + { + PrintSections(Level); + } +} + +CCMD(dumptags) +{ + for (auto Level : AllLevels()) + { + Level->tagManager.DumpTags(); + } +} + + + +CCMD(dump3df) +{ + if (argv.argc() > 1) + { + // Print 3D floor info for a single sector. + // This only checks the primary level. + int sec = (int)strtoll(argv[1], NULL, 10); + if ((unsigned)sec >= primaryLevel->sectors.Size()) + { + Printf("Sector %d does not exist.\n", sec); + return; + } + sector_t *sector = &primaryLevel->sectors[sec]; + TArray & ffloors = sector->e->XFloor.ffloors; + + for (unsigned int i = 0; i < ffloors.Size(); i++) + { + double height = ffloors[i]->top.plane->ZatPoint(sector->centerspot); + double bheight = ffloors[i]->bottom.plane->ZatPoint(sector->centerspot); + + IGNORE_FORMAT_PRE + Printf("FFloor %d @ top = %f (model = %d), bottom = %f (model = %d), flags = %B, alpha = %d %s %s\n", + i, height, ffloors[i]->top.model->sectornum, + bheight, ffloors[i]->bottom.model->sectornum, + ffloors[i]->flags, ffloors[i]->alpha, (ffloors[i]->flags&FF_EXISTS) ? "Exists" : "", (ffloors[i]->flags&FF_DYNAMIC) ? "Dynamic" : ""); + IGNORE_FORMAT_POST + } + } +} + +//============================================================================ +// +// print the group link table to the console +// +//============================================================================ + +CCMD(dumplinktable) +{ + for (auto Level : AllLevels()) + { + Printf("Portal displacements for %s:\n", Level->MapName.GetChars()); + for (int x = 1; x < Level->Displacements.size; x++) + { + for (int y = 1; y < Level->Displacements.size; y++) + { + FDisplacement &disp = Level->Displacements(x, y); + Printf("%c%c(%6d, %6d)", TEXTCOLOR_ESCAPE, 'C' + disp.indirect, int(disp.pos.X), int(disp.pos.Y)); + } + Printf("\n"); + } + } +} + + +//=========================================================================== +// +// CCMD printinv +// +// Prints the console player's current inventory. +// +//=========================================================================== + +CCMD(printinv) +{ + int pnum = consoleplayer; + +#ifdef _DEBUG + // Only allow peeking on other players' inventory in debug builds. + if (argv.argc() > 1) + { + pnum = atoi(argv[1]); + if (pnum < 0 || pnum >= MAXPLAYERS) + { + return; + } + } +#endif + C_PrintInv(players[pnum].mo); +} + +CCMD(targetinv) +{ + FTranslatedLineTarget t; + + if (CheckCheatmode() || players[consoleplayer].mo == NULL) + return; + + C_AimLine(&t, true); + + if (t.linetarget) + { + C_PrintInv(t.linetarget); + } + else Printf("No target found. Targetinv cannot find actors that have " + "the NOBLOCKMAP flag or have height/radius of 0.\n"); +} + diff --git a/src/g_game.cpp b/src/g_game.cpp index 56029333eb..d389dc5300 100644 --- a/src/g_game.cpp +++ b/src/g_game.cpp @@ -72,6 +72,8 @@ #include "vm.h" #include "dobjgc.h" #include "gi.h" +#include "a_dynlight.h" +#include "i_system.h" #include "g_hub.h" #include "g_levellocals.h" @@ -218,6 +220,8 @@ bool SendLand; const AActor *SendItemUse, *SendItemDrop; int SendItemDropAmount; +extern uint8_t globalfreeze; + EXTERN_CVAR (Int, team) CVAR (Bool, teamplay, false, CVAR_SERVERINFO) @@ -769,7 +773,7 @@ void G_AddViewPitch (int look, bool mouse) return; } look = LookAdjust(look); - if (!level.IsFreelookAllowed()) + if (!primaryLevel->IsFreelookAllowed()) { LocalViewPitch = 0; } @@ -955,7 +959,7 @@ bool G_Responder (event_t *ev) { if (ST_Responder (ev)) return true; // status window ate it - if (!viewactive && AM_Responder (ev, false)) + if (!viewactive && primaryLevel->automap->Responder (ev, false)) return true; // automap ate it } else if (gamestate == GS_FINALE) @@ -986,7 +990,7 @@ bool G_Responder (event_t *ev) // the events *last* so that any bound keys get precedence. if (gamestate == GS_LEVEL && viewactive) - return AM_Responder (ev, true); + return primaryLevel->automap->Responder (ev, true); return (ev->type == EV_KeyDown || ev->type == EV_Mouse); @@ -1014,7 +1018,7 @@ void G_Ticker () } if (players[i].playerstate == PST_REBORN || players[i].playerstate == PST_ENTER) { - G_DoReborn(i, false); + primaryLevel->DoReborn(i, false); } } } @@ -1036,9 +1040,6 @@ void G_Ticker () } switch (gameaction) { - case ga_loadlevel: - G_DoLoadLevel (-1, false, false); - break; case ga_recordgame: G_CheckDemoStatus(); G_RecordDemo(newdemoname); @@ -1090,6 +1091,7 @@ void G_Ticker () AM_ToggleMap (); gameaction = ga_nothing; break; + default: case ga_nothing: break; } @@ -1112,7 +1114,7 @@ void G_Ticker () uint32_t rngsum = FRandom::StaticSumSeeds (); //Added by MC: For some of that bot stuff. The main bot function. - bglobal.Main (); + primaryLevel->BotInfo.Main (primaryLevel); for (i = 0; i < MAXPLAYERS; i++) { @@ -1171,7 +1173,7 @@ void G_Ticker () } // [ZZ] also tick the UI part of the events - E_UiTick(); + primaryLevel->localEventManager->UiTick(); C_RunDelayedCommands(); // do main actions @@ -1179,7 +1181,7 @@ void G_Ticker () { case GS_LEVEL: P_Ticker (); - AM_Ticker (); + primaryLevel->automap->Ticker (); break; case GS_TITLELEVEL: @@ -1211,7 +1213,7 @@ void G_Ticker () } // [MK] Additional ticker for UI events right after all others - E_PostUiTick(); + primaryLevel->localEventManager->PostUiTick(); } @@ -1241,7 +1243,7 @@ void G_PlayerFinishLevel (int player, EFinishLevelType mode, int flags) // Called after a player dies // almost everything is cleared and initialized // -void G_PlayerReborn (int player) +void FLevelLocals::PlayerReborn (int player) { player_t* p; int frags[MAXPLAYERS]; @@ -1325,7 +1327,7 @@ void G_PlayerReborn (int player) // because something is occupying it // -bool G_CheckSpot (int playernum, FPlayerStart *mthing) +bool FLevelLocals::CheckSpot (int playernum, FPlayerStart *mthing) { DVector3 spot; double oldz; @@ -1335,11 +1337,11 @@ bool G_CheckSpot (int playernum, FPlayerStart *mthing) spot = mthing->pos; - if (!(level.flags & LEVEL_USEPLAYERSTARTZ)) + if (!(flags & LEVEL_USEPLAYERSTARTZ)) { spot.Z = 0; } - spot.Z += P_PointInSector (spot)->floorplane.ZatPoint (spot); + spot.Z += PointInSector (spot)->floorplane.ZatPoint (spot); if (!players[playernum].mo) { // first spawn of level, before corpses @@ -1377,7 +1379,7 @@ bool G_CheckSpot (int playernum, FPlayerStart *mthing) // // [RH] Returns the distance of the closest player to the given mapthing -static double PlayersRangeFromSpot (FPlayerStart *spot) +double FLevelLocals::PlayersRangeFromSpot (FPlayerStart *spot) { double closest = INT_MAX; double distance; @@ -1398,7 +1400,7 @@ static double PlayersRangeFromSpot (FPlayerStart *spot) } // [RH] Select the deathmatch spawn spot farthest from everyone. -static FPlayerStart *SelectFarthestDeathmatchSpot (size_t selections) +FPlayerStart *FLevelLocals::SelectFarthestDeathmatchSpot (size_t selections) { double bestdistance = 0; FPlayerStart *bestspot = NULL; @@ -1406,12 +1408,12 @@ static FPlayerStart *SelectFarthestDeathmatchSpot (size_t selections) for (i = 0; i < selections; i++) { - double distance = PlayersRangeFromSpot (&level.deathmatchstarts[i]); + double distance = PlayersRangeFromSpot (&deathmatchstarts[i]); if (distance > bestdistance) { bestdistance = distance; - bestspot = &level.deathmatchstarts[i]; + bestspot = &deathmatchstarts[i]; } } @@ -1419,27 +1421,27 @@ static FPlayerStart *SelectFarthestDeathmatchSpot (size_t selections) } // [RH] Select a deathmatch spawn spot at random (original mechanism) -static FPlayerStart *SelectRandomDeathmatchSpot (int playernum, unsigned int selections) +FPlayerStart *FLevelLocals::SelectRandomDeathmatchSpot (int playernum, unsigned int selections) { unsigned int i, j; for (j = 0; j < 20; j++) { i = pr_dmspawn() % selections; - if (G_CheckSpot (playernum, &level.deathmatchstarts[i]) ) + if (CheckSpot (playernum, &deathmatchstarts[i]) ) { - return &level.deathmatchstarts[i]; + return &deathmatchstarts[i]; } } // [RH] return a spot anyway, since we allow telefragging when a player spawns - return &level.deathmatchstarts[i]; + return &deathmatchstarts[i]; } -DEFINE_ACTION_FUNCTION(DObject, G_PickDeathmatchStart) +DEFINE_ACTION_FUNCTION(FLevelLocals, PickDeathmatchStart) { - PARAM_PROLOGUE; - unsigned int selections = level.deathmatchstarts.Size(); + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); + unsigned int selections = self->deathmatchstarts.Size(); DVector3 pos; int angle; if (selections == 0) @@ -1450,8 +1452,8 @@ DEFINE_ACTION_FUNCTION(DObject, G_PickDeathmatchStart) else { unsigned int i = pr_dmspawn() % selections; - angle = level.deathmatchstarts[i].angle; - pos = level.deathmatchstarts[i].pos; + angle = self->deathmatchstarts[i].angle; + pos = self->deathmatchstarts[i].pos; } if (numret > 1) @@ -1466,12 +1468,12 @@ DEFINE_ACTION_FUNCTION(DObject, G_PickDeathmatchStart) return numret; } -void G_DeathMatchSpawnPlayer (int playernum) +void FLevelLocals::DeathMatchSpawnPlayer (int playernum) { unsigned int selections; FPlayerStart *spot; - selections = level.deathmatchstarts.Size (); + selections = deathmatchstarts.Size (); // [RH] We can get by with just 1 deathmatch start if (selections < 1) I_Error ("No deathmatch starts"); @@ -1488,22 +1490,22 @@ void G_DeathMatchSpawnPlayer (int playernum) { // No good spot, so the player will probably get stuck. // We were probably using select farthest above, and all // the spots were taken. - spot = G_PickPlayerStart(playernum, PPS_FORCERANDOM); - if (!G_CheckSpot(playernum, spot)) + spot = PickPlayerStart(playernum, PPS_FORCERANDOM); + if (!CheckSpot(playernum, spot)) { // This map doesn't have enough coop spots for this player // to use one. spot = SelectRandomDeathmatchSpot(playernum, selections); if (spot == NULL) { // We have a player 1 start, right? - spot = &level.playerstarts[0]; + spot = &playerstarts[0]; if (spot->type == 0) { // Fine, whatever. - spot = &level.deathmatchstarts[0]; + spot = &deathmatchstarts[0]; } } } } - AActor *mo = P_SpawnPlayer(spot, playernum); + AActor *mo = SpawnPlayer(spot, playernum); if (mo != NULL) P_PlayerStartStomp(mo); } @@ -1511,15 +1513,15 @@ void G_DeathMatchSpawnPlayer (int playernum) // // G_PickPlayerStart // -FPlayerStart *G_PickPlayerStart(int playernum, int flags) +FPlayerStart *FLevelLocals::PickPlayerStart(int playernum, int flags) { - if (level.AllPlayerStarts.Size() == 0) // No starts to pick + if (AllPlayerStarts.Size() == 0) // No starts to pick { return NULL; } - if ((level.flags2 & LEVEL2_RANDOMPLAYERSTARTS) || (flags & PPS_FORCERANDOM) || - level.playerstarts[playernum].type == 0) + if ((flags2 & LEVEL2_RANDOMPLAYERSTARTS) || (flags & PPS_FORCERANDOM) || + playerstarts[playernum].type == 0) { if (!(flags & PPS_NOBLOCKINGCHECK)) { @@ -1527,11 +1529,11 @@ FPlayerStart *G_PickPlayerStart(int playernum, int flags) unsigned int i; // Find all unblocked player starts. - for (i = 0; i < level.AllPlayerStarts.Size(); ++i) + for (i = 0; i < AllPlayerStarts.Size(); ++i) { - if (G_CheckSpot(playernum, &level.AllPlayerStarts[i])) + if (CheckSpot(playernum, &AllPlayerStarts[i])) { - good_starts.Push(&level.AllPlayerStarts[i]); + good_starts.Push(&AllPlayerStarts[i]); } } if (good_starts.Size() > 0) @@ -1540,17 +1542,17 @@ FPlayerStart *G_PickPlayerStart(int playernum, int flags) } } // Pick a spot at random, whether it's open or not. - return &level.AllPlayerStarts[pr_pspawn(level.AllPlayerStarts.Size())]; + return &AllPlayerStarts[pr_pspawn(AllPlayerStarts.Size())]; } - return &level.playerstarts[playernum]; + return &playerstarts[playernum]; } -DEFINE_ACTION_FUNCTION(DObject, G_PickPlayerStart) +DEFINE_ACTION_FUNCTION(FLevelLocals, PickPlayerStart) { - PARAM_PROLOGUE; + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_INT(playernum); PARAM_INT(flags); - auto ps = G_PickPlayerStart(playernum, flags); + auto ps = self->PickPlayerStart(playernum, flags); if (numret > 1) { ret[1].SetInt(ps? ps->angle : 0); @@ -1566,23 +1568,24 @@ DEFINE_ACTION_FUNCTION(DObject, G_PickPlayerStart) // // G_QueueBody // -static void G_QueueBody (AActor *body) +void FLevelLocals::QueueBody (AActor *body) { // flush an old corpse if needed - int modslot = level.bodyqueslot%level.BODYQUESIZE; - level.bodyqueslot = modslot + 1; + int modslot = bodyqueslot % BODYQUESIZE; + bodyqueslot = modslot + 1; - if (level.bodyqueslot >= level.BODYQUESIZE && level.bodyque[modslot] != NULL) + if (bodyqueslot >= BODYQUESIZE && bodyque[modslot] != NULL) { - level.bodyque[modslot]->Destroy (); + bodyque[modslot]->Destroy (); } - level.bodyque[modslot] = body; + bodyque[modslot] = body; // Copy the player's translation, so that if they change their color later, only // their current body will change and not all their old corpses. if (GetTranslationType(body->Translation) == TRANSLATION_Players || GetTranslationType(body->Translation) == TRANSLATION_PlayersExtra) { + // This needs to be able to handle multiple levels, in case a level with dead players is used as a secondary one later. *translationtables[TRANSLATION_PlayerCorpses][modslot] = *TranslationToTable(body->Translation); body->Translation = TRANSLATION(TRANSLATION_PlayerCorpses,modslot); translationtables[TRANSLATION_PlayerCorpses][modslot]->UpdateNative(); @@ -1606,9 +1609,9 @@ static void G_QueueBody (AActor *body) // G_DoReborn // EXTERN_CVAR(Bool, sv_singleplayerrespawn) -void G_DoReborn (int playernum, bool freshbot) +void FLevelLocals::DoReborn (int playernum, bool freshbot) { - if (!multiplayer && !(level.flags2 & LEVEL2_ALLOWRESPAWN) && !sv_singleplayerrespawn && + if (!multiplayer && !(flags2 & LEVEL2_ALLOWRESPAWN) && !sv_singleplayerrespawn && !G_SkillProperty(SKILLP_PlayerRespawn)) { if (BackupSaveName.Len() > 0 && FileExists (BackupSaveName.GetChars())) @@ -1620,9 +1623,8 @@ void G_DoReborn (int playernum, bool freshbot) { // Reload the level from scratch bool indemo = demoplayback; BackupSaveName = ""; - G_InitNew (level.MapName, false); + G_InitNew (MapName, false); demoplayback = indemo; -// gameaction = ga_loadlevel; } } else @@ -1633,28 +1635,28 @@ void G_DoReborn (int playernum, bool freshbot) // first disassociate the corpse if (players[playernum].mo) { - G_QueueBody (players[playernum].mo); + QueueBody (players[playernum].mo); players[playernum].mo->player = NULL; } // spawn at random spot if in deathmatch - if ((deathmatch || isUnfriendly) && (level.deathmatchstarts.Size () > 0)) + if ((deathmatch || isUnfriendly) && (deathmatchstarts.Size () > 0)) { - G_DeathMatchSpawnPlayer (playernum); + DeathMatchSpawnPlayer (playernum); return; } - if (!(level.flags2 & LEVEL2_RANDOMPLAYERSTARTS) && - level.playerstarts[playernum].type != 0 && - G_CheckSpot (playernum, &level.playerstarts[playernum])) + if (!(flags2 & LEVEL2_RANDOMPLAYERSTARTS) && + playerstarts[playernum].type != 0 && + CheckSpot (playernum, &playerstarts[playernum])) { - AActor *mo = P_SpawnPlayer(&level.playerstarts[playernum], playernum); + AActor *mo = SpawnPlayer(&playerstarts[playernum], playernum); if (mo != NULL) P_PlayerStartStomp(mo, true); } else { // try to spawn at any random player's spot - FPlayerStart *start = G_PickPlayerStart(playernum, PPS_FORCERANDOM); - AActor *mo = P_SpawnPlayer(start, playernum); + FPlayerStart *start = PickPlayerStart(playernum, PPS_FORCERANDOM); + AActor *mo = SpawnPlayer(start, playernum); if (mo != NULL) P_PlayerStartStomp(mo, true); } } @@ -1692,22 +1694,23 @@ void G_DoPlayerPop(int playernum) } // [RH] Make the player disappear - level.Behaviors.StopMyScripts(players[playernum].mo); + auto mo = players[playernum].mo; + mo->Level->Behaviors.StopMyScripts(mo); // [ZZ] fire player disconnect hook - E_PlayerDisconnected(playernum); + mo->Level->localEventManager->PlayerDisconnected(playernum); // [RH] Let the scripts know the player left - level.Behaviors.StartTypedScripts(SCRIPT_Disconnect, players[playernum].mo, true, playernum, true); - if (players[playernum].mo != NULL) + mo->Level->Behaviors.StartTypedScripts(SCRIPT_Disconnect, mo, true, playernum, true); + if (mo != NULL) { - P_DisconnectEffect(players[playernum].mo); - players[playernum].mo->player = NULL; - players[playernum].mo->Destroy(); + P_DisconnectEffect(mo); + mo->player = NULL; + mo->Destroy(); if (!(players[playernum].mo->ObjectFlags & OF_EuthanizeMe)) { // We just destroyed a morphed player, so now the original player // has taken their place. Destroy that one too. players[playernum].mo->Destroy(); } - players[playernum].mo = NULL; + players[playernum].mo = nullptr; players[playernum].camera = nullptr; } @@ -1811,7 +1814,7 @@ void G_DoLoadGame () SaveVersion = 0; void *data = info->CacheLump(); - FSerializer arc; + FSerializer arc(nullptr); if (!arc.OpenReader((const char *)data, info->LumpSize)) { Printf("Failed to access savegame info\n"); @@ -1894,7 +1897,7 @@ void G_DoLoadGame () // Read intermission data for hubs G_SerializeHub(arc); - bglobal.RemoveAllBots(true); + primaryLevel->BotInfo.RemoveAllBots(primaryLevel, true); FString cvar; arc("importantcvars", cvar); @@ -1907,7 +1910,8 @@ void G_DoLoadGame () uint32_t time[2] = { 1,0 }; arc("ticrate", time[0]) - ("leveltime", time[1]); + ("leveltime", time[1]) + ("globalfreeze", globalfreeze); // dearchive all the modifications level.time = Scale(time[1], TICRATE, time[0]); @@ -2034,14 +2038,15 @@ void G_DoAutoSave () file = G_BuildSaveName ("auto", nextautosave); - if (!(level.flags2 & LEVEL2_NOAUTOSAVEHINT)) + // The hint flag is only relevant on the primary level. + if (!(primaryLevel->flags2 & LEVEL2_NOAUTOSAVEHINT)) { nextautosave = (nextautosave + 1) % count; } else { // This flag can only be used once per level - level.flags2 &= ~LEVEL2_NOAUTOSAVEHINT; + primaryLevel->flags2 &= ~LEVEL2_NOAUTOSAVEHINT; } readableTime = myasctime (); @@ -2059,9 +2064,9 @@ static void PutSaveWads (FSerializer &arc) arc.AddString("Game WAD", name); // Name of wad the map resides in - if (Wads.GetLumpFile (level.lumpnum) > Wads.GetIwadNum()) + if (Wads.GetLumpFile (primaryLevel->lumpnum) > Wads.GetIwadNum()) { - name = Wads.GetWadName (Wads.GetLumpFile (level.lumpnum)); + name = Wads.GetWadName (Wads.GetLumpFile (primaryLevel->lumpnum)); arc.AddString("Map WAD", name); } } @@ -2080,12 +2085,11 @@ static void PutSaveComment (FSerializer &arc) arc.AddString("Creation Time", comment); // Get level name - //strcpy (comment, level.level_name); - comment.Format("%s - %s\n", level.MapName.GetChars(), level.LevelName.GetChars()); + comment.Format("%s - %s\n", primaryLevel->MapName.GetChars(), primaryLevel->LevelName.GetChars()); // Append elapsed time const char *const time = GStrings("SAVECOMMENT_TIME"); - levelTime = level.time / TICRATE; + levelTime = primaryLevel->time / TICRATE; comment.AppendFormat("%s: %02d:%02d:%02d", time, levelTime/3600, (levelTime%3600)/60, levelTime%60); // Write out the comment @@ -2100,7 +2104,10 @@ static void PutSavePic (FileWriter *file, int width, int height) } else { - screen->WriteSavePic(&players[consoleplayer], file, width, height); + D_Render([&]() + { + screen->WriteSavePic(&players[consoleplayer], file, width, height); + }, false); } } @@ -2113,7 +2120,7 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio // Do not even try, if we're not in a level. (Can happen after // a demo finishes playback.) - if (level.lines.Size() == 0 || level.sectors.Size() == 0 || gamestate != GS_LEVEL) + if (primaryLevel->lines.Size() == 0 || primaryLevel->sectors.Size() == 0 || gamestate != GS_LEVEL) { return; } @@ -2129,7 +2136,7 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio insave = true; try { - G_SnapshotLevel(); + level.SnapshotLevel(); } catch(CRecoverableError &err) { @@ -2152,8 +2159,8 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio } BufferWriter savepic; - FSerializer savegameinfo; // this is for displayable info about the savegame - FSerializer savegameglobals; // and this for non-level related info that must be saved. + FSerializer savegameinfo(nullptr); // this is for displayable info about the savegame + FSerializer savegameglobals(nullptr); // and this for non-level related info that must be saved. savegameinfo.OpenWriter(true); savegameglobals.OpenWriter(save_formatted); @@ -2164,7 +2171,7 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio // put some basic info into the PNG so that this isn't lost when the image gets extracted. M_AppendPNGText(&savepic, "Software", buf); M_AppendPNGText(&savepic, "Title", description); - M_AppendPNGText(&savepic, "Current Map", level.MapName); + M_AppendPNGText(&savepic, "Current Map", primaryLevel->MapName); M_FinishPNG(&savepic); int ver = SAVEVER; @@ -2172,7 +2179,7 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio .AddString("Engine", GAMESIG) ("Save Version", ver) .AddString("Title", description) - .AddString("Current Map", level.MapName); + .AddString("Current Map", primaryLevel->MapName); PutSaveWads (savegameinfo); @@ -2382,7 +2389,7 @@ void G_BeginRecording (const char *startmap) if (startmap == NULL) { - startmap = level.MapName; + startmap = primaryLevel->MapName; } demo_p = demobuffer; @@ -2707,7 +2714,7 @@ void G_DoPlayDemo (void) { G_InitNew (mapname, false); } - else if (level.sectors.Size() == 0) + else if (primaryLevel->sectors.Size() == 0) { I_Error("Cannot play demo without its savegame\n"); } @@ -2857,17 +2864,17 @@ bool G_CheckDemoStatus (void) return false; } -void G_StartSlideshow(FName whichone) +void G_StartSlideshow(FLevelLocals *Level, FName whichone) { gameaction = ga_slideshow; - SelectedSlideshow = whichone == NAME_None ? level.info->slideshow : whichone; + SelectedSlideshow = whichone == NAME_None ? Level->info->slideshow : whichone; } DEFINE_ACTION_FUNCTION(FLevelLocals, StartSlideshow) { - PARAM_PROLOGUE; + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_NAME(whichone); - G_StartSlideshow(whichone); + G_StartSlideshow(self, whichone); return 0; } @@ -2878,12 +2885,13 @@ DEFINE_GLOBAL_NAMED(Skins, PlayerSkins) DEFINE_GLOBAL(consoleplayer) DEFINE_GLOBAL_NAMED(PClass::AllClasses, AllClasses) DEFINE_GLOBAL_NAMED(PClassActor::AllActorClasses, AllActorClasses) +DEFINE_GLOBAL_NAMED(primaryLevel, Level) DEFINE_GLOBAL(validcount) DEFINE_GLOBAL(multiplayer) DEFINE_GLOBAL(gameaction) DEFINE_GLOBAL(gamestate) DEFINE_GLOBAL(skyflatnum) -DEFINE_GLOBAL_NAMED(bglobal.freeze, globalfreeze) +DEFINE_GLOBAL(globalfreeze) DEFINE_GLOBAL(gametic) DEFINE_GLOBAL(demoplayback) DEFINE_GLOBAL(automapactive); diff --git a/src/g_game.h b/src/g_game.h index 35b8f479c7..a21c80cc65 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -32,15 +32,40 @@ struct event_t; #include "dobjgc.h" +// The current state of the game: whether we are +// playing, gazing at the intermission screen, +// the game final animation, or a demo. +enum gamestate_t : int +{ + GS_LEVEL, + GS_INTERMISSION, + GS_FINALE, + GS_DEMOSCREEN, + GS_FULLCONSOLE, // [RH] Fullscreen console + GS_HIDECONSOLE, // [RH] The menu just did something that should hide fs console + GS_STARTUP, // [RH] Console is fullscreen, and game is just starting + GS_TITLELEVEL, // [RH] A combination of GS_LEVEL and GS_DEMOSCREEN + + GS_FORCEWIPE = -1, + GS_FORCEWIPEFADE = -2, + GS_FORCEWIPEBURN = -3, + GS_FORCEWIPEMELT = -4 +}; + +extern gamestate_t gamestate; + +// wipegamestate can be set to -1 +// to force a wipe on the next draw +extern gamestate_t wipegamestate; + + class AActor; +struct FLevelLocals; // // GAME // -void G_DeathMatchSpawnPlayer (int playernum); - -struct FPlayerStart *G_PickPlayerStart (int playernum, int flags = 0); enum { PPS_FORCERANDOM = 1, @@ -67,13 +92,11 @@ void G_PlayDemo (char* name); void G_TimeDemo (const char* name); bool G_CheckDemoStatus (void); -void G_WorldDone (void); - void G_Ticker (void); bool G_Responder (event_t* ev); void G_ScreenShot (char *filename); -void G_StartSlideshow(FName whichone); +void G_StartSlideshow(FLevelLocals *Level, FName whichone); FString G_BuildSaveName (const char *prefix, int slot); @@ -89,7 +112,6 @@ enum EFinishLevelType void G_PlayerFinishLevel (int player, EFinishLevelType mode, int flags); -void G_DoReborn (int playernum, bool freshbot); void G_DoPlayerPop(int playernum); // Adds pitch to consoleplayer's viewpitch and clamps it diff --git a/src/g_hub.cpp b/src/g_hub.cpp index 3cac5b17f7..677b991609 100644 --- a/src/g_hub.cpp +++ b/src/g_hub.cpp @@ -76,7 +76,7 @@ struct FHubInfo static TArray hubdata; -void G_LeavingHub(int mode, cluster_info_t * cluster, wbstartstruct_t * wbs) +void G_LeavingHub(FLevelLocals *Level, int mode, cluster_info_t * cluster, wbstartstruct_t * wbs) { unsigned int i, j; @@ -84,7 +84,7 @@ void G_LeavingHub(int mode, cluster_info_t * cluster, wbstartstruct_t * wbs) { for (i = 0; i < hubdata.Size(); i++) { - if (hubdata[i].levelnum == level.levelnum) + if (hubdata[i].levelnum == Level->levelnum) { hubdata[i] = *wbs; break; @@ -95,13 +95,13 @@ void G_LeavingHub(int mode, cluster_info_t * cluster, wbstartstruct_t * wbs) hubdata[hubdata.Reserve(1)] = *wbs; } - hubdata[i].levelnum = level.levelnum; + hubdata[i].levelnum = Level->levelnum; if (!multiplayer && !deathmatch) { // The player counters don't work in hubs - hubdata[i].plyr[0].skills = level.killed_monsters; - hubdata[i].plyr[0].sitems = level.found_items; - hubdata[i].plyr[0].ssecret = level.found_secrets; + hubdata[i].plyr[0].skills = Level->killed_monsters; + hubdata[i].plyr[0].sitems = Level->found_items; + hubdata[i].plyr[0].ssecret = Level->found_secrets; } @@ -129,11 +129,11 @@ void G_LeavingHub(int mode, cluster_info_t * cluster, wbstartstruct_t * wbs) { if (cluster->flags & CLUSTER_LOOKUPNAME) { - level.LevelName = GStrings(cluster->ClusterName); + Level->LevelName = GStrings(cluster->ClusterName); } else { - level.LevelName = cluster->ClusterName; + Level->LevelName = cluster->ClusterName; } } } @@ -185,4 +185,4 @@ void G_SerializeHub(FSerializer &arc) void G_ClearHubInfo() { hubdata.Clear(); -} \ No newline at end of file +} diff --git a/src/g_hub.h b/src/g_hub.h index 372546b833..855402de78 100644 --- a/src/g_hub.h +++ b/src/g_hub.h @@ -4,9 +4,10 @@ struct cluster_info_t; struct wbstartstruct_t; class FSerializer; +struct FLevelLocals; void G_SerializeHub (FSerializer &file); -void G_LeavingHub(int mode, cluster_info_t * cluster, struct wbstartstruct_t * wbs); +void G_LeavingHub(FLevelLocals *Level, int mode, cluster_info_t * cluster, struct wbstartstruct_t * wbs); #endif diff --git a/src/g_level.cpp b/src/g_level.cpp index 9b0875441c..c490142722 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -46,7 +46,7 @@ #include "w_wad.h" #include "am_map.h" #include "c_dispatch.h" -#include "i_system.h" + #include "p_setup.h" #include "p_local.h" #include "r_sky.h" @@ -79,6 +79,8 @@ #include "events.h" #include "i_music.h" #include "a_dynlight.h" +#include "p_conversation.h" +#include "p_effect.h" #include "gi.h" @@ -108,17 +110,26 @@ void G_VerifySkill(); CUSTOM_CVAR(Bool, gl_brightfog, false, CVAR_ARCHIVE | CVAR_NOINITCALL) { - if (level.info == nullptr || level.info->brightfog == -1) level.brightfog = self; + for (auto Level : AllLevels()) + { + if (Level->info == nullptr || Level->info->brightfog == -1) Level->brightfog = self; + } } CUSTOM_CVAR(Bool, gl_lightadditivesurfaces, false, CVAR_ARCHIVE | CVAR_NOINITCALL) { - if (level.info == nullptr || level.info->lightadditivesurfaces == -1) level.lightadditivesurfaces = self; + for (auto Level : AllLevels()) + { + if (Level->info == nullptr || Level->info->lightadditivesurfaces == -1) Level->lightadditivesurfaces = self; + } } CUSTOM_CVAR(Bool, gl_notexturefill, false, CVAR_NOINITCALL) { - if (level.info == nullptr || level.info->notexturefill == -1) level.notexturefill = self; + for (auto Level : AllLevels()) + { + if (Level->info == nullptr || Level->info->notexturefill == -1) Level->notexturefill = self; + } } CUSTOM_CVAR(Int, gl_lightmode, 3, CVAR_ARCHIVE | CVAR_NOINITCALL) @@ -128,7 +139,10 @@ CUSTOM_CVAR(Int, gl_lightmode, 3, CVAR_ARCHIVE | CVAR_NOINITCALL) else if (newself > 4) newself = 8; else if (newself < 0) newself = 0; if (self != newself) self = newself; - else if ((level.info == nullptr || level.info->lightmode == ELightMode::NotSet)) level.lightMode = (ELightMode)*self; + else for (auto Level : AllLevels()) + { + if ((Level->info == nullptr || Level->info->lightmode == ELightMode::NotSet)) Level->lightMode = (ELightMode)*self; + } } @@ -153,6 +167,8 @@ extern bool sendpause, sendsave, sendturn180, SendLand; void *statcopy; // for statistics driver FLevelLocals level; // info about current level +FLevelLocals *primaryLevel = &level; // level for which to display the user interface. +FLevelLocals *currentVMLevel = &level; // level which currently ticks. Used as global input to the VM and some functions called by it. //========================================================================== @@ -200,7 +216,7 @@ CCMD (map) if (argv.argc() > 1) { const char *mapname = argv[1]; - if (!strcmp(mapname, "*")) mapname = level.MapName.GetChars(); + if (!strcmp(mapname, "*")) mapname = primaryLevel->MapName.GetChars(); try { @@ -250,7 +266,7 @@ UNSAFE_CCMD(recordmap) if (argv.argc() > 2) { const char *mapname = argv[2]; - if (!strcmp(mapname, "*")) mapname = level.MapName.GetChars(); + if (!strcmp(mapname, "*")) mapname = primaryLevel->MapName.GetChars(); try { @@ -341,7 +357,7 @@ void G_NewInit () int i; // Destory all old player refrences that may still exist - TThinkerIterator it(NAME_PlayerPawn, STAT_TRAVELLING); + TThinkerIterator it(primaryLevel, NAME_PlayerPawn, STAT_TRAVELLING); AActor *pawn, *next; next = it.Next(); @@ -437,8 +453,8 @@ void G_InitNew (const char *mapname, bool bTitleLevel) int i; // did we have any level before? - if (level.info != nullptr) - E_WorldUnloadedUnsafe(); + if (primaryLevel->info != nullptr) + staticEventManager.WorldUnloaded(); if (!savegamerestore) { @@ -454,7 +470,10 @@ void G_InitNew (const char *mapname, bool bTitleLevel) UnlatchCVars (); G_VerifySkill(); UnlatchCVars (); - DThinker::DestroyThinkersInList(STAT_STATIC); + for (auto Level : AllLevels()) + { + Level->Thinkers.DestroyThinkersInList(STAT_STATIC); + } if (paused) { @@ -465,19 +484,6 @@ void G_InitNew (const char *mapname, bool bTitleLevel) ST_CreateStatusBar(bTitleLevel); setsizeneeded = true; - const bool setlogtext = !savegamerestore && (gameinfo.gametype == GAME_Strife - || (SBarInfoScript[SCRIPT_CUSTOM] != nullptr && SBarInfoScript[SCRIPT_CUSTOM]->GetGameType() == GAME_Strife)); - - if (setlogtext) - { - // Set the initial quest log text for Strife. - for (i = 0; i < MAXPLAYERS; ++i) - { - if (playeringame[i]) - players[i].SetLogText ("$TXT_FINDHELP"); - } - } - // [RH] If this map doesn't exist, bomb out if (!P_CheckMapData(mapname)) { @@ -497,10 +503,10 @@ void G_InitNew (const char *mapname, bool bTitleLevel) } FRandom::StaticClearRandom (); P_ClearACSVars(true); - level.time = 0; - level.maptime = 0; - level.totaltime = 0; - level.spawnindex = 0; + primaryLevel->time = 0; + primaryLevel->maptime = 0; + primaryLevel->totaltime = 0; + primaryLevel->spawnindex = 0; if (!multiplayer || !deathmatch) { @@ -523,10 +529,9 @@ void G_InitNew (const char *mapname, bool bTitleLevel) //Added by MC: Initialize bots. if (!deathmatch) { - bglobal.Init (); + primaryLevel->BotInfo.Init (); } - level.MapName = mapname; if (bTitleLevel) { gamestate = GS_TITLELEVEL; @@ -536,7 +541,17 @@ void G_InitNew (const char *mapname, bool bTitleLevel) gamestate = GS_LEVEL; } - G_DoLoadLevel (0, false, !savegamerestore); + G_DoLoadLevel (mapname, 0, false, !savegamerestore); + + if (!savegamerestore && (gameinfo.gametype == GAME_Strife || (SBarInfoScript[SCRIPT_CUSTOM] != nullptr && SBarInfoScript[SCRIPT_CUSTOM]->GetGameType() == GAME_Strife))) + { + // Set the initial quest log text for Strife. + for (i = 0; i < MAXPLAYERS; ++i) + { + if (playeringame[i]) + players[i].SetLogText("$TXT_FINDHELP"); + } + } } // @@ -558,9 +573,12 @@ static bool unloading; EXTERN_CVAR(Bool, sv_singleplayerrespawn) -void G_ChangeLevel(const char *levelname, int position, int flags, int nextSkill) +void FLevelLocals::ChangeLevel(const char *levelname, int position, int flags, int nextSkill) { - level_info_t *nextinfo = NULL; + if (!isPrimaryLevel()) return; // only the primary level may exit. + + FString nextlevel; + level_info_t *nextinfo = nullptr; if (unloading) { @@ -576,9 +594,9 @@ void G_ChangeLevel(const char *levelname, int position, int flags, int nextSkill { // end the game levelname = NULL; - if (!level.NextMap.Compare("enDSeQ",6)) + if (!NextMap.Compare("enDSeQ",6)) { - nextlevel = level.NextMap; // If there is already an end sequence please leave it alone! + nextlevel = NextMap; // If there is already an end sequence please leave it alone! } else { @@ -614,15 +632,14 @@ void G_ChangeLevel(const char *levelname, int position, int flags, int nextSkill if (flags & CHANGELEVEL_NOINTERMISSION) { - level.flags |= LEVEL_NOINTERMISSION; + flags |= LEVEL_NOINTERMISSION; } - cluster_info_t *thiscluster = FindClusterInfo (level.cluster); + cluster_info_t *thiscluster = FindClusterInfo (cluster); cluster_info_t *nextcluster = nextinfo? FindClusterInfo (nextinfo->cluster) : NULL; startpos = position; - gameaction = ga_completed; - level.SetMusicVolume(1.0); + SetMusicVolume(1.0); if (nextinfo != NULL) { @@ -640,38 +657,42 @@ void G_ChangeLevel(const char *levelname, int position, int flags, int nextSkill } changeflags = flags; - bglobal.End(); //Added by MC: + BotInfo.End(); //Added by MC: // [RH] Give scripts a chance to do something unloading = true; - level.Behaviors.StartTypedScripts (SCRIPT_Unloading, NULL, false, 0, true); + Behaviors.StartTypedScripts (SCRIPT_Unloading, NULL, false, 0, true); // [ZZ] safe world unload - E_WorldUnloaded(); + for (auto Level : AllLevels()) + { + // Todo: This must be exolicitly sandboxed! + Level->localEventManager->WorldUnloaded(); + } // [ZZ] unsafe world unload (changemap != map) - E_WorldUnloadedUnsafe(); + staticEventManager.WorldUnloaded(); unloading = false; - STAT_ChangeLevel(nextlevel, &level); + STAT_ChangeLevel(nextlevel, this); if (thiscluster && (thiscluster->flags & CLUSTER_HUB)) { - if ((level.flags & LEVEL_NOINTERMISSION) || ((nextcluster == thiscluster) && !(thiscluster->flags & CLUSTER_ALLOWINTERMISSION))) + if ((flags & LEVEL_NOINTERMISSION) || ((nextcluster == thiscluster) && !(thiscluster->flags & CLUSTER_ALLOWINTERMISSION))) NoWipe = 35; D_DrawIcon = "TELEICON"; } for(int i = 0; i < MAXPLAYERS; i++) { - if (playeringame[i]) + if (PlayerInGame(i)) { - player_t *player = &players[i]; + player_t *player = Players[i]; // Un-crouch all players here. player->Uncrouch(); // If this is co-op, respawn any dead players now so they can // keep their inventory on the next map. - if ((multiplayer || level.flags2 & LEVEL2_ALLOWRESPAWN || sv_singleplayerrespawn || !!G_SkillProperty(SKILLP_PlayerRespawn)) + if ((multiplayer || flags2 & LEVEL2_ALLOWRESPAWN || sv_singleplayerrespawn || !!G_SkillProperty(SKILLP_PlayerRespawn)) && !deathmatch && player->playerstate == PST_DEAD) { // Copied from the end of P_DeathThink [[ @@ -682,10 +703,13 @@ void G_ChangeLevel(const char *levelname, int position, int flags, int nextSkill player->mo->special1 = 0; } // ]] - G_DoReborn(i, false); + DoReborn(i, false); } } } + // Set global transition state. + gameaction = ga_completed; + ::nextlevel = nextlevel; } //========================================================================== @@ -693,20 +717,15 @@ void G_ChangeLevel(const char *levelname, int position, int flags, int nextSkill // //========================================================================== -const char *G_GetExitMap() +const char *FLevelLocals::GetSecretExitMap() { - return level.NextMap; -} + const char *nextmap = NextMap; -const char *G_GetSecretExitMap() -{ - const char *nextmap = level.NextMap; - - if (level.NextSecretMap.Len() > 0) + if (NextSecretMap.Len() > 0) { - if (P_CheckMapData(level.NextSecretMap)) + if (P_CheckMapData(NextSecretMap)) { - nextmap = level.NextSecretMap; + nextmap = NextSecretMap; } } return nextmap; @@ -717,16 +736,17 @@ const char *G_GetSecretExitMap() // //========================================================================== -void G_ExitLevel (int position, bool keepFacing) + +void FLevelLocals::ExitLevel (int position, bool keepFacing) { - level.flags3 |= LEVEL3_EXITNORMALUSED; - G_ChangeLevel(G_GetExitMap(), position, keepFacing ? CHANGELEVEL_KEEPFACING : 0); + flags3 |= LEVEL3_EXITNORMALUSED; + ChangeLevel(NextMap, position, keepFacing ? CHANGELEVEL_KEEPFACING : 0); } -void G_SecretExitLevel (int position) +void FLevelLocals::SecretExitLevel (int position) { - level.flags3 |= LEVEL3_EXITSECRETUSED; - G_ChangeLevel(G_GetSecretExitMap(), position, 0); + flags3 |= LEVEL3_EXITSECRETUSED; + ChangeLevel(GetSecretExitMap(), position, 0); } //========================================================================== @@ -736,42 +756,61 @@ void G_SecretExitLevel (int position) void G_DoCompleted (void) { - int i; - gameaction = ga_nothing; - + if ( gamestate == GS_DEMOSCREEN || gamestate == GS_FULLCONSOLE || gamestate == GS_STARTUP) { return; } - + if (gamestate == GS_TITLELEVEL) { - level.MapName = nextlevel; - G_DoLoadLevel (startpos, false, false); + G_DoLoadLevel (nextlevel, startpos, false, false); startpos = 0; viewactive = true; return; } - - // [RH] Mark this level as having been visited - if (!(level.flags & LEVEL_CHANGEMAPCHEAT)) - FindLevelInfo (level.MapName)->flags |= LEVEL_VISITED; - + if (automapactive) AM_Stop (); - wminfo.finished_ep = level.cluster - 1; - wminfo.LName0 = TexMan.CheckForTexture(level.info->PName, ETextureType::MiscPatch); - wminfo.current = level.MapName; + // Close the conversation menu if open. + P_FreeStrifeConversations (); + + if (primaryLevel->DoCompleted(nextlevel, wminfo)) + { + gamestate = GS_INTERMISSION; + viewactive = false; + automapactive = false; + + // [RH] If you ever get a statistics driver operational, adapt this. + // if (statcopy) + // memcpy (statcopy, &wminfo, sizeof(wminfo)); + + WI_Start (&wminfo); + } +} + + +bool FLevelLocals::DoCompleted (FString nextlevel, wbstartstruct_t &wminfo) +{ + int i; + + // [RH] Mark this level as having been visited + if (!(flags & LEVEL_CHANGEMAPCHEAT)) + FindLevelInfo (MapName)->flags |= LEVEL_VISITED; + + wminfo.finished_ep = cluster - 1; + wminfo.LName0 = TexMan.CheckForTexture(info->PName, ETextureType::MiscPatch); + wminfo.current = MapName; if (deathmatch && (dmflags & DF_SAME_LEVEL) && - !(level.flags & LEVEL_CHANGEMAPCHEAT)) + !(flags & LEVEL_CHANGEMAPCHEAT)) { - wminfo.next = level.MapName; + wminfo.next = MapName; wminfo.LName1 = wminfo.LName0; } else @@ -793,32 +832,31 @@ void G_DoCompleted (void) nextlevel = wminfo.next; wminfo.next_ep = FindLevelInfo (wminfo.next)->cluster - 1; - wminfo.maxkills = level.total_monsters; - wminfo.maxitems = level.total_items; - wminfo.maxsecret = level.total_secrets; + wminfo.maxkills = total_monsters; + wminfo.maxitems = total_items; + wminfo.maxsecret = total_secrets; wminfo.maxfrags = 0; - wminfo.partime = TICRATE * level.partime; - wminfo.sucktime = level.sucktime; + wminfo.partime = TICRATE * partime; + wminfo.sucktime = sucktime; wminfo.pnum = consoleplayer; - wminfo.totaltime = level.totaltime; + wminfo.totaltime = totaltime; for (i=0 ; ikillcount; + wminfo.plyr[i].sitems = Players[i]->itemcount; + wminfo.plyr[i].ssecret = Players[i]->secretcount; + wminfo.plyr[i].stime = time; + memcpy (wminfo.plyr[i].frags, Players[i]->frags, sizeof(wminfo.plyr[i].frags)); + wminfo.plyr[i].fragcount = Players[i]->fragcount; } - // [RH] If we're in a hub and staying within that hub, take a snapshot - // of the level. If we're traveling to a new hub, take stuff from + // [RH] If we're in a hub and staying within that hub, take a snapshot. + // If we're traveling to a new hub, take stuff from // the player and clear the world vars. If this is just an // ordinary cluster (not a hub), take stuff from the player, but // leave the world vars alone. - cluster_info_t *thiscluster = FindClusterInfo (level.cluster); + cluster_info_t *thiscluster = FindClusterInfo (cluster); cluster_info_t *nextcluster = FindClusterInfo (wminfo.next_ep+1); // next_ep is cluster-1 EFinishLevelType mode; @@ -840,7 +878,7 @@ void G_DoCompleted (void) } // Intermission stats for entire hubs - G_LeavingHub(mode, thiscluster, &wminfo); + G_LeavingHub(this, mode, thiscluster, &wminfo); for (i = 0; i < MAXPLAYERS; i++) { @@ -852,16 +890,16 @@ void G_DoCompleted (void) if (mode == FINISH_SameHub) { // Remember the level's state for re-entry. - if (!(level.flags2 & LEVEL2_FORGETSTATE)) + if (!(flags2 & LEVEL2_FORGETSTATE)) { - G_SnapshotLevel (); + SnapshotLevel (); // Do not free any global strings this level might reference // while it's not loaded. - level.Behaviors.LockLevelVarStrings(level.levelnum); + Behaviors.LockLevelVarStrings(levelnum); } else { // Make sure we don't have a snapshot lying around from before. - level.info->Snapshot.Clean(); + info->Snapshot.Clean(); } } else @@ -872,30 +910,21 @@ void G_DoCompleted (void) { // Reset world variables for the new hub. P_ClearACSVars(false); } - level.time = 0; - level.maptime = 0; - level.spawnindex = 0; + time = 0; + maptime = 0; + spawnindex = 0; } finishstate = mode; if (!deathmatch && - ((level.flags & LEVEL_NOINTERMISSION) || + ((flags & LEVEL_NOINTERMISSION) || ((nextcluster == thiscluster) && (thiscluster->flags & CLUSTER_HUB) && !(thiscluster->flags & CLUSTER_ALLOWINTERMISSION)))) { - G_WorldDone (); - return; + WorldDone (); + return false; } - - gamestate = GS_INTERMISSION; - viewactive = false; - automapactive = false; - -// [RH] If you ever get a statistics driver operational, adapt this. -// if (statcopy) -// memcpy (statcopy, &wminfo, sizeof(wminfo)); - - WI_Start (&wminfo); + return true; } //========================================================================== @@ -907,6 +936,7 @@ class DAutosaver : public DThinker { DECLARE_CLASS (DAutosaver, DThinker) public: + void Construct() {} void Tick (); }; @@ -926,10 +956,47 @@ void DAutosaver::Tick () extern gamestate_t wipegamestate; -void G_DoLoadLevel (int position, bool autosave, bool newGame) -{ - static int lastposition = 0; +void G_DoLoadLevel(const FString &nextmapname, int position, bool autosave, bool newGame) +{ gamestate_t oldgs = gamestate; + + // Here the new level needs to be allocated. + primaryLevel->DoLoadLevel(nextmapname, position, autosave, newGame); + + // Reset the global state for the new level. + if (wipegamestate == GS_LEVEL) + wipegamestate = GS_FORCEWIPE; + + if (gamestate != GS_TITLELEVEL) + { + gamestate = GS_LEVEL; + } + + gameaction = ga_nothing; + + // clear cmd building stuff + ResetButtonStates(); + + SendItemUse = nullptr; + SendItemDrop = nullptr; + mousex = mousey = 0; + sendpause = sendsave = sendturn180 = SendLand = false; + LocalViewAngle = 0; + LocalViewPitch = 0; + paused = 0; + + if (demoplayback || oldgs == GS_STARTUP || oldgs == GS_TITLELEVEL) + C_HideConsole(); + + C_FlushDisplay(); + P_ResetSightCounters(true); + +} + +void FLevelLocals::DoLoadLevel(const FString &nextmapname, int position, bool autosave, bool newGame) +{ + MapName = nextmapname; + static int lastposition = 0; int i; if (NextSkill >= 0) @@ -945,31 +1012,26 @@ void G_DoLoadLevel (int position, bool autosave, bool newGame) else lastposition = position; - G_InitLevelLocals (); + Init(); StatusBar->DetachAllMessages (); // Force 'teamplay' to 'true' if need be. - if (level.flags2 & LEVEL2_FORCETEAMPLAYON) + if (flags2 & LEVEL2_FORCETEAMPLAYON) teamplay = true; // Force 'teamplay' to 'false' if need be. - if (level.flags2 & LEVEL2_FORCETEAMPLAYOFF) + if (flags2 & LEVEL2_FORCETEAMPLAYOFF) teamplay = false; - FString mapname = level.MapName; + if (isPrimaryLevel()) + { + FString mapname = nextmapname; mapname.ToLower(); - Printf ( + Printf( "\n\35\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36" "\36\36\36\36\36\36\36\36\36\36\36\36\37\n\n" TEXTCOLOR_BOLD "%s - %s\n\n", - mapname.GetChars(), level.LevelName.GetChars()); - - if (wipegamestate == GS_LEVEL) - wipegamestate = GS_FORCEWIPE; - - if (gamestate != GS_TITLELEVEL) - { - gamestate = GS_LEVEL; + mapname.GetChars(), LevelName.GetChars()); } // Set the sky map. @@ -979,71 +1041,47 @@ void G_DoLoadLevel (int position, bool autosave, bool newGame) // setting one. skyflatnum = TexMan.GetTextureID (gameinfo.SkyFlatName, ETextureType::Flat, FTextureManager::TEXMAN_Overridable); - // DOOM determines the sky texture to be used - // depending on the current episode and the game version. - // [RH] Fetch sky parameters from FLevelLocals. - sky1texture = level.skytexture1; - sky2texture = level.skytexture2; - // [RH] Set up details about sky rendering - R_InitSkyMap (); + InitSkyMap (this); for (i = 0; i < MAXPLAYERS; i++) { - if (playeringame[i] && (deathmatch || players[i].playerstate == PST_DEAD)) - players[i].playerstate = PST_ENTER; // [BC] - memset (players[i].frags,0,sizeof(players[i].frags)); + if (PlayerInGame(i) && (deathmatch || Players[i]->playerstate == PST_DEAD)) + Players[i]->playerstate = PST_ENTER; // [BC] + memset (Players[i]->frags,0,sizeof(Players[i]->frags)); if (!(dmflags2 & DF2_YES_KEEPFRAGS) && (alwaysapplydmflags || deathmatch)) - players[i].fragcount = 0; + Players[i]->fragcount = 0; } if (changeflags & CHANGELEVEL_NOMONSTERS) { - level.flags2 |= LEVEL2_NOMONSTERS; + flags2 |= LEVEL2_NOMONSTERS; } else { - level.flags2 &= ~LEVEL2_NOMONSTERS; + flags2 &= ~LEVEL2_NOMONSTERS; } if (changeflags & CHANGELEVEL_PRERAISEWEAPON) { - level.flags2 |= LEVEL2_PRERAISEWEAPON; + flags2 |= LEVEL2_PRERAISEWEAPON; } - level.maptime = 0; + maptime = 0; if (newGame) { - E_NewGame(EventHandlerType::Global); + staticEventManager.NewGame(); } - P_SetupLevel (level.MapName, position, newGame); + P_SetupLevel (this, position, newGame); - AM_LevelInit(); - // [RH] Start lightning, if MAPINFO tells us to - if (level.flags & LEVEL_STARTLIGHTNING) - { - P_StartLightning (); - } - gameaction = ga_nothing; - - // clear cmd building stuff - ResetButtonStates (); - - SendItemUse = NULL; - SendItemDrop = NULL; - mousex = mousey = 0; - sendpause = sendsave = sendturn180 = SendLand = false; - LocalViewAngle = 0; - LocalViewPitch = 0; - paused = 0; //Added by MC: Initialize bots. if (deathmatch) { - bglobal.Init (); + BotInfo.Init (); } if (timingdemo) @@ -1057,28 +1095,28 @@ void G_DoLoadLevel (int position, bool autosave, bool newGame) } } - level.starttime = gametic; + starttime = gametic; - G_UnSnapshotLevel (!savegamerestore); // [RH] Restore the state of the level. - int pnumerr = G_FinishTravel (); + UnSnapshotLevel (!savegamerestore); // [RH] Restore the state of the + int pnumerr = FinishTravel (); - if (!level.FromSnapshot) + if (!FromSnapshot) { for (int i = 0; imo != nullptr) + P_PlayerStartStomp(Players[i]->mo); } } // For each player, if they are viewing through a player, make sure it is themselves. for (int ii = 0; ii < MAXPLAYERS; ++ii) { - if (playeringame[ii]) + if (PlayerInGame(ii)) { - if (players[ii].camera == NULL || players[ii].camera->player != NULL) + if (Players[ii]->camera == nullptr || Players[ii]->camera->player != nullptr) { - players[ii].camera = players[ii].mo; + Players[ii]->camera = Players[ii]->mo; } if (savegamerestore) @@ -1086,39 +1124,35 @@ void G_DoLoadLevel (int position, bool autosave, bool newGame) continue; } - const bool fromSnapshot = level.FromSnapshot; - E_PlayerEntered(ii, fromSnapshot && finishstate == FINISH_SameHub); + const bool fromSnapshot = FromSnapshot; + localEventManager->PlayerEntered(ii, fromSnapshot && finishstate == FINISH_SameHub); if (fromSnapshot) { // ENTER scripts are being handled when the player gets spawned, this cannot be changed due to its effect on voodoo dolls. - level.Behaviors.StartTypedScripts(SCRIPT_Return, players[ii].mo, true); + Behaviors.StartTypedScripts(SCRIPT_Return, Players[ii]->mo, true); } } } - if (level.FromSnapshot) + if (FromSnapshot) { // [Nash] run REOPEN scripts upon map re-entry - level.Behaviors.StartTypedScripts(SCRIPT_Reopen, NULL, false); + Behaviors.StartTypedScripts(SCRIPT_Reopen, NULL, false); } StatusBar->AttachToPlayer (&players[consoleplayer]); // unsafe world load - E_WorldLoadedUnsafe(); + staticEventManager.WorldLoaded(); // regular world load (savegames are handled internally) - E_WorldLoaded(); - P_DoDeferedScripts (); // [RH] Do script actions that were triggered on another map. + localEventManager->WorldLoaded(); + DoDeferedScripts (); // [RH] Do script actions that were triggered on another map. - if (demoplayback || oldgs == GS_STARTUP || oldgs == GS_TITLELEVEL) - C_HideConsole (); - C_FlushDisplay (); - - // [RH] Always save the game when entering a new level. + // [RH] Always save the game when entering a new if (autosave && !savegamerestore && disableautosave < 1) { - DAutosaver GCCNOWARN *dummy = Create(); + CreateThinker(); } if (pnumerr > 0) { @@ -1133,17 +1167,24 @@ void G_DoLoadLevel (int position, bool autosave, bool newGame) // //========================================================================== -void G_WorldDone (void) +void FLevelLocals::WorldDone (void) { cluster_info_t *nextcluster; cluster_info_t *thiscluster; gameaction = ga_worlddone; - if (level.flags & LEVEL_CHANGEMAPCHEAT) + + //Added by mc + if (deathmatch) + { + BotInfo.RemoveAllBots(this, consoleplayer != Net_Arbitrator); + } + + if (flags & LEVEL_CHANGEMAPCHEAT) return; - thiscluster = FindClusterInfo (level.cluster); + thiscluster = FindClusterInfo (cluster); if (strncmp (nextlevel, "enDSeQ", 6) == 0) { @@ -1151,8 +1192,8 @@ void G_WorldDone (void) // Strife needs a special case here to choose between good and sad ending. Bad is handled elsewhere. if (endsequence == NAME_Inter_Strife) { - if (players[0].mo->FindInventory (NAME_QuestItem25) || - players[0].mo->FindInventory (NAME_QuestItem28)) + if (Players[0]->mo->FindInventory (NAME_QuestItem25) || + Players[0]->mo->FindInventory (NAME_QuestItem28)) { endsequence = NAME_Inter_Strife_Good; } @@ -1162,7 +1203,7 @@ void G_WorldDone (void) } } - auto ext = level.info->ExitMapTexts.CheckKey(level.flags3 & LEVEL3_EXITSECRETUSED ? NAME_Secret : NAME_Normal); + auto ext = info->ExitMapTexts.CheckKey(flags3 & LEVEL3_EXITSECRETUSED ? NAME_Secret : NAME_Normal); if (ext != nullptr && (ext->mDefined & FExitText::DEF_TEXT)) { F_StartFinale(ext->mDefined & FExitText::DEF_MUSIC ? ext->mMusic : gameinfo.finaleMusic, @@ -1190,9 +1231,9 @@ void G_WorldDone (void) { FExitText *ext = nullptr; - if (level.flags3 & LEVEL3_EXITSECRETUSED) ext = level.info->ExitMapTexts.CheckKey(NAME_Secret); - else if (level.flags3 & LEVEL3_EXITNORMALUSED) ext = level.info->ExitMapTexts.CheckKey(NAME_Normal); - if (ext == nullptr) ext = level.info->ExitMapTexts.CheckKey(nextlevel); + if (flags3 & LEVEL3_EXITSECRETUSED) ext = info->ExitMapTexts.CheckKey(NAME_Secret); + else if (flags3 & LEVEL3_EXITNORMALUSED) ext = info->ExitMapTexts.CheckKey(NAME_Normal); + if (ext == nullptr) ext = info->ExitMapTexts.CheckKey(nextlevel); if (ext != nullptr) { @@ -1213,7 +1254,7 @@ void G_WorldDone (void) nextcluster = FindClusterInfo (FindLevelInfo (nextlevel)->cluster); - if (nextcluster->cluster != level.cluster && !deathmatch) + if (nextcluster->cluster != cluster && !deathmatch) { // Only start the finale if the next level's cluster is different // than the current one and we're not in deathmatch. @@ -1243,7 +1284,7 @@ void G_WorldDone (void) DEFINE_ACTION_FUNCTION(FLevelLocals, WorldDone) { - G_WorldDone(); + primaryLevel->WorldDone(); return 0; } @@ -1259,13 +1300,10 @@ void G_DoWorldDone (void) { // Don't crash if no next map is given. Just repeat the current one. Printf ("No next map specified.\n"); + nextlevel = primaryLevel->MapName; } - else - { - level.MapName = nextlevel; - } - G_StartTravel (); - G_DoLoadLevel (startpos, true, false); + primaryLevel->StartTravel (); + G_DoLoadLevel (nextlevel, startpos, true, false); startpos = 0; gameaction = ga_nothing; viewactive = true; @@ -1281,7 +1319,7 @@ void G_DoWorldDone (void) // //========================================================================== -void G_StartTravel () +void FLevelLocals::StartTravel () { if (deathmatch) return; @@ -1290,12 +1328,12 @@ void G_StartTravel () { if (playeringame[i]) { - AActor *pawn = players[i].mo; + AActor *pawn = Players[i]->mo; AActor *inv; - players[i].camera = nullptr; + Players[i]->camera = nullptr; // Only living players travel. Dead ones get a new body on the new level. - if (players[i].health > 0) + if (Players[i]->health > 0) { pawn->UnlinkFromWorld (nullptr); int tid = pawn->tid; // Save TID @@ -1314,7 +1352,7 @@ void G_StartTravel () } } - bglobal.StartTravel (); + BotInfo.StartTravel (); } //========================================================================== @@ -1328,9 +1366,9 @@ void G_StartTravel () // //========================================================================== -int G_FinishTravel () +int FLevelLocals::FinishTravel () { - TThinkerIterator it (NAME_PlayerPawn, STAT_TRAVELLING); + auto it = GetThinkerIterator(NAME_PlayerPawn, STAT_TRAVELLING); AActor *pawn, *pawndup, *oldpawn, *next; AActor *inv; FPlayerStart *start; @@ -1350,7 +1388,7 @@ int G_FinishTravel () pawndup = pawn->player->mo; assert (pawn != pawndup); - start = G_PickPlayerStart(pnum, 0); + start = PickPlayerStart(pnum, 0); if (start == NULL) { if (pawndup != nullptr) @@ -1369,7 +1407,7 @@ int G_FinishTravel () // The player being spawned here is a short lived dummy and // must not start any ENTER script or big problems will happen. - pawndup = P_SpawnPlayer(start, pnum, SPF_TEMPPLAYER); + pawndup = SpawnPlayer(start, pnum, SPF_TEMPPLAYER); if (pawndup != NULL) { if (!(changeflags & CHANGELEVEL_KEEPFACING)) @@ -1434,12 +1472,12 @@ int G_FinishTravel () pawns[pawnsnum++] = pawn; } - bglobal.FinishTravel (); + BotInfo.FinishTravel (); // make sure that, after travelling has completed, no travelling thinkers are left. // Since this list is excluded from regular thinker cleaning, anything that may survive through here // will endlessly multiply and severely break the following savegames or just simply crash on broken pointers. - DThinker::DestroyThinkersInList(STAT_TRAVELLING); + Thinkers.DestroyThinkersInList(STAT_TRAVELLING); return failnum; } @@ -1448,97 +1486,116 @@ int G_FinishTravel () // //========================================================================== -void G_InitLevelLocals () +FLevelLocals::FLevelLocals() : Behaviors(this), tagManager(this) { - level_info_t *info; + // Make sure that these point to the right data all the time. + // This will be needed for as long as it takes to completely separate global UI state from per-level play state. + for (int i = 0; i < MAXPLAYERS; i++) + { + Players[i] = &players[i]; + } + localEventManager = new EventManager; +} +FLevelLocals::~FLevelLocals() +{ + if (localEventManager) delete localEventManager; +} + +//========================================================================== +// +// +//========================================================================== + +void FLevelLocals::Init() +{ + P_InitParticles(this); + P_ClearParticles(this); BaseBlendA = 0.0f; // Remove underwater blend effect, if any - level.gravity = sv_gravity * 35/TICRATE; - level.aircontrol = sv_aircontrol; - level.teamdamage = teamdamage; - level.flags = 0; - level.flags2 = 0; - level.flags3 = 0; + gravity = sv_gravity * 35/TICRATE; + aircontrol = sv_aircontrol; + teamdamage = ::teamdamage; + flags = 0; + flags2 = 0; + flags3 = 0; + ImpactDecalCount = 0; - info = FindLevelInfo (level.MapName); + info = FindLevelInfo (MapName); - level.info = info; - level.skyspeed1 = info->skyspeed1; - level.skyspeed2 = info->skyspeed2; - level.skytexture1 = TexMan.GetTextureID(info->SkyPic1, ETextureType::Wall, FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_ReturnFirst); - level.skytexture2 = TexMan.GetTextureID(info->SkyPic2, ETextureType::Wall, FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_ReturnFirst); - level.fadeto = info->fadeto; - level.cdtrack = info->cdtrack; - level.cdid = info->cdid; - level.FromSnapshot = false; - if (level.fadeto == 0) + skyspeed1 = info->skyspeed1; + skyspeed2 = info->skyspeed2; + skytexture1 = TexMan.GetTextureID(info->SkyPic1, ETextureType::Wall, FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_ReturnFirst); + skytexture2 = TexMan.GetTextureID(info->SkyPic2, ETextureType::Wall, FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_ReturnFirst); + fadeto = info->fadeto; + cdtrack = info->cdtrack; + cdid = info->cdid; + FromSnapshot = false; + if (fadeto == 0) { if (strnicmp (info->FadeTable, "COLORMAP", 8) != 0) { - level.flags |= LEVEL_HASFADETABLE; + flags |= LEVEL_HASFADETABLE; } } - level.airsupply = info->airsupply*TICRATE; - level.outsidefog = info->outsidefog; - level.WallVertLight = info->WallVertLight*2; - level.WallHorizLight = info->WallHorizLight*2; + airsupply = info->airsupply*TICRATE; + outsidefog = info->outsidefog; + WallVertLight = info->WallVertLight*2; + WallHorizLight = info->WallHorizLight*2; if (info->gravity != 0.f) { - level.gravity = info->gravity * 35/TICRATE; + gravity = info->gravity * 35/TICRATE; } if (info->aircontrol != 0.f) { - level.aircontrol = info->aircontrol; + aircontrol = info->aircontrol; } if (info->teamdamage != 0.f) { - level.teamdamage = info->teamdamage; + teamdamage = info->teamdamage; } - G_AirControlChanged (); + AirControlChanged (); cluster_info_t *clus = FindClusterInfo (info->cluster); - level.partime = info->partime; - level.sucktime = info->sucktime; - level.cluster = info->cluster; - level.clusterflags = clus ? clus->flags : 0; - level.flags |= info->flags; - level.flags2 |= info->flags2; - level.flags3 |= info->flags3; - level.levelnum = info->levelnum; - level.Music = info->Music; - level.musicorder = info->musicorder; - level.MusicVolume = 1.f; - level.HasHeightSecs = false; + partime = info->partime; + sucktime = info->sucktime; + cluster = info->cluster; + clusterflags = clus ? clus->flags : 0; + flags |= info->flags; + flags2 |= info->flags2; + flags3 |= info->flags3; + levelnum = info->levelnum; + Music = info->Music; + musicorder = info->musicorder; + MusicVolume = 1.f; + HasHeightSecs = false; - level.LevelName = level.info->LookupLevelName(); - level.NextMap = info->NextMap; - level.NextSecretMap = info->NextSecretMap; - level.F1Pic = info->F1Pic; - level.hazardcolor = info->hazardcolor; - level.hazardflash = info->hazardflash; + LevelName = info->LookupLevelName(); + NextMap = info->NextMap; + NextSecretMap = info->NextSecretMap; + F1Pic = info->F1Pic; + hazardcolor = info->hazardcolor; + hazardflash = info->hazardflash; // GL fog stuff modifiable by SetGlobalFogParameter. - level.fogdensity = info->fogdensity; - level.outsidefogdensity = info->outsidefogdensity; - level.skyfog = info->skyfog; - level.deathsequence = info->deathsequence; + fogdensity = info->fogdensity; + outsidefogdensity = info->outsidefogdensity; + skyfog = info->skyfog; + deathsequence = info->deathsequence; - level.pixelstretch = info->pixelstretch; + pixelstretch = info->pixelstretch; compatflags.Callback(); compatflags2.Callback(); - level.DefaultEnvironment = info->DefaultEnvironment; + DefaultEnvironment = info->DefaultEnvironment; - level.lightMode = info->lightmode == ELightMode::NotSet? (ELightMode)*gl_lightmode : info->lightmode; - level.brightfog = info->brightfog < 0? gl_brightfog : !!info->brightfog; - level.lightadditivesurfaces = info->lightadditivesurfaces < 0 ? gl_lightadditivesurfaces : !!info->lightadditivesurfaces; - level.notexturefill = info->notexturefill < 0 ? gl_notexturefill : !!info->notexturefill; - - FLightDefaults::SetAttenuationForLevel(); + lightMode = info->lightmode == ELightMode::NotSet? (ELightMode)*gl_lightmode : info->lightmode; + brightfog = info->brightfog < 0? gl_brightfog : !!info->brightfog; + lightadditivesurfaces = info->lightadditivesurfaces < 0 ? gl_lightadditivesurfaces : !!info->lightadditivesurfaces; + notexturefill = info->notexturefill < 0 ? gl_notexturefill : !!info->notexturefill; } //========================================================================== @@ -1629,16 +1686,16 @@ FString CalcMapName (int episode, int level) // //========================================================================== -void G_AirControlChanged () +void FLevelLocals::AirControlChanged () { - if (level.aircontrol <= 1/256.) + if (aircontrol <= 1/256.) { - level.airfriction = 1.; + airfriction = 1.; } else { // Friction is inversely proportional to the amount of control - level.airfriction = level.aircontrol * -0.0941 + 1.0004; + airfriction = aircontrol * -0.0941 + 1.0004; } } @@ -1648,19 +1705,19 @@ void G_AirControlChanged () // //========================================================================== -void G_SnapshotLevel () +void FLevelLocals::SnapshotLevel () { - level.info->Snapshot.Clean(); + info->Snapshot.Clean(); - if (level.info->isValid()) + if (info->isValid()) { - FSerializer arc; + FSerializer arc(this); if (arc.OpenWriter(save_formatted)) { SaveVersion = SAVEVER; - G_SerializeLevel(arc, false); - level.info->Snapshot = arc.GetCompressedOutput(); + Serialize(arc, false); + info->Snapshot = arc.GetCompressedOutput(); } } } @@ -1672,38 +1729,38 @@ void G_SnapshotLevel () // //========================================================================== -void G_UnSnapshotLevel (bool hubLoad) +void FLevelLocals::UnSnapshotLevel (bool hubLoad) { - if (level.info->Snapshot.mBuffer == nullptr) + if (info->Snapshot.mBuffer == nullptr) return; - if (level.info->isValid()) + if (info->isValid()) { - FSerializer arc; - if (!arc.OpenReader(&level.info->Snapshot)) + FSerializer arc(this); + if (!arc.OpenReader(&info->Snapshot)) { I_Error("Failed to load savegame"); return; } - G_SerializeLevel (arc, hubLoad); - level.FromSnapshot = true; + Serialize (arc, hubLoad); + FromSnapshot = true; - TThinkerIterator it(NAME_PlayerPawn); + auto it = GetThinkerIterator(NAME_PlayerPawn); AActor *pawn, *next; next = it.Next(); while ((pawn = next) != 0) { next = it.Next(); - if (pawn->player == NULL || pawn->player->mo == NULL || !playeringame[pawn->player - players]) + if (pawn->player == nullptr || pawn->player->mo == nullptr || !PlayerInGame(pawn->player)) { int i; // If this isn't the unmorphed original copy of a player, destroy it, because it's extra. for (i = 0; i < MAXPLAYERS; ++i) { - if (playeringame[i] && players[i].morphTics && players[i].mo->alternative == pawn) + if (PlayerInGame(i) && Players[i]->morphTics && Players[i]->mo->alternative == pawn) { break; } @@ -1717,11 +1774,11 @@ void G_UnSnapshotLevel (bool hubLoad) arc.Close(); } // No reason to keep the snapshot around once the level's been entered. - level.info->Snapshot.Clean(); + info->Snapshot.Clean(); if (hubLoad) { // Unlock ACS global strings that were locked when the snapshot was made. - level.Behaviors.UnlockLevelVarStrings(level.levelnum); + Behaviors.UnlockLevelVarStrings(levelnum); } } @@ -1950,6 +2007,104 @@ void P_ReadACSDefereds (FSerializer &arc) } +//========================================================================== +// +// This object is responsible for marking sectors during the propagate +// stage. In case there are many, many sectors, it lets us break them +// up instead of marking them all at once. +// +//========================================================================== + +class DSectorMarker : public DObject +{ + enum + { + SECTORSTEPSIZE = 32, + POLYSTEPSIZE = 120, + SIDEDEFSTEPSIZE = 240 + }; + DECLARE_CLASS(DSectorMarker, DObject) +public: + DSectorMarker(FLevelLocals *l) : Level(l), SecNum(0),PolyNum(0),SideNum(0) {} + size_t PropagateMark(); + FLevelLocals *Level; + int SecNum; + int PolyNum; + int SideNum; +}; + +IMPLEMENT_CLASS(DSectorMarker, true, false) + +//========================================================================== +// +// DSectorMarker :: PropagateMark +// +// Propagates marks across a few sectors and reinserts itself into the +// gray list if it didn't do them all. +// +//========================================================================== + +size_t DSectorMarker::PropagateMark() +{ + int i; + int marked = 0; + bool moretodo = false; + int numsectors = Level->sectors.Size(); + + for (i = 0; i < SECTORSTEPSIZE && SecNum + i < numsectors; ++i) + { + sector_t *sec = &Level->sectors[SecNum + i]; + GC::Mark(sec->SoundTarget); + GC::Mark(sec->SecActTarget); + GC::Mark(sec->floordata); + GC::Mark(sec->ceilingdata); + GC::Mark(sec->lightingdata); + for(int j = 0; j < 4; j++) GC::Mark(sec->interpolations[j]); + } + marked += i * sizeof(sector_t); + if (SecNum + i < numsectors) + { + SecNum += i; + moretodo = true; + } + + if (!moretodo && Level->Polyobjects.Size() > 0) + { + for (i = 0; i < POLYSTEPSIZE && PolyNum + i < (int)Level->Polyobjects.Size(); ++i) + { + GC::Mark(Level->Polyobjects[PolyNum + i].interpolation); + } + marked += i * sizeof(FPolyObj); + if (PolyNum + i < (int)Level->Polyobjects.Size()) + { + PolyNum += i; + moretodo = true; + } + } + if (!moretodo && Level->sides.Size() > 0) + { + for (i = 0; i < SIDEDEFSTEPSIZE && SideNum + i < (int)Level->sides.Size(); ++i) + { + side_t *side = &Level->sides[SideNum + i]; + for (int j = 0; j < 3; j++) GC::Mark(side->textures[j].interpolation); + } + marked += i * sizeof(side_t); + if (SideNum + i < (int)Level->sides.Size()) + { + SideNum += i; + moretodo = true; + } + } + // If there are more items to mark, put ourself back into the gray list. + if (moretodo) + { + Black2Gray(); + GCNext = GC::Gray; + GC::Gray = this; + } + return marked; +} + //========================================================================== // // @@ -1971,9 +2126,35 @@ void FLevelLocals::Tick () void FLevelLocals::Mark() { + if (SectorMarker == nullptr && (sectors.Size() > 0 || Polyobjects.Size() > 0 || sides.Size() > 0)) + { + SectorMarker = Create(this); + } + else if (sectors.Size() == 0 && Polyobjects.Size() == 0 && sides.Size() == 0) + { + SectorMarker = nullptr; + } + else + { + SectorMarker->SecNum = 0; + } + + GC::Mark(SectorMarker); GC::Mark(SpotState); GC::Mark(FraggleScriptThinker); GC::Mark(ACSThinker); + GC::Mark(automap); + GC::Mark(interpolator.Head); + GC::Mark(SequenceListHead); + GC::Mark(BotInfo.firstthing); + GC::Mark(BotInfo.body1); + GC::Mark(BotInfo.body2); + if (localEventManager) + { + GC::Mark(localEventManager->FirstEventHandler); + GC::Mark(localEventManager->LastEventHandler); + } + Thinkers.MarkRoots(); canvasTextureInfo.Mark(); for (auto &c : CorpseQueue) { @@ -2015,11 +2196,11 @@ void FLevelLocals::AddScroller (int secnum) void FLevelLocals::SetInterMusic(const char *nextmap) { - auto mus = level.info->MapInterMusic.CheckKey(nextmap); + auto mus = info->MapInterMusic.CheckKey(nextmap); if (mus != nullptr) S_ChangeMusic(mus->first, mus->second); - else if (level.info->InterMusic.IsNotEmpty()) - S_ChangeMusic(level.info->InterMusic, level.info->intermusicorder); + else if (info->InterMusic.IsNotEmpty()) + S_ChangeMusic(info->InterMusic, info->intermusicorder); else S_ChangeMusic(gameinfo.intermissionMusic.GetChars(), gameinfo.intermissionOrder); } @@ -2043,6 +2224,34 @@ void FLevelLocals::SetMusicVolume(float f) I_SetMusicVolume(f); } +//============================================================================ +// +// +// +//============================================================================ + +int FLevelLocals::GetInfighting() +{ + if (flags2 & LEVEL2_TOTALINFIGHTING) return 1; + if (flags2 & LEVEL2_NOINFIGHTING) return -1; + return G_SkillProperty(SKILLP_Infight); +} + +//============================================================================ +// +// transfers the compatiblity flag for old PointOnLineSide to each line. +// This gets checked in a frequently called worker function and the closer +// this info is to the data this function works on, the better. +// +//============================================================================ + +void FLevelLocals::SetCompatLineOnSide(bool state) +{ + int on = (state && (i_compatflags2 & COMPATF2_POINTONLINE)); + if (on) for (auto l : lines) l.flags |= ML_COMPATSIDE; + else for (auto l : lines) l.flags &= ML_COMPATSIDE; +} + //========================================================================== // IsPointInMap // @@ -2050,10 +2259,10 @@ void FLevelLocals::SetMusicVolume(float f) // Made by dpJudas, modified and implemented by Major Cooke //========================================================================== - -int IsPointInMap(double x, double y, double z) +int IsPointInMap(FLevelLocals *Level, double x, double y, double z) { - subsector_t *subsector = R_PointInSubsector(FLOAT2FIXED(x), FLOAT2FIXED(y)); + // This uses the render nodes because those are guaranteed to be GL nodes, meaning all subsectors are closed. + subsector_t *subsector = Level->PointInRenderSubsector(FLOAT2FIXED(x), FLOAT2FIXED(y)); if (!subsector) return false; for (uint32_t i = 0; i < subsector->numlines; i++) @@ -2077,81 +2286,6 @@ int IsPointInMap(double x, double y, double z) return true; } -DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, IsPointInMap, IsPointInMap) -{ - PARAM_PROLOGUE; - PARAM_FLOAT(x); - PARAM_FLOAT(y); - PARAM_FLOAT(z); - ACTION_RETURN_BOOL(IsPointInMap(x, y, z)); -} - -template -inline T VecDiff(const T& v1, const T& v2) -{ - T result = v2 - v1; - - if (level.subsectors.Size() > 0) - { - const sector_t *const sec1 = P_PointInSector(v1); - const sector_t *const sec2 = P_PointInSector(v2); - - if (nullptr != sec1 && nullptr != sec2) - { - result += level.Displacements.getOffset(sec2->PortalGroup, sec1->PortalGroup); - } - } - - return result; -} - -DEFINE_ACTION_FUNCTION(FLevelLocals, Vec2Diff) -{ - PARAM_PROLOGUE; - PARAM_FLOAT(x1); - PARAM_FLOAT(y1); - PARAM_FLOAT(x2); - PARAM_FLOAT(y2); - ACTION_RETURN_VEC2(VecDiff(DVector2(x1, y1), DVector2(x2, y2))); -} - -DEFINE_ACTION_FUNCTION(FLevelLocals, Vec3Diff) -{ - PARAM_PROLOGUE; - PARAM_FLOAT(x1); - PARAM_FLOAT(y1); - PARAM_FLOAT(z1); - PARAM_FLOAT(x2); - PARAM_FLOAT(y2); - PARAM_FLOAT(z2); - ACTION_RETURN_VEC3(VecDiff(DVector3(x1, y1, z1), DVector3(x2, y2, z2))); -} - -DEFINE_ACTION_FUNCTION(FLevelLocals, SphericalCoords) -{ - PARAM_PROLOGUE; - PARAM_FLOAT(viewpointX); - PARAM_FLOAT(viewpointY); - PARAM_FLOAT(viewpointZ); - PARAM_FLOAT(targetX); - PARAM_FLOAT(targetY); - PARAM_FLOAT(targetZ); - PARAM_ANGLE(viewYaw); - PARAM_ANGLE(viewPitch); - PARAM_BOOL(absolute); - - DVector3 viewpoint(viewpointX, viewpointY, viewpointZ); - DVector3 target(targetX, targetY, targetZ); - auto vecTo = absolute ? target - viewpoint : VecDiff(viewpoint, target); - - ACTION_RETURN_VEC3(DVector3( - deltaangle(vecTo.Angle(), viewYaw).Degrees, - deltaangle(vecTo.Pitch(), viewPitch).Degrees, - vecTo.Length() - )); -} - - //========================================================================== // // Lists all currently defined maps @@ -2183,7 +2317,8 @@ CCMD(skyfog) { if (argv.argc()>1) { - level.skyfog = MAX(0, (int)strtoull(argv[1], NULL, 0)); + // Do this only on the primary level. + primaryLevel->skyfog = MAX(0, (int)strtoull(argv[1], NULL, 0)); } } @@ -2198,9 +2333,9 @@ DEFINE_ACTION_FUNCTION(FLevelLocals, ChangeSky) PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_INT(sky1); PARAM_INT(sky2); - sky1texture = self->skytexture1 = FSetTextureID(sky1); - sky2texture = self->skytexture2 = FSetTextureID(sky2); - R_InitSkyMap(); + self->skytexture1 = FSetTextureID(sky1); + self->skytexture2 = FSetTextureID(sky2); + InitSkyMap(self); return 0; } diff --git a/src/g_level.h b/src/g_level.h index 5f2275777c..5a8ca237c2 100644 --- a/src/g_level.h +++ b/src/g_level.h @@ -1,450 +1,14 @@ -/* -** g_level.h -** -**--------------------------------------------------------------------------- -** Copyright 1998-2006 Randy Heit -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**--------------------------------------------------------------------------- -** -*/ - -#ifndef __G_LEVEL_H__ -#define __G_LEVEL_H__ +#pragma once #include "doomtype.h" #include "vectors.h" #include "sc_man.h" #include "resourcefiles/file_zip.h" +#include "g_mapinfo.h" -struct level_info_t; -struct cluster_info_t; -class FSerializer; - -#if defined(_MSC_VER) -#pragma section(".yreg$u",read) -#define MSVC_YSEG __declspec(allocate(".yreg$u")) -#define GCC_YSEG -#else -#define MSVC_YSEG -#define GCC_YSEG __attribute__((section(SECTION_YREG))) __attribute__((used)) -#endif - -// The structure used to control scripts between maps -struct acsdefered_t -{ - enum EType - { - defexecute, - defexealways, - defsuspend, - defterminate - } type; - int script; - int args[3]; - int playernum; -}; - -FSerializer &Serialize(FSerializer &arc, const char *key, acsdefered_t &defer, acsdefered_t *def); - - -struct FIntermissionDescriptor; -struct FIntermissionAction; - -struct FMapInfoParser -{ - enum EFormatType - { - FMT_Unknown, - FMT_Old, - FMT_New - }; - - FScanner sc; - int format_type; - bool HexenHack; - - FMapInfoParser(int format = FMT_Unknown) - { - format_type = format; - HexenHack = false; - } - - bool ParseLookupName(FString &dest); - void ParseMusic(FString &name, int &order); - //void ParseLumpOrTextureName(char *name); - void ParseLumpOrTextureName(FString &name); - void ParseExitText(FName formap, level_info_t *info); - void ParseExitMusic(FName formap, level_info_t *info); - void ParseExitBackdrop(FName formap, level_info_t *info, bool ispic); - - void ParseCluster(); - void ParseNextMap(FString &mapname); - level_info_t *ParseMapHeader(level_info_t &defaultinfo); - void ParseMapDefinition(level_info_t &leveldef); - void ParseGameInfo(); - void ParseEpisodeInfo (); - void ParseSkill (); - void ParseMapInfo (int lump, level_info_t &gamedefaults, level_info_t &defaultinfo); - - void ParseOpenBrace(); - bool ParseCloseBrace(); - bool CheckAssign(); - void ParseAssign(); - void MustParseAssign(); - void ParseComma(); - bool CheckNumber(); - bool CheckFloat(); - void SkipToNext(); - void CheckEndOfFile(const char *block); - - void ParseIntermissionAction(FIntermissionDescriptor *Desc); - void ParseIntermission(); - void ParseDoomEdNums(); - void ParseSpawnNums(); - void ParseConversationIDs(); - void ParseAMColors(bool); - FName CheckEndSequence(); - FName ParseEndGame(); - void ParseDamageDefinition(); -}; - -#define DEFINE_MAP_OPTION(name, old) \ - static void MapOptHandler_##name(FMapInfoParser &parse, level_info_t *info); \ - static FMapOptInfo MapOpt_##name = \ - { #name, MapOptHandler_##name, old }; \ - MSVC_YSEG FMapOptInfo *mapopt_##name GCC_YSEG = &MapOpt_##name; \ - static void MapOptHandler_##name(FMapInfoParser &parse, level_info_t *info) - - -struct FMapOptInfo -{ - const char *name; - void (*handler) (FMapInfoParser &parse, level_info_t *levelinfo); - bool old; -}; - -enum ELevelFlags : unsigned int -{ - LEVEL_NOINTERMISSION = 0x00000001, - LEVEL_NOINVENTORYBAR = 0x00000002, // This effects Doom only, since it's the only one without a standard inventory bar. - LEVEL_DOUBLESKY = 0x00000004, - LEVEL_HASFADETABLE = 0x00000008, // Level uses Hexen's fadetable mapinfo to get fog - - LEVEL_MAP07SPECIAL = 0x00000010, - LEVEL_BRUISERSPECIAL = 0x00000020, - LEVEL_CYBORGSPECIAL = 0x00000040, - LEVEL_SPIDERSPECIAL = 0x00000080, - - LEVEL_SPECLOWERFLOOR = 0x00000100, - LEVEL_SPECOPENDOOR = 0x00000200, - LEVEL_SPECLOWERFLOORTOHIGHEST=0x00000300, - LEVEL_SPECACTIONSMASK = 0x00000300, - - LEVEL_MONSTERSTELEFRAG = 0x00000400, - LEVEL_ACTOWNSPECIAL = 0x00000800, - LEVEL_SNDSEQTOTALCTRL = 0x00001000, - LEVEL_FORCETILEDSKY = 0x00002000, - - LEVEL_CROUCH_NO = 0x00004000, - LEVEL_JUMP_NO = 0x00008000, - LEVEL_FREELOOK_NO = 0x00010000, - LEVEL_FREELOOK_YES = 0x00020000, - - // The absence of both of the following bits means that this level does not - // use falling damage (though damage can be forced with dmflags,. - LEVEL_FALLDMG_ZD = 0x00040000, // Level uses ZDoom's falling damage - LEVEL_FALLDMG_HX = 0x00080000, // Level uses Hexen's falling damage - - LEVEL_HEADSPECIAL = 0x00100000, // Heretic episode 1/4 - LEVEL_MINOTAURSPECIAL = 0x00200000, // Heretic episode 2/5 - LEVEL_SORCERER2SPECIAL = 0x00400000, // Heretic episode 3 - LEVEL_SPECKILLMONSTERS = 0x00800000, - - LEVEL_STARTLIGHTNING = 0x01000000, // Automatically start lightning - LEVEL_FILTERSTARTS = 0x02000000, // Apply mapthing filtering to player starts - LEVEL_LOOKUPLEVELNAME = 0x04000000, // Level name is the name of a language string - LEVEL_USEPLAYERSTARTZ = 0x08000000, // Use the Z position of player starts - - LEVEL_SWAPSKIES = 0x10000000, // Used by lightning - LEVEL_NOALLIES = 0x20000000, // i.e. Inside Strife's front base - LEVEL_CHANGEMAPCHEAT = 0x40000000, // Don't display cluster messages - LEVEL_VISITED = 0x80000000, // Used for intermission map - - // The flags uint64_t is now split into 2 DWORDs - LEVEL2_RANDOMPLAYERSTARTS = 0x00000001, // Select single player starts randomnly (no voodoo dolls) - LEVEL2_ALLMAP = 0x00000002, // The player picked up a map on this level - - LEVEL2_LAXMONSTERACTIVATION = 0x00000004, // Monsters can open doors depending on the door speed - LEVEL2_LAXACTIVATIONMAPINFO = 0x00000008, // LEVEL_LAXMONSTERACTIVATION is not a default. - - LEVEL2_MISSILESACTIVATEIMPACT=0x00000010, // Missiles are the activators of SPAC_IMPACT events, not their shooters - LEVEL2_FROZEN = 0x00000020, // Game is frozen by a TimeFreezer - - LEVEL2_KEEPFULLINVENTORY = 0x00000040, // doesn't reduce the amount of inventory items to 1 - - LEVEL2_PRERAISEWEAPON = 0x00000080, // players should spawn with their weapons fully raised (but not when respawning it multiplayer) - LEVEL2_MONSTERFALLINGDAMAGE = 0x00000100, - LEVEL2_CLIPMIDTEX = 0x00000200, - LEVEL2_WRAPMIDTEX = 0x00000400, - - LEVEL2_CHECKSWITCHRANGE = 0x00000800, - - LEVEL2_PAUSE_MUSIC_IN_MENUS = 0x00001000, - LEVEL2_TOTALINFIGHTING = 0x00002000, - LEVEL2_NOINFIGHTING = 0x00004000, - - LEVEL2_NOMONSTERS = 0x00008000, - LEVEL2_INFINITE_FLIGHT = 0x00010000, - - LEVEL2_ALLOWRESPAWN = 0x00020000, - - LEVEL2_FORCETEAMPLAYON = 0x00040000, - LEVEL2_FORCETEAMPLAYOFF = 0x00080000, - - LEVEL2_CONV_SINGLE_UNFREEZE = 0x00100000, - LEVEL2_RAILINGHACK = 0x00200000, // but UDMF requires them to be separate to have more control - LEVEL2_DUMMYSWITCHES = 0x00400000, - LEVEL2_HEXENHACK = 0x00800000, // Level was defined in a Hexen style MAPINFO - - LEVEL2_SMOOTHLIGHTING = 0x01000000, // Level uses the smooth lighting feature. - LEVEL2_POLYGRIND = 0x02000000, // Polyobjects grind corpses to gibs. - LEVEL2_RESETINVENTORY = 0x04000000, // Resets player inventory when starting this level (unless in a hub) - LEVEL2_RESETHEALTH = 0x08000000, // Resets player health when starting this level (unless in a hub) - - LEVEL2_NOSTATISTICS = 0x10000000, // This level should not have statistics collected - LEVEL2_ENDGAME = 0x20000000, // This is an epilogue level that cannot be quit. - LEVEL2_NOAUTOSAVEHINT = 0x40000000, // tell the game that an autosave for this level does not need to be kept - LEVEL2_FORGETSTATE = 0x80000000, // forget this map's state in a hub - - // More flags! - LEVEL3_FORCEFAKECONTRAST = 0x00000001, // forces fake contrast even with fog enabled - LEVEL3_REMOVEITEMS = 0x00000002, // kills all INVBAR items on map change. - LEVEL3_ATTENUATE = 0x00000004, // attenuate lights? - LEVEL3_NOLIGHTFADE = 0x00000008, // no light fading to black. - LEVEL3_NOCOLOREDSPRITELIGHTING = 0x00000010, // draw sprites only with color-less light - LEVEL3_EXITNORMALUSED = 0x00000020, - LEVEL3_EXITSECRETUSED = 0x00000040, - LEVEL3_FORCEWORLDPANNING = 0x00000080, // Forces the world panning flag for all textures, even those without it explicitly set. -}; - - -struct FSpecialAction -{ - FName Type; // this is initialized before the actors... - uint8_t Action; - int Args[5]; -}; - -class DScroller; - -class FScanner; -struct level_info_t; - -typedef TMap FMusicMap; - -enum EMapType : int -{ - MAPTYPE_UNKNOWN = 0, - MAPTYPE_DOOM, - MAPTYPE_HEXEN, - MAPTYPE_BUILD, - MAPTYPE_UDMF // This does not distinguish between namespaces. -}; - -struct FExitText -{ - enum EDefined - { - DEF_TEXT = 1, - DEF_MUSIC = 2, - DEF_BACKDROP = 4, - DEF_LOOKUP = 8, - DEF_PIC = 16 - }; - int16_t mDefined = 0; - int16_t mOrder = -1; - FString mText; - FString mMusic; - FString mBackdrop; - - FExitText(int def = 0, int order = -1, const FString &text = "", const FString &backdrop = "", const FString &music = "") - : mDefined(int16_t(def)), mOrder(int16_t(order)), mText(text), mMusic(music), mBackdrop(backdrop) - { - } -}; - - -struct level_info_t -{ - int levelnum; - - FString MapName; - FString NextMap; - FString NextSecretMap; - FString PName; - FString SkyPic1; - FString SkyPic2; - FString FadeTable; - FString F1Pic; - FString BorderTexture; - FString MapBackground; - - TMap ExitMapTexts; - - int cluster; - int partime; - int sucktime; - int32_t flags; - uint32_t flags2; - uint32_t flags3; - - FString Music; - FString LevelName; - int8_t WallVertLight, WallHorizLight; - int musicorder; - FCompressedBuffer Snapshot; - TArray deferred; - float skyspeed1; - float skyspeed2; - uint32_t fadeto; - uint32_t outsidefog; - int cdtrack; - unsigned int cdid; - double gravity; - double aircontrol; - int WarpTrans; - int airsupply; - uint32_t compatflags, compatflags2; - uint32_t compatmask, compatmask2; - FString Translator; // for converting Doom-format linedef and sector types. - int DefaultEnvironment; // Default sound environment for the map. - FName Intermission; - FName deathsequence; - FName slideshow; - uint32_t hazardcolor; - uint32_t hazardflash; - int fogdensity; - int outsidefogdensity; - int skyfog; - float pixelstretch; - - // Redirection: If any player is carrying the specified item, then - // you go to the RedirectMap instead of this one. - FName RedirectType; - FString RedirectMapName; - - FString EnterPic; - FString ExitPic; - FString InterMusic; - int intermusicorder; - TMap > MapInterMusic; - - FString SoundInfo; - FString SndSeq; - - double teamdamage; - - FMusicMap MusicMap; - - TArray specialactions; - - TArray PrecacheSounds; - TArray PrecacheTextures; - TArray PrecacheClasses; - - TArray EventHandlers; - - ELightMode lightmode; - int8_t brightfog; - int8_t lightadditivesurfaces; - int8_t notexturefill; - FVector3 skyrotatevector; - FVector3 skyrotatevector2; - - FString EDName; - FString acsName; - bool fs_nocheckposition; - - - level_info_t() - { - Reset(); - } - ~level_info_t() - { - Snapshot.Clean(); - ClearDefered(); - } - void Reset(); - bool isValid(); - FString LookupLevelName (); - void ClearDefered() - { - deferred.Clear(); - } - level_info_t *CheckLevelRedirect (); -}; - - -struct cluster_info_t -{ - int cluster; - FString FinaleFlat; - FString ExitText; - FString EnterText; - FString MessageMusic; - int musicorder; - int flags; - int cdtrack; - FString ClusterName; - unsigned int cdid; - - void Reset(); - -}; - -// Cluster flags -#define CLUSTER_HUB 0x00000001 // Cluster uses hub behavior -#define CLUSTER_EXITTEXTINLUMP 0x00000002 // Exit text is the name of a lump -#define CLUSTER_ENTERTEXTINLUMP 0x00000004 // Enter text is the name of a lump -#define CLUSTER_FINALEPIC 0x00000008 // Finale "flat" is actually a full-sized image -#define CLUSTER_LOOKUPEXITTEXT 0x00000010 // Exit text is the name of a language string -#define CLUSTER_LOOKUPENTERTEXT 0x00000020 // Enter text is the name of a language string -#define CLUSTER_LOOKUPNAME 0x00000040 // Name is the name of a language string -#define CLUSTER_LOOKUPCLUSTERNAME 0x00000080 // Cluster name is the name of a language string -#define CLUSTER_ALLOWINTERMISSION 0x00000100 // Allow intermissions between levels in a hub. - -extern TArray wadlevelinfos; -extern TArray wadclusterinfos; extern bool savegamerestore; -// mapname will be changed if it is a valid warptrans -bool CheckWarpTransMap (FString &mapname, bool substitute); - void G_InitNew (const char *mapname, bool bTitleLevel); // Can be called by the startup code or M_Responder. @@ -454,11 +18,6 @@ void G_DeferedInitNew (const char *mapname, int skill = -1); struct FGameStartup; void G_DeferedInitNew (FGameStartup *gs); -void G_ExitLevel (int position, bool keepFacing); -void G_SecretExitLevel (int position); -const char *G_GetExitMap(); -const char *G_GetSecretExitMap(); - enum { CHANGELEVEL_KEEPFACING = 1, @@ -470,140 +29,13 @@ enum CHANGELEVEL_PRERAISEWEAPON = 64, }; -void G_ChangeLevel(const char *levelname, int position, int flags, int nextSkill=-1); - -void G_StartTravel (); -int G_FinishTravel (); - -void G_DoLoadLevel (int position, bool autosave, bool newGame); - -void G_InitLevelLocals (void); - -void G_AirControlChanged (); - -cluster_info_t *FindClusterInfo (int cluster); -level_info_t *FindLevelInfo (const char *mapname, bool allowdefault=true); -level_info_t *FindLevelByNum (int num); -level_info_t *CheckLevelRedirect (level_info_t *info); - -FString CalcMapName (int episode, int level); - -void G_ParseMapInfo (FString basemapinfo); +void G_DoLoadLevel (const FString &MapName, int position, bool autosave, bool newGame); void G_ClearSnapshots (void); void P_RemoveDefereds (); -void G_SnapshotLevel (void); -void G_UnSnapshotLevel (bool keepPlayers); void G_ReadSnapshots (FResourceFile *); void G_WriteSnapshots (TArray &, TArray &); void G_WriteVisited(FSerializer &arc); void G_ReadVisited(FSerializer &arc); void G_ClearHubInfo(); -enum ESkillProperty -{ - SKILLP_FastMonsters, - SKILLP_Respawn, - SKILLP_RespawnLimit, - SKILLP_DisableCheats, - SKILLP_AutoUseHealth, - SKILLP_SpawnFilter, - SKILLP_EasyBossBrain, - SKILLP_ACSReturn, - SKILLP_NoPain, - SKILLP_EasyKey, - SKILLP_SlowMonsters, - SKILLP_Infight, - SKILLP_PlayerRespawn, -}; -enum EFSkillProperty // floating point properties -{ - SKILLP_AmmoFactor, - SKILLP_DropAmmoFactor, - SKILLP_ArmorFactor, - SKILLP_HealthFactor, - SKILLP_DamageFactor, - SKILLP_Aggressiveness, - SKILLP_MonsterHealth, - SKILLP_FriendlyHealth, - SKILLP_KickbackFactor, -}; - -int G_SkillProperty(ESkillProperty prop); -double G_SkillProperty(EFSkillProperty prop); -const char * G_SkillName(); - -typedef TMap SkillMenuNames; - -typedef TMap SkillActorReplacement; - -struct FSkillInfo -{ - FName Name = NAME_None; - double AmmoFactor, DoubleAmmoFactor, DropAmmoFactor; - double DamageFactor; - double ArmorFactor; - double HealthFactor; - double KickbackFactor; - - bool FastMonsters; - bool SlowMonsters; - bool DisableCheats; - bool AutoUseHealth; - - bool EasyBossBrain; - bool EasyKey; - bool NoMenu; - int RespawnCounter; - int RespawnLimit; - double Aggressiveness; - int SpawnFilter; - int ACSReturn; - FString MenuName; - FString PicName; - SkillMenuNames MenuNamesForPlayerClass; - bool MustConfirm; - FString MustConfirmText; - char Shortcut; - FString TextColor; - SkillActorReplacement Replace; - SkillActorReplacement Replaced; - double MonsterHealth; - double FriendlyHealth; - bool NoPain; - int Infighting; - bool PlayerRespawn; - - FSkillInfo() {} - FSkillInfo(const FSkillInfo &other) - { - operator=(other); - } - FSkillInfo &operator=(const FSkillInfo &other); - int GetTextColor() const; - - void SetReplacement(FName a, FName b); - FName GetReplacement(FName a); - void SetReplacedBy(FName b, FName a); - FName GetReplacedBy(FName b); -}; - -extern TArray AllSkills; -extern int DefaultSkill; - -struct FEpisode -{ - FString mEpisodeName; - FString mEpisodeMap; - FString mPicName; - char mShortcut; - bool mNoSkill; -}; - -extern TArray AllEpisodes; - -int ParseUMapInfo(int lumpnum); -void CommitUMapinfo(level_info_t *defaultinfo); - - -#endif //__G_LEVEL_H__ diff --git a/src/g_levellocals.h b/src/g_levellocals.h index 1dbb19b4c9..cf09617d01 100644 --- a/src/g_levellocals.h +++ b/src/g_levellocals.h @@ -44,16 +44,370 @@ #include "p_local.h" #include "po_man.h" #include "p_acs.h" +#include "p_tags.h" +#include "p_spec.h" +#include "actor.h" +#include "b_bot.h" +#include "p_effect.h" +#include "d_player.h" #include "p_destructible.h" #include "r_data/r_sections.h" #include "r_data/r_canvastexture.h" +#include "r_data/r_interpolate.h" + +//============================================================================ +// +// This is used to mark processed portals for some collection functions. +// +//============================================================================ + +struct FPortalBits +{ + TArray data; + + void setSize(int num) + { + data.Resize((num + 31) / 32); + clear(); + } + + void clear() + { + memset(&data[0], 0, data.Size() * sizeof(uint32_t)); + } + + void setBit(int group) + { + data[group >> 5] |= (1 << (group & 31)); + } + + int getBit(int group) + { + return data[group >> 5] & (1 << (group & 31)); + } +}; class DACSThinker; class DFraggleThinker; class DSpotState; +class DSeqNode; +struct FStrifeDialogueNode; +class DAutomapBase; +struct wbstartstruct_t; +class DSectorMarker; +struct FTranslator; +struct EventManager; -struct FLevelData +typedef TMap FDialogueIDMap; // maps dialogue IDs to dialogue array index (for ACS) +typedef TMap FDialogueMap; // maps actor class names to dialogue array index +typedef TMap FUDMFKeyMap; + +struct FLevelLocals { + void *level; + void *Level; // bug catchers. + FLevelLocals(); + ~FLevelLocals(); + + friend class MapLoader; + + void Tick(); + void Mark(); + void AddScroller(int secnum); + void SetInterMusic(const char *nextmap); + void SetMusicVolume(float v); + void ClearLevelData(); + void ClearPortals(); + bool CheckIfExitIsGood(AActor *self, level_info_t *newmap); + void FormatMapName(FString &mapname, const char *mapnamecolor); + void ClearAllSubsectorLinks(); + void TranslateLineDef (line_t *ld, maplinedef_t *mld, int lineindexforid = -1); + int TranslateSectorSpecial(int special); + bool IsTIDUsed(int tid); + int FindUniqueTID(int start_tid, int limit); + int GetConversation(int conv_id); + int GetConversation(FName classname); + void SetConversation(int convid, PClassActor *Class, int dlgindex); + int FindNode (const FStrifeDialogueNode *node); + int GetInfighting(); + void SetCompatLineOnSide(bool state); + void Init(); + +private: + line_t *FindPortalDestination(line_t *src, int tag); + void BuildPortalBlockmap(); + void UpdatePortal(FLinePortal *port); + void CollectLinkedPortals(); + void CreateLinkedPortals(); + bool ChangePortalLine(line_t *line, int destid); + void AddDisplacementForPortal(FSectorPortal *portal); + void AddDisplacementForPortal(FLinePortal *portal); + bool ConnectPortalGroups(); +public: + void SnapshotLevel(); + void UnSnapshotLevel(bool hubLoad); + + void FinalizePortals(); + bool ChangePortal(line_t *ln, int thisid, int destid); + unsigned GetSkyboxPortal(AActor *actor); + unsigned GetPortal(int type, int plane, sector_t *orgsec, sector_t *destsec, const DVector2 &displacement); + unsigned GetStackPortal(AActor *point, int plane); + DVector2 GetPortalOffsetPosition(double x, double y, double dx, double dy); + bool CollectConnectedGroups(int startgroup, const DVector3 &position, double upperz, double checkradius, FPortalGroupArray &out); + + void ActivateInStasisPlat(int tag); + bool CreateCeiling(sector_t *sec, DCeiling::ECeiling type, line_t *line, int tag, double speed, double speed2, double height, int crush, int silent, int change, DCeiling::ECrushMode hexencrush); + void ActivateInStasisCeiling(int tag); + bool CreateFloor(sector_t *sec, DFloor::EFloor floortype, line_t *line, double speed, double height, int crush, int change, bool hexencrush, bool hereticlower); + void DoDeferedScripts(); + void AdjustPusher(int tag, int magnitude, int angle, bool wind); + int Massacre(bool baddies = false, FName cls = NAME_None); + AActor *SpawnMapThing(FMapThing *mthing, int position); + AActor *SpawnMapThing(int index, FMapThing *mt, int position); + AActor *SpawnPlayer(FPlayerStart *mthing, int playernum, int flags = 0); + void StartLightning(); + void ForceLightning(int mode); + void ClearDynamic3DFloorData(); + void WorldDone(void); + void AirControlChanged(); + AActor *SelectTeleDest(int tid, int tag, bool norandom); + bool AlignFlat(int linenum, int side, int fc); + void ReplaceTextures(const char *fromname, const char *toname, int flags); + + bool EV_Thing_Spawn(int tid, AActor *source, int type, DAngle angle, bool fog, int newtid); + bool EV_Thing_Move(int tid, AActor *source, int mapspot, bool fog); + bool EV_Thing_Projectile(int tid, AActor *source, int type, const char *type_name, DAngle angle, + double speed, double vspeed, int dest, AActor *forcedest, int gravity, int newtid, bool leadTarget); + int EV_Thing_Damage(int tid, AActor *whofor0, int amount, FName type); + + bool EV_DoPlat(int tag, line_t *line, DPlat::EPlatType type, double height, double speed, int delay, int lip, int change); + void EV_StopPlat(int tag, bool remove); + bool EV_DoPillar(DPillar::EPillar type, line_t *line, int tag, double speed, double height, double height2, int crush, bool hexencrush); + bool EV_DoDoor(DDoor::EVlDoor type, line_t *line, AActor *thing, int tag, double speed, int delay, int lock, int lightTag, bool boomgen = false, int topcountdown = 0); + bool EV_SlidingDoor(line_t *line, AActor *thing, int tag, int speed, int delay, DAnimatedDoor::EADType type); + bool EV_DoCeiling(DCeiling::ECeiling type, line_t *line, int tag, double speed, double speed2, double height, int crush, int silent, int change, DCeiling::ECrushMode hexencrush = DCeiling::ECrushMode::crushDoom); + bool EV_CeilingCrushStop(int tag, bool remove); + bool EV_StopCeiling(int tag, line_t *line); + bool EV_BuildStairs(int tag, DFloor::EStair type, line_t *line, double stairsize, double speed, int delay, int reset, int igntxt, int usespecials); + bool EV_DoFloor(DFloor::EFloor floortype, line_t *line, int tag, double speed, double height, int crush, int change, bool hexencrush, bool hereticlower = false); + bool EV_FloorCrushStop(int tag, line_t *line); + bool EV_StopFloor(int tag, line_t *line); + bool EV_DoDonut(int tag, line_t *line, double pillarspeed, double slimespeed); + bool EV_DoElevator(line_t *line, DElevator::EElevator type, double speed, double height, int tag); + bool EV_StartWaggle(int tag, line_t *line, int height, int speed, int offset, int timer, bool ceiling); + bool EV_DoChange(line_t *line, EChange changetype, int tag); + + void EV_StartLightFlickering(int tag, int upper, int lower); + void EV_StartLightStrobing(int tag, int upper, int lower, int utics, int ltics); + void EV_StartLightStrobing(int tag, int utics, int ltics); + void EV_TurnTagLightsOff(int tag); + void EV_LightTurnOn(int tag, int bright); + void EV_LightTurnOnPartway(int tag, double frac); + void EV_LightChange(int tag, int value); + void EV_StartLightGlowing(int tag, int upper, int lower, int tics); + void EV_StartLightFading(int tag, int value, int tics); + void EV_StopLightEffect(int tag); + + bool EV_Teleport(int tid, int tag, line_t *line, int side, AActor *thing, int flags); + bool EV_SilentLineTeleport(line_t *line, int side, AActor *thing, int id, INTBOOL reverse); + bool EV_TeleportOther(int other_tid, int dest_tid, bool fog); + bool EV_TeleportGroup(int group_tid, AActor *victim, int source_tid, int dest_tid, bool moveSource, bool fog); + bool EV_TeleportSector(int tag, int source_tid, int dest_tid, bool fog, int group_tid); + + void RecalculateDrawnSubsectors(); + FSerializer &SerializeSubsectors(FSerializer &arc, const char *key); + void SpawnExtraPlayers(); + void Serialize(FSerializer &arc, bool hubload); + DThinker *FirstThinker (int statnum); + + // g_Game + void PlayerReborn (int player); + bool CheckSpot (int playernum, FPlayerStart *mthing); + void DoReborn (int playernum, bool freshbot); + void QueueBody (AActor *body); + double PlayersRangeFromSpot (FPlayerStart *spot); + FPlayerStart *SelectFarthestDeathmatchSpot (size_t selections); + FPlayerStart *SelectRandomDeathmatchSpot (int playernum, unsigned int selections); + void DeathMatchSpawnPlayer (int playernum); + FPlayerStart *PickPlayerStart(int playernum, int flags = 0); + bool DoCompleted(FString nextlevel, wbstartstruct_t &wminfo); + void StartTravel(); + int FinishTravel(); + void ChangeLevel(const char *levelname, int position, int flags, int nextSkill = -1); + const char *GetSecretExitMap(); + void ExitLevel(int position, bool keepFacing); + void SecretExitLevel(int position); + void DoLoadLevel(const FString &nextmapname, int position, bool autosave, bool newGame); + + void DeleteAllAttachedLights(); + void RecreateAllAttachedLights(); + + +private: + // Work data for CollectConnectedGroups. + FPortalBits processMask; + TArray foundPortals; + TArray groupsToCheck; + +public: + + FSectorTagIterator GetSectorTagIterator(int tag) + { + return FSectorTagIterator(tagManager, tag); + } + FSectorTagIterator GetSectorTagIterator(int tag, line_t *line) + { + return FSectorTagIterator(tagManager, tag, line); + } + FLineIdIterator GetLineIdIterator(int tag) + { + return FLineIdIterator(tagManager, tag); + } + template TThinkerIterator GetThinkerIterator(FName subtype = NAME_None, int statnum = MAX_STATNUM+1) + { + if (subtype == NAME_None) return TThinkerIterator(this, statnum); + else return TThinkerIterator(this, subtype, statnum); + } + template TThinkerIterator GetThinkerIterator(FName subtype, int statnum, AActor *prev) + { + return TThinkerIterator(this, subtype, statnum, prev); + } + FActorIterator GetActorIterator(int tid) + { + return FActorIterator(TIDHash, tid); + } + FActorIterator GetActorIterator(int tid, AActor *start) + { + return FActorIterator(TIDHash, tid, start); + } + NActorIterator GetActorIterator(FName type, int tid) + { + return NActorIterator(TIDHash, type, tid); + } + AActor *SingleActorFromTID(int tid, AActor *defactor) + { + return tid == 0 ? defactor : GetActorIterator(tid).Next(); + } + + bool SectorHasTags(sector_t *sector) + { + return tagManager.SectorHasTags(sector); + } + bool SectorHasTag(sector_t *sector, int tag) + { + return tagManager.SectorHasTag(sector, tag); + } + bool SectorHasTag(int sector, int tag) + { + return tagManager.SectorHasTag(sector, tag); + } + int GetFirstSectorTag(const sector_t *sect) const + { + return tagManager.GetFirstSectorTag(sect); + } + int GetFirstSectorTag(int i) const + { + return tagManager.GetFirstSectorTag(i); + } + int GetFirstLineId(const line_t *sect) const + { + return tagManager.GetFirstLineID(sect); + } + + bool LineHasId(int line, int tag) + { + return tagManager.LineHasID(line, tag); + } + bool LineHasId(line_t *line, int tag) + { + return tagManager.LineHasID(line, tag); + } + + int FindFirstSectorFromTag(int tag) + { + auto it = GetSectorTagIterator(tag); + return it.Next(); + } + + int FindFirstLineFromID(int tag) + { + auto it = GetLineIdIterator(tag); + return it.Next(); + } + + int isFrozen() + { + return frozenstate; + } + +private: // The engine should never ever access subsectors of the game nodes. This is only needed for actually implementing PointInSector. + subsector_t *PointInSubsector(double x, double y); +public: + sector_t *PointInSectorBuggy(double x, double y); + subsector_t *PointInRenderSubsector (fixed_t x, fixed_t y); + + sector_t *PointInSector(const DVector2 &pos) + { + return PointInSubsector(pos.X, pos.Y)->sector; + } + + sector_t *PointInSector(double x, double y) + { + return PointInSubsector(x, y)->sector; + } + + subsector_t *PointInRenderSubsector (const DVector2 &pos) + { + return PointInRenderSubsector(FloatToFixed(pos.X), FloatToFixed(pos.Y)); + } + + FPolyObj *GetPolyobj (int polyNum) + { + auto index = Polyobjects.FindEx([=](const auto &poly) { return poly.tag == polyNum; }); + return index == Polyobjects.Size()? nullptr : &Polyobjects[index]; + } + + + void ClearTIDHashes () + { + memset(TIDHash, 0, sizeof(TIDHash)); + } + + + bool CheckReject(sector_t *s1, sector_t *s2) + { + if (rejectmatrix.Size() > 0) + { + int pnum = int(s1->Index()) * sectors.Size() + int(s2->Index()); + return !(rejectmatrix[pnum >> 3] & (1 << (pnum & 7))); + } + return true; + } + + DThinker *CreateThinker(PClass *cls, int statnum = STAT_DEFAULT) + { + DThinker *thinker = static_cast(cls->CreateNew()); + assert(thinker->IsKindOf(RUNTIME_CLASS(DThinker))); + thinker->ObjectFlags |= OF_JustSpawned; + Thinkers.Link(thinker, statnum); + thinker->Level = this; + return thinker; + } + + template + T* CreateThinker(Args&&... args) + { + auto thinker = static_cast(CreateThinker(RUNTIME_CLASS(T), T::DEFAULT_STAT)); + thinker->Construct(std::forward(args)...); + return thinker; + } + + void SetMusic() + { + if (cdtrack == 0 || !S_ChangeCDMusic(cdtrack, cdid)) + S_ChangeMusic(Music, musicorder); + } + TArray vertexes; TArray sectors; TArray linebuffer; // contains the line lists for the sectors. @@ -82,12 +436,14 @@ struct FLevelData TArray linePortalSpans; FSectionContainer sections; FCanvasTextureInfo canvasTextureInfo; + EventManager *localEventManager = nullptr; // [ZZ] Destructible geometry information TMap healthGroups; FBlockmap blockmap; TArray PolyBlockMap; + FUDMFKeyMap UDMFKeys[4]; // These are copies of the loaded map data that get used by the savegame code to skip unaltered fields // Without such a mechanism the savegame format would become too slow and large because more than 80-90% are normally still unaltered. @@ -101,21 +457,24 @@ struct FLevelData TArray AllPlayerStarts; FBehaviorContainer Behaviors; -}; + AActor *TIDHash[128]; -struct FLevelLocals : public FLevelData -{ - void Tick(); - void Mark(); - void AddScroller(int secnum); - void SetInterMusic(const char *nextmap); - void SetMusicVolume(float v); - void ClearLevelData(); - void ClearPortals(); + TArray StrifeDialogues; + FDialogueIDMap DialogueRoots; + FDialogueMap ClassRoots; + FCajunMaster BotInfo; + + int ii_compatflags = 0; + int ii_compatflags2 = 0; + int ib_compatflags = 0; + int i_compatflags = 0; + int i_compatflags2 = 0; + + DSectorMarker *SectorMarker; uint8_t md5[16]; // for savegame validation. If the MD5 does not match the savegame won't be loaded. int time; // time in the hub - int maptime; // time in the map + int maptime; // time in the map int totaltime; // time in the game int starttime; int partime; @@ -132,13 +491,73 @@ struct FLevelLocals : public FLevelData FString NextMap; // go here when using the regular exit FString NextSecretMap; // map to go to when used secret exit FString F1Pic; + FTranslator *Translator; EMapType maptype; + FTagManager tagManager; + FInterpolator interpolator; uint64_t ShaderStartTime = 0; // tell the shader system when we started the level (forces a timer restart) static const int BODYQUESIZE = 32; TObjPtr bodyque[BODYQUESIZE]; + TObjPtr automap = nullptr; int bodyqueslot; + + // For now this merely points to the global player array, but with this in place, access to this array can be moved over to the level. + // As things progress each level needs to be able to point to different players, even if they are just null if the second level is merely a skybox or camera target. + // But even if it got a real player, the level will not own it - the player merely links to the level. + // This should also be made a real object eventually. + player_t *Players[MAXPLAYERS]; + + // This is to allow refactoring without refactoring the data right away. + bool PlayerInGame(int pnum) + { + return playeringame[pnum]; + } + + // This needs to be done better, but for now it should be good enough. + bool PlayerInGame(player_t *player) + { + for (int i = 0; i < MAXPLAYERS; i++) + { + if (player == Players[i]) return PlayerInGame(i); + } + return false; + } + + int PlayerNum(player_t *player) + { + for (int i = 0; i < MAXPLAYERS; i++) + { + if (player == Players[i]) return i; + } + return -1; + } + + bool isPrimaryLevel() const + { + return true; + } + + // Gets the console player without having the calling code be aware of the level's state. + player_t *GetConsolePlayer() const + { + return isPrimaryLevel()? Players[consoleplayer] : nullptr; + } + + bool isConsolePlayer(AActor *mo) const + { + auto p = GetConsolePlayer(); + if (!p) return false; + return p->mo == mo; + } + + bool isCamera(AActor *mo) const + { + auto p = GetConsolePlayer(); + if (!p) return false; + return p->camera == mo; + } int NumMapSections; @@ -162,6 +581,10 @@ struct FLevelLocals : public FLevelData float skyspeed1; // Scrolling speed of sky textures, in pixels per ms float skyspeed2; + double sky1pos, sky2pos; + float hw_sky1pos, hw_sky2pos; + bool skystretch; + int total_secrets; int found_secrets; @@ -177,6 +600,16 @@ struct FLevelLocals : public FLevelData int airsupply; int DefaultEnvironment; // Default sound environment. + int ActiveSequences; + DSeqNode *SequenceListHead; + + // [RH] particle globals + uint32_t ActiveParticles; + uint32_t InactiveParticles; + TArray Particles; + TArray ParticlesInSubsec; + FThinkerCollection Thinkers; + TArray Scrolls; // NULL if no DScrollers in this level int8_t WallVertLight; // Light diffs for vert/horiz walls @@ -185,6 +618,7 @@ struct FLevelLocals : public FLevelData bool FromSnapshot; // The current map was restored from a snapshot bool HasHeightSecs; // true if some Transfer_Heights effects are present in the map. If this is false, some checks in the renderer can be shortcut. bool HasDynamicLights; // Another render optimization for maps with no lights at all. + uint8_t frozenstate; double teamdamage; @@ -234,38 +668,40 @@ struct FLevelLocals : public FLevelData } }; -#ifndef NO_DEFINE_LEVEL extern FLevelLocals level; +extern FLevelLocals *primaryLevel; // level for which to display the user interface. This will always be the one the current consoleplayer is in. +extern FLevelLocals *currentVMLevel; inline FSectorPortal *line_t::GetTransferredPortal() { - return portaltransferred >= level.sectorPortals.Size() ? (FSectorPortal*)nullptr : &level.sectorPortals[portaltransferred]; + auto Level = GetLevel(); + return portaltransferred >= Level->sectorPortals.Size() ? (FSectorPortal*)nullptr : &Level->sectorPortals[portaltransferred]; } inline FSectorPortal *sector_t::GetPortal(int plane) { - return &level.sectorPortals[Portals[plane]]; + return &Level->sectorPortals[Portals[plane]]; } inline double sector_t::GetPortalPlaneZ(int plane) { - return level.sectorPortals[Portals[plane]].mPlaneZ; + return Level->sectorPortals[Portals[plane]].mPlaneZ; } inline DVector2 sector_t::GetPortalDisplacement(int plane) { - return level.sectorPortals[Portals[plane]].mDisplacement; + return Level->sectorPortals[Portals[plane]].mDisplacement; } inline int sector_t::GetPortalType(int plane) { - return level.sectorPortals[Portals[plane]].mType; + return Level->sectorPortals[Portals[plane]].mType; } inline int sector_t::GetOppositePortalGroup(int plane) { - return level.sectorPortals[Portals[plane]].mDestination->PortalGroup; + return Level->sectorPortals[Portals[plane]].mDestination->PortalGroup; } inline bool sector_t::PortalBlocksView(int plane) @@ -294,31 +730,35 @@ inline bool sector_t::PortalIsLinked(int plane) return (GetPortalType(plane) == PORTS_LINKEDPORTAL); } +inline FLevelLocals *line_t::GetLevel() const +{ + return frontsector->Level; +} inline FLinePortal *line_t::getPortal() const { - return portalindex >= level.linePortals.Size() ? (FLinePortal*)NULL : &level.linePortals[portalindex]; + return portalindex >= GetLevel()->linePortals.Size() ? (FLinePortal*)nullptr : &GetLevel()->linePortals[portalindex]; } // returns true if the portal is crossable by actors inline bool line_t::isLinePortal() const { - return portalindex >= level.linePortals.Size() ? false : !!(level.linePortals[portalindex].mFlags & PORTF_PASSABLE); + return portalindex >= GetLevel()->linePortals.Size() ? false : !!(GetLevel()->linePortals[portalindex].mFlags & PORTF_PASSABLE); } // returns true if the portal needs to be handled by the renderer inline bool line_t::isVisualPortal() const { - return portalindex >= level.linePortals.Size() ? false : !!(level.linePortals[portalindex].mFlags & PORTF_VISIBLE); + return portalindex >= GetLevel()->linePortals.Size() ? false : !!(GetLevel()->linePortals[portalindex].mFlags & PORTF_VISIBLE); } inline line_t *line_t::getPortalDestination() const { - return portalindex >= level.linePortals.Size() ? (line_t*)NULL : level.linePortals[portalindex].mDestination; + return portalindex >= GetLevel()->linePortals.Size() ? (line_t*)nullptr : GetLevel()->linePortals[portalindex].mDestination; } inline int line_t::getPortalAlignment() const { - return portalindex >= level.linePortals.Size() ? 0 : level.linePortals[portalindex].mAlign; + return portalindex >= GetLevel()->linePortals.Size() ? 0 : GetLevel()->linePortals[portalindex].mAlign; } inline bool line_t::hitSkyWall(AActor* mo) const @@ -327,4 +767,10 @@ inline bool line_t::hitSkyWall(AActor* mo) const backsector->GetTexture(sector_t::ceiling) == skyflatnum && mo->Z() >= backsector->ceilingplane.ZatPoint(mo->PosRelative(this)); } -#endif \ No newline at end of file + +// This must later be extended to return an array with all levels. +// It is meant for code that needs to iterate over all levels to make some global changes, e.g. configuation CCMDs. +inline TArrayView AllLevels() +{ + return TArrayView(&primaryLevel, 1); +} diff --git a/src/g_shared/a_action.cpp b/src/g_shared/a_action.cpp index 99814cdf8e..c5e96adcda 100644 --- a/src/g_shared/a_action.cpp +++ b/src/g_shared/a_action.cpp @@ -32,6 +32,8 @@ #include "vm.h" #include "actorinlines.h" +EXTERN_CVAR(Int, sv_corpsequeuesize) + //---------------------------------------------------------------------------- // // PROC A_NoBlocking @@ -88,22 +90,6 @@ void A_Unblock(AActor *self, bool drop) // //---------------------------------------------------------------------------- -CUSTOM_CVAR(Int, sv_corpsequeuesize, 64, CVAR_ARCHIVE|CVAR_SERVERINFO) -{ - if (self > 0) - { - auto &corpsequeue = level.CorpseQueue; - while (corpsequeue.Size() > (unsigned)self) - { - AActor *corpse = corpsequeue[0]; - if (corpse) corpse->Destroy(); - corpsequeue.Delete(0); - } - } -} - - - // throw another corpse on the queue DEFINE_ACTION_FUNCTION(AActor, A_QueueCorpse) { @@ -111,7 +97,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_QueueCorpse) if (sv_corpsequeuesize > 0) { - auto &corpsequeue = level.CorpseQueue; + auto &corpsequeue = self->Level->CorpseQueue; while (corpsequeue.Size() >= (unsigned)sv_corpsequeuesize) { AActor *corpse = corpsequeue[0]; @@ -128,7 +114,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_DeQueueCorpse) { PARAM_SELF_PROLOGUE(AActor); - auto &corpsequeue = level.CorpseQueue; + auto &corpsequeue = self->Level->CorpseQueue; auto index = corpsequeue.FindEx([=](auto &element) { return element == self; }); if (index < corpsequeue.Size()) { diff --git a/src/p_ceiling.cpp b/src/g_shared/a_ceiling.cpp similarity index 90% rename from src/p_ceiling.cpp rename to src/g_shared/a_ceiling.cpp index 4199ccb64b..b9c168ed92 100644 --- a/src/p_ceiling.cpp +++ b/src/g_shared/a_ceiling.cpp @@ -47,10 +47,6 @@ IMPLEMENT_CLASS(DCeiling, false, false) -DCeiling::DCeiling () -{ -} - //============================================================================ // // @@ -208,14 +204,14 @@ void DCeiling::Tick () // //============================================================================ -DCeiling::DCeiling (sector_t *sec) - : DMovingCeiling (sec) +void DCeiling::Construct(sector_t *sec) { + Super::Construct(sec); } -DCeiling::DCeiling (sector_t *sec, double speed1, double speed2, int silent) - : DMovingCeiling (sec) +void DCeiling::Construct(sector_t *sec, double speed1, double speed2, int silent) { + Super::Construct(sec); m_Crush = -1; m_CrushMode = ECrushMode::crushDoom; m_Speed = m_Speed1 = speed1; @@ -235,7 +231,7 @@ DCeiling::DCeiling (sector_t *sec, double speed1, double speed2, int silent) // //============================================================================ -bool P_CreateCeiling(sector_t *sec, DCeiling::ECeiling type, line_t *line, int tag, +bool FLevelLocals::CreateCeiling(sector_t *sec, DCeiling::ECeiling type, line_t *line, int tag, double speed, double speed2, double height, int crush, int silent, int change, DCeiling::ECrushMode hexencrush) { @@ -248,7 +244,7 @@ bool P_CreateCeiling(sector_t *sec, DCeiling::ECeiling type, line_t *line, int t } // new door thinker - DCeiling *ceiling = Create (sec, speed, speed2, silent & ~4); + DCeiling *ceiling = CreateThinker (sec, speed, speed2, silent & ~4); vertex_t *spot = sec->Lines[0]->v1; switch (type) @@ -465,9 +461,9 @@ bool P_CreateCeiling(sector_t *sec, DCeiling::ECeiling type, line_t *line, int t return ceiling != NULL; } -DEFINE_ACTION_FUNCTION(DCeiling, CreateCeiling) +DEFINE_ACTION_FUNCTION(FLevelLocals, CreateCeiling) { - PARAM_PROLOGUE; + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_POINTER_NOT_NULL(sec, sector_t); PARAM_INT(type); PARAM_POINTER(ln, line_t); @@ -478,7 +474,7 @@ DEFINE_ACTION_FUNCTION(DCeiling, CreateCeiling) PARAM_INT(silent); PARAM_INT(change); PARAM_INT(crushmode); - ACTION_RETURN_BOOL(P_CreateCeiling(sec, (DCeiling::ECeiling)type, ln, 0, speed, speed2, height, crush, silent, change, (DCeiling::ECrushMode)crushmode)); + ACTION_RETURN_BOOL(self->CreateCeiling(sec, (DCeiling::ECeiling)type, ln, 0, speed, speed2, height, crush, silent, change, (DCeiling::ECrushMode)crushmode)); } //============================================================================ @@ -490,7 +486,7 @@ DEFINE_ACTION_FUNCTION(DCeiling, CreateCeiling) // //============================================================================ -bool EV_DoCeiling (DCeiling::ECeiling type, line_t *line, +bool FLevelLocals::EV_DoCeiling (DCeiling::ECeiling type, line_t *line, int tag, double speed, double speed2, double height, int crush, int silent, int change, DCeiling::ECrushMode hexencrush) { @@ -508,22 +504,22 @@ bool EV_DoCeiling (DCeiling::ECeiling type, line_t *line, secnum = sec->sectornum; // [RH] Hack to let manual crushers be retriggerable, too tag ^= secnum | 0x1000000; - P_ActivateInStasisCeiling (tag); - return P_CreateCeiling(sec, type, line, tag, speed, speed2, height, crush, silent, change, hexencrush); + ActivateInStasisCeiling (tag); + return CreateCeiling(sec, type, line, tag, speed, speed2, height, crush, silent, change, hexencrush); } // Reactivate in-stasis ceilings...for certain types. // This restarts a crusher after it has been stopped if (type == DCeiling::ceilCrushAndRaise) { - P_ActivateInStasisCeiling (tag); + ActivateInStasisCeiling (tag); } // affects all sectors with the same tag as the linedef - FSectorTagIterator it(tag); + auto it = GetSectorTagIterator(tag); while ((secnum = it.Next()) >= 0) { - rtn |= P_CreateCeiling(&level.sectors[secnum], type, line, tag, speed, speed2, height, crush, silent, change, hexencrush); + rtn |= CreateCeiling(§ors[secnum], type, line, tag, speed, speed2, height, crush, silent, change, hexencrush); } return rtn; } @@ -536,10 +532,10 @@ bool EV_DoCeiling (DCeiling::ECeiling type, line_t *line, // //============================================================================ -void P_ActivateInStasisCeiling (int tag) +void FLevelLocals::ActivateInStasisCeiling (int tag) { DCeiling *scan; - TThinkerIterator iterator; + auto iterator = GetThinkerIterator(); while ( (scan = iterator.Next ()) ) { @@ -559,13 +555,12 @@ void P_ActivateInStasisCeiling (int tag) // //============================================================================ -bool EV_CeilingCrushStop (int tag, bool remove) +bool FLevelLocals::EV_CeilingCrushStop (int tag, bool remove) { bool rtn = false; - DCeiling *scan; - TThinkerIterator iterator; + auto iterator = GetThinkerIterator(); - scan = iterator.Next(); + auto scan = iterator.Next(); while (scan != nullptr) { DCeiling *next = iterator.Next(); @@ -589,17 +584,17 @@ bool EV_CeilingCrushStop (int tag, bool remove) return rtn; } -bool EV_StopCeiling(int tag, line_t *line) +bool FLevelLocals::EV_StopCeiling(int tag, line_t *line) { int sec; - FSectorTagIterator it(tag, line); + auto it = GetSectorTagIterator(tag, line); while ((sec = it.Next()) >= 0) { - if (level.sectors[sec].ceilingdata) + if (sectors[sec].ceilingdata) { - SN_StopSequence(&level.sectors[sec], CHAN_CEILING); - level.sectors[sec].ceilingdata->Destroy(); - level.sectors[sec].ceilingdata = nullptr; + SN_StopSequence(§ors[sec], CHAN_CEILING); + sectors[sec].ceilingdata->Destroy(); + sectors[sec].ceilingdata = nullptr; } } return true; diff --git a/src/g_shared/a_ceiling.h b/src/g_shared/a_ceiling.h new file mode 100644 index 0000000000..d1db8b70a8 --- /dev/null +++ b/src/g_shared/a_ceiling.h @@ -0,0 +1,81 @@ +#pragma once + +// +// P_CEILING +// + +// [RH] Changed these +class DCeiling : public DMovingCeiling +{ + DECLARE_CLASS (DCeiling, DMovingCeiling) +public: + enum ECeiling + { + ceilLowerByValue, + ceilRaiseByValue, + ceilMoveToValue, + ceilLowerToHighestFloor, + ceilLowerInstant, + ceilRaiseInstant, + ceilCrushAndRaise, + ceilLowerAndCrush, + ceil_placeholder, + ceilCrushRaiseAndStay, + ceilRaiseToNearest, + ceilLowerToLowest, + ceilLowerToFloor, + + // The following are only used by Generic_Ceiling + ceilRaiseToHighest, + ceilLowerToHighest, + ceilRaiseToLowest, + ceilLowerToNearest, + ceilRaiseToHighestFloor, + ceilRaiseToFloor, + ceilRaiseByTexture, + ceilLowerByTexture, + + genCeilingChg0, + genCeilingChgT, + genCeilingChg + }; + + enum class ECrushMode + { + crushDoom = 0, + crushHexen = 1, + crushSlowdown = 2 + }; + + + void Construct(sector_t *sec); + void Construct(sector_t *sec, double speed1, double speed2, int silent); + + void Serialize(FSerializer &arc); + void Tick (); + +protected: + ECeiling m_Type; + double m_BottomHeight; + double m_TopHeight; + double m_Speed; + double m_Speed1; // [RH] dnspeed of crushers + double m_Speed2; // [RH] upspeed of crushers + int m_Crush; + ECrushMode m_CrushMode; + int m_Silent; + int m_Direction; // 1 = up, 0 = waiting, -1 = down + + // [RH] Need these for BOOM-ish transferring ceilings + FTextureID m_Texture; + secspecial_t m_NewSpecial{}; + + // ID + int m_Tag; + int m_OldDirection; + + void PlayCeilingSound (); + + friend struct FLevelLocals; +}; + diff --git a/src/g_shared/a_decalfx.cpp b/src/g_shared/a_decalfx.cpp new file mode 100644 index 0000000000..16ebca74bc --- /dev/null +++ b/src/g_shared/a_decalfx.cpp @@ -0,0 +1,246 @@ +/* +** a_decalfx.h +** Decal animation thinkers +** +**--------------------------------------------------------------------------- +** Copyright 1998-2006 Randy Heit +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions +** are met: +** +** 1. Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** 3. The name of the author may not be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**--------------------------------------------------------------------------- +** +*/ + +#include "decallib.h" +#include "a_decalfx.h" +#include "serializer.h" +#include "a_sharedglobal.h" +#include "g_levellocals.h" +#include "m_fixed.h" + + +IMPLEMENT_CLASS(DDecalThinker, false, true) + +IMPLEMENT_POINTERS_START(DDecalThinker) + IMPLEMENT_POINTER(TheDecal) +IMPLEMENT_POINTERS_END + +void DDecalThinker::Serialize(FSerializer &arc) +{ + Super::Serialize (arc); + arc("thedecal", TheDecal); +} + +IMPLEMENT_CLASS(DDecalFader, false, false) + +void DDecalFader::Serialize(FSerializer &arc) +{ + Super::Serialize (arc); + arc("starttime", TimeToStartDecay) + ("endtime", TimeToEndDecay) + ("starttrans", StartTrans); +} + +void DDecalFader::Tick () +{ + if (TheDecal == nullptr) + { + Destroy (); + } + else + { + if (Level->maptime < TimeToStartDecay || Level->isFrozen()) + { + return; + } + else if (Level->maptime >= TimeToEndDecay) + { + TheDecal->Destroy (); // remove the decal + Destroy (); // remove myself + return; + } + if (StartTrans == -1) + { + StartTrans = TheDecal->Alpha; + } + + int distanceToEnd = TimeToEndDecay - Level->maptime; + int fadeDistance = TimeToEndDecay - TimeToStartDecay; + TheDecal->Alpha = StartTrans * distanceToEnd / fadeDistance; + } +} + +IMPLEMENT_CLASS(DDecalStretcher, false, false) + +void DDecalStretcher::Serialize(FSerializer &arc) +{ + Super::Serialize (arc); + arc("starttime", TimeToStart) + ("endtime", TimeToStop) + ("goalx", GoalX) + ("startx", StartX) + ("stretchx", bStretchX) + ("goaly", GoalY) + ("starty", StartY) + ("stretchy", bStretchY) + ("started", bStarted); +} + +void DDecalStretcher::Tick () +{ + if (TheDecal == nullptr) + { + Destroy (); + return; + } + if (Level->maptime < TimeToStart || Level->isFrozen()) + { + return; + } + if (Level->maptime >= TimeToStop) + { + if (bStretchX) + { + TheDecal->ScaleX = GoalX; + } + if (bStretchY) + { + TheDecal->ScaleY = GoalY; + } + Destroy (); + return; + } + if (!bStarted) + { + bStarted = true; + StartX = TheDecal->ScaleX; + StartY = TheDecal->ScaleY; + } + + int distance = Level->maptime - TimeToStart; + int maxDistance = TimeToStop - TimeToStart; + if (bStretchX) + { + TheDecal->ScaleX = StartX + (GoalX - StartX) * distance / maxDistance; + } + if (bStretchY) + { + TheDecal->ScaleY = StartY + (GoalY - StartY) * distance / maxDistance; + } +} + +IMPLEMENT_CLASS(DDecalSlider, false, false) + +void DDecalSlider::Serialize(FSerializer &arc) +{ + Super::Serialize (arc); + arc("starttime", TimeToStart) + ("endtime", TimeToStop) + ("disty", DistY) + ("starty", StartY) + ("started", bStarted); +} + +void DDecalSlider::Tick () +{ + if (TheDecal == nullptr) + { + Destroy (); + return; + } + if (Level->maptime < TimeToStart || Level->isFrozen()) + { + return; + } + if (!bStarted) + { + bStarted = true; + /*StartX = TheDecal->LeftDistance;*/ + StartY = TheDecal->Z; + } + if (Level->maptime >= TimeToStop) + { + /*TheDecal->LeftDistance = StartX + DistX;*/ + TheDecal->Z = StartY + DistY; + Destroy (); + return; + } + + int distance = Level->maptime - TimeToStart; + int maxDistance = TimeToStop - TimeToStart; + /*TheDecal->LeftDistance = StartX + DistX * distance / maxDistance);*/ + TheDecal->Z = StartY + DistY * distance / maxDistance; +} + +IMPLEMENT_CLASS(DDecalColorer, false, false) + +void DDecalColorer::Serialize(FSerializer &arc) +{ + Super::Serialize (arc); + arc("starttime", TimeToStartDecay) + ("endtime", TimeToEndDecay) + ("startcolor", StartColor) + ("goalcolor", GoalColor); +} + +void DDecalColorer::Tick () +{ + if (TheDecal == nullptr || !(TheDecal->RenderStyle.Flags & STYLEF_ColorIsFixed)) + { + Destroy (); + } + else + { + if (Level->maptime < TimeToStartDecay || Level->isFrozen()) + { + return; + } + else if (Level->maptime >= TimeToEndDecay) + { + TheDecal->SetShade (GoalColor); + Destroy (); // remove myself + } + if (StartColor.a == 255) + { + StartColor = TheDecal->AlphaColor & 0xffffff; + if (StartColor == GoalColor) + { + Destroy (); + return; + } + } + if (Level->maptime & 0) + { // Changing the shade can be expensive, so don't do it too often. + return; + } + + int distance = Level->maptime - TimeToStartDecay; + int maxDistance = TimeToEndDecay - TimeToStartDecay; + int r = StartColor.r + Scale (GoalColor.r - StartColor.r, distance, maxDistance); + int g = StartColor.g + Scale (GoalColor.g - StartColor.g, distance, maxDistance); + int b = StartColor.b + Scale (GoalColor.b - StartColor.b, distance, maxDistance); + TheDecal->SetShade (r, g, b); + } +} + diff --git a/src/g_shared/a_decalfx.h b/src/g_shared/a_decalfx.h new file mode 100644 index 0000000000..a25192b01e --- /dev/null +++ b/src/g_shared/a_decalfx.h @@ -0,0 +1,93 @@ +#pragma once + +#include "dthinker.h" + +struct DDecalThinker : public DThinker +{ + DECLARE_CLASS (DDecalThinker, DThinker) + HAS_OBJECT_POINTERS +public: + static const int DEFAULT_STAT = STAT_DECALTHINKER; + void Construct(DBaseDecal *decal) + { + TheDecal = decal; + } + void Serialize(FSerializer &arc); + TObjPtr TheDecal; +}; + +class DDecalFader : public DDecalThinker +{ + DECLARE_CLASS (DDecalFader, DDecalThinker) +public: + void Construct(DBaseDecal *decal) + { + Super::Construct(decal); + } + void Serialize(FSerializer &arc); + void Tick (); + + int TimeToStartDecay; + int TimeToEndDecay; + double StartTrans; +}; + +class DDecalColorer : public DDecalThinker +{ + DECLARE_CLASS (DDecalColorer, DDecalThinker) +public: + void Construct(DBaseDecal *decal) + { + Super::Construct(decal); + } + void Serialize(FSerializer &arc); + void Tick (); + + int TimeToStartDecay; + int TimeToEndDecay; + PalEntry StartColor; + PalEntry GoalColor; +}; + +class DDecalStretcher : public DDecalThinker +{ + DECLARE_CLASS (DDecalStretcher, DDecalThinker) +public: + void Construct(DBaseDecal *decal) + { + Super::Construct(decal); + } + void Serialize(FSerializer &arc); + void Tick (); + + int TimeToStart; + int TimeToStop; + double GoalX; + double StartX; + double GoalY; + double StartY; + bool bStretchX; + bool bStretchY; + bool bStarted; +}; + +class DDecalSlider : public DDecalThinker +{ + DECLARE_CLASS (DDecalSlider, DDecalThinker) +public: + void Construct(DBaseDecal *decal) + { + Super::Construct(decal); + } + void Serialize(FSerializer &arc); + void Tick (); + + int TimeToStart; + int TimeToStop; +/* double DistX; */ + double DistY; + double StartX; + double StartY; + bool bStarted; +}; + diff --git a/src/g_shared/a_decals.cpp b/src/g_shared/a_decals.cpp index e73788363c..b53675b235 100644 --- a/src/g_shared/a_decals.cpp +++ b/src/g_shared/a_decals.cpp @@ -45,6 +45,16 @@ #include "g_levellocals.h" #include "vm.h" +EXTERN_CVAR (Bool, cl_spreaddecals) +EXTERN_CVAR (Int, cl_maxdecals) + + +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + struct SpreadInfo { double DecalWidth, DecalLeft, DecalRight; @@ -54,9 +64,12 @@ struct SpreadInfo TArray SpreadStack; }; -static int ImpactCount; -CVAR (Bool, cl_spreaddecals, true, CVAR_ARCHIVE) +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- IMPLEMENT_CLASS(DBaseDecal, false, true) @@ -67,48 +80,64 @@ IMPLEMENT_POINTERS_END IMPLEMENT_CLASS(DImpactDecal, false, false) -DBaseDecal::DBaseDecal () -: DThinker(STAT_DECAL), - WallNext(0), WallPrev(0), LeftDistance(0), Z(0), ScaleX(1.), ScaleY(1.), Alpha(1.), - AlphaColor(0), Translation(0), RenderFlags(0) +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + +void DBaseDecal::Construct(double z) { + Z = z; RenderStyle = STYLE_None; PicNum.SetInvalid(); } -DBaseDecal::DBaseDecal (double z) -: DThinker(STAT_DECAL), - WallNext(0), WallPrev(0), LeftDistance(0), Z(z), ScaleX(1.), ScaleY(1.), Alpha(1.), - AlphaColor(0), Translation(0), RenderFlags(0), Side(nullptr), Sector(nullptr) +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + +void DBaseDecal::Construct(const AActor *basis) { - RenderStyle = STYLE_None; - PicNum.SetInvalid(); + Z = basis->Z(); + ScaleX = basis->Scale.X; + ScaleY = basis->Scale.Y; + Alpha = basis->Alpha; + AlphaColor = basis->fillcolor; + Translation = basis->Translation; + PicNum = basis->picnum; + RenderFlags = basis->renderflags; + RenderStyle = basis->RenderStyle; } -DBaseDecal::DBaseDecal (int statnum, double z) -: DThinker(statnum), - WallNext(nullptr), WallPrev(nullptr), LeftDistance(0), Z(z), ScaleX(1.), ScaleY(1.), Alpha(1.), - AlphaColor(0), Translation(0), RenderFlags(0), Side(nullptr), Sector(nullptr) +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + +void DBaseDecal::Construct(const DBaseDecal *basis) { - RenderStyle = STYLE_None; - PicNum.SetInvalid(); + LeftDistance = basis->LeftDistance; + Z = basis->Z; + ScaleX = basis->ScaleX; + ScaleY = basis->ScaleY; + Alpha = basis->Alpha; + AlphaColor = basis->AlphaColor; + Translation = basis->Translation; + PicNum = basis->PicNum; + RenderFlags = basis->RenderFlags; + RenderStyle = basis->RenderStyle; + } -DBaseDecal::DBaseDecal (const AActor *basis) -: DThinker(STAT_DECAL), - WallNext(nullptr), WallPrev(nullptr), LeftDistance(0), Z(basis->Z()), ScaleX(basis->Scale.X), ScaleY(basis->Scale.Y), - Alpha(basis->Alpha), AlphaColor(basis->fillcolor), Translation(basis->Translation), PicNum(basis->picnum), - RenderFlags(basis->renderflags), RenderStyle(basis->RenderStyle), Side(nullptr), Sector(nullptr) -{ -} - -DBaseDecal::DBaseDecal (const DBaseDecal *basis) -: DThinker(STAT_DECAL), - WallNext(nullptr), WallPrev(nullptr), LeftDistance(basis->LeftDistance), Z(basis->Z), ScaleX(basis->ScaleX), - ScaleY(basis->ScaleY), Alpha(basis->Alpha), AlphaColor(basis->AlphaColor), Translation(basis->Translation), - PicNum(basis->PicNum), RenderFlags(basis->RenderFlags), RenderStyle(basis->RenderStyle), Side(nullptr), Sector(nullptr) -{ -} +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- void DBaseDecal::OnDestroy () { @@ -116,6 +145,12 @@ void DBaseDecal::OnDestroy () Super::OnDestroy(); } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DBaseDecal::Remove () { if (WallPrev == nullptr) @@ -130,6 +165,12 @@ void DBaseDecal::Remove () WallNext = nullptr; } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DBaseDecal::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -149,6 +190,12 @@ void DBaseDecal::Serialize(FSerializer &arc) ("sector", Sector); } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DBaseDecal::GetXY (side_t *wall, double &ox, double &oy) const { line_t *line = wall->linedef; @@ -172,18 +219,35 @@ void DBaseDecal::GetXY (side_t *wall, double &ox, double &oy) const oy = v1->fY() + LeftDistance * dy; } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DBaseDecal::SetShade (uint32_t rgb) { PalEntry *entry = (PalEntry *)&rgb; AlphaColor = rgb | (ColorMatcher.Pick (entry->r, entry->g, entry->b) << 24); } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DBaseDecal::SetShade (int r, int g, int b) { AlphaColor = MAKEARGB(ColorMatcher.Pick (r, g, b), r, g, b); } +//---------------------------------------------------------------------------- +// // Returns the texture the decal stuck to. +// +//---------------------------------------------------------------------------- + FTextureID DBaseDecal::StickToWall (side_t *wall, double x, double y, F3DFloor *ffloor) { Side = wall; @@ -275,6 +339,12 @@ FTextureID DBaseDecal::StickToWall (side_t *wall, double x, double y, F3DFloor * return tex; } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + double DBaseDecal::GetRealZ (const side_t *wall) const { const line_t *line = wall->linedef; @@ -329,6 +399,12 @@ double DBaseDecal::GetRealZ (const side_t *wall) const } } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DBaseDecal::CalcFracPos (side_t *wall, double x, double y) { line_t *line = wall->linedef; @@ -362,6 +438,12 @@ void DBaseDecal::CalcFracPos (side_t *wall, double x, double y) } } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + static void GetWallStuff (side_t *wall, vertex_t *&v1, double &ldx, double &ldy) { line_t *line = wall->linedef; @@ -379,11 +461,23 @@ static void GetWallStuff (side_t *wall, vertex_t *&v1, double &ldx, double &ldy) } } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + static double Length (double dx, double dy) { return DVector2(dx, dy).Length(); } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + static side_t *NextWall (const side_t *wall) { line_t *line = wall->linedef; @@ -402,6 +496,12 @@ static side_t *NextWall (const side_t *wall) return NULL; } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DBaseDecal::SpreadLeft (double r, vertex_t *v1, side_t *feelwall, F3DFloor *ffloor, SpreadInfo *spread) { double ldx, ldy; @@ -415,7 +515,7 @@ void DBaseDecal::SpreadLeft (double r, vertex_t *v1, side_t *feelwall, F3DFloor double x = v1->fX(); double y = v1->fY(); - feelwall = &level.sides[feelwall->LeftSide]; + feelwall = &feelwall->GetLevel()->sides[feelwall->LeftSide]; GetWallStuff (feelwall, v1, ldx, ldy); double wallsize = Length (ldx, ldy); r += spread->DecalLeft; @@ -446,6 +546,12 @@ void DBaseDecal::SpreadLeft (double r, vertex_t *v1, side_t *feelwall, F3DFloor } } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DBaseDecal::SpreadRight (double r, side_t *feelwall, double wallsize, F3DFloor *ffloor, SpreadInfo *spread) { vertex_t *v1; @@ -455,7 +561,7 @@ void DBaseDecal::SpreadRight (double r, side_t *feelwall, double wallsize, F3DFl while (r > wallsize && feelwall->RightSide != NO_SIDE) { - feelwall = &level.sides[feelwall->RightSide]; + feelwall = &feelwall->GetLevel()->sides[feelwall->RightSide]; side_t *nextwall = NextWall (feelwall); if (nextwall != NULL && nextwall->LeftSide != NO_SIDE) @@ -486,6 +592,12 @@ void DBaseDecal::SpreadRight (double r, side_t *feelwall, double wallsize, F3DFl } } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DBaseDecal::Spread (const FDecalTemplate *tpl, side_t *wall, double x, double y, double z, F3DFloor * ffloor) { SpreadInfo spread; @@ -519,9 +631,15 @@ void DBaseDecal::Spread (const FDecalTemplate *tpl, side_t *wall, double x, doub Length (wall->linedef->Delta().X, wall->linedef->Delta().Y), ffloor, &spread); } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + DBaseDecal *DBaseDecal::CloneSelf (const FDecalTemplate *tpl, double ix, double iy, double iz, side_t *wall, F3DFloor * ffloor) const { - DBaseDecal *decal = Create(iz); + DBaseDecal *decal = Level->CreateThinker(iz); if (decal != NULL) { if (decal->StickToWall (wall, ix, iy, ffloor).isValid()) @@ -540,49 +658,32 @@ DBaseDecal *DBaseDecal::CloneSelf (const FDecalTemplate *tpl, double ix, double return decal; } -CUSTOM_CVAR (Int, cl_maxdecals, 1024, CVAR_ARCHIVE) -{ - if (self < 0) - { - self = 0; - } - else - { - while (level.ImpactDecalCount > self) - { - DThinker *thinker = DThinker::FirstThinker(STAT_AUTODECAL); - if (thinker != NULL) - { - thinker->Destroy(); - } - } - } -} - -DImpactDecal::DImpactDecal () -: DBaseDecal (STAT_AUTODECAL, 0.) -{ -} - -DImpactDecal::DImpactDecal (double z) -: DBaseDecal (STAT_AUTODECAL, z) -{ -} +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- void DImpactDecal::CheckMax () { - if (++level.ImpactDecalCount >= cl_maxdecals) + if (++Level->ImpactDecalCount >= cl_maxdecals) { - DThinker *thinker = DThinker::FirstThinker (STAT_AUTODECAL); + DThinker *thinker = Level->FirstThinker (STAT_AUTODECAL); if (thinker != NULL) { thinker->Destroy(); - level.ImpactDecalCount--; + Level->ImpactDecalCount--; } } } -DImpactDecal *DImpactDecal::StaticCreate (const char *name, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color) +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + +DImpactDecal *DImpactDecal::StaticCreate (FLevelLocals *Level, const char *name, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color) { if (cl_maxdecals > 0) { @@ -590,13 +691,19 @@ DImpactDecal *DImpactDecal::StaticCreate (const char *name, const DVector3 &pos, if (tpl != NULL && (tpl = tpl->GetDecal()) != NULL) { - return StaticCreate (tpl, pos, wall, ffloor, color); + return StaticCreate (Level, tpl, pos, wall, ffloor, color); } } return NULL; } -DImpactDecal *DImpactDecal::StaticCreate (const FDecalTemplate *tpl, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color) +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + +DImpactDecal *DImpactDecal::StaticCreate (FLevelLocals *Level, const FDecalTemplate *tpl, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color) { DImpactDecal *decal = NULL; if (tpl != NULL && cl_maxdecals > 0 && !(wall->Flags & WALLF_NOAUTODECALS)) @@ -610,9 +717,9 @@ DImpactDecal *DImpactDecal::StaticCreate (const FDecalTemplate *tpl, const DVect // apply the custom color as well. if (tpl->ShadeColor != tpl_low->ShadeColor) lowercolor=0; else lowercolor = color; - StaticCreate (tpl_low, pos, wall, ffloor, lowercolor); + StaticCreate (Level, tpl_low, pos, wall, ffloor, lowercolor); } - decal = Create(pos.Z); + decal = Level->CreateThinker(pos.Z); if (decal == NULL) { return NULL; @@ -641,6 +748,12 @@ DImpactDecal *DImpactDecal::StaticCreate (const FDecalTemplate *tpl, const DVect return decal; } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + DBaseDecal *DImpactDecal::CloneSelf (const FDecalTemplate *tpl, double ix, double iy, double iz, side_t *wall, F3DFloor * ffloor) const { if (wall->Flags & WALLF_NOAUTODECALS) @@ -648,7 +761,7 @@ DBaseDecal *DImpactDecal::CloneSelf (const FDecalTemplate *tpl, double ix, doubl return NULL; } - DImpactDecal *decal = Create(iz); + DImpactDecal *decal = Level->CreateThinker(iz); if (decal != NULL) { if (decal->StickToWall (wall, ix, iy, ffloor).isValid()) @@ -668,33 +781,11 @@ DBaseDecal *DImpactDecal::CloneSelf (const FDecalTemplate *tpl, double ix, doubl return decal; } -CCMD (countdecals) -{ - Printf ("%d impact decals\n", ImpactCount); -} - -CCMD (countdecalsreal) -{ - TThinkerIterator iterator (STAT_AUTODECAL); - int count = 0; - - while (iterator.Next()) - count++; - - Printf ("Counted %d impact decals\n", count); -} - -CCMD (spray) -{ - if (who == NULL || argv.argc() < 2) - { - Printf ("Usage: spray \n"); - return; - } - - Net_WriteByte (DEM_SPRAY); - Net_WriteString (argv[1]); -} +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- void SprayDecal(AActor *shooter, const char *name, double distance) { @@ -709,12 +800,18 @@ void SprayDecal(AActor *shooter, const char *name, double distance) { if (trace.HitType == TRACE_HitWall) { - DImpactDecal::StaticCreate(name, trace.HitPos, trace.Line->sidedef[trace.Side], NULL); + DImpactDecal::StaticCreate(shooter->Level, name, trace.HitPos, trace.Line->sidedef[trace.Side], NULL); } } } -DBaseDecal *ShootDecal(const FDecalTemplate *tpl, AActor *basisactor, sector_t *sec, double x, double y, double z, DAngle angle, double tracedist, bool permanent) +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + +DBaseDecal *ShootDecal(FLevelLocals *Level, const FDecalTemplate *tpl, sector_t *sec, double x, double y, double z, DAngle angle, double tracedist, bool permanent) { if (tpl == NULL || (tpl = tpl->GetDecal()) == NULL) { @@ -731,7 +828,7 @@ DBaseDecal *ShootDecal(const FDecalTemplate *tpl, AActor *basisactor, sector_t * { if (permanent) { - decal = Create(trace.HitPos.Z); + decal = Level->CreateThinker(trace.HitPos.Z); wall = trace.Line->sidedef[trace.Side]; decal->StickToWall(wall, trace.HitPos.X, trace.HitPos.Y, trace.ffloor); tpl->ApplyToDecal(decal, wall); @@ -744,18 +841,22 @@ DBaseDecal *ShootDecal(const FDecalTemplate *tpl, AActor *basisactor, sector_t * } else { - return DImpactDecal::StaticCreate(tpl, trace.HitPos, trace.Line->sidedef[trace.Side], NULL); + return DImpactDecal::StaticCreate(Level, tpl, trace.HitPos, trace.Line->sidedef[trace.Side], NULL); } } return NULL; } -DEFINE_ACTION_FUNCTION(ADecal, SpawnDecal) +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + +static void SpawnDecal(AActor *self) { - PARAM_SELF_PROLOGUE(AActor); - const FDecalTemplate *tpl = nullptr; - + if (self->args[0] < 0) { FName name = ENamedName(-self->args[0]); @@ -766,7 +867,7 @@ DEFINE_ACTION_FUNCTION(ADecal, SpawnDecal) int decalid = self->args[0] + (self->args[1] << 8); // [KS] High byte for decals. tpl = DecalLibrary.GetDecalByNum(decalid); } - + // If no decal is specified, don't try to create one. if (tpl != nullptr) { @@ -779,7 +880,7 @@ DEFINE_ACTION_FUNCTION(ADecal, SpawnDecal) // Look for a wall within 64 units behind the actor. If none can be // found, then no decal is created, and this actor is destroyed // without effectively doing anything. - if (NULL == ShootDecal(tpl, self, self->Sector, self->X(), self->Y(), self->Z(), self->Angles.Yaw + 180, 64., true)) + if (!ShootDecal(self->Level, tpl, self->Sector, self->X(), self->Y(), self->Z(), self->Angles.Yaw + 180, 64., true)) { DPrintf (DMSG_WARNING, "Could not find a wall to stick decal to at (%f,%f)\n", self->X(), self->Y()); } @@ -789,5 +890,11 @@ DEFINE_ACTION_FUNCTION(ADecal, SpawnDecal) { DPrintf (DMSG_ERROR, "Decal actor at (%f,%f) does not have a good template\n", self->X(), self->Y()); } +} + +DEFINE_ACTION_FUNCTION_NATIVE(ADecal, SpawnDecal, SpawnDecal) +{ + PARAM_SELF_PROLOGUE(AActor); + SpawnDecal(self); return 0; } diff --git a/src/p_doors.cpp b/src/g_shared/a_doors.cpp similarity index 93% rename from src/p_doors.cpp rename to src/g_shared/a_doors.cpp index ec38df3262..c3c8b92e86 100644 --- a/src/p_doors.cpp +++ b/src/g_shared/a_doors.cpp @@ -47,10 +47,6 @@ IMPLEMENT_CLASS(DDoor, false, false) -DDoor::DDoor () -{ -} - void DDoor::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -136,7 +132,7 @@ void DDoor::Tick () // killough 10/98: implement gradual lighting effects if (m_LightTag != 0 && m_TopDist != -m_Sector->floorplane.fD()) { - EV_LightTurnOnPartway (m_LightTag, + Level->EV_LightTurnOnPartway (m_LightTag, (m_Sector->ceilingplane.fD() + m_Sector->floorplane.fD()) / (m_TopDist + m_Sector->floorplane.fD())); } @@ -182,7 +178,7 @@ void DDoor::Tick () // killough 10/98: implement gradual lighting effects if (m_LightTag != 0 && m_TopDist != -m_Sector->floorplane.fD()) { - EV_LightTurnOnPartway (m_LightTag, + Level->EV_LightTurnOnPartway (m_LightTag, (m_Sector->ceilingplane.fD() + m_Sector->floorplane.fD()) / (m_TopDist + m_Sector->floorplane.fD())); } @@ -332,9 +328,9 @@ void DDoor::DoorSound(bool raise, DSeqNode *curseq) const } } -DDoor::DDoor (sector_t *sector) - : DMovingCeiling (sector) +void DDoor::Construct(sector_t *sector) { + Super::Construct(sector); } //============================================================================ @@ -343,14 +339,20 @@ DDoor::DDoor (sector_t *sector) // //============================================================================ -DDoor::DDoor (sector_t *sec, EVlDoor type, double speed, int delay, int lightTag, int topcountdown) - : DMovingCeiling (sec), - m_Type (type), m_Speed (speed), m_TopWait (delay), m_TopCountdown(topcountdown), m_LightTag (lightTag) +void DDoor::Construct(sector_t *sec, EVlDoor type, double speed, int delay, int lightTag, int topcountdown) { vertex_t *spot; double height; - if (i_compatflags & COMPATF_NODOORLIGHT) + Super::Construct(sec); + + m_Type = type; + m_Speed = speed; + m_TopWait = delay; + m_TopCountdown = topcountdown; + m_LightTag = lightTag; + + if (Level->i_compatflags & COMPATF_NODOORLIGHT) { m_LightTag = 0; } @@ -417,7 +419,7 @@ DDoor::DDoor (sector_t *sec, EVlDoor type, double speed, int delay, int lightTag // //============================================================================ -bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing, +bool FLevelLocals::EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing, int tag, double speed, int delay, int lock, int lightTag, bool boomgen, int topcountdown) { bool rtn = false; @@ -484,21 +486,21 @@ bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing, } return false; } - if (Create (sec, type, speed, delay, lightTag, topcountdown)) + if (CreateThinker (sec, type, speed, delay, lightTag, topcountdown)) rtn = true; } else { // [RH] Remote door - FSectorTagIterator it(tag); + auto it = GetSectorTagIterator(tag); while ((secnum = it.Next()) >= 0) { - sec = &level.sectors[secnum]; + sec = §ors[secnum]; // if the ceiling is already moving, don't start the door action if (sec->PlaneMoving(sector_t::ceiling)) continue; - if (Create(sec, type, speed, delay, lightTag, topcountdown)) + if (CreateThinker(sec, type, speed, delay, lightTag, topcountdown)) rtn = true; } @@ -514,13 +516,9 @@ bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing, IMPLEMENT_CLASS(DAnimatedDoor, false, false) -DAnimatedDoor::DAnimatedDoor () -{ -} - -DAnimatedDoor::DAnimatedDoor (sector_t *sec) - : DMovingCeiling (sec, false) +void DAnimatedDoor::Construct(sector_t *sec) { + Super::Construct(sec, false); } void DAnimatedDoor::Serialize(FSerializer &arc) @@ -683,12 +681,13 @@ void DAnimatedDoor::Tick () // //============================================================================ -DAnimatedDoor::DAnimatedDoor (sector_t *sec, line_t *line, int speed, int delay, FDoorAnimation *anim, DAnimatedDoor::EADType type) - : DMovingCeiling (sec, false) +void DAnimatedDoor::Construct(sector_t *sec, line_t *line, int speed, int delay, FDoorAnimation *anim, DAnimatedDoor::EADType type) { double topdist; FTextureID picnum; + Super::Construct(sec, false); + m_DoorAnim = anim; m_Line1 = line; @@ -748,7 +747,7 @@ DAnimatedDoor::DAnimatedDoor (sector_t *sec, line_t *line, int speed, int delay, // //============================================================================ -bool EV_SlidingDoor (line_t *line, AActor *actor, int tag, int speed, int delay, DAnimatedDoor::EADType type) +bool FLevelLocals::EV_SlidingDoor (line_t *line, AActor *actor, int tag, int speed, int delay, DAnimatedDoor::EADType type) { sector_t *sec; int secnum; @@ -781,16 +780,16 @@ bool EV_SlidingDoor (line_t *line, AActor *actor, int tag, int speed, int delay, FDoorAnimation *anim = TexMan.FindAnimatedDoor (line->sidedef[0]->GetTexture(side_t::top)); if (anim != NULL) { - Create(sec, line, speed, delay, anim, type); + CreateThinker(sec, line, speed, delay, anim, type); return true; } return false; } - FSectorTagIterator it(tag); + auto it = GetSectorTagIterator(tag); while ((secnum = it.Next()) >= 0) { - sec = &level.sectors[secnum]; + sec = §ors[secnum]; if (sec->ceilingdata != NULL) { continue; @@ -806,7 +805,7 @@ bool EV_SlidingDoor (line_t *line, AActor *actor, int tag, int speed, int delay, if (anim != NULL) { rtn = true; - Create(sec, line, speed, delay, anim, type); + CreateThinker(sec, line, speed, delay, anim, type); break; } } diff --git a/src/g_shared/a_doors.h b/src/g_shared/a_doors.h new file mode 100644 index 0000000000..88c0c5667f --- /dev/null +++ b/src/g_shared/a_doors.h @@ -0,0 +1,87 @@ +#pragma once + +// +// P_DOORS +// +class DDoor : public DMovingCeiling +{ + DECLARE_CLASS (DDoor, DMovingCeiling) +public: + enum EVlDoor + { + doorClose, + doorOpen, + doorRaise, + doorWaitRaise, + doorCloseWaitOpen, + doorWaitClose, + }; + + void Construct(sector_t *sector); + void Construct(sector_t *sec, EVlDoor type, double speed, int delay, int lightTag, int topcountdown); + + void Serialize(FSerializer &arc); + void Tick (); +protected: + EVlDoor m_Type; + double m_TopDist; + double m_BotDist, m_OldFloorDist; + vertex_t *m_BotSpot; + double m_Speed; + + // 1 = up, 0 = waiting at top, -1 = down + int m_Direction; + + // tics to wait at the top + int m_TopWait; + // (keep in case a door going down is reset) + // when it reaches 0, start going down + int m_TopCountdown; + + int m_LightTag; + + void DoorSound (bool raise, class DSeqNode *curseq=NULL) const; + +private: + friend struct FLevelLocals; +}; + +class DAnimatedDoor : public DMovingCeiling +{ + DECLARE_CLASS (DAnimatedDoor, DMovingCeiling) +public: + + enum EADType + { + adOpenClose, + adClose + }; + + void Construct(sector_t *sector); + void Construct(sector_t *sec, line_t *line, int speed, int delay, FDoorAnimation *anim, EADType type); + + void Serialize(FSerializer &arc); + void Tick (); + + bool StartClosing (); +protected: + line_t *m_Line1, *m_Line2; + int m_Frame; + FDoorAnimation *m_DoorAnim; + int m_Timer; + double m_BotDist; + int m_Status; + int m_Type; + enum + { + Opening, + Waiting, + Closing, + Dead + }; + int m_Speed; + int m_Delay; + bool m_SetBlocking1, m_SetBlocking2; + + friend struct FLevelLocals; +}; diff --git a/src/g_shared/a_dynlight.cpp b/src/g_shared/a_dynlight.cpp index 701e228530..d1b91af9d3 100644 --- a/src/g_shared/a_dynlight.cpp +++ b/src/g_shared/a_dynlight.cpp @@ -69,28 +69,8 @@ static FMemArena DynLightArena(sizeof(FDynamicLight) * 200); static TArray FreeList; static FRandom randLight; -CUSTOM_CVAR (Bool, gl_lights, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) -{ - if (self) AActor::RecreateAllAttachedLights(); - else AActor::DeleteAllAttachedLights(); -} +extern TArray StateLights; -//========================================================================== -// -//========================================================================== -DEFINE_CLASS_PROPERTY(type, S, DynamicLight) -{ - PROP_STRING_PARM(str, 0); - static const char * ltype_names[]={ - "Point","Pulse","Flicker","Sector","RandomFlicker", "ColorPulse", "ColorFlicker", "RandomColorFlicker", nullptr}; - - static const int ltype_values[]={ - PointLight, PulseLight, FlickerLight, SectorLight, RandomFlickerLight, ColorPulseLight, ColorFlickerLight, RandomColorFlickerLight }; - - int style = MatchString(str, ltype_names); - if (style < 0) I_Error("Unknown light type '%s'", str); - defaults->IntVar(NAME_lighttype) = ltype_values[style]; -} //========================================================================== // @@ -98,7 +78,7 @@ DEFINE_CLASS_PROPERTY(type, S, DynamicLight) // //========================================================================== -static FDynamicLight *GetLight() +static FDynamicLight *GetLight(FLevelLocals *Level) { FDynamicLight *ret; if (FreeList.Size()) @@ -107,11 +87,12 @@ static FDynamicLight *GetLight() } else ret = (FDynamicLight*)DynLightArena.Alloc(sizeof(FDynamicLight)); memset(ret, 0, sizeof(*ret)); - ret->next = level.lights; - level.lights = ret; + ret->next = Level->lights; + Level->lights = ret; if (ret->next) ret->next->prev = ret; ret->visibletoplayer = true; ret->mShadowmapIndex = 1024; + ret->Level = Level; ret->Pos.X = -10000000; // not a valid coordinate. return ret; } @@ -126,7 +107,7 @@ static FDynamicLight *GetLight() void AttachLight(AActor *self) { - auto light = GetLight(); + auto light = GetLight(self->Level); light->pSpotInnerAngle = &self->AngleVar(NAME_SpotInnerAngle); light->pSpotOuterAngle = &self->AngleVar(NAME_SpotOuterAngle); @@ -219,9 +200,9 @@ DEFINE_ACTION_FUNCTION_NATIVE(ADynamicLight, SetOffset, SetOffset) void FDynamicLight::ReleaseLight() { - assert(prev != nullptr || this == level.lights); + assert(prev != nullptr || this == Level->lights); if (prev != nullptr) prev->next = next; - else level.lights = next; + else Level->lights = next; if (next != nullptr) next->prev = prev; next = prev = nullptr; FreeList.Push(this); @@ -243,7 +224,7 @@ void FDynamicLight::Activate() { float pulseTime = float(specialf1 / TICRATE); - m_lastUpdate = level.maptime; + m_lastUpdate = Level->maptime; if (!swapped) m_cycler.SetParams(float(GetSecondaryIntensity()), float(GetIntensity()), pulseTime); else m_cycler.SetParams(float(GetIntensity()), float(GetSecondaryIntensity()), pulseTime); m_cycler.ShouldCycle(true); @@ -292,9 +273,9 @@ void FDynamicLight::Tick() { case PulseLight: { - float diff = (level.maptime - m_lastUpdate) / (float)TICRATE; + float diff = (Level->maptime - m_lastUpdate) / (float)TICRATE; - m_lastUpdate = level.maptime; + m_lastUpdate = Level->maptime; m_cycler.Update(diff); m_currentRadius = float(m_cycler.GetVal()); break; @@ -501,9 +482,9 @@ static FLightNode * DeleteLightNode(FLightNode * node) tn=node->nextTarget; delete node; return(tn); - } + } return(nullptr); -} // phares 3/13/98 +} @@ -588,7 +569,7 @@ void FDynamicLight::CollectWithinRadius(const DVector3 &opos, FSection *section, line_t *other = port->mDestination; if (other->validcount != ::validcount) { - subsector_t *othersub = R_PointInSubsector(other->v1->fPos() + other->Delta() / 2); + subsector_t *othersub = Level->PointInRenderSubsector(other->v1->fPos() + other->Delta() / 2); FSection *othersect = othersub->section; if (othersect->validcount != ::validcount) { @@ -639,7 +620,7 @@ void FDynamicLight::CollectWithinRadius(const DVector3 &opos, FSection *section, if (sec->GetPortalPlaneZ(sector_t::ceiling) < Z() + radius) { DVector2 refpos = other->v1->fPos() + other->Delta() / 2 + sec->GetPortalDisplacement(sector_t::ceiling); - subsector_t *othersub = R_PointInSubsector(refpos); + subsector_t *othersub = Level->PointInRenderSubsector(refpos); FSection *othersect = othersub->section; if (othersect->validcount != dl_validcount) { @@ -654,7 +635,7 @@ void FDynamicLight::CollectWithinRadius(const DVector3 &opos, FSection *section, if (sec->GetPortalPlaneZ(sector_t::floor) > Z() - radius) { DVector2 refpos = other->v1->fPos() + other->Delta() / 2 + sec->GetPortalDisplacement(sector_t::floor); - subsector_t *othersub = R_PointInSubsector(refpos); + subsector_t *othersub = Level->PointInRenderSubsector(refpos); FSection *othersect = othersub->section; if (othersect->validcount != dl_validcount) { @@ -694,7 +675,7 @@ void FDynamicLight::LinkLight() if (radius>0) { // passing in radius*radius allows us to do a distance check without any calls to sqrt - FSection *sect = R_PointInSubsector(Pos)->section; + FSection *sect = Level->PointInRenderSubsector(Pos)->section; dl_validcount++; ::validcount++; @@ -758,7 +739,7 @@ void AActor::AttachLight(unsigned int count, const FLightDefaults *lightdef) } else { - light = GetLight(); + light = GetLight(Level); light->SetActor(this, true); AttachedLights.Push(light); } @@ -770,7 +751,6 @@ void AActor::AttachLight(unsigned int count, const FLightDefaults *lightdef) // per-state light adjustment // //========================================================================== -extern TArray StateLights; void AActor::SetDynamicLights() { @@ -830,9 +810,9 @@ void AActor::DeleteAttachedLights() // //========================================================================== -void AActor::DeleteAllAttachedLights() +void FLevelLocals::DeleteAllAttachedLights() { - TThinkerIterator it; + auto it = GetThinkerIterator(); AActor * a; while ((a=it.Next())) @@ -847,9 +827,9 @@ void AActor::DeleteAllAttachedLights() // //========================================================================== -void AActor::RecreateAllAttachedLights() +void FLevelLocals::RecreateAllAttachedLights() { - TThinkerIterator it; + auto it = GetThinkerIterator(); AActor * a; while ((a=it.Next())) @@ -869,60 +849,3 @@ void AActor::RecreateAllAttachedLights() } } -//========================================================================== -// -// CCMDs -// -//========================================================================== - -CCMD(listlights) -{ - int walls, sectors; - int allwalls=0, allsectors=0, allsubsecs = 0; - int i=0, shadowcount = 0; - FDynamicLight * dl; - - for (dl = level.lights; dl; dl = dl->next) - { - walls=0; - sectors=0; - Printf("%s at (%f, %f, %f), color = 0x%02x%02x%02x, radius = %f %s %s", - dl->target->GetClass()->TypeName.GetChars(), - dl->X(), dl->Y(), dl->Z(), dl->GetRed(), dl->GetGreen(), dl->GetBlue(), - dl->radius, dl->IsAttenuated()? "attenuated" : "", dl->shadowmapped? "shadowmapped" : ""); - i++; - shadowcount += dl->shadowmapped; - - if (dl->target) - { - FTextureID spr = sprites[dl->target->sprite].GetSpriteFrame(dl->target->frame, 0, 0., nullptr); - Printf(", frame = %s ", TexMan.GetTexture(spr)->GetName().GetChars()); - } - - - FLightNode * node; - - node=dl->touching_sides; - - while (node) - { - walls++; - allwalls++; - node = node->nextTarget; - } - - - node = dl->touching_sector; - - while (node) - { - allsectors++; - sectors++; - node = node->nextTarget; - } - Printf("- %d walls, %d sectors\n", walls, sectors); - - } - Printf("%i dynamic lights, %d shadowmapped, %d walls, %d sectors\n\n\n", i, shadowcount, allwalls, allsectors); -} - diff --git a/src/g_shared/a_dynlight.h b/src/g_shared/a_dynlight.h index 0d454ab053..54da9e7d54 100644 --- a/src/g_shared/a_dynlight.h +++ b/src/g_shared/a_dynlight.h @@ -4,9 +4,6 @@ #include "cycler.h" #include "g_levellocals.h" -EXTERN_CVAR(Bool, r_dynlights) -EXTERN_CVAR(Bool, gl_lights) - struct side_t; struct seg_t; @@ -75,7 +72,7 @@ public: void SetSpot(bool spot) { if (spot) m_lightFlags |= LF_SPOT; else m_lightFlags &= ~LF_SPOT; } void SetSpotInnerAngle(double angle) { m_spotInnerAngle = angle; } void SetSpotOuterAngle(double angle) { m_spotOuterAngle = angle; } - static void SetAttenuationForLevel(); + static void SetAttenuationForLevel(bool); void OrderIntensities() { @@ -169,7 +166,7 @@ struct FDynamicLight inline DVector3 PosRelative(int portalgroup) const { - return Pos + level.Displacements.getOffset(Sector->PortalGroup, portalgroup); + return Pos + Level->Displacements.getOffset(Sector->PortalGroup, portalgroup); } bool ShouldLightActor(AActor *check) @@ -232,6 +229,7 @@ public: double specialf1; FDynamicLight *next, *prev; sector_t *Sector; + FLevelLocals *Level; TObjPtr target; FLightNode * touching_sides; FLightNode * touching_sector; diff --git a/src/g_shared/a_flashfader.cpp b/src/g_shared/a_flashfader.cpp index 5c20205f3f..e08ae8bf65 100644 --- a/src/g_shared/a_flashfader.cpp +++ b/src/g_shared/a_flashfader.cpp @@ -43,16 +43,30 @@ IMPLEMENT_POINTERS_START(DFlashFader) IMPLEMENT_POINTER(ForWho) IMPLEMENT_POINTERS_END -DFlashFader::DFlashFader (float r1, float g1, float b1, float a1, +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + +void DFlashFader::Construct (float r1, float g1, float b1, float a1, float r2, float g2, float b2, float a2, float time, AActor *who, bool terminate) - : TotalTics ((int)(time*TICRATE)), RemainingTics(TotalTics), ForWho (who) { + TotalTics = (int)(time*TICRATE); + RemainingTics = TotalTics; + ForWho = who; Blends[0][0]=r1; Blends[0][1]=g1; Blends[0][2]=b1; Blends[0][3]=a1; Blends[1][0]=r2; Blends[1][1]=g2; Blends[1][2]=b2; Blends[1][3]=a2; Terminate = terminate; } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DFlashFader::OnDestroy () { if (Terminate) Blends[1][3] = 0.f; // Needed in order to cancel out the secondary fade. @@ -60,6 +74,12 @@ void DFlashFader::OnDestroy () Super::OnDestroy(); } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DFlashFader::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -69,6 +89,12 @@ void DFlashFader::Serialize(FSerializer &arc) .Array("blends", Blends[0], 8); } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DFlashFader::Tick () { if (ForWho == NULL || ForWho->player == NULL) @@ -85,6 +111,12 @@ void DFlashFader::Tick () SetBlend (1.f - (float)RemainingTics / (float)TotalTics); } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DFlashFader::SetBlend (float time) { if (ForWho == NULL || ForWho->player == NULL) @@ -99,6 +131,12 @@ void DFlashFader::SetBlend (float time) player->BlendA = Blends[0][3]*iT + Blends[1][3]*time; } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DFlashFader::Cancel () { RemainingTics = 0; diff --git a/src/p_floor.cpp b/src/g_shared/a_floor.cpp similarity index 92% rename from src/p_floor.cpp rename to src/g_shared/a_floor.cpp index e36a1aca2a..0bd2ae5b72 100644 --- a/src/p_floor.cpp +++ b/src/g_shared/a_floor.cpp @@ -73,10 +73,6 @@ static void StartFloorSound (sector_t *sec) IMPLEMENT_CLASS(DFloor, false, false) -DFloor::DFloor () -{ -} - void DFloor::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -192,19 +188,19 @@ void DFloor::Tick () sector_t *sec = m_Sector; sec->stairlock = -1; // thinker done, promote lock to -1 - while (sec->prevsec != -1 && level.sectors[sec->prevsec].stairlock != -2) - sec = &level.sectors[sec->prevsec]; // search for a non-done thinker + while (sec->prevsec != -1 && Level->sectors[sec->prevsec].stairlock != -2) + sec = &Level->sectors[sec->prevsec]; // search for a non-done thinker if (sec->prevsec == -1) // if all thinkers previous are done { sec = m_Sector; // search forward - while (sec->nextsec != -1 && level.sectors[sec->nextsec].stairlock != -2) - sec = &level.sectors[sec->nextsec]; + while (sec->nextsec != -1 && Level->sectors[sec->nextsec].stairlock != -2) + sec = &Level->sectors[sec->nextsec]; if (sec->nextsec == -1) // if all thinkers ahead are done too { while (sec->prevsec != -1) // clear all locks { sec->stairlock = 0; - sec = &level.sectors[sec->prevsec]; + sec = &Level->sectors[sec->prevsec]; } sec->stairlock = 0; } @@ -259,9 +255,9 @@ void DFloor::StartFloorSound () // //========================================================================== -DFloor::DFloor (sector_t *sec) - : DMovingFloor (sec) +void DFloor::Construct(sector_t *sec) { + Super::Construct(sec); } //========================================================================== @@ -270,7 +266,7 @@ DFloor::DFloor (sector_t *sec) // //========================================================================== -bool P_CreateFloor(sector_t *sec, DFloor::EFloor floortype, line_t *line, +bool FLevelLocals::CreateFloor(sector_t *sec, DFloor::EFloor floortype, line_t *line, double speed, double height, int crush, int change, bool hexencrush, bool hereticlower) { bool rtn; @@ -287,7 +283,7 @@ bool P_CreateFloor(sector_t *sec, DFloor::EFloor floortype, line_t *line, // new floor thinker rtn = true; - floor = Create(sec); + floor = CreateThinker(sec); floor->m_Type = floortype; floor->m_Crush = crush; floor->m_Hexencrush = hexencrush; @@ -465,7 +461,7 @@ bool P_CreateFloor(sector_t *sec, DFloor::EFloor floortype, line_t *line, // [Graf Zahl] // Don't make sounds for instant movement hacks but make an exception for // switches that activate their own back side. - if (!(i_compatflags & COMPATF_SILENT_INSTANT_FLOORS)) + if (!(sec->Level->i_compatflags & COMPATF_SILENT_INSTANT_FLOORS)) { if (!line || !(line->activation & (SPAC_Use | SPAC_Push)) || line->backsector != sec) silent = true; @@ -502,9 +498,9 @@ bool P_CreateFloor(sector_t *sec, DFloor::EFloor floortype, line_t *line, return true; } -DEFINE_ACTION_FUNCTION(DFloor, CreateFloor) +DEFINE_ACTION_FUNCTION(FLevelLocals, CreateFloor) { - PARAM_PROLOGUE; + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_POINTER_NOT_NULL(sec, sector_t); PARAM_INT(floortype); PARAM_POINTER(ln, line_t); @@ -514,7 +510,7 @@ DEFINE_ACTION_FUNCTION(DFloor, CreateFloor) PARAM_INT(change); PARAM_BOOL(hereticlower); PARAM_BOOL(hexencrush); - ACTION_RETURN_BOOL(P_CreateFloor(sec, (DFloor::EFloor)floortype, ln, speed, height, crush, change, hexencrush, hereticlower)); + ACTION_RETURN_BOOL(self->CreateFloor(sec, (DFloor::EFloor)floortype, ln, speed, height, crush, change, hexencrush, hereticlower)); } //========================================================================== @@ -525,17 +521,17 @@ DEFINE_ACTION_FUNCTION(DFloor, CreateFloor) // //========================================================================== -bool EV_DoFloor (DFloor::EFloor floortype, line_t *line, int tag, +bool FLevelLocals::EV_DoFloor (DFloor::EFloor floortype, line_t *line, int tag, double speed, double height, int crush, int change, bool hexencrush, bool hereticlower) { int secnum; bool rtn = false; // check if a manual trigger; if so do just the sector on the backside - FSectorTagIterator it(tag, line); + auto it = GetSectorTagIterator(tag, line); while ((secnum = it.Next()) >= 0) { - rtn |= P_CreateFloor(&level.sectors[secnum], floortype, line, speed, height, crush, change, hexencrush, hereticlower); + rtn |= CreateFloor(§ors[secnum], floortype, line, speed, height, crush, change, hexencrush, hereticlower); } return rtn; } @@ -548,13 +544,13 @@ bool EV_DoFloor (DFloor::EFloor floortype, line_t *line, int tag, // //========================================================================== -bool EV_FloorCrushStop (int tag, line_t *line) +bool FLevelLocals::EV_FloorCrushStop (int tag, line_t *line) { int secnum; - FSectorTagIterator it(tag, line); + auto it = GetSectorTagIterator(tag, line); while ((secnum = it.Next()) >= 0) { - sector_t *sec = &level.sectors[secnum]; + sector_t *sec = §ors[secnum]; if (sec->floordata && sec->floordata->IsKindOf (RUNTIME_CLASS(DFloor)) && barrier_cast(sec->floordata)->m_Type == DFloor::floorRaiseAndCrush) @@ -568,17 +564,17 @@ bool EV_FloorCrushStop (int tag, line_t *line) } // same as above but stops any floor mover that was active on the given sector. -bool EV_StopFloor(int tag, line_t *line) +bool FLevelLocals::EV_StopFloor(int tag, line_t *line) { int sec; - FSectorTagIterator it(tag, line); + auto it = GetSectorTagIterator(tag, line); while ((sec = it.Next()) >= 0) { - if (level.sectors[sec].floordata) + if (sectors[sec].floordata) { - SN_StopSequence(&level.sectors[sec], CHAN_FLOOR); - level.sectors[sec].floordata->Destroy(); - level.sectors[sec].floordata = nullptr; + SN_StopSequence(§ors[sec], CHAN_FLOOR); + sectors[sec].floordata->Destroy(); + sectors[sec].floordata = nullptr; } } return true; @@ -593,9 +589,7 @@ bool EV_StopFloor(int tag, line_t *line) // //========================================================================== -bool EV_BuildStairs (int tag, DFloor::EStair type, line_t *line, - double stairsize, double speed, int delay, int reset, int igntxt, - int usespecials) +bool FLevelLocals::EV_BuildStairs (int tag, DFloor::EStair type, line_t *line, double stairsize, double speed, int delay, int reset, int igntxt, int usespecials) { int secnum = -1; int osecnum; //jff 3/4/98 save old loop index @@ -619,13 +613,13 @@ bool EV_BuildStairs (int tag, DFloor::EStair type, line_t *line, persteptime = int(stairsize / speed); // check if a manual trigger, if so do just the sector on the backside - FSectorTagIterator itr(tag, line); + auto itr = GetSectorTagIterator(tag, line); // The compatibility mode doesn't work with a hashing algorithm. // It needs the original linear search method. This was broken in Boom. bool compatible = tag != 0 && (i_compatflags & COMPATF_STAIRINDEX); while ((secnum = itr.NextCompat(compatible, secnum)) >= 0) { - sec = &level.sectors[secnum]; + sec = §ors[secnum]; // ALREADY MOVING? IF SO, KEEP GOING... //jff 2/26/98 add special lockout condition to wait for entire @@ -637,7 +631,7 @@ bool EV_BuildStairs (int tag, DFloor::EStair type, line_t *line, // new floor thinker rtn = true; - floor = Create (sec); + floor = CreateThinker (sec); floor->m_Direction = (type == DFloor::buildUp) ? 1 : -1; stairstep = stairsize * floor->m_Direction; floor->m_Type = DFloor::buildStair; //jff 3/31/98 do not leave uninited @@ -740,7 +734,7 @@ bool EV_BuildStairs (int tag, DFloor::EStair type, line_t *line, secnum = newsecnum; // create and initialize a thinker for the next step - floor = Create (sec); + floor = CreateThinker (sec); floor->StartFloorSound (); floor->m_Direction = (type == DFloor::buildUp) ? 1 : -1; floor->m_FloorDestDist = sec->floorplane.PointToDist (DVector2(0, 0), height); @@ -770,7 +764,7 @@ bool EV_BuildStairs (int tag, DFloor::EStair type, line_t *line, } while (ok); // [RH] make sure the first sector doesn't point to a previous one, otherwise // it can infinite loop when the first sector stops moving. - level.sectors[osecnum].prevsec = -1; + sectors[osecnum].prevsec = -1; } return rtn; } @@ -781,7 +775,7 @@ bool EV_BuildStairs (int tag, DFloor::EStair type, line_t *line, // //========================================================================== -bool EV_DoDonut (int tag, line_t *line, double pillarspeed, double slimespeed) +bool FLevelLocals::EV_DoDonut (int tag, line_t *line, double pillarspeed, double slimespeed) { sector_t* s1; sector_t* s2; @@ -794,10 +788,10 @@ bool EV_DoDonut (int tag, line_t *line, double pillarspeed, double slimespeed) rtn = false; - FSectorTagIterator itr(tag, line); + auto itr = GetSectorTagIterator(tag, line); while ((secnum = itr.Next()) >= 0) { - s1 = &level.sectors[secnum]; // s1 is pillar's sector + s1 = §ors[secnum]; // s1 is pillar's sector // ALREADY MOVING? IF SO, KEEP GOING... if (s1->PlaneMoving(sector_t::floor)) @@ -819,7 +813,7 @@ bool EV_DoDonut (int tag, line_t *line, double pillarspeed, double slimespeed) s3 = ln->backsector; // Spawn rising slime - floor = Create (s2); + floor = CreateThinker (s2); floor->m_Type = DFloor::donutRaise; floor->m_Crush = -1; floor->m_Hexencrush = false; @@ -834,7 +828,7 @@ bool EV_DoDonut (int tag, line_t *line, double pillarspeed, double slimespeed) floor->StartFloorSound (); // Spawn lowering donut-hole - floor = Create (s1); + floor = CreateThinker (s1); floor->m_Type = DFloor::floorLowerToNearest; floor->m_Crush = -1; floor->m_Hexencrush = false; @@ -864,13 +858,9 @@ IMPLEMENT_POINTERS_START(DElevator) IMPLEMENT_POINTER(m_Interp_Ceiling) IMPLEMENT_POINTERS_END -DElevator::DElevator () -{ -} - -DElevator::DElevator (sector_t *sec) - : Super (sec) +void DElevator::Construct(sector_t *sec) { + Super::Construct(sec); sec->floordata = this; sec->ceilingdata = this; m_Interp_Floor = sec->SetInterpolation(sector_t::FloorMove, true); @@ -994,7 +984,7 @@ void DElevator::StartFloorSound () // //========================================================================== -bool EV_DoElevator (line_t *line, DElevator::EElevator elevtype, +bool FLevelLocals::EV_DoElevator (line_t *line, DElevator::EElevator elevtype, double speed, double height, int tag) { int secnum; @@ -1011,19 +1001,19 @@ bool EV_DoElevator (line_t *line, DElevator::EElevator elevtype, secnum = -1; rtn = false; - FSectorTagIterator itr(tag, line); + auto itr = GetSectorTagIterator(tag, line); // act on all sectors with the same tag as the triggering linedef while ((secnum = itr.Next()) >= 0) { - sec = &level.sectors[secnum]; + sec = §ors[secnum]; // If either floor or ceiling is already activated, skip it if (sec->PlaneMoving(sector_t::floor) || sec->ceilingdata) //jff 2/22/98 continue; // the loop used to break at the end if tag were 0, but would miss that step if "continue" occured [FDARI] // create and initialize new elevator thinker rtn = true; - elevator = Create (sec); + elevator = CreateThinker (sec); elevator->m_Type = elevtype; elevator->m_Speed = speed; elevator->StartFloorSound (); @@ -1097,7 +1087,7 @@ bool EV_DoElevator (line_t *line, DElevator::EElevator elevtype, // //========================================================================== -bool EV_DoChange (line_t *line, EChange changetype, int tag) +bool FLevelLocals::EV_DoChange (line_t *line, EChange changetype, int tag) { int secnum; bool rtn; @@ -1106,10 +1096,10 @@ bool EV_DoChange (line_t *line, EChange changetype, int tag) rtn = false; // change all sectors with the same tag as the linedef - FSectorTagIterator it(tag); + auto it = GetSectorTagIterator(tag); while ((secnum = it.Next()) >= 0) { - sec = &level.sectors[secnum]; + sec = §ors[secnum]; rtn = true; @@ -1151,10 +1141,6 @@ IMPLEMENT_CLASS(DWaggleBase, false, false) IMPLEMENT_CLASS(DFloorWaggle, false, false) IMPLEMENT_CLASS(DCeilingWaggle, false, false) -DWaggleBase::DWaggleBase () -{ -} - void DWaggleBase::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -1178,9 +1164,9 @@ void DWaggleBase::Serialize(FSerializer &arc) #define WGLSTATE_STABLE 2 #define WGLSTATE_REDUCE 3 -DWaggleBase::DWaggleBase (sector_t *sec) - : Super (sec) +void DWaggleBase::Construct(sector_t *sec) { + Super::Construct(sec); } //========================================================================== @@ -1266,13 +1252,9 @@ void DWaggleBase::DoWaggle (bool ceiling) // //========================================================================== -DFloorWaggle::DFloorWaggle () -{ -} - -DFloorWaggle::DFloorWaggle (sector_t *sec) - : Super (sec) +void DFloorWaggle::Construct(sector_t *sec) { + Super::Construct(sec); sec->floordata = this; interpolation = sec->SetInterpolation(sector_t::FloorMove, true); } @@ -1288,13 +1270,9 @@ void DFloorWaggle::Tick () // //========================================================================== -DCeilingWaggle::DCeilingWaggle () -{ -} - -DCeilingWaggle::DCeilingWaggle (sector_t *sec) - : Super (sec) +void DCeilingWaggle::Construct(sector_t *sec) { + Super::Construct(sec); sec->ceilingdata = this; interpolation = sec->SetInterpolation(sector_t::CeilingMove, true); } @@ -1310,8 +1288,7 @@ void DCeilingWaggle::Tick () // //========================================================================== -bool EV_StartWaggle (int tag, line_t *line, int height, int speed, int offset, - int timer, bool ceiling) +bool FLevelLocals::EV_StartWaggle (int tag, line_t *line, int height, int speed, int offset, int timer, bool ceiling) { int sectorIndex; sector_t *sector; @@ -1320,11 +1297,11 @@ bool EV_StartWaggle (int tag, line_t *line, int height, int speed, int offset, retCode = false; - FSectorTagIterator itr(tag, line); + auto itr = GetSectorTagIterator(tag, line); while ((sectorIndex = itr.Next()) >= 0) { - sector = &level.sectors[sectorIndex]; + sector = §ors[sectorIndex]; if ((!ceiling && sector->PlaneMoving(sector_t::floor)) || (ceiling && sector->PlaneMoving(sector_t::ceiling))) { // Already busy with another thinker @@ -1333,12 +1310,12 @@ bool EV_StartWaggle (int tag, line_t *line, int height, int speed, int offset, retCode = true; if (ceiling) { - waggle = Create (sector); + waggle = CreateThinker (sector); waggle->m_OriginalDist = sector->ceilingplane.fD(); } else { - waggle = Create (sector); + waggle = CreateThinker (sector); waggle->m_OriginalDist = sector->floorplane.fD(); } waggle->m_Accumulator = offset; diff --git a/src/g_shared/a_floor.h b/src/g_shared/a_floor.h new file mode 100644 index 0000000000..e0331bca69 --- /dev/null +++ b/src/g_shared/a_floor.h @@ -0,0 +1,173 @@ +#pragma once + +// +// P_FLOOR +// + +class DFloor : public DMovingFloor +{ + DECLARE_CLASS (DFloor, DMovingFloor) +public: + enum EFloor + { + floorLowerToLowest, + floorLowerToNearest, + floorLowerToHighest, + floorLowerByValue, + floorRaiseByValue, + floorRaiseToHighest, + floorRaiseToNearest, + floorRaiseAndCrush, + floorRaiseAndCrushDoom, + floorCrushStop, + floorLowerInstant, + floorRaiseInstant, + floorMoveToValue, + floorRaiseToLowestCeiling, + floorRaiseByTexture, + + floorLowerAndChange, + floorRaiseAndChange, + + floorRaiseToLowest, + floorRaiseToCeiling, + floorLowerToLowestCeiling, + floorLowerByTexture, + floorLowerToCeiling, + + donutRaise, + + buildStair, + waitStair, + resetStair, + + // Not to be used as parameters to EV_DoFloor() + genFloorChg0, + genFloorChgT, + genFloorChg + }; + + // [RH] Changed to use Hexen-ish specials + enum EStair + { + buildUp, + buildDown + }; + + enum EStairType + { + stairUseSpecials = 1, + stairSync = 2, + stairCrush = 4, + }; + + void Construct(sector_t *sec); + + void Serialize(FSerializer &arc); + void Tick (); + +//protected: + EFloor m_Type; + int m_Crush; + bool m_Hexencrush; + bool m_Instant; + int m_Direction; + secspecial_t m_NewSpecial{}; + FTextureID m_Texture; + double m_FloorDestDist; + double m_Speed; + + // [RH] New parameters used to reset and delay stairs + double m_OrgDist; + int m_ResetCount; + int m_Delay; + int m_PauseTime; + int m_StepTime; + int m_PerStepTime; + + void StartFloorSound (); + void SetFloorChangeType (sector_t *sec, int change); + friend struct FLevelLocals; +}; + +class DElevator : public DMover +{ + DECLARE_CLASS (DElevator, DMover) + HAS_OBJECT_POINTERS +public: + enum EElevator + { + elevateUp, + elevateDown, + elevateCurrent, + // [RH] For FloorAndCeiling_Raise/Lower + elevateRaise, + elevateLower + }; + + void Construct(sector_t *sec); + + void OnDestroy() override; + void Serialize(FSerializer &arc); + void Tick (); + +protected: + EElevator m_Type; + int m_Direction; + double m_FloorDestDist; + double m_CeilingDestDist; + double m_Speed; + TObjPtr m_Interp_Ceiling; + TObjPtr m_Interp_Floor; + + void StartFloorSound (); + friend struct FLevelLocals; +}; + + +class DWaggleBase : public DMover +{ + DECLARE_CLASS (DWaggleBase, DMover) + HAS_OBJECT_POINTERS +public: + void Construct(sector_t *sec); + + void Serialize(FSerializer &arc); + +protected: + double m_OriginalDist; + double m_Accumulator; + double m_AccDelta; + double m_TargetScale; + double m_Scale; + double m_ScaleDelta; + int m_Ticker; + int m_State; + + friend struct FLevelLocals; + void DoWaggle (bool ceiling); +}; + +class DFloorWaggle : public DWaggleBase +{ + DECLARE_CLASS (DFloorWaggle, DWaggleBase) +public: + void Construct(sector_t *sec); + void Tick (); +}; + +class DCeilingWaggle : public DWaggleBase +{ + DECLARE_CLASS (DCeilingWaggle, DWaggleBase) +public: + void Construct(sector_t *sec); + void Tick (); +}; + +//jff 3/15/98 pure texture/type change for better generalized support +enum EChange +{ + trigChangeOnly, + numChangeOnly, +}; + diff --git a/src/g_shared/a_lightning.cpp b/src/g_shared/a_lightning.cpp index cebc3c8ef4..7c27218ec2 100644 --- a/src/g_shared/a_lightning.cpp +++ b/src/g_shared/a_lightning.cpp @@ -41,14 +41,19 @@ static FRandom pr_lightning ("Lightning"); IMPLEMENT_CLASS(DLightningThinker, false, false) -DLightningThinker::DLightningThinker () - : DThinker (STAT_LIGHTNING) +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + +void DLightningThinker::Construct() { Stopped = false; LightningFlashCount = 0; NextLightningFlash = ((pr_lightning()&15)+5)*35; // don't flash at level start - LightningLightLevels.Resize(level.sectors.Size()); + LightningLightLevels.Resize(Level->sectors.Size()); fillshort(&LightningLightLevels[0], LightningLightLevels.Size(), SHRT_MAX); } @@ -56,6 +61,12 @@ DLightningThinker::~DLightningThinker () { } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DLightningThinker::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -65,6 +76,12 @@ void DLightningThinker::Serialize(FSerializer &arc) ("levels", LightningLightLevels); } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DLightningThinker::Tick () { if (!NextLightningFlash || LightningFlashCount) @@ -78,6 +95,12 @@ void DLightningThinker::Tick () } } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DLightningThinker::LightningFlash () { int i, j; @@ -89,8 +112,8 @@ void DLightningThinker::LightningFlash () LightningFlashCount--; if (LightningFlashCount) { // reduce the brightness of the flash - tempSec = &level.sectors[0]; - for (i = level.sectors.Size(), j = 0; i > 0; ++j, --i, ++tempSec) + tempSec = &Level->sectors[0]; + for (i = Level->sectors.Size(), j = 0; i > 0; ++j, --i, ++tempSec) { // [RH] Checking this sector's applicability to lightning now // is not enough to know if we should lower its light level, @@ -105,24 +128,24 @@ void DLightningThinker::LightningFlash () } else { // remove the alternate lightning flash special - tempSec = &level.sectors[0]; - for (i = level.sectors.Size(), j = 0; i > 0; ++j, --i, ++tempSec) + tempSec = &Level->sectors[0]; + for (i = Level->sectors.Size(), j = 0; i > 0; ++j, --i, ++tempSec) { if (LightningLightLevels[j] != SHRT_MAX) { tempSec->SetLightLevel(LightningLightLevels[j]); } } - fillshort(&LightningLightLevels[0], level.sectors.Size(), SHRT_MAX); - level.flags &= ~LEVEL_SWAPSKIES; + fillshort(&LightningLightLevels[0], Level->sectors.Size(), SHRT_MAX); + Level->flags &= ~LEVEL_SWAPSKIES; } return; } LightningFlashCount = (pr_lightning()&7)+8; flashLight = 200+(pr_lightning()&31); - tempSec = &level.sectors[0]; - for (i = level.sectors.Size(), j = 0; i > 0; ++j, --i, ++tempSec) + tempSec = &Level->sectors[0]; + for (i = Level->sectors.Size(), j = 0; i > 0; ++j, --i, ++tempSec) { // allow combination of the lightning sector specials with bit masks int special = tempSec->special; @@ -152,12 +175,12 @@ void DLightningThinker::LightningFlash () } } - level.flags |= LEVEL_SWAPSKIES; // set alternate sky + Level->flags |= LEVEL_SWAPSKIES; // set alternate sky S_Sound (CHAN_AUTO, "world/thunder", 1.0, ATTN_NONE); // [ZZ] just in case - E_WorldLightning(); + Level->localEventManager->WorldLightning(); // start LIGHTNING scripts - level.Behaviors.StartTypedScripts (SCRIPT_Lightning, NULL, false); // [RH] Run lightning scripts + Level->Behaviors.StartTypedScripts (SCRIPT_Lightning, NULL, false); // [RH] Run lightning scripts // Calculate the next lighting flash if (!NextLightningFlash) @@ -168,7 +191,7 @@ void DLightningThinker::LightningFlash () } else { - if (pr_lightning() < 128 && !(level.time&32)) + if (pr_lightning() < 128 && !(Level->time&32)) { NextLightningFlash = ((pr_lightning()&7)+2)*35; } @@ -180,6 +203,12 @@ void DLightningThinker::LightningFlash () } } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + void DLightningThinker::ForceLightning (int mode) { switch (mode) @@ -197,22 +226,34 @@ void DLightningThinker::ForceLightning (int mode) } } -static DLightningThinker *LocateLightning () +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + +static DLightningThinker *LocateLightning (FLevelLocals *Level) { - TThinkerIterator iterator (STAT_LIGHTNING); + auto iterator = Level->GetThinkerIterator(NAME_None, STAT_LIGHTNING); return iterator.Next (); } -void P_StartLightning () +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + +void FLevelLocals::StartLightning () { const bool isOriginalHexen = (gameinfo.gametype == GAME_Hexen) - && (level.flags2 & LEVEL2_HEXENHACK); + && (flags2 & LEVEL2_HEXENHACK); if (isOriginalHexen) { bool hasLightning = false; - for (const sector_t §or : level.sectors) + for (const sector_t §or : sectors) { hasLightning = sector.GetTexture(sector_t::ceiling) == skyflatnum || sector.special == Light_IndoorLightning1 @@ -226,26 +267,32 @@ void P_StartLightning () if (!hasLightning) { - level.flags &= ~LEVEL_STARTLIGHTNING; + flags &= ~LEVEL_STARTLIGHTNING; return; } } - DLightningThinker *lightning = LocateLightning (); - if (lightning == NULL) + DLightningThinker *lightning = LocateLightning (this); + if (lightning == nullptr) { - Create(); + CreateThinker(); } } -void P_ForceLightning (int mode) +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + +void FLevelLocals::ForceLightning (int mode) { - DLightningThinker *lightning = LocateLightning (); - if (lightning == NULL) + DLightningThinker *lightning = LocateLightning (this); + if (lightning == nullptr) { - lightning = Create(); + lightning = CreateThinker(); } - if (lightning != NULL) + if (lightning != nullptr) { lightning->ForceLightning (mode); } diff --git a/src/g_shared/a_lightning.h b/src/g_shared/a_lightning.h index 62a2604740..89992f620e 100644 --- a/src/g_shared/a_lightning.h +++ b/src/g_shared/a_lightning.h @@ -11,7 +11,8 @@ class DLightningThinker : public DThinker { DECLARE_CLASS (DLightningThinker, DThinker); public: - DLightningThinker (); + static const int DEFAULT_STAT = STAT_LIGHTNING; + void Construct(); ~DLightningThinker (); void Serialize(FSerializer &arc); void Tick (); @@ -27,7 +28,5 @@ protected: TArray LightningLightLevels; }; -void P_StartLightning (); -void P_ForceLightning (int mode); #endif //__A_LIGHTNING_H__ diff --git a/src/p_lights.cpp b/src/g_shared/a_lights.cpp similarity index 70% rename from src/p_lights.cpp rename to src/g_shared/a_lights.cpp index d2f743ad9a..7dce5215fe 100644 --- a/src/p_lights.cpp +++ b/src/g_shared/a_lights.cpp @@ -37,6 +37,8 @@ #include "doomstat.h" #include "p_maputl.h" #include "g_levellocals.h" +#include "maploader/maploader.h" +#include "p_spec_thinkers.h" // State. #include "serializer.h" @@ -47,132 +49,6 @@ static FRandom pr_strobeflash ("StrobeFlash"); static FRandom pr_fireflicker ("FireFlicker"); -class DFireFlicker : public DLighting -{ - DECLARE_CLASS(DFireFlicker, DLighting) -public: - DFireFlicker(sector_t *sector); - DFireFlicker(sector_t *sector, int upper, int lower); - void Serialize(FSerializer &arc); - void Tick(); -protected: - int m_Count; - int m_MaxLight; - int m_MinLight; -private: - DFireFlicker(); -}; - -class DFlicker : public DLighting -{ - DECLARE_CLASS(DFlicker, DLighting) -public: - DFlicker(sector_t *sector, int upper, int lower); - void Serialize(FSerializer &arc); - void Tick(); -protected: - int m_Count; - int m_MaxLight; - int m_MinLight; -private: - DFlicker(); -}; - -class DLightFlash : public DLighting -{ - DECLARE_CLASS(DLightFlash, DLighting) -public: - DLightFlash(sector_t *sector); - DLightFlash(sector_t *sector, int min, int max); - void Serialize(FSerializer &arc); - void Tick(); -protected: - int m_Count; - int m_MaxLight; - int m_MinLight; - int m_MaxTime; - int m_MinTime; -private: - DLightFlash(); -}; - -class DStrobe : public DLighting -{ - DECLARE_CLASS(DStrobe, DLighting) -public: - DStrobe(sector_t *sector, int utics, int ltics, bool inSync); - DStrobe(sector_t *sector, int upper, int lower, int utics, int ltics); - void Serialize(FSerializer &arc); - void Tick(); -protected: - int m_Count; - int m_MinLight; - int m_MaxLight; - int m_DarkTime; - int m_BrightTime; -private: - DStrobe(); -}; - -class DGlow : public DLighting -{ - DECLARE_CLASS(DGlow, DLighting) -public: - DGlow(sector_t *sector); - void Serialize(FSerializer &arc); - void Tick(); -protected: - int m_MinLight; - int m_MaxLight; - int m_Direction; -private: - DGlow(); -}; - -// [RH] Glow from Light_Glow and Light_Fade specials -class DGlow2 : public DLighting -{ - DECLARE_CLASS(DGlow2, DLighting) -public: - DGlow2(sector_t *sector, int start, int end, int tics, bool oneshot); - void Serialize(FSerializer &arc); - void Tick(); -protected: - int m_Start; - int m_End; - int m_MaxTics; - int m_Tics; - bool m_OneShot; -private: - DGlow2(); -}; - -// [RH] Phased light thinker -class DPhased : public DLighting -{ - DECLARE_CLASS(DPhased, DLighting) -public: - DPhased(sector_t *sector); - DPhased(sector_t *sector, int baselevel, int phase); - // These are for internal use only but the Create template needs access to them. - DPhased(); - DPhased(sector_t *sector, int baselevel); - - void Serialize(FSerializer &arc); - void Tick(); -protected: - uint8_t m_BaseLevel; - uint8_t m_Phase; -private: - int PhaseHelper(sector_t *sector, int index, int light, sector_t *prev); -}; - -#define GLOWSPEED 8 -#define STROBEBRIGHT 5 -#define FASTDARK 15 -#define SLOWDARK TICRATE - - //----------------------------------------------------------------------------- // // @@ -181,16 +57,6 @@ private: IMPLEMENT_CLASS(DLighting, false, false) -DLighting::DLighting () -{ -} - -DLighting::DLighting (sector_t *sector) - : DSectorEffect (sector) -{ - ChangeStatNum (STAT_LIGHT); -} - //----------------------------------------------------------------------------- // // FIRELIGHT FLICKER @@ -199,10 +65,6 @@ DLighting::DLighting (sector_t *sector) IMPLEMENT_CLASS(DFireFlicker, false, false) -DFireFlicker::DFireFlicker () -{ -} - void DFireFlicker::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -242,17 +104,17 @@ void DFireFlicker::Tick () // //----------------------------------------------------------------------------- -DFireFlicker::DFireFlicker (sector_t *sector) - : DLighting (sector) +void DFireFlicker::Construct(sector_t *sector) { + Super::Construct(sector); m_MaxLight = sector->lightlevel; m_MinLight = sector_t::ClampLight(FindMinSurroundingLight(sector, sector->lightlevel) + 16); m_Count = 4; } -DFireFlicker::DFireFlicker (sector_t *sector, int upper, int lower) - : DLighting (sector) +void DFireFlicker::Construct(sector_t *sector, int upper, int lower) { + Super::Construct(sector); m_MaxLight = sector_t::ClampLight(upper); m_MinLight = sector_t::ClampLight(lower); m_Count = 4; @@ -266,10 +128,6 @@ DFireFlicker::DFireFlicker (sector_t *sector, int upper, int lower) IMPLEMENT_CLASS(DFlicker, false, false) -DFlicker::DFlicker () -{ -} - void DFlicker::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -308,32 +166,15 @@ void DFlicker::Tick () // //----------------------------------------------------------------------------- -DFlicker::DFlicker (sector_t *sector, int upper, int lower) - : DLighting (sector) +void DFlicker::Construct(sector_t *sector, int upper, int lower) { + Super::Construct(sector); m_MaxLight = sector_t::ClampLight(upper); m_MinLight = sector_t::ClampLight(lower); sector->lightlevel = m_MaxLight; m_Count = (pr_flicker()&64)+1; } -//----------------------------------------------------------------------------- -// -// -// -//----------------------------------------------------------------------------- - -void EV_StartLightFlickering (int tag, int upper, int lower) -{ - int secnum; - FSectorTagIterator it(tag); - while ((secnum = it.Next()) >= 0) - { - Create (&level.sectors[secnum], upper, lower); - } -} - - //----------------------------------------------------------------------------- // // BROKEN LIGHT FLASHING @@ -342,10 +183,6 @@ void EV_StartLightFlickering (int tag, int upper, int lower) IMPLEMENT_CLASS(DLightFlash, false, false) -DLightFlash::DLightFlash () -{ -} - void DLightFlash::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -386,9 +223,9 @@ void DLightFlash::Tick () // //----------------------------------------------------------------------------- -DLightFlash::DLightFlash (sector_t *sector) - : DLighting (sector) +void DLightFlash::Construct(sector_t *sector) { + Super::Construct(sector); // Find light levels like Doom. m_MaxLight = sector->lightlevel; m_MinLight = FindMinSurroundingLight (sector, sector->lightlevel); @@ -397,9 +234,9 @@ DLightFlash::DLightFlash (sector_t *sector) m_Count = (pr_lightflash() & m_MaxTime) + 1; } -DLightFlash::DLightFlash (sector_t *sector, int min, int max) - : DLighting (sector) +void DLightFlash::Construct (sector_t *sector, int min, int max) { + Super::Construct(sector); // Use specified light levels. m_MaxLight = sector_t::ClampLight(max); m_MinLight = sector_t::ClampLight(min); @@ -417,10 +254,6 @@ DLightFlash::DLightFlash (sector_t *sector, int min, int max) IMPLEMENT_CLASS(DStrobe, false, false) -DStrobe::DStrobe () -{ -} - void DStrobe::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -460,9 +293,9 @@ void DStrobe::Tick () // //----------------------------------------------------------------------------- -DStrobe::DStrobe (sector_t *sector, int upper, int lower, int utics, int ltics) - : DLighting (sector) +void DStrobe::Construct(sector_t *sector, int upper, int lower, int utics, int ltics) { + Super::Construct(sector); m_DarkTime = ltics; m_BrightTime = utics; m_MaxLight = sector_t::ClampLight(upper); @@ -476,9 +309,9 @@ DStrobe::DStrobe (sector_t *sector, int upper, int lower, int utics, int ltics) // //----------------------------------------------------------------------------- -DStrobe::DStrobe (sector_t *sector, int utics, int ltics, bool inSync) - : DLighting (sector) +void DStrobe::Construct(sector_t *sector, int utics, int ltics, bool inSync) { + Super::Construct(sector); m_DarkTime = ltics; m_BrightTime = utics; @@ -493,178 +326,7 @@ DStrobe::DStrobe (sector_t *sector, int utics, int ltics, bool inSync) -//----------------------------------------------------------------------------- -// -// Start strobing lights (usually from a trigger) -// [RH] Made it more configurable. -// -//----------------------------------------------------------------------------- -void EV_StartLightStrobing (int tag, int upper, int lower, int utics, int ltics) -{ - int secnum; - FSectorTagIterator it(tag); - while ((secnum = it.Next()) >= 0) - { - sector_t *sec = &level.sectors[secnum]; - if (sec->lightingdata) - continue; - - Create (sec, upper, lower, utics, ltics); - } -} - -void EV_StartLightStrobing (int tag, int utics, int ltics) -{ - int secnum; - FSectorTagIterator it(tag); - while ((secnum = it.Next()) >= 0) - { - sector_t *sec = &level.sectors[secnum]; - if (sec->lightingdata) - continue; - - Create (sec, utics, ltics, false); - } -} - - -//----------------------------------------------------------------------------- -// -// TURN LINE'S TAG LIGHTS OFF -// [RH] Takes a tag instead of a line -// -//----------------------------------------------------------------------------- - -void EV_TurnTagLightsOff (int tag) -{ - int secnum; - FSectorTagIterator it(tag); - while ((secnum = it.Next()) >= 0) - { - sector_t *sector = &level.sectors[secnum]; - int min = sector->lightlevel; - - for (auto ln : sector->Lines) - { - sector_t *tsec = getNextSector (ln, sector); - if (!tsec) - continue; - if (tsec->lightlevel < min) - min = tsec->lightlevel; - } - sector->SetLightLevel(min); - } -} - - -//----------------------------------------------------------------------------- -// -// TURN LINE'S TAG LIGHTS ON -// [RH] Takes a tag instead of a line -// -//----------------------------------------------------------------------------- - -void EV_LightTurnOn (int tag, int bright) -{ - int secnum; - FSectorTagIterator it(tag); - while ((secnum = it.Next()) >= 0) - { - sector_t *sector = &level.sectors[secnum]; - int tbright = bright; //jff 5/17/98 search for maximum PER sector - - // bright = -1 means to search ([RH] Not 0) - // for highest light level - // surrounding sector - if (bright < 0) - { - for (auto ln : sector->Lines) - { - sector_t *temp = getNextSector(ln, sector); - - if (!temp) - continue; - - if (temp->lightlevel > tbright) - tbright = temp->lightlevel; - } - } - sector->SetLightLevel(tbright); - - //jff 5/17/98 unless compatibility optioned - //then maximum near ANY tagged sector - if (i_compatflags & COMPATF_LIGHT) - { - bright = tbright; - } - } -} - -//----------------------------------------------------------------------------- -// -// killough 10/98 -// -// EV_LightTurnOnPartway -// -// Turn sectors tagged to line lights on to specified or max neighbor level -// -// Passed the tag of sector(s) to light and a light level fraction between 0 and 1. -// Sets the light to min on 0, max on 1, and interpolates in-between. -// Used for doors with gradual lighting effects. -// -//----------------------------------------------------------------------------- - -void EV_LightTurnOnPartway (int tag, double frac) -{ - frac = clamp(frac, 0., 1.); - - // Search all sectors for ones with same tag as activating line - int secnum; - FSectorTagIterator it(tag); - while ((secnum = it.Next()) >= 0) - { - sector_t *temp, *sector = &level.sectors[secnum]; - int bright = 0, min = sector->lightlevel; - - for (auto ln : sector->Lines) - { - if ((temp = getNextSector (ln, sector)) != nullptr) - { - if (temp->lightlevel > bright) - { - bright = temp->lightlevel; - } - if (temp->lightlevel < min) - { - min = temp->lightlevel; - } - } - } - sector->SetLightLevel(int(frac * bright + (1 - frac) * min)); - } -} - - -//----------------------------------------------------------------------------- -// -// [RH] New function to adjust tagged sectors' light levels -// by a relative amount. Light levels are clipped to -// be within range for sector_t::lightlevel. -// -//----------------------------------------------------------------------------- - -void EV_LightChange (int tag, int value) -{ - int secnum; - FSectorTagIterator it(tag); - while ((secnum = it.Next()) >= 0) - { - level.sectors[secnum].SetLightLevel(level.sectors[secnum].lightlevel + value); - } -} - - //----------------------------------------------------------------------------- // // Spawn glowing light @@ -673,10 +335,6 @@ void EV_LightChange (int tag, int value) IMPLEMENT_CLASS(DGlow, false, false) -DGlow::DGlow () -{ -} - void DGlow::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -693,6 +351,7 @@ void DGlow::Serialize(FSerializer &arc) void DGlow::Tick () { + const int GLOWSPEED = 8; int newlight = m_Sector->lightlevel; switch (m_Direction) @@ -726,9 +385,9 @@ void DGlow::Tick () // //----------------------------------------------------------------------------- -DGlow::DGlow (sector_t *sector) - : DLighting (sector) +void DGlow::Construct(sector_t *sector) { + Super::Construct(sector); m_MinLight = FindMinSurroundingLight (sector, sector->lightlevel); m_MaxLight = sector->lightlevel; m_Direction = -1; @@ -742,10 +401,6 @@ DGlow::DGlow (sector_t *sector) IMPLEMENT_CLASS(DGlow2, false, false) -DGlow2::DGlow2 () -{ -} - void DGlow2::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -790,9 +445,9 @@ void DGlow2::Tick () // //----------------------------------------------------------------------------- -DGlow2::DGlow2 (sector_t *sector, int start, int end, int tics, bool oneshot) - : DLighting (sector) +void DGlow2::Construct(sector_t *sector, int start, int end, int tics, bool oneshot) { + Super::Construct(sector); m_Start = sector_t::ClampLight(start); m_End = sector_t::ClampLight(end); m_MaxTics = tics; @@ -800,72 +455,6 @@ DGlow2::DGlow2 (sector_t *sector, int start, int end, int tics, bool oneshot) m_OneShot = oneshot; } -//----------------------------------------------------------------------------- -// -// -// -//----------------------------------------------------------------------------- - -void EV_StartLightGlowing (int tag, int upper, int lower, int tics) -{ - int secnum; - - // If tics is non-positive, then we can't really do anything. - if (tics <= 0) - { - return; - } - - if (upper < lower) - { - int temp = upper; - upper = lower; - lower = temp; - } - - FSectorTagIterator it(tag); - while ((secnum = it.Next()) >= 0) - { - sector_t *sec = &level.sectors[secnum]; - if (sec->lightingdata) - continue; - - Create (sec, upper, lower, tics, false); - } -} - -//----------------------------------------------------------------------------- -// -// -// -//----------------------------------------------------------------------------- - -void EV_StartLightFading (int tag, int value, int tics) -{ - int secnum; - FSectorTagIterator it(tag); - while ((secnum = it.Next()) >= 0) - { - sector_t *sec = &level.sectors[secnum]; - if (sec->lightingdata) - continue; - - if (tics <= 0) - { - sec->SetLightLevel(value); - } - else - { - // No need to fade if lightlevel is already at desired value. - if (sec->lightlevel == value) - continue; - - Create (sec, sec->lightlevel, value, tics, true); - } - } -} - - //----------------------------------------------------------------------------- // // [RH] Phased lighting ala Hexen, but implemented without the help of the Hexen source @@ -875,10 +464,6 @@ void EV_StartLightFading (int tag, int value, int tics) IMPLEMENT_CLASS(DPhased, false, false) -DPhased::DPhased () -{ -} - void DPhased::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -934,7 +519,7 @@ int DPhased::PhaseHelper (sector_t *sector, int index, int light, sector_t *prev m_BaseLevel = baselevel; } else - l = Create (sector, baselevel); + l = Level->CreateThinker (sector, baselevel); int numsteps = PhaseHelper (sector->NextSpecialSector ( sector->special == LightSequenceSpecial1 ? @@ -954,26 +539,273 @@ int DPhased::PhaseHelper (sector_t *sector, int index, int light, sector_t *prev // //----------------------------------------------------------------------------- -DPhased::DPhased (sector_t *sector, int baselevel) - : DLighting (sector) -{ - m_BaseLevel = baselevel; -} - -DPhased::DPhased (sector_t *sector) - : DLighting (sector) +void DPhased::Propagate() { validcount++; - PhaseHelper (sector, 0, 0, NULL); + PhaseHelper (m_Sector, 0, 0, nullptr); } -DPhased::DPhased (sector_t *sector, int baselevel, int phase) - : DLighting (sector) +void DPhased::Construct (sector_t *sector, int baselevel, int phase) { + Super::Construct(sector); m_BaseLevel = baselevel; m_Phase = phase; } +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void FLevelLocals::EV_StartLightFlickering(int tag, int upper, int lower) +{ + int secnum; + auto it = GetSectorTagIterator(tag); + while ((secnum = it.Next()) >= 0) + { + CreateThinker(§ors[secnum], upper, lower); + } +} + + +//----------------------------------------------------------------------------- +// +// Start strobing lights (usually from a trigger) +// [RH] Made it more configurable. +// +//----------------------------------------------------------------------------- + +void FLevelLocals::EV_StartLightStrobing(int tag, int upper, int lower, int utics, int ltics) +{ + int secnum; + auto it = GetSectorTagIterator(tag); + while ((secnum = it.Next()) >= 0) + { + sector_t *sec = §ors[secnum]; + if (sec->lightingdata) + continue; + + CreateThinker(sec, upper, lower, utics, ltics); + } +} + +void FLevelLocals::EV_StartLightStrobing(int tag, int utics, int ltics) +{ + int secnum; + auto it = GetSectorTagIterator(tag); + while ((secnum = it.Next()) >= 0) + { + sector_t *sec = §ors[secnum]; + if (sec->lightingdata) + continue; + + CreateThinker(sec, utics, ltics, false); + } +} + + +//----------------------------------------------------------------------------- +// +// TURN LINE'S TAG LIGHTS OFF +// [RH] Takes a tag instead of a line +// +//----------------------------------------------------------------------------- + +void FLevelLocals::EV_TurnTagLightsOff(int tag) +{ + int secnum; + auto it = GetSectorTagIterator(tag); + while ((secnum = it.Next()) >= 0) + { + sector_t *sector = §ors[secnum]; + int min = sector->lightlevel; + + for (auto ln : sector->Lines) + { + sector_t *tsec = getNextSector(ln, sector); + if (!tsec) + continue; + if (tsec->lightlevel < min) + min = tsec->lightlevel; + } + sector->SetLightLevel(min); + } +} + + +//----------------------------------------------------------------------------- +// +// TURN LINE'S TAG LIGHTS ON +// [RH] Takes a tag instead of a line +// +//----------------------------------------------------------------------------- + +void FLevelLocals::EV_LightTurnOn(int tag, int bright) +{ + int secnum; + auto it = GetSectorTagIterator(tag); + while ((secnum = it.Next()) >= 0) + { + sector_t *sector = §ors[secnum]; + int tbright = bright; //jff 5/17/98 search for maximum PER sector + + // bright = -1 means to search ([RH] Not 0) + // for highest light level + // surrounding sector + if (bright < 0) + { + for (auto ln : sector->Lines) + { + sector_t *temp = getNextSector(ln, sector); + + if (!temp) + continue; + + if (temp->lightlevel > tbright) + tbright = temp->lightlevel; + } + } + sector->SetLightLevel(tbright); + + //jff 5/17/98 unless compatibility optioned + //then maximum near ANY tagged sector + if (i_compatflags & COMPATF_LIGHT) + { + bright = tbright; + } + } +} + +//----------------------------------------------------------------------------- +// +// killough 10/98 +// +// EV_LightTurnOnPartway +// +// Turn sectors tagged to line lights on to specified or max neighbor level +// +// Passed the tag of sector(s) to light and a light level fraction between 0 and 1. +// Sets the light to min on 0, max on 1, and interpolates in-between. +// Used for doors with gradual lighting effects. +// +//----------------------------------------------------------------------------- + +void FLevelLocals::EV_LightTurnOnPartway(int tag, double frac) +{ + frac = clamp(frac, 0., 1.); + + // Search all sectors for ones with same tag as activating line + int secnum; + auto it = GetSectorTagIterator(tag); + while ((secnum = it.Next()) >= 0) + { + sector_t *temp, *sector = §ors[secnum]; + int bright = 0, min = sector->lightlevel; + + for (auto ln : sector->Lines) + { + if ((temp = getNextSector(ln, sector)) != nullptr) + { + if (temp->lightlevel > bright) + { + bright = temp->lightlevel; + } + if (temp->lightlevel < min) + { + min = temp->lightlevel; + } + } + } + sector->SetLightLevel(int(frac * bright + (1 - frac) * min)); + } +} + + +//----------------------------------------------------------------------------- +// +// [RH] New function to adjust tagged sectors' light levels +// by a relative amount. Light levels are clipped to +// be within range for sector_t::light +// +//----------------------------------------------------------------------------- + +void FLevelLocals::EV_LightChange(int tag, int value) +{ + int secnum; + auto it = GetSectorTagIterator(tag); + while ((secnum = it.Next()) >= 0) + { + sectors[secnum].SetLightLevel(sectors[secnum].lightlevel + value); + } +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void FLevelLocals::EV_StartLightGlowing(int tag, int upper, int lower, int tics) +{ + int secnum; + + // If tics is non-positive, then we can't really do anything. + if (tics <= 0) + { + return; + } + + if (upper < lower) + { + int temp = upper; + upper = lower; + lower = temp; + } + + auto it = GetSectorTagIterator(tag); + while ((secnum = it.Next()) >= 0) + { + sector_t *sec = §ors[secnum]; + if (sec->lightingdata) + continue; + + CreateThinker(sec, upper, lower, tics, false); + } +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void FLevelLocals::EV_StartLightFading(int tag, int value, int tics) +{ + int secnum; + auto it = GetSectorTagIterator(tag); + while ((secnum = it.Next()) >= 0) + { + sector_t *sec = §ors[secnum]; + if (sec->lightingdata) + continue; + + if (tics <= 0) + { + sec->SetLightLevel(value); + } + else + { + // No need to fade if lightlevel is already at desired value. + if (sec->lightlevel == value) + continue; + + CreateThinker(sec, sec->lightlevel, value, tics, true); + } + } +} + + //============================================================================ // // EV_StopLightEffect @@ -982,14 +814,14 @@ DPhased::DPhased (sector_t *sector, int baselevel, int phase) // //============================================================================ -void EV_StopLightEffect (int tag) +void FLevelLocals::EV_StopLightEffect (int tag) { - TThinkerIterator iterator; + auto iterator = GetThinkerIterator(NAME_None, STAT_LIGHTNING); DLighting *effect; - while ((effect = iterator.Next()) != NULL) + while ((effect = iterator.Next()) != nullptr) { - if (tagManager.SectorHasTag(effect->GetSector(), tag)) + if (SectorHasTag(effect->GetSector(), tag)) { effect->Destroy(); } @@ -997,61 +829,3 @@ void EV_StopLightEffect (int tag) } -void P_SpawnLights(sector_t *sector) -{ - switch (sector->special) - { - case Light_Phased: - Create(sector, 48, 63 - (sector->lightlevel & 63)); - break; - - // [RH] Hexen-like phased lighting - case LightSequenceStart: - Create(sector); - break; - - case dLight_Flicker: - Create(sector); - break; - - case dLight_StrobeFast: - Create(sector, STROBEBRIGHT, FASTDARK, false); - break; - - case dLight_StrobeSlow: - Create(sector, STROBEBRIGHT, SLOWDARK, false); - break; - - case dLight_Strobe_Hurt: - Create(sector, STROBEBRIGHT, FASTDARK, false); - break; - - case dLight_Glow: - Create(sector); - break; - - case dLight_StrobeSlowSync: - Create(sector, STROBEBRIGHT, SLOWDARK, true); - break; - - case dLight_StrobeFastSync: - Create(sector, STROBEBRIGHT, FASTDARK, true); - break; - - case dLight_FireFlicker: - Create(sector); - break; - - case dScroll_EastLavaDamage: - Create(sector, STROBEBRIGHT, FASTDARK, false); - break; - - case sLight_Strobe_Hurt: - Create(sector, STROBEBRIGHT, FASTDARK, false); - break; - - default: - break; - } -} - diff --git a/src/g_shared/a_lights.h b/src/g_shared/a_lights.h new file mode 100644 index 0000000000..dde32d9049 --- /dev/null +++ b/src/g_shared/a_lights.h @@ -0,0 +1,115 @@ +#pragma once + +class DLighting : public DSectorEffect +{ + DECLARE_CLASS(DLighting, DSectorEffect) +public: + static const int DEFAULT_STAT = STAT_LIGHT; +}; + +class DFireFlicker : public DLighting +{ + DECLARE_CLASS(DFireFlicker, DLighting) +public: + void Construct(sector_t *sector); + void Construct(sector_t *sector, int upper, int lower); + void Serialize(FSerializer &arc); + void Tick(); +protected: + int m_Count; + int m_MaxLight; + int m_MinLight; +}; + +class DFlicker : public DLighting +{ + DECLARE_CLASS(DFlicker, DLighting) +public: + void Construct(sector_t *sector, int upper, int lower); + void Serialize(FSerializer &arc); + void Tick(); +protected: + int m_Count; + int m_MaxLight; + int m_MinLight; +}; + +class DLightFlash : public DLighting +{ + DECLARE_CLASS(DLightFlash, DLighting) +public: + void Construct(sector_t *sector); + void Construct(sector_t *sector, int min, int max); + void Serialize(FSerializer &arc); + void Tick(); +protected: + int m_Count; + int m_MaxLight; + int m_MinLight; + int m_MaxTime; + int m_MinTime; +}; + +class DStrobe : public DLighting +{ + DECLARE_CLASS(DStrobe, DLighting) +public: + void Construct(sector_t *sector, int utics, int ltics, bool inSync); + void Construct(sector_t *sector, int upper, int lower, int utics, int ltics); + void Serialize(FSerializer &arc); + void Tick(); +protected: + int m_Count; + int m_MinLight; + int m_MaxLight; + int m_DarkTime; + int m_BrightTime; +}; + +class DGlow : public DLighting +{ + DECLARE_CLASS(DGlow, DLighting) +public: + void Construct(sector_t *sector); + void Serialize(FSerializer &arc); + void Tick(); +protected: + int m_MinLight; + int m_MaxLight; + int m_Direction; +}; + +// [RH] Glow from Light_Glow and Light_Fade specials +class DGlow2 : public DLighting +{ + DECLARE_CLASS(DGlow2, DLighting) +public: + void Construct(sector_t *sector, int start, int end, int tics, bool oneshot); + void Serialize(FSerializer &arc); + void Tick(); +protected: + int m_Start; + int m_End; + int m_MaxTics; + int m_Tics; + bool m_OneShot; +}; + +// [RH] Phased light thinker +class DPhased : public DLighting +{ + DECLARE_CLASS(DPhased, DLighting) +public: + void Construct(sector_t *sector, int baselevel = 0, int phase = 0); + // These are for internal use only but the Create template needs access to them. + void Construct(); + void Propagate(); + + void Serialize(FSerializer &arc); + void Tick(); +protected: + uint8_t m_BaseLevel; + uint8_t m_Phase; +private: + int PhaseHelper(sector_t *sector, int index, int light, sector_t *prev); +}; diff --git a/src/g_shared/a_lighttransfer.cpp b/src/g_shared/a_lighttransfer.cpp new file mode 100644 index 0000000000..931de98daa --- /dev/null +++ b/src/g_shared/a_lighttransfer.cpp @@ -0,0 +1,184 @@ +/* + ** a_lighttransfer.cpp + ** + **--------------------------------------------------------------------------- + ** Copyright 1998-2016 Randy Heit + ** Copyright 2003-2018 Christoph Oelckers + ** All rights reserved. + ** + ** Redistribution and use in source and binary forms, with or without + ** modification, are permitted provided that the following conditions + ** are met: + ** + ** 1. Redistributions of source code must retain the above copyright + ** notice, this list of conditions and the following disclaimer. + ** 2. Redistributions in binary form must reproduce the above copyright + ** notice, this list of conditions and the following disclaimer in the + ** documentation and/or other materials provided with the distribution. + ** 3. The name of the author may not be used to endorse or promote products + ** derived from this software without specific prior written permission. + ** + ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + ** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + **--------------------------------------------------------------------------- + ** + */ + +#include "p_spec.h" +#include "a_lighttransfer.h" +#include "serializer.h" +#include "g_levellocals.h" + +// +// SPECIAL SPAWNING +// + +IMPLEMENT_CLASS(DLightTransfer, false, false) + +void DLightTransfer::Serialize(FSerializer &arc) +{ + Super::Serialize (arc); + arc("lastlight", LastLight) + ("source", Source) + ("targettag", TargetTag) + ("copyfloor", CopyFloor); +} + +void DLightTransfer::Construct(sector_t *srcSec, int target, bool copyFloor) +{ + int secnum; + + Source = srcSec; + TargetTag = target; + CopyFloor = copyFloor; + DoTransfer (LastLight = srcSec->lightlevel, target, copyFloor); + + if (copyFloor) + { + auto itr = Level->GetSectorTagIterator(target); + while ((secnum = itr.Next()) >= 0) + Level->sectors[secnum].ChangeFlags(sector_t::floor, 0, PLANEF_ABSLIGHTING); + } + else + { + auto itr = Level->GetSectorTagIterator(target); + while ((secnum = itr.Next()) >= 0) + Level->sectors[secnum].ChangeFlags(sector_t::ceiling, 0, PLANEF_ABSLIGHTING); + } +} + +void DLightTransfer::Tick () +{ + int light = Source->lightlevel; + + if (light != LastLight) + { + LastLight = light; + DoTransfer (light, TargetTag, CopyFloor); + } +} + +void DLightTransfer::DoTransfer (int llevel, int target, bool floor) +{ + int secnum; + + if (floor) + { + auto itr = Level->GetSectorTagIterator(target); + while ((secnum = itr.Next()) >= 0) + Level->sectors[secnum].SetPlaneLight(sector_t::floor, llevel); + } + else + { + auto itr = Level->GetSectorTagIterator(target); + while ((secnum = itr.Next()) >= 0) + Level->sectors[secnum].SetPlaneLight(sector_t::ceiling, llevel); + } +} + + +IMPLEMENT_CLASS(DWallLightTransfer, false, false) + +void DWallLightTransfer::Serialize(FSerializer &arc) +{ + Super::Serialize (arc); + arc("lastlight", LastLight) + ("source", Source) + ("targetid", TargetID) + ("flags", Flags); +} + +void DWallLightTransfer::Construct(sector_t *srcSec, int target, uint8_t flags) +{ + int linenum; + int wallflags; + + Source = srcSec; + TargetID = target; + Flags = flags; + DoTransfer (LastLight = srcSec->GetLightLevel(), target, Flags); + + if (!(flags & WLF_NOFAKECONTRAST)) + { + wallflags = WALLF_ABSLIGHTING; + } + else + { + wallflags = WALLF_ABSLIGHTING | WALLF_NOFAKECONTRAST; + } + + auto itr = Level->GetLineIdIterator(target); + while ((linenum = itr.Next()) >= 0) + { + if (flags & WLF_SIDE1 && Level->lines[linenum].sidedef[0] != NULL) + { + Level->lines[linenum].sidedef[0]->Flags |= wallflags; + } + + if (flags & WLF_SIDE2 && Level->lines[linenum].sidedef[1] != NULL) + { + Level->lines[linenum].sidedef[1]->Flags |= wallflags; + } + } +} + +void DWallLightTransfer::Tick () +{ + short light = sector_t::ClampLight(Source->lightlevel); + + if (light != LastLight) + { + LastLight = light; + DoTransfer (light, TargetID, Flags); + } +} + +void DWallLightTransfer::DoTransfer (short lightlevel, int target, uint8_t flags) +{ + int linenum; + + auto itr = Level->GetLineIdIterator(target); + while ((linenum = itr.Next()) >= 0) + { + line_t *line = &Level->lines[linenum]; + + if (flags & WLF_SIDE1 && line->sidedef[0] != NULL) + { + line->sidedef[0]->SetLight(lightlevel); + } + + if (flags & WLF_SIDE2 && line->sidedef[1] != NULL) + { + line->sidedef[1]->SetLight(lightlevel); + } + } +} + diff --git a/src/g_shared/a_lighttransfer.h b/src/g_shared/a_lighttransfer.h new file mode 100644 index 0000000000..2dd2c9eee9 --- /dev/null +++ b/src/g_shared/a_lighttransfer.h @@ -0,0 +1,46 @@ +#pragma once + +class DLightTransfer : public DThinker +{ + DECLARE_CLASS (DLightTransfer, DThinker) + +public: + static const int DEFAULT_STAT = STAT_LIGHTTRANSFER; + void Construct(sector_t *srcSec, int target, bool copyFloor); + void Serialize(FSerializer &arc); + void Tick (); + +protected: + void DoTransfer (int level, int target, bool floor); + + sector_t *Source; + int TargetTag; + bool CopyFloor; + short LastLight; +}; + +class DWallLightTransfer : public DThinker +{ + enum + { + WLF_SIDE1=1, + WLF_SIDE2=2, + WLF_NOFAKECONTRAST=4 + }; + + DECLARE_CLASS (DWallLightTransfer, DThinker) +public: + static const int DEFAULT_STAT = STAT_LIGHTTRANSFER; + void Construct(sector_t *srcSec, int target, uint8_t flags); + void Serialize(FSerializer &arc); + void Tick (); + +protected: + void DoTransfer (short level, int target, uint8_t flags); + + sector_t *Source; + int TargetID; + short LastLight; + uint8_t Flags; +}; + diff --git a/src/g_inventory/a_pickups.cpp b/src/g_shared/a_pickups.cpp similarity index 77% rename from src/g_inventory/a_pickups.cpp rename to src/g_shared/a_pickups.cpp index fdb0b22f4b..98347df84a 100644 --- a/src/g_inventory/a_pickups.cpp +++ b/src/g_shared/a_pickups.cpp @@ -35,21 +35,11 @@ #include -#include "info.h" -#include "p_local.h" -#include "p_lnspec.h" -#include "sbar.h" -#include "statnums.h" -#include "c_dispatch.h" #include "gstrings.h" -#include "a_morph.h" -#include "a_specialspot.h" -#include "g_game.h" +#include "sbar.h" #include "doomstat.h" #include "d_player.h" -#include "serializer.h" #include "vm.h" -#include "c_functions.h" #include "g_levellocals.h" EXTERN_CVAR(Bool, sv_unlimited_pickup) @@ -115,46 +105,3 @@ bool CallTryPickup(AActor *item, AActor *toucher, AActor **toucher_return) return !!res; } -//=========================================================================== -// -// CCMD printinv -// -// Prints the console player's current inventory. -// -//=========================================================================== - -CCMD (printinv) -{ - int pnum = consoleplayer; - -#ifdef _DEBUG - // Only allow peeking on other players' inventory in debug builds. - if (argv.argc() > 1) - { - pnum = atoi (argv[1]); - if (pnum < 0 || pnum >= MAXPLAYERS) - { - return; - } - } -#endif - C_PrintInv(players[pnum].mo); -} - -CCMD (targetinv) -{ - FTranslatedLineTarget t; - - if (CheckCheatmode () || players[consoleplayer].mo == NULL) - return; - - C_AimLine(&t, true); - - if (t.linetarget) - { - C_PrintInv(t.linetarget); - } - else Printf("No target found. Targetinv cannot find actors that have " - "the NOBLOCKMAP flag or have height/radius of 0.\n"); -} - diff --git a/src/g_inventory/a_pickups.h b/src/g_shared/a_pickups.h similarity index 100% rename from src/g_inventory/a_pickups.h rename to src/g_shared/a_pickups.h diff --git a/src/p_pillar.cpp b/src/g_shared/a_pillar.cpp similarity index 84% rename from src/p_pillar.cpp rename to src/g_shared/a_pillar.cpp index 8503c1d7e0..fb76056176 100644 --- a/src/p_pillar.cpp +++ b/src/g_shared/a_pillar.cpp @@ -48,9 +48,11 @@ IMPLEMENT_POINTERS_START(DPillar) IMPLEMENT_POINTER(m_Interp_Ceiling) IMPLEMENT_POINTERS_END -DPillar::DPillar () -{ -} +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- void DPillar::OnDestroy() { @@ -67,6 +69,12 @@ void DPillar::OnDestroy() Super::OnDestroy(); } +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + void DPillar::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -81,6 +89,12 @@ void DPillar::Serialize(FSerializer &arc) ("interp_ceiling", m_Interp_Ceiling); } +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + void DPillar::Tick () { EMoveResult r, s; @@ -118,10 +132,15 @@ void DPillar::Tick () } } -DPillar::DPillar (sector_t *sector, EPillar type, double speed, - double floordist, double ceilingdist, int crush, bool hexencrush) - : DMover (sector) +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void DPillar::Construct(sector_t *sector, EPillar type, double speed, double floordist, double ceilingdist, int crush, bool hexencrush) { + Super::Construct(sector); double newheight; vertex_t *spot; @@ -210,7 +229,13 @@ DPillar::DPillar (sector_t *sector, EPillar type, double speed, } } -bool EV_DoPillar (DPillar::EPillar type, line_t *line, int tag, +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +bool FLevelLocals::EV_DoPillar (DPillar::EPillar type, line_t *line, int tag, double speed, double height, double height2, int crush, bool hexencrush) { int secnum; @@ -218,10 +243,10 @@ bool EV_DoPillar (DPillar::EPillar type, line_t *line, int tag, bool rtn = false; // check if a manual trigger; if so do just the sector on the backside - FSectorTagIterator itr(tag, line); + auto itr = GetSectorTagIterator(tag, line); while ((secnum = itr.Next()) >= 0) { - sec = &level.sectors[secnum]; + sec = §ors[secnum]; if (sec->PlaneMoving(sector_t::floor) || sec->PlaneMoving(sector_t::ceiling)) continue; @@ -238,7 +263,7 @@ bool EV_DoPillar (DPillar::EPillar type, line_t *line, int tag, continue; rtn = true; - Create (sec, type, speed, height, height2, crush, hexencrush); + CreateThinker (sec, type, speed, height, height2, crush, hexencrush); } return rtn; } diff --git a/src/g_shared/a_pillar.h b/src/g_shared/a_pillar.h new file mode 100644 index 0000000000..19e7c2f4f8 --- /dev/null +++ b/src/g_shared/a_pillar.h @@ -0,0 +1,37 @@ +#pragma once + +// +// [RH] +// P_PILLAR +// + +class DPillar : public DMover +{ + DECLARE_CLASS (DPillar, DMover) + HAS_OBJECT_POINTERS +public: + enum EPillar + { + pillarBuild, + pillarOpen + + }; + + void Construct (sector_t *sector, EPillar type, double speed, double height, double height2, int crush, bool hexencrush); + + void Serialize(FSerializer &arc); + void Tick (); + void OnDestroy() override; + +protected: + EPillar m_Type; + double m_FloorSpeed; + double m_CeilingSpeed; + double m_FloorTarget; + double m_CeilingTarget; + int m_Crush; + bool m_Hexencrush; + TObjPtr m_Interp_Ceiling; + TObjPtr m_Interp_Floor; +}; + diff --git a/src/p_plats.cpp b/src/g_shared/a_plats.cpp similarity index 83% rename from src/p_plats.cpp rename to src/g_shared/a_plats.cpp index 183f759b83..4cc4367ab9 100644 --- a/src/p_plats.cpp +++ b/src/g_shared/a_plats.cpp @@ -41,9 +41,11 @@ static FRandom pr_doplat ("DoPlat"); IMPLEMENT_CLASS(DPlat, false, false) -DPlat::DPlat () -{ -} +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- void DPlat::Serialize(FSerializer &arc) { @@ -60,6 +62,12 @@ void DPlat::Serialize(FSerializer &arc) ("tag", m_Tag); } +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + void DPlat::PlayPlatSound (const char *sound) { if (m_Sector->Flags & SECF_SILENTMOVE) return; @@ -78,9 +86,12 @@ void DPlat::PlayPlatSound (const char *sound) } } +//----------------------------------------------------------------------------- // // Move a plat up and down // +//----------------------------------------------------------------------------- + void DPlat::Tick () { EMoveResult res; @@ -204,18 +215,52 @@ void DPlat::Tick () } } -DPlat::DPlat (sector_t *sector) - : DMovingFloor (sector) +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void DPlat::Reactivate() { + if (m_Type == platToggle) //jff 3/14/98 reactivate toggle type + m_Status = m_OldStatus == up ? down : up; + else + m_Status = m_OldStatus; } +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void DPlat::Stop() +{ + m_OldStatus = m_Status; + m_Status = in_stasis; +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void DPlat::Construct (sector_t *sector) +{ + Super::Construct(sector); +} + +//----------------------------------------------------------------------------- // // Do Platforms // [RH] Changed amount to height and added delay, // lip, change, tag, and speed parameters. // -bool EV_DoPlat (int tag, line_t *line, DPlat::EPlatType type, double height, - double speed, int delay, int lip, int change) +//----------------------------------------------------------------------------- + +bool FLevelLocals::EV_DoPlat (int tag, line_t *line, DPlat::EPlatType type, double height, double speed, int delay, int lip, int change) { DPlat *plat; int secnum; @@ -233,7 +278,7 @@ bool EV_DoPlat (int tag, line_t *line, DPlat::EPlatType type, double height, case DPlat::platToggle: rtn = true; case DPlat::platPerpetualRaise: - P_ActivateInStasis (tag); + ActivateInStasisPlat (tag); break; default: @@ -244,10 +289,10 @@ bool EV_DoPlat (int tag, line_t *line, DPlat::EPlatType type, double height, // [RH] If tag is zero, use the sector on the back side // of the activating line (if any). - FSectorTagIterator itr(tag, line); + auto itr = GetSectorTagIterator(tag, line); while ((secnum = itr.Next()) >= 0) { - sec = &level.sectors[secnum]; + sec = §ors[secnum]; if (sec->PlaneMoving(sector_t::floor)) { @@ -256,7 +301,7 @@ bool EV_DoPlat (int tag, line_t *line, DPlat::EPlatType type, double height, // Find lowest & highest floors around sector rtn = true; - plat = Create (sec); + plat = CreateThinker (sec); plat->m_Type = type; plat->m_Crush = -1; @@ -392,18 +437,16 @@ bool EV_DoPlat (int tag, line_t *line, DPlat::EPlatType type, double height, return rtn; } -void DPlat::Reactivate () -{ - if (m_Type == platToggle) //jff 3/14/98 reactivate toggle type - m_Status = m_OldStatus == up ? down : up; - else - m_Status = m_OldStatus; -} +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- -void P_ActivateInStasis (int tag) +void FLevelLocals::ActivateInStasisPlat (int tag) { DPlat *scan; - TThinkerIterator iterator; + auto iterator = GetThinkerIterator(); while ( (scan = iterator.Next ()) ) { @@ -412,16 +455,16 @@ void P_ActivateInStasis (int tag) } } -void DPlat::Stop () -{ - m_OldStatus = m_Status; - m_Status = in_stasis; -} +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- -void EV_StopPlat (int tag, bool remove) +void FLevelLocals::EV_StopPlat (int tag, bool remove) { DPlat *scan; - TThinkerIterator iterator; + auto iterator = GetThinkerIterator(); scan = iterator.Next(); while (scan != nullptr) diff --git a/src/g_shared/a_plats.h b/src/g_shared/a_plats.h new file mode 100644 index 0000000000..947f104cfb --- /dev/null +++ b/src/g_shared/a_plats.h @@ -0,0 +1,60 @@ +#pragma once + +// +// P_PLATS +// +class DPlat : public DMovingFloor +{ + DECLARE_CLASS (DPlat, DMovingFloor) +public: + enum EPlatState + { + up, + down, + waiting, + in_stasis + }; + + enum EPlatType + { + platPerpetualRaise, + platDownWaitUpStay, + platDownWaitUpStayStone, + platUpWaitDownStay, + platUpNearestWaitDownStay, + platDownByValue, + platUpByValue, + platUpByValueStay, + platRaiseAndStay, + platToggle, + platDownToNearestFloor, + platDownToLowestCeiling, + platRaiseAndStayLockout, + }; + + void Serialize(FSerializer &arc); + void Tick (); + + bool IsLift() const { return m_Type == platDownWaitUpStay || m_Type == platDownWaitUpStayStone; } + void Construct(sector_t *sector); + +protected: + + double m_Speed; + double m_Low; + double m_High; + int m_Wait; + int m_Count; + EPlatState m_Status; + EPlatState m_OldStatus; + int m_Crush; + int m_Tag; + EPlatType m_Type; + + void PlayPlatSound (const char *sound); + void Reactivate (); + void Stop (); + + friend struct FLevelLocals; +}; + diff --git a/src/p_pusher.cpp b/src/g_shared/a_pusher.cpp similarity index 68% rename from src/p_pusher.cpp rename to src/g_shared/a_pusher.cpp index 5861ad636d..bd9a40e5f7 100644 --- a/src/p_pusher.cpp +++ b/src/g_shared/a_pusher.cpp @@ -36,47 +36,10 @@ #include "d_player.h" #include "g_levellocals.h" #include "actorinlines.h" +#include "p_spec_thinkers.h" +#include "maploader/maploader.h" -CVAR(Bool, var_pushers, true, CVAR_SERVERINFO); - -// phares 3/20/98: added new model of Pushers for push/pull effects - -class DPusher : public DThinker -{ - DECLARE_CLASS (DPusher, DThinker) - HAS_OBJECT_POINTERS -public: - enum EPusher - { - p_push, - p_pull, - p_wind, - p_current - }; - - DPusher (); - DPusher (EPusher type, line_t *l, int magnitude, int angle, AActor *source, int affectee); - void Serialize(FSerializer &arc); - int CheckForSectorMatch (EPusher type, int tag); - void ChangeValues (int magnitude, int angle) - { - DAngle ang = angle * (360. / 256.); - m_PushVec = ang.ToVector(magnitude); - m_Magnitude = magnitude; - } - - void Tick (); - -protected: - EPusher m_Type; - TObjPtr m_Source;// Point source if point pusher - DVector2 m_PushVec; - double m_Magnitude; // Vector strength for point pusher - double m_Radius; // Effective radius for point pusher - int m_Affectee; // Number of affected sector - - friend bool PIT_PushThing (AActor *thing); -}; +EXTERN_CVAR(Bool, var_pushers); IMPLEMENT_CLASS(DPusher, false, true) @@ -84,9 +47,11 @@ IMPLEMENT_POINTERS_START(DPusher) IMPLEMENT_POINTER(m_Source) IMPLEMENT_POINTERS_END -DPusher::DPusher () -{ -} +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- void DPusher::Serialize(FSerializer &arc) { @@ -100,7 +65,7 @@ void DPusher::Serialize(FSerializer &arc) } -//////////////////////////////////////////////////////////////////////////// +//----------------------------------------------------------------------------- // // PUSH/PULL EFFECT // @@ -143,15 +108,16 @@ void DPusher::Serialize(FSerializer &arc) // to have the PUSH_MASK bit set. If this bit is turned off by a switch // at run-time, the effect will not occur. The controlling sector for // types 1 & 2 is the sector containing the MT_PUSH/MT_PULL Thing. +// +//----------------------------------------------------------------------------- - -#define PUSH_FACTOR 128 - -///////////////////////////// +//----------------------------------------------------------------------------- // // Add a push thinker to the thinker list +// +//----------------------------------------------------------------------------- -DPusher::DPusher (DPusher::EPusher type, line_t *l, int magnitude, int angle, +void DPusher::Construct (DPusher::EPusher type, line_t *l, int magnitude, int angle, AActor *source, int affectee) { m_Source = source; @@ -174,18 +140,20 @@ DPusher::DPusher (DPusher::EPusher type, line_t *l, int magnitude, int angle, int DPusher::CheckForSectorMatch (EPusher type, int tag) { - if (m_Type == type && tagManager.SectorHasTag(m_Affectee, tag)) + if (m_Type == type && Level->SectorHasTag(m_Affectee, tag)) return m_Affectee; else return -1; } -///////////////////////////// +//----------------------------------------------------------------------------- // // T_Pusher looks for all objects that are inside the radius of // the effect. // +//----------------------------------------------------------------------------- + void DPusher::Tick () { sector_t *sec; @@ -196,7 +164,7 @@ void DPusher::Tick () if (!var_pushers) return; - sec = &level.sectors[m_Affectee]; + sec = &Level->sectors[m_Affectee]; // Be sure the special sector type is still turned on. If so, proceed. // Else, bail out; the sector type has been changed on us. @@ -240,7 +208,7 @@ void DPusher::Tick () bool pusharound = ((thing->flags2 & MF2_WINDTHRUST) && !(thing->flags & MF_NOCLIP)); // MBF allows any sentient or shootable thing to be affected, but players with a fly cheat aren't. - if (compatflags & COMPATF_MBFMONSTERMOVE) + if (Level->i_compatflags & COMPATF_MBFMONSTERMOVE) { pusharound = ((pusharound || (thing->IsSentient()) || (thing->flags & MF_SHOOTABLE)) // Add categories here && (!(thing->player && (thing->flags & (MF_NOGRAVITY))))); // Exclude flying players here @@ -333,117 +301,43 @@ void DPusher::Tick () } } -///////////////////////////// +//----------------------------------------------------------------------------- // -// P_GetPushThing() returns a pointer to an MT_PUSH or MT_PULL thing, -// NULL otherwise. +// +// +//----------------------------------------------------------------------------- -AActor *P_GetPushThing (int s) +void FLevelLocals::AdjustPusher(int tag, int magnitude, int angle, bool wind) { - AActor* thing; - sector_t* sec; - - sec = &level.sectors[s]; - thing = sec->thinglist; - - while (thing && - thing->GetClass()->TypeName != NAME_PointPusher && - thing->GetClass()->TypeName != NAME_PointPuller) + struct FThinkerCollection { - thing = thing->snext; - } - return thing; -} + int RefNum; + DThinker *Obj; + }; -///////////////////////////// -// -// Initialize the sectors where pushers are present -// - -void P_SpawnPushers () -{ - line_t *l = &level.lines[0]; - int s; - - for (unsigned i = 0; i < level.lines.Size(); i++, l++) - { - switch (l->special) - { - case Sector_SetWind: // wind - { - FSectorTagIterator itr(l->args[0]); - while ((s = itr.Next()) >= 0) - Create(DPusher::p_wind, l->args[3] ? l : nullptr, l->args[1], l->args[2], nullptr, s); - l->special = 0; - break; - } - - case Sector_SetCurrent: // current - { - FSectorTagIterator itr(l->args[0]); - while ((s = itr.Next()) >= 0) - Create(DPusher::p_current, l->args[3] ? l : nullptr, l->args[1], l->args[2], nullptr, s); - l->special = 0; - break; - } - - case PointPush_SetForce: // push/pull - if (l->args[0]) { // [RH] Find thing by sector - FSectorTagIterator itr(l->args[0]); - while ((s = itr.Next()) >= 0) - { - AActor *thing = P_GetPushThing (s); - if (thing) { // No MT_P* means no effect - // [RH] Allow narrowing it down by tid - if (!l->args[1] || l->args[1] == thing->tid) - Create (DPusher::p_push, l->args[3] ? l : NULL, l->args[2], - 0, thing, s); - } - } - } else { // [RH] Find thing by tid - AActor *thing; - FActorIterator iterator (l->args[1]); - - while ( (thing = iterator.Next ()) ) - { - if (thing->GetClass()->TypeName == NAME_PointPusher || - thing->GetClass()->TypeName == NAME_PointPuller) - { - Create (DPusher::p_push, l->args[3] ? l : NULL, l->args[2], 0, thing, thing->Sector->Index()); - } - } - } - l->special = 0; - break; - } - } -} - -void AdjustPusher (int tag, int magnitude, int angle, bool wind) -{ DPusher::EPusher type = wind? DPusher::p_wind : DPusher::p_current; // Find pushers already attached to the sector, and change their parameters. TArray Collection; { - TThinkerIterator iterator; + auto iterator = GetThinkerIterator(); FThinkerCollection collect; - while ( (collect.Obj = iterator.Next ()) ) + while ((collect.Obj = iterator.Next())) { - if ((collect.RefNum = ((DPusher *)collect.Obj)->CheckForSectorMatch (type, tag)) >= 0) + if ((collect.RefNum = ((DPusher *)collect.Obj)->CheckForSectorMatch(type, tag)) >= 0) { - ((DPusher *)collect.Obj)->ChangeValues (magnitude, angle); - Collection.Push (collect); + ((DPusher *)collect.Obj)->ChangeValues(magnitude, angle); + Collection.Push(collect); } } } - size_t numcollected = Collection.Size (); + size_t numcollected = Collection.Size(); int secnum; // Now create pushers for any sectors that don't already have them. - FSectorTagIterator itr(tag); + auto itr = GetSectorTagIterator(tag); while ((secnum = itr.Next()) >= 0) { unsigned int i; @@ -454,7 +348,7 @@ void AdjustPusher (int tag, int magnitude, int angle, bool wind) } if (i == numcollected) { - Create (type, nullptr, magnitude, angle, nullptr, secnum); + CreateThinker(type, nullptr, magnitude, angle, nullptr, secnum); } } } diff --git a/src/g_shared/a_pusher.h b/src/g_shared/a_pusher.h new file mode 100644 index 0000000000..c3cf30efae --- /dev/null +++ b/src/g_shared/a_pusher.h @@ -0,0 +1,46 @@ +#pragma once + +// phares 3/20/98: added new model of Pushers for push/pull effects + +class DPusher : public DThinker +{ + DECLARE_CLASS (DPusher, DThinker) + HAS_OBJECT_POINTERS + + enum + { + PUSH_FACTOR = 128 + }; + +public: + enum EPusher + { + p_push, + p_pull, + p_wind, + p_current + }; + + void Construct(EPusher type, line_t *l, int magnitude, int angle, AActor *source, int affectee); + void Serialize(FSerializer &arc); + int CheckForSectorMatch (EPusher type, int tag); + void ChangeValues (int magnitude, int angle) + { + DAngle ang = angle * (360. / 256.); + m_PushVec = ang.ToVector(magnitude); + m_Magnitude = magnitude; + } + + void Tick (); + +protected: + EPusher m_Type; + TObjPtr m_Source;// Point source if point pusher + DVector2 m_PushVec; + double m_Magnitude; // Vector strength for point pusher + double m_Radius; // Effective radius for point pusher + int m_Affectee; // Number of affected sector + + friend bool PIT_PushThing (AActor *thing); +}; + diff --git a/src/g_shared/a_quake.cpp b/src/g_shared/a_quake.cpp index c81e1ff286..4eff8a4376 100644 --- a/src/g_shared/a_quake.cpp +++ b/src/g_shared/a_quake.cpp @@ -31,6 +31,7 @@ #include "serializer.h" #include "d_player.h" #include "r_utility.h" +#include "g_levellocals.h" static FRandom pr_quake ("Quake"); @@ -40,28 +41,16 @@ IMPLEMENT_POINTERS_START(DEarthquake) IMPLEMENT_POINTER(m_Spot) IMPLEMENT_POINTERS_END -//========================================================================== -// -// DEarthquake :: DEarthquake private constructor -// -//========================================================================== - -DEarthquake::DEarthquake() -: DThinker(STAT_EARTHQUAKE) -{ -} - //========================================================================== // // DEarthquake :: DEarthquake public constructor // //========================================================================== -DEarthquake::DEarthquake(AActor *center, int intensityX, int intensityY, int intensityZ, int duration, +void DEarthquake::Construct(AActor *center, int intensityX, int intensityY, int intensityZ, int duration, int damrad, int tremrad, FSoundID quakesound, int flags, double waveSpeedX, double waveSpeedY, double waveSpeedZ, int falloff, int highpoint, double rollIntensity, double rollWave) - : DThinker(STAT_EARTHQUAKE) { m_QuakeSFX = quakesound; m_Spot = center; @@ -133,9 +122,9 @@ void DEarthquake::Tick () { for (i = 0; i < MAXPLAYERS; i++) { - if (playeringame[i] && !(players[i].cheats & CF_NOCLIP)) + if (Level->PlayerInGame(i) && !(Level->Players[i]->cheats & CF_NOCLIP)) { - AActor *victim = players[i].mo; + AActor *victim = Level->Players[i]->mo; double dist; dist = m_Spot->Distance2D(victim, true); @@ -299,7 +288,7 @@ int DEarthquake::StaticGetQuakeIntensities(double ticFrac, AActor *victim, FQuak return 0; } - TThinkerIterator iterator(STAT_EARTHQUAKE); + auto iterator = victim->Level->GetThinkerIterator(NAME_None, STAT_EARTHQUAKE); DEarthquake *quake; int count = 0; @@ -378,7 +367,7 @@ int DEarthquake::StaticGetQuakeIntensities(double ticFrac, AActor *victim, FQuak // //========================================================================== -bool P_StartQuakeXYZ(AActor *activator, int tid, int intensityX, int intensityY, int intensityZ, int duration, +bool P_StartQuakeXYZ(FLevelLocals *Level, AActor *activator, int tid, int intensityX, int intensityY, int intensityZ, int duration, int damrad, int tremrad, FSoundID quakesfx, int flags, double waveSpeedX, double waveSpeedY, double waveSpeedZ, int falloff, int highpoint, double rollIntensity, double rollWave) @@ -394,18 +383,18 @@ bool P_StartQuakeXYZ(AActor *activator, int tid, int intensityX, int intensityY, { if (activator != NULL) { - Create(activator, intensityX, intensityY, intensityZ, duration, damrad, tremrad, + Level->CreateThinker(activator, intensityX, intensityY, intensityZ, duration, damrad, tremrad, quakesfx, flags, waveSpeedX, waveSpeedY, waveSpeedZ, falloff, highpoint, rollIntensity, rollWave); return true; } } else { - FActorIterator iterator (tid); + auto iterator = Level->GetActorIterator(tid); while ( (center = iterator.Next ()) ) { res = true; - Create(center, intensityX, intensityY, intensityZ, duration, damrad, tremrad, + Level->CreateThinker(center, intensityX, intensityY, intensityZ, duration, damrad, tremrad, quakesfx, flags, waveSpeedX, waveSpeedY, waveSpeedZ, falloff, highpoint, rollIntensity, rollWave); } } @@ -413,7 +402,7 @@ bool P_StartQuakeXYZ(AActor *activator, int tid, int intensityX, int intensityY, return res; } -bool P_StartQuake(AActor *activator, int tid, int intensity, int duration, int damrad, int tremrad, FSoundID quakesfx) +bool P_StartQuake(FLevelLocals *Level, AActor *activator, int tid, int intensity, int duration, int damrad, int tremrad, FSoundID quakesfx) { //Maintains original behavior by passing 0 to intensityZ, flags, and everything else after QSFX. - return P_StartQuakeXYZ(activator, tid, intensity, intensity, 0, duration, damrad, tremrad, quakesfx, 0, 0, 0, 0, 0, 0, 0, 0); + return P_StartQuakeXYZ(Level, activator, tid, intensity, intensity, 0, duration, damrad, tremrad, quakesfx, 0, 0, 0, 0, 0, 0, 0, 0); } diff --git a/src/p_scroll.cpp b/src/g_shared/a_scroll.cpp similarity index 59% rename from src/p_scroll.cpp rename to src/g_shared/a_scroll.cpp index 05b40cbec6..c62aafe6f7 100644 --- a/src/p_scroll.cpp +++ b/src/g_shared/a_scroll.cpp @@ -62,50 +62,8 @@ #include "p_lnspec.h" #include "r_data/r_interpolate.h" #include "g_levellocals.h" - -//----------------------------------------------------------------------------- -// -// killough 3/7/98: Add generalized scroll effects -// -//----------------------------------------------------------------------------- - -class DScroller : public DThinker -{ - DECLARE_CLASS (DScroller, DThinker) - HAS_OBJECT_POINTERS -public: - - DScroller(EScroll type, double dx, double dy, sector_t *control, sector_t *sec, side_t *side, int accel, EScrollPos scrollpos = EScrollPos::scw_all); - DScroller (double dx, double dy, const line_t *l, sector_t *control, int accel, EScrollPos scrollpos = EScrollPos::scw_all); - void OnDestroy() override; - - void Serialize(FSerializer &arc); - void Tick (); - - bool AffectsWall (side_t * wall) const { return m_Side == wall; } - side_t *GetWall () const { return m_Side; } - sector_t *GetSector() const { return m_Sector; } - void SetRate (double dx, double dy) { m_dx = dx; m_dy = dy; } - bool IsType (EScroll type) const { return type == m_Type; } - EScrollPos GetScrollParts() const { return m_Parts; } - -protected: - EScroll m_Type; // Type of scroll effect - double m_dx, m_dy; // (dx,dy) scroll speeds - sector_t *m_Sector; // Affected sector - side_t *m_Side; // ... or side - sector_t *m_Controller; // Control sector (nullptr if none) used to control scrolling - double m_LastHeight; // Last known height of control sector - double m_vdx, m_vdy; // Accumulated velocity if accelerative - int m_Accel; // Whether it's accelerative - EScrollPos m_Parts; // Which parts of a sidedef are being scrolled? - TObjPtr m_Interpolations[3]; - -private: - DScroller () - { - } -}; +#include "maploader/maploader.h" +#include "p_spec_thinkers.h" IMPLEMENT_CLASS(DScroller, false, true) @@ -255,7 +213,7 @@ void DScroller::Tick () // [RH] Don't actually carry anything here. That happens later. case EScroll::sc_carry: - level.Scrolls[m_Sector->Index()] += { dx, dy }; + Level->Scrolls[m_Sector->Index()] += { dx, dy }; // mark all potentially affected things here so that the very expensive calculation loop in AActor::Tick does not need to run for actors which do not touch a scrolling sector. for (auto n = m_Sector->touching_thinglist; n; n = n->m_snext) { @@ -288,8 +246,7 @@ void DScroller::Tick () // //----------------------------------------------------------------------------- -DScroller::DScroller (EScroll type, double dx, double dy, sector_t *ctrl, sector_t *sec, side_t *side, int accel, EScrollPos scrollpos) - : DThinker (STAT_SCROLLER) +void DScroller::Construct (EScroll type, double dx, double dy, sector_t *ctrl, sector_t *sec, side_t *side, int accel, EScrollPos scrollpos) { m_Type = type; m_dx = dx; @@ -310,7 +267,7 @@ DScroller::DScroller (EScroll type, double dx, double dy, sector_t *ctrl, secto { case EScroll::sc_carry: assert(sec != nullptr); - level.AddScroller (sec->Index()); + Level->AddScroller (sec->Index()); break; case EScroll::sc_side: @@ -370,8 +327,7 @@ void DScroller::OnDestroy () // //----------------------------------------------------------------------------- -DScroller::DScroller (double dx, double dy, const line_t *l, sector_t * control, int accel, EScrollPos scrollpos) - : DThinker (STAT_SCROLLER) +void DScroller::Construct(double dx, double dy, const line_t *l, sector_t * control, int accel, EScrollPos scrollpos) { double x = fabs(l->Delta().X), y = fabs(l->Delta().Y), d; if (y > x) d = x, x = y, y = d; @@ -411,221 +367,6 @@ DScroller::DScroller (double dx, double dy, const line_t *l, sector_t * control, } } -// Amount (dx,dy) vector linedef is shifted right to get scroll amount -#define SCROLL_SHIFT 5 -#define SCROLLTYPE(i) EScrollPos(((i) <= 0) || ((i) & ~7) ? 7 : (i)) - -//----------------------------------------------------------------------------- -// -// Initialize the scrollers -// -//----------------------------------------------------------------------------- - -void P_SpawnScrollers(FLevelLocals *Level) -{ - line_t *l = &Level->lines[0]; - side_t *side; - TArray copyscrollers; - - for (auto &line : Level->lines) - { - if (line.special == Sector_CopyScroller) - { - // don't allow copying the scroller if the sector has the same tag as it would just duplicate it. - if (!tagManager.SectorHasTag(line.frontsector, line.args[0])) - { - copyscrollers.Push(line.Index()); - } - line.special = 0; - } - } - - for (unsigned i = 0; i < Level->lines.Size(); i++, l++) - { - double dx; // direction and speed of scrolling - double dy; - sector_t *control = nullptr; - int accel = 0; // no control sector or acceleration - int special = l->special; - - // Check for undefined parameters that are non-zero and output messages for them. - // We don't report for specials we don't understand. - FLineSpecial *spec = P_GetLineSpecialInfo(special); - if (spec != nullptr) - { - int max = spec->map_args; - for (unsigned arg = max; arg < countof(l->args); ++arg) - { - if (l->args[arg] != 0) - { - Printf("Line %d (type %d:%s), arg %u is %d (should be 0)\n", - i, special, spec->name, arg+1, l->args[arg]); - } - } - } - - // killough 3/7/98: Types 245-249 are same as 250-254 except that the - // first side's sector's heights cause scrolling when they change, and - // this linedef controls the direction and speed of the scrolling. The - // most complicated linedef since donuts, but powerful :) - // - // killough 3/15/98: Add acceleration. Types 214-218 are the same but - // are accelerative. - - // [RH] Assume that it's a scroller and zero the line's special. - l->special = 0; - - dx = dy = 0; // Shut up, GCC - - if (special == Scroll_Ceiling || - special == Scroll_Floor || - special == Scroll_Texture_Model) - { - if (l->args[1] & 3) - { - // if 1, then displacement - // if 2, then accelerative (also if 3) - control = l->sidedef[0]->sector; - if (l->args[1] & 2) - accel = 1; - } - if (special == Scroll_Texture_Model || l->args[1] & 4) - { - // The line housing the special controls the - // direction and speed of scrolling. - dx = l->Delta().X / 32.; - dy = l->Delta().Y / 32.; - } - else - { - // The speed and direction are parameters to the special. - dx = (l->args[3] - 128) / 32.; - dy = (l->args[4] - 128) / 32.; - } - } - - switch (special) - { - int s; - - case Scroll_Ceiling: - { - FSectorTagIterator itr(l->args[0]); - while ((s = itr.Next()) >= 0) - { - Create(EScroll::sc_ceiling, -dx, dy, control, &Level->sectors[s], nullptr, accel); - } - for (unsigned j = 0; j < copyscrollers.Size(); j++) - { - line_t *line = &Level->lines[copyscrollers[j]]; - - if (line->args[0] == l->args[0] && (line->args[1] & 1)) - { - Create(EScroll::sc_ceiling, -dx, dy, control, line->frontsector, nullptr, accel); - } - } - break; - } - - case Scroll_Floor: - if (l->args[2] != 1) - { // scroll the floor texture - FSectorTagIterator itr(l->args[0]); - while ((s = itr.Next()) >= 0) - { - Create (EScroll::sc_floor, -dx, dy, control, &Level->sectors[s], nullptr, accel); - } - for(unsigned j = 0;j < copyscrollers.Size(); j++) - { - line_t *line = &Level->lines[copyscrollers[j]]; - - if (line->args[0] == l->args[0] && (line->args[1] & 2)) - { - Create(EScroll::sc_floor, -dx, dy, control, line->frontsector, nullptr, accel); - } - } - } - - if (l->args[2] > 0) - { // carry objects on the floor - FSectorTagIterator itr(l->args[0]); - while ((s = itr.Next()) >= 0) - { - Create (EScroll::sc_carry, dx, dy, control, &Level->sectors[s], nullptr, accel); - } - for(unsigned j = 0;j < copyscrollers.Size(); j++) - { - line_t *line = &Level->lines[copyscrollers[j]]; - - if (line->args[0] == l->args[0] && (line->args[1] & 4)) - { - Create (EScroll::sc_carry, dx, dy, control, line->frontsector, nullptr, accel); - } - } - } - break; - - // killough 3/1/98: scroll wall according to linedef - // (same direction and speed as scrolling floors) - case Scroll_Texture_Model: - { - FLineIdIterator itr(l->args[0]); - while ((s = itr.Next()) >= 0) - { - if (s != (int)i) - Create(dx, dy, &Level->lines[s], control, accel); - } - break; - } - - case Scroll_Texture_Offsets: - // killough 3/2/98: scroll according to sidedef offsets - side = Level->lines[i].sidedef[0]; - Create (EScroll::sc_side, -side->GetTextureXOffset(side_t::mid), - side->GetTextureYOffset(side_t::mid), nullptr, nullptr, side, accel, SCROLLTYPE(l->args[0])); - break; - - case Scroll_Texture_Left: - l->special = special; // Restore the special, for compat_useblocking's benefit. - side = Level->lines[i].sidedef[0]; - Create (EScroll::sc_side, l->args[0] / 64., 0, nullptr, nullptr, side, accel, SCROLLTYPE(l->args[1])); - break; - - case Scroll_Texture_Right: - l->special = special; - side = Level->lines[i].sidedef[0]; - Create (EScroll::sc_side, -l->args[0] / 64., 0, nullptr, nullptr, side, accel, SCROLLTYPE(l->args[1])); - break; - - case Scroll_Texture_Up: - l->special = special; - side = Level->lines[i].sidedef[0]; - Create (EScroll::sc_side, 0, l->args[0] / 64., nullptr, nullptr, side, accel, SCROLLTYPE(l->args[1])); - break; - - case Scroll_Texture_Down: - l->special = special; - side = Level->lines[i].sidedef[0]; - Create (EScroll::sc_side, 0, -l->args[0] / 64., nullptr, nullptr, side, accel, SCROLLTYPE(l->args[1])); - break; - - case Scroll_Texture_Both: - side = Level->lines[i].sidedef[0]; - if (l->args[0] == 0) { - dx = (l->args[1] - l->args[2]) / 64.; - dy = (l->args[4] - l->args[3]) / 64.; - Create (EScroll::sc_side, dx, dy, nullptr, nullptr, side, accel); - } - break; - - default: - // [RH] It wasn't a scroller after all, so restore the special. - l->special = special; - break; - } - } -} - //----------------------------------------------------------------------------- // // Modify a wall scroller @@ -640,14 +381,14 @@ void SetWallScroller (FLevelLocals *Level, int id, int sidechoice, double dx, do if (dx == 0 && dy == 0) { // Special case: Remove the scroller, because the deltas are both 0. - TThinkerIterator iterator (STAT_SCROLLER); + auto iterator = Level->GetThinkerIterator(NAME_None, STAT_SCROLLER); DScroller *scroller; while ( (scroller = iterator.Next ()) ) { auto wall = scroller->GetWall (); - if (wall != nullptr && tagManager.LineHasID(wall->linedef, id) && wall->linedef->sidedef[sidechoice] == wall && Where == scroller->GetScrollParts()) + if (wall != nullptr && Level->LineHasId(wall->linedef, id) && wall->linedef->sidedef[sidechoice] == wall && Where == scroller->GetScrollParts()) { scroller->Destroy (); } @@ -659,7 +400,7 @@ void SetWallScroller (FLevelLocals *Level, int id, int sidechoice, double dx, do // their rates. TArray Collection; { - TThinkerIterator iterator (STAT_SCROLLER); + auto iterator = Level->GetThinkerIterator(NAME_None, STAT_SCROLLER); DScroller *scroll; while ( (scroll = iterator.Next ()) ) @@ -668,7 +409,7 @@ void SetWallScroller (FLevelLocals *Level, int id, int sidechoice, double dx, do if (wall != nullptr) { auto line = wall->linedef; - if (tagManager.LineHasID(line, id) && line->sidedef[sidechoice] == wall && Where == scroll->GetScrollParts()) + if (Level->LineHasId(line, id) && line->sidedef[sidechoice] == wall && Where == scroll->GetScrollParts()) { scroll->SetRate(dx, dy); Collection.Push(scroll); @@ -681,7 +422,7 @@ void SetWallScroller (FLevelLocals *Level, int id, int sidechoice, double dx, do int linenum; // Now create scrollers for any walls that don't already have them. - FLineIdIterator itr(id); + auto itr = Level->GetLineIdIterator(id); while ((linenum = itr.Next()) >= 0) { side_t *side = Level->lines[linenum].sidedef[sidechoice]; @@ -689,7 +430,7 @@ void SetWallScroller (FLevelLocals *Level, int id, int sidechoice, double dx, do { if (Collection.FindEx([=](const DScroller *element) { return element->GetWall() == side; }) == Collection.Size()) { - Create (EScroll::sc_side, dx, dy, nullptr, nullptr, side, 0, Where); + Level->CreateThinker (EScroll::sc_side, dx, dy, nullptr, nullptr, side, 0, Where); } } } @@ -698,7 +439,7 @@ void SetWallScroller (FLevelLocals *Level, int id, int sidechoice, double dx, do void SetScroller (FLevelLocals *Level, int tag, EScroll type, double dx, double dy) { - TThinkerIterator iterator (STAT_SCROLLER); + auto iterator = Level->GetThinkerIterator(NAME_None, STAT_SCROLLER); DScroller *scroller; int i; @@ -712,7 +453,7 @@ void SetScroller (FLevelLocals *Level, int tag, EScroll type, double dx, double { if (scroller->IsType (type)) { - if (tagManager.SectorHasTag(scroller->GetSector(), tag)) + if (Level->SectorHasTag(scroller->GetSector(), tag)) { i++; scroller->SetRate (dx, dy); @@ -726,14 +467,9 @@ void SetScroller (FLevelLocals *Level, int tag, EScroll type, double dx, double } // Need to create scrollers for the sector(s) - FSectorTagIterator itr(tag); + auto itr = Level->GetSectorTagIterator(tag); while ((i = itr.Next()) >= 0) { - Create (type, dx, dy, nullptr, &Level->sectors[i], nullptr, 0); + Level->CreateThinker (type, dx, dy, nullptr, &Level->sectors[i], nullptr, 0); } } - -void P_CreateScroller(EScroll type, double dx, double dy, sector_t *affectee, int accel, EScrollPos scrollpos) -{ - Create(type, dx, dy, nullptr, affectee, nullptr, accel, scrollpos); -} diff --git a/src/g_shared/a_scroll.h b/src/g_shared/a_scroll.h new file mode 100644 index 0000000000..95d985117b --- /dev/null +++ b/src/g_shared/a_scroll.h @@ -0,0 +1,42 @@ +#pragma once + +//----------------------------------------------------------------------------- +// +// killough 3/7/98: Add generalized scroll effects +// +//----------------------------------------------------------------------------- + +class DScroller : public DThinker +{ + DECLARE_CLASS (DScroller, DThinker) + HAS_OBJECT_POINTERS +public: + static const int DEFAULT_STAT = STAT_SCROLLER; + + void Construct(EScroll type, double dx, double dy, sector_t *control, sector_t *sec, side_t *side, int accel, EScrollPos scrollpos = EScrollPos::scw_all); + void Construct(double dx, double dy, const line_t *l, sector_t *control, int accel, EScrollPos scrollpos = EScrollPos::scw_all); + void OnDestroy() override; + + void Serialize(FSerializer &arc); + void Tick (); + + bool AffectsWall (side_t * wall) const { return m_Side == wall; } + side_t *GetWall () const { return m_Side; } + sector_t *GetSector() const { return m_Sector; } + void SetRate (double dx, double dy) { m_dx = dx; m_dy = dy; } + bool IsType (EScroll type) const { return type == m_Type; } + EScrollPos GetScrollParts() const { return m_Parts; } + +protected: + EScroll m_Type; // Type of scroll effect + double m_dx, m_dy; // (dx,dy) scroll speeds + sector_t *m_Sector; // Affected sector + side_t *m_Side; // ... or side + sector_t *m_Controller; // Control sector (nullptr if none) used to control scrolling + double m_LastHeight; // Last known height of control sector + double m_vdx, m_vdy; // Accumulated velocity if accelerative + int m_Accel; // Whether it's accelerative + EScrollPos m_Parts; // Which parts of a sidedef are being scrolled? + TObjPtr m_Interpolations[3]; +}; + diff --git a/src/g_shared/a_sharedglobal.h b/src/g_shared/a_sharedglobal.h index 327ff3d7ac..c97fd237ce 100644 --- a/src/g_shared/a_sharedglobal.h +++ b/src/g_shared/a_sharedglobal.h @@ -11,7 +11,7 @@ struct F3DFloor; class DBaseDecal; struct SpreadInfo; -class DBaseDecal *ShootDecal(const FDecalTemplate *tpl, AActor *basisactor, sector_t *sec, double x, double y, double z, DAngle angle, double tracedist, bool permanent); +DBaseDecal *ShootDecal(FLevelLocals *Level, const FDecalTemplate *tpl, sector_t *sec, double x, double y, double z, DAngle angle, double tracedist, bool permanent); void SprayDecal(AActor *shooter, const char *name,double distance = 172.); class DBaseDecal : public DThinker @@ -19,11 +19,10 @@ class DBaseDecal : public DThinker DECLARE_CLASS (DBaseDecal, DThinker) HAS_OBJECT_POINTERS public: - DBaseDecal (); - DBaseDecal(double z); - DBaseDecal(int statnum, double z); - DBaseDecal (const AActor *actor); - DBaseDecal (const DBaseDecal *basis); + static const int DEFAULT_STAT = STAT_DECAL; + void Construct(double z = 0); + void Construct(const AActor *actor); + void Construct(const DBaseDecal *basis); void Serialize(FSerializer &arc); void OnDestroy() override; @@ -34,19 +33,19 @@ public: void Spread (const FDecalTemplate *tpl, side_t *wall, double x, double y, double z, F3DFloor * ffloor); void GetXY (side_t *side, double &x, double &y) const; - DBaseDecal *WallNext, *WallPrev; + DBaseDecal *WallNext = nullptr, *WallPrev = nullptr; - double LeftDistance; + double LeftDistance = 0; double Z; - double ScaleX, ScaleY; - double Alpha; - uint32_t AlphaColor; - int Translation; + double ScaleX = 1, ScaleY = 1; + double Alpha = 1; + uint32_t AlphaColor = 0; + int Translation = 0; FTextureID PicNum; - uint32_t RenderFlags; + uint32_t RenderFlags = 0; FRenderStyle RenderStyle; - side_t *Side; - sector_t *Sector; + side_t *Side = nullptr; + sector_t *Sector = nullptr; protected: virtual DBaseDecal *CloneSelf(const FDecalTemplate *tpl, double x, double y, double z, side_t *wall, F3DFloor * ffloor) const; @@ -61,20 +60,21 @@ class DImpactDecal : public DBaseDecal { DECLARE_CLASS (DImpactDecal, DBaseDecal) public: - DImpactDecal(double z); - DImpactDecal (side_t *wall, const FDecalTemplate *templ); + static const int DEFAULT_STAT = STAT_AUTODECAL; + void Construct(double z = 0) + { + Super::Construct(z); + } + void Construct(side_t *wall, const FDecalTemplate *templ); - static DImpactDecal *StaticCreate(const char *name, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color = 0); - static DImpactDecal *StaticCreate(const FDecalTemplate *tpl, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color = 0); + static DImpactDecal *StaticCreate(FLevelLocals *Level, const char *name, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color = 0); + static DImpactDecal *StaticCreate(FLevelLocals *Level, const FDecalTemplate *tpl, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color = 0); void BeginPlay (); protected: DBaseDecal *CloneSelf(const FDecalTemplate *tpl, double x, double y, double z, side_t *wall, F3DFloor * ffloor) const; void CheckMax (); - -private: - DImpactDecal(); }; class DFlashFader : public DThinker @@ -82,7 +82,7 @@ class DFlashFader : public DThinker DECLARE_CLASS (DFlashFader, DThinker) HAS_OBJECT_POINTERS public: - DFlashFader (float r1, float g1, float b1, float a1, + void Construct(float r1, float g1, float b1, float a1, float r2, float g2, float b2, float a2, float time, AActor *who, bool terminate = false); void OnDestroy() override; @@ -99,7 +99,6 @@ protected: TObjPtr ForWho; bool Terminate; void SetBlend (float time); - DFlashFader() = default; }; enum @@ -126,7 +125,8 @@ class DEarthquake : public DThinker DECLARE_CLASS (DEarthquake, DThinker) HAS_OBJECT_POINTERS public: - DEarthquake(AActor *center, int intensityX, int intensityY, int intensityZ, int duration, + static const int DEFAULT_STAT = STAT_EARTHQUAKE; + void Construct(AActor *center, int intensityX, int intensityY, int intensityZ, int duration, int damrad, int tremrad, FSoundID quakesfx, int flags, double waveSpeedX, double waveSpeedY, double waveSpeedZ, int falloff, int highpoint, double rollIntensity, double rollWave); @@ -149,9 +149,6 @@ public: double GetFalloff(double dist) const; static int StaticGetQuakeIntensities(double ticFrac, AActor *viewer, FQuakeJiggers &jiggers); - -private: - DEarthquake (); }; #endif //__A_SHAREDGLOBAL_H__ diff --git a/src/actorptrselect.cpp b/src/g_shared/actorptrselect.cpp similarity index 96% rename from src/actorptrselect.cpp rename to src/g_shared/actorptrselect.cpp index 8c9057ca7b..5cf3264805 100644 --- a/src/actorptrselect.cpp +++ b/src/g_shared/actorptrselect.cpp @@ -35,6 +35,7 @@ #include "actor.h" #include "d_player.h" #include "p_local.h" +#include "g_levellocals.h" //========================================================================== // @@ -61,14 +62,18 @@ Only one selector of each type can be used. */ -#define AAPTR_RESOLVE_PLAYERNUM(playernum) (playeringame[playernum] ? players[playernum].mo : NULL) - AActor *COPY_AAPTR(AActor *origin, int selector) { if (selector == AAPTR_DEFAULT) return origin; FTranslatedLineTarget t; + auto Level = origin->Level; + auto AAPTR_RESOLVE_PLAYERNUM = [=](int playernum) -> AActor* + { + return (Level->PlayerInGame(playernum) ? Level->Players[playernum]->mo : nullptr); + }; + if (origin) { if (origin->player) @@ -97,7 +102,7 @@ AActor *COPY_AAPTR(AActor *origin, int selector) return t.linetarget; } } - + switch (selector & AAPTR_STATIC_SELECTORS) { case AAPTR_PLAYER1: return AAPTR_RESOLVE_PLAYERNUM(0); diff --git a/src/actorptrselect.h b/src/g_shared/actorptrselect.h similarity index 100% rename from src/actorptrselect.h rename to src/g_shared/actorptrselect.h diff --git a/src/dsectoreffect.cpp b/src/g_shared/dsectoreffect.cpp similarity index 95% rename from src/dsectoreffect.cpp rename to src/g_shared/dsectoreffect.cpp index c3711f3f74..8fbf3c8a78 100644 --- a/src/dsectoreffect.cpp +++ b/src/g_shared/dsectoreffect.cpp @@ -36,12 +36,6 @@ IMPLEMENT_CLASS(DSectorEffect, false, false) -DSectorEffect::DSectorEffect () -: DThinker(STAT_SECTOREFFECT) -{ - m_Sector = nullptr; -} - void DSectorEffect::OnDestroy() { if (m_Sector) @@ -62,8 +56,7 @@ void DSectorEffect::OnDestroy() Super::OnDestroy(); } -DSectorEffect::DSectorEffect (sector_t *sector) - : DThinker(STAT_SECTOREFFECT) +void DSectorEffect::Construct(sector_t *sector) { m_Sector = sector; } @@ -88,9 +81,9 @@ IMPLEMENT_POINTERS_START(DMover) IMPLEMENT_POINTER(interpolation) IMPLEMENT_POINTERS_END -DMover::DMover (sector_t *sector) - : DSectorEffect (sector) +void DMover::Construct (sector_t *sector) { + Super::Construct(sector); interpolation = nullptr; } @@ -118,9 +111,9 @@ void DMover::StopInterpolation(bool force) IMPLEMENT_CLASS(DMovingFloor, true, false) -DMovingFloor::DMovingFloor (sector_t *sector) - : DMover (sector) +void DMovingFloor::Construct(sector_t *sector) { + Super::Construct(sector); sector->floordata = this; interpolation = sector->SetInterpolation(sector_t::FloorMove, true); } @@ -128,9 +121,9 @@ DMovingFloor::DMovingFloor (sector_t *sector) IMPLEMENT_CLASS(DMovingCeiling, true, false) -DMovingCeiling::DMovingCeiling (sector_t *sector, bool interpolate) - : DMover (sector) +void DMovingCeiling::Construct(sector_t *sector, bool interpolate) { + Super::Construct(sector); sector->ceilingdata = this; if (interpolate) interpolation = sector->SetInterpolation(sector_t::CeilingMove, true); } @@ -221,7 +214,7 @@ EMoveResult sector_t::MoveFloor(double speed, double dest, int crush, int direct //destheight = (dest < ceilingheight) ? dest : ceilingheight; if (!ceilingplane.isSlope() && !floorplane.isSlope() && !PortalIsLinked(sector_t::ceiling) && - (!(i_compatflags2 & COMPATF2_FLOORMOVE) && -dest > ceilingplane.fD())) + (!(Level->i_compatflags2 & COMPATF2_FLOORMOVE) && -dest > ceilingplane.fD())) { dest = -ceilingplane.fD(); } @@ -311,7 +304,7 @@ EMoveResult sector_t::MoveCeiling(double speed, double dest, int crush, int dire //destheight = (dest > floorheight) ? dest : floorheight; if (!ceilingplane.isSlope() && !floorplane.isSlope() && !PortalIsLinked(sector_t::floor) && - (!(i_compatflags2 & COMPATF2_FLOORMOVE) && dest < -floorplane.fD())) + (!(Level->i_compatflags2 & COMPATF2_FLOORMOVE) && dest < -floorplane.fD())) { dest = -floorplane.fD(); } diff --git a/src/dsectoreffect.h b/src/g_shared/dsectoreffect.h similarity index 77% rename from src/dsectoreffect.h rename to src/g_shared/dsectoreffect.h index e583a85cdf..cbaff9efcf 100644 --- a/src/dsectoreffect.h +++ b/src/g_shared/dsectoreffect.h @@ -8,7 +8,8 @@ class DSectorEffect : public DThinker { DECLARE_CLASS (DSectorEffect, DThinker) public: - DSectorEffect (sector_t *sector); + static const int DEFAULT_STAT = STAT_SECTOREFFECT; + void Construct(sector_t *sector); void Serialize(FSerializer &arc); @@ -17,10 +18,6 @@ public: sector_t *GetSector() const { return m_Sector; } sector_t *m_Sector; - -protected: - DSectorEffect(); - }; class DMover : public DSectorEffect @@ -28,15 +25,14 @@ class DMover : public DSectorEffect DECLARE_ABSTRACT_CLASS (DMover, DSectorEffect) HAS_OBJECT_POINTERS protected: - DMover (sector_t *sector); + void Construct(sector_t *sector); TObjPtr interpolation; public: void StopInterpolation(bool force = false); protected: - DMover () {} - + void Serialize(FSerializer &arc); void OnDestroy() override; }; @@ -45,16 +41,14 @@ class DMovingFloor : public DMover { DECLARE_ABSTRACT_CLASS (DMovingFloor, DMover) protected: - DMovingFloor (sector_t *sector); - DMovingFloor() {} + void Construct(sector_t *sector); }; class DMovingCeiling : public DMover { DECLARE_ABSTRACT_CLASS (DMovingCeiling, DMover) protected: - DMovingCeiling (sector_t *sector, bool interpolate = true); - DMovingCeiling () {} + void Construct(sector_t *sector, bool interpolate = true); }; #endif //__DSECTOREFFECT_H__ diff --git a/src/dthinker.cpp b/src/g_shared/dthinker.cpp similarity index 84% rename from src/dthinker.cpp rename to src/g_shared/dthinker.cpp index 0c41054799..7b286ebec9 100644 --- a/src/dthinker.cpp +++ b/src/g_shared/dthinker.cpp @@ -52,56 +52,40 @@ extern int BotWTG; IMPLEMENT_CLASS(DThinker, false, false) +struct ProfileInfo +{ + int numcalls = 0; + cycle_t timer; + + ProfileInfo() + { + timer.Reset(); + } +}; + +static TMap Profiles; +static unsigned int profilethinkers, profilelimit; DThinker *NextToThink; -FThinkerList DThinker::Thinkers[MAX_STATNUM+2]; -FThinkerList DThinker::FreshThinkers[MAX_STATNUM+1]; -bool DThinker::bSerialOverride = false; - //========================================================================== // // // //========================================================================== -void FThinkerList::AddTail(DThinker *thinker) +void FThinkerCollection::Link(DThinker *thinker, int statnum) { - assert(thinker->PrevThinker == NULL && thinker->NextThinker == NULL); - assert(!(thinker->ObjectFlags & OF_EuthanizeMe)); - if (Sentinel == NULL) + FThinkerList *list; + if ((thinker->ObjectFlags & OF_JustSpawned) && statnum >= STAT_FIRST_THINKING) { - Sentinel = Create(DThinker::NO_LINK); - Sentinel->ObjectFlags |= OF_Sentinel; - Sentinel->NextThinker = Sentinel; - Sentinel->PrevThinker = Sentinel; - GC::WriteBarrier(Sentinel); + list = &FreshThinkers[statnum]; } - DThinker *tail = Sentinel->PrevThinker; - assert(tail->NextThinker == Sentinel); - thinker->PrevThinker = tail; - thinker->NextThinker = Sentinel; - tail->NextThinker = thinker; - Sentinel->PrevThinker = thinker; - GC::WriteBarrier(thinker, tail); - GC::WriteBarrier(thinker, Sentinel); - GC::WriteBarrier(tail, thinker); - GC::WriteBarrier(Sentinel, thinker); -} - -//========================================================================== -// -// -// -//========================================================================== - -DThinker *FThinkerList::GetHead() const -{ - if (Sentinel == NULL || Sentinel->NextThinker == Sentinel) + else { - return NULL; + thinker->ObjectFlags &= ~OF_JustSpawned; + list = &Thinkers[statnum]; } - assert(Sentinel->NextThinker->PrevThinker == Sentinel); - return Sentinel->NextThinker; + list->AddTail(thinker); } //========================================================================== @@ -110,43 +94,161 @@ DThinker *FThinkerList::GetHead() const // //========================================================================== -DThinker *FThinkerList::GetTail() const +void FThinkerCollection::RunThinkers(FLevelLocals *Level) { - if (Sentinel == NULL || Sentinel->PrevThinker == Sentinel) + int i, count; + + ThinkCount = 0; + ThinkCycles.Reset(); + BotSupportCycles.Reset(); + ActionCycles.Reset(); + BotWTG = 0; + + ThinkCycles.Clock(); + + if (!profilethinkers) { - return NULL; - } - return Sentinel->PrevThinker; -} - -//========================================================================== -// -// -// -//========================================================================== - -bool FThinkerList::IsEmpty() const -{ - return Sentinel == NULL || Sentinel->NextThinker == NULL; -} - -//========================================================================== -// -// -// -//========================================================================== - -void DThinker::SaveList(FSerializer &arc, DThinker *node) -{ - if (node != NULL) - { - while (!(node->ObjectFlags & OF_Sentinel)) + // Tick every thinker left from last time + for (i = STAT_FIRST_THINKING; i <= MAX_STATNUM; ++i) { - assert(node->NextThinker != NULL && !(node->NextThinker->ObjectFlags & OF_EuthanizeMe)); - ::Serialize(arc, nullptr, node, nullptr); - node = node->NextThinker; + Thinkers[i].TickThinkers(nullptr); + } + + // Keep ticking the fresh thinkers until there are no new ones. + do + { + count = 0; + for (i = STAT_FIRST_THINKING; i <= MAX_STATNUM; ++i) + { + count += FreshThinkers[i].TickThinkers(&Thinkers[i]); + } + } while (count != 0); + + for (auto light = Level->lights; light;) + { + auto next = light->next; + light->Tick(); + light = next; } } + else + { + Profiles.Clear(); + // Tick every thinker left from last time + for (i = STAT_FIRST_THINKING; i <= MAX_STATNUM; ++i) + { + Thinkers[i].ProfileThinkers(nullptr); + } + + // Keep ticking the fresh thinkers until there are no new ones. + do + { + count = 0; + for (i = STAT_FIRST_THINKING; i <= MAX_STATNUM; ++i) + { + count += FreshThinkers[i].ProfileThinkers(&Thinkers[i]); + } + } while (count != 0); + + // Also profile the internal dynamic lights, even though they are not implemented as thinkers. + auto &prof = Profiles[NAME_InternalDynamicLight]; + prof.timer.Clock(); + for (auto light = Level->lights; light;) + { + prof.numcalls++; + auto next = light->next; + light->Tick(); + light = next; + } + prof.timer.Unclock(); + + + struct SortedProfileInfo + { + const char* className; + int numcalls; + double time; + }; + + TArray sorted; + sorted.Grow(Profiles.CountUsed()); + + auto it = TMap::Iterator(Profiles); + TMap::Pair *pair; + while (it.NextPair(pair)) + { + sorted.Push({ pair->Key.GetChars(), pair->Value.numcalls, pair->Value.timer.TimeMS() }); + } + + std::sort(sorted.begin(), sorted.end(), [](const SortedProfileInfo& left, const SortedProfileInfo& right) + { + switch (profilethinkers) + { + case 1: // by name, from A to Z + return stricmp(left.className, right.className) < 0; + case 2: // by name, from Z to A + return stricmp(right.className, left.className) < 0; + case 3: // number of calls, ascending + return left.numcalls < right.numcalls; + case 4: // number of calls, descending + return right.numcalls < left.numcalls; + case 5: // average time, ascending + return left.time / left.numcalls < right.time / right.numcalls; + case 6: // average time, descending + return right.time / right.numcalls < left.time / left.numcalls; + case 7: // total time, ascending + return left.time < right.time; + default: // total time, descending + return right.time < left.time; + } + }); + + Printf(TEXTCOLOR_YELLOW "Total, ms Averg, ms Calls Actor class\n"); + Printf(TEXTCOLOR_YELLOW "---------- ---------- ------ --------------------\n"); + + const unsigned count = MIN(profilelimit > 0 ? profilelimit : UINT_MAX, sorted.Size()); + + for (unsigned i = 0; i < count; ++i) + { + const SortedProfileInfo& info = sorted[i]; + Printf("%s%10.6f %s%10.6f %s%6d %s%s\n", + profilethinkers >= 7 ? TEXTCOLOR_YELLOW : TEXTCOLOR_WHITE, info.time, + profilethinkers == 5 || profilethinkers == 6 ? TEXTCOLOR_YELLOW : TEXTCOLOR_WHITE, info.time / info.numcalls, + profilethinkers == 3 || profilethinkers == 4 ? TEXTCOLOR_YELLOW : TEXTCOLOR_WHITE, info.numcalls, + profilethinkers == 1 || profilethinkers == 2 ? TEXTCOLOR_YELLOW : TEXTCOLOR_WHITE, info.className); + } + + profilethinkers = 0; + } + + ThinkCycles.Unclock(); +} + +//========================================================================== +// +// Destroy every thinker +// +//========================================================================== + +void FThinkerCollection::DestroyAllThinkers() +{ + int i; + bool error = false; + + for (i = 0; i <= MAX_STATNUM; i++) + { + if (i != STAT_TRAVELLING && i != STAT_STATIC) + { + error |= Thinkers[i].DoDestroyThinkers(); + error |= FreshThinkers[i].DoDestroyThinkers(); + } + } + error |= Thinkers[MAX_STATNUM + 1].DoDestroyThinkers(); + GC::FullGC(); + if (error) + { + I_Error("DestroyAllThinkers failed"); + } } //========================================================================== @@ -155,7 +257,7 @@ void DThinker::SaveList(FSerializer &arc, DThinker *node) // //========================================================================== -void DThinker::SerializeThinkers(FSerializer &arc, bool hubLoad) +void FThinkerCollection::SerializeThinkers(FSerializer &arc, bool hubLoad) { //DThinker *thinker; //uint8_t stat; @@ -168,8 +270,8 @@ void DThinker::SerializeThinkers(FSerializer &arc, bool hubLoad) for (i = 0; i <= MAX_STATNUM; i++) { arc.BeginArray(nullptr); - SaveList(arc, Thinkers[i].GetHead()); - SaveList(arc, FreshThinkers[i].GetHead()); + Thinkers[i].SaveList(arc); + FreshThinkers[i].SaveList(arc); arc.EndArray(); } arc.EndArray(); @@ -226,34 +328,317 @@ void DThinker::SerializeThinkers(FSerializer &arc, bool hubLoad) } } + //========================================================================== // // // //========================================================================== -DThinker::DThinker (int statnum) throw() +void FThinkerList::AddTail(DThinker *thinker) { - NextThinker = NULL; - PrevThinker = NULL; - if (bSerialOverride) - { // The serializer will insert us into the right list - return; + assert(thinker->PrevThinker == nullptr && thinker->NextThinker == nullptr); + assert(!(thinker->ObjectFlags & OF_EuthanizeMe)); + if (Sentinel == nullptr) + { + // This cannot use CreateThinker because it must not be added to the list automatically. + Sentinel = (DThinker*)RUNTIME_CLASS(DThinker)->CreateNew(); + Sentinel->ObjectFlags |= OF_Sentinel; + Sentinel->NextThinker = Sentinel; + Sentinel->PrevThinker = Sentinel; + GC::WriteBarrier(Sentinel); } + DThinker *tail = Sentinel->PrevThinker; + assert(tail->NextThinker == Sentinel); + thinker->PrevThinker = tail; + thinker->NextThinker = Sentinel; + tail->NextThinker = thinker; + Sentinel->PrevThinker = thinker; + GC::WriteBarrier(thinker, tail); + GC::WriteBarrier(thinker, Sentinel); + GC::WriteBarrier(tail, thinker); + GC::WriteBarrier(Sentinel, thinker); +} + +//========================================================================== +// +// +// +//========================================================================== + +DThinker *FThinkerCollection::FirstThinker(int statnum) +{ + DThinker *node; - ObjectFlags |= OF_JustSpawned; if ((unsigned)statnum > MAX_STATNUM) { statnum = MAX_STATNUM; } - FreshThinkers[statnum].AddTail (this); + node = Thinkers[statnum].GetHead(); + if (node == nullptr) + { + node = FreshThinkers[statnum].GetHead(); + if (node == nullptr) + { + return nullptr; + } + } + return node; } -DThinker::DThinker(no_link_type foo) throw() +//========================================================================== +// +// Mark the first thinker of each list +// +//========================================================================== + +void FThinkerCollection::MarkRoots() { - foo; // Avoid unused argument warnings. + for (int i = 0; i <= MAX_STATNUM; ++i) + { + GC::Mark(Thinkers[i].Sentinel); + GC::Mark(FreshThinkers[i].Sentinel); + } + GC::Mark(Thinkers[MAX_STATNUM + 1].Sentinel); } +//========================================================================== +// +// +// +//========================================================================== + +DThinker *FThinkerList::GetHead() const +{ + if (Sentinel == nullptr || Sentinel->NextThinker == Sentinel) + { + return nullptr; + } + assert(Sentinel->NextThinker->PrevThinker == Sentinel); + return Sentinel->NextThinker; +} + +//========================================================================== +// +// +// +//========================================================================== + +DThinker *FThinkerList::GetTail() const +{ + if (Sentinel == nullptr || Sentinel->PrevThinker == Sentinel) + { + return nullptr; + } + return Sentinel->PrevThinker; +} + +//========================================================================== +// +// +// +//========================================================================== + +bool FThinkerList::IsEmpty() const +{ + return Sentinel == nullptr || Sentinel->NextThinker == nullptr; +} + +//========================================================================== +// +// +// +//========================================================================== + +void FThinkerList::DestroyThinkers() +{ + if (DoDestroyThinkers()) + { + I_Error("DestroyThinkers failed"); + } +} + +//========================================================================== +// +// +// +//========================================================================== + +bool FThinkerList::DoDestroyThinkers() +{ + bool error = false; + if (Sentinel != nullptr) + { + // Taking down the linked list live is far too dangerous in case something goes wrong. So first copy all elements into an array, take down the list and then destroy them. + + TArray toDelete; + DThinker *node = Sentinel->NextThinker; + while (node != Sentinel) + { + assert(node != nullptr); + auto next = node->NextThinker; + toDelete.Push(node); + node->NextThinker = node->PrevThinker = nullptr; // clear the links + node = next; + } + Sentinel->NextThinker = Sentinel->PrevThinker = nullptr; + Sentinel->Destroy(); + Sentinel = nullptr; + for (auto node : toDelete) + { + // We must intercept all exceptions so that we can continue deleting the list. + try + { + node->Destroy(); + } + catch (CVMAbortException &exception) + { + Printf("VM exception in DestroyThinkers:\n"); + exception.MaybePrintMessage(); + Printf("%s", exception.stacktrace.GetChars()); + // forcibly delete this. Cleanup may be incomplete, though. + node->ObjectFlags |= OF_YesReallyDelete; + delete node; + error = true; + } + catch (CRecoverableError &exception) + { + Printf("Error in DestroyThinkers: %s\n", exception.GetMessage()); + // forcibly delete this. Cleanup may be incomplete, though. + node->ObjectFlags |= OF_YesReallyDelete; + delete node; + error = true; + } + } + } + return error; +} + +//========================================================================== +// +// +// +//========================================================================== + +void FThinkerList::SaveList(FSerializer &arc) +{ + auto node = GetHead(); + if (node != nullptr) + { + while (!(node->ObjectFlags & OF_Sentinel)) + { + assert(node->NextThinker != nullptr && !(node->NextThinker->ObjectFlags & OF_EuthanizeMe)); + ::Serialize(arc, nullptr, node, nullptr); + node = node->NextThinker; + } + } +} + +//========================================================================== +// +// +// +//========================================================================== + +int FThinkerList::TickThinkers(FThinkerList *dest) +{ + int count = 0; + DThinker *node = GetHead(); + + if (node == nullptr) + { + return 0; + } + + while (node != Sentinel) + { + ++count; + NextToThink = node->NextThinker; + if (node->ObjectFlags & OF_JustSpawned) + { + // Leave OF_JustSpawn set until after Tick() so the ticker can check it. + if (dest != nullptr) + { // Move thinker from this list to the destination list + node->Remove(); + dest->AddTail(node); + } + node->CallPostBeginPlay(); + } + else if (dest != nullptr) + { + I_Error("There is a thinker in the fresh list that has already ticked.\n"); + } + + if (!(node->ObjectFlags & OF_EuthanizeMe)) + { // Only tick thinkers not scheduled for destruction + ThinkCount++; + node->CallTick(); + node->ObjectFlags &= ~OF_JustSpawned; + GC::CheckGC(); + } + node = NextToThink; + } + return count; +} + +//========================================================================== +// +// +// +//========================================================================== +int FThinkerList::ProfileThinkers(FThinkerList *dest) +{ + int count = 0; + DThinker *node = GetHead(); + + if (node == nullptr) + { + return 0; + } + + while (node != Sentinel) + { + ++count; + NextToThink = node->NextThinker; + if (node->ObjectFlags & OF_JustSpawned) + { + // Leave OF_JustSpawn set until after Tick() so the ticker can check it. + if (dest != nullptr) + { // Move thinker from this list to the destination list + node->Remove(); + dest->AddTail(node); + } + node->CallPostBeginPlay(); + } + else if (dest != nullptr) + { + I_Error("There is a thinker in the fresh list that has already ticked.\n"); + } + + if (!(node->ObjectFlags & OF_EuthanizeMe)) + { // Only tick thinkers not scheduled for destruction + ThinkCount++; + + auto &prof = Profiles[node->GetClass()->TypeName]; + prof.numcalls++; + prof.timer.Clock(); + node->CallTick(); + prof.timer.Unclock(); + node->ObjectFlags &= ~OF_JustSpawned; + GC::CheckGC(); + } + node = NextToThink; + } + return count; +} + + +//========================================================================== +// +// +// +//========================================================================== + DThinker::~DThinker () { assert(NextThinker == nullptr && PrevThinker == nullptr); @@ -270,6 +655,12 @@ void DThinker::OnDestroy () Super::OnDestroy(); } +void DThinker::Serialize(FSerializer &arc) +{ + Super::Serialize(arc); + arc("level", Level); +} + //========================================================================== // // @@ -345,24 +736,9 @@ void DThinker::PostSerialize() // //========================================================================== -DThinker *DThinker::FirstThinker (int statnum) +DThinker *FLevelLocals::FirstThinker (int statnum) { - DThinker *node; - - if ((unsigned)statnum > MAX_STATNUM) - { - statnum = MAX_STATNUM; - } - node = Thinkers[statnum].GetHead(); - if (node == NULL) - { - node = FreshThinkers[statnum].GetHead(); - if (node == NULL) - { - return NULL; - } - } - return node; + return Thinkers.FirstThinker(statnum); } //========================================================================== @@ -373,25 +749,12 @@ DThinker *DThinker::FirstThinker (int statnum) void DThinker::ChangeStatNum (int statnum) { - FThinkerList *list; - - // This thinker should already be in a list; verify that. - assert(NextThinker != NULL && PrevThinker != NULL); - if ((unsigned)statnum > MAX_STATNUM) { statnum = MAX_STATNUM; } Remove(); - if ((ObjectFlags & OF_JustSpawned) && statnum >= STAT_FIRST_THINKING) - { - list = &FreshThinkers[statnum]; - } - else - { - list = &Thinkers[statnum]; - } - list->AddTail(this); + Level->Thinkers.Link(this, statnum); } static void ChangeStatNum(DThinker *thinker, int statnum) @@ -403,51 +766,9 @@ DEFINE_ACTION_FUNCTION_NATIVE(DThinker, ChangeStatNum, ChangeStatNum) { PARAM_SELF_PROLOGUE(DThinker); PARAM_INT(stat); - self->ChangeStatNum(stat); + ChangeStatNum(self, stat); return 0; } -//========================================================================== -// -// Mark the first thinker of each list -// -//========================================================================== - -void DThinker::MarkRoots() -{ - for (int i = 0; i <= MAX_STATNUM; ++i) - { - GC::Mark(Thinkers[i].Sentinel); - GC::Mark(FreshThinkers[i].Sentinel); - } - GC::Mark(Thinkers[MAX_STATNUM+1].Sentinel); -} - -//========================================================================== -// -// Destroy every thinker -// -//========================================================================== - -void DThinker::DestroyAllThinkers () -{ - int i; - bool error = false; - - for (i = 0; i <= MAX_STATNUM; i++) - { - if (i != STAT_TRAVELLING && i != STAT_STATIC) - { - error |= DoDestroyThinkersInList (Thinkers[i]); - error |= DoDestroyThinkersInList (FreshThinkers[i]); - } - } - error |= DoDestroyThinkersInList (Thinkers[MAX_STATNUM+1]); - GC::FullGC(); - if (error) - { - I_Error("DestroyAllThinkers failed"); - } -} //========================================================================== // @@ -455,77 +776,6 @@ void DThinker::DestroyAllThinkers () // //========================================================================== -void DThinker::DestroyThinkersInList(FThinkerList &list) -{ - if (DoDestroyThinkersInList(list)) - { - I_Error("DestroyThinkersInList failed"); - } -} - -//========================================================================== -// -// -// -//========================================================================== - -bool DThinker::DoDestroyThinkersInList (FThinkerList &list) -{ - bool error = false; - if (list.Sentinel != nullptr) - { - // Taking down the linked list live is far too dangerous in case something goes wrong. So first copy all elements into an array, take down the list and then destroy them. - - TArray toDelete; - DThinker *node = list.Sentinel->NextThinker; - while (node != list.Sentinel) - { - assert(node != nullptr); - auto next = node->NextThinker; - toDelete.Push(node); - node->NextThinker = node->PrevThinker = nullptr; // clear the links - node = next; - } - list.Sentinel->NextThinker = list.Sentinel->PrevThinker = nullptr; - list.Sentinel->Destroy(); - list.Sentinel = nullptr; - for(auto node : toDelete) - { - // We must intercept all exceptions so that we can continue deleting the list. - try - { - node->Destroy(); - } - catch (CVMAbortException &exception) - { - Printf("VM exception in DestroyThinkers:\n"); - exception.MaybePrintMessage(); - Printf("%s", exception.stacktrace.GetChars()); - // forcibly delete this. Cleanup may be incomplete, though. - node->ObjectFlags |= OF_YesReallyDelete; - delete node; - error = true; - } - catch (CRecoverableError &exception) - { - Printf("Error in DestroyThinkers: %s\n", exception.GetMessage()); - // forcibly delete this. Cleanup may be incomplete, though. - node->ObjectFlags |= OF_YesReallyDelete; - delete node; - error = true; - } - } - } - return error; -} - -//========================================================================== -// -// -// -//========================================================================== -static unsigned int profilethinkers, profilelimit; - CCMD(profilethinkers) { const int argc = argv.argc(); @@ -576,248 +826,6 @@ CCMD(profilethinkers) } } -struct ProfileInfo -{ - int numcalls = 0; - cycle_t timer; - - ProfileInfo() - { - timer.Reset(); - } -}; - -TMap Profiles; - - -void DThinker::RunThinkers () -{ - int i, count; - - ThinkCount = 0; - ThinkCycles.Reset(); - BotSupportCycles.Reset(); - ActionCycles.Reset(); - BotWTG = 0; - - ThinkCycles.Clock(); - - if (!profilethinkers) - { - // Tick every thinker left from last time - for (i = STAT_FIRST_THINKING; i <= MAX_STATNUM; ++i) - { - TickThinkers(&Thinkers[i], NULL); - } - - // Keep ticking the fresh thinkers until there are no new ones. - do - { - count = 0; - for (i = STAT_FIRST_THINKING; i <= MAX_STATNUM; ++i) - { - count += TickThinkers(&FreshThinkers[i], &Thinkers[i]); - } - } while (count != 0); - - for (auto light = level.lights; light;) - { - auto next = light->next; - light->Tick(); - light = next; - } - } - else - { - Profiles.Clear(); - // Tick every thinker left from last time - for (i = STAT_FIRST_THINKING; i <= MAX_STATNUM; ++i) - { - ProfileThinkers(&Thinkers[i], NULL); - } - - // Keep ticking the fresh thinkers until there are no new ones. - do - { - count = 0; - for (i = STAT_FIRST_THINKING; i <= MAX_STATNUM; ++i) - { - count += ProfileThinkers(&FreshThinkers[i], &Thinkers[i]); - } - } while (count != 0); - - // Also profile the internal dynamic lights, even though they are not implemented as thinkers. - auto &prof = Profiles[NAME_InternalDynamicLight]; - prof.timer.Clock(); - for (auto light = level.lights; light;) - { - prof.numcalls++; - auto next = light->next; - light->Tick(); - light = next; - } - prof.timer.Unclock(); - - - struct SortedProfileInfo - { - const char* className; - int numcalls; - double time; - }; - - TArray sorted; - sorted.Grow(Profiles.CountUsed()); - - auto it = TMap::Iterator(Profiles); - TMap::Pair *pair; - while (it.NextPair(pair)) - { - sorted.Push({ pair->Key.GetChars(), pair->Value.numcalls, pair->Value.timer.TimeMS() }); - } - - std::sort(sorted.begin(), sorted.end(), [](const SortedProfileInfo& left, const SortedProfileInfo& right) - { - switch (profilethinkers) - { - case 1: // by name, from A to Z - return stricmp(left.className, right.className) < 0; - case 2: // by name, from Z to A - return stricmp(right.className, left.className) < 0; - case 3: // number of calls, ascending - return left.numcalls < right.numcalls; - case 4: // number of calls, descending - return right.numcalls < left.numcalls; - case 5: // average time, ascending - return left.time / left.numcalls < right.time / right.numcalls; - case 6: // average time, descending - return right.time / right.numcalls < left.time / left.numcalls; - case 7: // total time, ascending - return left.time < right.time; - default: // total time, descending - return right.time < left.time; - } - }); - - Printf(TEXTCOLOR_YELLOW "Total, ms Averg, ms Calls Actor class\n"); - Printf(TEXTCOLOR_YELLOW "---------- ---------- ------ --------------------\n"); - - const unsigned count = MIN(profilelimit > 0 ? profilelimit : UINT_MAX, sorted.Size()); - - for (unsigned i = 0; i < count; ++i) - { - const SortedProfileInfo& info = sorted[i]; - Printf("%s%10.6f %s%10.6f %s%6d %s%s\n", - profilethinkers >= 7 ? TEXTCOLOR_YELLOW : TEXTCOLOR_WHITE, info.time, - profilethinkers == 5 || profilethinkers == 6 ? TEXTCOLOR_YELLOW : TEXTCOLOR_WHITE, info.time / info.numcalls, - profilethinkers == 3 || profilethinkers == 4 ? TEXTCOLOR_YELLOW : TEXTCOLOR_WHITE, info.numcalls, - profilethinkers == 1 || profilethinkers == 2 ? TEXTCOLOR_YELLOW : TEXTCOLOR_WHITE, info.className); - } - - profilethinkers = 0; - } - - ThinkCycles.Unclock(); -} - -//========================================================================== -// -// -// -//========================================================================== - -int DThinker::TickThinkers (FThinkerList *list, FThinkerList *dest) -{ - int count = 0; - DThinker *node = list->GetHead(); - - if (node == NULL) - { - return 0; - } - - while (node != list->Sentinel) - { - ++count; - NextToThink = node->NextThinker; - if (node->ObjectFlags & OF_JustSpawned) - { - // Leave OF_JustSpawn set until after Tick() so the ticker can check it. - if (dest != NULL) - { // Move thinker from this list to the destination list - node->Remove(); - dest->AddTail(node); - } - node->CallPostBeginPlay(); - } - else if (dest != NULL) - { - I_Error("There is a thinker in the fresh list that has already ticked.\n"); - } - - if (!(node->ObjectFlags & OF_EuthanizeMe)) - { // Only tick thinkers not scheduled for destruction - ThinkCount++; - node->CallTick(); - node->ObjectFlags &= ~OF_JustSpawned; - GC::CheckGC(); - } - node = NextToThink; - } - return count; -} - -//========================================================================== -// -// -// -//========================================================================== -int DThinker::ProfileThinkers(FThinkerList *list, FThinkerList *dest) -{ - int count = 0; - DThinker *node = list->GetHead(); - - if (node == NULL) - { - return 0; - } - - while (node != list->Sentinel) - { - ++count; - NextToThink = node->NextThinker; - if (node->ObjectFlags & OF_JustSpawned) - { - // Leave OF_JustSpawn set until after Tick() so the ticker can check it. - if (dest != NULL) - { // Move thinker from this list to the destination list - node->Remove(); - dest->AddTail(node); - } - node->CallPostBeginPlay(); - } - else if (dest != NULL) - { - I_Error("There is a thinker in the fresh list that has already ticked.\n"); - } - - if (!(node->ObjectFlags & OF_EuthanizeMe)) - { // Only tick thinkers not scheduled for destruction - ThinkCount++; - - auto &prof = Profiles[node->GetClass()->TypeName]; - prof.numcalls++; - prof.timer.Clock(); - node->CallTick(); - prof.timer.Unclock(); - node->ObjectFlags &= ~OF_JustSpawned; - GC::CheckGC(); - } - node = NextToThink; - } - return count; -} - //========================================================================== // // @@ -871,7 +879,7 @@ size_t DThinker::PropagateMark() // //========================================================================== -FThinkerIterator::FThinkerIterator (const PClass *type, int statnum) +FThinkerIterator::FThinkerIterator (FLevelLocals *l, const PClass *type, int statnum) : Level(l) { if ((unsigned)statnum > MAX_STATNUM) { @@ -884,8 +892,7 @@ FThinkerIterator::FThinkerIterator (const PClass *type, int statnum) m_SearchStats = false; } m_ParentType = type; - m_CurrThinker = DThinker::Thinkers[m_Stat].GetHead(); - m_SearchingFresh = false; + Reinit(); } //========================================================================== @@ -894,7 +901,7 @@ FThinkerIterator::FThinkerIterator (const PClass *type, int statnum) // //========================================================================== -FThinkerIterator::FThinkerIterator (const PClass *type, int statnum, DThinker *prev) +FThinkerIterator::FThinkerIterator (FLevelLocals *l, const PClass *type, int statnum, DThinker *prev) : Level(l) { if ((unsigned)statnum > MAX_STATNUM) { @@ -907,7 +914,7 @@ FThinkerIterator::FThinkerIterator (const PClass *type, int statnum, DThinker *p m_SearchStats = false; } m_ParentType = type; - if (prev == NULL || (prev->NextThinker->ObjectFlags & OF_Sentinel)) + if (prev == nullptr || (prev->NextThinker->ObjectFlags & OF_Sentinel)) { Reinit(); } @@ -926,7 +933,7 @@ FThinkerIterator::FThinkerIterator (const PClass *type, int statnum, DThinker *p void FThinkerIterator::Reinit () { - m_CurrThinker = DThinker::Thinkers[m_Stat].GetHead(); + m_CurrThinker = Level->Thinkers.Thinkers[m_Stat].GetHead(); m_SearchingFresh = false; } @@ -938,15 +945,15 @@ void FThinkerIterator::Reinit () DThinker *FThinkerIterator::Next (bool exact) { - if (m_ParentType == NULL) + if (m_ParentType == nullptr) { - return NULL; + return nullptr; } do { do { - if (m_CurrThinker != NULL) + if (m_CurrThinker != nullptr) { while (!(m_CurrThinker->ObjectFlags & OF_Sentinel)) { @@ -967,7 +974,7 @@ DThinker *FThinkerIterator::Next (bool exact) } if ((m_SearchingFresh = !m_SearchingFresh)) { - m_CurrThinker = DThinker::FreshThinkers[m_Stat].GetHead(); + m_CurrThinker = Level->Thinkers.FreshThinkers[m_Stat].GetHead(); } } while (m_SearchingFresh); if (m_SearchStats) @@ -978,10 +985,10 @@ DThinker *FThinkerIterator::Next (bool exact) m_Stat = STAT_FIRST_THINKING; } } - m_CurrThinker = DThinker::Thinkers[m_Stat].GetHead(); + m_CurrThinker = Level->Thinkers.Thinkers[m_Stat].GetHead(); m_SearchingFresh = false; } while (m_SearchStats && m_Stat != STAT_FIRST_THINKING); - return NULL; + return nullptr; } //========================================================================== diff --git a/src/dthinker.h b/src/g_shared/dthinker.h similarity index 58% rename from src/dthinker.h rename to src/g_shared/dthinker.h index 921a7fc4e2..26b4e06ac8 100644 --- a/src/dthinker.h +++ b/src/g_shared/dthinker.h @@ -44,6 +44,7 @@ struct pspdef_s; struct FState; class DThinker; class FSerializer; +struct FLevelLocals; class FThinkerIterator; @@ -52,20 +53,50 @@ enum { MAX_STATNUM = 127 }; // Doubly linked ring list of thinkers struct FThinkerList { - FThinkerList() : Sentinel(0) {} + // No destructor. If this list goes away it's the GC's task to clean the orphaned thinkers. Otherwise this may clash with engine shutdown. void AddTail(DThinker *thinker); DThinker *GetHead() const; DThinker *GetTail() const; bool IsEmpty() const; + void DestroyThinkers(); + bool DoDestroyThinkers(); + int TickThinkers(FThinkerList *dest); // Returns: # of thinkers ticked + int ProfileThinkers(FThinkerList *dest); + void SaveList(FSerializer &arc); - DThinker *Sentinel; +private: + DThinker *Sentinel = nullptr; + + friend struct FThinkerCollection; +}; + +struct FThinkerCollection +{ + void DestroyThinkersInList(int statnum) + { + Thinkers[statnum].DestroyThinkers(); + FreshThinkers[statnum].DestroyThinkers(); + } + + void RunThinkers(FLevelLocals *Level); // The level is needed to tick the lights + void DestroyAllThinkers(); + void SerializeThinkers(FSerializer &arc, bool keepPlayers); + void MarkRoots(); + DThinker *FirstThinker(int statnum); + void Link(DThinker *thinker, int statnum); + +private: + FThinkerList Thinkers[MAX_STATNUM + 2]; + FThinkerList FreshThinkers[MAX_STATNUM + 1]; + + friend class FThinkerIterator; }; class DThinker : public DObject { DECLARE_CLASS (DThinker, DObject) public: - DThinker (int statnum = STAT_DEFAULT) throw(); + static const int DEFAULT_STAT = STAT_DEFAULT; void OnDestroy () override; virtual ~DThinker (); virtual void Tick (); @@ -73,44 +104,26 @@ public: virtual void PostBeginPlay (); // Called just before the first tick virtual void CallPostBeginPlay(); // different in actor. virtual void PostSerialize(); + void Serialize(FSerializer &arc) override; size_t PropagateMark(); void ChangeStatNum (int statnum); - static void RunThinkers (); - static void RunThinkers (int statnum); - static void DestroyAllThinkers (); - static void DestroyThinkersInList(int statnum) - { - DestroyThinkersInList(Thinkers[statnum]); - DestroyThinkersInList(FreshThinkers[statnum]); - } - static void SerializeThinkers(FSerializer &arc, bool keepPlayers); - static void MarkRoots(); - - static DThinker *FirstThinker (int statnum); - static bool bSerialOverride; - - // only used internally but Create needs access. - enum no_link_type { NO_LINK }; - DThinker(no_link_type) throw(); private: - static void DestroyThinkersInList (FThinkerList &list); - static bool DoDestroyThinkersInList(FThinkerList &list); - static int TickThinkers (FThinkerList *list, FThinkerList *dest); // Returns: # of thinkers ticked - static int ProfileThinkers(FThinkerList *list, FThinkerList *dest); - static void SaveList(FSerializer &arc, DThinker *node); void Remove(); - static FThinkerList Thinkers[MAX_STATNUM+2]; // Current thinkers - static FThinkerList FreshThinkers[MAX_STATNUM+1]; // Newly created thinkers - friend struct FThinkerList; + friend struct FThinkerCollection; friend class FThinkerIterator; friend class DObject; friend class FSerializer; - DThinker *NextThinker, *PrevThinker; + DThinker *NextThinker = nullptr, *PrevThinker = nullptr; + +public: + FLevelLocals *Level; + + friend struct FLevelLocals; // Needs access to FreshThinkers until the thinker storage gets refactored. }; class FThinkerIterator @@ -118,14 +131,15 @@ class FThinkerIterator protected: const PClass *m_ParentType; private: + FLevelLocals *Level; DThinker *m_CurrThinker; uint8_t m_Stat; bool m_SearchStats; bool m_SearchingFresh; public: - FThinkerIterator (const PClass *type, int statnum=MAX_STATNUM+1); - FThinkerIterator (const PClass *type, int statnum, DThinker *prev); + FThinkerIterator (FLevelLocals *Level, const PClass *type, int statnum=MAX_STATNUM+1); + FThinkerIterator (FLevelLocals *Level, const PClass *type, int statnum, DThinker *prev); DThinker *Next (bool exact = false); void Reinit (); @@ -136,28 +150,19 @@ protected: template class TThinkerIterator : public FThinkerIterator { public: - TThinkerIterator (int statnum=MAX_STATNUM+1) : FThinkerIterator (RUNTIME_CLASS(T), statnum) + TThinkerIterator (FLevelLocals *Level, int statnum=MAX_STATNUM+1) : FThinkerIterator (Level, RUNTIME_CLASS(T), statnum) { } - TThinkerIterator (int statnum, DThinker *prev) : FThinkerIterator (RUNTIME_CLASS(T), statnum, prev) + TThinkerIterator (FLevelLocals *Level, int statnum, DThinker *prev) : FThinkerIterator (Level, RUNTIME_CLASS(T), statnum, prev) { } - TThinkerIterator (const PClass *subclass, int statnum=MAX_STATNUM+1) : FThinkerIterator(subclass, statnum) + TThinkerIterator (FLevelLocals *Level, const PClass *subclass, int statnum=MAX_STATNUM+1) : FThinkerIterator(Level, subclass, statnum) { } - TThinkerIterator (FName subclass, int statnum=MAX_STATNUM+1) : FThinkerIterator(PClass::FindClass(subclass), statnum) + TThinkerIterator (FLevelLocals *Level, FName subclass, int statnum=MAX_STATNUM+1) : FThinkerIterator(Level, PClass::FindClass(subclass), statnum) { } - TThinkerIterator (ENamedName subclass, int statnum=MAX_STATNUM+1) : FThinkerIterator(PClass::FindClass(subclass), statnum) - { - } - TThinkerIterator (FName subclass, int statnum, DThinker *prev) : FThinkerIterator(PClass::FindClass(subclass), statnum, prev) - { - } - TThinkerIterator (ENamedName subclass, int statnum, DThinker *prev) : FThinkerIterator(PClass::FindClass(subclass), statnum, prev) - { - } - TThinkerIterator (const char *subclass, int statnum=MAX_STATNUM+1) : FThinkerIterator(PClass::FindClass(subclass), statnum) + TThinkerIterator (FLevelLocals *Level, FName subclass, int statnum, DThinker *prev) : FThinkerIterator(Level, PClass::FindClass(subclass), statnum, prev) { } T *Next (bool exact = false) @@ -166,4 +171,5 @@ public: } }; + #endif //__DTHINKER_H__ diff --git a/src/p_3dfloors.cpp b/src/g_shared/p_3dfloors.cpp similarity index 80% rename from src/p_3dfloors.cpp rename to src/g_shared/p_3dfloors.cpp index 5e8d05359c..1d3e2d4c50 100644 --- a/src/p_3dfloors.cpp +++ b/src/g_shared/p_3dfloors.cpp @@ -105,7 +105,7 @@ void F3DFloor::UpdateColormap(FColormap &map) // Add one 3D floor to the sector // //========================================================================== -static void P_Add3DFloor(sector_t* sec, sector_t* sec2, line_t* master, int flags, int alpha) +void P_Add3DFloor(sector_t* sec, sector_t* sec2, line_t* master, int flags, int alpha) { F3DFloor* ffloor; unsigned i; @@ -200,105 +200,6 @@ static void P_Add3DFloor(sector_t* sec, sector_t* sec2, line_t* master, int flag } } -//========================================================================== -// -// Creates all 3D floors defined by one linedef -// -//========================================================================== -static int P_Set3DFloor(line_t * line, int param, int param2, int alpha) -{ - int s; - int flags; - int tag = line->args[0]; - sector_t * sec = line->frontsector, *ss; - - FSectorTagIterator itr(tag); - while ((s = itr.Next()) >= 0) - { - ss = &level.sectors[s]; - - if (param == 0) - { - flags = FF_EXISTS | FF_RENDERALL | FF_SOLID | FF_INVERTSECTOR; - alpha = 255; - for (auto l: sec->Lines) - { - if (l->special == Sector_SetContents && l->frontsector == sec) - { - alpha = clamp(l->args[1], 0, 100); - if (l->args[2] & 1) flags &= ~FF_SOLID; - if (l->args[2] & 2) flags |= FF_SEETHROUGH; - if (l->args[2] & 4) flags |= FF_SHOOTTHROUGH; - if (l->args[2] & 8) flags |= FF_ADDITIVETRANS; - if (alpha != 100) flags |= FF_TRANSLUCENT;//|FF_BOTHPLANES|FF_ALLSIDES; - if (l->args[0]) - { - // Yes, Vavoom's 3D-floor definitions suck! - // The content list changed in r1783 of Vavoom to be unified - // among all its supported games, so it has now ten different - // values instead of just five. - static uint32_t vavoomcolors[] = { VC_EMPTY, - VC_WATER, VC_LAVA, VC_NUKAGE, VC_SLIME, VC_HELLSLIME, - VC_BLOOD, VC_SLUDGE, VC_HAZARD, VC_BOOMWATER }; - flags |= FF_SWIMMABLE | FF_BOTHPLANES | FF_ALLSIDES | FF_FLOOD; - - l->frontsector->Colormap.FadeColor = vavoomcolors[l->args[0]] & VC_COLORMASK; - l->frontsector->Colormap.FogDensity = 0; - } - alpha = (alpha * 255) / 100; - break; - } - } - } - else if (param == 4) - { - flags = FF_EXISTS | FF_RENDERPLANES | FF_INVERTPLANES | FF_NOSHADE | FF_FIX; - if (param2 & 1) flags |= FF_SEETHROUGH; // marker for allowing missing texture checks - alpha = 255; - } - else - { - static const int defflags[] = { 0, - FF_SOLID, - FF_SWIMMABLE | FF_BOTHPLANES | FF_ALLSIDES | FF_SHOOTTHROUGH | FF_SEETHROUGH, - FF_SHOOTTHROUGH | FF_SEETHROUGH, - }; - - flags = defflags[param & 3] | FF_EXISTS | FF_RENDERALL; - - if (param & 4) flags |= FF_ALLSIDES | FF_BOTHPLANES; - if (param & 16) flags ^= FF_SEETHROUGH; - if (param & 32) flags ^= FF_SHOOTTHROUGH; - - if (param2 & 1) flags |= FF_NOSHADE; - if (param2 & 2) flags |= FF_DOUBLESHADOW; - if (param2 & 4) flags |= FF_FOG; - if (param2 & 8) flags |= FF_THINFLOOR; - if (param2 & 16) flags |= FF_UPPERTEXTURE; - if (param2 & 32) flags |= FF_LOWERTEXTURE; - if (param2 & 64) flags |= FF_ADDITIVETRANS | FF_TRANSLUCENT; - // if flooding is used the floor must be non-solid and is automatically made shootthrough and seethrough - if ((param2 & 128) && !(flags & FF_SOLID)) flags |= FF_FLOOD | FF_SEETHROUGH | FF_SHOOTTHROUGH; - if (param2 & 512) flags |= FF_FADEWALLS; - if (param2&1024) flags |= FF_RESET; - FTextureID tex = line->sidedef[0]->GetTexture(side_t::top); - if (!tex.Exists() && alpha < 255) - { - alpha = -tex.GetIndex(); - } - alpha = clamp(alpha, 0, 255); - if (alpha == 0) flags &= ~(FF_RENDERALL | FF_BOTHPLANES | FF_ALLSIDES); - else if (alpha != 255) flags |= FF_TRANSLUCENT; - - } - P_Add3DFloor(ss, sec, line, flags, alpha); - } - // To be 100% safe this should be done even if the alpha by texture value isn't used. - if (!line->sidedef[0]->GetTexture(side_t::top).isValid()) - line->sidedef[0]->SetTexture(side_t::top, FNullTextureID()); - return 1; -} - //========================================================================== // // P_PlayerOnSpecial3DFloor @@ -332,8 +233,7 @@ void P_PlayerOnSpecial3DFloor(player_t* player) P_PlayerInSpecialSector(player, rover->model); // Apply flat specials (using the ceiling!) - P_PlayerOnSpecialFlat( - player, rover->model->GetTerrain(rover->top.isceiling)); + P_PlayerOnSpecialFlat(player, rover->model->GetTerrain(rover->top.isceiling)); break; } @@ -657,9 +557,9 @@ void P_Recalculate3DFloors(sector_t * sector) // //========================================================================== -void P_ClearDynamic3DFloorData() +void FLevelLocals::ClearDynamic3DFloorData() { - for (auto &sec : level.sectors) + for (auto &sec : sectors) { TArray & ffloors = sec.e->XFloor.ffloors; @@ -878,58 +778,6 @@ void P_LineOpening_XFloors (FLineOpening &open, AActor * thing, const line_t *li } -//========================================================================== -// -// Spawns 3D floors -// -//========================================================================== -void P_Spawn3DFloors (void) -{ - static int flagvals[] = {512, 2+512, 512+1024}; - - for (auto &line : level.lines) - { - switch(line.special) - { - case ExtraFloor_LightOnly: - if (line.args[1] < 0 || line.args[1] > 2) line.args[1] = 0; - if (line.args[0] != 0) - P_Set3DFloor(&line, 3, flagvals[line.args[1]], 0); - break; - - case Sector_Set3DFloor: - // The flag high-byte/line id is only needed in Hexen format. - // UDMF can set both of these parameters without any restriction of the usable values. - // In Doom format the translators can take full integers for the tag and the line ID always is the same as the tag. - if (level.maptype == MAPTYPE_HEXEN) - { - if (line.args[1]&8) - { - tagManager.AddLineID(line.Index(), line.args[4]); - } - else - { - line.args[0]+=256*line.args[4]; - line.args[4]=0; - } - } - P_Set3DFloor(&line, line.args[1]&~8, line.args[2], line.args[3]); - break; - - default: - continue; - } - line.special=0; - line.args[0] = line.args[1] = line.args[2] = line.args[3] = line.args[4] = 0; - } - - for (auto &sec : level.sectors) - { - P_Recalculate3DFloors(&sec); - } -} - - //========================================================================== // // Returns a 3D floorplane appropriate for the given coordinates @@ -965,9 +813,8 @@ secplane_t P_FindFloorPlane(sector_t * sector, const DVector3 &pos) int P_Find3DFloor(sector_t * sec, const DVector3 &pos, bool above, bool floor, double &cmpz) { - // If no sector given, find the one appropriate - if (sec == NULL) - sec = P_PointInSector(pos); + // sector must be given + if (sec == nullptr) return -1; // Above normal ceiling cmpz = sec->ceilingplane.ZatPoint(pos); @@ -1011,33 +858,3 @@ int P_Find3DFloor(sector_t * sec, const DVector3 &pos, bool above, bool floor, d return -1; } -#include "c_dispatch.h" - - -CCMD (dump3df) -{ - if (argv.argc() > 1) - { - int sec = (int)strtoll(argv[1], NULL, 10); - if ((unsigned)sec >= level.sectors.Size()) - { - Printf("Sector %d does not exist.\n", sec); - return; - } - sector_t *sector = &level.sectors[sec]; - TArray & ffloors=sector->e->XFloor.ffloors; - - for (unsigned int i = 0; i < ffloors.Size(); i++) - { - double height=ffloors[i]->top.plane->ZatPoint(sector->centerspot); - double bheight=ffloors[i]->bottom.plane->ZatPoint(sector->centerspot); - - IGNORE_FORMAT_PRE - Printf("FFloor %d @ top = %f (model = %d), bottom = %f (model = %d), flags = %B, alpha = %d %s %s\n", - i, height, ffloors[i]->top.model->sectornum, - bheight, ffloors[i]->bottom.model->sectornum, - ffloors[i]->flags, ffloors[i]->alpha, (ffloors[i]->flags&FF_EXISTS)? "Exists":"", (ffloors[i]->flags&FF_DYNAMIC)? "Dynamic":""); - IGNORE_FORMAT_POST - } - } -} diff --git a/src/p_3dfloors.h b/src/g_shared/p_3dfloors.h similarity index 98% rename from src/p_3dfloors.h rename to src/g_shared/p_3dfloors.h index d0f4f500a5..fc82b75500 100644 --- a/src/p_3dfloors.h +++ b/src/g_shared/p_3dfloors.h @@ -123,7 +123,6 @@ void P_Recalculate3DFloors(sector_t *); void P_RecalculateAttached3DFloors(sector_t * sec); void P_RecalculateLights(sector_t *sector); void P_RecalculateAttachedLights(sector_t *sector); -void P_ClearDynamic3DFloorData(); lightlist_t * P_GetPlaneLight(sector_t * , secplane_t * plane, bool underside); void P_Spawn3DFloors( void ); @@ -136,4 +135,6 @@ void P_LineOpening_XFloors (FLineOpening &open, AActor * thing, const line_t *li secplane_t P_FindFloorPlane(sector_t * sector, const DVector3 &pos); int P_Find3DFloor(sector_t * sec, const DVector3 &pos, bool above, bool floor, double &cmpz); +void P_Add3DFloor(sector_t* sec, sector_t* sec2, line_t* master, int flags, int alpha); + #endif \ No newline at end of file diff --git a/src/p_3dmidtex.cpp b/src/g_shared/p_3dmidtex.cpp similarity index 90% rename from src/p_3dmidtex.cpp rename to src/g_shared/p_3dmidtex.cpp index 6b54d65587..be5ab90006 100644 --- a/src/p_3dmidtex.cpp +++ b/src/g_shared/p_3dmidtex.cpp @@ -119,15 +119,16 @@ void P_Attach3dMidtexLinesToSector(sector_t *sector, int lineid, int tag, bool c // invalid set of parameters return; } + auto Level = sector->Level; extsector_t::midtex::plane &scrollplane = ceiling? sector->e->Midtex.Ceiling : sector->e->Midtex.Floor; // Bit arrays that mark whether a line or sector is to be attached. - uint8_t *found_lines = new uint8_t[(level.lines.Size()+7)/8]; - uint8_t *found_sectors = new uint8_t[(level.sectors.Size()+7)/8]; + uint8_t *found_lines = new uint8_t[(Level->lines.Size()+7)/8]; + uint8_t *found_sectors = new uint8_t[(Level->sectors.Size()+7)/8]; - memset(found_lines, 0, sizeof (uint8_t) * ((level.lines.Size()+7)/8)); - memset(found_sectors, 0, sizeof (uint8_t) * ((level.sectors.Size()+7)/8)); + memset(found_lines, 0, sizeof (uint8_t) * ((Level->lines.Size()+7)/8)); + memset(found_sectors, 0, sizeof (uint8_t) * ((Level->sectors.Size()+7)/8)); // mark all lines and sectors that are already attached to this one // and clear the arrays. The old data will be re-added automatically @@ -149,11 +150,11 @@ void P_Attach3dMidtexLinesToSector(sector_t *sector, int lineid, int tag, bool c if (tag == 0) { - FLineIdIterator itr(lineid); + auto itr = Level->GetLineIdIterator(lineid); int line; while ((line = itr.Next()) >= 0) { - line_t *ln = &level.lines[line]; + line_t *ln = &Level->lines[line]; if (ln->frontsector == NULL || ln->backsector == NULL || !(ln->flags & ML_3DMIDTEX)) { @@ -165,13 +166,13 @@ void P_Attach3dMidtexLinesToSector(sector_t *sector, int lineid, int tag, bool c } else { - FSectorTagIterator it(tag); + auto it = Level->GetSectorTagIterator(tag); int sec; while ((sec = it.Next()) >= 0) { - for (auto ln : level.sectors[sec].Lines) + for (auto ln : Level->sectors[sec].Lines) { - if (lineid != 0 && !tagManager.LineHasID(ln, lineid)) continue; + if (lineid != 0 && !Level->LineHasId(ln, lineid)) continue; if (ln->frontsector == NULL || ln->backsector == NULL || !(ln->flags & ML_3DMIDTEX)) { @@ -185,28 +186,28 @@ void P_Attach3dMidtexLinesToSector(sector_t *sector, int lineid, int tag, bool c } - for(unsigned i=0; i < level.lines.Size(); i++) + for(unsigned i=0; i < Level->lines.Size(); i++) { if (found_lines[i>>3] & (1 << (i&7))) { - auto &line = level.lines[i]; + auto &line = Level->lines[i]; scrollplane.AttachedLines.Push(&line); v = line.frontsector->Index(); - assert(v < (int)level.sectors.Size()); + assert(v < (int)Level->sectors.Size()); found_sectors[v>>3] |= 1 << (v&7); v = line.backsector->Index(); - assert(v < (int)level.sectors.Size()); + assert(v < (int)Level->sectors.Size()); found_sectors[v>>3] |= 1 << (v&7); } } - for (unsigned i=0; i < level.sectors.Size(); i++) + for (unsigned i=0; i < Level->sectors.Size(); i++) { if (found_sectors[i>>3] & (1 << (i&7))) { - scrollplane.AttachedSectors.Push(&level.sectors[i]); + scrollplane.AttachedSectors.Push(&Level->sectors[i]); } } @@ -235,7 +236,7 @@ bool P_GetMidTexturePosition(const line_t *line, int sideno, double *ptextop, do FTexCoordInfo tci; // We only need the vertical positioning info here. - tci.GetFromTexture(tex, 1., (float)side->GetTextureYScale(side_t::mid)); + tci.GetFromTexture(tex, 1., (float)side->GetTextureYScale(side_t::mid), !!(line->GetLevel()->flags3 & LEVEL3_FORCEWORLDPANNING)); double y_offset = tci.RowOffset((float)side->GetTextureYOffset(side_t::mid)); double textureheight = tci.mRenderHeight; diff --git a/src/p_3dmidtex.h b/src/g_shared/p_3dmidtex.h similarity index 100% rename from src/p_3dmidtex.h rename to src/g_shared/p_3dmidtex.h diff --git a/src/p_checkposition.h b/src/g_shared/p_checkposition.h similarity index 100% rename from src/p_checkposition.h rename to src/g_shared/p_checkposition.h diff --git a/src/p_linkedsectors.cpp b/src/g_shared/p_linkedsectors.cpp similarity index 97% rename from src/p_linkedsectors.cpp rename to src/g_shared/p_linkedsectors.cpp index 11e520a0dc..5d327643e8 100644 --- a/src/p_linkedsectors.cpp +++ b/src/g_shared/p_linkedsectors.cpp @@ -288,7 +288,8 @@ static void RemoveTaggedSectors(extsector_t::linked::plane &scrollplane, int tag { for(int i = scrollplane.Sectors.Size()-1; i>=0; i--) { - if (tagManager.SectorHasTag(scrollplane.Sectors[i].Sector, tag)) + auto sec = scrollplane.Sectors[i].Sector; + if (sec->Level->SectorHasTag(sec, tag)) { scrollplane.Sectors.Delete(i); } @@ -313,6 +314,7 @@ bool P_AddSectorLinks(sector_t *control, int tag, INTBOOL ceiling, int movetype) if ((ceiling && control->PlaneMoving(sector_t::ceiling)) || (!ceiling && control->PlaneMoving(sector_t::floor))) return false; + auto Level = control->Level; // Make sure we have only valid combinations movetype &= LINK_FLAGMASK; if ((movetype & LINK_FLOORMIRROR) == LINK_FLOORMIRRORFLAG) movetype &= ~LINK_FLOORMIRRORFLAG; @@ -327,16 +329,16 @@ bool P_AddSectorLinks(sector_t *control, int tag, INTBOOL ceiling, int movetype) if (movetype > 0) { int sec; - FSectorTagIterator itr(tag); + auto itr = Level->GetSectorTagIterator(tag); while ((sec = itr.Next()) >= 0) { // Don't attach to self (but allow attaching to this sector's oposite plane. - if (control == &level.sectors[sec]) + if (control == &Level->sectors[sec]) { if (ceiling == sector_t::floor && movetype & LINK_FLOOR) continue; if (ceiling == sector_t::ceiling && movetype & LINK_CEILING) continue; } - AddSingleSector(scrollplane, &level.sectors[sec], movetype); + AddSingleSector(scrollplane, &Level->sectors[sec], movetype); } } else @@ -360,11 +362,11 @@ void P_AddSectorLinksByID(sector_t *control, int id, INTBOOL ceiling) { extsector_t::linked::plane &scrollplane = ceiling? control->e->Linked.Ceiling : control->e->Linked.Floor; - FLineIdIterator itr(id); + auto itr = control->Level->GetLineIdIterator(id); int line; while ((line = itr.Next()) >= 0) { - line_t *ld = &level.lines[line]; + line_t *ld = &control->Level->lines[line]; if (ld->special == Static_Init && ld->args[1] == Init_SectorLink) { diff --git a/src/p_secnodes.cpp b/src/g_shared/p_secnodes.cpp similarity index 96% rename from src/p_secnodes.cpp rename to src/g_shared/p_secnodes.cpp index 4f7bd0ffee..bdbc99eabc 100644 --- a/src/p_secnodes.cpp +++ b/src/g_shared/p_secnodes.cpp @@ -237,7 +237,7 @@ msecnode_t *P_CreateSecNodeList(AActor *thing, double radius, msecnode_t *sector } FBoundingBox box(thing->X(), thing->Y(), radius); - FBlockLinesIterator it(box); + FBlockLinesIterator it(thing->Level, box); line_t *ld; while ((ld = it.Next())) @@ -346,7 +346,7 @@ portnode_t *P_AddPortalnode(FLinePortal *s, AActor *thing, portnode_t *nextnode) { portnode_t *node; - if (s == 0) + if (s == nullptr) { I_FatalError("AddSecnode of 0 for %s\n", thing->GetClass()->TypeName.GetChars()); } @@ -386,16 +386,16 @@ void AActor::UpdateRenderSectorList() { // Only check if the map contains line portals ClearRenderLineList(); - if (level.PortalBlockmap.containsLines && Pos().XY() != OldRenderPos.XY()) + if (Level->PortalBlockmap.containsLines && Pos().XY() != OldRenderPos.XY()) { - int bx = level.blockmap.GetBlockX(X()); - int by = level.blockmap.GetBlockY(Y()); + int bx = Level->blockmap.GetBlockX(X()); + int by = Level->blockmap.GetBlockY(Y()); FBoundingBox bb(X(), Y(), MIN(radius*1.5, 128.)); // Don't go further than 128 map units, even for large actors // Are there any portals near the actor's position? - if (level.blockmap.isValidBlock(bx, by) && level.PortalBlockmap(bx, by).neighborContainsLines) + if (Level->blockmap.isValidBlock(bx, by) && Level->PortalBlockmap(bx, by).neighborContainsLines) { // Go through the entire list. In most cases this is faster than setting up a blockmap iterator - for (auto &p : level.linePortals) + for (auto &p : Level->linePortals) { if (p.mType == PORTT_VISUAL) continue; if (bb.inRange(p.mOrigin) && bb.BoxOnLineSide(p.mOrigin)) @@ -415,7 +415,7 @@ void AActor::UpdateRenderSectorList() if (Top() + SPRITE_SPACE < planeh) break; lasth = planeh; DVector2 newpos = Pos() + sec->GetPortalDisplacement(sector_t::ceiling); - sec = P_PointInSector(newpos); + sec = sec->Level->PointInSector(newpos); touching_sectorportallist = P_AddSecnode(sec, this, touching_sectorportallist, sec->sectorportal_thinglist); } sec = Sector; @@ -427,7 +427,7 @@ void AActor::UpdateRenderSectorList() if (Z() - SPRITE_SPACE > planeh) break; lasth = planeh; DVector2 newpos = Pos() + sec->GetPortalDisplacement(sector_t::floor); - sec = P_PointInSector(newpos); + sec = sec->Level->PointInSector(newpos); touching_sectorportallist = P_AddSecnode(sec, this, touching_sectorportallist, sec->sectorportal_thinglist); } } @@ -466,7 +466,7 @@ FBlockNode *FBlockNode::Create(AActor *who, int x, int y, int group) { block = (FBlockNode *)secnodearena.Alloc(sizeof(FBlockNode)); } - block->BlockIndex = x + y * level.blockmap.bmapwidth; + block->BlockIndex = x + y * who->Level->blockmap.bmapwidth; block->Me = who; block->NextActor = nullptr; block->PrevActor = nullptr; @@ -479,4 +479,4 @@ void FBlockNode::Release() { NextBlock = FreeBlocks; FreeBlocks = this; -} \ No newline at end of file +} diff --git a/src/p_sectors.cpp b/src/g_shared/p_sectors.cpp similarity index 95% rename from src/p_sectors.cpp rename to src/g_shared/p_sectors.cpp index 3a43fbfa1f..41bf380d11 100644 --- a/src/p_sectors.cpp +++ b/src/g_shared/p_sectors.cpp @@ -71,6 +71,17 @@ #include "g_levellocals.h" #include "vm.h" +//========================================================================== +// +// +// +//========================================================================== + +CUSTOM_CVAR(Int, r_fakecontrast, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + if (self < 0) self = 1; + else if (self > 2) self = 2; +} // [RH] // P_NextSpecialSector() @@ -473,9 +484,9 @@ double FindHighestCeilingSurrounding (const sector_t *sector, vertex_t **v) // jff 02/03/98 Add routine to find shortest lower texture // -static inline void CheckShortestTex (FTextureID texnum, double &minsize) +static inline void CheckShortestTex (FLevelLocals *Level, FTextureID texnum, double &minsize) { - if (texnum.isValid() || (texnum.isNull() && (i_compatflags & COMPATF_SHORTTEX))) + if (texnum.isValid() || (texnum.isNull() && (Level->i_compatflags & COMPATF_SHORTTEX))) { FTexture *tex = TexMan.GetTexture(texnum); if (tex != NULL) @@ -497,8 +508,8 @@ double FindShortestTextureAround (sector_t *sec) { if (check->flags & ML_TWOSIDED) { - CheckShortestTex (check->sidedef[0]->GetTexture(side_t::bottom), minsize); - CheckShortestTex (check->sidedef[1]->GetTexture(side_t::bottom), minsize); + CheckShortestTex (sec->Level, check->sidedef[0]->GetTexture(side_t::bottom), minsize); + CheckShortestTex (sec->Level, check->sidedef[1]->GetTexture(side_t::bottom), minsize); } } return minsize < FLT_MAX ? minsize : TexMan.ByIndex(0)->GetDisplayHeight(); @@ -522,8 +533,8 @@ double FindShortestUpperAround (sector_t *sec) { if (check->flags & ML_TWOSIDED) { - CheckShortestTex (check->sidedef[0]->GetTexture(side_t::top), minsize); - CheckShortestTex (check->sidedef[1]->GetTexture(side_t::top), minsize); + CheckShortestTex (sec->Level, check->sidedef[0]->GetTexture(side_t::top), minsize); + CheckShortestTex (sec->Level, check->sidedef[1]->GetTexture(side_t::top), minsize); } } return minsize < FLT_MAX ? minsize : TexMan.ByIndex(0)->GetDisplayHeight(); @@ -623,7 +634,7 @@ double FindHighestFloorPoint (const sector_t *sector, vertex_t **v) { if (v != NULL) { - if (sector->Lines.Size() == 0) *v = &level.vertexes[0]; + if (sector->Lines.Size() == 0) *v = §or->Level->vertexes[0]; else *v = sector->Lines[0]->v1; } return -sector->floorplane.fD(); @@ -663,7 +674,7 @@ double FindLowestCeilingPoint (const sector_t *sector, vertex_t **v) { if (v != nullptr) { - if (sector->Lines.Size() == 0) *v = &level.vertexes[0]; + if (sector->Lines.Size() == 0) *v = §or->Level->vertexes[0]; else *v = sector->Lines[0]->v1; } return sector->ceilingplane.fD(); @@ -941,7 +952,7 @@ double HighestCeilingAt(sector_t *check, double x, double y, sector_t **resultse { pos += check->GetPortalDisplacement(sector_t::ceiling); planeheight = check->GetPortalPlaneZ(sector_t::ceiling); - check = P_PointInSector(pos); + check = check->Level->PointInSector(pos); } if (resultsec) *resultsec = check; return check->ceilingplane.ZatPoint(pos); @@ -963,7 +974,7 @@ double LowestFloorAt(sector_t *check, double x, double y, sector_t **resultsec) { pos += check->GetPortalDisplacement(sector_t::floor); planeheight = check->GetPortalPlaneZ(sector_t::ceiling); - check = P_PointInSector(pos); + check = check->Level->PointInSector(pos); } if (resultsec) *resultsec = check; return check->floorplane.ZatPoint(pos); @@ -1012,7 +1023,7 @@ double NextHighestCeilingAt(sector_t *sec, double x, double y, double bottomz, d x += pos.X; y += pos.Y; planeheight = sec->GetPortalPlaneZ(sector_t::ceiling); - sec = P_PointInSector(x, y); + sec = sec->Level->PointInSector(x, y); } } } @@ -1061,7 +1072,7 @@ double NextLowestFloorAt(sector_t *sec, double x, double y, double z, int flags, x += pos.X; y += pos.Y; planeheight = sec->GetPortalPlaneZ(sector_t::floor); - sec = P_PointInSector(x, y); + sec = sec->Level->PointInSector(x, y); } } } @@ -1358,9 +1369,9 @@ bool secplane_t::CopyPlaneIfValid (secplane_t *dest, const secplane_t *opp) cons // //========================================================================== -bool P_AlignFlat (int linenum, int side, int fc) +bool FLevelLocals::AlignFlat (int linenum, int side, int fc) { - line_t *line = &level.lines[linenum]; + line_t *line = &lines[linenum]; sector_t *sec = side ? line->backsector : line->frontsector; if (!sec) @@ -1388,7 +1399,7 @@ bool P_AlignFlat (int linenum, int side, int fc) // //========================================================================== -void P_ReplaceTextures(const char *fromname, const char *toname, int flags) +void FLevelLocals::ReplaceTextures(const char *fromname, const char *toname, int flags) { FTextureID picnum1, picnum2; @@ -1400,7 +1411,7 @@ void P_ReplaceTextures(const char *fromname, const char *toname, int flags) picnum1 = TexMan.GetTextureID(fromname, ETextureType::Wall, FTextureManager::TEXMAN_Overridable); picnum2 = TexMan.GetTextureID(toname, ETextureType::Wall, FTextureManager::TEXMAN_Overridable); - for (auto &side : level.sides) + for (auto &side : sides) { for (int j = 0; j<3; j++) { @@ -1417,7 +1428,7 @@ void P_ReplaceTextures(const char *fromname, const char *toname, int flags) picnum1 = TexMan.GetTextureID(fromname, ETextureType::Flat, FTextureManager::TEXMAN_Overridable); picnum2 = TexMan.GetTextureID(toname, ETextureType::Flat, FTextureManager::TEXMAN_Overridable); - for (auto &sec : level.sectors) + for (auto &sec : sectors) { if (!(flags & NOT_FLOOR) && sec.GetTexture(sector_t::floor) == picnum1) sec.SetTexture(sector_t::floor, picnum2); @@ -1440,9 +1451,9 @@ void subsector_t::BuildPolyBSP() assert((BSP == NULL || BSP->bDirty) && "BSP computed more than once"); // Set up level information for the node builder. - PolyNodeLevel.Sides = &level.sides[0]; - PolyNodeLevel.NumSides = level.sides.Size(); - PolyNodeLevel.Lines = &level.lines[0]; + PolyNodeLevel.Sides = §or->Level->sides[0]; + PolyNodeLevel.NumSides = sector->Level->sides.Size(); + PolyNodeLevel.Lines = §or->Level->lines[0]; PolyNodeLevel.NumLines = numlines; // is this correct??? // Feed segs to the nodebuilder and build the nodes. @@ -1465,18 +1476,6 @@ void subsector_t::BuildPolyBSP() } } -//========================================================================== -// -// -// -//========================================================================== - -CUSTOM_CVAR(Int, r_fakecontrast, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) -{ - if (self < 0) self = 1; - else if (self > 2) self = 2; -} - //=========================================================================== // // @@ -1528,26 +1527,26 @@ int side_t::GetLightLevel (bool foggy, int baselight, bool is3dlight, int *pfake *pfakecontrast = 0; } - if (!foggy || level.flags3 & LEVEL3_FORCEFAKECONTRAST) // Don't do relative lighting in foggy sectors + if (!foggy || sector->Level->flags3 & LEVEL3_FORCEFAKECONTRAST) // Don't do relative lighting in foggy sectors { if (!(Flags & WALLF_NOFAKECONTRAST) && r_fakecontrast != 0) { DVector2 delta = linedef->Delta(); int rel; - if (((level.flags2 & LEVEL2_SMOOTHLIGHTING) || (Flags & WALLF_SMOOTHLIGHTING) || r_fakecontrast == 2) && + if (((sector->Level->flags2 & LEVEL2_SMOOTHLIGHTING) || (Flags & WALLF_SMOOTHLIGHTING) || r_fakecontrast == 2) && delta.X != 0) { rel = xs_RoundToInt // OMG LEE KILLOUGH LIVES! :/ ( - level.WallHorizLight + sector->Level->WallHorizLight + fabs(atan(delta.Y / delta.X) / 1.57079) - * (level.WallVertLight - level.WallHorizLight) + * (sector->Level->WallVertLight - sector->Level->WallHorizLight) ); } else { - rel = delta.X == 0 ? level.WallVertLight : - delta.Y == 0 ? level.WallHorizLight : 0; + rel = delta.X == 0 ? sector->Level->WallVertLight : + delta.Y == 0 ? sector->Level->WallHorizLight : 0; } if (pfakecontrast != NULL) { diff --git a/src/p_sight.cpp b/src/g_shared/p_sight.cpp similarity index 95% rename from src/p_sight.cpp rename to src/g_shared/p_sight.cpp index ba4c97719e..1e4c8155bb 100644 --- a/src/p_sight.cpp +++ b/src/g_shared/p_sight.cpp @@ -23,7 +23,7 @@ #include #include "doomdef.h" -#include "i_system.h" + #include "p_local.h" #include "p_maputl.h" #include "p_blockmap.h" @@ -92,6 +92,7 @@ static TArray portals(32); class SightCheck { + FLevelLocals *Level; DVector3 sightstart; DVector2 sightend; double Startfrac; @@ -116,6 +117,11 @@ class SightCheck bool LineBlocksSight(line_t *ld); public: + SightCheck(FLevelLocals *l) + { + Level = l; + } + bool P_SightPathTraverse (); void init(AActor * t1, AActor * t2, sector_t *startsector, SightTask *task, int flags) @@ -216,7 +222,7 @@ bool SightCheck::PTR_SightTraverse (intercept_t *in) // // ignore self referencing sectors if COMPAT_TRACE is on - if ((i_compatflags & COMPATF_TRACE) && li->frontsector == li->backsector) + if ((Level->i_compatflags & COMPATF_TRACE) && li->frontsector == li->backsector) return true; double trX = Trace.x + Trace.dx * in->frac; @@ -407,7 +413,7 @@ bool SightCheck::LineBlocksSight(line_t *ld) { return true; } - if (ld->args[1] != 0 && ld->args[1] != level.levelnum) + if (ld->args[1] != 0 && ld->args[1] != Level->levelnum) { return true; } @@ -477,14 +483,14 @@ int SightCheck::P_SightBlockLinesIterator (int x, int y) polyblock_t *polyLink; unsigned int i; - offset = y*level.blockmap.bmapwidth+x; + offset = y* Level->blockmap.bmapwidth+x; // if any of the previous blocks may contain a portal we may abort the collection of lines here, but we may not abort the sight check. // (We still try to delay activating this for as long as possible.) - portalfound = portalfound || level.PortalBlockmap(x, y).containsLinkedPortals; + portalfound = portalfound || Level->PortalBlockmap(x, y).containsLinkedPortals; - polyLink = level.PolyBlockMap[offset]; - portalfound |= (polyLink && level.PortalBlockmap.hasLinkedPolyPortals); + polyLink = Level->PolyBlockMap[offset]; + portalfound |= (polyLink && Level->PortalBlockmap.hasLinkedPolyPortals); while (polyLink) { if (polyLink->polyobj) @@ -505,9 +511,9 @@ int SightCheck::P_SightBlockLinesIterator (int x, int y) polyLink = polyLink->next; } - for (list = level.blockmap.GetLines(x, y); *list != -1; list++) + for (list = Level->blockmap.GetLines(x, y); *list != -1; list++) { - if (!P_SightCheckLine (&level.lines[*list])) + if (!P_SightCheckLine (&Level->lines[*list])) { if (!portalfound) return 0; else res = -1; @@ -627,7 +633,7 @@ bool SightCheck::P_SightPathTraverse () y1 = sightstart.Y + Startfrac * Trace.dy; x2 = sightend.X; y2 = sightend.Y; - if (lastsector == NULL) lastsector = P_PointInSector(x1, y1); + if (lastsector == NULL) lastsector = Level->PointInSector(x1, y1); // for FF_SEETHROUGH the following rule applies: // If the viewer is in an area without FF_SEETHROUGH he can only see into areas without this flag @@ -661,13 +667,13 @@ bool SightCheck::P_SightPathTraverse () portals.Push({ 0, topslope, bottomslope, sector_t::floor, lastsector->GetOppositePortalGroup(sector_t::floor) }); } - x1 -= level.blockmap.bmaporgx; - y1 -= level.blockmap.bmaporgy; + x1 -= Level->blockmap.bmaporgx; + y1 -= Level->blockmap.bmaporgy; xt1 = x1 / FBlockmap::MAPBLOCKUNITS; yt1 = y1 / FBlockmap::MAPBLOCKUNITS; - x2 -= level.blockmap.bmaporgx; - y2 -= level.blockmap.bmaporgy; + x2 -= Level->blockmap.bmaporgx; + y2 -= Level->blockmap.bmaporgy; xt2 = x2 / FBlockmap::MAPBLOCKUNITS; yt2 = y2 / FBlockmap::MAPBLOCKUNITS; @@ -747,7 +753,7 @@ bool SightCheck::P_SightPathTraverse () { // end traversing when reaching the end of the blockmap // an early out is not possible because with portals a trace can easily land outside the map's bounds. - if (!level.blockmap.isValidBlock(mapx, mapy)) + if (!Level->blockmap.isValidBlock(mapx, mapy)) { break; } @@ -839,22 +845,19 @@ int P_CheckSight (AActor *t1, AActor *t2, int flags) bool res; - assert (t1 != NULL); - assert (t2 != NULL); - if (t1 == NULL || t2 == NULL) + assert (t1 != nullptr); + assert (t2 != nullptr); + if (t1 == nullptr || t2 == nullptr) { return false; } - const sector_t *s1 = t1->Sector; - const sector_t *s2 = t2->Sector; - int pnum = int(s1->Index()) * level.sectors.Size() + int(s2->Index()); - -// -// check for trivial rejection -// - if (level.rejectmatrix.Size() > 0 && - (level.rejectmatrix[pnum>>3] & (1 << (pnum & 7)))) + auto s1 = t1->Sector; + auto s2 = t2->Sector; + // + // check for trivial rejection + // + if (!t1->Level->CheckReject(s1, s2)) { sightcounts[0]++; res = false; // can't possibly be connected @@ -868,7 +871,7 @@ sightcounts[0]++; // Cannot see an invisible object if ((flags & SF_IGNOREVISIBILITY) == 0 && ((t2->renderflags & RF_INVISIBLE) || !t2->RenderStyle.IsVisible(t2->Alpha))) { // small chance of an attack being made anyway - if ((bglobal.m_Thinking ? pr_botchecksight() : pr_checksight()) > 50) + if ((t1->Level->BotInfo.m_Thinking ? pr_botchecksight() : pr_checksight()) > 50) { res = false; goto done; @@ -911,7 +914,7 @@ sightcounts[0]++; SightTask task = { 0, topslope, bottomslope, -1, sec->PortalGroup }; - SightCheck s; + SightCheck s(t1->Level); s.init(t1, t2, sec, &task, flags); res = s.P_SightPathTraverse (); if (!res) diff --git a/src/p_switch.cpp b/src/g_shared/p_switch.cpp similarity index 94% rename from src/p_switch.cpp rename to src/g_shared/p_switch.cpp index ec1d717ecc..2e092b5c3c 100644 --- a/src/p_switch.cpp +++ b/src/g_shared/p_switch.cpp @@ -33,16 +33,14 @@ */ #include "templates.h" -#include "i_system.h" + #include "doomdef.h" #include "p_local.h" #include "p_lnspec.h" #include "p_3dmidtex.h" #include "m_random.h" -#include "g_game.h" #include "s_sound.h" #include "doomstat.h" -#include "r_state.h" #include "serializer.h" #include "p_maputl.h" #include "p_spec.h" @@ -56,8 +54,7 @@ class DActiveButton : public DThinker { DECLARE_CLASS (DActiveButton, DThinker) public: - DActiveButton (); - DActiveButton (side_t *, int, FSwitchDef *, const DVector2 &pos, bool flippable); + void Construct(side_t *, int, FSwitchDef *, const DVector2 &pos, bool flippable); void Serialize(FSerializer &arc); void Tick (); @@ -86,7 +83,7 @@ protected: static bool P_StartButton (side_t *side, int Where, FSwitchDef *Switch, const DVector2 &pos, bool useagain) { DActiveButton *button; - TThinkerIterator iterator; + auto iterator = side->GetLevel()->GetThinkerIterator(); // See if button is already pressed while ( (button = iterator.Next ()) ) @@ -98,7 +95,7 @@ static bool P_StartButton (side_t *side, int Where, FSwitchDef *Switch, const DV } } - Create (side, Where, Switch, pos, useagain); + side->GetLevel()->CreateThinker (side, Where, Switch, pos, useagain); return true; } @@ -154,7 +151,7 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno, const DVector3 * // if the polyobject lies directly on a sector boundary check.X = dll.x + dll.dx * (inter + 0.01); check.Y = dll.y + dll.dy * (inter + 0.01); - front = P_PointInSector(check); + front = line->GetLevel()->PointInSector(check); } else { @@ -303,7 +300,7 @@ bool P_ChangeSwitchTexture (side_t *side, int useAgain, uint8_t special, bool *q } if (playsound) { - S_Sound (DVector3(pt, 0), CHAN_VOICE|CHAN_LISTENERZ, sound, 1, ATTN_STATIC); + S_Sound (side->GetLevel(), DVector3(pt, 0), CHAN_VOICE|CHAN_LISTENERZ, sound, 1, ATTN_STATIC); } if (quest != NULL) { @@ -320,20 +317,7 @@ bool P_ChangeSwitchTexture (side_t *side, int useAgain, uint8_t special, bool *q IMPLEMENT_CLASS(DActiveButton, false, false) -DActiveButton::DActiveButton () -{ - m_Side = NULL; - m_Part = -1; - m_SwitchDef = 0; - m_Timer = 0; - m_Pos = { 0,0 }; - bFlippable = false; - bReturning = false; - m_Frame = 0; -} - -DActiveButton::DActiveButton (side_t *side, int Where, FSwitchDef *Switch, - const DVector2 &pos, bool useagain) +void DActiveButton::Construct (side_t *side, int Where, FSwitchDef *Switch, const DVector2 &pos, bool useagain) { m_Side = side; m_Part = int8_t(Where); @@ -412,7 +396,7 @@ void DActiveButton::Tick () if (def != NULL) { m_Frame = -1; - S_Sound (DVector3(m_Pos, 0), CHAN_VOICE|CHAN_LISTENERZ, + S_Sound (Level, DVector3(m_Pos, 0), CHAN_VOICE|CHAN_LISTENERZ, def->Sound != 0 ? FSoundID(def->Sound) : FSoundID("switches/normbutn"), 1, ATTN_STATIC); bFlippable = false; diff --git a/src/p_tags.cpp b/src/g_shared/p_tags.cpp similarity index 96% rename from src/p_tags.cpp rename to src/g_shared/p_tags.cpp index 654f0bb407..ae5ba5727a 100644 --- a/src/p_tags.cpp +++ b/src/g_shared/p_tags.cpp @@ -39,8 +39,6 @@ #include "g_levellocals.h" #include "vm.h" -FTagManager tagManager; - //----------------------------------------------------------------------------- // // @@ -316,11 +314,6 @@ void FTagManager::DumpTags() } } -CCMD(dumptags) -{ - tagManager.DumpTags(); -} - //----------------------------------------------------------------------------- // // RETURN NEXT SECTOR # THAT LINE TAG REFERS TO @@ -348,11 +341,11 @@ int FSectorTagIterator::Next() else { // with the tag manager, searching for tag 0 has to be different, because it won't create entries for untagged sectors. - while (start < (int)level.sectors.Size() && tagManager.SectorHasTags(start)) + while (start < (int)tagManager.Level->sectors.Size() && tagManager.SectorHasTags(start)) { start++; } - if (start == (int)level.sectors.Size()) return -1; + if (start == (int)tagManager.Level->sectors.Size()) return -1; ret = start; start++; } @@ -369,9 +362,9 @@ int FSectorTagIterator::NextCompat(bool compat, int start) { if (!compat) return Next(); - for (unsigned i = start + 1; i < level.sectors.Size(); i++) + for (unsigned i = start + 1; i < tagManager.Level->sectors.Size(); i++) { - if (tagManager.SectorHasTag(i, searchtag)) return i; + if (tagManager.Level->SectorHasTag(i, searchtag)) return i; } return -1; } diff --git a/src/p_tags.h b/src/g_shared/p_tags.h similarity index 76% rename from src/p_tags.h rename to src/g_shared/p_tags.h index 8ce6b3568b..7452ef755d 100644 --- a/src/p_tags.h +++ b/src/g_shared/p_tags.h @@ -13,6 +13,7 @@ struct FTagItem class FSectorTagIterator; class FLineIdIterator; +struct FLevelLocals; class FTagManager { @@ -21,9 +22,14 @@ class FTagManager TAG_HASH_SIZE = 256 }; + // Only the iterators and the map loader, including its helpers may access this. Everything else should go through FLevelLocals's interface. friend class FSectorTagIterator; friend class FLineIdIterator; + friend class MapLoader; + friend struct FLevelLocals; + friend class UDMFParser; + FLevelLocals *Level; TArray allTags; TArray allIDs; TArray startForSector; @@ -41,7 +47,8 @@ class FTagManager return sect >= 0 && sect < (int)startForLine.Size() && startForLine[sect] >= 0; } -public: + + FTagManager(FLevelLocals *l) : Level(l) {} void Clear() { allTags.Clear(); @@ -63,6 +70,7 @@ public: bool LineHasID(const line_t *line, int id) const; void HashTags(); +public: // The ones below are called by functions that cannot be declared as friend. void AddSectorTag(int sector, int tag); void AddLineID(int line, int tag); void RemoveSectorTags(int sect); @@ -71,15 +79,15 @@ public: void DumpTags(); }; -extern FTagManager tagManager; - class FSectorTagIterator { + friend struct FLevelLocals; protected: int searchtag; int start; + FTagManager &tagManager; - FSectorTagIterator() + FSectorTagIterator(FTagManager &tm) : tagManager(tm) { // For DSectorTagIterator } @@ -104,49 +112,38 @@ protected: } } -public: - FSectorTagIterator(int tag) + FSectorTagIterator(FTagManager &tm, int tag) : tagManager(tm) { Init(tag); } // Special constructor for actions that treat tag 0 as 'back of activation line' - FSectorTagIterator(int tag, line_t *line) + FSectorTagIterator(FTagManager &tm, int tag, line_t *line) : tagManager(tm) { Init(tag, line); } - +public: int Next(); int NextCompat(bool compat, int secnum); }; class FLineIdIterator { + friend struct FLevelLocals; protected: int searchtag; int start; + FTagManager &tagManager; -public: - FLineIdIterator(int id) + FLineIdIterator(FTagManager &tm, int id) : tagManager(tm) { searchtag = id; start = tagManager.IDHashFirst[((unsigned int)id) % FTagManager::TAG_HASH_SIZE]; } +public: int Next(); }; -inline int P_FindFirstSectorFromTag(int tag) -{ - FSectorTagIterator it(tag); - return it.Next(); -} - -inline int P_FindFirstLineFromID(int tag) -{ - FLineIdIterator it(tag); - return it.Next(); -} - #endif diff --git a/src/p_teleport.cpp b/src/g_shared/p_teleport.cpp similarity index 84% rename from src/p_teleport.cpp rename to src/g_shared/p_teleport.cpp index 2dfc754ab8..e0e57e53e4 100644 --- a/src/p_teleport.cpp +++ b/src/g_shared/p_teleport.cpp @@ -26,23 +26,13 @@ // //----------------------------------------------------------------------------- - -#include "templates.h" -#include "doomtype.h" -#include "doomdef.h" -#include "s_sound.h" -#include "p_local.h" -#include "p_terrain.h" -#include "r_state.h" -#include "gi.h" -#include "a_sharedglobal.h" -#include "doomstat.h" #include "d_player.h" -#include "p_maputl.h" -#include "r_utility.h" -#include "p_spec.h" -#include "g_levellocals.h" +#include "doomdef.h" #include "vm.h" +#include "g_levellocals.h" +#include "p_maputl.h" +#include "gi.h" +#include "r_utility.h" #define FUDGEFACTOR 10 @@ -70,7 +60,7 @@ void P_SpawnTeleportFog(AActor *mobj, const DVector3 &pos, bool beforeTele, bool else { double fogDelta = mobj->flags & MF_MISSILE ? 0 : TELEFOGHEIGHT; - mo = Spawn((beforeTele ? mobj->TeleFogSourceType : mobj->TeleFogDestType), DVector3(pos, pos.Z + fogDelta), ALLOW_REPLACE); + mo = Spawn(mobj->Level, (beforeTele ? mobj->TeleFogSourceType : mobj->TeleFogDestType), DVector3(pos, pos.Z + fogDelta), ALLOW_REPLACE); } if (mo != NULL && setTarget) @@ -89,9 +79,11 @@ DEFINE_ACTION_FUNCTION(AActor, SpawnTeleportFog) return 0; } +//----------------------------------------------------------------------------- // // TELEPORTATION // +//----------------------------------------------------------------------------- bool P_Teleport (AActor *thing, DVector3 pos, DAngle angle, int flags) { @@ -107,7 +99,7 @@ bool P_Teleport (AActor *thing, DVector3 pos, DAngle angle, int flags) old = thing->Pos(); aboveFloor = thing->Z() - thing->floorz; - destsect = P_PointInSector (pos); + destsect = thing->Level->PointInSector (pos); // killough 5/12/98: exclude voodoo dolls: player = thing->player; if (player && player->mo != thing) @@ -186,7 +178,7 @@ bool P_Teleport (AActor *thing, DVector3 pos, DAngle angle, int flags) if (!predicting) { DVector2 vector = angle.ToVector(20); - DVector2 fogpos = P_GetOffsetPosition(pos.X, pos.Y, vector.X, vector.Y); + DVector2 fogpos = thing->Level->GetPortalOffsetPosition(pos.X, pos.Y, vector.X, vector.Y); P_SpawnTeleportFog(thing, DVector3(fogpos, thing->Z()), false, true); } @@ -235,7 +227,13 @@ DEFINE_ACTION_FUNCTION(AActor, Teleport) ACTION_RETURN_BOOL(P_Teleport(self, DVector3(x, y, z), an, flags)); } -static AActor *SelectTeleDest (int tid, int tag, bool norandom) +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +AActor *FLevelLocals::SelectTeleDest (int tid, int tag, bool norandom) { AActor *searcher; @@ -250,11 +248,11 @@ static AActor *SelectTeleDest (int tid, int tag, bool norandom) if (tid != 0) { - NActorIterator iterator (NAME_TeleportDest, tid); + auto iterator = GetActorIterator(NAME_TeleportDest, tid); int count = 0; while ( (searcher = iterator.Next ()) ) { - if (tag == 0 || tagManager.SectorHasTag(searcher->Sector, tag)) + if (tag == 0 || SectorHasTag(searcher->Sector, tag)) { count++; } @@ -268,12 +266,12 @@ static AActor *SelectTeleDest (int tid, int tag, bool norandom) if (tag == 0) { // Try to find a matching map spot (fixes Hexen MAP10) - NActorIterator it2 (NAME_MapSpot, tid); + auto it2 = GetActorIterator(NAME_MapSpot, tid); searcher = it2.Next (); - if (searcher == NULL) + if (searcher == nullptr) { // Try to find a matching non-blocking spot of any type (fixes Caldera MAP13) - FActorIterator it3 (tid); + auto it3 = GetActorIterator(tid); searcher = it3.Next (); while (searcher != NULL && (searcher->flags & MF_SOLID)) { @@ -293,7 +291,7 @@ static AActor *SelectTeleDest (int tid, int tag, bool norandom) while (count > 0) { searcher = iterator.Next (); - if (tag == 0 || tagManager.SectorHasTag(searcher->Sector, tag)) + if (tag == 0 || SectorHasTag(searcher->Sector, tag)) { count--; } @@ -306,7 +304,7 @@ static AActor *SelectTeleDest (int tid, int tag, bool norandom) { int secnum; - FSectorTagIterator itr(tag); + auto itr = GetSectorTagIterator(tag); while ((secnum = itr.Next()) >= 0) { // Scanning the snext links of things in the sector will not work, because @@ -316,10 +314,10 @@ static AActor *SelectTeleDest (int tid, int tag, bool norandom) // teleport destination. This means if 50 sectors have a matching tag and // only the last one has a destination, *every* actor is scanned at least 49 // times. Yuck. - TThinkerIterator it2(NAME_TeleportDest); + auto it2 = GetThinkerIterator(NAME_TeleportDest); while ((searcher = it2.Next()) != NULL) { - if (searcher->Sector == &level.sectors[secnum]) + if (searcher->Sector == §ors[secnum]) { return searcher; } @@ -330,7 +328,13 @@ static AActor *SelectTeleDest (int tid, int tag, bool norandom) return NULL; } -bool EV_Teleport (int tid, int tag, line_t *line, int side, AActor *thing, int flags) +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +bool FLevelLocals::EV_Teleport (int tid, int tag, line_t *line, int side, AActor *thing, int flags) { AActor *searcher; double z; @@ -377,7 +381,7 @@ bool EV_Teleport (int tid, int tag, line_t *line, int side, AActor *thing, int f z = searcher->Z(); } - else if (searcher->IsKindOf (PClass::FindClass(NAME_TeleportDest2))) + else if (searcher->IsKindOf (NAME_TeleportDest2)) { z = searcher->Z(); } @@ -413,16 +417,19 @@ bool EV_Teleport (int tid, int tag, line_t *line, int side, AActor *thing, int f return false; } +//----------------------------------------------------------------------------- // // Silent linedef-based TELEPORTATION, by Lee Killough // Primarily for rooms-over-rooms etc. // This is the complete player-preserving kind of teleporter. // It has advantages over the teleporter with thing exits. // - // [RH] Modified to support different source and destination ids. // [RH] Modified some more to be accurate. -bool EV_SilentLineTeleport (line_t *line, int side, AActor *thing, int id, INTBOOL reverse) +// +//----------------------------------------------------------------------------- + +bool FLevelLocals::EV_SilentLineTeleport (line_t *line, int side, AActor *thing, int id, INTBOOL reverse) { int i; line_t *l; @@ -430,13 +437,13 @@ bool EV_SilentLineTeleport (line_t *line, int side, AActor *thing, int id, INTBO if (side || thing->flags2 & MF2_NOTELEPORT || !line || line->sidedef[1] == NULL) return false; - FLineIdIterator itr(id); + auto itr = GetLineIdIterator(id); while ((i = itr.Next()) >= 0) { if (line->Index() == i) continue; - if ((l=&level.lines[i]) != line && l->backsector) + if ((l=&lines[i]) != line && l->backsector) { // Get the thing's position along the source linedef double pos; @@ -555,10 +562,7 @@ bool EV_SilentLineTeleport (line_t *line, int side, AActor *thing, int id, INTBO return false; } - if (thing == players[consoleplayer].camera) - { - R_ResetViewInterpolation (); - } + thing->renderflags |= RF_NOINTERPOLATEVIEW; // Rotate thing's orientation according to difference in linedef angles thing->Angles.Yaw += angle; @@ -599,15 +603,20 @@ bool EV_SilentLineTeleport (line_t *line, int side, AActor *thing, int id, INTBO return false; } +//----------------------------------------------------------------------------- +// // [RH] Teleport anything matching other_tid to dest_tid -bool EV_TeleportOther (int other_tid, int dest_tid, bool fog) +// +//----------------------------------------------------------------------------- + +bool FLevelLocals::EV_TeleportOther (int other_tid, int dest_tid, bool fog) { bool didSomething = false; if (other_tid != 0 && dest_tid != 0) { AActor *victim; - FActorIterator iterator (other_tid); + auto iterator = GetActorIterator(other_tid); while ( (victim = iterator.Next ()) ) { @@ -619,7 +628,13 @@ bool EV_TeleportOther (int other_tid, int dest_tid, bool fog) return didSomething; } -static bool DoGroupForOne (AActor *victim, AActor *source, AActor *dest, bool floorz, bool fog) +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +bool DoGroupForOne (AActor *victim, AActor *source, AActor *dest, bool floorz, bool fog) { DAngle an = dest->Angles.Yaw - source->Angles.Yaw; DVector2 off = victim->Pos() - source->Pos(); @@ -636,13 +651,18 @@ static bool DoGroupForOne (AActor *victim, AActor *source, AActor *dest, bool fl return res; } +//----------------------------------------------------------------------------- +// // [RH] Teleport a group of actors centered around source_tid so // that they become centered around dest_tid instead. -bool EV_TeleportGroup (int group_tid, AActor *victim, int source_tid, int dest_tid, bool moveSource, bool fog) +// +//----------------------------------------------------------------------------- + +bool FLevelLocals::EV_TeleportGroup (int group_tid, AActor *victim, int source_tid, int dest_tid, bool moveSource, bool fog) { AActor *sourceOrigin, *destOrigin; { - FActorIterator iterator (source_tid); + auto iterator = GetActorIterator(source_tid); sourceOrigin = iterator.Next (); } if (sourceOrigin == NULL) @@ -651,7 +671,7 @@ bool EV_TeleportGroup (int group_tid, AActor *victim, int source_tid, int dest_t } { - NActorIterator iterator (NAME_TeleportDest, dest_tid); + auto iterator = GetActorIterator(NAME_TeleportDest, dest_tid); destOrigin = iterator.Next (); } if (destOrigin == NULL) @@ -669,7 +689,7 @@ bool EV_TeleportGroup (int group_tid, AActor *victim, int source_tid, int dest_t } else { - FActorIterator iterator (group_tid); + auto iterator = GetActorIterator(group_tid); // For each actor with tid matching arg0, move it to the same // position relative to destOrigin as it is relative to sourceOrigin @@ -690,14 +710,19 @@ bool EV_TeleportGroup (int group_tid, AActor *victim, int source_tid, int dest_t return didSomething; } +//----------------------------------------------------------------------------- +// // [RH] Teleport a group of actors in a sector. Source_tid is used as a // reference point so that they end up in the same position relative to // dest_tid. Group_tid can be used to not teleport all actors in the sector. -bool EV_TeleportSector (int tag, int source_tid, int dest_tid, bool fog, int group_tid) +// +//----------------------------------------------------------------------------- + +bool FLevelLocals::EV_TeleportSector (int tag, int source_tid, int dest_tid, bool fog, int group_tid) { AActor *sourceOrigin, *destOrigin; { - FActorIterator iterator (source_tid); + auto iterator = GetActorIterator(source_tid); sourceOrigin = iterator.Next (); } if (sourceOrigin == NULL) @@ -705,7 +730,7 @@ bool EV_TeleportSector (int tag, int source_tid, int dest_tid, bool fog, int gro return false; } { - NActorIterator iterator (NAME_TeleportDest, dest_tid); + auto iterator = GetActorIterator(NAME_TeleportDest, dest_tid); destOrigin = iterator.Next (); } if (destOrigin == NULL) @@ -714,15 +739,15 @@ bool EV_TeleportSector (int tag, int source_tid, int dest_tid, bool fog, int gro } bool didSomething = false; - bool floorz = !destOrigin->IsKindOf (PClass::FindClass("TeleportDest2")); + bool floorz = !destOrigin->IsKindOf(NAME_TeleportDest2); int secnum; secnum = -1; - FSectorTagIterator itr(tag); + auto itr = GetSectorTagIterator(tag); while ((secnum = itr.Next()) >= 0) { msecnode_t *node; - const sector_t * const sec = &level.sectors[secnum]; + const sector_t * const sec = §ors[secnum]; for (node = sec->touching_thinglist; node; ) { diff --git a/src/p_trace.cpp b/src/g_shared/p_trace.cpp similarity index 97% rename from src/p_trace.cpp rename to src/g_shared/p_trace.cpp index d2f3e71f40..dd9c7bb994 100644 --- a/src/p_trace.cpp +++ b/src/g_shared/p_trace.cpp @@ -50,6 +50,7 @@ struct FTraceInfo { + FLevelLocals *Level; DVector3 Start; DVector3 Vec; ActorFlags ActorMask; @@ -116,7 +117,7 @@ static void GetPortalTransition(DVector3 &pos, sector_t *&sec) if (pos.Z > sec->GetPortalPlaneZ(sector_t::ceiling)) { pos += sec->GetPortalDisplacement(sector_t::ceiling); - sec = P_PointInSector(pos); + sec = sec->Level->PointInSector(pos); moved = true; } else break; @@ -128,7 +129,7 @@ static void GetPortalTransition(DVector3 &pos, sector_t *&sec) if (pos.Z <= sec->GetPortalPlaneZ(sector_t::floor)) { pos += sec->GetPortalDisplacement(sector_t::floor); - sec = P_PointInSector(pos); + sec = sec->Level->PointInSector(pos); } else break; } @@ -158,6 +159,7 @@ bool Trace(const DVector3 &start, sector_t *sector, const DVector3 &direction, d memset(&tempResult, 0, sizeof(tempResult)); tempResult.Fraction = tempResult.Distance = NO_VALUE; + inf.Level = sector->Level; inf.Start = start; GetPortalTransition(inf.Start, sector); inf.ptflags = actorMask ? PT_ADDLINES|PT_ADDTHINGS|PT_COMPATIBLE : PT_ADDLINES; @@ -220,7 +222,7 @@ void FTraceInfo::EnterSectorPortal(FPathTraverse &pt, int position, double frac, DVector3 enter = exit + displacement; Start += displacement; - CurSector = P_PointInSector(enter); + CurSector = entersec->Level->PointInSector(enter); inshootthrough = true; startfrac = frac; EnterDist = enterdist; @@ -259,7 +261,7 @@ void FTraceInfo::EnterLinePortal(FPathTraverse &pt, intercept_t *in) P_TranslatePortalVXVY(li, Vec.X, Vec.Y); P_TranslatePortalZ(li, limitz); - CurSector = P_PointInSector(Start + enterdist * Vec); + CurSector = li->GetLevel()->PointInSector(Start + enterdist * Vec); EnterDist = enterdist; inshootthrough = true; startfrac = frac; @@ -419,7 +421,7 @@ bool FTraceInfo::LineCheck(intercept_t *in, double dist, DVector3 hit, bool spec // For backwards compatibility: Ignore lines with the same sector on both sides. // This is the way Doom.exe did it and some WADs (e.g. Alien Vendetta MAP15) need it. - if (i_compatflags & COMPATF_TRACE && in->d.line->backsector == in->d.line->frontsector && !special3dpass) + if (Level->i_compatflags & COMPATF_TRACE && in->d.line->backsector == in->d.line->frontsector && !special3dpass) { // We must check special activation here because the code below is never reached. if (TraceFlags & TRACE_PCross) @@ -452,7 +454,7 @@ bool FTraceInfo::LineCheck(intercept_t *in, double dist, DVector3 hit, bool spec // hit crossed a water plane if (CheckSectorPlane(hsec, true)) { - Results->CrossedWater = &level.sectors[CurSector->sectornum]; + Results->CrossedWater = &Level->sectors[CurSector->sectornum]; Results->CrossedWaterPos = Results->HitPos; Results->Distance = 0; } @@ -583,7 +585,7 @@ cont: if (Results->HitType != TRACE_HitNone) { // We hit something, so figure out where exactly - Results->Sector = &level.sectors[CurSector->sectornum]; + Results->Sector = &Level->sectors[CurSector->sectornum]; if (Results->HitType != TRACE_HitWall && !CheckSectorPlane(CurSector, Results->HitType == TRACE_HitFloor)) @@ -720,7 +722,7 @@ bool FTraceInfo::ThingCheck(intercept_t *in, double dist, DVector3 hit) // the trace hit a 3D floor before the thing. // Calculate an intersection and abort. - Results->Sector = &level.sectors[CurSector->sectornum]; + Results->Sector = &Level->sectors[CurSector->sectornum]; if (!CheckSectorPlane(CurSector, Results->HitType == TRACE_HitFloor)) { Results->HitType = TRACE_HitNone; @@ -777,7 +779,7 @@ bool FTraceInfo::TraceTraverse (int ptflags) // Do a 3D floor check in the starting sector Setup3DFloors(); - FPathTraverse it(Start.X, Start.Y, Vec.X * MaxDist, Vec.Y * MaxDist, ptflags | PT_DELTA, startfrac); + FPathTraverse it(Level, Start.X, Start.Y, Vec.X * MaxDist, Vec.Y * MaxDist, ptflags | PT_DELTA, startfrac); intercept_t *in; int lastsplashsector = -1; @@ -872,7 +874,7 @@ bool FTraceInfo::TraceTraverse (int ptflags) } // check for intersection with floor/ceiling - Results->Sector = &level.sectors[CurSector->sectornum]; + Results->Sector = &Level->sectors[CurSector->sectornum]; if (Results->CrossedWater == NULL && CurSector->heightsec != NULL && @@ -886,7 +888,7 @@ bool FTraceInfo::TraceTraverse (int ptflags) if (CheckSectorPlane(CurSector->heightsec, true)) { - Results->CrossedWater = &level.sectors[CurSector->sectornum]; + Results->CrossedWater = &Level->sectors[CurSector->sectornum]; Results->CrossedWaterPos = Results->HitPos; Results->Distance = 0; } @@ -1020,7 +1022,7 @@ DEFINE_ACTION_FUNCTION(DLineTracer, Trace) PARAM_FLOAT(start_x); PARAM_FLOAT(start_y); PARAM_FLOAT(start_z); - PARAM_POINTER(sector, sector_t); + PARAM_POINTER_NOT_NULL(sector, sector_t); PARAM_FLOAT(direction_x); PARAM_FLOAT(direction_y); PARAM_FLOAT(direction_z); @@ -1083,4 +1085,4 @@ ETraceStatus DLineTracer::CallZScriptCallback() } return TRACE_Stop; -} \ No newline at end of file +} diff --git a/src/p_trace.h b/src/g_shared/p_trace.h similarity index 100% rename from src/p_trace.h rename to src/g_shared/p_trace.h diff --git a/src/po_man.cpp b/src/g_shared/po_man.cpp similarity index 83% rename from src/po_man.cpp rename to src/g_shared/po_man.cpp index 9643ee6e9e..5147d77fff 100644 --- a/src/po_man.cpp +++ b/src/g_shared/po_man.cpp @@ -46,12 +46,10 @@ class DRotatePoly : public DPolyAction { DECLARE_CLASS (DRotatePoly, DPolyAction) public: - DRotatePoly (int polyNum); + void Construct(FPolyObj *polyNum); void Tick (); -private: - DRotatePoly (); - friend bool EV_RotatePoly (line_t *line, int polyNum, int speed, int byteAngle, int direction, bool overRide); + friend bool EV_RotatePoly (FLevelLocals *Level, line_t *line, int polyNum, int speed, int byteAngle, int direction, bool overRide); }; @@ -59,30 +57,28 @@ class DMovePoly : public DPolyAction { DECLARE_CLASS (DMovePoly, DPolyAction) public: - DMovePoly (int polyNum); + void Construct(FPolyObj *polyNum); void Serialize(FSerializer &arc); void Tick (); protected: - DMovePoly (); DAngle m_Angle; DVector2 m_Speedv; - friend bool EV_MovePoly(line_t *line, int polyNum, double speed, DAngle angle, double dist, bool overRide); + friend bool EV_MovePoly(FLevelLocals *Level, line_t *line, int polyNum, double speed, DAngle angle, double dist, bool overRide); }; class DMovePolyTo : public DPolyAction { DECLARE_CLASS(DMovePolyTo, DPolyAction) public: - DMovePolyTo(int polyNum); + void Construct(FPolyObj *polyNum); void Serialize(FSerializer &arc); void Tick(); protected: - DMovePolyTo(); DVector2 m_Speedv; DVector2 m_Target; - friend bool EV_MovePolyTo(line_t *line, int polyNum, double speed, const DVector2 &pos, bool overRide); + friend bool EV_MovePolyTo(FLevelLocals *Level, line_t *line, int polyNum, double speed, const DVector2 &pos, bool overRide); }; @@ -90,7 +86,7 @@ class DPolyDoor : public DMovePoly { DECLARE_CLASS (DPolyDoor, DMovePoly) public: - DPolyDoor (int polyNum, podoortype_t type); + void Construct(FPolyObj *polyNum, podoortype_t type); void Serialize(FSerializer &arc); void Tick (); protected: @@ -101,9 +97,7 @@ protected: podoortype_t m_Type; bool m_Close; - friend bool EV_OpenPolyDoor(line_t *line, int polyNum, double speed, DAngle angle, int delay, double distance, podoortype_t type); -private: - DPolyDoor (); + friend bool EV_OpenPolyDoor(FLevelLocals *Level, line_t *line, int polyNum, double speed, DAngle angle, int delay, double distance, podoortype_t type); }; class FPolyMirrorIterator @@ -152,10 +146,6 @@ IMPLEMENT_POINTERS_START(DPolyAction) IMPLEMENT_POINTER(m_Interpolation) IMPLEMENT_POINTERS_END -DPolyAction::DPolyAction () -{ -} - void DPolyAction::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -165,7 +155,7 @@ void DPolyAction::Serialize(FSerializer &arc) ("interpolation", m_Interpolation); } -DPolyAction::DPolyAction (int polyNum) +void DPolyAction::Construct(FPolyObj *polyNum) { m_PolyObj = polyNum; m_Speed = 0; @@ -175,11 +165,9 @@ DPolyAction::DPolyAction (int polyNum) void DPolyAction::OnDestroy() { - FPolyObj *poly = PO_GetPolyobj (m_PolyObj); - - if (poly->specialdata == this) + if (m_PolyObj->specialdata == this) { - poly->specialdata = NULL; + m_PolyObj->specialdata = nullptr; } StopInterpolation(); @@ -188,23 +176,21 @@ void DPolyAction::OnDestroy() void DPolyAction::Stop() { - FPolyObj *poly = PO_GetPolyobj(m_PolyObj); - SN_StopSequence(poly); + SN_StopSequence(m_PolyObj); Destroy(); } void DPolyAction::SetInterpolation () { - FPolyObj *poly = PO_GetPolyobj (m_PolyObj); - m_Interpolation = poly->SetInterpolation(); + m_Interpolation = m_PolyObj->SetInterpolation(); } void DPolyAction::StopInterpolation () { - if (m_Interpolation != NULL) + if (m_Interpolation != nullptr) { m_Interpolation->DelRef(); - m_Interpolation = NULL; + m_Interpolation = nullptr; } } @@ -216,13 +202,9 @@ void DPolyAction::StopInterpolation () IMPLEMENT_CLASS(DRotatePoly, false, false) -DRotatePoly::DRotatePoly () -{ -} - -DRotatePoly::DRotatePoly (int polyNum) - : Super (polyNum) +void DRotatePoly::Construct(FPolyObj *polyNum) { + Super::Construct(polyNum); } //========================================================================== @@ -233,10 +215,6 @@ DRotatePoly::DRotatePoly (int polyNum) IMPLEMENT_CLASS(DMovePoly, false, false) -DMovePoly::DMovePoly () -{ -} - void DMovePoly::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -244,9 +222,9 @@ void DMovePoly::Serialize(FSerializer &arc) ("speedv", m_Speedv); } -DMovePoly::DMovePoly (int polyNum) - : Super (polyNum) +void DMovePoly::Construct(FPolyObj *polyNum) { + Super::Construct(polyNum); m_Angle = 0.; m_Speedv = { 0,0 }; } @@ -260,10 +238,6 @@ DMovePoly::DMovePoly (int polyNum) IMPLEMENT_CLASS(DMovePolyTo, false, false) -DMovePolyTo::DMovePolyTo() -{ -} - void DMovePolyTo::Serialize(FSerializer &arc) { Super::Serialize(arc); @@ -271,9 +245,9 @@ void DMovePolyTo::Serialize(FSerializer &arc) ("target", m_Target); } -DMovePolyTo::DMovePolyTo(int polyNum) - : Super(polyNum) +void DMovePolyTo::Construct(FPolyObj *polyNum) { + Super::Construct(polyNum); m_Speedv = m_Target = { 0,0 }; } @@ -285,10 +259,6 @@ DMovePolyTo::DMovePolyTo(int polyNum) IMPLEMENT_CLASS(DPolyDoor, false, false) -DPolyDoor::DPolyDoor () -{ -} - void DPolyDoor::Serialize(FSerializer &arc) { Super::Serialize (arc); @@ -300,9 +270,10 @@ void DPolyDoor::Serialize(FSerializer &arc) ("close", m_Close); } -DPolyDoor::DPolyDoor (int polyNum, podoortype_t type) - : Super (polyNum), m_Type (type) +void DPolyDoor::Construct (FPolyObj * polyNum, podoortype_t type) { + Super::Construct(polyNum); + m_Type = type; m_Direction = 0.; m_TotalDist = 0; m_Tics = 0; @@ -320,8 +291,7 @@ DPolyDoor::DPolyDoor (int polyNum, podoortype_t type) void DRotatePoly::Tick () { - FPolyObj *poly = PO_GetPolyobj (m_PolyObj); - if (poly == NULL) return; + if (m_PolyObj == nullptr) return; // Don't let non-perpetual polyobjs overshoot their targets. if (m_Dist != -1 && m_Dist < fabs(m_Speed)) @@ -329,7 +299,7 @@ void DRotatePoly::Tick () m_Speed = m_Speed < 0 ? -m_Dist : m_Dist; } - if (poly->RotatePolyobj (m_Speed)) + if (m_PolyObj->RotatePolyobj (m_Speed)) { if (m_Dist == -1) { // perpetual polyobj @@ -338,7 +308,7 @@ void DRotatePoly::Tick () m_Dist -= fabs(m_Speed); if (m_Dist == 0) { - SN_StopSequence (poly); + SN_StopSequence (m_PolyObj); Destroy (); } } @@ -351,22 +321,21 @@ void DRotatePoly::Tick () //========================================================================== -bool EV_RotatePoly (line_t *line, int polyNum, int speed, int byteAngle, - int direction, bool overRide) +bool EV_RotatePoly (FLevelLocals *Level, line_t *line, int polyNum, int speed, int byteAngle, int direction, bool overRide) { - DRotatePoly *pe = NULL; + DRotatePoly *pe = nullptr; FPolyObj *poly; - if ((poly = PO_GetPolyobj(polyNum)) == NULL) + if ((poly = Level->GetPolyobj(polyNum)) == nullptr) { Printf("EV_RotatePoly: Invalid polyobj num: %d\n", polyNum); return false; } FPolyMirrorIterator it(poly); - while ((poly = it.NextMirror()) != NULL) + while ((poly = it.NextMirror()) != nullptr) { - if ((poly->specialdata != NULL || poly->bBlocked) && !overRide) + if ((poly->specialdata != nullptr || poly->bBlocked) && !overRide) { // poly is already in motion break; } @@ -375,7 +344,7 @@ bool EV_RotatePoly (line_t *line, int polyNum, int speed, int byteAngle, // cannot do rotations on linked polyportals. break; } - pe = Create(poly->tag); + pe = Level->CreateThinker(poly); poly->specialdata = pe; poly->bBlocked = false; if (byteAngle != 0) @@ -397,7 +366,7 @@ bool EV_RotatePoly (line_t *line, int polyNum, int speed, int byteAngle, SN_StartSequence (poly, poly->seqType, SEQ_DOOR, 0); direction = -direction; // Reverse the direction } - return pe != NULL; // Return true if something started moving. + return pe != nullptr; // Return true if something started moving. } //========================================================================== @@ -408,17 +377,15 @@ bool EV_RotatePoly (line_t *line, int polyNum, int speed, int byteAngle, void DMovePoly::Tick () { - FPolyObj *poly = PO_GetPolyobj (m_PolyObj); - - if (poly != NULL) + if (m_PolyObj != nullptr) { - if (poly->MovePolyobj (m_Speedv)) + if (m_PolyObj->MovePolyobj (m_Speedv)) { double absSpeed = fabs (m_Speed); m_Dist -= absSpeed; if (m_Dist <= 0) { - SN_StopSequence (poly); + SN_StopSequence (m_PolyObj); Destroy (); } else if (m_Dist < absSpeed) @@ -426,7 +393,7 @@ void DMovePoly::Tick () m_Speed = m_Dist * (m_Speed < 0 ? -1 : 1); m_Speedv = m_Angle.ToVector(m_Speed); } - poly->UpdateLinks(); + m_PolyObj->UpdateLinks(); } } } @@ -437,27 +404,26 @@ void DMovePoly::Tick () // //========================================================================== -bool EV_MovePoly (line_t *line, int polyNum, double speed, DAngle angle, - double dist, bool overRide) +bool EV_MovePoly (FLevelLocals *Level, line_t *line, int polyNum, double speed, DAngle angle, double dist, bool overRide) { - DMovePoly *pe = NULL; + DMovePoly *pe = nullptr; FPolyObj *poly; DAngle an = angle; - if ((poly = PO_GetPolyobj(polyNum)) == NULL) + if ((poly = Level->GetPolyobj(polyNum)) == nullptr) { Printf("EV_MovePoly: Invalid polyobj num: %d\n", polyNum); return false; } FPolyMirrorIterator it(poly); - while ((poly = it.NextMirror()) != NULL) + while ((poly = it.NextMirror()) != nullptr) { - if ((poly->specialdata != NULL || poly->bBlocked) && !overRide) + if ((poly->specialdata != nullptr || poly->bBlocked) && !overRide) { // poly is already in motion break; } - pe = Create(poly->tag); + pe = Level->CreateThinker(poly); poly->specialdata = pe; poly->bBlocked = false; pe->m_Dist = dist; // Distance @@ -477,7 +443,7 @@ bool EV_MovePoly (line_t *line, int polyNum, double speed, DAngle angle, angle += 180.; // Reverse the angle. } - return pe != NULL; // Return true if something started moving. + return pe != nullptr; // Return true if something started moving. } //========================================================================== @@ -488,25 +454,23 @@ bool EV_MovePoly (line_t *line, int polyNum, double speed, DAngle angle, void DMovePolyTo::Tick () { - FPolyObj *poly = PO_GetPolyobj (m_PolyObj); - - if (poly != NULL) + if (m_PolyObj != nullptr) { - if (poly->MovePolyobj (m_Speedv)) + if (m_PolyObj->MovePolyobj (m_Speedv)) { double absSpeed = fabs (m_Speed); m_Dist -= absSpeed; if (m_Dist <= 0) { - SN_StopSequence (poly); + SN_StopSequence (m_PolyObj); Destroy (); } else if (m_Dist < absSpeed) { m_Speed = m_Dist * (m_Speed < 0 ? -1 : 1); - m_Speedv = m_Target - poly->StartSpot.pos; + m_Speedv = m_Target - m_PolyObj->StartSpot.pos; } - poly->UpdateLinks(); + m_PolyObj->UpdateLinks(); } } } @@ -517,14 +481,14 @@ void DMovePolyTo::Tick () // //========================================================================== -bool EV_MovePolyTo(line_t *line, int polyNum, double speed, const DVector2 &targ, bool overRide) +bool EV_MovePolyTo(FLevelLocals *Level, line_t *line, int polyNum, double speed, const DVector2 &targ, bool overRide) { - DMovePolyTo *pe = NULL; + DMovePolyTo *pe = nullptr; FPolyObj *poly; DVector2 dist; double distlen; - if ((poly = PO_GetPolyobj(polyNum)) == NULL) + if ((poly = Level->GetPolyobj(polyNum)) == nullptr) { Printf("EV_MovePolyTo: Invalid polyobj num: %d\n", polyNum); return false; @@ -533,13 +497,13 @@ bool EV_MovePolyTo(line_t *line, int polyNum, double speed, const DVector2 &targ dist = targ - poly->StartSpot.pos; distlen = dist.MakeUnit(); - while ((poly = it.NextMirror()) != NULL) + while ((poly = it.NextMirror()) != nullptr) { - if ((poly->specialdata != NULL || poly->bBlocked) && !overRide) + if ((poly->specialdata != nullptr || poly->bBlocked) && !overRide) { // poly is already in motion break; } - pe = Create(poly->tag); + pe = Level->CreateThinker(poly); poly->specialdata = pe; poly->bBlocked = false; pe->m_Dist = distlen; @@ -552,7 +516,7 @@ bool EV_MovePolyTo(line_t *line, int polyNum, double speed, const DVector2 &targ } dist = -dist; // reverse the direction } - return pe != NULL; // Return true if something started moving. + return pe != nullptr; // Return true if something started moving. } //========================================================================== @@ -563,28 +527,26 @@ bool EV_MovePolyTo(line_t *line, int polyNum, double speed, const DVector2 &targ void DPolyDoor::Tick () { - FPolyObj *poly = PO_GetPolyobj (m_PolyObj); - - if (poly == NULL) return; + if (m_PolyObj == nullptr) return; if (m_Tics) { if (!--m_Tics) { - SN_StartSequence (poly, poly->seqType, SEQ_DOOR, m_Close); + SN_StartSequence (m_PolyObj, m_PolyObj->seqType, SEQ_DOOR, m_Close); } return; } switch (m_Type) { case PODOOR_SLIDE: - if (m_Dist <= 0 || poly->MovePolyobj (m_Speedv)) + if (m_Dist <= 0 || m_PolyObj->MovePolyobj (m_Speedv)) { double absSpeed = fabs (m_Speed); m_Dist -= absSpeed; if (m_Dist <= 0) { - SN_StopSequence (poly); + SN_StopSequence (m_PolyObj); if (!m_Close && m_WaitTics >= 0) { m_Dist = m_TotalDist; @@ -597,15 +559,15 @@ void DPolyDoor::Tick () { // if set to wait infinitely, Hexen kept the dead thinker to block the polyobject from getting activated again but that causes some problems // with the subsectorlinks and the interpolation. Better delete the thinker and use a different means to block it. - if (!m_Close) poly->bBlocked = true; + if (!m_Close) m_PolyObj->bBlocked = true; Destroy (); } } - poly->UpdateLinks(); + m_PolyObj->UpdateLinks(); } else { - if (poly->crush || !m_Close) + if (m_PolyObj->crush || !m_Close) { // continue moving if the poly is a crusher, or is opening return; } @@ -615,19 +577,19 @@ void DPolyDoor::Tick () m_Direction = -m_Direction; m_Speedv = -m_Speedv; m_Close = false; - SN_StartSequence (poly, poly->seqType, SEQ_DOOR, 0); + SN_StartSequence (m_PolyObj, m_PolyObj->seqType, SEQ_DOOR, 0); } } break; case PODOOR_SWING: - if (m_Dist <= 0 || poly->RotatePolyobj (m_Speed)) + if (m_Dist <= 0 || m_PolyObj->RotatePolyobj (m_Speed)) { double absSpeed = fabs (m_Speed); m_Dist -= absSpeed; if (m_Dist <= 0) { - SN_StopSequence (poly); + SN_StopSequence (m_PolyObj); if (!m_Close && m_WaitTics >= 0) { m_Dist = m_TotalDist; @@ -637,14 +599,14 @@ void DPolyDoor::Tick () } else { - if (!m_Close) poly->bBlocked = true; + if (!m_Close) m_PolyObj->bBlocked = true; Destroy (); } } } else { - if(poly->crush || !m_Close) + if(m_PolyObj->crush || !m_Close) { // continue moving if the poly is a crusher, or is opening return; } @@ -653,7 +615,7 @@ void DPolyDoor::Tick () m_Dist = m_TotalDist - m_Dist; m_Speed = -m_Speed; m_Close = false; - SN_StartSequence (poly, poly->seqType, SEQ_DOOR, 0); + SN_StartSequence (m_PolyObj, m_PolyObj->seqType, SEQ_DOOR, 0); } } break; @@ -669,22 +631,22 @@ void DPolyDoor::Tick () // //========================================================================== -bool EV_OpenPolyDoor(line_t *line, int polyNum, double speed, DAngle angle, int delay, double distance, podoortype_t type) +bool EV_OpenPolyDoor(FLevelLocals *Level, line_t *line, int polyNum, double speed, DAngle angle, int delay, double distance, podoortype_t type) { - DPolyDoor *pd = NULL; + DPolyDoor *pd = nullptr; FPolyObj *poly; int swingdir = 1; // ADD: PODOOR_SWINGL, PODOOR_SWINGR - if ((poly = PO_GetPolyobj(polyNum)) == NULL) + if ((poly = Level->GetPolyobj(polyNum)) == nullptr) { Printf("EV_OpenPolyDoor: Invalid polyobj num: %d\n", polyNum); return false; } FPolyMirrorIterator it(poly); - while ((poly = it.NextMirror()) != NULL) + while ((poly = it.NextMirror()) != nullptr) { - if ((poly->specialdata != NULL || poly->bBlocked)) + if ((poly->specialdata != nullptr || poly->bBlocked)) { // poly is already moving break; } @@ -694,7 +656,7 @@ bool EV_OpenPolyDoor(line_t *line, int polyNum, double speed, DAngle angle, int break; } - pd = Create(poly->tag, type); + pd = Level->CreateThinker(poly, type); poly->specialdata = pd; if (type == PODOOR_SLIDE) { @@ -717,7 +679,7 @@ bool EV_OpenPolyDoor(line_t *line, int polyNum, double speed, DAngle angle, int } } - return pd != NULL; // Return true if something started moving. + return pd != nullptr; // Return true if something started moving. } //========================================================================== @@ -726,13 +688,13 @@ bool EV_OpenPolyDoor(line_t *line, int polyNum, double speed, DAngle angle, int // //========================================================================== -bool EV_StopPoly(int polynum) +bool EV_StopPoly(FLevelLocals *Level, int polynum) { FPolyObj *poly; - if (NULL != (poly = PO_GetPolyobj(polynum))) + if (nullptr != (poly = Level->GetPolyobj(polynum))) { - if (poly->specialdata != NULL) + if (poly->specialdata != nullptr) { poly->specialdata->Stop(); } @@ -743,23 +705,6 @@ bool EV_StopPoly(int polynum) // ===== Higher Level Poly Interface code ===== -//========================================================================== -// -// PO_GetPolyobj -// -//========================================================================== - -FPolyObj *PO_GetPolyobj (int polyNum) -{ - for(auto &poly : level.Polyobjects) - { - if (poly.tag == polyNum) - { - return &poly; - } - } - return nullptr; -} //========================================================================== @@ -780,9 +725,9 @@ FPolyObj::FPolyObj() seqType = 0; Size = 0; bBlocked = false; - subsectorlinks = NULL; - specialdata = NULL; - interpolation = NULL; + subsectorlinks = nullptr; + specialdata = nullptr; + interpolation = nullptr; } //========================================================================== @@ -843,11 +788,11 @@ void FPolyObj::ThrustMobj (AActor *actor, side_t *side) DVector2 pos = actor->Vec2Offset(thrust.X, thrust.Y); if (bHurtOnTouch || !P_CheckMove (actor, pos)) { - int newdam = P_DamageMobj (actor, NULL, NULL, crush, NAME_Crush); + int newdam = P_DamageMobj (actor, nullptr, nullptr, crush, NAME_Crush); P_TraceBleed (newdam > 0 ? newdam : crush, actor); } } - if (level.flags2 & LEVEL2_POLYGRIND) actor->CallGrind(false); // crush corpses that get caught in a polyobject's way + if (Level->flags2 & LEVEL2_POLYGRIND) actor->CallGrind(false); // crush corpses that get caught in a polyobject's way } //========================================================================== @@ -878,7 +823,7 @@ void FPolyObj::UpdateLinks() { processed[destgroup] = true; DVector2 delta = port->mDisplacement - old; - level.Displacements.MoveGroup(destgroup, delta); + Level->Displacements.MoveGroup(destgroup, delta); } } } @@ -1052,21 +997,21 @@ void FPolyObj::UnLinkPolyobj () // remove the polyobj from each blockmap section for(j = bbox[BOXBOTTOM]; j <= bbox[BOXTOP]; j++) { - index = j*level.blockmap.bmapwidth; + index = j*Level->blockmap.bmapwidth; for(i = bbox[BOXLEFT]; i <= bbox[BOXRIGHT]; i++) { - if(i >= 0 && i < level.blockmap.bmapwidth && j >= 0 && j < level.blockmap.bmapheight) + if(i >= 0 && i < Level->blockmap.bmapwidth && j >= 0 && j < Level->blockmap.bmapheight) { - link = level.PolyBlockMap[index+i]; - while(link != NULL && link->polyobj != this) + link = Level->PolyBlockMap[index+i]; + while(link != nullptr && link->polyobj != this) { link = link->next; } - if(link == NULL) + if(link == nullptr) { // polyobj not located in the link cell continue; } - link->polyobj = NULL; + link->polyobj = nullptr; } } } @@ -1088,15 +1033,15 @@ bool FPolyObj::CheckMobjBlocking (side_t *sd) line_t *ld; bool blocked; bool performBlockingThrust; - int bmapwidth = level.blockmap.bmapwidth; - int bmapheight = level.blockmap.bmapheight; + int bmapwidth = Level->blockmap.bmapwidth; + int bmapheight = Level->blockmap.bmapheight; ld = sd->linedef; - top = level.blockmap.GetBlockY(ld->bbox[BOXTOP]); - bottom = level.blockmap.GetBlockY(ld->bbox[BOXBOTTOM]); - left = level.blockmap.GetBlockX(ld->bbox[BOXLEFT]); - right = level.blockmap.GetBlockX(ld->bbox[BOXRIGHT]); + top = Level->blockmap.GetBlockY(ld->bbox[BOXTOP]); + bottom = Level->blockmap.GetBlockY(ld->bbox[BOXBOTTOM]); + left = Level->blockmap.GetBlockX(ld->bbox[BOXLEFT]); + right = Level->blockmap.GetBlockX(ld->bbox[BOXRIGHT]); blocked = false; checker.Clear(); @@ -1114,7 +1059,7 @@ bool FPolyObj::CheckMobjBlocking (side_t *sd) { for (i = left; i <= right; i++) { - for (block = level.blockmap.blocklinks[j+i]; block != NULL; block = block->NextActor) + for (block = Level->blockmap.blocklinks[j+i]; block != nullptr; block = block->NextActor) { mobj = block->Me; for (k = (int)checker.Size()-1; k >= 0; --k) @@ -1133,7 +1078,7 @@ bool FPolyObj::CheckMobjBlocking (side_t *sd) open.top = LINEOPEN_MAX; open.bottom = LINEOPEN_MIN; // [TN] Check wether this actor gets blocked by the line. - if (ld->backsector != NULL && + if (ld->backsector != nullptr && !(ld->flags & (ML_BLOCKING|ML_BLOCKEVERYTHING)) && !(ld->flags & ML_BLOCK_PLAYERS && (mobj->player || (mobj->flags8 & MF8_BLOCKASPLAYER))) && !(ld->flags & ML_BLOCKMONSTERS && mobj->flags3 & MF3_ISMONSTER) @@ -1173,7 +1118,7 @@ bool FPolyObj::CheckMobjBlocking (side_t *sd) // We have a two-sided linedef so we should only check one side // so that the thrust from both sides doesn't cancel each other out. // Best use the one facing the player and ignore the back side. - if (ld->sidedef[1] != NULL) + if (ld->sidedef[1] != nullptr) { int side = P_PointOnLineSidePrecise(mobj->Pos(), ld); if (ld->sidedef[side] != sd) @@ -1215,8 +1160,8 @@ void FPolyObj::LinkPolyobj () { polyblock_t **link; polyblock_t *tempLink; - int bmapwidth = level.blockmap.bmapwidth; - int bmapheight = level.blockmap.bmapheight; + int bmapwidth = Level->blockmap.bmapwidth; + int bmapheight = Level->blockmap.bmapheight; // calculate the polyobj bbox Bounds.ClearBox(); @@ -1229,10 +1174,10 @@ void FPolyObj::LinkPolyobj () vt = Sidedefs[i]->linedef->v2; Bounds.AddToBox(vt->fPos()); } - bbox[BOXRIGHT] = level.blockmap.GetBlockX(Bounds.Right()); - bbox[BOXLEFT] = level.blockmap.GetBlockX(Bounds.Left()); - bbox[BOXTOP] = level.blockmap.GetBlockY(Bounds.Top()); - bbox[BOXBOTTOM] = level.blockmap.GetBlockY(Bounds.Bottom()); + bbox[BOXRIGHT] = Level->blockmap.GetBlockX(Bounds.Right()); + bbox[BOXLEFT] = Level->blockmap.GetBlockX(Bounds.Left()); + bbox[BOXTOP] = Level->blockmap.GetBlockY(Bounds.Top()); + bbox[BOXBOTTOM] = Level->blockmap.GetBlockY(Bounds.Bottom()); // add the polyobj to each blockmap section for(int j = bbox[BOXBOTTOM]*bmapwidth; j <= bbox[BOXTOP]*bmapwidth; j += bmapwidth) @@ -1241,24 +1186,24 @@ void FPolyObj::LinkPolyobj () { if(i >= 0 && i < bmapwidth && j >= 0 && j < bmapheight*bmapwidth) { - link = &level.PolyBlockMap[j+i]; + link = &Level->PolyBlockMap[j+i]; if(!(*link)) - { // Create a new link at the current block cell + { // CreateThinker a new link at the current block cell *link = new polyblock_t; - (*link)->next = NULL; - (*link)->prev = NULL; + (*link)->next = nullptr; + (*link)->prev = nullptr; (*link)->polyobj = this; continue; } else { tempLink = *link; - while(tempLink->next != NULL && tempLink->polyobj != NULL) + while(tempLink->next != nullptr && tempLink->polyobj != nullptr) { tempLink = tempLink->next; } } - if(tempLink->polyobj == NULL) + if(tempLink->polyobj == nullptr) { tempLink->polyobj = this; continue; @@ -1266,7 +1211,7 @@ void FPolyObj::LinkPolyobj () else { tempLink->next = new polyblock_t; - tempLink->next->next = NULL; + tempLink->next->next = nullptr; tempLink->next->prev = tempLink; tempLink->next->polyobj = this; } @@ -1287,10 +1232,10 @@ void FPolyObj::LinkPolyobj () void FPolyObj::RecalcActorFloorCeil(FBoundingBox bounds) const { - FBlockThingsIterator it(bounds); + FBlockThingsIterator it(Level, bounds); AActor *actor; - while ((actor = it.Next()) != NULL) + while ((actor = it.Next()) != nullptr) { // skip everything outside the bounding box. if (actor->X() + actor->radius <= bounds.Left() || @@ -1322,7 +1267,7 @@ void FPolyObj::ClosestPoint(const DVector2 &fpos, DVector2 &out, side_t **side) double x = fpos.X, y = fpos.Y; double bestdist = HUGE_VAL; double bestx = 0, besty = 0; - side_t *bestline = NULL; + side_t *bestline = nullptr; for (i = 0; i < Sidedefs.Size(); ++i) { @@ -1370,7 +1315,7 @@ void FPolyObj::ClosestPoint(const DVector2 &fpos, DVector2 &out, side_t **side) } } out = { bestx, besty }; - if (side != NULL) + if (side != nullptr) { *side = bestline; } @@ -1382,12 +1327,12 @@ void FPolyObj::ClosestPoint(const DVector2 &fpos, DVector2 &out, side_t **side) // //========================================================================== -bool PO_Busy (int polyobj) +bool PO_Busy (FLevelLocals *Level, int polyobj) { FPolyObj *poly; - poly = PO_GetPolyobj (polyobj); - return (poly != NULL && poly->specialdata != NULL); + poly = Level->GetPolyobj(polyobj); + return (poly != nullptr && poly->specialdata != nullptr); } @@ -1400,19 +1345,19 @@ bool PO_Busy (int polyobj) void FPolyObj::ClearSubsectorLinks() { - while (subsectorlinks != NULL) + while (subsectorlinks != nullptr) { assert(subsectorlinks->state == 1337); FPolyNode *next = subsectorlinks->snext; - if (subsectorlinks->pnext != NULL) + if (subsectorlinks->pnext != nullptr) { assert(subsectorlinks->pnext->state == 1337); subsectorlinks->pnext->pprev = subsectorlinks->pprev; } - if (subsectorlinks->pprev != NULL) + if (subsectorlinks->pprev != nullptr) { assert(subsectorlinks->pprev->state == 1337); subsectorlinks->pprev->pnext = subsectorlinks->pnext; @@ -1422,7 +1367,7 @@ void FPolyObj::ClearSubsectorLinks() subsectorlinks->subsector->polys = subsectorlinks->pnext; } - if (subsectorlinks->subsector->BSP != NULL) + if (subsectorlinks->subsector->BSP != nullptr) { subsectorlinks->subsector->BSP->bDirty = true; } @@ -1431,12 +1376,12 @@ void FPolyObj::ClearSubsectorLinks() delete subsectorlinks; subsectorlinks = next; } - subsectorlinks = NULL; + subsectorlinks = nullptr; } -void FPolyObj::ClearAllSubsectorLinks() +void FLevelLocals::ClearAllSubsectorLinks() { - for(auto &poly : level.Polyobjects) + for(auto &poly : Polyobjects) { poly.ClearSubsectorLinks(); } @@ -1676,12 +1621,12 @@ static void SplitPoly(FPolyNode *pnode, void *node, float bbox[4]) // Link node to subsector pnode->pnext = sub->polys; - if (pnode->pnext != NULL) + if (pnode->pnext != nullptr) { assert(pnode->pnext->state == 1337); pnode->pnext->pprev = pnode; } - pnode->pprev = NULL; + pnode->pprev = nullptr; sub->polys = pnode; // link node to polyobject @@ -1729,9 +1674,9 @@ void FPolyObj::CreateSubsectorLinks() seg->v2 = side->V2(); seg->wall = side; } - if (!(i_compatflags & COMPATF_POLYOBJ)) + if (!(Level->i_compatflags & COMPATF_POLYOBJ)) { - SplitPoly(node, level.HeadNode(), dummybbox); + SplitPoly(node, Level->HeadNode(), dummybbox); } else { @@ -1739,12 +1684,12 @@ void FPolyObj::CreateSubsectorLinks() // Link node to subsector node->pnext = sub->polys; - if (node->pnext != NULL) + if (node->pnext != nullptr) { assert(node->pnext->state == 1337); node->pnext->pprev = node; } - node->pprev = NULL; + node->pprev = nullptr; sub->polys = node; // link node to polyobject @@ -1760,9 +1705,9 @@ void FPolyObj::CreateSubsectorLinks() // //========================================================================== -void PO_LinkToSubsectors() +void PO_LinkToSubsectors(FLevelLocals *Level) { - for(auto &poly : level.Polyobjects) + for(auto &poly : Level->Polyobjects) { if (poly.subsectorlinks == nullptr) { @@ -1781,7 +1726,7 @@ static FPolyNode *NewPolyNode() { FPolyNode *node; - if (FreePolyNodes != NULL) + if (FreePolyNodes != nullptr) { node = FreePolyNodes; FreePolyNodes = node->pnext; @@ -1791,11 +1736,11 @@ static FPolyNode *NewPolyNode() node = new FPolyNode; } node->state = 1337; - node->poly = NULL; - node->pnext = NULL; - node->pprev = NULL; - node->subsector = NULL; - node->snext = NULL; + node->poly = nullptr; + node->pnext = nullptr; + node->pprev = nullptr; + node->subsector = nullptr; + node->snext = nullptr; return node; } @@ -1822,7 +1767,7 @@ void ReleaseAllPolyNodes() { FPolyNode *node, *next; - for (node = FreePolyNodes; node != NULL; node = next) + for (node = FreePolyNodes; node != nullptr; node = next) { next = node->pnext; delete node; @@ -1841,7 +1786,7 @@ void ReleaseAllPolyNodes() FPolyMirrorIterator::FPolyMirrorIterator(FPolyObj *poly) { CurPoly = poly; - if (poly != NULL) + if (poly != nullptr) { UsedPolys[0] = poly->tag; NumUsedPolys = 1; @@ -1856,7 +1801,7 @@ FPolyMirrorIterator::FPolyMirrorIterator(FPolyObj *poly) // // FPolyMirrorIterator :: NextMirror // -// Returns the polyobject that mirrors the current one, or NULL if there +// Returns the polyobject that mirrors the current one, or nullptr if there // is no mirroring polyobject, or there is a mirroring polyobject but it was // already returned. // @@ -1866,15 +1811,15 @@ FPolyObj *FPolyMirrorIterator::NextMirror() { FPolyObj *poly = CurPoly, *nextpoly; - if (poly == NULL) + if (poly == nullptr) { - return NULL; + return nullptr; } // Do the work to decide which polyobject to return the next time this // function is called. int mirror = poly->GetMirror(), i; - nextpoly = NULL; + nextpoly = nullptr; // Is there a mirror and we have room to remember it? if (mirror != 0 && NumUsedPolys != countof(UsedPolys)) @@ -1890,8 +1835,8 @@ FPolyObj *FPolyMirrorIterator::NextMirror() if (i == NumUsedPolys) { // No, it has not been returned. UsedPolys[NumUsedPolys++] = mirror; - nextpoly = PO_GetPolyobj(mirror); - if (nextpoly == NULL) + nextpoly = poly->Level->GetPolyobj(mirror); + if (nextpoly == nullptr) { Printf("Invalid mirror polyobj num %d for polyobj num %d\n", mirror, UsedPolys[i - 1]); } diff --git a/src/po_man.h b/src/g_shared/po_man.h similarity index 79% rename from src/po_man.h rename to src/g_shared/po_man.h index 7932032723..cc8f5fbf95 100644 --- a/src/po_man.h +++ b/src/g_shared/po_man.h @@ -6,12 +6,14 @@ #include "m_bbox.h" #include "dthinker.h" +struct FPolyObj; + class DPolyAction : public DThinker { DECLARE_CLASS(DPolyAction, DThinker) HAS_OBJECT_POINTERS public: - DPolyAction(int polyNum); + void Construct(FPolyObj *polyNum); void Serialize(FSerializer &arc); void OnDestroy() override; void Stop(); @@ -19,8 +21,7 @@ public: void StopInterpolation(); protected: - DPolyAction(); - int m_PolyObj; + FPolyObj *m_PolyObj; double m_Speed; double m_Dist; TObjPtr m_Interpolation; @@ -66,6 +67,7 @@ struct FPolyNode // ===== Polyobj data ===== struct FPolyObj { + FLevelLocals *Level; TArray Sidedefs; TArray Linedefs; TArray Vertices; @@ -125,7 +127,7 @@ struct polyblock_t }; -void PO_LinkToSubsectors(); +void PO_LinkToSubsectors(FLevelLocals *Level); // ===== PO_MAN ===== @@ -137,14 +139,13 @@ typedef enum PODOOR_SWING, } podoortype_t; -bool EV_RotatePoly (line_t *line, int polyNum, int speed, int byteAngle, int direction, bool overRide); -bool EV_MovePoly (line_t *line, int polyNum, double speed, DAngle angle, double dist, bool overRide); -bool EV_MovePolyTo (line_t *line, int polyNum, double speed, const DVector2 &pos, bool overRide); -bool EV_OpenPolyDoor (line_t *line, int polyNum, double speed, DAngle angle, int delay, double distance, podoortype_t type); -bool EV_StopPoly (int polyNum); +bool EV_RotatePoly (FLevelLocals *Level, line_t *line, int polyNum, int speed, int byteAngle, int direction, bool overRide); +bool EV_MovePoly (FLevelLocals *Level, line_t *line, int polyNum, double speed, DAngle angle, double dist, bool overRide); +bool EV_MovePolyTo (FLevelLocals *Level, line_t *line, int polyNum, double speed, const DVector2 &pos, bool overRide); +bool EV_OpenPolyDoor (FLevelLocals *Level, line_t *line, int polyNum, double speed, DAngle angle, int delay, double distance, podoortype_t type); +bool EV_StopPoly (FLevelLocals *Level, int polyNum); -bool PO_Busy (int polyobj); -FPolyObj *PO_GetPolyobj(int polyNum); +bool PO_Busy (FLevelLocals *Level, int polyobj); -#endif \ No newline at end of file +#endif diff --git a/src/portal.cpp b/src/g_shared/portal.cpp similarity index 69% rename from src/portal.cpp rename to src/g_shared/portal.cpp index b8cf9a0e59..5a9c8b3a60 100644 --- a/src/portal.cpp +++ b/src/g_shared/portal.cpp @@ -64,72 +64,40 @@ DEFINE_FIELD(FSectorPortal, mDisplacement); DEFINE_FIELD(FSectorPortal, mPlaneZ); DEFINE_FIELD(FSectorPortal, mSkybox); -//============================================================================ -// -// This is used to mark processed portals for some collection functions. -// -//============================================================================ - -struct FPortalBits -{ - TArray data; - - void setSize(int num) - { - data.Resize((num + 31) / 32); - clear(); - } - - void clear() - { - memset(&data[0], 0, data.Size()*sizeof(uint32_t)); - } - - void setBit(int group) - { - data[group >> 5] |= (1 << (group & 31)); - } - - int getBit(int group) - { - return data[group >> 5] & (1 << (group & 31)); - } -}; - //============================================================================ // // BuildBlockmap // //============================================================================ -static void BuildBlockmap() +void FLevelLocals::BuildPortalBlockmap() { - auto bmapwidth = level.blockmap.bmapwidth; - auto bmapheight = level.blockmap.bmapheight; + auto bmapwidth = blockmap.bmapwidth; + auto bmapheight = blockmap.bmapheight; - level.PortalBlockmap.Clear(); - level.PortalBlockmap.Create(bmapwidth, bmapheight); + PortalBlockmap.Clear(); + PortalBlockmap.Create(bmapwidth, bmapheight); for (int y = 0; y < bmapheight; y++) { for (int x = 0; x < bmapwidth; x++) { - int *list = level.blockmap.GetLines(x, y); - FPortalBlock &block = level.PortalBlockmap(x, y); + int *list = blockmap.GetLines(x, y); + FPortalBlock &block = PortalBlockmap(x, y); while (*list != -1) { - line_t *ld = &level.lines[*list++]; + line_t *ld = &lines[*list++]; FLinePortal *port = ld->getPortal(); if (port && port->mType != PORTT_VISUAL) { - level.PortalBlockmap.containsLines = true; + PortalBlockmap.containsLines = true; block.portallines.Push(ld); block.neighborContainsLines = true; if (ld->getPortal()->mType == PORTT_LINKED) block.containsLinkedPortals = true; - if (x > 0) level.PortalBlockmap(x - 1, y).neighborContainsLines = true; - if (y > 0) level.PortalBlockmap(x, y - 1).neighborContainsLines = true; - if (x < level.PortalBlockmap.dx - 1) level.PortalBlockmap(x + 1, y).neighborContainsLines = true; - if (y < level.PortalBlockmap.dy - 1) level.PortalBlockmap(x, y + 1).neighborContainsLines = true; + if (x > 0) PortalBlockmap(x - 1, y).neighborContainsLines = true; + if (y > 0) PortalBlockmap(x, y - 1).neighborContainsLines = true; + if (x < PortalBlockmap.dx - 1) PortalBlockmap(x + 1, y).neighborContainsLines = true; + if (y < PortalBlockmap.dy - 1) PortalBlockmap(x, y + 1).neighborContainsLines = true; } else { @@ -140,7 +108,7 @@ static void BuildBlockmap() yes |= ld->backsector->PortalIsLinked(sector_t::ceiling) || ld->backsector->PortalIsLinked(sector_t::floor); } block.containsLinkedPortals |= yes; - level.PortalBlockmap.hasLinkedSectorPortals |= yes; + PortalBlockmap.hasLinkedSectorPortals |= yes; } } @@ -148,6 +116,23 @@ static void BuildBlockmap() } } +//============================================================================ +// +// A traverser that uses the portal blockmap +// +//============================================================================ + +class FLinePortalTraverse : public FPathTraverse +{ + void AddLineIntercepts(int bx, int by); + +public: + FLinePortalTraverse(FLevelLocals *l) : FPathTraverse(l) + { + } +}; + + //=========================================================================== // // FLinePortalTraverse :: AddLineIntercepts. @@ -158,9 +143,9 @@ static void BuildBlockmap() void FLinePortalTraverse::AddLineIntercepts(int bx, int by) { - if (by < 0 || by >= level.PortalBlockmap.dy || bx < 0 || bx >= level.PortalBlockmap.dx) return; + if (by < 0 || by >= Level->PortalBlockmap.dy || bx < 0 || bx >= Level->PortalBlockmap.dx) return; - FPortalBlock &block = level.PortalBlockmap(bx, by); + FPortalBlock &block = Level->PortalBlockmap(bx, by); for (unsigned i = 0; i= 0) { - if (&level.lines[lineno] != src) + if (&lines[lineno] != src) { - return &level.lines[lineno]; + return &lines[lineno]; } } } @@ -228,7 +213,7 @@ static line_t *FindDestination(line_t *src, int tag) // //============================================================================ -static void SetRotation(FLinePortal *port) +static void SetPortalRotation(FLinePortal *port) { if (port != nullptr && port->mDestination != nullptr) { @@ -259,95 +244,13 @@ static void SetRotation(FLinePortal *port) } } -//============================================================================ -// -// Spawns a single line portal -// -//============================================================================ - -void P_SpawnLinePortal(line_t* line) -{ - // portal destination is special argument #0 - line_t* dst = nullptr; - - if (line->args[2] >= PORTT_VISUAL && line->args[2] <= PORTT_LINKED) - { - dst = FindDestination(line, line->args[0]); - - line->portalindex = level.linePortals.Reserve(1); - FLinePortal *port = &level.linePortals.Last(); - - memset(port, 0, sizeof(FLinePortal)); - port->mOrigin = line; - port->mDestination = dst; - port->mType = uint8_t(line->args[2]); // range check is done above. - - if (port->mType == PORTT_LINKED) - { - // Linked portals have no z-offset ever. - port->mAlign = PORG_ABSOLUTE; - } - else - { - port->mAlign = uint8_t(line->args[3] >= PORG_ABSOLUTE && line->args[3] <= PORG_CEILING ? line->args[3] : PORG_ABSOLUTE); - if (port->mType == PORTT_INTERACTIVE && port->mAlign != PORG_ABSOLUTE) - { - // Due to the way z is often handled, these pose a major issue for parts of the code that needs to transparently handle interactive portals. - Printf(TEXTCOLOR_RED "Warning: z-offsetting not allowed for interactive portals. Changing line %d to teleport-portal!\n", line->Index()); - port->mType = PORTT_TELEPORT; - } - } - port->mDefFlags = port->mType == PORTT_VISUAL ? PORTF_VISIBLE : - port->mType == PORTT_TELEPORT ? PORTF_TYPETELEPORT : - PORTF_TYPEINTERACTIVE; - } - else if (line->args[2] == PORTT_LINKEDEE && line->args[0] == 0) - { - // EE-style portals require that the first line ID is identical and the first arg of the two linked linedefs are 0 and 1 respectively. - - int mytag = tagManager.GetFirstLineID(line); - - for (auto &ln : level.lines) - { - if (tagManager.GetFirstLineID(&ln) == mytag && ln.args[0] == 1 && ln.special == Line_SetPortal) - { - line->portalindex = level.linePortals.Reserve(1); - FLinePortal *port = &level.linePortals.Last(); - - memset(port, 0, sizeof(FLinePortal)); - port->mOrigin = line; - port->mDestination = &ln; - port->mType = PORTT_LINKED; - port->mAlign = PORG_ABSOLUTE; - port->mDefFlags = PORTF_TYPEINTERACTIVE; - - // we need to create the backlink here, too. - ln.portalindex = level.linePortals.Reserve(1); - port = &level.linePortals.Last(); - - memset(port, 0, sizeof(FLinePortal)); - port->mOrigin = &ln; - port->mDestination = line; - port->mType = PORTT_LINKED; - port->mAlign = PORG_ABSOLUTE; - port->mDefFlags = PORTF_TYPEINTERACTIVE; - } - } - } - else - { - // undefined type - return; - } -} - //============================================================================ // // Update a line portal's state after all have been spawned // //============================================================================ -void P_UpdatePortal(FLinePortal *port) +void FLevelLocals::UpdatePortal(FLinePortal *port) { if (port->mType != PORTT_VISUAL && port->mOrigin->backsector == nullptr && !(port->mOrigin->sidedef[0]->Flags & WALLF_POLYOBJ)) { @@ -378,7 +281,7 @@ void P_UpdatePortal(FLinePortal *port) port->mFlags = port->mDefFlags; if (port->mType == PORTT_LINKED) { - if (level.linePortals[port->mDestination->portalindex].mType != PORTT_LINKED) + if (linePortals[port->mDestination->portalindex].mType != PORTT_LINKED) { port->mType = PORTT_INTERACTIVE; // linked portals must be two-way. } @@ -390,7 +293,7 @@ void P_UpdatePortal(FLinePortal *port) } // Cache the angle between the two linedefs, for rotating. - SetRotation(port); + SetPortalRotation(port); } //============================================================================ @@ -400,15 +303,15 @@ void P_UpdatePortal(FLinePortal *port) // //============================================================================ -void P_CollectLinkedPortals() +void FLevelLocals::CollectLinkedPortals() { - level.linkedPortals.Clear(); - for (unsigned i = 0; i < level.linePortals.Size(); i++) + linkedPortals.Clear(); + for (unsigned i = 0; i < linePortals.Size(); i++) { - FLinePortal * port = &level.linePortals[i]; + FLinePortal * port = &linePortals[i]; if (port->mType == PORTT_LINKED) { - level.linkedPortals.Push(port); + linkedPortals.Push(port); } } } @@ -419,16 +322,16 @@ void P_CollectLinkedPortals() // //============================================================================ -void P_FinalizePortals() +void FLevelLocals::FinalizePortals() { - for (unsigned i = 0; i < level.linePortals.Size(); i++) + for (unsigned i = 0; i < linePortals.Size(); i++) { - FLinePortal * port = &level.linePortals[i]; - P_UpdatePortal(port); + FLinePortal * port = &linePortals[i]; + UpdatePortal(port); } - P_CollectLinkedPortals(); - BuildBlockmap(); - P_CreateLinkedPortals(); + CollectLinkedPortals(); + BuildPortalBlockmap(); + CreateLinkedPortals(); } //============================================================================ @@ -437,20 +340,20 @@ void P_FinalizePortals() // //============================================================================ -static bool ChangePortalLine(line_t *line, int destid) +bool FLevelLocals::ChangePortalLine(line_t *line, int destid) { - if (line->portalindex >= level.linePortals.Size()) return false; - FLinePortal *port = &level.linePortals[line->portalindex]; + if (line->portalindex >= linePortals.Size()) return false; + FLinePortal *port = &linePortals[line->portalindex]; if (port->mType == PORTT_LINKED) return false; // linked portals cannot be changed. if (destid == 0) port->mDestination = nullptr; - port->mDestination = FindDestination(line, destid); + port->mDestination = FindPortalDestination(line, destid); if (port->mDestination == nullptr) { port->mFlags = 0; } else if (port->mType == PORTT_INTERACTIVE) { - FLinePortal *portd = port->mDestination->portalindex < level.linePortals.Size()? &level.linePortals[port->mDestination->portalindex] : nullptr; + FLinePortal *portd = port->mDestination->portalindex < linePortals.Size()? &linePortals[port->mDestination->portalindex] : nullptr; if (portd != nullptr && portd->mType == PORTT_INTERACTIVE && portd->mDestination == line) { // this is a 2-way interactive portal @@ -461,13 +364,13 @@ static bool ChangePortalLine(line_t *line, int destid) { port->mFlags = port->mDefFlags; } - SetRotation(portd); + SetPortalRotation(portd); } else { port->mFlags = port->mDefFlags; } - SetRotation(port); + SetPortalRotation(port); return true; } @@ -478,16 +381,16 @@ static bool ChangePortalLine(line_t *line, int destid) // //============================================================================ -bool P_ChangePortal(line_t *ln, int thisid, int destid) +bool FLevelLocals::ChangePortal(line_t *ln, int thisid, int destid) { int lineno; if (thisid == 0) return ChangePortalLine(ln, destid); - FLineIdIterator it(thisid); + auto it = GetLineIdIterator(thisid); bool res = false; while ((lineno = it.Next()) >= 0) { - res |= ChangePortalLine(&level.lines[lineno], destid); + res |= ChangePortalLine(&lines[lineno], destid); } return res; } @@ -553,7 +456,7 @@ void P_TranslatePortalXY(line_t* src, double& x, double& y) if (!src) return; FLinePortal *port = src->getPortal(); if (!port) return; - if (port->mFlags & PORTF_POLYOBJ) SetRotation(port); // update the angle for polyportals. + if (port->mFlags & PORTF_POLYOBJ) SetPortalRotation(port); // update the angle for polyportals. // offsets from line double nposx = x - src->v1->fX(); @@ -581,7 +484,7 @@ void P_TranslatePortalVXVY(line_t* src, double &velx, double &vely) if (!src) return; FLinePortal *port = src->getPortal(); if (!port) return; - if (port->mFlags & PORTF_POLYOBJ) SetRotation(port); // update the angle for polyportals. + if (port->mFlags & PORTF_POLYOBJ) SetPortalRotation(port); // update the angle for polyportals. double orig_velx = velx; double orig_vely = vely; @@ -600,7 +503,7 @@ void P_TranslatePortalAngle(line_t* src, DAngle& angle) if (!src) return; FLinePortal *port = src->getPortal(); if (!port) return; - if (port->mFlags & PORTF_POLYOBJ) SetRotation(port); // update the angle for polyportals. + if (port->mFlags & PORTF_POLYOBJ) SetPortalRotation(port); // update the angle for polyportals. angle = (angle + port->mAngleDiff).Normalized360(); } @@ -642,27 +545,27 @@ void P_TranslatePortalZ(line_t* src, double& z) // //============================================================================ -unsigned P_GetSkyboxPortal(AActor *actor) +unsigned FLevelLocals::GetSkyboxPortal(AActor *actor) { if (actor == nullptr) return 1; // this means a regular sky. - for (unsigned i = 0;iGetClass()->IsDescendantOf("SkyCamCompat") ? 0 : PORTSF_SKYFLATONLY; - level.sectorPortals[i].mSkybox = actor; - level.sectorPortals[i].mDestination = actor->Sector; + unsigned i = sectorPortals.Reserve(1); + memset(§orPortals[i], 0, sizeof(sectorPortals[i])); + sectorPortals[i].mType = PORTS_SKYVIEWPOINT; + sectorPortals[i].mFlags = actor->GetClass()->IsDescendantOf("SkyCamCompat") ? 0 : PORTSF_SKYFLATONLY; + sectorPortals[i].mSkybox = actor; + sectorPortals[i].mDestination = actor->Sector; return i; } -DEFINE_ACTION_FUNCTION(FSectorPortal, GetSkyboxPortal) +DEFINE_ACTION_FUNCTION(FLevelLocals, GetSkyboxPortal) { - PARAM_PROLOGUE; + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_OBJECT(actor, AActor); - ACTION_RETURN_INT(P_GetSkyboxPortal(actor)); + ACTION_RETURN_INT(self->GetSkyboxPortal(actor)); } //============================================================================ // @@ -672,16 +575,16 @@ DEFINE_ACTION_FUNCTION(FSectorPortal, GetSkyboxPortal) // //============================================================================ -unsigned P_GetPortal(int type, int plane, sector_t *from, sector_t *to, const DVector2 &displacement) +unsigned FLevelLocals::GetPortal(int type, int plane, sector_t *from, sector_t *to, const DVector2 &displacement) { - unsigned i = level.sectorPortals.Reserve(1); - memset(&level.sectorPortals[i], 0, sizeof(level.sectorPortals[i])); - level.sectorPortals[i].mType = type; - level.sectorPortals[i].mPlane = plane; - level.sectorPortals[i].mOrigin = from; - level.sectorPortals[i].mDestination = to; - level.sectorPortals[i].mDisplacement = displacement; - level.sectorPortals[i].mPlaneZ = type == PORTS_LINKEDPORTAL? from->GetPlaneTexZ(plane) : FLT_MAX; + unsigned i = sectorPortals.Reserve(1); + memset(§orPortals[i], 0, sizeof(sectorPortals[i])); + sectorPortals[i].mType = type; + sectorPortals[i].mPlane = plane; + sectorPortals[i].mOrigin = from; + sectorPortals[i].mDestination = to; + sectorPortals[i].mDisplacement = displacement; + sectorPortals[i].mPlaneZ = type == PORTS_LINKEDPORTAL? from->GetPlaneTexZ(plane) : FLT_MAX; return i; } @@ -693,47 +596,47 @@ unsigned P_GetPortal(int type, int plane, sector_t *from, sector_t *to, const DV // //============================================================================ -unsigned P_GetStackPortal(AActor *point, int plane) +unsigned FLevelLocals::GetStackPortal(AActor *point, int plane) { - unsigned i = level.sectorPortals.Reserve(1); - memset(&level.sectorPortals[i], 0, sizeof(level.sectorPortals[i])); - level.sectorPortals[i].mType = PORTS_STACKEDSECTORTHING; - level.sectorPortals[i].mPlane = plane; - level.sectorPortals[i].mOrigin = point->target->Sector; - level.sectorPortals[i].mDestination = point->Sector; - level.sectorPortals[i].mPlaneZ = FLT_MAX; - level.sectorPortals[i].mSkybox = point; + unsigned i = sectorPortals.Reserve(1); + memset(§orPortals[i], 0, sizeof(sectorPortals[i])); + sectorPortals[i].mType = PORTS_STACKEDSECTORTHING; + sectorPortals[i].mPlane = plane; + sectorPortals[i].mOrigin = point->target->Sector; + sectorPortals[i].mDestination = point->Sector; + sectorPortals[i].mPlaneZ = FLT_MAX; + sectorPortals[i].mSkybox = point; return i; } //============================================================================ // -// P_GetOffsetPosition +// GetPortalOffsetPosition // // Offsets a given coordinate if the trace from the origin crosses an // interactive line-to-line portal. // //============================================================================ -DVector2 P_GetOffsetPosition(double x, double y, double dx, double dy) +DVector2 FLevelLocals::GetPortalOffsetPosition(double x, double y, double dx, double dy) { DVector2 dest(x + dx, y + dy); - if (level.PortalBlockmap.containsLines) + if (PortalBlockmap.containsLines) { double actx = x, acty = y; // Try some easily discoverable early-out first. If we know that the trace cannot possibly find a portal, this saves us from calling the traverser completely for vast parts of the map. if (dx < 128 && dy < 128) { - int blockx = level.blockmap.GetBlockX(actx); - int blocky = level.blockmap.GetBlockY(acty); - if (blockx < 0 || blocky < 0 || blockx >= level.PortalBlockmap.dx || blocky >= level.PortalBlockmap.dy || !level.PortalBlockmap(blockx, blocky).neighborContainsLines) return dest; + int blockx = blockmap.GetBlockX(actx); + int blocky = blockmap.GetBlockY(acty); + if (blockx < 0 || blocky < 0 || blockx >= PortalBlockmap.dx || blocky >= PortalBlockmap.dy || !PortalBlockmap(blockx, blocky).neighborContainsLines) return dest; } bool repeat; do { - FLinePortalTraverse it; + FLinePortalTraverse it(this); it.init(actx, acty, dx, dy, PT_ADDLINES|PT_DELTA); intercept_t *in; @@ -777,11 +680,6 @@ DVector2 P_GetOffsetPosition(double x, double y, double dx, double dy) return dest; } -static void GetOffsetPosition(double x, double y, double dx, double dy, DVector2 *result) -{ - *result = P_GetOffsetPosition(x, y, dx, dy); -} - //============================================================================ // // CollectSectors @@ -829,7 +727,7 @@ static bool CollectSectors(int groupid, sector_t *origin) // //============================================================================ -static void AddDisplacementForPortal(FSectorPortal *portal) +void FLevelLocals::AddDisplacementForPortal(FSectorPortal *portal) { int thisgroup = portal->mOrigin->PortalGroup; int othergroup = portal->mDestination->PortalGroup; @@ -839,14 +737,14 @@ static void AddDisplacementForPortal(FSectorPortal *portal) portal->mType = PORTS_PORTAL; return; } - if (thisgroup <= 0 || thisgroup >= level.Displacements.size || othergroup <= 0 || othergroup >= level.Displacements.size) + if (thisgroup <= 0 || thisgroup >= Displacements.size || othergroup <= 0 || othergroup >= Displacements.size) { Printf("Portal between sectors %d and %d has invalid group and will be disabled\n", portal->mOrigin->sectornum, portal->mDestination->sectornum); portal->mType = PORTS_PORTAL; return; } - FDisplacement & disp = level.Displacements(thisgroup, othergroup); + FDisplacement & disp = Displacements(thisgroup, othergroup); if (!disp.isSet) { disp.pos = portal->mDisplacement; @@ -864,24 +762,24 @@ static void AddDisplacementForPortal(FSectorPortal *portal) } -static void AddDisplacementForPortal(FLinePortal *portal) +void FLevelLocals::AddDisplacementForPortal(FLinePortal *portal) { int thisgroup = portal->mOrigin->frontsector->PortalGroup; int othergroup = portal->mDestination->frontsector->PortalGroup; if (thisgroup == othergroup) { Printf("Portal between lines %d and %d has both sides in same group\n", portal->mOrigin->Index(), portal->mDestination->Index()); - portal->mType = level.linePortals[portal->mDestination->portalindex].mType = PORTT_TELEPORT; + portal->mType = linePortals[portal->mDestination->portalindex].mType = PORTT_TELEPORT; return; } - if (thisgroup <= 0 || thisgroup >= level.Displacements.size || othergroup <= 0 || othergroup >= level.Displacements.size) + if (thisgroup <= 0 || thisgroup >= Displacements.size || othergroup <= 0 || othergroup >= Displacements.size) { Printf("Portal between lines %d and %d has invalid group\n", portal->mOrigin->Index(), portal->mDestination->Index()); - portal->mType = level.linePortals[portal->mDestination->portalindex].mType = PORTT_TELEPORT; + portal->mType = linePortals[portal->mDestination->portalindex].mType = PORTT_TELEPORT; return; } - FDisplacement & disp = level.Displacements(thisgroup, othergroup); + FDisplacement & disp = Displacements(thisgroup, othergroup); if (!disp.isSet) { disp.pos = portal->mDisplacement; @@ -892,7 +790,7 @@ static void AddDisplacementForPortal(FLinePortal *portal) if (disp.pos != portal->mDisplacement) { Printf("Portal between lines %d and %d has displacement mismatch\n", portal->mOrigin->Index(), portal->mDestination->Index()); - portal->mType = level.linePortals[portal->mDestination->portalindex].mType = PORTT_TELEPORT; + portal->mType = linePortals[portal->mDestination->portalindex].mType = PORTT_TELEPORT; return; } } @@ -906,7 +804,7 @@ static void AddDisplacementForPortal(FLinePortal *portal) // //============================================================================ -static bool ConnectGroups() +bool FLevelLocals::ConnectPortalGroups() { // Now uint8_t indirect = 1; @@ -915,19 +813,19 @@ static bool ConnectGroups() do { changed = false; - for (int x = 1; x < level.Displacements.size; x++) + for (int x = 1; x < Displacements.size; x++) { - for (int y = 1; y < level.Displacements.size; y++) + for (int y = 1; y < Displacements.size; y++) { - FDisplacement &dispxy = level.Displacements(x, y); + FDisplacement &dispxy = Displacements(x, y); if (dispxy.isSet) { - for (int z = 1; z < level.Displacements.size; z++) + for (int z = 1; z < Displacements.size; z++) { - FDisplacement &dispyz = level.Displacements(y, z); + FDisplacement &dispyz = Displacements(y, z); if (dispyz.isSet) { - FDisplacement &dispxz = level.Displacements(x, z); + FDisplacement &dispxz = Displacements(x, z); if (dispxz.isSet) { if (dispxy.pos.X + dispyz.pos.X != dispxz.pos.X || dispxy.pos.Y + dispyz.pos.Y != dispxz.pos.Y) @@ -966,13 +864,13 @@ static bool ConnectGroups() // //============================================================================ -void P_CreateLinkedPortals() +void FLevelLocals::CreateLinkedPortals() { TArray orgs; int id = 1; bool bogus = false; - for(auto &s : level.sectorPortals) + for(auto &s : sectorPortals) { if (s.mType == PORTS_LINKEDPORTAL) { @@ -982,7 +880,7 @@ void P_CreateLinkedPortals() id = 1; if (orgs.Size() != 0) { - for (auto &sec : level.sectors) + for (auto &sec : sectors) { for (int j = 0; j < 2; j++) { @@ -1006,27 +904,27 @@ void P_CreateLinkedPortals() if (CollectSectors(id, orgs[i]->mDestination)) id++; } } - for (unsigned i = 0; i < level.linePortals.Size(); i++) + for (unsigned i = 0; i < linePortals.Size(); i++) { - if (level.linePortals[i].mType == PORTT_LINKED) + if (linePortals[i].mType == PORTT_LINKED) { - if (level.linePortals[i].mDestination == nullptr) + if (linePortals[i].mDestination == nullptr) { - Printf("Linked portal on line %d is unconnected and will be disabled\n", level.linePortals[i].mOrigin->Index()); - level.linePortals[i].mOrigin->portalindex = UINT_MAX; - level.linePortals[i].mType = PORTT_VISUAL; + Printf("Linked portal on line %d is unconnected and will be disabled\n", linePortals[i].mOrigin->Index()); + linePortals[i].mOrigin->portalindex = UINT_MAX; + linePortals[i].mType = PORTT_VISUAL; } else { - if (CollectSectors(id, level.linePortals[i].mOrigin->frontsector)) id++; - if (CollectSectors(id, level.linePortals[i].mDestination->frontsector)) id++; + if (CollectSectors(id, linePortals[i].mOrigin->frontsector)) id++; + if (CollectSectors(id, linePortals[i].mDestination->frontsector)) id++; } } } - level.Displacements.Create(id); + Displacements.Create(id); // Check for leftover sectors that connect to a portal - for (auto &sec : level.sectors) + for (auto &sec : sectors) { for (int j = 0; j < 2; j++) { @@ -1041,34 +939,34 @@ void P_CreateLinkedPortals() { AddDisplacementForPortal(orgs[i]); } - for (unsigned i = 0; i < level.linePortals.Size(); i++) + for (unsigned i = 0; i < linePortals.Size(); i++) { - if (level.linePortals[i].mType == PORTT_LINKED) + if (linePortals[i].mType == PORTT_LINKED) { - AddDisplacementForPortal(&level.linePortals[i]); + AddDisplacementForPortal(&linePortals[i]); } } - for (int x = 1; x < level.Displacements.size; x++) + for (int x = 1; x < Displacements.size; x++) { - for (int y = x + 1; y < level.Displacements.size; y++) + for (int y = x + 1; y < Displacements.size; y++) { - FDisplacement &dispxy = level.Displacements(x, y); - FDisplacement &dispyx = level.Displacements(y, x); + FDisplacement &dispxy = Displacements(x, y); + FDisplacement &dispyx = Displacements(y, x); if (dispxy.isSet && dispyx.isSet && (dispxy.pos.X != -dispyx.pos.X || dispxy.pos.Y != -dispyx.pos.Y)) { int sec1 = -1, sec2 = -1; - for (unsigned i = 0; i < level.sectors.Size() && (sec1 == -1 || sec2 == -1); i++) + for (unsigned i = 0; i < sectors.Size() && (sec1 == -1 || sec2 == -1); i++) { - if (sec1 == -1 && level.sectors[i].PortalGroup == x) sec1 = i; - if (sec2 == -1 && level.sectors[i].PortalGroup == y) sec2 = i; + if (sec1 == -1 && sectors[i].PortalGroup == x) sec1 = i; + if (sec2 == -1 && sectors[i].PortalGroup == y) sec2 = i; } Printf("Link offset mismatch between sectors %d and %d\n", sec1, sec2); bogus = true; } // mark everything that connects to a one-sided line - for (auto &line : level.lines) + for (auto &line : lines) { if (line.backsector == nullptr && line.frontsector->PortalGroup == 0) { @@ -1076,7 +974,7 @@ void P_CreateLinkedPortals() } } // and now print a message for everything that still wasn't processed. - for (auto &sec : level.sectors) + for (auto &sec : sectors) { if (sec.PortalGroup == 0) { @@ -1086,19 +984,19 @@ void P_CreateLinkedPortals() } } } - bogus |= ConnectGroups(); + bogus |= ConnectPortalGroups(); if (bogus) { // todo: disable all portals whose offsets do not match the associated groups } // reject would just get in the way when checking sight through portals. - if (level.Displacements.size > 1) + if (Displacements.size > 1) { - level.rejectmatrix.Reset(); + rejectmatrix.Reset(); } // finally we must flag all planes which are obstructed by the sector's own ceiling or floor. - for (auto &sec : level.sectors) + for (auto &sec : sectors) { sec.CheckPortalPlane(sector_t::floor); sec.CheckPortalPlane(sector_t::ceiling); @@ -1134,17 +1032,17 @@ void P_CreateLinkedPortals() if (sec.PortalIsLinked(sector_t::floor)) sec.planes[sector_t::floor].Flags |= PLANEF_LINKED; if (sec.PortalIsLinked(sector_t::ceiling)) sec.planes[sector_t::ceiling].Flags |= PLANEF_LINKED; } - if (level.linkedPortals.Size() > 0) + if (linkedPortals.Size() > 0) { // We need to relink all actors that may touch a linked line portal - TThinkerIterator it; + auto it = GetThinkerIterator(); AActor *actor; while ((actor = it.Next())) { if (!(actor->flags & MF_NOBLOCKMAP)) { FPortalGroupArray check(FPortalGroupArray::PGA_NoSectorPortals); - P_CollectConnectedGroups(actor->Sector->PortalGroup, actor->Pos(), actor->Top(), actor->radius, check); + CollectConnectedGroups(actor->Sector->PortalGroup, actor->Pos(), actor->Top(), actor->radius, check); if (check.Size() > 0) { FLinkContext ctx; @@ -1164,25 +1062,19 @@ void P_CreateLinkedPortals() // //============================================================================ -bool P_CollectConnectedGroups(int startgroup, const DVector3 &position, double upperz, double checkradius, FPortalGroupArray &out) +bool FLevelLocals::CollectConnectedGroups(int startgroup, const DVector3 &position, double upperz, double checkradius, FPortalGroupArray &out) { - // Keep this temporary work stuff static. This function can never be called recursively - // and this would have to be reallocated for each call otherwise. - static FPortalBits processMask; - static TArray foundPortals; - static TArray groupsToCheck; - bool retval = false; out.inited = true; - processMask.setSize(level.Displacements.size); - if (level.Displacements.size == 1) + processMask.setSize(Displacements.size); + if (Displacements.size == 1) { processMask.setBit(startgroup); return false; } - if (level.linkedPortals.Size() != 0) + if (linkedPortals.Size() != 0) { processMask.clear(); foundPortals.Clear(); @@ -1191,17 +1083,17 @@ bool P_CollectConnectedGroups(int startgroup, const DVector3 &position, double u processMask.setBit(thisgroup); //out.Add(thisgroup); - for (unsigned i = 0; i < level.linkedPortals.Size(); i++) + for (unsigned i = 0; i < linkedPortals.Size(); i++) { - line_t *ld = level.linkedPortals[i]->mOrigin; + line_t *ld = linkedPortals[i]->mOrigin; int othergroup = ld->frontsector->PortalGroup; - FDisplacement &disp = level.Displacements(thisgroup, othergroup); + FDisplacement &disp = Displacements(thisgroup, othergroup); if (!disp.isSet) continue; // no connection. FBoundingBox box(position.X + disp.pos.X, position.Y + disp.pos.Y, checkradius); - if (!box.inRange(ld) || box.BoxOnLineSide(level.linkedPortals[i]->mOrigin) != -1) continue; // not touched - foundPortals.Push(level.linkedPortals[i]); + if (!box.inRange(ld) || box.BoxOnLineSide(linkedPortals[i]->mOrigin) != -1) continue; // not touched + foundPortals.Push(linkedPortals[i]); } bool foundone = true; while (foundone) @@ -1223,39 +1115,39 @@ bool P_CollectConnectedGroups(int startgroup, const DVector3 &position, double u } if (out.method != FPortalGroupArray::PGA_NoSectorPortals) { - sector_t *sec = P_PointInSector(position); + sector_t *sec = PointInSector(position); sector_t *wsec = sec; while (!wsec->PortalBlocksMovement(sector_t::ceiling) && upperz > wsec->GetPortalPlaneZ(sector_t::ceiling)) { int othergroup = wsec->GetOppositePortalGroup(sector_t::ceiling); - DVector2 pos = level.Displacements.getOffset(startgroup, othergroup) + position; + DVector2 pos = Displacements.getOffset(startgroup, othergroup) + position; if (processMask.getBit(othergroup)) break; processMask.setBit(othergroup); out.Add(othergroup | FPortalGroupArray::UPPER); - wsec = P_PointInSector(pos); // get upper sector at the exact spot we want to check and repeat + wsec = PointInSector(pos); // get upper sector at the exact spot we want to check and repeat retval = true; } wsec = sec; while (!wsec->PortalBlocksMovement(sector_t::floor) && position.Z < wsec->GetPortalPlaneZ(sector_t::floor)) { int othergroup = wsec->GetOppositePortalGroup(sector_t::floor); - DVector2 pos = level.Displacements.getOffset(startgroup, othergroup) + position; + DVector2 pos = Displacements.getOffset(startgroup, othergroup) + position; if (processMask.getBit(othergroup)) break; processMask.setBit(othergroup); out.Add(othergroup | FPortalGroupArray::LOWER); - wsec = P_PointInSector(pos); // get lower sector at the exact spot we want to check and repeat + wsec = PointInSector(pos); // get lower sector at the exact spot we want to check and repeat retval = true; } - if (out.method == FPortalGroupArray::PGA_Full3d && level.PortalBlockmap.hasLinkedSectorPortals) + if (out.method == FPortalGroupArray::PGA_Full3d && PortalBlockmap.hasLinkedSectorPortals) { groupsToCheck.Clear(); groupsToCheck.Push(startgroup); int thisgroup = startgroup; for (unsigned i = 0; i < groupsToCheck.Size();i++) { - DVector2 disp = level.Displacements.getOffset(startgroup, thisgroup & ~FPortalGroupArray::FLAT); + DVector2 disp = Displacements.getOffset(startgroup, thisgroup & ~FPortalGroupArray::FLAT); FBoundingBox box(position.X + disp.X, position.Y + disp.Y, checkradius); - FBlockLinesIterator it(box); + FBlockLinesIterator it(this, box); line_t *ld; while ((ld = it.Next())) { @@ -1306,27 +1198,3 @@ bool P_CollectConnectedGroups(int startgroup, const DVector3 &position, double u } return retval; } - - -//============================================================================ -// -// print the group link table to the console -// -//============================================================================ - -CCMD(dumplinktable) -{ - for (int x = 1; x < level.Displacements.size; x++) - { - for (int y = 1; y < level.Displacements.size; y++) - { - FDisplacement &disp = level.Displacements(x, y); - Printf("%c%c(%6d, %6d)", TEXTCOLOR_ESCAPE, 'C' + disp.indirect, int(disp.pos.X), int(disp.pos.Y)); - } - Printf("\n"); - } -} - - - - diff --git a/src/portal.h b/src/g_shared/portal.h similarity index 91% rename from src/portal.h rename to src/g_shared/portal.h index 9aefb3a586..b5e2b7a1b6 100644 --- a/src/portal.h +++ b/src/g_shared/portal.h @@ -2,7 +2,6 @@ #define _PORTALS_H_ #include "basictypes.h" -#include "v_video.h" #include "m_bbox.h" struct FPortalGroupArray; @@ -22,7 +21,7 @@ struct subsector_t; // have to be traversed to connect the two // // - any sector not connected to any portal is assigned to group 0 -// Group 0 has no displacement to any other group in the level. +// Group 0 has no displacement to any other group in the level // //============================================================================ @@ -263,15 +262,6 @@ struct FSectorPortalGroup // //============================================================================ -void P_SpawnLinePortal(line_t* line); -void P_FinalizePortals(); -bool P_ChangePortal(line_t *ln, int thisid, int destid); -void P_CreateLinkedPortals(); -bool P_CollectConnectedGroups(int startgroup, const DVector3 &position, double upperz, double checkradius, FPortalGroupArray &out); -void P_CollectLinkedPortals(); -unsigned P_GetSkyboxPortal(AActor *actor); -unsigned P_GetPortal(int type, int plane, sector_t *orgsec, sector_t *destsec, const DVector2 &displacement); -unsigned P_GetStackPortal(AActor *point, int plane); /* code ported from prototype */ @@ -280,7 +270,6 @@ void P_TranslatePortalXY(line_t* src, double& vx, double& vy); void P_TranslatePortalVXVY(line_t* src, double &velx, double &vely); void P_TranslatePortalAngle(line_t* src, DAngle& angle); void P_TranslatePortalZ(line_t* src, double& vz); -DVector2 P_GetOffsetPosition(double x, double y, double dx, double dy); struct FLevelLocals; void InitPortalGroups(FLevelLocals *Level); diff --git a/src/statnums.h b/src/g_shared/statnums.h similarity index 100% rename from src/statnums.h rename to src/g_shared/statnums.h diff --git a/src/g_shared/hudmessages.cpp b/src/g_statusbar/hudmessages.cpp similarity index 100% rename from src/g_shared/hudmessages.cpp rename to src/g_statusbar/hudmessages.cpp diff --git a/src/g_statusbar/sbar.h b/src/g_statusbar/sbar.h index d07292b6b6..a91452e3f2 100644 --- a/src/g_statusbar/sbar.h +++ b/src/g_statusbar/sbar.h @@ -516,7 +516,6 @@ DBaseStatusBar *CreateCustomStatusBar(int script=0); // Crosshair stuff ---------------------------------------------------------- -void ST_FormatMapName(FString &mapname, const char *mapnamecolor = ""); void ST_LoadCrosshair(bool alwaysload=false); void ST_Clear(); void ST_CreateStatusBar(bool bTitleLevel); diff --git a/src/g_statusbar/sbarinfo.cpp b/src/g_statusbar/sbarinfo.cpp index 7b1184cec0..58ad5ac110 100644 --- a/src/g_statusbar/sbarinfo.cpp +++ b/src/g_statusbar/sbarinfo.cpp @@ -47,6 +47,7 @@ #include "gstrings.h" #include "g_levellocals.h" #include "vm.h" +#include "i_system.h" #define ARTIFLASH_OFFSET (statusBar->invBarOffset+6) enum @@ -1075,7 +1076,7 @@ public: lastHud = hud; // Handle inventory bar drawing - if(CPlayer->inventorytics > 0 && !(level.flags & LEVEL_NOINVENTORYBAR) && (state == HUD_StatusBar || state == HUD_Fullscreen)) + if(CPlayer->inventorytics > 0 && !(primaryLevel->flags & LEVEL_NOINVENTORYBAR) && (state == HUD_StatusBar || state == HUD_Fullscreen)) { SBarInfoMainBlock *inventoryBar = state == HUD_StatusBar ? script->huds[STBAR_INVENTORY] : script->huds[STBAR_INVENTORYFULLSCREEN]; if(inventoryBar != lastInventoryBar) diff --git a/src/g_statusbar/sbarinfo_commands.cpp b/src/g_statusbar/sbarinfo_commands.cpp index ac66ddf94a..bd565cbc7a 100644 --- a/src/g_statusbar/sbarinfo_commands.cpp +++ b/src/g_statusbar/sbarinfo_commands.cpp @@ -850,26 +850,26 @@ class CommandDrawString : public SBarInfoCommand switch(strValue) { case LEVELNAME: - if(level.lumpnum != cache) + if(primaryLevel->lumpnum != cache) { - cache = level.lumpnum; - str = level.LevelName; + cache = primaryLevel->lumpnum; + str = primaryLevel->LevelName; RealignString(); } break; case LEVELLUMP: - if(level.lumpnum != cache) + if(primaryLevel->lumpnum != cache) { - cache = level.lumpnum; - str = level.MapName; + cache = primaryLevel->lumpnum; + str = primaryLevel->MapName; str.ToUpper(); RealignString(); } break; case SKILLNAME: - if(level.lumpnum != cache) // Can only change skill between level. + if(primaryLevel->lumpnum != cache) // Can only change skill between primaryLevel-> { - cache = level.lumpnum; + cache = primaryLevel->lumpnum; str = G_SkillName(); RealignString(); } @@ -904,7 +904,7 @@ class CommandDrawString : public SBarInfoCommand if(ACS_GlobalVars[valueArgument] != cache) { cache = ACS_GlobalVars[valueArgument]; - str = level.Behaviors.LookupString(ACS_GlobalVars[valueArgument]); + str = primaryLevel->Behaviors.LookupString(ACS_GlobalVars[valueArgument]); RealignString(); } break; @@ -912,13 +912,13 @@ class CommandDrawString : public SBarInfoCommand if(ACS_GlobalArrays[valueArgument][consoleplayer] != cache) { cache = ACS_GlobalArrays[valueArgument][consoleplayer]; - str = level.Behaviors.LookupString(ACS_GlobalArrays[valueArgument][consoleplayer]); + str = primaryLevel->Behaviors.LookupString(ACS_GlobalArrays[valueArgument][consoleplayer]); RealignString(); } break; case TIME: { - int sec = Tics2Seconds(level.time); + int sec = Tics2Seconds(primaryLevel->time); str.Format("%02d:%02d:%02d", sec / 3600, (sec % 3600) / 60, sec % 60); break; } @@ -1389,25 +1389,25 @@ class CommandDrawNumber : public CommandDrawString num = statusBar->CPlayer->fragcount; break; case KILLS: - num = level.killed_monsters; + num = primaryLevel->killed_monsters; break; case MONSTERS: - num = level.total_monsters; + num = primaryLevel->total_monsters; break; case ITEMS: - num = level.found_items; + num = primaryLevel->found_items; break; case TOTALITEMS: - num = level.total_items; + num = primaryLevel->total_items; break; case SECRETS: - num = level.found_secrets; + num = primaryLevel->found_secrets; break; case SCORE: num = statusBar->CPlayer->mo->Score; break; case TOTALSECRETS: - num = level.total_secrets; + num = primaryLevel->total_secrets; break; case ARMORCLASS: case SAVEPERCENT: @@ -1459,9 +1459,9 @@ class CommandDrawNumber : public CommandDrawString case AIRTIME: { if(statusBar->CPlayer->mo->waterlevel < 3) - num = level.airsupply/TICRATE; + num = primaryLevel->airsupply/TICRATE; else - num = clamp((statusBar->CPlayer->air_finished - level.time + (TICRATE-1))/TICRATE, 0, INT_MAX); + num = clamp((statusBar->CPlayer->air_finished - primaryLevel->time + (TICRATE-1))/TICRATE, 0, INT_MAX); break; } case SELECTEDINVENTORY: @@ -1502,7 +1502,7 @@ class CommandDrawNumber : public CommandDrawString } default: break; } - if(interpolationSpeed != 0 && (!hudChanged || level.time == 1)) + if(interpolationSpeed != 0 && (!hudChanged || primaryLevel->time == 1)) { if(num < drawValue) drawValue -= clamp((drawValue - num) >> 2, 1, interpolationSpeed); @@ -1691,7 +1691,7 @@ class CommandDrawSelectedInventory : public CommandDrawImage, private CommandDra if(alternateOnEmpty) SBarInfoCommandFlowControl::Draw(block, statusBar); - if(statusBar->CPlayer->mo->PointerVar(NAME_InvSel) != NULL && !(level.flags & LEVEL_NOINVENTORYBAR)) + if(statusBar->CPlayer->mo->PointerVar(NAME_InvSel) != NULL && !(primaryLevel->flags & LEVEL_NOINVENTORYBAR)) { if(artiflash && statusBar->wrapper->artiflashTick) { @@ -1791,7 +1791,7 @@ class CommandDrawSelectedInventory : public CommandDrawImage, private CommandDra { SBarInfoCommandFlowControl::Tick(block, statusBar, hudChanged); - SetTruth(statusBar->CPlayer->mo->PointerVar(NAME_InvSel) == NULL || (level.flags & LEVEL_NOINVENTORYBAR), block, statusBar); + SetTruth(statusBar->CPlayer->mo->PointerVar(NAME_InvSel) == NULL || (primaryLevel->flags & LEVEL_NOINVENTORYBAR), block, statusBar); CommandDrawImage::Tick(block, statusBar, hudChanged); CommandDrawNumber::Tick(block, statusBar, hudChanged); @@ -1910,7 +1910,7 @@ class CommandInventoryBarNotVisible : public SBarInfoCommandFlowControl { SBarInfoCommandFlowControl::Tick(block, statusBar, hudChanged); - SetTruth(statusBar->CPlayer->inventorytics <= 0 || (level.flags & LEVEL_NOINVENTORYBAR), block, statusBar); + SetTruth(statusBar->CPlayer->inventorytics <= 0 || (primaryLevel->flags & LEVEL_NOINVENTORYBAR), block, statusBar); } }; @@ -2727,16 +2727,16 @@ class CommandDrawBar : public SBarInfoCommand max = fraglimit; break; case KILLS: - value = level.killed_monsters; - max = level.total_monsters; + value = primaryLevel->killed_monsters; + max = primaryLevel->total_monsters; break; case ITEMS: - value = level.found_items; - max = level.total_items; + value = primaryLevel->found_items; + max = primaryLevel->total_items; break; case SECRETS: - value = level.found_secrets; - max = level.total_secrets; + value = primaryLevel->found_secrets; + max = primaryLevel->total_secrets; break; case INVENTORY: { @@ -2751,8 +2751,8 @@ class CommandDrawBar : public SBarInfoCommand break; } case AIRTIME: - value = clamp(statusBar->CPlayer->air_finished - level.time, 0, INT_MAX); - max = level.airsupply; + value = clamp(statusBar->CPlayer->air_finished - primaryLevel->time, 0, INT_MAX); + max = primaryLevel->airsupply; break; case POWERUPTIME: { @@ -2798,7 +2798,7 @@ class CommandDrawBar : public SBarInfoCommand } else value = 0; - if(interpolationSpeed != 0 && (!hudChanged || level.time == 1)) + if(interpolationSpeed != 0 && (!hudChanged || primaryLevel->time == 1)) { // [BL] Since we used a percentage (in order to get the most fluid animation) // we need to establish a cut off point so the last pixel won't hang as the animation slows @@ -3192,7 +3192,7 @@ class CommandDrawGem : public SBarInfoCommand goalValue = reverse ? 100 - goalValue : goalValue; - if(interpolationSpeed != 0 && (!hudChanged || level.time == 1)) // At the start force an animation + if(interpolationSpeed != 0 && (!hudChanged || primaryLevel->time == 1)) // At the start force an animation { if(goalValue < drawValue) drawValue -= clamp((drawValue - goalValue) >> 2, 1, interpolationSpeed); @@ -3202,7 +3202,7 @@ class CommandDrawGem : public SBarInfoCommand else drawValue = goalValue; - if(wiggle && level.time & 1) + if(wiggle && primaryLevel->time & 1) chainWiggle = pr_chainwiggle() & 1; } protected: diff --git a/src/g_shared/shared_hud.cpp b/src/g_statusbar/shared_hud.cpp similarity index 100% rename from src/g_shared/shared_hud.cpp rename to src/g_statusbar/shared_hud.cpp diff --git a/src/g_statusbar/shared_sbar.cpp b/src/g_statusbar/shared_sbar.cpp index 76c8ec20ad..d1cbe48a38 100644 --- a/src/g_statusbar/shared_sbar.cpp +++ b/src/g_statusbar/shared_sbar.cpp @@ -57,6 +57,7 @@ #include "sbarinfo.h" #include "gstrings.h" #include "events.h" +#include "g_game.h" #include "../version.h" @@ -134,25 +135,6 @@ CUSTOM_CVAR(Int, am_showmaplabel, 2, CVAR_ARCHIVE) CVAR (Bool, idmypos, false, 0); -//--------------------------------------------------------------------------- -// -// Format the map name, include the map label if wanted -// -//--------------------------------------------------------------------------- - -void ST_FormatMapName(FString &mapname, const char *mapnamecolor) -{ - cluster_info_t *cluster = FindClusterInfo (level.cluster); - bool ishub = (cluster != NULL && (cluster->flags & CLUSTER_HUB)); - - mapname = ""; - if (am_showmaplabel == 1 || (am_showmaplabel == 2 && !ishub)) - { - mapname << level.MapName << ": "; - } - mapname << mapnamecolor << level.LevelName; -} - //--------------------------------------------------------------------------- // // Load crosshair definitions @@ -808,7 +790,7 @@ void DBaseStatusBar::RefreshViewBorder () { return; } - auto tex = GetBorderTexture(&level); + auto tex = GetBorderTexture(primaryLevel); screen->DrawBorder (tex, 0, 0, Width, viewwindowy); screen->DrawBorder (tex, 0, viewwindowy, viewwindowx, viewheight + viewwindowy); screen->DrawBorder (tex, viewwindowx + viewwidth, viewwindowy, Width, viewheight + viewwindowy); @@ -834,7 +816,7 @@ void DBaseStatusBar::RefreshBackground () const if (x == 0 && y == SCREENHEIGHT) return; - auto tex = GetBorderTexture(&level); + auto tex = GetBorderTexture(primaryLevel); if(!CompleteBorder) { @@ -1166,7 +1148,7 @@ void DBaseStatusBar::DrawTopStuff (EHudState state) DrawMessages (HUDMSGLayer_OverMap, (state == HUD_StatusBar) ? GetTopOfStatusbar() : SCREENHEIGHT); } DrawMessages (HUDMSGLayer_OverHUD, (state == HUD_StatusBar) ? GetTopOfStatusbar() : SCREENHEIGHT); - E_RenderOverlay(state); + primaryLevel->localEventManager->RenderOverlay(state); DrawConsistancy (); DrawWaiting (); diff --git a/src/gameconfigfile.cpp b/src/gameconfigfile.cpp index 3bd34fd158..ee52313ce0 100644 --- a/src/gameconfigfile.cpp +++ b/src/gameconfigfile.cpp @@ -47,6 +47,9 @@ #include "doomstat.h" #include "gi.h" #include "d_main.h" +#if !defined _MSC_VER && !defined __APPLE__ +#include "i_system.h" // for SHARE_DIR +#endif // !_MSC_VER && !__APPLE__ EXTERN_CVAR (Bool, con_centernotify) EXTERN_CVAR (Int, msg0color) diff --git a/src/g_inventory/a_keys.cpp b/src/gamedata/a_keys.cpp similarity index 99% rename from src/g_inventory/a_keys.cpp rename to src/gamedata/a_keys.cpp index bd44828a53..7260c967d1 100644 --- a/src/g_inventory/a_keys.cpp +++ b/src/gamedata/a_keys.cpp @@ -494,7 +494,7 @@ int P_CheckKeys (AActor *owner, int keynum, bool remote, bool quiet) // If we get here, that means the actor isn't holding an appropriate key. - if (owner == players[consoleplayer].camera) + if (owner->CheckLocalView()) { PrintMessage(failtext); diff --git a/src/g_inventory/a_keys.h b/src/gamedata/a_keys.h similarity index 100% rename from src/g_inventory/a_keys.h rename to src/gamedata/a_keys.h diff --git a/src/g_inventory/a_weapons.cpp b/src/gamedata/a_weapons.cpp similarity index 100% rename from src/g_inventory/a_weapons.cpp rename to src/gamedata/a_weapons.cpp diff --git a/src/g_inventory/a_weapons.h b/src/gamedata/a_weapons.h similarity index 100% rename from src/g_inventory/a_weapons.h rename to src/gamedata/a_weapons.h diff --git a/src/d_dehacked.cpp b/src/gamedata/d_dehacked.cpp similarity index 100% rename from src/d_dehacked.cpp rename to src/gamedata/d_dehacked.cpp diff --git a/src/d_dehacked.h b/src/gamedata/d_dehacked.h similarity index 100% rename from src/d_dehacked.h rename to src/gamedata/d_dehacked.h diff --git a/src/decallib.cpp b/src/gamedata/decallib.cpp similarity index 79% rename from src/decallib.cpp rename to src/gamedata/decallib.cpp index 945fc9a09f..6b471492a0 100644 --- a/src/decallib.cpp +++ b/src/gamedata/decallib.cpp @@ -46,6 +46,7 @@ #include "b_bot.h" #include "serializer.h" #include "g_levellocals.h" +#include "a_decalfx.h" FDecalLib DecalLibrary; @@ -102,32 +103,6 @@ struct FDecalAnimator FName Name; }; -TDeletingArray Animators; - -struct DDecalThinker : public DThinker -{ - DECLARE_CLASS (DDecalThinker, DThinker) - HAS_OBJECT_POINTERS -public: - DDecalThinker (DBaseDecal *decal) : DThinker (STAT_DECALTHINKER), TheDecal (decal) {} - void Serialize(FSerializer &arc); - TObjPtr TheDecal; -protected: - DDecalThinker () : DThinker (STAT_DECALTHINKER) {} -}; - -IMPLEMENT_CLASS(DDecalThinker, false, true) - -IMPLEMENT_POINTERS_START(DDecalThinker) - IMPLEMENT_POINTER(TheDecal) -IMPLEMENT_POINTERS_END - -void DDecalThinker::Serialize(FSerializer &arc) -{ - Super::Serialize (arc); - arc("thedecal", TheDecal); -} - struct FDecalFaderAnim : public FDecalAnimator { FDecalFaderAnim (const char *name) : FDecalAnimator (name) {} @@ -137,21 +112,6 @@ struct FDecalFaderAnim : public FDecalAnimator int DecayTime; }; -class DDecalFader : public DDecalThinker -{ - DECLARE_CLASS (DDecalFader, DDecalThinker) -public: - DDecalFader (DBaseDecal *decal) : DDecalThinker (decal) {} - void Serialize(FSerializer &arc); - void Tick (); - - int TimeToStartDecay; - int TimeToEndDecay; - double StartTrans; -private: - DDecalFader () {} -}; - struct FDecalColorerAnim : public FDecalAnimator { FDecalColorerAnim (const char *name) : FDecalAnimator (name) {} @@ -162,22 +122,6 @@ struct FDecalColorerAnim : public FDecalAnimator PalEntry GoalColor; }; -class DDecalColorer : public DDecalThinker -{ - DECLARE_CLASS (DDecalColorer, DDecalThinker) -public: - DDecalColorer (DBaseDecal *decal) : DDecalThinker (decal) {} - void Serialize(FSerializer &arc); - void Tick (); - - int TimeToStartDecay; - int TimeToEndDecay; - PalEntry StartColor; - PalEntry GoalColor; -private: - DDecalColorer () {} -}; - struct FDecalStretcherAnim : public FDecalAnimator { FDecalStretcherAnim (const char *name) : FDecalAnimator (name) {} @@ -188,27 +132,6 @@ struct FDecalStretcherAnim : public FDecalAnimator double GoalX, GoalY; }; -class DDecalStretcher : public DDecalThinker -{ - DECLARE_CLASS (DDecalStretcher, DDecalThinker) -public: - DDecalStretcher (DBaseDecal *decal) : DDecalThinker (decal) {} - void Serialize(FSerializer &arc); - void Tick (); - - int TimeToStart; - int TimeToStop; - double GoalX; - double StartX; - double GoalY; - double StartY; - bool bStretchX; - bool bStretchY; - bool bStarted; -private: - DDecalStretcher () {} -}; - struct FDecalSliderAnim : public FDecalAnimator { FDecalSliderAnim (const char *name) : FDecalAnimator (name) {} @@ -219,25 +142,6 @@ struct FDecalSliderAnim : public FDecalAnimator double /*DistX,*/ DistY; }; -class DDecalSlider : public DDecalThinker -{ - DECLARE_CLASS (DDecalSlider, DDecalThinker) -public: - DDecalSlider (DBaseDecal *decal) : DDecalThinker (decal) {} - void Serialize(FSerializer &arc); - void Tick (); - - int TimeToStart; - int TimeToStop; -/* double DistX; */ - double DistY; - double StartX; - double StartY; - bool bStarted; -private: - DDecalSlider () {} -}; - struct FDecalCombinerAnim : public FDecalAnimator { FDecalCombinerAnim (const char *name) : FDecalAnimator (name) {} @@ -249,6 +153,7 @@ struct FDecalCombinerAnim : public FDecalAnimator static TArray AnimatorList; }; +TDeletingArray Animators; TArray FDecalCombinerAnim::AnimatorList; static const char *DecalKeywords[] = @@ -1160,76 +1065,23 @@ FDecalAnimator::~FDecalAnimator () { } -IMPLEMENT_CLASS(DDecalFader, false, false) - -void DDecalFader::Serialize(FSerializer &arc) -{ - Super::Serialize (arc); - arc("starttime", TimeToStartDecay) - ("endtime", TimeToEndDecay) - ("starttrans", StartTrans); -} - -void DDecalFader::Tick () -{ - if (TheDecal == NULL) - { - Destroy (); - } - else - { - if (level.maptime < TimeToStartDecay || bglobal.freeze) - { - return; - } - else if (level.maptime >= TimeToEndDecay) - { - TheDecal->Destroy (); // remove the decal - Destroy (); // remove myself - return; - } - if (StartTrans == -1) - { - StartTrans = TheDecal->Alpha; - } - - int distanceToEnd = TimeToEndDecay - level.maptime; - int fadeDistance = TimeToEndDecay - TimeToStartDecay; - TheDecal->Alpha = StartTrans * distanceToEnd / fadeDistance; - } -} - DThinker *FDecalFaderAnim::CreateThinker (DBaseDecal *actor, side_t *wall) const { - DDecalFader *fader = Create (actor); + auto Level = actor->Level; + DDecalFader *fader = Level->CreateThinker (actor); - fader->TimeToStartDecay = level.maptime + DecayStart; + fader->TimeToStartDecay = Level->maptime + DecayStart; fader->TimeToEndDecay = fader->TimeToStartDecay + DecayTime; fader->StartTrans = -1; return fader; } -IMPLEMENT_CLASS(DDecalStretcher, false, false) - -void DDecalStretcher::Serialize(FSerializer &arc) -{ - Super::Serialize (arc); - arc("starttime", TimeToStart) - ("endtime", TimeToStop) - ("goalx", GoalX) - ("startx", StartX) - ("stretchx", bStretchX) - ("goaly", GoalY) - ("starty", StartY) - ("stretchy", bStretchY) - ("started", bStarted); -} - DThinker *FDecalStretcherAnim::CreateThinker (DBaseDecal *actor, side_t *wall) const { - DDecalStretcher *thinker = Create (actor); + auto Level = actor->Level; + DDecalStretcher *thinker = Level->CreateThinker (actor); - thinker->TimeToStart = level.maptime + StretchStart; + thinker->TimeToStart = Level->maptime + StretchStart; thinker->TimeToStop = thinker->TimeToStart + StretchTime; if (GoalX >= 0) @@ -1256,66 +1108,12 @@ DThinker *FDecalStretcherAnim::CreateThinker (DBaseDecal *actor, side_t *wall) c return thinker; } -void DDecalStretcher::Tick () -{ - if (TheDecal == NULL) - { - Destroy (); - return; - } - if (level.maptime < TimeToStart || bglobal.freeze) - { - return; - } - if (level.maptime >= TimeToStop) - { - if (bStretchX) - { - TheDecal->ScaleX = GoalX; - } - if (bStretchY) - { - TheDecal->ScaleY = GoalY; - } - Destroy (); - return; - } - if (!bStarted) - { - bStarted = true; - StartX = TheDecal->ScaleX; - StartY = TheDecal->ScaleY; - } - - int distance = level.maptime - TimeToStart; - int maxDistance = TimeToStop - TimeToStart; - if (bStretchX) - { - TheDecal->ScaleX = StartX + (GoalX - StartX) * distance / maxDistance; - } - if (bStretchY) - { - TheDecal->ScaleY = StartY + (GoalY - StartY) * distance / maxDistance; - } -} - -IMPLEMENT_CLASS(DDecalSlider, false, false) - -void DDecalSlider::Serialize(FSerializer &arc) -{ - Super::Serialize (arc); - arc("starttime", TimeToStart) - ("endtime", TimeToStop) - ("disty", DistY) - ("starty", StartY) - ("started", bStarted); -} - DThinker *FDecalSliderAnim::CreateThinker (DBaseDecal *actor, side_t *wall) const { - DDecalSlider *thinker = Create (actor); + auto Level = actor->Level; + DDecalSlider *thinker = Level->CreateThinker (actor); - thinker->TimeToStart = level.maptime + SlideStart; + thinker->TimeToStart = Level->maptime + SlideStart; thinker->TimeToStop = thinker->TimeToStart + SlideTime; /*thinker->DistX = DistX;*/ thinker->DistY = DistY; @@ -1323,37 +1121,6 @@ DThinker *FDecalSliderAnim::CreateThinker (DBaseDecal *actor, side_t *wall) cons return thinker; } -void DDecalSlider::Tick () -{ - if (TheDecal == NULL) - { - Destroy (); - return; - } - if (level.maptime < TimeToStart || bglobal.freeze) - { - return; - } - if (!bStarted) - { - bStarted = true; - /*StartX = TheDecal->LeftDistance;*/ - StartY = TheDecal->Z; - } - if (level.maptime >= TimeToStop) - { - /*TheDecal->LeftDistance = StartX + DistX;*/ - TheDecal->Z = StartY + DistY; - Destroy (); - return; - } - - int distance = level.maptime - TimeToStart; - int maxDistance = TimeToStop - TimeToStart; - /*TheDecal->LeftDistance = StartX + DistX * distance / maxDistance);*/ - TheDecal->Z = StartY + DistY * distance / maxDistance; -} - DThinker *FDecalCombinerAnim::CreateThinker (DBaseDecal *actor, side_t *wall) const { DThinker *thinker = NULL; @@ -1379,62 +1146,12 @@ FDecalAnimator *FDecalLib::FindAnimator (const char *name) return NULL; } -IMPLEMENT_CLASS(DDecalColorer, false, false) - -void DDecalColorer::Serialize(FSerializer &arc) -{ - Super::Serialize (arc); - arc("starttime", TimeToStartDecay) - ("endtime", TimeToEndDecay) - ("startcolor", StartColor) - ("goalcolor", GoalColor); -} - -void DDecalColorer::Tick () -{ - if (TheDecal == NULL || !(TheDecal->RenderStyle.Flags & STYLEF_ColorIsFixed)) - { - Destroy (); - } - else - { - if (level.maptime < TimeToStartDecay || bglobal.freeze) - { - return; - } - else if (level.maptime >= TimeToEndDecay) - { - TheDecal->SetShade (GoalColor); - Destroy (); // remove myself - } - if (StartColor.a == 255) - { - StartColor = TheDecal->AlphaColor & 0xffffff; - if (StartColor == GoalColor) - { - Destroy (); - return; - } - } - if (level.maptime & 0) - { // Changing the shade can be expensive, so don't do it too often. - return; - } - - int distance = level.maptime - TimeToStartDecay; - int maxDistance = TimeToEndDecay - TimeToStartDecay; - int r = StartColor.r + Scale (GoalColor.r - StartColor.r, distance, maxDistance); - int g = StartColor.g + Scale (GoalColor.g - StartColor.g, distance, maxDistance); - int b = StartColor.b + Scale (GoalColor.b - StartColor.b, distance, maxDistance); - TheDecal->SetShade (r, g, b); - } -} - DThinker *FDecalColorerAnim::CreateThinker (DBaseDecal *actor, side_t *wall) const { - DDecalColorer *Colorer = Create(actor); + auto Level = actor->Level; + DDecalColorer *Colorer = Level->CreateThinker(actor); - Colorer->TimeToStartDecay = level.maptime + DecayStart; + Colorer->TimeToStartDecay = Level->maptime + DecayStart; Colorer->TimeToEndDecay = Colorer->TimeToStartDecay + DecayTime; Colorer->StartColor = 0xff000000; Colorer->GoalColor = GoalColor; diff --git a/src/decallib.h b/src/gamedata/decallib.h similarity index 100% rename from src/decallib.h rename to src/gamedata/decallib.h diff --git a/src/g_doomedmap.cpp b/src/gamedata/g_doomedmap.cpp similarity index 67% rename from src/g_doomedmap.cpp rename to src/gamedata/g_doomedmap.cpp index f1a99c1d96..c1e3abc58f 100644 --- a/src/g_doomedmap.cpp +++ b/src/gamedata/g_doomedmap.cpp @@ -38,6 +38,7 @@ #include "p_lnspec.h" #include "c_dispatch.h" #include "v_text.h" +#include "doomerrors.h" const char *SpecialMapthingNames[] = { @@ -96,6 +97,9 @@ static IdMap DoomEdFromMapinfo; //========================================================================== FDoomEdMap DoomEdMap; +// Set of spawnable things for the Thing_Spawn and Thing_Projectile specials. +FClassMap SpawnableThings; +FClassMap StrifeTypes; static int sortnums (const void *a, const void *b) { @@ -289,3 +293,176 @@ void InitActorNumsFromMapinfo() } DoomEdFromMapinfo.Clear(); // we do not need this any longer } + +PClassActor *P_GetSpawnableType(int spawnnum) +{ + if (spawnnum < 0) + { // A named arg from a UDMF map + FName spawnname = FName(ENamedName(-spawnnum)); + if (spawnname.IsValidName()) + { + return PClass::FindActor(spawnname); + } + } + else + { // A numbered arg from a Hexen or UDMF map + PClassActor **type = SpawnableThings.CheckKey(spawnnum); + if (type != NULL) + { + return *type; + } + } + return NULL; +} + +struct MapinfoSpawnItem +{ + FName classname; // DECORATE is read after MAPINFO so we do not have the actual classes available here yet. + // These are for error reporting. We must store the file information because it's no longer available when these items get resolved. + FString filename; + int linenum; +}; + +typedef TMap SpawnMap; +static SpawnMap SpawnablesFromMapinfo; +static SpawnMap ConversationIDsFromMapinfo; + +static int SpawnableSort(const void *a, const void *b) +{ + return (*((FClassMap::Pair **)a))->Key - (*((FClassMap::Pair **)b))->Key; +} + +static void DumpClassMap(FClassMap &themap) +{ + FClassMap::Iterator it(themap); + FClassMap::Pair *pair; + TArray allpairs(themap.CountUsed(), true); + int i = 0; + + // Sort into numerical order, since their arrangement in the map can + // be in an unspecified order. + while (it.NextPair(pair)) + { + allpairs[i++] = pair; + } + qsort(allpairs.Data(), i, sizeof(allpairs[0]), SpawnableSort); + for (int j = 0; j < i; ++j) + { + pair = allpairs[j]; + Printf ("%d %s\n", pair->Key, pair->Value->TypeName.GetChars()); + } +} + +CCMD(dumpspawnables) +{ + DumpClassMap(SpawnableThings); +} + +CCMD (dumpconversationids) +{ + DumpClassMap(StrifeTypes); +} + +void ClearStrifeTypes() +{ + StrifeTypes.Clear(); +} + + +static void ParseSpawnMap(FScanner &sc, SpawnMap & themap, const char *descript) +{ + TMap defined; + int error = 0; + + MapinfoSpawnItem editem; + + editem.filename = sc.ScriptName; + + while (true) + { + if (sc.CheckString("}")) return; + else if (sc.CheckNumber()) + { + int ednum = sc.Number; + sc.MustGetStringName("="); + sc.MustGetString(); + + bool *def = defined.CheckKey(ednum); + if (def != NULL) + { + sc.ScriptMessage("%s %d defined more than once", descript, ednum); + error++; + } + else if (ednum < 0) + { + sc.ScriptMessage("%s must be positive, got %d", descript, ednum); + error++; + } + defined[ednum] = true; + editem.classname = sc.String; + editem.linenum = sc.Line; + + themap.Insert(ednum, editem); + } + else + { + sc.ScriptError("Number expected"); + } + } + if (error > 0) + { + sc.ScriptError("%d errors encountered in %s definition", error, descript); + } +} + +void FMapInfoParser::ParseSpawnNums() +{ + ParseOpenBrace(); + ParseSpawnMap(sc, SpawnablesFromMapinfo, "Spawn number"); +} + +void FMapInfoParser::ParseConversationIDs() +{ + ParseOpenBrace(); + ParseSpawnMap(sc, ConversationIDsFromMapinfo, "Conversation ID"); +} + + +void InitClassMap(FClassMap &themap, SpawnMap &thedata) +{ + themap.Clear(); + SpawnMap::Iterator it(thedata); + SpawnMap::Pair *pair; + int error = 0; + + while (it.NextPair(pair)) + { + PClassActor *cls = NULL; + if (pair->Value.classname != NAME_None) + { + cls = PClass::FindActor(pair->Value.classname); + if (cls == NULL) + { + Printf(TEXTCOLOR_RED "Script error, \"%s\" line %d:\nUnknown actor class %s\n", + pair->Value.filename.GetChars(), pair->Value.linenum, pair->Value.classname.GetChars()); + error++; + } + themap.Insert(pair->Key, cls); + } + else + { + themap.Remove(pair->Key); + } + } + if (error > 0) + { + I_Error("%d unknown actor classes found", error); + } + thedata.Clear(); // we do not need this any longer +} + +void InitSpawnablesFromMapinfo() +{ + InitClassMap(SpawnableThings, SpawnablesFromMapinfo); + InitClassMap(StrifeTypes, ConversationIDsFromMapinfo); +} diff --git a/src/g_mapinfo.cpp b/src/gamedata/g_mapinfo.cpp similarity index 99% rename from src/g_mapinfo.cpp rename to src/gamedata/g_mapinfo.cpp index e90fa52b5c..f5f45fdca2 100644 --- a/src/g_mapinfo.cpp +++ b/src/gamedata/g_mapinfo.cpp @@ -49,6 +49,7 @@ #include "autosegs.h" #include "g_levellocals.h" #include "events.h" +#include "i_system.h" TArray wadclusterinfos; TArray wadlevelinfos; @@ -2284,8 +2285,8 @@ static void ClearMapinfo() AllSkills.Clear(); DefaultSkill = -1; DeinitIntermissions(); - level.info = NULL; - level.F1Pic = ""; + primaryLevel->info = nullptr; + primaryLevel->F1Pic = ""; } //========================================================================== diff --git a/src/gamedata/g_mapinfo.h b/src/gamedata/g_mapinfo.h new file mode 100644 index 0000000000..775b5f6a07 --- /dev/null +++ b/src/gamedata/g_mapinfo.h @@ -0,0 +1,560 @@ +/* +** g_level.h +** +**--------------------------------------------------------------------------- +** Copyright 1998-2006 Randy Heit +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions +** are met: +** +** 1. Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** 3. The name of the author may not be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**--------------------------------------------------------------------------- +** +*/ + +#ifndef __G_LEVEL_H__ +#define __G_LEVEL_H__ + +#include "doomtype.h" +#include "vectors.h" +#include "sc_man.h" +#include "resourcefiles/file_zip.h" + +struct level_info_t; +struct cluster_info_t; +class FSerializer; + +#if defined(_MSC_VER) +#pragma section(".yreg$u",read) +#define MSVC_YSEG __declspec(allocate(".yreg$u")) +#define GCC_YSEG +#else +#define MSVC_YSEG +#define GCC_YSEG __attribute__((section(SECTION_YREG))) __attribute__((used)) +#endif + +// The structure used to control scripts between maps +struct acsdefered_t +{ + enum EType + { + defexecute, + defexealways, + defsuspend, + defterminate + } type; + int script; + int args[3]; + int playernum; +}; + +FSerializer &Serialize(FSerializer &arc, const char *key, acsdefered_t &defer, acsdefered_t *def); + + +struct FIntermissionDescriptor; +struct FIntermissionAction; + +struct FMapInfoParser +{ + enum EFormatType + { + FMT_Unknown, + FMT_Old, + FMT_New + }; + + FScanner sc; + int format_type; + bool HexenHack; + + FMapInfoParser(int format = FMT_Unknown) + { + format_type = format; + HexenHack = false; + } + + bool ParseLookupName(FString &dest); + void ParseMusic(FString &name, int &order); + //void ParseLumpOrTextureName(char *name); + void ParseLumpOrTextureName(FString &name); + void ParseExitText(FName formap, level_info_t *info); + void ParseExitMusic(FName formap, level_info_t *info); + void ParseExitBackdrop(FName formap, level_info_t *info, bool ispic); + + void ParseCluster(); + void ParseNextMap(FString &mapname); + level_info_t *ParseMapHeader(level_info_t &defaultinfo); + void ParseMapDefinition(level_info_t &leveldef); + void ParseGameInfo(); + void ParseEpisodeInfo (); + void ParseSkill (); + void ParseMapInfo (int lump, level_info_t &gamedefaults, level_info_t &defaultinfo); + + void ParseOpenBrace(); + bool ParseCloseBrace(); + bool CheckAssign(); + void ParseAssign(); + void MustParseAssign(); + void ParseComma(); + bool CheckNumber(); + bool CheckFloat(); + void SkipToNext(); + void CheckEndOfFile(const char *block); + + void ParseIntermissionAction(FIntermissionDescriptor *Desc); + void ParseIntermission(); + void ParseDoomEdNums(); + void ParseSpawnNums(); + void ParseConversationIDs(); + void ParseAMColors(bool); + FName CheckEndSequence(); + FName ParseEndGame(); + void ParseDamageDefinition(); +}; + +#define DEFINE_MAP_OPTION(name, old) \ + static void MapOptHandler_##name(FMapInfoParser &parse, level_info_t *info); \ + static FMapOptInfo MapOpt_##name = \ + { #name, MapOptHandler_##name, old }; \ + MSVC_YSEG FMapOptInfo *mapopt_##name GCC_YSEG = &MapOpt_##name; \ + static void MapOptHandler_##name(FMapInfoParser &parse, level_info_t *info) + + +struct FMapOptInfo +{ + const char *name; + void (*handler) (FMapInfoParser &parse, level_info_t *levelinfo); + bool old; +}; + +enum ELevelFlags : unsigned int +{ + LEVEL_NOINTERMISSION = 0x00000001, + LEVEL_NOINVENTORYBAR = 0x00000002, // This effects Doom only, since it's the only one without a standard inventory bar. + LEVEL_DOUBLESKY = 0x00000004, + LEVEL_HASFADETABLE = 0x00000008, // Level uses Hexen's fadetable mapinfo to get fog + + LEVEL_MAP07SPECIAL = 0x00000010, + LEVEL_BRUISERSPECIAL = 0x00000020, + LEVEL_CYBORGSPECIAL = 0x00000040, + LEVEL_SPIDERSPECIAL = 0x00000080, + + LEVEL_SPECLOWERFLOOR = 0x00000100, + LEVEL_SPECOPENDOOR = 0x00000200, + LEVEL_SPECLOWERFLOORTOHIGHEST=0x00000300, + LEVEL_SPECACTIONSMASK = 0x00000300, + + LEVEL_MONSTERSTELEFRAG = 0x00000400, + LEVEL_ACTOWNSPECIAL = 0x00000800, + LEVEL_SNDSEQTOTALCTRL = 0x00001000, + LEVEL_FORCETILEDSKY = 0x00002000, + + LEVEL_CROUCH_NO = 0x00004000, + LEVEL_JUMP_NO = 0x00008000, + LEVEL_FREELOOK_NO = 0x00010000, + LEVEL_FREELOOK_YES = 0x00020000, + + // The absence of both of the following bits means that this level does not + // use falling damage (though damage can be forced with dmflags,. + LEVEL_FALLDMG_ZD = 0x00040000, // Level uses ZDoom's falling damage + LEVEL_FALLDMG_HX = 0x00080000, // Level uses Hexen's falling damage + + LEVEL_HEADSPECIAL = 0x00100000, // Heretic episode 1/4 + LEVEL_MINOTAURSPECIAL = 0x00200000, // Heretic episode 2/5 + LEVEL_SORCERER2SPECIAL = 0x00400000, // Heretic episode 3 + LEVEL_SPECKILLMONSTERS = 0x00800000, + + LEVEL_STARTLIGHTNING = 0x01000000, // Automatically start lightning + LEVEL_FILTERSTARTS = 0x02000000, // Apply mapthing filtering to player starts + LEVEL_LOOKUPLEVELNAME = 0x04000000, // Level name is the name of a language string + LEVEL_USEPLAYERSTARTZ = 0x08000000, // Use the Z position of player starts + + LEVEL_SWAPSKIES = 0x10000000, // Used by lightning + LEVEL_NOALLIES = 0x20000000, // i.e. Inside Strife's front base + LEVEL_CHANGEMAPCHEAT = 0x40000000, // Don't display cluster messages + LEVEL_VISITED = 0x80000000, // Used for intermission map + + // The flags uint64_t is now split into 2 DWORDs + LEVEL2_RANDOMPLAYERSTARTS = 0x00000001, // Select single player starts randomnly (no voodoo dolls) + LEVEL2_ALLMAP = 0x00000002, // The player picked up a map on this level + + LEVEL2_LAXMONSTERACTIVATION = 0x00000004, // Monsters can open doors depending on the door speed + LEVEL2_LAXACTIVATIONMAPINFO = 0x00000008, // LEVEL_LAXMONSTERACTIVATION is not a default. + + LEVEL2_MISSILESACTIVATEIMPACT=0x00000010, // Missiles are the activators of SPAC_IMPACT events, not their shooters + LEVEL2_FROZEN = 0x00000020, // Game is frozen by a TimeFreezer + + LEVEL2_KEEPFULLINVENTORY = 0x00000040, // doesn't reduce the amount of inventory items to 1 + + LEVEL2_PRERAISEWEAPON = 0x00000080, // players should spawn with their weapons fully raised (but not when respawning it multiplayer) + LEVEL2_MONSTERFALLINGDAMAGE = 0x00000100, + LEVEL2_CLIPMIDTEX = 0x00000200, + LEVEL2_WRAPMIDTEX = 0x00000400, + + LEVEL2_CHECKSWITCHRANGE = 0x00000800, + + LEVEL2_PAUSE_MUSIC_IN_MENUS = 0x00001000, + LEVEL2_TOTALINFIGHTING = 0x00002000, + LEVEL2_NOINFIGHTING = 0x00004000, + + LEVEL2_NOMONSTERS = 0x00008000, + LEVEL2_INFINITE_FLIGHT = 0x00010000, + + LEVEL2_ALLOWRESPAWN = 0x00020000, + + LEVEL2_FORCETEAMPLAYON = 0x00040000, + LEVEL2_FORCETEAMPLAYOFF = 0x00080000, + + LEVEL2_CONV_SINGLE_UNFREEZE = 0x00100000, + LEVEL2_RAILINGHACK = 0x00200000, // but UDMF requires them to be separate to have more control + LEVEL2_DUMMYSWITCHES = 0x00400000, + LEVEL2_HEXENHACK = 0x00800000, // Level was defined in a Hexen style MAPINFO + + LEVEL2_SMOOTHLIGHTING = 0x01000000, // Level uses the smooth lighting feature. + LEVEL2_POLYGRIND = 0x02000000, // Polyobjects grind corpses to gibs. + LEVEL2_RESETINVENTORY = 0x04000000, // Resets player inventory when starting this level (unless in a hub) + LEVEL2_RESETHEALTH = 0x08000000, // Resets player health when starting this level (unless in a hub) + + LEVEL2_NOSTATISTICS = 0x10000000, // This level should not have statistics collected + LEVEL2_ENDGAME = 0x20000000, // This is an epilogue level that cannot be quit. + LEVEL2_NOAUTOSAVEHINT = 0x40000000, // tell the game that an autosave for this level does not need to be kept + LEVEL2_FORGETSTATE = 0x80000000, // forget this map's state in a hub + + // More flags! + LEVEL3_FORCEFAKECONTRAST = 0x00000001, // forces fake contrast even with fog enabled + LEVEL3_REMOVEITEMS = 0x00000002, // kills all INVBAR items on map change. + LEVEL3_ATTENUATE = 0x00000004, // attenuate lights? + LEVEL3_NOLIGHTFADE = 0x00000008, // no light fading to black. + LEVEL3_NOCOLOREDSPRITELIGHTING = 0x00000010, // draw sprites only with color-less light + LEVEL3_EXITNORMALUSED = 0x00000020, + LEVEL3_EXITSECRETUSED = 0x00000040, + LEVEL3_FORCEWORLDPANNING = 0x00000080, // Forces the world panning flag for all textures, even those without it explicitly set. +}; + + +struct FSpecialAction +{ + FName Type; // this is initialized before the actors... + int Action; + int Args[5]; +}; + +class DScroller; + +class FScanner; +struct level_info_t; + +typedef TMap FMusicMap; + +enum EMapType : int +{ + MAPTYPE_UNKNOWN = 0, + MAPTYPE_DOOM, + MAPTYPE_HEXEN, + MAPTYPE_BUILD, + MAPTYPE_UDMF // This does not distinguish between namespaces. +}; + +struct FExitText +{ + enum EDefined + { + DEF_TEXT = 1, + DEF_MUSIC = 2, + DEF_BACKDROP = 4, + DEF_LOOKUP = 8, + DEF_PIC = 16 + }; + int16_t mDefined = 0; + int16_t mOrder = -1; + FString mText; + FString mMusic; + FString mBackdrop; + + FExitText(int def = 0, int order = -1, const FString &text = "", const FString &backdrop = "", const FString &music = "") + : mDefined(int16_t(def)), mOrder(int16_t(order)), mText(text), mMusic(music), mBackdrop(backdrop) + { + } +}; + + +struct level_info_t +{ + int levelnum; + + FString MapName; + FString NextMap; + FString NextSecretMap; + FString PName; + FString SkyPic1; + FString SkyPic2; + FString FadeTable; + FString F1Pic; + FString BorderTexture; + FString MapBackground; + + TMap ExitMapTexts; + + int cluster; + int partime; + int sucktime; + int32_t flags; + uint32_t flags2; + uint32_t flags3; + + FString Music; + FString LevelName; + int8_t WallVertLight, WallHorizLight; + int musicorder; + FCompressedBuffer Snapshot; + TArray deferred; + float skyspeed1; + float skyspeed2; + uint32_t fadeto; + uint32_t outsidefog; + int cdtrack; + unsigned int cdid; + double gravity; + double aircontrol; + int WarpTrans; + int airsupply; + uint32_t compatflags, compatflags2; + uint32_t compatmask, compatmask2; + FString Translator; // for converting Doom-format linedef and sector types. + int DefaultEnvironment; // Default sound environment for the map. + FName Intermission; + FName deathsequence; + FName slideshow; + uint32_t hazardcolor; + uint32_t hazardflash; + int fogdensity; + int outsidefogdensity; + int skyfog; + float pixelstretch; + + // Redirection: If any player is carrying the specified item, then + // you go to the RedirectMap instead of this one. + FName RedirectType; + FString RedirectMapName; + + FString EnterPic; + FString ExitPic; + FString InterMusic; + int intermusicorder; + TMap > MapInterMusic; + + FString SoundInfo; + FString SndSeq; + + double teamdamage; + + FMusicMap MusicMap; + + TArray specialactions; + + TArray PrecacheSounds; + TArray PrecacheTextures; + TArray PrecacheClasses; + + TArray EventHandlers; + + ELightMode lightmode; + int8_t brightfog; + int8_t lightadditivesurfaces; + int8_t notexturefill; + FVector3 skyrotatevector; + FVector3 skyrotatevector2; + + FString EDName; + FString acsName; + bool fs_nocheckposition; + + + level_info_t() + { + Reset(); + } + ~level_info_t() + { + Snapshot.Clean(); + ClearDefered(); + } + void Reset(); + bool isValid(); + FString LookupLevelName (); + void ClearDefered() + { + deferred.Clear(); + } + level_info_t *CheckLevelRedirect (); +}; + + +struct cluster_info_t +{ + int cluster; + FString FinaleFlat; + FString ExitText; + FString EnterText; + FString MessageMusic; + int musicorder; + int flags; + int cdtrack; + FString ClusterName; + unsigned int cdid; + + void Reset(); + +}; + +// Cluster flags +#define CLUSTER_HUB 0x00000001 // Cluster uses hub behavior +#define CLUSTER_EXITTEXTINLUMP 0x00000002 // Exit text is the name of a lump +#define CLUSTER_ENTERTEXTINLUMP 0x00000004 // Enter text is the name of a lump +#define CLUSTER_FINALEPIC 0x00000008 // Finale "flat" is actually a full-sized image +#define CLUSTER_LOOKUPEXITTEXT 0x00000010 // Exit text is the name of a language string +#define CLUSTER_LOOKUPENTERTEXT 0x00000020 // Enter text is the name of a language string +#define CLUSTER_LOOKUPNAME 0x00000040 // Name is the name of a language string +#define CLUSTER_LOOKUPCLUSTERNAME 0x00000080 // Cluster name is the name of a language string +#define CLUSTER_ALLOWINTERMISSION 0x00000100 // Allow intermissions between levels in a hub. + +extern TArray wadlevelinfos; + +// mapname will be changed if it is a valid warptrans +bool CheckWarpTransMap (FString &mapname, bool substitute); + +cluster_info_t *FindClusterInfo (int cluster); +level_info_t *FindLevelInfo (const char *mapname, bool allowdefault=true); +level_info_t *FindLevelByNum (int num); +level_info_t *CheckLevelRedirect (level_info_t *info); + +FString CalcMapName (int episode, int level); + +void G_ParseMapInfo (FString basemapinfo); + +enum ESkillProperty +{ + SKILLP_FastMonsters, + SKILLP_Respawn, + SKILLP_RespawnLimit, + SKILLP_DisableCheats, + SKILLP_AutoUseHealth, + SKILLP_SpawnFilter, + SKILLP_EasyBossBrain, + SKILLP_ACSReturn, + SKILLP_NoPain, + SKILLP_EasyKey, + SKILLP_SlowMonsters, + SKILLP_Infight, + SKILLP_PlayerRespawn, +}; +enum EFSkillProperty // floating point properties +{ + SKILLP_AmmoFactor, + SKILLP_DropAmmoFactor, + SKILLP_ArmorFactor, + SKILLP_HealthFactor, + SKILLP_DamageFactor, + SKILLP_Aggressiveness, + SKILLP_MonsterHealth, + SKILLP_FriendlyHealth, + SKILLP_KickbackFactor, +}; + +int G_SkillProperty(ESkillProperty prop); +double G_SkillProperty(EFSkillProperty prop); +const char * G_SkillName(); + +typedef TMap SkillMenuNames; + +typedef TMap SkillActorReplacement; + +struct FSkillInfo +{ + FName Name = NAME_None; + double AmmoFactor, DoubleAmmoFactor, DropAmmoFactor; + double DamageFactor; + double ArmorFactor; + double HealthFactor; + double KickbackFactor; + + bool FastMonsters; + bool SlowMonsters; + bool DisableCheats; + bool AutoUseHealth; + + bool EasyBossBrain; + bool EasyKey; + bool NoMenu; + int RespawnCounter; + int RespawnLimit; + double Aggressiveness; + int SpawnFilter; + int ACSReturn; + FString MenuName; + FString PicName; + SkillMenuNames MenuNamesForPlayerClass; + bool MustConfirm; + FString MustConfirmText; + char Shortcut; + FString TextColor; + SkillActorReplacement Replace; + SkillActorReplacement Replaced; + double MonsterHealth; + double FriendlyHealth; + bool NoPain; + int Infighting; + bool PlayerRespawn; + + FSkillInfo() {} + FSkillInfo(const FSkillInfo &other) + { + operator=(other); + } + FSkillInfo &operator=(const FSkillInfo &other); + int GetTextColor() const; + + void SetReplacement(FName a, FName b); + FName GetReplacement(FName a); + void SetReplacedBy(FName b, FName a); + FName GetReplacedBy(FName b); +}; + +extern TArray AllSkills; +extern int DefaultSkill; + +struct FEpisode +{ + FString mEpisodeName; + FString mEpisodeMap; + FString mPicName; + char mShortcut; + bool mNoSkill; +}; + +extern TArray AllEpisodes; + +int ParseUMapInfo(int lumpnum); +void CommitUMapinfo(level_info_t *defaultinfo); + + +#endif //__G_LEVEL_H__ diff --git a/src/g_skill.cpp b/src/gamedata/g_skill.cpp similarity index 98% rename from src/g_skill.cpp rename to src/gamedata/g_skill.cpp index 287d862f7b..897ffdc76f 100644 --- a/src/g_skill.cpp +++ b/src/gamedata/g_skill.cpp @@ -393,9 +393,6 @@ int G_SkillProperty(ESkillProperty prop) return AllSkills[gameskill].NoPain; case SKILLP_Infight: - // This property also needs to consider the level flags for the same info. - if (level.flags2 & LEVEL2_TOTALINFIGHTING) return 1; - if (level.flags2 & LEVEL2_NOINFIGHTING) return -1; if (AllSkills[gameskill].Infighting == LEVEL2_TOTALINFIGHTING) return 1; if (AllSkills[gameskill].Infighting == LEVEL2_NOINFIGHTING) return -1; return infighting; diff --git a/src/gi.cpp b/src/gamedata/gi.cpp similarity index 100% rename from src/gi.cpp rename to src/gamedata/gi.cpp diff --git a/src/gi.h b/src/gamedata/gi.h similarity index 100% rename from src/gi.h rename to src/gamedata/gi.h diff --git a/src/gstrings.h b/src/gamedata/gstrings.h similarity index 100% rename from src/gstrings.h rename to src/gamedata/gstrings.h diff --git a/src/info.cpp b/src/gamedata/info.cpp similarity index 97% rename from src/info.cpp rename to src/gamedata/info.cpp index 257f6ecce2..f06e56b464 100644 --- a/src/info.cpp +++ b/src/gamedata/info.cpp @@ -395,7 +395,7 @@ void PClassActor::StaticInit() InitBotStuff(); // reinit GLOBAL static stuff from gameinfo, once classes are loaded. - E_InitStaticHandlers(false); + staticEventManager.InitStaticHandlers(false); } //========================================================================== @@ -517,7 +517,7 @@ void PClassActor::RegisterIDs() // //========================================================================== -PClassActor *PClassActor::GetReplacement(bool lookskill) +PClassActor *PClassActor::GetReplacement(FLevelLocals *Level, bool lookskill) { FName skillrepname = NAME_None; @@ -536,9 +536,11 @@ PClassActor *PClassActor::GetReplacement(bool lookskill) lookskill = false; skillrepname = NAME_None; } } - // [MK] ZScript replacement through Event Handlers, has priority over others + // [MK] ZScript replacement through Event Handlers, has priority over others. PClassActor *Replacement = ActorInfo()->Replacement; - if ( E_CheckReplacement(this,&Replacement) ) + // Level can be null when initializing dynamic lights. + // Since they only want to check for DehackedPickups this code should be skipped for them. + if (Level && Level->localEventManager->CheckReplacement(this,&Replacement) ) { // [MK] the replacement is final, so don't continue with the chain return Replacement ? Replacement : this; @@ -561,7 +563,7 @@ PClassActor *PClassActor::GetReplacement(bool lookskill) } // Now handle DECORATE replacement chain // Skill replacements are not recursive, contrarily to DECORATE replacements - rep = rep->GetReplacement(false); + rep = rep->GetReplacement(Level, false); // Reset the temporarily NULLed field ActorInfo()->Replacement = oldrep; return rep; @@ -573,7 +575,7 @@ PClassActor *PClassActor::GetReplacement(bool lookskill) // //========================================================================== -PClassActor *PClassActor::GetReplacee(bool lookskill) +PClassActor *PClassActor::GetReplacee(FLevelLocals *Level, bool lookskill) { FName skillrepname = NAME_None; @@ -598,7 +600,7 @@ PClassActor *PClassActor::GetReplacee(bool lookskill) // showing up, one can assign an Arachnotron as the one being replaced // so functions like CheckReplacee and A_BossDeath can actually work, given // modders set it up that way. - if (E_CheckReplacee(&savedrep, this)) + if (Level->localEventManager->CheckReplacee(&savedrep, this)) { // [MK] the replacement is final, so don't continue with the chain return savedrep ? savedrep : this; @@ -615,7 +617,7 @@ PClassActor *PClassActor::GetReplacee(bool lookskill) { rep = PClass::FindActor(skillrepname); } - rep = rep->GetReplacee(false); + rep = rep->GetReplacee(Level, false); ActorInfo()->Replacee = savedrep; return rep; } diff --git a/src/info.h b/src/gamedata/info.h similarity index 98% rename from src/info.h rename to src/gamedata/info.h index 184313a0eb..df294ec78d 100644 --- a/src/info.h +++ b/src/gamedata/info.h @@ -350,8 +350,8 @@ public: return i != nullptr && state >= i->OwnedStates && state < i->OwnedStates + i->NumOwnedStates; } - PClassActor *GetReplacement(bool lookskill=true); - PClassActor *GetReplacee(bool lookskill=true); + PClassActor *GetReplacement(FLevelLocals *Level, bool lookskill=true); + PClassActor *GetReplacee(FLevelLocals *Level, bool lookskill=true); // For those times when being able to scan every kind of actor is convenient static TArray AllActorClasses; diff --git a/src/keysections.cpp b/src/gamedata/keysections.cpp similarity index 89% rename from src/keysections.cpp rename to src/gamedata/keysections.cpp index 29b6b53d50..7076ebbaaa 100644 --- a/src/keysections.cpp +++ b/src/gamedata/keysections.cpp @@ -223,3 +223,45 @@ void D_LoadWadSettings () ParsingKeyConf = false; } +CCMD(clearplayerclasses) +{ + if (ParsingKeyConf) + { + PlayerClasses.Clear(); + } +} + +bool ValidatePlayerClass(PClassActor *ti, const char *name); + +CCMD(addplayerclass) +{ + if (ParsingKeyConf && argv.argc() > 1) + { + PClassActor *ti = PClass::FindActor(argv[1]); + + if (ValidatePlayerClass(ti, argv[1])) + { + FPlayerClass newclass; + + newclass.Type = ti; + newclass.Flags = 0; + + int arg = 2; + while (arg < argv.argc()) + { + if (!stricmp(argv[arg], "nomenu")) + { + newclass.Flags |= PCF_NOMENU; + } + else + { + Printf("Unknown flag '%s' for player class '%s'\n", argv[arg], argv[1]); + } + + arg++; + } + PlayerClasses.Push(newclass); + } + } +} + diff --git a/src/p_terrain.cpp b/src/gamedata/p_terrain.cpp similarity index 100% rename from src/p_terrain.cpp rename to src/gamedata/p_terrain.cpp diff --git a/src/p_terrain.h b/src/gamedata/p_terrain.h similarity index 100% rename from src/p_terrain.h rename to src/gamedata/p_terrain.h diff --git a/src/p_xlat.cpp b/src/gamedata/p_xlat.cpp similarity index 82% rename from src/p_xlat.cpp rename to src/gamedata/p_xlat.cpp index 315b64c3cb..2ab3ebf129 100644 --- a/src/p_xlat.cpp +++ b/src/gamedata/p_xlat.cpp @@ -56,8 +56,11 @@ typedef enum PushMany, } triggertype_e; -void P_TranslateLineDef (line_t *ld, maplinedef_t *mld, int lineindexforid) + +void FLevelLocals::TranslateLineDef (line_t *ld, maplinedef_t *mld, int lineindexforid) { + auto translator = Translator; + uint32_t special = mld->special; short tag = mld->tag; uint32_t flags =mld->flags; @@ -68,16 +71,16 @@ void P_TranslateLineDef (line_t *ld, maplinedef_t *mld, int lineindexforid) for(int i=0;i<16;i++) { - if ((flags & (1<LineFlagTranslations[i].ismask) { - flags1 &= LineFlagTranslations[i].newvalue; + flags1 &= translator->LineFlagTranslations[i].newvalue; } } for(int i=0;i<16;i++) { - if ((flags1 & (1<LineFlagTranslations[i].ismask) { - switch (LineFlagTranslations[i].newvalue) + switch (translator->LineFlagTranslations[i].newvalue) { case -1: passthrough = true; @@ -89,7 +92,7 @@ void P_TranslateLineDef (line_t *ld, maplinedef_t *mld, int lineindexforid) ld->alpha = 0.25; break; default: - newflags |= LineFlagTranslations[i].newvalue; + newflags |= translator->LineFlagTranslations[i].newvalue; break; } } @@ -116,7 +119,7 @@ void P_TranslateLineDef (line_t *ld, maplinedef_t *mld, int lineindexforid) } FLineTrans *linetrans = NULL; - if (special < SimpleLineTranslations.Size()) linetrans = &SimpleLineTranslations[special]; + if (special < translator->SimpleLineTranslations.Size()) linetrans = &translator->SimpleLineTranslations[special]; if (linetrans != NULL && linetrans->special != 0) { ld->special = linetrans->special; @@ -157,7 +160,7 @@ void P_TranslateLineDef (line_t *ld, maplinedef_t *mld, int lineindexforid) break; case ARGOP_Expr: { - int *xnode = &XlatExpressions[arg]; + int *xnode = &translator->XlatExpressions[arg]; state.bIsConstant = true; XlatExprEval[*xnode](&ld->args[t], xnode, &state); } @@ -176,9 +179,9 @@ void P_TranslateLineDef (line_t *ld, maplinedef_t *mld, int lineindexforid) return; } - for(int i=0;iNumBoomish;i++) { - FBoomTranslator *b = &Boomish[i]; + FBoomTranslator *b = &translator->Boomish[i]; if (special >= b->FirstLinetype && special <= b->LastLinetype) { @@ -290,82 +293,33 @@ void P_TranslateLineDef (line_t *ld, maplinedef_t *mld, int lineindexforid) memset (ld->args, 0, sizeof(ld->args)); } -// Now that ZDoom again gives the option of using Doom's original teleport -// behavior, only teleport dests in a sector with a 0 tag need to be -// given a TID. And since Doom format maps don't have TIDs, we can safely -// give them TID 1. - -void P_TranslateTeleportThings () -{ - AActor *dest; - TThinkerIterator iterator(NAME_TeleportDest); - bool foundSomething = false; - - while ( (dest = iterator.Next()) ) - { - if (!tagManager.SectorHasTags(dest->Sector)) - { - dest->tid = 1; - dest->AddToHash (); - foundSomething = true; - } - } - - if (foundSomething) - { - for (auto &line : level.lines) - { - if (line.special == Teleport) - { - if (line.args[1] == 0) - { - line.args[0] = 1; - } - } - else if (line.special == Teleport_NoFog) - { - if (line.args[2] == 0) - { - line.args[0] = 1; - } - } - else if (line.special == Teleport_ZombieChanger) - { - if (line.args[1] == 0) - { - line.args[0] = 1; - } - } - } - } -} - -int P_TranslateSectorSpecial (int special) +int FLevelLocals::TranslateSectorSpecial (int special) { int mask = 0; + auto translator = Translator; - for(int i = SectorMasks.Size()-1; i>=0; i--) + for(int i = translator->SectorMasks.Size()-1; i>=0; i--) { - int newmask = special & SectorMasks[i].mask; + int newmask = special & translator->SectorMasks[i].mask; if (newmask) { special &= ~newmask; - if (SectorMasks[i].op == 1) - newmask <<= SectorMasks[i].shift; - else if (SectorMasks[i].op == -1) - newmask >>= SectorMasks[i].shift; - else if (SectorMasks[i].op == 0 && SectorMasks[i].shift == 1) + if (translator->SectorMasks[i].op == 1) + newmask <<= translator->SectorMasks[i].shift; + else if (translator->SectorMasks[i].op == -1) + newmask >>= translator->SectorMasks[i].shift; + else if (translator->SectorMasks[i].op == 0 && translator->SectorMasks[i].shift == 1) newmask = 0; mask |= newmask; } } - if ((unsigned)special < SectorTranslations.Size()) + if ((unsigned)special < translator->SectorTranslations.Size()) { - if (!SectorTranslations[special].bitmask_allowed && mask) + if (!translator->SectorTranslations[special].bitmask_allowed && mask) special = 0; else - special = SectorTranslations[special].newtype; + special = translator->SectorTranslations[special].newtype; } return special | mask; } @@ -498,4 +452,4 @@ const int* (*XlatExprEval[XEXP_COUNT])(int *dest, const int *xnode, FXlatExprSta Expr_Or, Expr_Xor, Expr_Neg -}; \ No newline at end of file +}; diff --git a/src/resourcefiles/ancientzip.cpp b/src/gamedata/resourcefiles/ancientzip.cpp similarity index 100% rename from src/resourcefiles/ancientzip.cpp rename to src/gamedata/resourcefiles/ancientzip.cpp diff --git a/src/resourcefiles/ancientzip.h b/src/gamedata/resourcefiles/ancientzip.h similarity index 100% rename from src/resourcefiles/ancientzip.h rename to src/gamedata/resourcefiles/ancientzip.h diff --git a/src/resourcefiles/file_7z.cpp b/src/gamedata/resourcefiles/file_7z.cpp similarity index 100% rename from src/resourcefiles/file_7z.cpp rename to src/gamedata/resourcefiles/file_7z.cpp diff --git a/src/resourcefiles/file_directory.cpp b/src/gamedata/resourcefiles/file_directory.cpp similarity index 100% rename from src/resourcefiles/file_directory.cpp rename to src/gamedata/resourcefiles/file_directory.cpp diff --git a/src/resourcefiles/file_grp.cpp b/src/gamedata/resourcefiles/file_grp.cpp similarity index 100% rename from src/resourcefiles/file_grp.cpp rename to src/gamedata/resourcefiles/file_grp.cpp diff --git a/src/resourcefiles/file_lump.cpp b/src/gamedata/resourcefiles/file_lump.cpp similarity index 100% rename from src/resourcefiles/file_lump.cpp rename to src/gamedata/resourcefiles/file_lump.cpp diff --git a/src/resourcefiles/file_pak.cpp b/src/gamedata/resourcefiles/file_pak.cpp similarity index 100% rename from src/resourcefiles/file_pak.cpp rename to src/gamedata/resourcefiles/file_pak.cpp diff --git a/src/resourcefiles/file_rff.cpp b/src/gamedata/resourcefiles/file_rff.cpp similarity index 100% rename from src/resourcefiles/file_rff.cpp rename to src/gamedata/resourcefiles/file_rff.cpp diff --git a/src/resourcefiles/file_wad.cpp b/src/gamedata/resourcefiles/file_wad.cpp similarity index 99% rename from src/resourcefiles/file_wad.cpp rename to src/gamedata/resourcefiles/file_wad.cpp index c1f5b3fdba..7b8e81bf9f 100644 --- a/src/resourcefiles/file_wad.cpp +++ b/src/gamedata/resourcefiles/file_wad.cpp @@ -37,7 +37,7 @@ #include "v_text.h" #include "w_wad.h" #include "gi.h" -#include "i_system.h" +#include "doomerrors.h" //========================================================================== // diff --git a/src/resourcefiles/file_zip.cpp b/src/gamedata/resourcefiles/file_zip.cpp similarity index 99% rename from src/resourcefiles/file_zip.cpp rename to src/gamedata/resourcefiles/file_zip.cpp index 04430384e3..ac7ae7a085 100644 --- a/src/resourcefiles/file_zip.cpp +++ b/src/gamedata/resourcefiles/file_zip.cpp @@ -40,7 +40,7 @@ #include "v_text.h" #include "w_wad.h" #include "w_zip.h" -#include "i_system.h" + #include "ancientzip.h" #define BUFREADCOMMENT (0x400) diff --git a/src/resourcefiles/file_zip.h b/src/gamedata/resourcefiles/file_zip.h similarity index 100% rename from src/resourcefiles/file_zip.h rename to src/gamedata/resourcefiles/file_zip.h diff --git a/src/resourcefiles/resourcefile.cpp b/src/gamedata/resourcefiles/resourcefile.cpp similarity index 100% rename from src/resourcefiles/resourcefile.cpp rename to src/gamedata/resourcefiles/resourcefile.cpp diff --git a/src/resourcefiles/resourcefile.h b/src/gamedata/resourcefiles/resourcefile.h similarity index 100% rename from src/resourcefiles/resourcefile.h rename to src/gamedata/resourcefiles/resourcefile.h diff --git a/src/stringtable.cpp b/src/gamedata/stringtable.cpp similarity index 100% rename from src/stringtable.cpp rename to src/gamedata/stringtable.cpp diff --git a/src/stringtable.h b/src/gamedata/stringtable.h similarity index 100% rename from src/stringtable.h rename to src/gamedata/stringtable.h diff --git a/src/teaminfo.cpp b/src/gamedata/teaminfo.cpp similarity index 99% rename from src/teaminfo.cpp rename to src/gamedata/teaminfo.cpp index bde80a4318..5a70429e0d 100644 --- a/src/teaminfo.cpp +++ b/src/gamedata/teaminfo.cpp @@ -36,7 +36,7 @@ #include "c_dispatch.h" #include "gi.h" -#include "i_system.h" + #include "teaminfo.h" #include "v_font.h" #include "v_video.h" diff --git a/src/teaminfo.h b/src/gamedata/teaminfo.h similarity index 100% rename from src/teaminfo.h rename to src/gamedata/teaminfo.h diff --git a/src/textures/anim_switches.cpp b/src/gamedata/textures/anim_switches.cpp similarity index 100% rename from src/textures/anim_switches.cpp rename to src/gamedata/textures/anim_switches.cpp diff --git a/src/textures/animations.cpp b/src/gamedata/textures/animations.cpp similarity index 99% rename from src/textures/animations.cpp rename to src/gamedata/textures/animations.cpp index 031a940e7a..644718bc46 100644 --- a/src/textures/animations.cpp +++ b/src/gamedata/textures/animations.cpp @@ -34,7 +34,7 @@ #include "doomtype.h" #include "cmdlib.h" -#include "i_system.h" +#include "doomerrors.h" #include "r_sky.h" #include "m_random.h" #include "d_player.h" diff --git a/src/textures/bitmap.cpp b/src/gamedata/textures/bitmap.cpp similarity index 100% rename from src/textures/bitmap.cpp rename to src/gamedata/textures/bitmap.cpp diff --git a/src/textures/bitmap.h b/src/gamedata/textures/bitmap.h similarity index 100% rename from src/textures/bitmap.h rename to src/gamedata/textures/bitmap.h diff --git a/src/textures/formats/automaptexture.cpp b/src/gamedata/textures/formats/automaptexture.cpp similarity index 100% rename from src/textures/formats/automaptexture.cpp rename to src/gamedata/textures/formats/automaptexture.cpp diff --git a/src/textures/formats/brightmaptexture.cpp b/src/gamedata/textures/formats/brightmaptexture.cpp similarity index 99% rename from src/textures/formats/brightmaptexture.cpp rename to src/gamedata/textures/formats/brightmaptexture.cpp index d56f06010e..b9baf23839 100644 --- a/src/textures/formats/brightmaptexture.cpp +++ b/src/gamedata/textures/formats/brightmaptexture.cpp @@ -35,7 +35,7 @@ #include "doomtype.h" #include "w_wad.h" -#include "i_system.h" + #include "r_data/r_translate.h" #include "bitmap.h" #include "v_video.h" diff --git a/src/textures/formats/buildtexture.cpp b/src/gamedata/textures/formats/buildtexture.cpp similarity index 100% rename from src/textures/formats/buildtexture.cpp rename to src/gamedata/textures/formats/buildtexture.cpp diff --git a/src/textures/formats/canvastexture.cpp b/src/gamedata/textures/formats/canvastexture.cpp similarity index 100% rename from src/textures/formats/canvastexture.cpp rename to src/gamedata/textures/formats/canvastexture.cpp diff --git a/src/textures/formats/ddstexture.cpp b/src/gamedata/textures/formats/ddstexture.cpp similarity index 100% rename from src/textures/formats/ddstexture.cpp rename to src/gamedata/textures/formats/ddstexture.cpp diff --git a/src/textures/formats/emptytexture.cpp b/src/gamedata/textures/formats/emptytexture.cpp similarity index 100% rename from src/textures/formats/emptytexture.cpp rename to src/gamedata/textures/formats/emptytexture.cpp diff --git a/src/textures/formats/flattexture.cpp b/src/gamedata/textures/formats/flattexture.cpp similarity index 100% rename from src/textures/formats/flattexture.cpp rename to src/gamedata/textures/formats/flattexture.cpp diff --git a/src/textures/formats/fontchars.cpp b/src/gamedata/textures/formats/fontchars.cpp similarity index 99% rename from src/textures/formats/fontchars.cpp rename to src/gamedata/textures/formats/fontchars.cpp index afb6434877..6ff30ab8c6 100644 --- a/src/textures/formats/fontchars.cpp +++ b/src/gamedata/textures/formats/fontchars.cpp @@ -42,6 +42,7 @@ #include "image.h" #include "imagehelpers.h" #include "fontchars.h" +#include "doomerrors.h" //========================================================================== // diff --git a/src/textures/formats/fontchars.h b/src/gamedata/textures/formats/fontchars.h similarity index 100% rename from src/textures/formats/fontchars.h rename to src/gamedata/textures/formats/fontchars.h diff --git a/src/textures/formats/imgztexture.cpp b/src/gamedata/textures/formats/imgztexture.cpp similarity index 100% rename from src/textures/formats/imgztexture.cpp rename to src/gamedata/textures/formats/imgztexture.cpp diff --git a/src/textures/formats/jpegtexture.cpp b/src/gamedata/textures/formats/jpegtexture.cpp similarity index 100% rename from src/textures/formats/jpegtexture.cpp rename to src/gamedata/textures/formats/jpegtexture.cpp diff --git a/src/textures/formats/md5check.cpp b/src/gamedata/textures/formats/md5check.cpp similarity index 100% rename from src/textures/formats/md5check.cpp rename to src/gamedata/textures/formats/md5check.cpp diff --git a/src/textures/formats/multipatchtexture.cpp b/src/gamedata/textures/formats/multipatchtexture.cpp similarity index 99% rename from src/textures/formats/multipatchtexture.cpp rename to src/gamedata/textures/formats/multipatchtexture.cpp index 165a493445..8166db6459 100644 --- a/src/textures/formats/multipatchtexture.cpp +++ b/src/gamedata/textures/formats/multipatchtexture.cpp @@ -37,7 +37,7 @@ #include "doomtype.h" #include "files.h" #include "w_wad.h" -#include "i_system.h" + #include "gi.h" #include "st_start.h" #include "sc_man.h" diff --git a/src/textures/formats/multipatchtexture.h b/src/gamedata/textures/formats/multipatchtexture.h similarity index 100% rename from src/textures/formats/multipatchtexture.h rename to src/gamedata/textures/formats/multipatchtexture.h diff --git a/src/textures/formats/patchtexture.cpp b/src/gamedata/textures/formats/patchtexture.cpp similarity index 100% rename from src/textures/formats/patchtexture.cpp rename to src/gamedata/textures/formats/patchtexture.cpp diff --git a/src/textures/formats/pcxtexture.cpp b/src/gamedata/textures/formats/pcxtexture.cpp similarity index 100% rename from src/textures/formats/pcxtexture.cpp rename to src/gamedata/textures/formats/pcxtexture.cpp diff --git a/src/textures/formats/pngtexture.cpp b/src/gamedata/textures/formats/pngtexture.cpp similarity index 100% rename from src/textures/formats/pngtexture.cpp rename to src/gamedata/textures/formats/pngtexture.cpp diff --git a/src/textures/formats/rawpagetexture.cpp b/src/gamedata/textures/formats/rawpagetexture.cpp similarity index 100% rename from src/textures/formats/rawpagetexture.cpp rename to src/gamedata/textures/formats/rawpagetexture.cpp diff --git a/src/textures/formats/shadertexture.cpp b/src/gamedata/textures/formats/shadertexture.cpp similarity index 100% rename from src/textures/formats/shadertexture.cpp rename to src/gamedata/textures/formats/shadertexture.cpp diff --git a/src/textures/formats/tgatexture.cpp b/src/gamedata/textures/formats/tgatexture.cpp similarity index 100% rename from src/textures/formats/tgatexture.cpp rename to src/gamedata/textures/formats/tgatexture.cpp diff --git a/src/textures/hires/hirestex.cpp b/src/gamedata/textures/hires/hirestex.cpp similarity index 100% rename from src/textures/hires/hirestex.cpp rename to src/gamedata/textures/hires/hirestex.cpp diff --git a/src/textures/hires/hqnx/common.h b/src/gamedata/textures/hires/hqnx/common.h similarity index 100% rename from src/textures/hires/hqnx/common.h rename to src/gamedata/textures/hires/hqnx/common.h diff --git a/src/textures/hires/hqnx/hq2x.cpp b/src/gamedata/textures/hires/hqnx/hq2x.cpp similarity index 100% rename from src/textures/hires/hqnx/hq2x.cpp rename to src/gamedata/textures/hires/hqnx/hq2x.cpp diff --git a/src/textures/hires/hqnx/hq3x.cpp b/src/gamedata/textures/hires/hqnx/hq3x.cpp similarity index 100% rename from src/textures/hires/hqnx/hq3x.cpp rename to src/gamedata/textures/hires/hqnx/hq3x.cpp diff --git a/src/textures/hires/hqnx/hq4x.cpp b/src/gamedata/textures/hires/hqnx/hq4x.cpp similarity index 100% rename from src/textures/hires/hqnx/hq4x.cpp rename to src/gamedata/textures/hires/hqnx/hq4x.cpp diff --git a/src/textures/hires/hqnx/hqx.h b/src/gamedata/textures/hires/hqnx/hqx.h similarity index 100% rename from src/textures/hires/hqnx/hqx.h rename to src/gamedata/textures/hires/hqnx/hqx.h diff --git a/src/textures/hires/hqnx/init.cpp b/src/gamedata/textures/hires/hqnx/init.cpp similarity index 100% rename from src/textures/hires/hqnx/init.cpp rename to src/gamedata/textures/hires/hqnx/init.cpp diff --git a/src/textures/hires/hqnx_asm/hq2x_asm.cpp b/src/gamedata/textures/hires/hqnx_asm/hq2x_asm.cpp similarity index 100% rename from src/textures/hires/hqnx_asm/hq2x_asm.cpp rename to src/gamedata/textures/hires/hqnx_asm/hq2x_asm.cpp diff --git a/src/textures/hires/hqnx_asm/hq3x_asm.cpp b/src/gamedata/textures/hires/hqnx_asm/hq3x_asm.cpp similarity index 100% rename from src/textures/hires/hqnx_asm/hq3x_asm.cpp rename to src/gamedata/textures/hires/hqnx_asm/hq3x_asm.cpp diff --git a/src/textures/hires/hqnx_asm/hq4x_asm.cpp b/src/gamedata/textures/hires/hqnx_asm/hq4x_asm.cpp similarity index 100% rename from src/textures/hires/hqnx_asm/hq4x_asm.cpp rename to src/gamedata/textures/hires/hqnx_asm/hq4x_asm.cpp diff --git a/src/textures/hires/hqnx_asm/hqnx_asm.h b/src/gamedata/textures/hires/hqnx_asm/hqnx_asm.h similarity index 100% rename from src/textures/hires/hqnx_asm/hqnx_asm.h rename to src/gamedata/textures/hires/hqnx_asm/hqnx_asm.h diff --git a/src/textures/hires/hqnx_asm/hqnx_asm_Image.cpp b/src/gamedata/textures/hires/hqnx_asm/hqnx_asm_Image.cpp similarity index 100% rename from src/textures/hires/hqnx_asm/hqnx_asm_Image.cpp rename to src/gamedata/textures/hires/hqnx_asm/hqnx_asm_Image.cpp diff --git a/src/textures/hires/hqnx_asm/hqnx_asm_Image.h b/src/gamedata/textures/hires/hqnx_asm/hqnx_asm_Image.h similarity index 100% rename from src/textures/hires/hqnx_asm/hqnx_asm_Image.h rename to src/gamedata/textures/hires/hqnx_asm/hqnx_asm_Image.h diff --git a/src/textures/hires/hqresize.cpp b/src/gamedata/textures/hires/hqresize.cpp similarity index 100% rename from src/textures/hires/hqresize.cpp rename to src/gamedata/textures/hires/hqresize.cpp diff --git a/src/textures/hires/xbr/xbrz.cpp b/src/gamedata/textures/hires/xbr/xbrz.cpp similarity index 100% rename from src/textures/hires/xbr/xbrz.cpp rename to src/gamedata/textures/hires/xbr/xbrz.cpp diff --git a/src/textures/hires/xbr/xbrz.h b/src/gamedata/textures/hires/xbr/xbrz.h similarity index 100% rename from src/textures/hires/xbr/xbrz.h rename to src/gamedata/textures/hires/xbr/xbrz.h diff --git a/src/textures/hires/xbr/xbrz_config.h b/src/gamedata/textures/hires/xbr/xbrz_config.h similarity index 100% rename from src/textures/hires/xbr/xbrz_config.h rename to src/gamedata/textures/hires/xbr/xbrz_config.h diff --git a/src/textures/hires/xbr/xbrz_config_old.h b/src/gamedata/textures/hires/xbr/xbrz_config_old.h similarity index 100% rename from src/textures/hires/xbr/xbrz_config_old.h rename to src/gamedata/textures/hires/xbr/xbrz_config_old.h diff --git a/src/textures/hires/xbr/xbrz_old.cpp b/src/gamedata/textures/hires/xbr/xbrz_old.cpp similarity index 100% rename from src/textures/hires/xbr/xbrz_old.cpp rename to src/gamedata/textures/hires/xbr/xbrz_old.cpp diff --git a/src/textures/hires/xbr/xbrz_old.h b/src/gamedata/textures/hires/xbr/xbrz_old.h similarity index 100% rename from src/textures/hires/xbr/xbrz_old.h rename to src/gamedata/textures/hires/xbr/xbrz_old.h diff --git a/src/textures/hires/xbr/xbrz_tools.h b/src/gamedata/textures/hires/xbr/xbrz_tools.h similarity index 100% rename from src/textures/hires/xbr/xbrz_tools.h rename to src/gamedata/textures/hires/xbr/xbrz_tools.h diff --git a/src/textures/image.cpp b/src/gamedata/textures/image.cpp similarity index 100% rename from src/textures/image.cpp rename to src/gamedata/textures/image.cpp diff --git a/src/textures/image.h b/src/gamedata/textures/image.h similarity index 100% rename from src/textures/image.h rename to src/gamedata/textures/image.h diff --git a/src/textures/imagehelpers.h b/src/gamedata/textures/imagehelpers.h similarity index 100% rename from src/textures/imagehelpers.h rename to src/gamedata/textures/imagehelpers.h diff --git a/src/textures/imagetexture.cpp b/src/gamedata/textures/imagetexture.cpp similarity index 100% rename from src/textures/imagetexture.cpp rename to src/gamedata/textures/imagetexture.cpp diff --git a/src/textures/multipatchtexturebuilder.cpp b/src/gamedata/textures/multipatchtexturebuilder.cpp similarity index 99% rename from src/textures/multipatchtexturebuilder.cpp rename to src/gamedata/textures/multipatchtexturebuilder.cpp index 4675220f55..0bc822a05b 100644 --- a/src/textures/multipatchtexturebuilder.cpp +++ b/src/gamedata/textures/multipatchtexturebuilder.cpp @@ -38,7 +38,7 @@ #include "doomtype.h" #include "files.h" #include "w_wad.h" -#include "i_system.h" + #include "gi.h" #include "st_start.h" #include "sc_man.h" diff --git a/src/textures/skyboxtexture.cpp b/src/gamedata/textures/skyboxtexture.cpp similarity index 100% rename from src/textures/skyboxtexture.cpp rename to src/gamedata/textures/skyboxtexture.cpp diff --git a/src/textures/skyboxtexture.h b/src/gamedata/textures/skyboxtexture.h similarity index 100% rename from src/textures/skyboxtexture.h rename to src/gamedata/textures/skyboxtexture.h diff --git a/src/textures/texture.cpp b/src/gamedata/textures/texture.cpp similarity index 99% rename from src/textures/texture.cpp rename to src/gamedata/textures/texture.cpp index 118bbf5bc1..85d319ffce 100644 --- a/src/textures/texture.cpp +++ b/src/gamedata/textures/texture.cpp @@ -38,7 +38,7 @@ #include "files.h" #include "w_wad.h" #include "templates.h" -#include "i_system.h" + #include "r_data/r_translate.h" #include "bitmap.h" #include "colormatcher.h" @@ -870,7 +870,7 @@ float FTexCoordInfo::TextureAdjustWidth() const // //=========================================================================== -void FTexCoordInfo::GetFromTexture(FTexture *tex, float x, float y) +void FTexCoordInfo::GetFromTexture(FTexture *tex, float x, float y, bool forceworldpanning) { if (x == 1.f) { @@ -904,7 +904,7 @@ void FTexCoordInfo::GetFromTexture(FTexture *tex, float x, float y) mScale.Y = -mScale.Y; mRenderHeight = -mRenderHeight; } - mWorldPanning = tex->bWorldPanning || (level.flags3 & LEVEL3_FORCEWORLDPANNING); + mWorldPanning = tex->bWorldPanning || forceworldpanning; mWidth = tex->GetWidth(); } diff --git a/src/textures/texturemanager.cpp b/src/gamedata/textures/texturemanager.cpp similarity index 99% rename from src/textures/texturemanager.cpp rename to src/gamedata/textures/texturemanager.cpp index 27dc4d6964..98b8197bce 100644 --- a/src/textures/texturemanager.cpp +++ b/src/gamedata/textures/texturemanager.cpp @@ -38,7 +38,7 @@ #include "doomstat.h" #include "w_wad.h" #include "templates.h" -#include "i_system.h" + #include "r_data/r_translate.h" #include "r_data/sprites.h" #include "c_dispatch.h" diff --git a/src/textures/textures.h b/src/gamedata/textures/textures.h similarity index 99% rename from src/textures/textures.h rename to src/gamedata/textures/textures.h index 52ed052db5..f23d3c3d6b 100644 --- a/src/textures/textures.h +++ b/src/gamedata/textures/textures.h @@ -755,7 +755,7 @@ struct FTexCoordInfo float RowOffset(float ofs) const; float TextureOffset(float ofs) const; float TextureAdjustWidth() const; - void GetFromTexture(FTexture *tex, float x, float y); + void GetFromTexture(FTexture *tex, float x, float y, bool forceworldpanning); }; diff --git a/src/umapinfo.cpp b/src/gamedata/umapinfo.cpp similarity index 97% rename from src/umapinfo.cpp rename to src/gamedata/umapinfo.cpp index 3c15176322..ac82ff8e2f 100644 --- a/src/umapinfo.cpp +++ b/src/gamedata/umapinfo.cpp @@ -273,14 +273,10 @@ static int ParseStandardProperty(FScanner &scanner, UMapEntry *mape) // allow no 0-tag specials here, unless a level exit. if (tag != 0 || special == 11 || special == 51 || special == 52 || special == 124) { + // This cannot be evaluated here because this needs to be done in the context of the level being used. FSpecialAction & bossact = mape->BossActions[mape->BossActions.Reserve(1)]; - line_t line; - maplinedef_t mld; - mld.special = special; - mld.tag = tag; - P_TranslateLineDef(&line, &mld); - bossact = { type, (uint8_t)line.special, {line.args[0], line.args[1],line.args[2],line.args[3],line.args[4]} }; - } + bossact = { type, special | 0x40000000, {tag} }; + }; } } else @@ -329,8 +325,6 @@ static int ParseMapEntry(FScanner &scanner, UMapEntry *val) int ParseUMapInfo(int lumpnum) { - P_LoadTranslator(gameinfo.translator); - FScanner scanner(lumpnum); unsigned int i; @@ -473,4 +467,4 @@ void CommitUMapinfo(level_info_t *defaultinfo) // All done. If we get here again, start fresh. Maps.Clear(); Maps.ShrinkToFit(); -} \ No newline at end of file +} diff --git a/src/w_wad.cpp b/src/gamedata/w_wad.cpp similarity index 100% rename from src/w_wad.cpp rename to src/gamedata/w_wad.cpp diff --git a/src/w_wad.h b/src/gamedata/w_wad.h similarity index 100% rename from src/w_wad.h rename to src/gamedata/w_wad.h diff --git a/src/w_zip.h b/src/gamedata/w_zip.h similarity index 100% rename from src/w_zip.h rename to src/gamedata/w_zip.h diff --git a/src/xlat/parse_xlat.cpp b/src/gamedata/xlat/parse_xlat.cpp similarity index 81% rename from src/xlat/parse_xlat.cpp rename to src/gamedata/xlat/parse_xlat.cpp index 3e7f02d01b..44771b00a5 100644 --- a/src/xlat/parse_xlat.cpp +++ b/src/gamedata/xlat/parse_xlat.cpp @@ -51,14 +51,7 @@ enum DEFINE_TOKEN_TRANS(XLAT_) -static FString LastTranslator; -TAutoGrowArray SimpleLineTranslations; -TArray XlatExpressions; -FBoomTranslator Boomish[MAX_BOOMISH]; -int NumBoomish; -TAutoGrowArray SectorTranslations; -TArray SectorMasks; -FLineFlagTrans LineFlagTranslations[16]; +TMap translators; struct SpecialArgs @@ -102,9 +95,10 @@ struct ParseBoomArg struct XlatParseContext : public FParseContext { - XlatParseContext(void *parser, ParseFunc parse, int *tt) + XlatParseContext(void *parser, ParseFunc parse, int *tt, FTranslator *trans) : FParseContext(parser, parse, tt) { + Translator = trans; DefiningLineType = -1; } @@ -152,6 +146,7 @@ struct XlatParseContext : public FParseContext } int DefiningLineType; + FTranslator *Translator; }; #include "xlat_parser.c" @@ -163,36 +158,23 @@ struct XlatParseContext : public FParseContext // //========================================================================== -void P_ClearTranslator() +FTranslator *P_LoadTranslator(const char *lumpname) { - SimpleLineTranslations.Clear(); - XlatExpressions.Clear(); - NumBoomish = 0; - SectorTranslations.Clear(); - SectorMasks.Clear(); - memset(LineFlagTranslations, 0, sizeof(LineFlagTranslations)); - LastTranslator = ""; -} - -void P_LoadTranslator(const char *lumpname) -{ - // Only read the lump if it differs from the previous one. - if (LastTranslator.CompareNoCase(lumpname)) + FName fname = lumpname; + auto translator = &translators[fname]; + if (!translator->loaded) { - // Clear the old data before parsing the lump. - P_ClearTranslator(); - void *pParser = XlatParseAlloc(malloc); - XlatParseContext context(pParser, XlatParse, TokenTrans); - + XlatParseContext context(pParser, XlatParse, TokenTrans, translator); context.ParseLump(lumpname); FParseToken tok; tok.val=0; XlatParse(pParser, 0, tok, &context); XlatParseFree(pParser, free); - LastTranslator = lumpname; + translator->loaded = true; } + return translator; } diff --git a/src/parsecontext.cpp b/src/gamedata/xlat/parsecontext.cpp similarity index 100% rename from src/parsecontext.cpp rename to src/gamedata/xlat/parsecontext.cpp diff --git a/src/parsecontext.h b/src/gamedata/xlat/parsecontext.h similarity index 100% rename from src/parsecontext.h rename to src/gamedata/xlat/parsecontext.h diff --git a/src/xlat/xlat.h b/src/gamedata/xlat/xlat.h similarity index 76% rename from src/xlat/xlat.h rename to src/gamedata/xlat/xlat.h index cf5fc70895..f488704ff1 100644 --- a/src/xlat/xlat.h +++ b/src/gamedata/xlat/xlat.h @@ -37,6 +37,10 @@ enum XEXP_COUNT }; +struct FXlatExprState; + +extern const int* (*XlatExprEval[XEXP_COUNT])(int *dest, const int *xnode, FXlatExprState *state); + struct FLineTrans { int special; @@ -76,9 +80,9 @@ struct FBoomArg struct FBoomTranslator { - uint16_t FirstLinetype; - uint16_t LastLinetype; - uint8_t NewSpecial; + uint16_t FirstLinetype = 0; + uint16_t LastLinetype = 0; + uint8_t NewSpecial = 0; TArray Args; } ; @@ -115,13 +119,18 @@ struct FXlatExprState }; -extern TAutoGrowArray SimpleLineTranslations; -extern TArray XlatExpressions; -extern FBoomTranslator Boomish[MAX_BOOMISH]; -extern int NumBoomish; -extern TAutoGrowArray SectorTranslations; -extern TArray SectorMasks; -extern FLineFlagTrans LineFlagTranslations[16]; -extern const int* (*XlatExprEval[XEXP_COUNT])(int *dest, const int *xnode, FXlatExprState *state); +struct FTranslator +{ + bool loaded = false; + TAutoGrowArray SimpleLineTranslations; + TArray XlatExpressions; + FBoomTranslator Boomish[MAX_BOOMISH]; + int NumBoomish = 0; + TAutoGrowArray SectorTranslations; + TArray SectorMasks; + FLineFlagTrans LineFlagTranslations[16] = {}; +}; + +FTranslator *P_LoadTranslator(const char *lumpname); #endif diff --git a/src/xlat/xlat_parser.y b/src/gamedata/xlat/xlat_parser.y similarity index 72% rename from src/xlat/xlat_parser.y rename to src/gamedata/xlat/xlat_parser.y index e92107f7b4..6c6575ab25 100644 --- a/src/xlat/xlat_parser.y +++ b/src/gamedata/xlat/xlat_parser.y @@ -130,7 +130,7 @@ linetype_exp(Z) ::= expr(A). linetype_declaration ::= linetype_exp(linetype) EQUALS expr(flags) COMMA expr(special) LPAREN special_args(arg) RPAREN. { - SimpleLineTranslations.SetVal(linetype, + static_cast(context)->Translator->SimpleLineTranslations.SetVal(linetype, FLineTrans(special&0xffff, flags+arg.addflags, arg.args[0], arg.args[1], arg.args[2], arg.args[3], arg.args[4])); static_cast(context)->DefiningLineType = -1; } @@ -142,17 +142,17 @@ linetype_declaration ::= linetype_exp EQUALS expr COMMA SYM(S) LPAREN special_ar } %type exp_with_tag {int} -exp_with_tag(A) ::= NUM(B). { XlatExpressions.Push(B.val); A = XlatExpressions.Push(XEXP_Const); } -exp_with_tag(A) ::= TAG. { A = XlatExpressions.Push(XEXP_Tag); } -exp_with_tag(A) ::= exp_with_tag PLUS exp_with_tag. { A = XlatExpressions.Push(XEXP_Add); } -exp_with_tag(A) ::= exp_with_tag MINUS exp_with_tag. { A = XlatExpressions.Push(XEXP_Sub); } -exp_with_tag(A) ::= exp_with_tag MULTIPLY exp_with_tag. { A = XlatExpressions.Push(XEXP_Mul); } -exp_with_tag(A) ::= exp_with_tag DIVIDE exp_with_tag. { A = XlatExpressions.Push(XEXP_Div); } -exp_with_tag(A) ::= exp_with_tag MODULUS exp_with_tag. { A = XlatExpressions.Push(XEXP_Mod); } -exp_with_tag(A) ::= exp_with_tag OR exp_with_tag. { A = XlatExpressions.Push(XEXP_Or); } -exp_with_tag(A) ::= exp_with_tag AND exp_with_tag. { A = XlatExpressions.Push(XEXP_And); } -exp_with_tag(A) ::= exp_with_tag XOR exp_with_tag. { A = XlatExpressions.Push(XEXP_Xor); } -exp_with_tag(A) ::= MINUS exp_with_tag. [NEG] { A = XlatExpressions.Push(XEXP_Neg); } +exp_with_tag(A) ::= NUM(B). { static_cast(context)->Translator->XlatExpressions.Push(B.val); A = static_cast(context)->Translator->XlatExpressions.Push(XEXP_Const); } +exp_with_tag(A) ::= TAG. { A = static_cast(context)->Translator->XlatExpressions.Push(XEXP_Tag); } +exp_with_tag(A) ::= exp_with_tag PLUS exp_with_tag. { A = static_cast(context)->Translator->XlatExpressions.Push(XEXP_Add); } +exp_with_tag(A) ::= exp_with_tag MINUS exp_with_tag. { A = static_cast(context)->Translator->XlatExpressions.Push(XEXP_Sub); } +exp_with_tag(A) ::= exp_with_tag MULTIPLY exp_with_tag. { A = static_cast(context)->Translator->XlatExpressions.Push(XEXP_Mul); } +exp_with_tag(A) ::= exp_with_tag DIVIDE exp_with_tag. { A = static_cast(context)->Translator->XlatExpressions.Push(XEXP_Div); } +exp_with_tag(A) ::= exp_with_tag MODULUS exp_with_tag. { A = static_cast(context)->Translator->XlatExpressions.Push(XEXP_Mod); } +exp_with_tag(A) ::= exp_with_tag OR exp_with_tag. { A = static_cast(context)->Translator->XlatExpressions.Push(XEXP_Or); } +exp_with_tag(A) ::= exp_with_tag AND exp_with_tag. { A = static_cast(context)->Translator->XlatExpressions.Push(XEXP_And); } +exp_with_tag(A) ::= exp_with_tag XOR exp_with_tag. { A = static_cast(context)->Translator->XlatExpressions.Push(XEXP_Xor); } +exp_with_tag(A) ::= MINUS exp_with_tag. [NEG] { A = static_cast(context)->Translator->XlatExpressions.Push(XEXP_Neg); } exp_with_tag(A) ::= LPAREN exp_with_tag(B) RPAREN. { A = B; } @@ -160,11 +160,11 @@ exp_with_tag(A) ::= LPAREN exp_with_tag(B) RPAREN. { A = B; } special_arg(Z) ::= exp_with_tag(A). { - if (XlatExpressions[A] == XEXP_Tag) + if (static_cast(context)->Translator->XlatExpressions[A] == XEXP_Tag) { // Store tags directly Z.arg = 0; Z.argop = ARGOP_Tag; - XlatExpressions.Delete(A); + static_cast(context)->Translator->XlatExpressions.Delete(A); } else { // Try and evaluate it. If it's a constant, store it and erase the @@ -178,15 +178,15 @@ special_arg(Z) ::= exp_with_tag(A). state.linetype = static_cast(context)->DefiningLineType; state.tag = 0; state.bIsConstant = true; - xnode = &XlatExpressions[A]; + xnode = &static_cast(context)->Translator->XlatExpressions[A]; endpt = XlatExprEval[*xnode](&val, xnode, &state); if (state.bIsConstant) { Z.arg = val; Z.argop = ARGOP_Const; endpt++; - assert(endpt >= &XlatExpressions[0]); - XlatExpressions.Resize((unsigned)(endpt - &XlatExpressions[0])); + assert(endpt >= &static_cast(context)->Translator->XlatExpressions[0]); + static_cast(context)->Translator->XlatExpressions.Resize((unsigned)(endpt - &static_cast(context)->Translator->XlatExpressions[0])); } else { @@ -257,7 +257,7 @@ boom_declaration ::= LBRACKET expr(special) RBRACKET LPAREN expr(firsttype) COMM int i; MoreLines *probe; - if (NumBoomish == MAX_BOOMISH) + if (static_cast(context)->Translator->NumBoomish == MAX_BOOMISH) { MoreLines *probe = stores; @@ -271,18 +271,18 @@ boom_declaration ::= LBRACKET expr(special) RBRACKET LPAREN expr(firsttype) COMM } else { - Boomish[NumBoomish].FirstLinetype = firsttype; - Boomish[NumBoomish].LastLinetype = lasttype; - Boomish[NumBoomish].NewSpecial = special; + static_cast(context)->Translator->Boomish[static_cast(context)->Translator->NumBoomish].FirstLinetype = firsttype; + static_cast(context)->Translator->Boomish[static_cast(context)->Translator->NumBoomish].LastLinetype = lasttype; + static_cast(context)->Translator->Boomish[static_cast(context)->Translator->NumBoomish].NewSpecial = special; for (i = 0, probe = stores; probe != NULL; i++) { MoreLines *next = probe->next; - Boomish[NumBoomish].Args.Push(probe->arg); + static_cast(context)->Translator->Boomish[static_cast(context)->Translator->NumBoomish].Args.Push(probe->arg); delete probe; probe = next; } - NumBoomish++; + static_cast(context)->Translator->NumBoomish++; } } @@ -379,7 +379,7 @@ maxlinespecial_def ::= MAXLINESPECIAL EQUALS expr(mx) SEMICOLON. { // Just kill all specials higher than the max. // If the translator wants to redefine some later, just let it. - SimpleLineTranslations.Resize(mx+1); + static_cast(context)->Translator->SimpleLineTranslations.Resize(mx+1); } //========================================================================== @@ -393,7 +393,7 @@ maxlinespecial_def ::= MAXLINESPECIAL EQUALS expr(mx) SEMICOLON. sector_declaration ::= SECTOR expr(from) EQUALS expr(to) SEMICOLON. { FSectorTrans tr(to, true); - SectorTranslations.SetVal(from, tr); + static_cast(context)->Translator->SectorTranslations.SetVal(from, tr); } sector_declaration ::= SECTOR expr EQUALS SYM(sy) SEMICOLON. @@ -404,25 +404,25 @@ sector_declaration ::= SECTOR expr EQUALS SYM(sy) SEMICOLON. sector_declaration ::= SECTOR expr(from) EQUALS expr(to) NOBITMASK SEMICOLON. { FSectorTrans tr(to, false); - SectorTranslations.SetVal(from, tr); + static_cast(context)->Translator->SectorTranslations.SetVal(from, tr); } sector_bitmask ::= SECTOR BITMASK expr(mask) sector_op(op) expr(shift) SEMICOLON. { FSectorMask sm = { mask, op, shift}; - SectorMasks.Push(sm); + static_cast(context)->Translator->SectorMasks.Push(sm); } sector_bitmask ::= SECTOR BITMASK expr(mask) SEMICOLON. { FSectorMask sm = { mask, 0, 0}; - SectorMasks.Push(sm); + static_cast(context)->Translator->SectorMasks.Push(sm); } sector_bitmask ::= SECTOR BITMASK expr(mask) CLEAR SEMICOLON. { FSectorMask sm = { mask, 0, 1}; - SectorMasks.Push(sm); + static_cast(context)->Translator->SectorMasks.Push(sm); } sector_op(A) ::= LSHASSIGN. { A = 1; } @@ -434,8 +434,8 @@ lineflag_declaration ::= LINEFLAG expr(from) EQUALS expr(to) SEMICOLON. { if (from >= 0 && from < 16) { - LineFlagTranslations[from].newvalue = to; - LineFlagTranslations[from].ismask = false; + static_cast(context)->Translator->LineFlagTranslations[from].newvalue = to; + static_cast(context)->Translator->LineFlagTranslations[from].ismask = false; } } @@ -443,7 +443,7 @@ lineflag_declaration ::= LINEFLAG expr(from) AND expr(mask) SEMICOLON. { if (from >= 0 && from < 16) { - LineFlagTranslations[from].newvalue = mask; - LineFlagTranslations[from].ismask = true; + static_cast(context)->Translator->LineFlagTranslations[from].newvalue = mask; + static_cast(context)->Translator->LineFlagTranslations[from].ismask = true; } } \ No newline at end of file diff --git a/src/hu_scores.cpp b/src/hu_scores.cpp index a4a261a77d..26252c7bb4 100644 --- a/src/hu_scores.cpp +++ b/src/hu_scores.cpp @@ -49,6 +49,7 @@ #include "d_net.h" #include "c_dispatch.h" #include "g_levellocals.h" +#include "g_game.h" #include "sbar.h" // MACROS ------------------------------------------------------------------ @@ -368,7 +369,7 @@ static void HU_DrawTimeRemaining (int y) if (deathmatch && timelimit && gamestate == GS_LEVEL) { char str[80]; - int timeleft = (int)(timelimit * TICRATE * 60) - level.maptime; + int timeleft = (int)(timelimit * TICRATE * 60) - primaryLevel->maptime; int hours, minutes, seconds; if (timeleft < 0) diff --git a/src/i_net.cpp b/src/i_net.cpp index 5c74c87aed..4cbf1df23e 100644 --- a/src/i_net.cpp +++ b/src/i_net.cpp @@ -61,6 +61,7 @@ #include "d_player.h" #include "st_start.h" #include "m_misc.h" +#include "doomerrors.h" #include "i_net.h" diff --git a/src/intermission/intermission.cpp b/src/intermission/intermission.cpp index 47d9cec1bd..a01f5325a0 100644 --- a/src/intermission/intermission.cpp +++ b/src/intermission/intermission.cpp @@ -33,7 +33,7 @@ */ #include "doomtype.h" -#include "doomstat.h" +#include "g_game.h" #include "d_event.h" #include "w_wad.h" #include "gi.h" @@ -787,8 +787,7 @@ void DIntermissionController::Ticker () switch (mGameState) { case FSTATE_InLevel: - if (level.cdtrack == 0 || !S_ChangeCDMusic (level.cdtrack, level.cdid)) - S_ChangeMusic (level.Music, level.musicorder); + primaryLevel->SetMusic(); gamestate = GS_LEVEL; wipegamestate = GS_LEVEL; P_ResumeConversation (); diff --git a/src/intermission/intermission.h b/src/intermission/intermission.h index f159ebb7ab..435b38ed6c 100644 --- a/src/intermission/intermission.h +++ b/src/intermission/intermission.h @@ -7,6 +7,7 @@ #include "textures/textures.h" #include "s_sound.h" #include "v_font.h" +#include "g_game.h" struct event_t; diff --git a/src/intermission/intermission_parse.cpp b/src/intermission/intermission_parse.cpp index c0fa4a337a..50fd050a2d 100644 --- a/src/intermission/intermission_parse.cpp +++ b/src/intermission/intermission_parse.cpp @@ -37,7 +37,7 @@ #include "intermission/intermission.h" #include "g_level.h" #include "w_wad.h" - + static void ReplaceIntermission(FName intname,FIntermissionDescriptor *desc) { diff --git a/src/m_cheat.cpp b/src/m_cheat.cpp index 1ce0fac07b..6d47dd2fc6 100644 --- a/src/m_cheat.cpp +++ b/src/m_cheat.cpp @@ -54,6 +54,8 @@ #include "g_levellocals.h" #include "vm.h" +uint8_t globalfreeze, globalchangefreeze; // user's freeze state. + // [RH] Actually handle the cheat. The cheat code in st_stuff.c now just // writes some bytes to the network data stream, and the network code // later calls us. @@ -287,7 +289,10 @@ void cht_DoCheat (player_t *player, int cheat) if (i == 4) { - level.flags2 ^= LEVEL2_ALLMAP; + for (auto Level : AllLevels()) + { + Level->flags2 ^= LEVEL2_ALLMAP; + } } else if (player->mo != NULL && player->health >= 0) { @@ -319,7 +324,7 @@ void cht_DoCheat (player_t *player, int cheat) case CHT_MASSACRE: case CHT_MASSACRE2: { - int killcount = P_Massacre (cheat == CHT_MASSACRE2); + int killcount = primaryLevel->Massacre (cheat == CHT_MASSACRE2); // killough 3/22/98: make more intelligent about plural // Ty 03/27/98 - string(s) *not* externalized mysnprintf (msgbuild, countof(msgbuild), "%d %s%s Killed", killcount, @@ -511,8 +516,8 @@ void cht_DoCheat (player_t *player, int cheat) break; case CHT_FREEZE: - bglobal.changefreeze ^= 1; - if (bglobal.freeze ^ bglobal.changefreeze) + globalchangefreeze ^= 1; + if (globalfreeze ^ globalchangefreeze) { msg = GStrings("TXT_FREEZEON"); } @@ -597,6 +602,7 @@ class DSuicider : public DThinker public: TObjPtr Pawn; + void Construct() {} void Tick() { Pawn->flags |= MF_SHOOTABLE; @@ -636,7 +642,7 @@ void cht_Suicide (player_t *plyr) // the initial tick. if (plyr->mo != NULL) { - DSuicider *suicide = Create(); + DSuicider *suicide = plyr->mo->Level->CreateThinker(); suicide->Pawn = plyr->mo; GC::WriteBarrier(suicide, suicide->Pawn); } diff --git a/src/m_misc.cpp b/src/m_misc.cpp index 392ba670d9..2bf798b13c 100644 --- a/src/m_misc.cpp +++ b/src/m_misc.cpp @@ -53,6 +53,7 @@ #include "i_video.h" #include "v_video.h" +#include "i_system.h" // Data. #include "m_misc.h" diff --git a/src/maploader/compatibility.cpp b/src/maploader/compatibility.cpp index 461f8cab46..ad792dc5ae 100644 --- a/src/maploader/compatibility.cpp +++ b/src/maploader/compatibility.cpp @@ -279,17 +279,17 @@ FName MapLoader::CheckCompatibility(MapData *map) if (BCompatMap.CountUsed() == 0) ParseCompatibility(); - ii_compatflags = 0; - ii_compatflags2 = 0; - ib_compatflags = 0; + Level->ii_compatflags = 0; + Level->ii_compatflags2 = 0; + Level->ib_compatflags = 0; // When playing Doom IWAD levels force COMPAT_SHORTTEX and COMPATF_LIGHT. // I'm not sure if the IWAD maps actually need COMPATF_LIGHT but it certainly does not hurt. // TNT's MAP31 also needs COMPATF_STAIRINDEX but that only gets activated for TNT.WAD. if (Wads.GetLumpFile(map->lumpnum) == Wads.GetIwadNum() && (gameinfo.flags & GI_COMPATSHORTTEX) && Level->maptype == MAPTYPE_DOOM) { - ii_compatflags = COMPATF_SHORTTEX|COMPATF_LIGHT; - if (gameinfo.flags & GI_COMPATSTAIRS) ii_compatflags |= COMPATF_STAIRINDEX; + Level->ii_compatflags = COMPATF_SHORTTEX|COMPATF_LIGHT; + if (gameinfo.flags & GI_COMPATSTAIRS) Level->ii_compatflags |= COMPATF_STAIRINDEX; } map->GetChecksum(md5.Bytes); @@ -319,9 +319,9 @@ FName MapLoader::CheckCompatibility(MapData *map) if (flags != NULL) { - ii_compatflags |= flags->CompatFlags[SLOT_COMPAT]; - ii_compatflags2 |= flags->CompatFlags[SLOT_COMPAT2]; - ib_compatflags |= flags->CompatFlags[SLOT_BCOMPAT]; + Level->ii_compatflags |= flags->CompatFlags[SLOT_COMPAT]; + Level->ii_compatflags2 |= flags->CompatFlags[SLOT_COMPAT2]; + Level->ib_compatflags |= flags->CompatFlags[SLOT_BCOMPAT]; } // Reset i_compatflags @@ -330,7 +330,7 @@ FName MapLoader::CheckCompatibility(MapData *map) // Set floatbob compatibility for all maps with an original Hexen MAPINFO. if (Level->flags2 & LEVEL2_HEXENHACK) { - ib_compatflags |= BCOMPATF_FLOATBOB; + Level->ib_compatflags |= BCOMPATF_FLOATBOB; } return FName(hash, true); // if this returns NAME_None it means there is no scripted compatibility handler. } @@ -391,7 +391,7 @@ DEFINE_ACTION_FUNCTION(DLevelCompatibility, ClearSectorTags) { PARAM_SELF_PROLOGUE(DLevelCompatibility); PARAM_INT(sector); - tagManager.RemoveSectorTags(sector); + self->Level->tagManager.RemoveSectorTags(sector); return 0; } @@ -403,7 +403,7 @@ DEFINE_ACTION_FUNCTION(DLevelCompatibility, AddSectorTag) if ((unsigned)sector < self->Level->sectors.Size()) { - tagManager.AddSectorTag(sector, tag); + self->Level->tagManager.AddSectorTag(sector, tag); } return 0; } @@ -412,7 +412,7 @@ DEFINE_ACTION_FUNCTION(DLevelCompatibility, ClearLineIDs) { PARAM_SELF_PROLOGUE(DLevelCompatibility); PARAM_INT(line); - tagManager.RemoveLineIDs(line); + self->Level->tagManager.RemoveLineIDs(line); return 0; } @@ -424,7 +424,7 @@ DEFINE_ACTION_FUNCTION(DLevelCompatibility, AddLineID) if ((unsigned)line < self->Level->lines.Size()) { - tagManager.AddLineID(line, tag); + self->Level->tagManager.AddLineID(line, tag); } return 0; } @@ -530,50 +530,3 @@ DEFINE_ACTION_FUNCTION(DLevelCompatibility, GetDefaultActor) DEFINE_FIELD(DLevelCompatibility, Level); -//========================================================================== -// -// CCMD mapchecksum -// -//========================================================================== - -CCMD (mapchecksum) -{ - MapData *map; - uint8_t cksum[16]; - - if (argv.argc() < 2) - { - Printf("Usage: mapchecksum ...\n"); - } - for (int i = 1; i < argv.argc(); ++i) - { - map = P_OpenMapData(argv[i], true); - if (map == NULL) - { - Printf("Cannot load %s as a map\n", argv[i]); - } - else - { - map->GetChecksum(cksum); - const char *wadname = Wads.GetWadName(Wads.GetLumpFile(map->lumpnum)); - delete map; - for (size_t j = 0; j < sizeof(cksum); ++j) - { - Printf("%02X", cksum[j]); - } - Printf(" // %s %s\n", wadname, argv[i]); - } - } -} - -//========================================================================== -// -// CCMD hiddencompatflags -// -//========================================================================== - -CCMD (hiddencompatflags) -{ - Printf("%08x %08x %08x\n", ii_compatflags, ii_compatflags2, ib_compatflags); -} - diff --git a/src/maploader/edata.cpp b/src/maploader/edata.cpp index e350946391..77ae9fa31c 100644 --- a/src/maploader/edata.cpp +++ b/src/maploader/edata.cpp @@ -50,7 +50,7 @@ #include "maploader.h" -static void parseLinedef(FScanner &sc, TMap &EDLines) +void MapLoader::parseEDLinedef(FScanner &sc, TMap &EDLines) { EDLinedef ld; bool argsset = false; @@ -159,7 +159,7 @@ static void parseLinedef(FScanner &sc, TMap &EDLines) maplinedef_t mld; mld.special = -ld.special; mld.tag = ld.tag; - P_TranslateLineDef(&line, &mld); + Level->TranslateLineDef(&line, &mld); ld.special = line.special; ld.activation = line.activation; ld.flags = (ld.flags & ~(ML_REPEAT_SPECIAL | ML_FIRSTSIDEONLY)) | (line.flags & (ML_REPEAT_SPECIAL | ML_FIRSTSIDEONLY)); @@ -529,7 +529,7 @@ void MapLoader::InitED() { if (sc.Compare("linedef")) { - parseLinedef(sc, EDLines); + parseEDLinedef(sc, EDLines); } else if (sc.Compare("mapthing")) { @@ -583,7 +583,7 @@ void MapLoader::ProcessEDLinedef(line_t *ld, int recordnum) ld->flags = (ld->flags&~fmask) | eld->flags; ld->setAlpha(eld->alpha); memcpy(ld->args, eld->args, sizeof(ld->args)); - tagManager.AddLineID(Index(ld), eld->tag); + Level->tagManager.AddLineID(Index(ld), eld->tag); } void MapLoader::ProcessEDSector(sector_t *sec, int recordnum) diff --git a/src/maploader/glnodes.cpp b/src/maploader/glnodes.cpp index defd5e7b7c..fa62469525 100644 --- a/src/maploader/glnodes.cpp +++ b/src/maploader/glnodes.cpp @@ -61,8 +61,8 @@ #include "i_time.h" #include "maploader.h" -CVAR(Bool, gl_cachenodes, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) -CVAR(Float, gl_cachetime, 0.6f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) +EXTERN_CVAR(Bool, gl_cachenodes) +EXTERN_CVAR(Float, gl_cachetime) // fixed 32 bit gl_vert format v2.0+ (glBsp 1.91) struct mapglvertex_t @@ -346,7 +346,7 @@ bool MapLoader::LoadGLSegs(FileReader &lump) segs[i].v2 = &Level->vertexes[checkGLVertex3(LittleLong(ml->v2))]; const uint32_t partner = LittleLong(ml->partner); - segs[i].PartnerSeg = DWORD_MAX == partner ? nullptr : &segs[partner]; + segs[i].PartnerSeg = UINT_MAX == partner ? nullptr : &segs[partner]; if(ml->linedef != 0xffff) // skip minisegs { diff --git a/src/maploader/maploader.cpp b/src/maploader/maploader.cpp index a8a892967b..5e3dc96692 100644 --- a/src/maploader/maploader.cpp +++ b/src/maploader/maploader.cpp @@ -59,63 +59,31 @@ #include - -#include "templates.h" -#include "d_player.h" -#include "m_argv.h" -#include "g_game.h" -#include "w_wad.h" -#include "p_local.h" -#include "p_effect.h" -#include "p_terrain.h" -#include "nodebuild.h" -#include "p_lnspec.h" -#include "c_console.h" -#include "p_acs.h" -#include "announcer.h" -#include "wi_stuff.h" -#include "doomerrors.h" -#include "gi.h" -#include "p_conversation.h" -#include "a_keys.h" -#include "s_sndseq.h" -#include "sbar.h" -#include "p_setup.h" -#include "r_data/r_interpolate.h" -#include "r_sky.h" -#include "cmdlib.h" -#include "md5.h" -#include "po_man.h" -#include "r_renderer.h" -#include "p_blockmap.h" -#include "r_utility.h" -#include "p_spec.h" -#include "g_levellocals.h" -#include "c_dispatch.h" -#include "a_dynlight.h" -#include "events.h" -#include "p_destructible.h" -#include "types.h" -#include "i_time.h" -#include "scripting/vm/vm.h" -#include "hwrenderer/data/flatvertices.h" -#include "fragglescript/t_fs.h" #include "maploader.h" +#include "c_cvars.h" +#include "actor.h" +#include "g_levellocals.h" +#include "p_lnspec.h" +#include "v_text.h" +#include "p_setup.h" +#include "gi.h" +#include "doomerrors.h" +#include "types.h" +#include "w_wad.h" +#include "p_conversation.h" +#include "v_video.h" +#include "i_time.h" +#include "m_argv.h" +#include "fragglescript/t_fs.h" +#include "swrenderer/r_swrenderer.h" +#include "hwrenderer/data/flatvertices.h" +#include "xlat/xlat.h" -void PO_Init(); - -#define MISSING_TEXTURE_WARN_LIMIT 20 - -void BloodCrypt (void *data, int key, int len); -void P_ClearUDMFKeys(); -void InitRenderInfo(); - -extern AActor *SpawnMapThing (int index, FMapThing *mthing, int position); - -extern void P_TranslateTeleportThings (void); - -EXTERN_CVAR(Bool, am_textured) +enum +{ + MISSING_TEXTURE_WARN_LIMIT = 20 +}; CVAR (Bool, genblockmap, false, CVAR_SERVERINFO|CVAR_GLOBALCONFIG); CVAR (Bool, gennodes, false, CVAR_SERVERINFO|CVAR_GLOBALCONFIG); @@ -125,6 +93,61 @@ inline bool P_LoadBuildMap(uint8_t *mapdata, size_t len, FMapThing **things, int return false; } +//=========================================================================== +// +// Now that ZDoom again gives the option of using Doom's original teleport +// behavior, only teleport dests in a sector with a 0 tag need to be +// given a TID. And since Doom format maps don't have TIDs, we can safely +// give them TID 1. +// +//=========================================================================== + +void MapLoader::TranslateTeleportThings () +{ + AActor *dest; + auto iterator = Level->GetThinkerIterator(NAME_TeleportDest); + bool foundSomething = false; + + while ( (dest = iterator.Next()) ) + { + if (!Level->SectorHasTags(dest->Sector)) + { + dest->tid = 1; + dest->AddToHash (); + foundSomething = true; + } + } + + if (foundSomething) + { + for (auto &line : Level->lines) + { + if (line.special == Teleport) + { + if (line.args[1] == 0) + { + line.args[0] = 1; + } + } + else if (line.special == Teleport_NoFog) + { + if (line.args[2] == 0) + { + line.args[0] = 1; + } + } + else if (line.special == Teleport_ZombieChanger) + { + if (line.args[1] == 0) + { + line.args[0] = 1; + } + } + } + } +} + + //=========================================================================== // // Sets a sidedef's texture and prints a message if it's not present. @@ -151,7 +174,7 @@ void MapLoader::SetTexture (side_t *side, int position, const char *name, FMissi { if (Level->lines[i].sidedef[j] == side) { - Printf(TEXTCOLOR_RED"Unknown %s texture '" + Printf(TEXTCOLOR_RED "Unknown %s texture '" TEXTCOLOR_ORANGE "%s" TEXTCOLOR_RED "' on %s side of linedef %d\n", positionnames[position], name, sidenames[j], i); @@ -1046,6 +1069,7 @@ void MapLoader::LoadSectors (MapData *map, FMissingTextureTracker &missingtex) for (unsigned i = 0; i < numsectors; i++, ss++, ms++) { ss->e = §ors[0].e[i]; + ss->Level = Level; if (!map->HasBehavior) ss->Flags |= SECF_FLOORDROP; ss->SetPlaneTexZ(sector_t::floor, (double)LittleShort(ms->floorheight)); ss->floorplane.set(0, 0, 1., -ss->GetPlaneTexZ(sector_t::floor)); @@ -1057,8 +1081,8 @@ void MapLoader::LoadSectors (MapData *map, FMissingTextureTracker &missingtex) if (map->HasBehavior) ss->special = LittleShort(ms->special); else // [RH] Translate to new sector special - ss->special = P_TranslateSectorSpecial (LittleShort(ms->special)); - tagManager.AddSectorTag(i, LittleShort(ms->tag)); + ss->special = Level->TranslateSectorSpecial (LittleShort(ms->special)); + Level->tagManager.AddSectorTag(i, LittleShort(ms->tag)); ss->thinglist = nullptr; ss->touching_thinglist = nullptr; // phares 3/14/98 ss->sectorportal_thinglist = nullptr; @@ -1395,7 +1419,7 @@ void MapLoader::SpawnThings (int position) for (int i=0; i < numthings; i++) { - AActor *actor = SpawnMapThing (i, &MapThingsConverted[i], position); + AActor *actor = Level->SpawnMapThing (i, &MapThingsConverted[i], position); unsigned *udi = MapThingsUserDataIndex.CheckKey((unsigned)i); if (udi != nullptr) { @@ -1463,7 +1487,7 @@ void MapLoader::SetLineID (int i, line_t *ld) break; case Plane_Align: - if (!(ib_compatflags & BCOMPATF_NOSLOPEID)) setid = ld->args[2]; + if (!(Level->ib_compatflags & BCOMPATF_NOSLOPEID)) setid = ld->args[2]; break; case Static_Init: @@ -1476,7 +1500,7 @@ void MapLoader::SetLineID (int i, line_t *ld) } if (setid != -1) { - tagManager.AddLineID(i, setid); + Level->tagManager.AddLineID(i, setid); } } } @@ -1570,7 +1594,7 @@ void MapLoader::FinishLoadingLineDef(line_t *ld, int alpha) { for (unsigned j = 0; j < Level->lines.Size(); j++) { - if (tagManager.LineHasID(j, ld->args[0])) + if (Level->LineHasId(j, ld->args[0])) { Level->lines[j].alpha = dalpha; if (additive) @@ -1696,11 +1720,11 @@ void MapLoader::LoadLineDefs (MapData * map) mld->special = LittleShort(mld->special); mld->tag = LittleShort(mld->tag); mld->flags = LittleShort(mld->flags); - P_TranslateLineDef (ld, mld, -1); + Level->TranslateLineDef (ld, mld, -1); // do not assign the tag for Extradata lines. if (ld->special != Static_Init || (ld->args[1] != Init_EDLine && ld->args[1] != Init_EDSector)) { - tagManager.AddLineID(i, mld->tag); + Level->tagManager.AddLineID(i, mld->tag); } #ifndef NO_EDATA if (ld->special == Static_Init && ld->args[1] == Init_EDLine) @@ -2074,7 +2098,7 @@ void MapLoader::ProcessSideTextures(bool checktranmap, side_t *sd, sector_t *sec { for (unsigned s = 0; s < Level->sectors.Size(); s++) { - if (tagManager.SectorHasTag(s, tag)) + if (Level->SectorHasTag(s, tag)) { if (colorgood) { @@ -2700,9 +2724,9 @@ void MapLoader::GroupLines (bool buildmap) { if (sector->Lines.Count == 0) { - Printf ("Sector %i (tag %i) has no lines\n", i, tagManager.GetFirstSectorTag(Index(sector))); + Printf ("Sector %i (tag %i) has no lines\n", i, Level->GetFirstSectorTag(Index(sector))); // 0 the sector's tag so that no specials can use it - tagManager.RemoveSectorTags(i); + Level->tagManager.RemoveSectorTags(i); } else { @@ -2757,7 +2781,7 @@ void MapLoader::GroupLines (bool buildmap) } // killough 1/30/98: Create xref tables for tags - tagManager.HashTags(); + Level->tagManager.HashTags(); if (!buildmap) { @@ -2839,7 +2863,7 @@ void MapLoader::LoadBehavior(MapData * map) { if (map->Size(ML_BEHAVIOR) > 0) { - Level->Behaviors.LoadModule(-1, &map->Reader(ML_BEHAVIOR), map->Size(ML_BEHAVIOR)); + Level->Behaviors.LoadModule(-1, &map->Reader(ML_BEHAVIOR), map->Size(ML_BEHAVIOR), map->lumpnum); } if (!Level->Behaviors.CheckAllGood()) { @@ -2929,7 +2953,6 @@ void MapLoader::LoadLevel(MapData *map, const char *lumpname, int position) ForceNodeBuild = gennodes; // [RH] Load in the BEHAVIOR lump - Level->Behaviors.UnloadModules(); if (map->HasBehavior) { LoadBehavior(map); @@ -2955,7 +2978,7 @@ void MapLoader::LoadLevel(MapData *map, const char *lumpname, int position) translator = gameinfo.translator.GetChars(); } } - P_LoadTranslator(translator); + Level->Translator = P_LoadTranslator(translator); Level->maptype = MAPTYPE_DOOM; } if (map->isText) @@ -2963,7 +2986,7 @@ void MapLoader::LoadLevel(MapData *map, const char *lumpname, int position) Level->maptype = MAPTYPE_UDMF; } FName checksum = CheckCompatibility(map); - if (ib_compatflags & BCOMPATF_REBUILDNODES) + if (Level->ib_compatflags & BCOMPATF_REBUILDNODES) { ForceNodeBuild = true; } @@ -2993,7 +3016,7 @@ void MapLoader::LoadLevel(MapData *map, const char *lumpname, int position) LoadMapinfoACSLump(); - P_LoadStrifeConversations(map, lumpname); + P_LoadStrifeConversations(Level, map, lumpname); FMissingTextureTracker missingtex; @@ -3188,17 +3211,17 @@ void MapLoader::LoadLevel(MapData *map, const char *lumpname, int position) CopySlopes(); // Spawn 3d floors - must be done before spawning things so it can't be done in P_SpawnSpecials - P_Spawn3DFloors(); + Spawn3DFloors(); SpawnThings(position); for (int i = 0; i < MAXPLAYERS; ++i) { - if (playeringame[i] && players[i].mo != nullptr) - players[i].health = players[i].mo->health; + if (Level->PlayerInGame(i) && Level->Players[i]->mo != nullptr) + Level->Players[i]->health = Level->Players[i]->mo->health; } if (!map->HasBehavior && !map->isText) - P_TranslateTeleportThings(); // [RH] Assign teleport destination TIDs + TranslateTeleportThings(); // [RH] Assign teleport destination TIDs if (oldvertextable != nullptr) { @@ -3206,7 +3229,7 @@ void MapLoader::LoadLevel(MapData *map, const char *lumpname, int position) } // set up world state - P_SpawnSpecials(this); + SpawnSpecials(); // disable reflective planes on sloped sectors. for (auto &sec : Level->sectors) @@ -3222,20 +3245,20 @@ void MapLoader::LoadLevel(MapData *map, const char *lumpname, int position) } InitRenderInfo(); // create hardware independent renderer resources for the level. This must be done BEFORE the PolyObj Spawn!!! - P_ClearDynamic3DFloorData(); // CreateVBO must be run on the plain 3D floor data. - screen->mVertexData->CreateVBO(); + Level->ClearDynamic3DFloorData(); // CreateVBO must be run on the plain 3D floor data. + screen->mVertexData->CreateVBO(Level->sectors); for (auto &sec : Level->sectors) { P_Recalculate3DFloors(&sec); } - SWRenderer->SetColormap(); //The SW renderer needs to do some special setup for the level's default colormap. + SWRenderer->SetColormap(Level); //The SW renderer needs to do some special setup for the level's default colormap. InitPortalGroups(Level); - P_InitHealthGroups(); + P_InitHealthGroups(Level); if (reloop) LoopSidedefs(false); PO_Init(); // Initialize the polyobjs if (!Level->IsReentering()) - P_FinalizePortals(); // finalize line portals after polyobjects have been initialized. This info is needed for properly flagging them. + Level->FinalizePortals(); // finalize line portals after polyobjects have been initialized. This info is needed for properly flagging them. } diff --git a/src/maploader/maploader.h b/src/maploader/maploader.h index 4b5832f53a..37d372edba 100644 --- a/src/maploader/maploader.h +++ b/src/maploader/maploader.h @@ -1,6 +1,9 @@ #pragma once #include "nodebuild.h" +#include "g_levellocals.h" + +class FileReader; struct EDMapthing { @@ -96,7 +99,9 @@ class MapLoader { friend class UDMFParser; void *level; // this is to hide the global variable and produce an error for referencing it. +public: FLevelLocals *Level; +private: int firstglvertex; // helpers for loading GL nodes from GWA files. bool format5; @@ -138,6 +143,7 @@ private: void ProcessEDMapthing(FMapThing *mt, int recordnum); void ProcessEDLinedef(line_t *line, int recordnum); void ProcessEDSector(sector_t *sec, int recordnum); + void parseEDLinedef(FScanner &sc, TMap &EDLines); // Polyobjects void InitSideLists(); @@ -169,6 +175,27 @@ private: void FixHoles(); void ReportUnpairedMinisegs(); void CalcIndices(); + + // Specials + void SpawnSpecials(); + void InitSectorSpecial(sector_t *sector, int special); + void SpawnLights(sector_t *sector); + void CreateScroller(EScroll type, double dx, double dy, sector_t *affectee, int accel, EScrollPos scrollpos = EScrollPos::scw_all); + void SpawnScrollers(); + void SpawnFriction(); + void SpawnPushers(); + AActor *GetPushThing (int s); + void SpawnPortal(line_t *line, int sectortag, int plane, int bytealpha, int linked); + void CopyPortal(int sectortag, int plane, unsigned pnum, double alpha, bool tolines); + void SetPortal(sector_t *sector, int plane, unsigned pnum, double alpha); + void SpawnLinePortal(line_t* line); + void SetupPortals(); + void SpawnSkybox(AActor *origin); + void SetupFloorPortal (AActor *point); + void SetupCeilingPortal (AActor *point); + void TranslateTeleportThings(); + int Set3DFloor(line_t * line, int param, int param2, int alpha); + void Spawn3DFloors (); void SetTexture(side_t *side, int position, const char *name, FMissingTextureTracker &track); void SetTexture(sector_t *sector, int index, int position, const char *name, FMissingTextureTracker &track, bool truncate); diff --git a/src/maploader/polyobjects.cpp b/src/maploader/polyobjects.cpp index 910cf4099e..3c0a567adb 100644 --- a/src/maploader/polyobjects.cpp +++ b/src/maploader/polyobjects.cpp @@ -152,6 +152,7 @@ void MapLoader::SpawnPolyobj (int index, int tag, int type) unsigned int ii; int i; FPolyObj *po = &Level->Polyobjects[index]; + po->Level = Level; for (ii = 0; ii < KnownPolySides.Size(); ++ii) { @@ -282,7 +283,7 @@ void MapLoader::TranslateToStartSpot (int tag, const DVector2 &origin) FPolyObj *po; DVector2 delta; - po = PO_GetPolyobj(tag); + po = Level->GetPolyobj(tag); if (po == nullptr) { // didn't match the tag with a polyobj tag Printf(TEXTCOLOR_RED "TranslateToStartSpot: Unable to match polyobj tag: %d\n", tag); @@ -315,7 +316,7 @@ void MapLoader::TranslateToStartSpot (int tag, const DVector2 &origin) } po->CalcCenter(); // For compatibility purposes - po->CenterSubsector = R_PointInSubsector(po->CenterSpot.pos); + po->CenterSubsector = Level->PointInRenderSubsector(po->CenterSpot.pos); } //========================================================================== @@ -351,6 +352,7 @@ void MapLoader::PO_Init (void) InitSideLists (); Level->Polyobjects.Resize(NumPolyobjs); + for (auto &po : Level->Polyobjects) po.Level = Level; // must be done before the init loop below. polyIndex = 0; // index polyobj number // Find the startSpot points, and spawn each polyobj diff --git a/src/maploader/slopes.cpp b/src/maploader/slopes.cpp index 86614cc359..2fb44e628e 100644 --- a/src/maploader/slopes.cpp +++ b/src/maploader/slopes.cpp @@ -53,7 +53,7 @@ void MapLoader::SlopeLineToPoint (int lineid, const DVector3 &pos, bool slopeCei { int linenum; - FLineIdIterator itr(lineid); + auto itr = Level->GetLineIdIterator(lineid); while ((linenum = itr.Next()) >= 0) { const line_t *line = &Level->lines[linenum]; @@ -123,7 +123,7 @@ void MapLoader::CopyPlane (int tag, sector_t *dest, bool copyCeil) sector_t *source; int secnum; - secnum = P_FindFirstSectorFromTag (tag); + secnum = Level->FindFirstSectorFromTag (tag); if (secnum == -1) { return; @@ -143,7 +143,7 @@ void MapLoader::CopyPlane (int tag, sector_t *dest, bool copyCeil) void MapLoader::CopyPlane (int tag, const DVector2 &pos, bool copyCeil) { - sector_t *dest = P_PointInSector (pos); + sector_t *dest = Level->PointInSector (pos); CopyPlane(tag, dest, copyCeil); } @@ -179,7 +179,7 @@ void MapLoader::SetSlope (secplane_t *plane, bool setCeil, int xyangi, int zangi DVector3 norm; - if (ib_compatflags & BCOMPATF_SETSLOPEOVERFLOW) + if (Level->ib_compatflags & BCOMPATF_SETSLOPEOVERFLOW) { // We have to consider an integer multiplication overflow here. norm[0] = FixedToFloat(FloatToFixed(zang.Cos()) * FloatToFixed(xyang.Cos())) / 65536.; @@ -389,7 +389,7 @@ void MapLoader::SpawnSlopeMakers (FMapThing *firstmt, FMapThing *lastmt, const i sector_t *sec; bool ceiling; - sec = P_PointInSector (mt->pos); + sec = Level->PointInSector (mt->pos); if (mt->info->Special == SMT_SlopeCeilingPointLine || mt->info->Special == SMT_VavoomCeiling || mt->info->Special == SMT_SetCeilingSlope) { refplane = &sec->ceilingplane; diff --git a/src/maploader/specials.cpp b/src/maploader/specials.cpp new file mode 100644 index 0000000000..3eef88e48a --- /dev/null +++ b/src/maploader/specials.cpp @@ -0,0 +1,1389 @@ +//----------------------------------------------------------------------------- +// +// Copyright 1993-1996 id Software +// Copyright 1994-1996 Raven Software +// Copyright 1998-1998 Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman +// Copyright 1999-2016 Randy Heit +// Copyright 2002-2016 Christoph Oelckers +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see http://www.gnu.org/licenses/ +// +//----------------------------------------------------------------------------- +// +// DESCRIPTION: +// Implements special effects: +// Texture animation, height or lighting changes +// according to adjacent sectors, respective +// utility functions, etc. +// Line Tag handling. Line and Sector triggers. +// Implements donut linedef triggers +// Initializes and implements BOOM linedef triggers for +// Scrollers/Conveyors +// Friction +// Wind/Current +// +//----------------------------------------------------------------------------- + +/* For code that originates from ZDoom the following applies: +** +**--------------------------------------------------------------------------- +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions +** are met: +** +** 1. Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** 3. The name of the author may not be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**--------------------------------------------------------------------------- +** +*/ + +#include + +#include "templates.h" +#include "doomdef.h" +#include "doomstat.h" +#include "d_event.h" +#include "g_level.h" +#include "gstrings.h" +#include "events.h" + +#include "m_random.h" + +#include "p_local.h" +#include "p_spec.h" +#include "p_blockmap.h" +#include "p_lnspec.h" +#include "p_terrain.h" +#include "p_acs.h" +#include "p_3dmidtex.h" + +#include "g_game.h" + +#include "a_sharedglobal.h" +#include "a_keys.h" +#include "c_dispatch.h" +#include "r_sky.h" +#include "d_player.h" +#include "g_levellocals.h" +#include "actorinlines.h" +#include "vm.h" +#include "p_setup.h" + +#include "c_console.h" +#include "p_spec_thinkers.h" +#include "maploader/maploader.h" + +EXTERN_CVAR(Bool, forcewater) + +//----------------------------------------------------------------------------- +// +// Portals +// +//----------------------------------------------------------------------------- + +//============================================================================ +// +// Spawns a single line portal +// +//============================================================================ + +void MapLoader::SpawnLinePortal(line_t* line) +{ + // portal destination is special argument #0 + line_t* dst = nullptr; + + if (line->args[2] >= PORTT_VISUAL && line->args[2] <= PORTT_LINKED) + { + dst = Level->FindPortalDestination(line, line->args[0]); + + line->portalindex = Level->linePortals.Reserve(1); + FLinePortal *port = &Level->linePortals.Last(); + + memset(port, 0, sizeof(FLinePortal)); + port->mOrigin = line; + port->mDestination = dst; + port->mType = uint8_t(line->args[2]); // range check is done above. + + if (port->mType == PORTT_LINKED) + { + // Linked portals have no z-offset ever. + port->mAlign = PORG_ABSOLUTE; + } + else + { + port->mAlign = uint8_t(line->args[3] >= PORG_ABSOLUTE && line->args[3] <= PORG_CEILING ? line->args[3] : PORG_ABSOLUTE); + if (port->mType == PORTT_INTERACTIVE && port->mAlign != PORG_ABSOLUTE) + { + // Due to the way z is often handled, these pose a major issue for parts of the code that needs to transparently handle interactive portals. + Printf(TEXTCOLOR_RED "Warning: z-offsetting not allowed for interactive portals. Changing line %d to teleport-portal!\n", line->Index()); + port->mType = PORTT_TELEPORT; + } + } + port->mDefFlags = port->mType == PORTT_VISUAL ? PORTF_VISIBLE : + port->mType == PORTT_TELEPORT ? PORTF_TYPETELEPORT : + PORTF_TYPEINTERACTIVE; + } + else if (line->args[2] == PORTT_LINKEDEE && line->args[0] == 0) + { + // EE-style portals require that the first line ID is identical and the first arg of the two linked linedefs are 0 and 1 respectively. + + int mytag = Level->GetFirstLineId(line); + + for (auto &ln : Level->lines) + { + if (Level->GetFirstLineId(&ln) == mytag && ln.args[0] == 1 && ln.special == Line_SetPortal) + { + line->portalindex = Level->linePortals.Reserve(1); + FLinePortal *port = &Level->linePortals.Last(); + + memset(port, 0, sizeof(FLinePortal)); + port->mOrigin = line; + port->mDestination = &ln; + port->mType = PORTT_LINKED; + port->mAlign = PORG_ABSOLUTE; + port->mDefFlags = PORTF_TYPEINTERACTIVE; + + // we need to create the backlink here, too. + ln.portalindex = Level->linePortals.Reserve(1); + port = &Level->linePortals.Last(); + + memset(port, 0, sizeof(FLinePortal)); + port->mOrigin = &ln; + port->mDestination = line; + port->mType = PORTT_LINKED; + port->mAlign = PORG_ABSOLUTE; + port->mDefFlags = PORTF_TYPEINTERACTIVE; + } + } + } + else + { + // undefined type + return; + } +} + +//----------------------------------------------------------------------------- +// +// Lower stacks go in the bottom sector. +// +//----------------------------------------------------------------------------- + +void MapLoader::SetupFloorPortal (AActor *point) +{ + auto it = Level->GetActorIterator(NAME_LowerStackLookOnly, point->tid); + sector_t *Sector = point->Sector; + auto skyv = it.Next(); + if (skyv != nullptr) + { + skyv->target = point; + if (Sector->GetAlpha(sector_t::floor) == 1.) + Sector->SetAlpha(sector_t::floor, clamp(point->args[0], 0, 255) / 255.); + + Sector->Portals[sector_t::floor] = Level->GetStackPortal(skyv, sector_t::floor); + } +} + +//----------------------------------------------------------------------------- +// +// Upper stacks go in the top sector. +// +//----------------------------------------------------------------------------- + +void MapLoader::SetupCeilingPortal (AActor *point) +{ + auto it = Level->GetActorIterator(NAME_UpperStackLookOnly, point->tid); + sector_t *Sector = point->Sector; + auto skyv = it.Next(); + if (skyv != nullptr) + { + skyv->target = point; + if (Sector->GetAlpha(sector_t::ceiling) == 1.) + Sector->SetAlpha(sector_t::ceiling, clamp(point->args[0], 0, 255) / 255.); + + Sector->Portals[sector_t::ceiling] = Level->GetStackPortal(skyv, sector_t::ceiling); + } +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void MapLoader::SetupPortals() +{ + auto it = Level->GetThinkerIterator(NAME_StackPoint); + AActor *pt; + TArray points; + + while ((pt = it.Next())) + { + FName nm = pt->GetClass()->TypeName; + if (nm == NAME_UpperStackLookOnly) + { + SetupFloorPortal(pt); + } + else if (nm == NAME_LowerStackLookOnly) + { + SetupCeilingPortal(pt); + } + pt->special1 = 0; + points.Push(pt); + } + // the semantics here are incredibly lax so the final setup can only be done once all portals have been created, + // because later stackpoints will happily overwrite info in older ones, if there are multiple links. + for (auto &s : Level->sectorPortals) + { + if (s.mType == PORTS_STACKEDSECTORTHING && s.mSkybox) + { + for (auto &ss : Level->sectorPortals) + { + if (ss.mType == PORTS_STACKEDSECTORTHING && ss.mSkybox == s.mSkybox->target) + { + s.mPartner = unsigned((&ss) - &Level->sectorPortals[0]); + } + } + } + } + // Now we can finally set the displacement and delete the stackpoint reference. + for (auto &s : Level->sectorPortals) + { + if (s.mType == PORTS_STACKEDSECTORTHING && s.mSkybox) + { + s.mDisplacement = s.mSkybox->Pos() - s.mSkybox->target->Pos(); + s.mSkybox = nullptr; + } + } +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void MapLoader::SetPortal(sector_t *sector, int plane, unsigned pnum, double alpha) +{ + // plane: 0=floor, 1=ceiling, 2=both + if (plane > 0) + { + if (sector->GetPortalType(sector_t::ceiling) == PORTS_SKYVIEWPOINT) + { + sector->Portals[sector_t::ceiling] = pnum; + if (sector->GetAlpha(sector_t::ceiling) == 1.) + sector->SetAlpha(sector_t::ceiling, alpha); + + if (Level->sectorPortals[pnum].mFlags & PORTSF_SKYFLATONLY) + sector->SetTexture(sector_t::ceiling, skyflatnum); + } + } + if (plane == 2 || plane == 0) + { + if (sector->GetPortalType(sector_t::floor) == PORTS_SKYVIEWPOINT) + { + sector->Portals[sector_t::floor] = pnum; + } + if (sector->GetAlpha(sector_t::floor) == 1.) + sector->SetAlpha(sector_t::floor, alpha); + + if (Level->sectorPortals[pnum].mFlags & PORTSF_SKYFLATONLY) + sector->SetTexture(sector_t::floor, skyflatnum); + } +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void MapLoader::CopyPortal(int sectortag, int plane, unsigned pnum, double alpha, bool tolines) +{ + int s; + auto itr = Level->GetSectorTagIterator(sectortag); + while ((s = itr.Next()) >= 0) + { + SetPortal(&Level->sectors[s], plane, pnum, alpha); + } + + for (auto &line : Level->lines) + { + // Check if this portal needs to be copied to other sectors + // This must be done here to ensure that it gets done only after the portal is set up + if (line.special == Sector_SetPortal && + line.args[1] == 1 && + (line.args[2] == plane || line.args[2] == 3) && + line.args[3] == sectortag) + { + if (line.args[0] == 0) + { + SetPortal(line.frontsector, plane, pnum, alpha); + } + else + { + auto itr = Level->GetSectorTagIterator(line.args[0]); + while ((s = itr.Next()) >= 0) + { + SetPortal(&Level->sectors[s], plane, pnum, alpha); + } + } + } + if (tolines && line.special == Sector_SetPortal && + line.args[1] == 5 && + line.args[3] == sectortag) + { + if (line.args[0] == 0) + { + line.portaltransferred = pnum; + } + else + { + auto itr = Level->GetLineIdIterator(line.args[0]); + while ((s = itr.Next()) >= 0) + { + Level->lines[s].portaltransferred = pnum; + } + } + } + } +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void MapLoader::SpawnPortal(line_t *line, int sectortag, int plane, int bytealpha, int linked) +{ + if (plane < 0 || plane > 2 || (linked && plane == 2)) return; + for (auto &oline : Level->lines) + { + // We must look for the reference line with a linear search unless we want to waste the line ID for it + // which is not a good idea. + if (oline.special == Sector_SetPortal && + oline.args[0] == sectortag && + oline.args[1] == linked && + oline.args[2] == plane && + oline.args[3] == 1) + { + // beware of overflows. + DVector2 pos1 = line->v1->fPos() + line->Delta() / 2; + DVector2 pos2 = oline.v1->fPos() + oline.Delta() / 2; + unsigned pnum = Level->GetPortal(linked ? PORTS_LINKEDPORTAL : PORTS_PORTAL, plane, line->frontsector, oline.frontsector, pos2 - pos1); + CopyPortal(sectortag, plane, pnum, bytealpha / 255., false); + return; + } + } +} + +//----------------------------------------------------------------------------- +// +// This searches the viewpoint's sector +// for a skybox line special, gets its tag and transfers the skybox to all tagged sectors. +// +//----------------------------------------------------------------------------- + +void MapLoader::SpawnSkybox(AActor *origin) +{ + sector_t *Sector = origin->Sector; + if (Sector == NULL) + { + Printf("Sector not initialized for SkyCamCompat\n"); + origin->Sector = Sector = Level->PointInSector(origin->Pos()); + } + if (Sector) + { + for(auto refline : Sector->Lines) + { + if (refline->special == Sector_SetPortal && refline->args[1] == 2) + { + // We found the setup linedef for this skybox, so let's use it for our init. + unsigned pnum = Level->GetSkyboxPortal(origin); + CopyPortal(refline->args[0], refline->args[2], pnum, 0, true); + return; + } + } + } +} + +//----------------------------------------------------------------------------- +// +// P_SetSectorDamage +// +// Sets damage properties for one sector. Allows combination of original specials with explicit use of the damage properties +// +//----------------------------------------------------------------------------- + +static void SetupSectorDamage(sector_t *sector, int damage, int interval, int leakchance, FName type, int flags) +{ + // Only set if damage is not yet initialized. This ensures that UDMF takes precedence over sector specials. + if (sector->damageamount == 0) + { + sector->damageamount = damage; + sector->damageinterval = MAX(1, interval); + sector->leakydamage = leakchance; + sector->damagetype = type; + sector->Flags = (sector->Flags & ~SECF_DAMAGEFLAGS) | (flags & SECF_DAMAGEFLAGS); + } +} + +//----------------------------------------------------------------------------- +// +// P_InitSectorSpecial +// +// Sets up everything derived from 'sector->special' for one sector +// ('fromload' is necessary to allow conversion upon savegame load.) +// +//----------------------------------------------------------------------------- + +void MapLoader::InitSectorSpecial(sector_t *sector, int special) +{ + // [RH] All secret sectors are marked with a BOOM-ish bitfield + if (sector->special & SECRET_MASK) + { + sector->Flags |= SECF_SECRET | SECF_WASSECRET; + Level->total_secrets++; + } + if (sector->special & FRICTION_MASK) + { + sector->Flags |= SECF_FRICTION; + } + if (sector->special & PUSH_MASK) + { + sector->Flags |= SECF_PUSH; + } + if ((sector->special & DAMAGE_MASK) == 0x100) + { + SetupSectorDamage(sector, 5, 32, 0, NAME_Fire, 0); + } + else if ((sector->special & DAMAGE_MASK) == 0x200) + { + SetupSectorDamage(sector, 10, 32, 0, NAME_Slime, 0); + } + else if ((sector->special & DAMAGE_MASK) == 0x300) + { + SetupSectorDamage(sector, 20, 32, 5, NAME_Slime, 0); + } + sector->special &= 0xff; + + // [RH] Normal DOOM special or BOOM specialized? + bool keepspecial = false; + SpawnLights(sector); + switch (sector->special) + { + case dLight_Strobe_Hurt: + SetupSectorDamage(sector, 20, 32, 5, NAME_Slime, 0); + break; + + case dDamage_Hellslime: + SetupSectorDamage(sector, 10, 32, 0, NAME_Slime, 0); + break; + + case dDamage_Nukage: + SetupSectorDamage(sector, 5, 32, 0, NAME_Slime, 0); + break; + + case dSector_DoorCloseIn30: + Level->CreateThinker(sector, DDoor::doorWaitClose, 2, 0, 0, 30 * TICRATE); + break; + + case dDamage_End: + SetupSectorDamage(sector, 20, 32, 256, NAME_None, SECF_ENDGODMODE|SECF_ENDLEVEL); + break; + + case dSector_DoorRaiseIn5Mins: + Level->CreateThinker (sector, DDoor::doorWaitRaise, 2, TICRATE*30/7, 0, 5*60*TICRATE); + break; + + case dFriction_Low: + sector->friction = FRICTION_LOW; + sector->movefactor = 0x269/65536.; + sector->Flags |= SECF_FRICTION; + break; + + case dDamage_SuperHellslime: + SetupSectorDamage(sector, 20, 32, 5, NAME_Slime, 0); + break; + + case dDamage_LavaWimpy: + SetupSectorDamage(sector, 5, 16, 256, NAME_Fire, SECF_DMGTERRAINFX); + break; + + case dDamage_LavaHefty: + SetupSectorDamage(sector, 8, 16, 256, NAME_Fire, SECF_DMGTERRAINFX); + break; + + case dScroll_EastLavaDamage: + SetupSectorDamage(sector, 5, 16, 256, NAME_Fire, SECF_DMGTERRAINFX); + CreateScroller(EScroll::sc_floor, -4., 0, sector, 0); + keepspecial = true; + break; + + case hDamage_Sludge: + SetupSectorDamage(sector, 4, 32, 0, NAME_Slime, 0); + break; + + case sLight_Strobe_Hurt: + SetupSectorDamage(sector, 5, 32, 0, NAME_Slime, 0); + break; + + case sDamage_Hellslime: + SetupSectorDamage(sector, 2, 32, 0, NAME_Slime, SECF_HAZARD); + break; + + case Damage_InstantDeath: + // Strife's instant death sector + SetupSectorDamage(sector, TELEFRAG_DAMAGE, 1, 256, NAME_InstantDeath, 0); + break; + + case sDamage_SuperHellslime: + SetupSectorDamage(sector, 4, 32, 0, NAME_Slime, SECF_HAZARD); + break; + + case Sector_Hidden: + sector->MoreFlags |= SECMF_HIDDEN; + break; + + case Sector_Heal: + // CoD's healing sector + SetupSectorDamage(sector, -1, 32, 0, NAME_None, 0); + break; + + case Sky2: + sector->sky = PL_SKYFLAT; + break; + + default: + if (sector->special >= Scroll_North_Slow && sector->special <= Scroll_SouthWest_Fast) + { // Hexen scroll special + static const int8_t hexenScrollies[24][2] = + { + { 0, 1 }, { 0, 2 }, { 0, 4 }, + { -1, 0 }, { -2, 0 }, { -4, 0 }, + { 0, -1 }, { 0, -2 }, { 0, -4 }, + { 1, 0 }, { 2, 0 }, { 4, 0 }, + { 1, 1 }, { 2, 2 }, { 4, 4 }, + { -1, 1 }, { -2, 2 }, { -4, 4 }, + { -1, -1 }, { -2, -2 }, { -4, -4 }, + { 1, -1 }, { 2, -2 }, { 4, -4 } + }; + + + int i = sector->special - Scroll_North_Slow; + double dx = hexenScrollies[i][0] / 2.; + double dy = hexenScrollies[i][1] / 2.; + CreateScroller(EScroll::sc_floor, dx, dy, sector, 0); + } + else if (sector->special >= Carry_East5 && sector->special <= Carry_East35) + { + // Heretic scroll special + // Only east scrollers also scroll the texture + CreateScroller(EScroll::sc_floor, -0.5 * (1 << ((sector->special & 0xff) - Carry_East5)), 0, sector, 0); + } + keepspecial = true; + break; + } + if (!keepspecial) sector->special = 0; +} + +//----------------------------------------------------------------------------- +// +// P_SpawnSpecials +// +// After the map has been loaded, scan for specials that spawn thinkers +// +//----------------------------------------------------------------------------- + +void MapLoader::SpawnSpecials () +{ + SetupPortals(); + + for (auto &sec : Level->sectors) + { + if (sec.special == 0) + continue; + + InitSectorSpecial(&sec, sec.special); + } + + ProcessEDSectors(); + + // Init other misc stuff + + SpawnScrollers(); // killough 3/7/98: Add generalized scrollers + SpawnFriction(); // phares 3/12/98: New friction model using linedefs + SpawnPushers(); // phares 3/20/98: New pusher model using linedefs + + auto it2 = Level->GetThinkerIterator(NAME_SkyCamCompat); + AActor *pt2; + while ((pt2 = it2.Next())) + { + SpawnSkybox(pt2); + } + + for (auto &line : Level->lines) + { + switch (line.special) + { + int s; + sector_t *sec; + + // killough 3/7/98: + // support for drawn heights coming from different sector + case Transfer_Heights: + { + sec = line.frontsector; + + if (line.args[1] & 2) + { + sec->MoreFlags |= SECMF_FAKEFLOORONLY; + } + if (line.args[1] & 4) + { + sec->MoreFlags |= SECMF_CLIPFAKEPLANES; + } + if (line.args[1] & 8) + { + sec->MoreFlags |= SECMF_UNDERWATER; + } + else if (forcewater) + { + sec->MoreFlags |= SECMF_FORCEDUNDERWATER; + } + if (line.args[1] & 16) + { + sec->MoreFlags |= SECMF_IGNOREHEIGHTSEC; + } + else Level->HasHeightSecs = true; + if (line.args[1] & 32) + { + sec->MoreFlags |= SECMF_NOFAKELIGHT; + } + auto itr = Level->GetSectorTagIterator(line.args[0]); + while ((s = itr.Next()) >= 0) + { + Level->sectors[s].heightsec = sec; + sec->e->FakeFloor.Sectors.Push(&Level->sectors[s]); + Level->sectors[s].MoreFlags |= (sec->MoreFlags & SECMF_IGNOREHEIGHTSEC); // copy this to the destination sector for easier checking. + Level->sectors[s].AdjustFloorClip(); + } + break; + } + + // killough 3/16/98: Add support for setting + // floor lighting independently (e.g. lava) + case Transfer_FloorLight: + Level->CreateThinker (line.frontsector, line.args[0], true); + break; + + // killough 4/11/98: Add support for setting + // ceiling lighting independently + case Transfer_CeilingLight: + Level->CreateThinker (line.frontsector, line.args[0], false); + break; + + // [Graf Zahl] Add support for setting lighting + // per wall independently + case Transfer_WallLight: + Level->CreateThinker (line.frontsector, line.args[0], line.args[1]); + break; + + case Sector_Attach3dMidtex: + P_Attach3dMidtexLinesToSector(line.frontsector, line.args[0], line.args[1], !!line.args[2]); + break; + + case Sector_SetLink: + if (line.args[0] == 0) + { + P_AddSectorLinks(line.frontsector, line.args[1], line.args[2], line.args[3]); + } + break; + + case Sector_SetPortal: + // arg 0 = sector tag + // arg 1 = type + // - 0: normal (handled here) + // - 1: copy (handled by the portal they copy) + // - 2: EE-style skybox (handled by the camera object) + // - 3: EE-style flat portal (GZDoom HW renderer only for now) + // - 4: EE-style horizon portal (GZDoom HW renderer only for now) + // - 5: copy portal to line (GZDoom HW renderer only for now) + // - 6: linked portal + // other values reserved for later use + // arg 2 = 0:floor, 1:ceiling, 2:both + // arg 3 = 0: anchor, 1: reference line + // arg 4 = for the anchor only: alpha + if ((line.args[1] == 0 || line.args[1] == 6) && line.args[3] == 0) + { + SpawnPortal(&line, line.args[0], line.args[2], line.args[4], line.args[1]); + } + else if (line.args[1] == 3 || line.args[1] == 4) + { + unsigned pnum = Level->GetPortal(line.args[1] == 3 ? PORTS_PLANE : PORTS_HORIZON, line.args[2], line.frontsector, NULL, { 0,0 }); + CopyPortal(line.args[0], line.args[2], pnum, 0, true); + } + break; + + case Line_SetPortal: + SpawnLinePortal(&line); + break; + + // [RH] ZDoom Static_Init settings + case Static_Init: + switch (line.args[1]) + { + case Init_Gravity: + { + double grav = line.Delta().Length() / 100.; + auto itr = Level->GetSectorTagIterator(line.args[0]); + while ((s = itr.Next()) >= 0) + Level->sectors[s].gravity = grav; + } + break; + + //case Init_Color: + // handled in P_LoadSideDefs2() + + case Init_Damage: + { + int damage = int(line.Delta().Length()); + auto itr = Level->GetSectorTagIterator(line.args[0]); + while ((s = itr.Next()) >= 0) + { + sector_t *sec = &Level->sectors[s]; + sec->damageamount = damage; + sec->damagetype = NAME_None; + if (sec->damageamount < 20) + { + sec->leakydamage = 0; + sec->damageinterval = 32; + } + else if (sec->damageamount < 50) + { + sec->leakydamage = 5; + sec->damageinterval = 32; + } + else + { + sec->leakydamage = 256; + sec->damageinterval = 1; + } + } + } + break; + + case Init_SectorLink: + if (line.args[3] == 0) + P_AddSectorLinksByID(line.frontsector, line.args[0], line.args[2]); + break; + + // killough 10/98: + // + // Support for sky textures being transferred from sidedefs. + // Allows scrolling and other effects (but if scrolling is + // used, then the same sector tag needs to be used for the + // sky sector, the sky-transfer linedef, and the scroll-effect + // linedef). Still requires user to use F_SKY1 for the floor + // or ceiling texture, to distinguish floor and ceiling sky. + + case Init_TransferSky: + { + auto itr = Level->GetSectorTagIterator(line.args[0]); + while ((s = itr.Next()) >= 0) + Level->sectors[s].sky = (line.Index() + 1) | PL_SKYFLAT; + break; + } + } + break; + } + } + // [RH] Start running any open scripts on this map + Level->Behaviors.StartTypedScripts (SCRIPT_Open, NULL, false); +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void MapLoader::SpawnFriction() +{ + line_t *l = &Level->lines[0]; + + for (unsigned i = 0 ; i < Level->lines.Size() ; i++,l++) + { + if (l->special == Sector_SetFriction) + { + int length; + + if (l->args[1]) + { // [RH] Allow setting friction amount from parameter + length = l->args[1] <= 200 ? l->args[1] : 200; + } + else + { + length = int(l->Delta().Length()); + } + + P_SetSectorFriction (Level, l->args[0], length, false); + l->special = 0; + } + } +} + +//========================================================================== +// +// Creates all 3D floors defined by one linedef +// +//========================================================================== + +int MapLoader::Set3DFloor(line_t * line, int param, int param2, int alpha) +{ + int s; + int flags; + int tag = line->args[0]; + sector_t * sec = line->frontsector, *ss; + + auto itr = Level->GetSectorTagIterator(tag); + while ((s = itr.Next()) >= 0) + { + ss = &Level->sectors[s]; + + if (param == 0) + { + flags = FF_EXISTS | FF_RENDERALL | FF_SOLID | FF_INVERTSECTOR; + alpha = 255; + for (auto l: sec->Lines) + { + if (l->special == Sector_SetContents && l->frontsector == sec) + { + alpha = clamp(l->args[1], 0, 100); + if (l->args[2] & 1) flags &= ~FF_SOLID; + if (l->args[2] & 2) flags |= FF_SEETHROUGH; + if (l->args[2] & 4) flags |= FF_SHOOTTHROUGH; + if (l->args[2] & 8) flags |= FF_ADDITIVETRANS; + if (alpha != 100) flags |= FF_TRANSLUCENT;//|FF_BOTHPLANES|FF_ALLSIDES; + if (l->args[0]) + { + // Yes, Vavoom's 3D-floor definitions suck! + // The content list changed in r1783 of Vavoom to be unified + // among all its supported games, so it has now ten different + // values instead of just five. + static uint32_t vavoomcolors[] = { VC_EMPTY, + VC_WATER, VC_LAVA, VC_NUKAGE, VC_SLIME, VC_HELLSLIME, + VC_BLOOD, VC_SLUDGE, VC_HAZARD, VC_BOOMWATER }; + flags |= FF_SWIMMABLE | FF_BOTHPLANES | FF_ALLSIDES | FF_FLOOD; + + l->frontsector->Colormap.FadeColor = vavoomcolors[l->args[0]] & VC_COLORMASK; + l->frontsector->Colormap.FogDensity = 0; + } + alpha = (alpha * 255) / 100; + break; + } + } + } + else if (param == 4) + { + flags = FF_EXISTS | FF_RENDERPLANES | FF_INVERTPLANES | FF_NOSHADE | FF_FIX; + if (param2 & 1) flags |= FF_SEETHROUGH; // marker for allowing missing texture checks + alpha = 255; + } + else + { + static const int defflags[] = { 0, + FF_SOLID, + FF_SWIMMABLE | FF_BOTHPLANES | FF_ALLSIDES | FF_SHOOTTHROUGH | FF_SEETHROUGH, + FF_SHOOTTHROUGH | FF_SEETHROUGH, + }; + + flags = defflags[param & 3] | FF_EXISTS | FF_RENDERALL; + + if (param & 4) flags |= FF_ALLSIDES | FF_BOTHPLANES; + if (param & 16) flags ^= FF_SEETHROUGH; + if (param & 32) flags ^= FF_SHOOTTHROUGH; + + if (param2 & 1) flags |= FF_NOSHADE; + if (param2 & 2) flags |= FF_DOUBLESHADOW; + if (param2 & 4) flags |= FF_FOG; + if (param2 & 8) flags |= FF_THINFLOOR; + if (param2 & 16) flags |= FF_UPPERTEXTURE; + if (param2 & 32) flags |= FF_LOWERTEXTURE; + if (param2 & 64) flags |= FF_ADDITIVETRANS | FF_TRANSLUCENT; + // if flooding is used the floor must be non-solid and is automatically made shootthrough and seethrough + if ((param2 & 128) && !(flags & FF_SOLID)) flags |= FF_FLOOD | FF_SEETHROUGH | FF_SHOOTTHROUGH; + if (param2 & 512) flags |= FF_FADEWALLS; + if (param2&1024) flags |= FF_RESET; + FTextureID tex = line->sidedef[0]->GetTexture(side_t::top); + if (!tex.Exists() && alpha < 255) + { + alpha = -tex.GetIndex(); + } + alpha = clamp(alpha, 0, 255); + if (alpha == 0) flags &= ~(FF_RENDERALL | FF_BOTHPLANES | FF_ALLSIDES); + else if (alpha != 255) flags |= FF_TRANSLUCENT; + + } + P_Add3DFloor(ss, sec, line, flags, alpha); + } + // To be 100% safe this should be done even if the alpha by texture value isn't used. + if (!line->sidedef[0]->GetTexture(side_t::top).isValid()) + line->sidedef[0]->SetTexture(side_t::top, FNullTextureID()); + return 1; +} + +//========================================================================== +// +// Spawns 3D floors +// +//========================================================================== + +void MapLoader::Spawn3DFloors () +{ + static int flagvals[] = {512, 2+512, 512+1024}; + + for (auto &line : Level->lines) + { + switch(line.special) + { + case ExtraFloor_LightOnly: + if (line.args[1] < 0 || line.args[1] > 2) line.args[1] = 0; + if (line.args[0] != 0) + Set3DFloor(&line, 3, flagvals[line.args[1]], 0); + break; + + case Sector_Set3DFloor: + // The flag high-byte/line id is only needed in Hexen format. + // UDMF can set both of these parameters without any restriction of the usable values. + // In Doom format the translators can take full integers for the tag and the line ID always is the same as the tag. + if (Level->maptype == MAPTYPE_HEXEN) + { + if (line.args[1]&8) + { + Level->tagManager.AddLineID(line.Index(), line.args[4]); + } + else + { + line.args[0]+=256*line.args[4]; + line.args[4]=0; + } + } + Set3DFloor(&line, line.args[1]&~8, line.args[2], line.args[3]); + break; + + default: + continue; + } + line.special=0; + line.args[0] = line.args[1] = line.args[2] = line.args[3] = line.args[4] = 0; + } + + for (auto &sec : Level->sectors) + { + P_Recalculate3DFloors(&sec); + } +} + +//========================================================================== +// +// Spawns light effects +// +//========================================================================== + +void MapLoader::SpawnLights(sector_t *sector) +{ + const int STROBEBRIGHT = 5; + const int FASTDARK = 15; + const int SLOWDARK = TICRATE; + + switch (sector->special) + { + case Light_Phased: + Level->CreateThinker(sector, 48, 63 - (sector->lightlevel & 63)); + break; + + // [RH] Hexen-like phased lighting + case LightSequenceStart: + Level->CreateThinker(sector); + break; + + case dLight_Flicker: + Level->CreateThinker(sector); + break; + + case dLight_StrobeFast: + Level->CreateThinker(sector, STROBEBRIGHT, FASTDARK, false); + break; + + case dLight_StrobeSlow: + Level->CreateThinker(sector, STROBEBRIGHT, SLOWDARK, false); + break; + + case dLight_Strobe_Hurt: + Level->CreateThinker(sector, STROBEBRIGHT, FASTDARK, false); + break; + + case dLight_Glow: + Level->CreateThinker(sector); + break; + + case dLight_StrobeSlowSync: + Level->CreateThinker(sector, STROBEBRIGHT, SLOWDARK, true); + break; + + case dLight_StrobeFastSync: + Level->CreateThinker(sector, STROBEBRIGHT, FASTDARK, true); + break; + + case dLight_FireFlicker: + Level->CreateThinker(sector); + break; + + case dScroll_EastLavaDamage: + Level->CreateThinker(sector, STROBEBRIGHT, FASTDARK, false); + break; + + case sLight_Strobe_Hurt: + Level->CreateThinker(sector, STROBEBRIGHT, FASTDARK, false); + break; + + default: + break; + } +} + +///////////////////////////// +// +// P_GetPushThing() returns a pointer to an MT_PUSH or MT_PULL thing, +// NULL otherwise. + +AActor *MapLoader::GetPushThing(int s) +{ + AActor* thing; + sector_t* sec; + + sec = &Level->sectors[s]; + thing = sec->thinglist; + + while (thing && + thing->GetClass()->TypeName != NAME_PointPusher && + thing->GetClass()->TypeName != NAME_PointPuller) + { + thing = thing->snext; + } + return thing; +} + +///////////////////////////// +// +// Initialize the sectors where pushers are present +// + +void MapLoader::SpawnPushers() +{ + line_t *l = &Level->lines[0]; + int s; + + for (unsigned i = 0; i < Level->lines.Size(); i++, l++) + { + switch (l->special) + { + case Sector_SetWind: // wind + { + auto itr = Level->GetSectorTagIterator(l->args[0]); + while ((s = itr.Next()) >= 0) + Level->CreateThinker(DPusher::p_wind, l->args[3] ? l : nullptr, l->args[1], l->args[2], nullptr, s); + l->special = 0; + break; + } + + case Sector_SetCurrent: // current + { + auto itr = Level->GetSectorTagIterator(l->args[0]); + while ((s = itr.Next()) >= 0) + Level->CreateThinker(DPusher::p_current, l->args[3] ? l : nullptr, l->args[1], l->args[2], nullptr, s); + l->special = 0; + break; + } + + case PointPush_SetForce: // push/pull + if (l->args[0]) { // [RH] Find thing by sector + auto itr = Level->GetSectorTagIterator(l->args[0]); + while ((s = itr.Next()) >= 0) + { + AActor *thing = GetPushThing(s); + if (thing) { // No MT_P* means no effect + // [RH] Allow narrowing it down by tid + if (!l->args[1] || l->args[1] == thing->tid) + Level->CreateThinker(DPusher::p_push, l->args[3] ? l : NULL, l->args[2], + 0, thing, s); + } + } + } + else { // [RH] Find thing by tid + AActor *thing; + auto iterator = Level->GetActorIterator(l->args[1]); + + while ((thing = iterator.Next())) + { + if (thing->GetClass()->TypeName == NAME_PointPusher || + thing->GetClass()->TypeName == NAME_PointPuller) + { + Level->CreateThinker(DPusher::p_push, l->args[3] ? l : NULL, l->args[2], 0, thing, thing->Sector->Index()); + } + } + } + l->special = 0; + break; + } + } +} + +//----------------------------------------------------------------------------- +// +// Initialize the scrollers +// +//----------------------------------------------------------------------------- + +void MapLoader::SpawnScrollers() +{ + auto SCROLLTYPE = [](int i) { return EScrollPos((i <= 0) || (i & ~7) ? 7 : i); }; + + line_t *l = &Level->lines[0]; + side_t *side; + TArray copyscrollers; + + for (auto &line : Level->lines) + { + if (line.special == Sector_CopyScroller) + { + // don't allow copying the scroller if the sector has the same tag as it would just duplicate it. + if (!Level->SectorHasTag(line.frontsector, line.args[0])) + { + copyscrollers.Push(line.Index()); + } + line.special = 0; + } + } + + for (unsigned i = 0; i < Level->lines.Size(); i++, l++) + { + double dx; // direction and speed of scrolling + double dy; + sector_t *control = nullptr; + int accel = 0; // no control sector or acceleration + int special = l->special; + + // Check for undefined parameters that are non-zero and output messages for them. + // We don't report for specials we don't understand. + FLineSpecial *spec = P_GetLineSpecialInfo(special); + if (spec != nullptr) + { + int max = spec->map_args; + for (unsigned arg = max; arg < countof(l->args); ++arg) + { + if (l->args[arg] != 0) + { + Printf("Line %d (type %d:%s), arg %u is %d (should be 0)\n", + i, special, spec->name, arg + 1, l->args[arg]); + } + } + } + + // killough 3/7/98: Types 245-249 are same as 250-254 except that the + // first side's sector's heights cause scrolling when they change, and + // this linedef controls the direction and speed of the scrolling. The + // most complicated linedef since donuts, but powerful :) + // + // killough 3/15/98: Add acceleration. Types 214-218 are the same but + // are accelerative. + + // [RH] Assume that it's a scroller and zero the line's special. + l->special = 0; + + dx = dy = 0; // Shut up, GCC + + if (special == Scroll_Ceiling || + special == Scroll_Floor || + special == Scroll_Texture_Model) + { + if (l->args[1] & 3) + { + // if 1, then displacement + // if 2, then accelerative (also if 3) + control = l->sidedef[0]->sector; + if (l->args[1] & 2) + accel = 1; + } + if (special == Scroll_Texture_Model || l->args[1] & 4) + { + // The line housing the special controls the + // direction and speed of scrolling. + dx = l->Delta().X / 32.; + dy = l->Delta().Y / 32.; + } + else + { + // The speed and direction are parameters to the special. + dx = (l->args[3] - 128) / 32.; + dy = (l->args[4] - 128) / 32.; + } + } + + switch (special) + { + int s; + + case Scroll_Ceiling: + { + auto itr = Level->GetSectorTagIterator(l->args[0]); + while ((s = itr.Next()) >= 0) + { + Level->CreateThinker(EScroll::sc_ceiling, -dx, dy, control, &Level->sectors[s], nullptr, accel); + } + for (unsigned j = 0; j < copyscrollers.Size(); j++) + { + line_t *line = &Level->lines[copyscrollers[j]]; + + if (line->args[0] == l->args[0] && (line->args[1] & 1)) + { + Level->CreateThinker(EScroll::sc_ceiling, -dx, dy, control, line->frontsector, nullptr, accel); + } + } + break; + } + + case Scroll_Floor: + if (l->args[2] != 1) + { // scroll the floor texture + auto itr = Level->GetSectorTagIterator(l->args[0]); + while ((s = itr.Next()) >= 0) + { + Level->CreateThinker(EScroll::sc_floor, -dx, dy, control, &Level->sectors[s], nullptr, accel); + } + for (unsigned j = 0; j < copyscrollers.Size(); j++) + { + line_t *line = &Level->lines[copyscrollers[j]]; + + if (line->args[0] == l->args[0] && (line->args[1] & 2)) + { + Level->CreateThinker(EScroll::sc_floor, -dx, dy, control, line->frontsector, nullptr, accel); + } + } + } + + if (l->args[2] > 0) + { // carry objects on the floor + auto itr = Level->GetSectorTagIterator(l->args[0]); + while ((s = itr.Next()) >= 0) + { + Level->CreateThinker(EScroll::sc_carry, dx, dy, control, &Level->sectors[s], nullptr, accel); + } + for (unsigned j = 0; j < copyscrollers.Size(); j++) + { + line_t *line = &Level->lines[copyscrollers[j]]; + + if (line->args[0] == l->args[0] && (line->args[1] & 4)) + { + Level->CreateThinker(EScroll::sc_carry, dx, dy, control, line->frontsector, nullptr, accel); + } + } + } + break; + + // killough 3/1/98: scroll wall according to linedef + // (same direction and speed as scrolling floors) + case Scroll_Texture_Model: + { + auto itr = Level->GetLineIdIterator(l->args[0]); + while ((s = itr.Next()) >= 0) + { + if (s != (int)i) + Level->CreateThinker(dx, dy, &Level->lines[s], control, accel); + } + break; + } + + case Scroll_Texture_Offsets: + // killough 3/2/98: scroll according to sidedef offsets + side = Level->lines[i].sidedef[0]; + Level->CreateThinker(EScroll::sc_side, -side->GetTextureXOffset(side_t::mid), + side->GetTextureYOffset(side_t::mid), nullptr, nullptr, side, accel, SCROLLTYPE(l->args[0])); + break; + + case Scroll_Texture_Left: + l->special = special; // Restore the special, for compat_useblocking's benefit. + side = Level->lines[i].sidedef[0]; + Level->CreateThinker(EScroll::sc_side, l->args[0] / 64., 0, nullptr, nullptr, side, accel, SCROLLTYPE(l->args[1])); + break; + + case Scroll_Texture_Right: + l->special = special; + side = Level->lines[i].sidedef[0]; + Level->CreateThinker(EScroll::sc_side, -l->args[0] / 64., 0, nullptr, nullptr, side, accel, SCROLLTYPE(l->args[1])); + break; + + case Scroll_Texture_Up: + l->special = special; + side = Level->lines[i].sidedef[0]; + Level->CreateThinker(EScroll::sc_side, 0, l->args[0] / 64., nullptr, nullptr, side, accel, SCROLLTYPE(l->args[1])); + break; + + case Scroll_Texture_Down: + l->special = special; + side = Level->lines[i].sidedef[0]; + Level->CreateThinker(EScroll::sc_side, 0, -l->args[0] / 64., nullptr, nullptr, side, accel, SCROLLTYPE(l->args[1])); + break; + + case Scroll_Texture_Both: + side = Level->lines[i].sidedef[0]; + if (l->args[0] == 0) { + dx = (l->args[1] - l->args[2]) / 64.; + dy = (l->args[4] - l->args[3]) / 64.; + Level->CreateThinker(EScroll::sc_side, dx, dy, nullptr, nullptr, side, accel); + } + break; + + default: + // [RH] It wasn't a scroller after all, so restore the special. + l->special = special; + break; + } + } +} + + +void MapLoader::CreateScroller(EScroll type, double dx, double dy, sector_t *affectee, int accel, EScrollPos scrollpos) +{ + Level->CreateThinker(type, dx, dy, nullptr, affectee, nullptr, accel, scrollpos); +} diff --git a/src/maploader/udmf.cpp b/src/maploader/udmf.cpp index 1918079d61..3a86bfcdfb 100644 --- a/src/maploader/udmf.cpp +++ b/src/maploader/udmf.cpp @@ -36,7 +36,7 @@ #include "doomstat.h" #include "p_setup.h" #include "p_lnspec.h" -#include "i_system.h" + #include "gi.h" #include "r_sky.h" #include "g_level.h" @@ -49,6 +49,7 @@ #include "g_levellocals.h" #include "info.h" #include "vm.h" +#include "xlat/xlat.h" #include "maploader.h" //=========================================================================== @@ -285,20 +286,6 @@ const char *UDMFParserBase::CheckString(const char *key) // //=========================================================================== -typedef TMap FUDMFKeyMap; - - -static FUDMFKeyMap UDMFKeys[4]; -// Things must be handled differently - -void P_ClearUDMFKeys() -{ - for(int i=0;i<4;i++) - { - UDMFKeys[i].Clear(); - } -} - static int udmfcmp(const void *a, const void *b) { FUDMFKey *A = (FUDMFKey*)a; @@ -346,11 +333,11 @@ FUDMFKey *FUDMFKeys::Find(FName key) // //=========================================================================== -int GetUDMFInt(int type, int index, FName key) +int GetUDMFInt(FLevelLocals *Level, int type, int index, FName key) { assert(type >=0 && type <=3); - FUDMFKeys *pKeys = UDMFKeys[type].CheckKey(index); + FUDMFKeys *pKeys = Level->UDMFKeys[type].CheckKey(index); if (pKeys != NULL) { @@ -363,11 +350,11 @@ int GetUDMFInt(int type, int index, FName key) return 0; } -double GetUDMFFloat(int type, int index, FName key) +double GetUDMFFloat(FLevelLocals *Level, int type, int index, FName key) { assert(type >=0 && type <=3); - FUDMFKeys *pKeys = UDMFKeys[type].CheckKey(index); + FUDMFKeys *pKeys = Level->UDMFKeys[type].CheckKey(index); if (pKeys != NULL) { @@ -380,11 +367,11 @@ double GetUDMFFloat(int type, int index, FName key) return 0; } -FString GetUDMFString(int type, int index, FName key) +FString GetUDMFString(FLevelLocals *Level, int type, int index, FName key) { assert(type >= 0 && type <= 3); - FUDMFKeys *pKeys = UDMFKeys[type].CheckKey(index); + FUDMFKeys *pKeys = Level->UDMFKeys[type].CheckKey(index); if (pKeys != NULL) { @@ -459,7 +446,7 @@ public: } void AddUserKey(FName key, int kind, int index) { - FUDMFKeys &keyarray = UDMFKeys[kind][index]; + FUDMFKeys &keyarray = Level->UDMFKeys[kind][index]; for(unsigned i=0; i < keyarray.Size(); i++) { @@ -792,7 +779,7 @@ public: mld.flags = 0; mld.special = th->special; mld.tag = th->args[0]; - P_TranslateLineDef(&ld, &mld); + Level->TranslateLineDef(&ld, &mld); th->special = ld.special; memcpy(th->args, ld.args, sizeof (ld.args)); } @@ -856,7 +843,7 @@ public: case NAME_Id: lineid = CheckInt(key); - tagManager.AddLineID(index, lineid); + Level->tagManager.AddLineID(index, lineid); continue; case NAME_Sidefront: @@ -1127,7 +1114,7 @@ public: // scan the string as long as valid numbers can be found while (sc.CheckNumber()) { - if (sc.Number != 0) tagManager.AddLineID(index, sc.Number); + if (sc.Number != 0) Level->tagManager.AddLineID(index, sc.Number); } } @@ -1139,7 +1126,7 @@ public: memset(&mld, 0, sizeof(mld)); mld.special = ld->special; mld.tag = ld->args[0]; - P_TranslateLineDef(ld, &mld); + Level->TranslateLineDef(ld, &mld); ld->flags = saved | (ld->flags&(ML_MONSTERSCANACTIVATE|ML_REPEAT_SPECIAL|ML_FIRSTSIDEONLY)); } if (passuse && (ld->activation & SPAC_Use)) @@ -1445,6 +1432,7 @@ public: FName scroll_floor_type = NAME_None; memset(sec, 0, sizeof(*sec)); + sec->Level = Level; sec->lightlevel = 160; sec->SetXScale(sector_t::floor, 1.); // [RH] floor and ceiling scaling sec->SetYScale(sector_t::floor, 1.); @@ -1504,7 +1492,7 @@ public: case NAME_Special: sec->special = (short)CheckInt(key); - if (isTranslated) sec->special = P_TranslateSectorSpecial(sec->special); + if (isTranslated) sec->special = Level->TranslateSectorSpecial(sec->special); else if (namespc == NAME_Hexen) { if (sec->special < 0 || sec->special > 140 || !HexenSectorSpecialOk[sec->special]) @@ -1513,7 +1501,7 @@ public: continue; case NAME_Id: - tagManager.AddSectorTag(index, CheckInt(key)); + Level->tagManager.AddSectorTag(index, CheckInt(key)); continue; default: @@ -1908,7 +1896,7 @@ public: // scan the string as long as valid numbers can be found while (sc.CheckNumber()) { - if (sc.Number != 0) tagManager.AddSectorTag(index, sc.Number); + if (sc.Number != 0) Level->tagManager.AddSectorTag(index, sc.Number); } } @@ -2160,19 +2148,19 @@ public: break; case NAME_Doom: namespace_bits = Dm; - P_LoadTranslator("xlat/doom_base.txt"); + Level->Translator = P_LoadTranslator("xlat/doom_base.txt"); Level->flags2 |= LEVEL2_DUMMYSWITCHES; floordrop = true; break; case NAME_Heretic: namespace_bits = Ht; - P_LoadTranslator("xlat/heretic_base.txt"); + Level->Translator = P_LoadTranslator("xlat/heretic_base.txt"); Level->flags2 |= LEVEL2_DUMMYSWITCHES; floordrop = true; break; case NAME_Strife: namespace_bits = St; - P_LoadTranslator("xlat/strife_base.txt"); + Level->Translator = P_LoadTranslator("xlat/strife_base.txt"); Level->flags2 |= LEVEL2_DUMMYSWITCHES|LEVEL2_RAILINGHACK; floordrop = true; break; @@ -2184,15 +2172,15 @@ public: case GAME_Doom: case GAME_Chex: namespace_bits = Dm; - P_LoadTranslator("xlat/doom_base.txt"); + Level->Translator = P_LoadTranslator("xlat/doom_base.txt"); break; case GAME_Heretic: namespace_bits = Ht; - P_LoadTranslator("xlat/heretic_base.txt"); + Level->Translator = P_LoadTranslator("xlat/heretic_base.txt"); break; case GAME_Strife: namespace_bits = St; - P_LoadTranslator("xlat/strife_base.txt"); + Level->Translator = P_LoadTranslator("xlat/strife_base.txt"); break; case GAME_Hexen: namespace_bits = Hx; @@ -2285,12 +2273,12 @@ public: const double scrollfactor = 1 / 3.2; // I hope this is correct, it's just a guess taken from Eternity's code. if (scroll.type == NAME_Both || scroll.type == NAME_Visual) { - P_CreateScroller(scroll.ceiling ? EScroll::sc_ceiling : EScroll::sc_floor, scroll.x * scrollfactor, scroll.y * scrollfactor, &Level->sectors[scroll.index], 0); + loader->CreateScroller(scroll.ceiling ? EScroll::sc_ceiling : EScroll::sc_floor, scroll.x * scrollfactor, scroll.y * scrollfactor, &Level->sectors[scroll.index], 0); } if (scroll.type == NAME_Both || scroll.type == NAME_Physical) { // sc_carry_ceiling doesn't do anything yet. - P_CreateScroller(scroll.ceiling ? EScroll::sc_carry_ceiling : EScroll::sc_carry, scroll.x * scrollfactor, scroll.y * scrollfactor, &Level->sectors[scroll.index], 0); + loader->CreateScroller(scroll.ceiling ? EScroll::sc_carry_ceiling : EScroll::sc_carry, scroll.x * scrollfactor, scroll.y * scrollfactor, &Level->sectors[scroll.index], 0); } } diff --git a/src/menu/loadsavemenu.cpp b/src/menu/loadsavemenu.cpp index 6361e8e4f3..c7dc2738e8 100644 --- a/src/menu/loadsavemenu.cpp +++ b/src/menu/loadsavemenu.cpp @@ -42,6 +42,7 @@ #include "gstrings.h" #include "serializer.h" #include "vm.h" +#include "i_system.h" // Save name length limit for old binary formats. #define OLDSAVESTRINGSIZE 24 @@ -180,7 +181,7 @@ void FSavegameManager::ReadSaveStrings() continue; } void *data = info->CacheLump(); - FSerializer arc; + FSerializer arc(nullptr); if (arc.OpenReader((const char *)data, info->LumpSize)) { int savever = 0; @@ -469,7 +470,7 @@ unsigned FSavegameManager::ExtractSaveData(int index) return index; } void *data = info->CacheLump(); - FSerializer arc; + FSerializer arc(nullptr); if (arc.OpenReader((const char *)data, info->LumpSize)) { FString time, pcomment, comment; diff --git a/src/menu/menu.cpp b/src/menu/menu.cpp index a61733a2d8..6689f771b4 100644 --- a/src/menu/menu.cpp +++ b/src/menu/menu.cpp @@ -51,6 +51,7 @@ #include "menu/menu.h" #include "vm.h" #include "events.h" +#include "v_video.h" #include "scripting/types.h" int DMenu::InMenu; diff --git a/src/menu/menudef.cpp b/src/menu/menudef.cpp index 43c703900e..409db4ba3d 100644 --- a/src/menu/menudef.cpp +++ b/src/menu/menudef.cpp @@ -45,7 +45,8 @@ #include "gameconfigfile.h" #include "m_argv.h" #include "i_soundfont.h" - +#include "i_system.h" +#include "v_video.h" void ClearSaveGames(); diff --git a/src/mus2midi.cpp b/src/mus2midi.cpp deleted file mode 100644 index 09abdeb192..0000000000 --- a/src/mus2midi.cpp +++ /dev/null @@ -1,309 +0,0 @@ -/* -** mus2midi.cpp -** Simple converter from MUS to MIDI format -** -**--------------------------------------------------------------------------- -** Copyright 1998-2006 Randy Heit -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**--------------------------------------------------------------------------- -** -** MUS files are essentially format 0 MIDI files with some -** space-saving modifications. Conversion is quite straight-forward. -** If you were to hook a main() into this that calls ProduceMIDI, -** you could create a self-contained MUS->MIDI converter. -*/ - - -#include - -#include "m_swap.h" -#include "mus2midi.h" -#include "doomdef.h" - -static const uint8_t StaticMIDIhead[] = -{ 'M','T','h','d', 0, 0, 0, 6, -0, 0, // format 0: only one track -0, 1, // yes, there is really only one track -0, 70, // 70 divisions -'M','T','r','k', 0, 0, 0, 0, -// The first event sets the tempo to 500,000 microsec/quarter note -0, 255, 81, 3, 0x07, 0xa1, 0x20 -}; - -extern int MUSHeaderSearch(const uint8_t *head, int len); - -static const uint8_t CtrlTranslate[15] = -{ - 0, // program change - 0, // bank select - 1, // modulation pot - 7, // volume - 10, // pan pot - 11, // expression pot - 91, // reverb depth - 93, // chorus depth - 64, // sustain pedal - 67, // soft pedal - 120, // all sounds off - 123, // all notes off - 126, // mono - 127, // poly - 121, // reset all controllers -}; - -static size_t ReadVarLen (const uint8_t *buf, int *time_out) -{ - int time = 0; - size_t ofs = 0; - uint8_t t; - - do - { - t = buf[ofs++]; - time = (time << 7) | (t & 127); - } while (t & 128); - *time_out = time; - return ofs; -} - -static size_t WriteVarLen (TArray &file, int time) -{ - long buffer; - size_t ofs; - - buffer = time & 0x7f; - while ((time >>= 7) > 0) - { - buffer = (buffer << 8) | 0x80 | (time & 0x7f); - } - for (ofs = 0;;) - { - file.Push(uint8_t(buffer & 0xff)); - if (buffer & 0x80) - buffer >>= 8; - else - break; - } - return ofs; -} - -bool ProduceMIDI (const uint8_t *musBuf, int len, TArray &outFile) -{ - uint8_t midStatus, midArgs, mid1, mid2; - size_t mus_p, maxmus_p; - uint8_t event; - int deltaTime; - const MUSHeader *musHead; - uint8_t status; - uint8_t chanUsed[16]; - uint8_t lastVel[16]; - long trackLen; - bool no_op; - - // Find the header - int offset = MUSHeaderSearch(musBuf, len); - - if (offset < 0 || offset + (int)sizeof(MUSHeader) >= len) - return false; - - musBuf += offset; - len -= offset; - musHead = (const MUSHeader *)musBuf; - - // Do some validation of the MUS file - if (LittleShort(musHead->NumChans) > 15) - return false; - - // Prep for conversion - outFile.Clear(); - outFile.Reserve(sizeof(StaticMIDIhead)); - memcpy(&outFile[0], StaticMIDIhead, sizeof(StaticMIDIhead)); - - musBuf += LittleShort(musHead->SongStart); - mus_p = 0; - maxmus_p = LittleShort(musHead->SongLen); - if ((size_t)len - LittleShort(musHead->SongStart) < maxmus_p) - { - maxmus_p = len - LittleShort(musHead->SongStart); - } - - memset (lastVel, 100, 16); - memset (chanUsed, 0, 16); - event = 0; - deltaTime = 0; - status = 0; - - while (mus_p < maxmus_p && (event & 0x70) != MUS_SCOREEND) - { - int channel; - uint8_t t = 0; - - event = musBuf[mus_p++]; - - if ((event & 0x70) != MUS_SCOREEND) - { - t = musBuf[mus_p++]; - } - channel = event & 15; - if (channel == 15) - { - channel = 9; - } - else if (channel >= 9) - { - channel++; - } - - if (!chanUsed[channel]) - { - // This is the first time this channel has been used, - // so sets its volume to 127. - chanUsed[channel] = 1; - outFile.Push(0); - outFile.Push(0xB0 | channel); - outFile.Push(7); - outFile.Push(127); - } - - midStatus = channel; - midArgs = 0; // Most events have two args (0 means 2, 1 means 1) - no_op = false; - - switch (event & 0x70) - { - case MUS_NOTEOFF: - midStatus |= MIDI_NOTEON; - mid1 = t & 127; - mid2 = 0; - break; - - case MUS_NOTEON: - midStatus |= MIDI_NOTEON; - mid1 = t & 127; - if (t & 128) - { - lastVel[channel] = musBuf[mus_p++] & 127; - } - mid2 = lastVel[channel]; - break; - - case MUS_PITCHBEND: - midStatus |= MIDI_PITCHBEND; - mid1 = (t & 1) << 6; - mid2 = (t >> 1) & 127; - break; - - case MUS_SYSEVENT: - if (t < 10 || t > 14) - { - no_op = true; - } - else - { - midStatus |= MIDI_CTRLCHANGE; - mid1 = CtrlTranslate[t]; - mid2 = t == 12 /* Mono */ ? LittleShort(musHead->NumChans) : 0; - } - break; - - case MUS_CTRLCHANGE: - if (t == 0) - { // program change - midArgs = 1; - midStatus |= MIDI_PRGMCHANGE; - mid1 = musBuf[mus_p++] & 127; - mid2 = 0; // Assign mid2 just to make GCC happy - } - else if (t > 0 && t < 10) - { - midStatus |= MIDI_CTRLCHANGE; - mid1 = CtrlTranslate[t]; - mid2 = musBuf[mus_p++]; - } - else - { - no_op = true; - } - break; - - case MUS_SCOREEND: - midStatus = MIDI_META; - mid1 = MIDI_META_EOT; - mid2 = 0; - break; - - default: - return false; - } - - if (no_op) - { - // A system-specific event with no data is a no-op. - midStatus = MIDI_META; - mid1 = MIDI_META_SSPEC; - mid2 = 0; - } - - WriteVarLen (outFile, deltaTime); - - if (midStatus != status) - { - status = midStatus; - outFile.Push(status); - } - outFile.Push(mid1); - if (midArgs == 0) - { - outFile.Push(mid2); - } - if (event & 128) - { - mus_p += ReadVarLen (&musBuf[mus_p], &deltaTime); - } - else - { - deltaTime = 0; - } - } - - // fill in track length - trackLen = outFile.Size() - 22; - outFile[18] = uint8_t((trackLen >> 24) & 255); - outFile[19] = uint8_t((trackLen >> 16) & 255); - outFile[20] = uint8_t((trackLen >> 8) & 255); - outFile[21] = uint8_t(trackLen & 255); - return true; -} - -bool ProduceMIDI(const uint8_t *musBuf, int len, FILE *outFile) -{ - TArray work; - if (ProduceMIDI(musBuf, len, work)) - { - return fwrite(&work[0], 1, work.Size(), outFile) == work.Size(); - } - return false; -} diff --git a/src/p_acs.cpp b/src/p_acs.cpp index 5c4749dec4..40e38c690a 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -671,9 +671,8 @@ public: SCRIPT_ModulusBy0, }; - DLevelScript(AActor *who, line_t *where, int num, const ScriptPtr *code, FBehavior *module, + DLevelScript(FLevelLocals *l, AActor *who, line_t *where, int num, const ScriptPtr *code, FBehavior *module, const int *args, int argcount, int flags); - ~DLevelScript(); void Serialize(FSerializer &arc); int RunScript(); @@ -694,6 +693,8 @@ public: GlobalACSStrings.LockStringArray(levelnum, &Localvars[0], Localvars.Size()); } + FLevelLocals *Level; + protected: DLevelScript *next, *prev; int script; @@ -735,22 +736,21 @@ protected: void Unlink(); void PutLast(); void PutFirst(); - static int Random(int min, int max); - static int ThingCount(int type, int stringid, int tid, int tag); - static void ChangeFlat(int tag, int name, bool floorOrCeiling); - static int CountPlayers(); - static void SetLineTexture(int lineid, int side, int position, int name); - static int DoSpawn(int type, const DVector3 &pos, int tid, DAngle angle, bool force); - static int DoSpawn(int type, int x, int y, int z, int tid, int angle, bool force); - static bool DoCheckActorTexture(int tid, AActor *activator, int string, bool floor); + int Random(int min, int max); + int ThingCount(int type, int stringid, int tid, int tag); + void ChangeFlat(int tag, int name, bool floorOrCeiling); + int CountPlayers(); + void SetLineTexture(int lineid, int side, int position, int name); + int DoSpawn(int type, const DVector3 &pos, int tid, DAngle angle, bool force); + int DoSpawn(int type, int x, int y, int z, int tid, int angle, bool force); + bool DoCheckActorTexture(int tid, AActor *activator, int string, bool floor); int DoSpawnSpot(int type, int spot, int tid, int angle, bool forced); int DoSpawnSpotFacing(int type, int spot, int tid, bool forced); int DoClassifyActor(int tid); int CallFunction(int argCount, int funcIndex, int32_t *args); void DoFadeTo(int r, int g, int b, int a, int time); - void DoFadeRange(int r1, int g1, int b1, int a1, - int r2, int g2, int b2, int a2, int time); + void DoFadeRange(int r1, int g1, int b1, int a1, int r2, int g2, int b2, int a2, int time); void DoSetFont(int fontnum); void SetActorProperty(int tid, int property, int value); void DoSetActorProperty(AActor *actor, int property, int value); @@ -760,6 +760,18 @@ protected: int LineFromID(int id); int SideFromID(int id, int side); + int ScriptCall(AActor *activator, unsigned argc, int32_t *args); + int DoSetMaster(AActor *self, AActor *master); + void SetUserVariable(AActor *self, FName varname, int index, int value); + void DoSetCVar(FBaseCVar *cvar, int value, bool is_string, bool force = false); + int SetUserCVar(int playernum, const char *cvarname, int value, bool is_string); + int SetCVar(AActor *activator, const char *cvarname, int value, bool is_string); + void SetActorAngle(AActor *activator, int tid, int angle, bool interpolate); + void SetActorPitch(AActor *activator, int tid, int angle, bool interpolate); + void SetActorRoll(AActor *activator, int tid, int angle, bool interpolate); + void SetActorTeleFog(AActor *activator, int tid, FString telefogsrc, FString telefogdest); + int SwapActorTeleFog(AActor *activator, int tid); + private: DLevelScript(); @@ -767,7 +779,7 @@ private: friend class DACSThinker; }; -static DLevelScript *P_GetScriptGoing (AActor *who, line_t *where, int num, const ScriptPtr *code, FBehavior *module, +static DLevelScript *P_GetScriptGoing (FLevelLocals *Level, AActor *who, line_t *where, int num, const ScriptPtr *code, FBehavior *module, const int *args, int argcount, int flags); @@ -1435,7 +1447,10 @@ void P_CollectACSGlobalStrings() GlobalACSStrings.MarkStringArray(&stack->buffer[0], sp); } } - level.Behaviors.MarkLevelVarStrings(); + for(auto Level : AllLevels()) + { + Level->Behaviors.MarkLevelVarStrings(); + } P_MarkWorldVarStrings(); P_MarkGlobalVarStrings(); GlobalACSStrings.PurgeStrings(); @@ -1710,7 +1725,7 @@ static bool DoUseInv (AActor *actor, PClassActor *info) // //============================================================================ -static int UseInventory (AActor *activator, const char *type) +static int UseInventory (FLevelLocals *Level, AActor *activator, const char *type) { PClassActor *info; int ret = 0; @@ -1728,8 +1743,8 @@ static int UseInventory (AActor *activator, const char *type) { for (int i = 0; i < MAXPLAYERS; ++i) { - if (playeringame[i]) - ret += DoUseInv (players[i].mo, info); + if (Level->PlayerInGame(i)) + ret += DoUseInv (Level->Players[i]->mo, info); } } else @@ -1744,6 +1759,7 @@ static int UseInventory (AActor *activator, const char *type) // CheckInventory // // Returns how much of a particular item an actor has. +// This also gets called from FraggleScript. // //============================================================================ @@ -1801,8 +1817,8 @@ class DPlaneWatcher : public DThinker DECLARE_CLASS (DPlaneWatcher, DThinker) HAS_OBJECT_POINTERS public: - DPlaneWatcher (AActor *it, line_t *line, int lineSide, bool ceiling, - int tag, int height, int special, + void Construct(AActor *it, line_t *line, int lineSide, bool ceiling, + sector_t *sec, int height, int special, int arg0, int arg1, int arg2, int arg3, int arg4); void Tick (); void Serialize(FSerializer &arc); @@ -1816,7 +1832,7 @@ private: bool LineSide; bool bCeiling; - DPlaneWatcher() {} + DPlaneWatcher() = default; }; IMPLEMENT_CLASS(DPlaneWatcher, false, true) @@ -1825,42 +1841,35 @@ IMPLEMENT_POINTERS_START(DPlaneWatcher) IMPLEMENT_POINTER(Activator) IMPLEMENT_POINTERS_END -DPlaneWatcher::DPlaneWatcher (AActor *it, line_t *line, int lineSide, bool ceiling, - int tag, int height, int special, - int arg0, int arg1, int arg2, int arg3, int arg4) - : Special (special), - Activator (it), Line (line), LineSide (!!lineSide), bCeiling (ceiling) +void DPlaneWatcher::Construct(AActor *it, line_t *line, int lineSide, bool ceiling, + sector_t *sec, int height, int special, int arg0, int arg1, int arg2, int arg3, int arg4) { - int secnum; + secplane_t plane; + + Special = special; + Activator = it; + Line = line; + LineSide = !!lineSide; + bCeiling = ceiling; Args[0] = arg0; Args[1] = arg1; Args[2] = arg2; Args[3] = arg3; Args[4] = arg4; - secnum = P_FindFirstSectorFromTag (tag); - if (secnum >= 0) - { - secplane_t plane; - Sector = &level.sectors[secnum]; - if (bCeiling) - { - plane = Sector->ceilingplane; - } - else - { - plane = Sector->floorplane; - } - LastD = plane.fD(); - plane.ChangeHeight (height); - WatchD = plane.fD(); + Sector = sec; + if (bCeiling) + { + plane = Sector->ceilingplane; } else { - Sector = NULL; - WatchD = LastD = 0; + plane = Sector->floorplane; } + LastD = plane.fD(); + plane.ChangeHeight (height); + WatchD = plane.fD(); } void DPlaneWatcher::Serialize(FSerializer &arc) @@ -1900,7 +1909,7 @@ void DPlaneWatcher::Tick () if ((LastD < WatchD && newd >= WatchD) || (LastD > WatchD && newd <= WatchD)) { - P_ExecuteSpecial(Special, Line, Activator, LineSide, Args[0], Args[1], Args[2], Args[3], Args[4]); + P_ExecuteSpecial(Level, Special, Line, Activator, LineSide, Args[0], Args[1], Args[2], Args[3], Args[4]); Destroy (); } @@ -1933,7 +1942,7 @@ void FBehaviorContainer::LoadDefaultModules () } } -FBehavior *FBehaviorContainer::LoadModule (int lumpnum, FileReader *fr, int len) +FBehavior *FBehaviorContainer::LoadModule (int lumpnum, FileReader *fr, int len, int reallumpnum) { if (lumpnum == -1 && fr == NULL) return NULL; @@ -1946,7 +1955,7 @@ FBehavior *FBehaviorContainer::LoadModule (int lumpnum, FileReader *fr, int len) } FBehavior * behavior = new FBehavior (); - if (behavior->Init(lumpnum, fr, len)) + if (behavior->Init(Level, lumpnum, fr, len, reallumpnum)) { return behavior; } @@ -1996,9 +2005,9 @@ void FBehaviorContainer::MarkLevelVarStrings() StaticModules[modnum]->MarkMapVarStrings(); } // Mark running scripts' local variables. - if (level.ACSThinker != nullptr) + if (Level->ACSThinker != nullptr) { - for (DLevelScript *script = level.ACSThinker->Scripts; script != NULL; script = script->GetNext()) + for (DLevelScript *script = Level->ACSThinker->Scripts; script != NULL; script = script->GetNext()) { script->MarkLocalVarStrings(); } @@ -2013,9 +2022,9 @@ void FBehaviorContainer::LockLevelVarStrings(int levelnum) StaticModules[modnum]->LockMapVarStrings(levelnum); } // Lock running scripts' local variables. - if (level.ACSThinker != nullptr) + if (Level->ACSThinker != nullptr) { - for (DLevelScript *script = level.ACSThinker->Scripts; script != NULL; script = script->GetNext()) + for (DLevelScript *script = Level->ACSThinker->Scripts; script != NULL; script = script->GetNext()) { script->LockLocalVarStrings(levelnum); } @@ -2200,11 +2209,12 @@ FBehavior::FBehavior() } -bool FBehavior::Init(int lumpnum, FileReader * fr, int len) +bool FBehavior::Init(FLevelLocals *Level, int lumpnum, FileReader * fr, int len, int reallumpnum) { uint8_t *object; int i; + this->Level = Level; LumpNum = lumpnum; // Now that everything is set up, record this module as being among the loaded modules. @@ -2262,7 +2272,7 @@ bool FBehavior::Init(int lumpnum, FileReader * fr, int len) delete[] object; return false; } - LibraryID = level.Behaviors.StaticModules.Push (this) << LIBRARYID_SHIFT; + LibraryID = Level->Behaviors.StaticModules.Push (this) << LIBRARYID_SHIFT; if (fr == NULL) { @@ -2293,6 +2303,8 @@ bool FBehavior::Init(int lumpnum, FileReader * fr, int len) // Forget about the compatibility cruft at the end of the lump DataSize = LittleLong(((uint32_t *)object)[1]) - 8; } + + ShouldLocalize = false; } else { @@ -2306,6 +2318,17 @@ bool FBehavior::Init(int lumpnum, FileReader * fr, int len) StringTable = LittleLong(((uint32_t *)Data)[1]); StringTable += LittleLong(((uint32_t *)(Data + StringTable))[0]) * 12 + 4; UnescapeStringTable(Data + StringTable, Data, false); + // If this is an original Hexen BEHAVIOR, set up some localization info for it. Original Hexen BEHAVIORs are always in the old format. + if ((Level->flags2 & LEVEL2_HEXENHACK) && gameinfo.gametype == GAME_Hexen && lumpnum == -1 && reallumpnum > 0) + { + int fileno = Wads.GetLumpFile(reallumpnum); + const char * filename = Wads.GetWadName(fileno); + if (!stricmp(filename, "HEXEN.WAD") || !stricmp(filename, "HEXDD.WAD")) + { + ShouldLocalize = true; + } + } + } else { @@ -2551,7 +2574,7 @@ bool FBehavior::Init(int lumpnum, FileReader * fr, int len) } else { - module = level.Behaviors.LoadModule (lump); + module = Level->Behaviors.LoadModule (lump); } if (module != NULL) Imports.Push (module); do {;} while (parse[++i]); @@ -3183,7 +3206,7 @@ uint8_t *FBehavior::NextChunk (uint8_t *chunk) const return NULL; } -const char *FBehaviorContainer::LookupString (uint32_t index) +const char *FBehaviorContainer::LookupString (uint32_t index, bool forprint) { uint32_t lib = index >> LIBRARYID_SHIFT; @@ -3195,10 +3218,10 @@ const char *FBehaviorContainer::LookupString (uint32_t index) { return NULL; } - return StaticModules[lib]->LookupString (index & 0xffff); + return StaticModules[lib]->LookupString (index & 0xffff, forprint); } -const char *FBehavior::LookupString (uint32_t index) const +const char *FBehavior::LookupString (uint32_t index, bool forprint) const { if (StringTable == 0) { @@ -3210,7 +3233,26 @@ const char *FBehavior::LookupString (uint32_t index) const if (index >= list[0]) return NULL; // Out of range for this list; - return (const char *)(Data + list[1+index]); + + const char *s = (const char *)(Data + list[1 + index]); + // Allow translations for Hexen's original strings. + // This synthesizes a string label and looks it up. + // It will only do this for original Hexen maps and PCD_PRINTSTRING operations. + // For localizing user content better solutions exist so this hack won't be available as an editing feature. + if (ShouldLocalize && forprint) + { + FString token = s; + token.ToUpper(); + token.ReplaceChars(".,-+!?", ' '); + token.Substitute(" ", ""); + token.Truncate(5); + + FStringf label("TXT_ACS_%s_%d_%.5s", Level->MapName.GetChars(), index, token); + auto p = GStrings[label]; + if (p) return p; + } + + return s; } else { @@ -3262,11 +3304,11 @@ void FBehavior::StartTypedScripts (uint16_t type, AActor *activator, bool always ptr = &Scripts[i]; if (ptr->Type == type) { - DLevelScript *runningScript = P_GetScriptGoing (activator, NULL, ptr->Number, + DLevelScript *runningScript = P_GetScriptGoing (Level, activator, NULL, ptr->Number, ptr, this, &arg1, 1, always ? ACS_ALWAYS : 0); if (nullptr != runningScript && runNow) { - runningScript->RunScript (); + runningScript->RunScript(); } } } @@ -3280,7 +3322,7 @@ void FBehavior::StartTypedScripts (uint16_t type, AActor *activator, bool always void FBehaviorContainer::StopMyScripts (AActor *actor) { - DACSThinker *controller = level.ACSThinker; + DACSThinker *controller = actor->Level->ACSThinker; if (controller != NULL) { @@ -3298,14 +3340,6 @@ IMPLEMENT_POINTERS_START(DACSThinker) IMPLEMENT_POINTER(Scripts) IMPLEMENT_POINTERS_END -DACSThinker::DACSThinker () -: DThinker(STAT_SCRIPTS) -{ - Scripts = nullptr; - LastScript = nullptr; - RunningScripts.Clear(); -} - DACSThinker::~DACSThinker () { Scripts = nullptr; @@ -3386,7 +3420,7 @@ void DACSThinker::Tick () while (script) { DLevelScript *next = script->next; - script->RunScript (); + script->RunScript(); script = next; } @@ -3456,11 +3490,12 @@ void DLevelScript::Serialize(FSerializer &arc) ("cliprectwidth", ClipRectWidth) ("cliprectheight", ClipRectHeight) ("wrapwidth", WrapWidth) - ("inmodulescriptnum", InModuleScriptNumber); + ("inmodulescriptnum", InModuleScriptNumber) + ("level", Level); if (arc.isReading()) { - activeBehavior = level.Behaviors.GetModule(lib); + activeBehavior = Level->Behaviors.GetModule(lib); if (nullptr == activeBehavior) { @@ -3473,19 +3508,12 @@ void DLevelScript::Serialize(FSerializer &arc) DLevelScript::DLevelScript () { - next = prev = nullptr; - if (level.ACSThinker == nullptr) - level.ACSThinker = Create(); activefont = SmallFont; } -DLevelScript::~DLevelScript () -{ -} - void DLevelScript::Unlink () { - DACSThinker *controller = level.ACSThinker; + DACSThinker *controller = Level->ACSThinker; if (controller->LastScript == this) { @@ -3511,7 +3539,7 @@ void DLevelScript::Unlink () void DLevelScript::Link () { - DACSThinker *controller = level.ACSThinker; + DACSThinker *controller = Level->ACSThinker; next = controller->Scripts; GC::WriteBarrier(this, next); @@ -3531,7 +3559,7 @@ void DLevelScript::Link () void DLevelScript::PutLast () { - DACSThinker *controller = level.ACSThinker; + DACSThinker *controller = Level->ACSThinker; if (controller->LastScript == this) return; @@ -3553,7 +3581,7 @@ void DLevelScript::PutLast () void DLevelScript::PutFirst () { - DACSThinker *controller = level.ACSThinker; + DACSThinker *controller = Level->ACSThinker; if (controller->Scripts == this) return; @@ -3587,7 +3615,7 @@ int DLevelScript::ThingCount (int type, int stringid, int tid, int tag) } else if (stringid >= 0) { - const char *type_name = level.Behaviors.LookupString (stringid); + const char *type_name = Level->Behaviors.LookupString (stringid); if (type_name == NULL) return 0; @@ -3603,13 +3631,13 @@ int DLevelScript::ThingCount (int type, int stringid, int tid, int tag) do_count: if (tid) { - FActorIterator iterator (tid); + auto iterator = Level->GetActorIterator(tid); while ( (actor = iterator.Next ()) ) { if (actor->health > 0 && (kind == NULL || actor->IsA (kind))) { - if (tag == -1 || tagManager.SectorHasTag(actor->Sector, tag)) + if (tag == -1 || Level->SectorHasTag(actor->Sector, tag)) { // Don't count items in somebody's inventory if (actor->IsMapActor()) @@ -3622,13 +3650,13 @@ do_count: } else { - TThinkerIterator iterator; + auto iterator = Level->GetThinkerIterator(); while ( (actor = iterator.Next ()) ) { if (actor->health > 0 && (kind == NULL || actor->IsA (kind))) { - if (tag == -1 || tagManager.SectorHasTag(actor->Sector, tag)) + if (tag == -1 || Level->SectorHasTag(actor->Sector, tag)) { // Don't count items in somebody's inventory if (actor->IsMapActor()) @@ -3643,7 +3671,7 @@ do_count: { // Again, with decorate replacements replacemented = true; - PClassActor *newkind = kind->GetReplacement(); + PClassActor *newkind = kind->GetReplacement(Level); if (newkind != kind) { kind = newkind; @@ -3657,18 +3685,18 @@ void DLevelScript::ChangeFlat (int tag, int name, bool floorOrCeiling) { FTextureID flat; int secnum = -1; - const char *flatname = level.Behaviors.LookupString (name); + const char *flatname = Level->Behaviors.LookupString (name); if (flatname == NULL) return; flat = TexMan.GetTextureID(flatname, ETextureType::Flat, FTextureManager::TEXMAN_Overridable); - FSectorTagIterator it(tag); + auto it = Level->GetSectorTagIterator(tag); while ((secnum = it.Next()) >= 0) { int pos = floorOrCeiling? sector_t::ceiling : sector_t::floor; - level.sectors[secnum].SetTexture(pos, flat); + Level->sectors[secnum].SetTexture(pos, flat); } } @@ -3677,7 +3705,7 @@ int DLevelScript::CountPlayers () int count = 0, i; for (i = 0; i < MAXPLAYERS; i++) - if (playeringame[i]) + if (Level->PlayerInGame(i)) count++; return count; @@ -3687,7 +3715,7 @@ void DLevelScript::SetLineTexture (int lineid, int side, int position, int name) { FTextureID texture; int linenum = -1; - const char *texname = level.Behaviors.LookupString (name); + const char *texname = Level->Behaviors.LookupString (name); if (texname == nullptr) return; @@ -3696,12 +3724,12 @@ void DLevelScript::SetLineTexture (int lineid, int side, int position, int name) texture = TexMan.GetTextureID(texname, ETextureType::Wall, FTextureManager::TEXMAN_Overridable); - FLineIdIterator itr(lineid); + auto itr = Level->GetLineIdIterator(lineid); while ((linenum = itr.Next()) >= 0) { side_t *sidedef; - sidedef = level.lines[linenum].sidedef[side]; + sidedef = Level->lines[linenum].sidedef[side]; if (sidedef == nullptr) continue; @@ -3725,21 +3753,21 @@ void DLevelScript::SetLineTexture (int lineid, int side, int position, int name) int DLevelScript::DoSpawn (int type, const DVector3 &pos, int tid, DAngle angle, bool force) { - PClassActor *info = PClass::FindActor(level.Behaviors.LookupString (type)); + PClassActor *info = PClass::FindActor(Level->Behaviors.LookupString (type)); AActor *actor = NULL; int spawncount = 0; if (info != NULL) { - info = info->GetReplacement (); + info = info->GetReplacement (Level); if ((GetDefaultByType (info)->flags3 & MF3_ISMONSTER) && - ((dmflags & DF_NO_MONSTERS) || (level.flags2 & LEVEL2_NOMONSTERS))) + ((dmflags & DF_NO_MONSTERS) || (Level->flags2 & LEVEL2_NOMONSTERS))) { return 0; } - actor = Spawn (info, pos, ALLOW_REPLACE); + actor = Spawn (Level, info, pos, ALLOW_REPLACE); if (actor != NULL) { ActorFlags2 oldFlags2 = actor->flags2; @@ -3779,7 +3807,7 @@ int DLevelScript::DoSpawnSpot (int type, int spot, int tid, int angle, bool forc if (spot != 0) { - FActorIterator iterator (spot); + auto iterator = Level->GetActorIterator(spot); AActor *aspot; while ( (aspot = iterator.Next ()) ) @@ -3800,7 +3828,7 @@ int DLevelScript::DoSpawnSpotFacing (int type, int spot, int tid, bool force) if (spot != 0) { - FActorIterator iterator (spot); + auto iterator = Level->GetActorIterator(spot); AActor *aspot; while ( (aspot = iterator.Next ()) ) @@ -3855,9 +3883,9 @@ void DLevelScript::DoFadeRange (int r1, int g1, int b1, int a1, { for (i = 0; i < MAXPLAYERS; ++i) { - if (playeringame[i]) + if (Level->PlayerInGame(i)) { - viewer = &players[i]; + viewer = Level->Players[i]; showme: if (ftime <= 0.f) { @@ -3885,7 +3913,7 @@ showme: fa1 = viewer->BlendA; } } - Create (fr1, fg1, fb1, fa1, fr2, fg2, fb2, fa2, ftime, viewer->mo); + Level->CreateThinker (fr1, fg1, fb1, fa1, fr2, fg2, fb2, fa2, ftime, viewer->mo); } } } @@ -3894,7 +3922,7 @@ showme: void DLevelScript::DoSetFont (int fontnum) { - const char *fontname = level.Behaviors.LookupString (fontnum); + const char *fontname = Level->Behaviors.LookupString (fontnum); activefont = V_GetFont (fontname); if (activefont == NULL) { @@ -3902,7 +3930,7 @@ void DLevelScript::DoSetFont (int fontnum) } } -int DoSetMaster (AActor *self, AActor *master) +int DLevelScript::DoSetMaster (AActor *self, AActor *master) { AActor *defs; if (self->flags3&MF3_ISMONSTER) @@ -3913,9 +3941,9 @@ int DoSetMaster (AActor *self, AActor *master) { self->FriendPlayer = 0; self->master = master; - level.total_monsters -= self->CountsAsKill(); + Level->total_monsters -= self->CountsAsKill(); self->flags = (self->flags & ~MF_FRIENDLY) | (master->flags & MF_FRIENDLY); - level.total_monsters += self->CountsAsKill(); + Level->total_monsters += self->CountsAsKill(); // Don't attack your new master if (self->target == self->master) self->target = nullptr; if (self->lastenemy == self->master) self->lastenemy = nullptr; @@ -3926,7 +3954,7 @@ int DoSetMaster (AActor *self, AActor *master) { // [KS] Be friendly to this player self->master = nullptr; - level.total_monsters -= self->CountsAsKill(); + Level->total_monsters -= self->CountsAsKill(); self->flags|=MF_FRIENDLY; self->SetFriendPlayer(master->player); @@ -3952,9 +3980,9 @@ int DoSetMaster (AActor *self, AActor *master) self->FriendPlayer = 0; // Go back to whatever friendliness we usually have... defs = self->GetDefault(); - level.total_monsters -= self->CountsAsKill(); + Level->total_monsters -= self->CountsAsKill(); self->flags = (self->flags & ~MF_FRIENDLY) | (defs->flags & MF_FRIENDLY); - level.total_monsters += self->CountsAsKill(); + Level->total_monsters += self->CountsAsKill(); // ...And re-side with our friends. if (self->target && !self->IsHostile (self->target)) self->target = nullptr; if (self->lastenemy && !self->IsHostile (self->lastenemy)) self->lastenemy = nullptr; @@ -3970,24 +3998,12 @@ int DoGetMasterTID (AActor *self) if (self->master) return self->master->tid; else if (self->FriendPlayer) { - player_t *player = &players[(self->FriendPlayer)-1]; + player_t *player = self->Level->Players[(self->FriendPlayer)-1]; return player->mo->tid; } else return 0; } -AActor *SingleActorFromTID (int tid, AActor *defactor) -{ - if (tid == 0) - { - return defactor; - } - else - { - FActorIterator iterator (tid); - return iterator.Next(); - } -} enum { @@ -4069,7 +4085,7 @@ void DLevelScript::SetActorProperty (int tid, int property, int value) else { AActor *actor; - FActorIterator iterator (tid); + auto iterator = Level->GetActorIterator(tid); while ((actor = iterator.Next()) != NULL) { @@ -4167,7 +4183,7 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value) break; case APROP_Friendly: - if (actor->CountsAsKill()) level.total_monsters--; + if (actor->CountsAsKill()) Level->total_monsters--; if (value) { actor->flags |= MF_FRIENDLY; @@ -4176,7 +4192,7 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value) { actor->flags &= ~MF_FRIENDLY; } - if (actor->CountsAsKill()) level.total_monsters++; + if (actor->CountsAsKill()) Level->total_monsters++; break; @@ -4192,27 +4208,27 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value) break; case APROP_SeeSound: - actor->SeeSound = level.Behaviors.LookupString(value); + actor->SeeSound = Level->Behaviors.LookupString(value); break; case APROP_AttackSound: - actor->AttackSound = level.Behaviors.LookupString(value); + actor->AttackSound = Level->Behaviors.LookupString(value); break; case APROP_PainSound: - actor->PainSound = level.Behaviors.LookupString(value); + actor->PainSound = Level->Behaviors.LookupString(value); break; case APROP_DeathSound: - actor->DeathSound = level.Behaviors.LookupString(value); + actor->DeathSound = Level->Behaviors.LookupString(value); break; case APROP_ActiveSound: - actor->ActiveSound = level.Behaviors.LookupString(value); + actor->ActiveSound = Level->Behaviors.LookupString(value); break; case APROP_Species: - actor->Species = level.Behaviors.LookupString(value); + actor->Species = Level->Behaviors.LookupString(value); break; case APROP_Score: @@ -4220,7 +4236,7 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value) break; case APROP_NameTag: - actor->SetTag(level.Behaviors.LookupString(value)); + actor->SetTag(Level->Behaviors.LookupString(value)); break; case APROP_DamageFactor: @@ -4233,7 +4249,7 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value) case APROP_MasterTID: AActor *other; - other = SingleActorFromTID (value, NULL); + other = Level->SingleActorFromTID (value, NULL); DoSetMaster (actor, other); break; @@ -4298,7 +4314,7 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value) break; case APROP_DamageType: - actor->DamageType = level.Behaviors.LookupString(value); + actor->DamageType = Level->Behaviors.LookupString(value); break; default: @@ -4309,7 +4325,7 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value) int DLevelScript::GetActorProperty (int tid, int property) { - AActor *actor = SingleActorFromTID (tid, activator); + AActor *actor = Level->SingleActorFromTID (tid, activator); if (actor == NULL) { @@ -4407,7 +4423,7 @@ int DLevelScript::GetActorProperty (int tid, int property) int DLevelScript::CheckActorProperty (int tid, int property, int value) { - AActor *actor = SingleActorFromTID (tid, activator); + AActor *actor = Level->SingleActorFromTID (tid, activator); const char *string = NULL; if (actor == NULL) { @@ -4473,17 +4489,17 @@ int DLevelScript::CheckActorProperty (int tid, int property, int value) case APROP_DamageType: string = actor->DamageType; break; } if (string == NULL) string = ""; - return (!stricmp(string, level.Behaviors.LookupString(value))); + return (!stricmp(string, Level->Behaviors.LookupString(value))); } bool DLevelScript::DoCheckActorTexture(int tid, AActor *activator, int string, bool floor) { - AActor *actor = SingleActorFromTID(tid, activator); + AActor *actor = Level->SingleActorFromTID(tid, activator); if (actor == NULL) { return 0; } - FTextureID tex = TexMan.CheckForTexture(level.Behaviors.LookupString(string), ETextureType::Flat, + FTextureID tex = TexMan.CheckForTexture(Level->Behaviors.LookupString(string), ETextureType::Flat, FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_TryAny|FTextureManager::TEXMAN_DontCreate); if (!tex.Exists()) @@ -4521,13 +4537,13 @@ int DLevelScript::GetPlayerInput(int playernum, int inputnum) } p = activator->player; } - else if (playernum >= MAXPLAYERS || !playeringame[playernum]) + else if (playernum >= MAXPLAYERS || !Level->PlayerInGame(playernum)) { return 0; } else { - p = &players[playernum]; + p = Level->Players[playernum]; } if (p == NULL) { @@ -4566,7 +4582,7 @@ int DLevelScript::DoClassifyActor(int tid) } else { - FActorIterator it(tid); + auto it = Level->GetActorIterator(tid); actor = it.Next(); } if (actor == NULL) @@ -4802,10 +4818,10 @@ int DLevelScript::SideFromID(int id, int side) } else { - int line = P_FindFirstLineFromID(id); + int line = Level->FindFirstLineFromID(id); if (line == -1) return -1; - if (level.lines[line].sidedef[side] == NULL) return -1; - return level.lines[line].sidedef[side]->UDMFIndex; + if (Level->lines[line].sidedef[side] == NULL) return -1; + return Level->lines[line].sidedef[side]->UDMFIndex; } } @@ -4818,7 +4834,7 @@ int DLevelScript::LineFromID(int id) } else { - return P_FindFirstLineFromID(id); + return Level->FindFirstLineFromID(id); } } @@ -4862,7 +4878,7 @@ bool GetVarAddrType(AActor *self, FName varname, int index, void *&addr, PType * return true; } -static void SetUserVariable(AActor *self, FName varname, int index, int value) +void DLevelScript::SetUserVariable(AActor *self, FName varname, int index, int value) { void *addr; PType *type; @@ -4871,7 +4887,7 @@ static void SetUserVariable(AActor *self, FName varname, int index, int value) { if (type == TypeString) { - FString str = level.Behaviors.LookupString(value); + FString str = Level->Behaviors.LookupString(value); type->InitializeValue(addr, &str); } else if (type->isFloat()) @@ -4913,7 +4929,7 @@ static int GetUserVariable(AActor *self, FName varname, int index) } // Converts fixed- to floating-point as required. -static void DoSetCVar(FBaseCVar *cvar, int value, bool is_string, bool force=false) +void DLevelScript::DoSetCVar(FBaseCVar *cvar, int value, bool is_string, bool force) { UCVarValue val; ECVarType type; @@ -4927,7 +4943,7 @@ static void DoSetCVar(FBaseCVar *cvar, int value, bool is_string, bool force=fal } if (is_string) { - val.String = level.Behaviors.LookupString(value); + val.String = Level->Behaviors.LookupString(value); type = CVAR_String; } else if (cvar->GetRealType() == CVAR_Float) @@ -4976,13 +4992,14 @@ static int DoGetCVar(FBaseCVar *cvar, bool is_string) } } -static int SetUserCVar(int playernum, const char *cvarname, int value, bool is_string) +int DLevelScript::SetUserCVar(int playernum, const char *cvarname, int value, bool is_string) { - if ((unsigned)playernum >= MAXPLAYERS || !playeringame[playernum]) + if ((unsigned)playernum >= MAXPLAYERS || !Level->PlayerInGame(playernum)) { return 0; } - FBaseCVar **cvar_p = players[playernum].userinfo.CheckKey(FName(cvarname, true)); + auto player = Level->Players[playernum]; + FBaseCVar **cvar_p = player->userinfo.CheckKey(FName(cvarname, true)); FBaseCVar *cvar; // Only mod-created cvars may be set. if (cvar_p == NULL || (cvar = *cvar_p) == NULL || (cvar->GetFlags() & CVAR_IGNORE) || !(cvar->GetFlags() & CVAR_MOD)) @@ -4992,7 +5009,7 @@ static int SetUserCVar(int playernum, const char *cvarname, int value, bool is_s DoSetCVar(cvar, value, is_string); // If we are this player, then also reflect this change in the local version of this cvar. - if (playernum == consoleplayer) + if (player && player == Level->GetConsolePlayer()) { FBaseCVar *cvar = FindCVar(cvarname, NULL); // If we can find it in the userinfo, then we should also be able to find it in the normal cvar list, @@ -5006,7 +5023,7 @@ static int SetUserCVar(int playernum, const char *cvarname, int value, bool is_s return 1; } -static int SetCVar(AActor *activator, const char *cvarname, int value, bool is_string) +int DLevelScript::SetCVar(AActor *activator, const char *cvarname, int value, bool is_string) { FBaseCVar *cvar = FindCVar(cvarname, NULL); // Only mod-created cvars may be set. @@ -5021,7 +5038,9 @@ static int SetCVar(AActor *activator, const char *cvarname, int value, bool is_s { return 0; } - return SetUserCVar(int(activator->player - players), cvarname, value, is_string); + auto pnum = Level->PlayerNum(activator->player); + if (pnum < 0) return 0; + return SetUserCVar(pnum, cvarname, value, is_string); } DoSetCVar(cvar, value, is_string); return 1; @@ -5033,12 +5052,12 @@ static bool DoSpawnDecal(AActor *actor, const FDecalTemplate *tpl, int flags, DA { angle += actor->Angles.Yaw; } - return NULL != ShootDecal(tpl, actor, actor->Sector, actor->X(), actor->Y(), + return nullptr != ShootDecal(actor->Level, tpl, actor->Sector, actor->X(), actor->Y(), actor->Center() - actor->Floorclip + actor->GetBobOffset() + zofs, angle, distance, !!(flags & SDF_PERMANENT)); } -static void SetActorAngle(AActor *activator, int tid, int angle, bool interpolate) +void DLevelScript::SetActorAngle(AActor *activator, int tid, int angle, bool interpolate) { DAngle an = ACSToAngle(angle); if (tid == 0) @@ -5050,7 +5069,7 @@ static void SetActorAngle(AActor *activator, int tid, int angle, bool interpolat } else { - FActorIterator iterator(tid); + auto iterator = Level->GetActorIterator(tid); AActor *actor; while ((actor = iterator.Next())) @@ -5060,7 +5079,7 @@ static void SetActorAngle(AActor *activator, int tid, int angle, bool interpolat } } -static void SetActorPitch(AActor *activator, int tid, int angle, bool interpolate) +void DLevelScript::SetActorPitch(AActor *activator, int tid, int angle, bool interpolate) { DAngle an = ACSToAngle(angle).Normalized180(); if (tid == 0) @@ -5072,7 +5091,7 @@ static void SetActorPitch(AActor *activator, int tid, int angle, bool interpolat } else { - FActorIterator iterator(tid); + auto iterator = Level->GetActorIterator(tid); AActor *actor; while ((actor = iterator.Next())) @@ -5082,7 +5101,7 @@ static void SetActorPitch(AActor *activator, int tid, int angle, bool interpolat } } -static void SetActorRoll(AActor *activator, int tid, int angle, bool interpolate) +void DLevelScript::SetActorRoll(AActor *activator, int tid, int angle, bool interpolate) { DAngle an = ACSToAngle(angle); if (tid == 0) @@ -5094,7 +5113,7 @@ static void SetActorRoll(AActor *activator, int tid, int angle, bool interpolate } else { - FActorIterator iterator(tid); + auto iterator = Level->GetActorIterator(tid); AActor *actor; while ((actor = iterator.Next())) @@ -5104,7 +5123,7 @@ static void SetActorRoll(AActor *activator, int tid, int angle, bool interpolate } } -static void SetActorTeleFog(AActor *activator, int tid, FString telefogsrc, FString telefogdest) +void DLevelScript::SetActorTeleFog(AActor *activator, int tid, FString telefogsrc, FString telefogdest) { // Set the actor's telefog to the specified actor. Handle "" as "don't // change" since "None" should work just fine for disabling the fog (given @@ -5121,7 +5140,7 @@ static void SetActorTeleFog(AActor *activator, int tid, FString telefogsrc, FStr } else { - FActorIterator iterator(tid); + auto iterator = Level->GetActorIterator(tid); AActor *actor; PClassActor * src = PClass::FindActor(telefogsrc); @@ -5136,7 +5155,7 @@ static void SetActorTeleFog(AActor *activator, int tid, FString telefogsrc, FStr } } -static int SwapActorTeleFog(AActor *activator, int tid) +int DLevelScript::SwapActorTeleFog(AActor *activator, int tid) { int count = 0; if (tid == 0) @@ -5149,7 +5168,7 @@ static int SwapActorTeleFog(AActor *activator, int tid) } else { - FActorIterator iterator(tid); + auto iterator = Level->GetActorIterator(tid); AActor *actor; while ((actor = iterator.Next())) @@ -5164,13 +5183,13 @@ static int SwapActorTeleFog(AActor *activator, int tid) return count; } -static int ScriptCall(AActor *activator, unsigned argc, int32_t *args) + int DLevelScript::ScriptCall(AActor *activator, unsigned argc, int32_t *args) { int retval = 0; if (argc >= 2) { - auto clsname = level.Behaviors.LookupString(args[0]); - auto funcname = level.Behaviors.LookupString(args[1]); + auto clsname = Level->Behaviors.LookupString(args[0]); + auto funcname = Level->Behaviors.LookupString(args[1]); auto cls = PClass::FindClass(clsname); if (!cls) @@ -5219,16 +5238,16 @@ static int ScriptCall(AActor *activator, unsigned argc, int32_t *args) } else if (argtype == TypeName) { - params.Push(FName(level.Behaviors.LookupString(args[i])).GetIndex()); + params.Push(FName(Level->Behaviors.LookupString(args[i])).GetIndex()); } else if (argtype == TypeString) { - strings.Push(level.Behaviors.LookupString(args[i])); + strings.Push(Level->Behaviors.LookupString(args[i])); params.Push(&strings.Last()); } else if (argtype == TypeSound) { - params.Push(int(FSoundID(level.Behaviors.LookupString(args[i])))); + params.Push(int(FSoundID(Level->Behaviors.LookupString(args[i])))); } else { @@ -5294,43 +5313,43 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) switch(funcIndex) { case ACSF_GetLineUDMFInt: - return GetUDMFInt(UDMF_Line, LineFromID(args[0]), level.Behaviors.LookupString(args[1])); + return GetUDMFInt(Level, UDMF_Line, LineFromID(args[0]), Level->Behaviors.LookupString(args[1])); case ACSF_GetLineUDMFFixed: - return DoubleToACS(GetUDMFFloat(UDMF_Line, LineFromID(args[0]), level.Behaviors.LookupString(args[1]))); + return DoubleToACS(GetUDMFFloat(Level, UDMF_Line, LineFromID(args[0]), Level->Behaviors.LookupString(args[1]))); case ACSF_GetThingUDMFInt: case ACSF_GetThingUDMFFixed: return 0; // Not implemented yet case ACSF_GetSectorUDMFInt: - return GetUDMFInt(UDMF_Sector, P_FindFirstSectorFromTag(args[0]), level.Behaviors.LookupString(args[1])); + return GetUDMFInt(Level, UDMF_Sector, Level->FindFirstSectorFromTag(args[0]), Level->Behaviors.LookupString(args[1])); case ACSF_GetSectorUDMFFixed: - return DoubleToACS(GetUDMFFloat(UDMF_Sector, P_FindFirstSectorFromTag(args[0]), level.Behaviors.LookupString(args[1]))); + return DoubleToACS(GetUDMFFloat(Level, UDMF_Sector, Level->FindFirstSectorFromTag(args[0]), Level->Behaviors.LookupString(args[1]))); case ACSF_GetSideUDMFInt: - return GetUDMFInt(UDMF_Side, SideFromID(args[0], args[1]), level.Behaviors.LookupString(args[2])); + return GetUDMFInt(Level, UDMF_Side, SideFromID(args[0], args[1]), Level->Behaviors.LookupString(args[2])); case ACSF_GetSideUDMFFixed: - return DoubleToACS(GetUDMFFloat(UDMF_Side, SideFromID(args[0], args[1]), level.Behaviors.LookupString(args[2]))); + return DoubleToACS(GetUDMFFloat(Level, UDMF_Side, SideFromID(args[0], args[1]), Level->Behaviors.LookupString(args[2]))); case ACSF_GetActorVelX: - actor = SingleActorFromTID(args[0], activator); + actor = Level->SingleActorFromTID(args[0], activator); return actor != NULL? DoubleToACS(actor->Vel.X) : 0; case ACSF_GetActorVelY: - actor = SingleActorFromTID(args[0], activator); + actor = Level->SingleActorFromTID(args[0], activator); return actor != NULL? DoubleToACS(actor->Vel.Y) : 0; case ACSF_GetActorVelZ: - actor = SingleActorFromTID(args[0], activator); + actor = Level->SingleActorFromTID(args[0], activator); return actor != NULL? DoubleToACS(actor->Vel.Z) : 0; case ACSF_SetPointer: if (activator) { - AActor *ptr = SingleActorFromTID(args[1], activator); + AActor *ptr = Level->SingleActorFromTID(args[1], activator); if (argCount > 2) { ptr = COPY_AAPTR(ptr, args[2]); @@ -5344,17 +5363,17 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_SetActivator: if (argCount > 1 && args[1] != AAPTR_DEFAULT) // condition (x != AAPTR_DEFAULT) is essentially condition (x). { - activator = COPY_AAPTR(SingleActorFromTID(args[0], activator), args[1]); + activator = COPY_AAPTR(Level->SingleActorFromTID(args[0], activator), args[1]); } else { - activator = SingleActorFromTID(args[0], NULL); + activator = Level->SingleActorFromTID(args[0], NULL); } return activator != NULL; case ACSF_SetActivatorToTarget: // [KS] I revised this a little bit - actor = SingleActorFromTID(args[0], activator); + actor = Level->SingleActorFromTID(args[0], activator); if (actor != NULL) { if (actor->player != NULL && actor->player->playerstate == PST_LIVE) @@ -5376,7 +5395,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) return 0; case ACSF_GetActorViewHeight: - actor = SingleActorFromTID(args[0], activator); + actor = Level->SingleActorFromTID(args[0], activator); if (actor != NULL) { if (actor->player != NULL) @@ -5392,7 +5411,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_GetChar: { - const char *p = level.Behaviors.LookupString(args[0]); + const char *p = Level->Behaviors.LookupString(args[0]); if (p != NULL && args[1] >= 0 && args[1] < int(strlen(p))) { return p[args[1]]; @@ -5405,46 +5424,46 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_GetAirSupply: { - if (args[0] < 0 || args[0] >= MAXPLAYERS || !playeringame[args[0]]) + if (args[0] < 0 || args[0] >= MAXPLAYERS || !Level->PlayerInGame(args[0])) { return 0; } else { - return players[args[0]].air_finished - level.time; + return Level->Players[args[0]]->air_finished - Level->time; } } case ACSF_SetAirSupply: { - if (args[0] < 0 || args[0] >= MAXPLAYERS || !playeringame[args[0]]) + if (args[0] < 0 || args[0] >= MAXPLAYERS || !Level->PlayerInGame(args[0])) { return 0; } else { - players[args[0]].air_finished = args[1] + level.time; + Level->Players[args[0]]->air_finished = args[1] + Level->time; return 1; } } case ACSF_SetSkyScrollSpeed: { - if (args[0] == 1) level.skyspeed1 = ACSToFloat(args[1]); - else if (args[0] == 2) level.skyspeed2 = ACSToFloat(args[1]); + if (args[0] == 1) Level->skyspeed1 = ACSToFloat(args[1]); + else if (args[0] == 2) Level->skyspeed2 = ACSToFloat(args[1]); return 1; } case ACSF_GetArmorType: { - if (args[1] < 0 || args[1] >= MAXPLAYERS || !playeringame[args[1]]) + if (args[1] < 0 || args[1] >= MAXPLAYERS || !Level->PlayerInGame(args[1])) { return 0; } else { - FName p(level.Behaviors.LookupString(args[0])); - auto armor = players[args[1]].mo->FindInventory(NAME_BasicArmor); + FName p(Level->Behaviors.LookupString(args[0])); + auto armor = Level->Players[args[1]]->mo->FindInventory(NAME_BasicArmor); if (armor && armor->NameVar(NAME_ArmorType) == p) return armor->IntVar(NAME_Amount); } return 0; @@ -5503,7 +5522,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) } else { - TActorIterator iterator(args[0]); + auto iterator = Level->GetActorIterator(args[0]); while ((actor = iterator.Next())) { @@ -5516,7 +5535,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_SetUserVariable: { int cnt = 0; - FName varname(level.Behaviors.LookupString(args[1]), true); + FName varname(Level->Behaviors.LookupString(args[1]), true); if (varname != NAME_None) { if (args[0] == 0) @@ -5529,7 +5548,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) } else { - TActorIterator iterator(args[0]); + auto iterator = Level->GetActorIterator(args[0]); while ( (actor = iterator.Next()) ) { @@ -5543,10 +5562,10 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_GetUserVariable: { - FName varname(level.Behaviors.LookupString(args[1]), true); + FName varname(Level->Behaviors.LookupString(args[1]), true); if (varname != NAME_None) { - AActor *a = SingleActorFromTID(args[0], activator); + AActor *a = Level->SingleActorFromTID(args[0], activator); return a != NULL ? GetUserVariable(a, varname, 0) : 0; } return 0; @@ -5555,7 +5574,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_SetUserArray: { int cnt = 0; - FName varname(level.Behaviors.LookupString(args[1]), true); + FName varname(Level->Behaviors.LookupString(args[1]), true); if (varname != NAME_None) { if (args[0] == 0) @@ -5568,7 +5587,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) } else { - TActorIterator iterator(args[0]); + auto iterator = Level->GetActorIterator(args[0]); while ( (actor = iterator.Next()) ) { @@ -5582,34 +5601,34 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_GetUserArray: { - FName varname(level.Behaviors.LookupString(args[1]), true); + FName varname(Level->Behaviors.LookupString(args[1]), true); if (varname != NAME_None) { - AActor *a = SingleActorFromTID(args[0], activator); + AActor *a = Level->SingleActorFromTID(args[0], activator); return a != NULL ? GetUserVariable(a, varname, args[2]) : 0; } return 0; } case ACSF_Radius_Quake2: - P_StartQuake(activator, args[0], args[1], args[2], args[3], args[4], level.Behaviors.LookupString(args[5])); + P_StartQuake(Level, activator, args[0], args[1], args[2], args[3], args[4], Level->Behaviors.LookupString(args[5])); break; case ACSF_CheckActorClass: { - AActor *a = SingleActorFromTID(args[0], activator); - return a == NULL ? false : a->GetClass()->TypeName == FName(level.Behaviors.LookupString(args[1])); + AActor *a = Level->SingleActorFromTID(args[0], activator); + return a == NULL ? false : a->GetClass()->TypeName == FName(Level->Behaviors.LookupString(args[1])); } case ACSF_GetActorClass: { - AActor *a = SingleActorFromTID(args[0], activator); + AActor *a = Level->SingleActorFromTID(args[0], activator); return GlobalACSStrings.AddString(a == NULL ? "None" : a->GetClass()->TypeName.GetChars()); } case ACSF_SoundSequenceOnActor: { - const char *seqname = level.Behaviors.LookupString(args[1]); + const char *seqname = Level->Behaviors.LookupString(args[1]); if (seqname != NULL) { if (args[0] == 0) @@ -5621,7 +5640,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) } else { - FActorIterator it(args[0]); + auto it = Level->GetActorIterator(args[0]); AActor *actor; while ( (actor = it.Next()) ) @@ -5635,15 +5654,15 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_SoundSequenceOnSector: { - const char *seqname = level.Behaviors.LookupString(args[1]); + const char *seqname = Level->Behaviors.LookupString(args[1]); int space = args[2] < CHAN_FLOOR || args[2] > CHAN_INTERIOR ? CHAN_FULLHEIGHT : args[2]; if (seqname != NULL) { - FSectorTagIterator it(args[0]); + auto it = Level->GetSectorTagIterator(args[0]); int s; while ((s = it.Next()) >= 0) { - SN_StartSequence(&level.sectors[s], args[2], seqname, 0); + SN_StartSequence(&Level->sectors[s], args[2], seqname, 0); } } } @@ -5651,10 +5670,10 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_SoundSequenceOnPolyobj: { - const char *seqname = level.Behaviors.LookupString(args[1]); + const char *seqname = Level->Behaviors.LookupString(args[1]); if (seqname != NULL) { - FPolyObj *poly = PO_GetPolyobj(args[0]); + FPolyObj *poly = Level->GetPolyobj(args[0]); if (poly != NULL) { SN_StartSequence(poly, seqname, 0); @@ -5665,7 +5684,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_GetPolyobjX: { - FPolyObj *poly = PO_GetPolyobj(args[0]); + FPolyObj *poly = Level->GetPolyobj(args[0]); if (poly != NULL) { return DoubleToACS(poly->StartSpot.pos.X); @@ -5675,7 +5694,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_GetPolyobjY: { - FPolyObj *poly = PO_GetPolyobj(args[0]); + FPolyObj *poly = Level->GetPolyobj(args[0]); if (poly != NULL) { return DoubleToACS(poly->StartSpot.pos.Y); @@ -5699,8 +5718,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) if (args[1] == 0) return 1; // [KS] I'm sure the activator can see itself. - TActorIterator dstiter (args[1]); - + auto dstiter = Level->GetActorIterator(args[1]); while ( (dest = dstiter.Next ()) ) { if (P_CheckSight(source, dest, flags)) return 1; @@ -5708,13 +5726,13 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) } else { - TActorIterator srciter (args[0]); + auto srciter = Level->GetActorIterator(args[0]); while ( (source = srciter.Next ()) ) { if (args[1] != 0) { - TActorIterator dstiter (args[1]); + auto dstiter = Level->GetActorIterator(args[1]); while ( (dest = dstiter.Next ()) ) { if (P_CheckSight(source, dest, flags)) return 1; @@ -5740,22 +5758,22 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_ACS_NamedExecuteWithResult: case ACSF_ACS_NamedExecuteAlways: { - int scriptnum = -FName(level.Behaviors.LookupString(args[0])); + int scriptnum = -FName(Level->Behaviors.LookupString(args[0])); int arg1 = argCount > 1 ? args[1] : 0; int arg2 = argCount > 2 ? args[2] : 0; int arg3 = argCount > 3 ? args[3] : 0; int arg4 = argCount > 4 ? args[4] : 0; - return P_ExecuteSpecial(NamedACSToNormalACS[funcIndex - ACSF_ACS_NamedExecute], + return P_ExecuteSpecial(Level, NamedACSToNormalACS[funcIndex - ACSF_ACS_NamedExecute], activationline, activator, backSide, scriptnum, arg1, arg2, arg3, arg4); } break; case ACSF_UniqueTID: - return P_FindUniqueTID(argCount > 0 ? args[0] : 0, (argCount > 1 && args[1] >= 0) ? args[1] : 0); + return Level->FindUniqueTID(argCount > 0 ? args[0] : 0, (argCount > 1 && args[1] >= 0) ? args[1] : 0); case ACSF_IsTIDUsed: - return P_IsTIDUsed(args[0]); + return Level->IsTIDUsed(args[0]); case ACSF_Sqrt: return xs_FloorToInt(g_sqrt(double(args[0]))); @@ -5782,49 +5800,49 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_GetCVarString: if (argCount == 1) { - return DoGetCVar(GetCVar(activator, level.Behaviors.LookupString(args[0])), true); + return DoGetCVar(GetCVar(activator, Level->Behaviors.LookupString(args[0])), true); } break; case ACSF_SetCVar: if (argCount == 2) { - return SetCVar(activator, level.Behaviors.LookupString(args[0]), args[1], false); + return SetCVar(activator, Level->Behaviors.LookupString(args[0]), args[1], false); } break; case ACSF_SetCVarString: if (argCount == 2) { - return SetCVar(activator, level.Behaviors.LookupString(args[0]), args[1], true); + return SetCVar(activator, Level->Behaviors.LookupString(args[0]), args[1], true); } break; case ACSF_GetUserCVar: if (argCount == 2) { - return DoGetCVar(GetUserCVar(args[0], level.Behaviors.LookupString(args[1])), false); + return DoGetCVar(GetUserCVar(args[0], Level->Behaviors.LookupString(args[1])), false); } break; case ACSF_GetUserCVarString: if (argCount == 2) { - return DoGetCVar(GetUserCVar(args[0], level.Behaviors.LookupString(args[1])), true); + return DoGetCVar(GetUserCVar(args[0], Level->Behaviors.LookupString(args[1])), true); } break; case ACSF_SetUserCVar: if (argCount == 3) { - return SetUserCVar(args[0], level.Behaviors.LookupString(args[1]), args[2], false); + return SetUserCVar(args[0], Level->Behaviors.LookupString(args[1]), args[2], false); } break; case ACSF_SetUserCVarString: if (argCount == 3) { - return SetUserCVar(args[0], level.Behaviors.LookupString(args[1]), args[2], true); + return SetUserCVar(args[0], Level->Behaviors.LookupString(args[1]), args[2], true); } break; @@ -5834,8 +5852,8 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) DAngle angle = ACSToAngle(args[1]); DAngle pitch = ACSToAngle(args[2]); int damage = args[3]; - FName pufftype = argCount > 4 && args[4]? FName(level.Behaviors.LookupString(args[4])) : NAME_BulletPuff; - FName damagetype = argCount > 5 && args[5]? FName(level.Behaviors.LookupString(args[5])) : NAME_None; + FName pufftype = argCount > 4 && args[4]? FName(Level->Behaviors.LookupString(args[4])) : NAME_BulletPuff; + FName damagetype = argCount > 5 && args[5]? FName(Level->Behaviors.LookupString(args[5])) : NAME_None; double range = argCount > 6 && args[6]? ACSToDouble(args[6]) : MISSILERANGE; int flags = argCount > 7 && args[7]? args[7] : 0; int pufftid = argCount > 8 && args[8]? args[8] : 0; @@ -5856,7 +5874,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) else { AActor *source; - FActorIterator it(args[0]); + auto it = Level->GetActorIterator(args[0]); while ((source = it.Next()) != NULL) { @@ -5879,7 +5897,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) if (funcIndex == ACSF_PlaySound) { - const char *lookup = level.Behaviors.LookupString(args[1]); + const char *lookup = Level->Behaviors.LookupString(args[1]); if (lookup != NULL) { sid = lookup; @@ -5887,7 +5905,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) } if (sid != 0 || funcIndex == ACSF_PlayActorSound) { - FActorIterator it(args[0]); + auto it = Level->GetActorIterator(args[0]); AActor *spot; int chan = argCount > 2 ? args[2] : CHAN_BODY; @@ -5933,7 +5951,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) } else { - FActorIterator it(args[0]); + auto it = Level->GetActorIterator(args[0]); AActor *spot; while ((spot = it.Next()) != NULL) @@ -5956,7 +5974,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) } else { - FActorIterator it(args[0]); + auto it = Level->GetActorIterator(args[0]); AActor *spot; while ((spot = it.Next()) != NULL) @@ -5977,8 +5995,8 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) { return 0; } - a = level.Behaviors.LookupString(args[0]); - b = level.Behaviors.LookupString(args[1]); + a = Level->Behaviors.LookupString(args[0]); + b = Level->Behaviors.LookupString(args[1]); // Don't crash on invalid strings. if (a == NULL) a = ""; @@ -6000,7 +6018,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_StrRight: if (argCount >= 2) { - const char *oldstr = level.Behaviors.LookupString(args[0]); + const char *oldstr = Level->Behaviors.LookupString(args[0]); if (oldstr == NULL || *oldstr == '\0') { return GlobalACSStrings.AddString(""); @@ -6020,7 +6038,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_StrMid: if (argCount >= 3) { - const char *oldstr = level.Behaviors.LookupString(args[0]); + const char *oldstr = Level->Behaviors.LookupString(args[0]); if (oldstr == NULL || *oldstr == '\0') { return GlobalACSStrings.AddString(""); @@ -6057,7 +6075,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) // Returns number of decals spawned (not including spreading) { int count = 0; - const FDecalTemplate *tpl = DecalLibrary.GetDecalByName(level.Behaviors.LookupString(args[1])); + const FDecalTemplate *tpl = DecalLibrary.GetDecalByName(Level->Behaviors.LookupString(args[1])); if (tpl != NULL) { int flags = (argCount > 2) ? args[2] : 0; @@ -6074,7 +6092,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) } else { - FActorIterator it(args[0]); + auto it = Level->GetActorIterator(args[0]); AActor *actor; while ((actor = it.Next()) != NULL) @@ -6089,11 +6107,11 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_CheckFont: // bool CheckFont(str fontname) - return V_GetFont(level.Behaviors.LookupString(args[0])) != NULL; + return V_GetFont(Level->Behaviors.LookupString(args[0])) != NULL; case ACSF_DropItem: { - const char *type = level.Behaviors.LookupString(args[1]); + const char *type = Level->Behaviors.LookupString(args[1]); int amount = argCount >= 3? args[2] : -1; int chance = argCount >= 4? args[3] : 256; PClassActor *cls = PClass::FindActor(type); @@ -6110,7 +6128,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) } else { - FActorIterator it(args[0]); + auto it = Level->GetActorIterator(args[0]); AActor *actor; while ((actor = it.Next()) != NULL) @@ -6126,7 +6144,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_DropInventory: { - const char *type = level.Behaviors.LookupString(args[1]); + const char *type = Level->Behaviors.LookupString(args[1]); AActor *inv; if (type != NULL) @@ -6144,7 +6162,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) } else { - FActorIterator it(args[0]); + auto it = Level->GetActorIterator(args[0]); AActor *actor; while ((actor = it.Next()) != NULL) @@ -6162,17 +6180,17 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_CheckFlag: { - AActor *actor = SingleActorFromTID(args[0], activator); + AActor *actor = Level->SingleActorFromTID(args[0], activator); if (actor != NULL) { - return !!CheckActorFlag(actor, level.Behaviors.LookupString(args[1])); + return !!CheckActorFlag(actor, Level->Behaviors.LookupString(args[1])); } break; } case ACSF_QuakeEx: { - return P_StartQuakeXYZ(activator, args[0], args[1], args[2], args[3], args[4], args[5], args[6], level.Behaviors.LookupString(args[7]), + return P_StartQuakeXYZ(Level, activator, args[0], args[1], args[2], args[3], args[4], args[5], args[6], Level->Behaviors.LookupString(args[7]), argCount > 8 ? args[8] : 0, argCount > 9 ? ACSToDouble(args[9]) : 1.0, argCount > 10 ? ACSToDouble(args[10]) : 1.0, @@ -6187,10 +6205,10 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) if (argCount >= 2) { int line; - FLineIdIterator itr(args[0]); + auto itr = Level->GetLineIdIterator(args[0]); while ((line = itr.Next()) >= 0) { - level.lines[line].activation = args[1]; + Level->lines[line].activation = args[1]; } } break; @@ -6198,22 +6216,22 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_GetLineActivation: if (argCount > 0) { - int line = P_FindFirstLineFromID(args[0]); - return line >= 0 ? level.lines[line].activation : 0; + int line = Level->FindFirstLineFromID(args[0]); + return line >= 0 ? Level->lines[line].activation : 0; } break; case ACSF_GetActorPowerupTics: if (argCount >= 2) { - PClassActor *powerupclass = PClass::FindActor(level.Behaviors.LookupString(args[1])); + PClassActor *powerupclass = PClass::FindActor(Level->Behaviors.LookupString(args[1])); if (powerupclass == NULL || !powerupclass->IsDescendantOf(NAME_Powerup)) { - Printf("'%s' is not a type of Powerup.\n", level.Behaviors.LookupString(args[1])); + Printf("'%s' is not a type of Powerup.\n", Level->Behaviors.LookupString(args[1])); return 0; } - AActor *actor = SingleActorFromTID(args[0], activator); + AActor *actor = Level->SingleActorFromTID(args[0], activator); if (actor != NULL) { auto powerup = actor->FindInventory(powerupclass); @@ -6240,7 +6258,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_SetActorTeleFog: if (argCount >= 3) { - SetActorTeleFog(activator, args[0], level.Behaviors.LookupString(args[1]), level.Behaviors.LookupString(args[2])); + SetActorTeleFog(activator, args[0], Level->Behaviors.LookupString(args[1]), Level->Behaviors.LookupString(args[2])); } break; case ACSF_SwapActorTeleFog: @@ -6252,7 +6270,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_PickActor: if (argCount >= 5) { - actor = SingleActorFromTID(args[0], activator); + actor = Level->SingleActorFromTID(args[0], activator); if (actor == NULL) { return 0; @@ -6305,8 +6323,8 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case 3: tid1 = args[2]; } - actor = SingleActorFromTID(tid1, activator); - AActor * actor2 = tid2 == tid1 ? actor : SingleActorFromTID(tid2, activator); + actor = Level->SingleActorFromTID(tid1, activator); + AActor * actor2 = tid2 == tid1 ? actor : Level->SingleActorFromTID(tid2, activator); return COPY_AAPTR(actor, args[0]) == COPY_AAPTR(actor2, args[1]); } @@ -6315,13 +6333,13 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_CanRaiseActor: if (argCount >= 1) { if (args[0] == 0) { - actor = SingleActorFromTID(args[0], activator); + actor = Level->SingleActorFromTID(args[0], activator); if (actor != NULL) { return P_Thing_CanRaise(actor); } } - FActorIterator iterator(args[0]); + auto iterator = Level->GetActorIterator(args[0]); bool canraiseall = true; while ((actor = iterator.Next())) { @@ -6345,7 +6363,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) break; case ACSF_GetActorRoll: - actor = SingleActorFromTID(args[0], activator); + actor = Level->SingleActorFromTID(args[0], activator); return actor != NULL? AngleToACS(actor->Angles.Roll) : 0; // [ZK] A_Warp in ACS @@ -6361,7 +6379,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) AActor* const reference = ((flags & WARPF_USEPTR) && (AAPTR_DEFAULT != dest)) ? COPY_AAPTR(activator, dest) - : SingleActorFromTID(dest, activator); + : Level->SingleActorFromTID(dest, activator); if (nullptr == reference) { @@ -6384,7 +6402,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) if (argCount > 6) { - const char* const statename = level.Behaviors.LookupString(args[6]); + const char* const statename = Level->Behaviors.LookupString(args[6]); if (nullptr != statename) { @@ -6401,24 +6419,24 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) return true; } case ACSF_GetMaxInventory: - actor = SingleActorFromTID(args[0], activator); + actor = Level->SingleActorFromTID(args[0], activator); if (actor != NULL) { - return CheckInventory(actor, level.Behaviors.LookupString(args[1]), true); + return CheckInventory(actor, Level->Behaviors.LookupString(args[1]), true); } break; case ACSF_SetSectorDamage: if (argCount >= 2) { - FSectorTagIterator it(args[0]); + auto it = Level->GetSectorTagIterator(args[0]); int s; while ((s = it.Next()) >= 0) { - sector_t *sec = &level.sectors[s]; + sector_t *sec = &Level->sectors[s]; sec->damageamount = args[1]; - sec->damagetype = argCount >= 3 ? FName(level.Behaviors.LookupString(args[2])) : FName(NAME_None); + sec->damagetype = argCount >= 3 ? FName(Level->Behaviors.LookupString(args[2])) : FName(NAME_None); sec->damageinterval = argCount >= 4 ? clamp(args[3], 1, INT_MAX) : 32; sec->leakydamage = argCount >= 5 ? args[4] : 0; } @@ -6430,12 +6448,12 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) { if (args[1] == sector_t::floor || args[1] == sector_t::ceiling) { - int terrain = P_FindTerrain(level.Behaviors.LookupString(args[2])); - FSectorTagIterator it(args[0]); + int terrain = P_FindTerrain(Level->Behaviors.LookupString(args[2])); + auto it = Level->GetSectorTagIterator(args[0]); int s; while ((s = it.Next()) >= 0) { - level.sectors[s].terrainnum[args[1]] = terrain; + Level->sectors[s].terrainnum[args[1]] = terrain; } } } @@ -6466,7 +6484,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) size = fabs(size); if (lifetime != 0) - P_SpawnParticle(DVector3(ACSToDouble(x), ACSToDouble(y), ACSToDouble(z)), + P_SpawnParticle(Level, DVector3(ACSToDouble(x), ACSToDouble(y), ACSToDouble(z)), DVector3(ACSToDouble(xvel), ACSToDouble(yvel), ACSToDouble(zvel)), DVector3(ACSToDouble(accelx), ACSToDouble(accely), ACSToDouble(accelz)), color, startalpha/255., lifetime, size, endsize, fadestep/255., fullbright); @@ -6474,14 +6492,14 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) break; case ACSF_SetMusicVolume: - level.SetMusicVolume(ACSToFloat(args[0])); + Level->SetMusicVolume(ACSToFloat(args[0])); break; case ACSF_CheckProximity: { // [zombie] ACS version of A_CheckProximity - actor = SingleActorFromTID(args[0], activator); - PClass *classname = PClass::FindClass(level.Behaviors.LookupString(args[1])); + actor = Level->SingleActorFromTID(args[0], activator); + PClass *classname = PClass::FindClass(Level->Behaviors.LookupString(args[1])); double distance = ACSToDouble(args[2]); int count = argCount >= 4 ? args[3] : 1; int flags = argCount >= 5 ? args[4] : 0; @@ -6491,8 +6509,8 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_CheckActorState: { - actor = SingleActorFromTID(args[0], activator); - const char *statename = level.Behaviors.LookupString(args[1]); + actor = Level->SingleActorFromTID(args[0], activator); + const char *statename = Level->Behaviors.LookupString(args[1]); bool exact = (argCount > 2) ? !!args[2] : false; if (actor && statename) { @@ -6503,23 +6521,23 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_CheckClass: { - const char *clsname = level.Behaviors.LookupString(args[0]); + const char *clsname = Level->Behaviors.LookupString(args[0]); return !!PClass::FindActor(clsname); } case ACSF_DamageActor: // [arookas] wrapper around P_DamageMobj { // (target, ptr_select1, inflictor, ptr_select2, amount, damagetype) - AActor* target = COPY_AAPTR(SingleActorFromTID(args[0], activator), args[1]); - AActor* inflictor = COPY_AAPTR(SingleActorFromTID(args[2], activator), args[3]); - FName damagetype(level.Behaviors.LookupString(args[5])); + AActor* target = COPY_AAPTR(Level->SingleActorFromTID(args[0], activator), args[1]); + AActor* inflictor = COPY_AAPTR(Level->SingleActorFromTID(args[2], activator), args[3]); + FName damagetype(Level->Behaviors.LookupString(args[5])); return P_DamageMobj(target, inflictor, inflictor, args[4], damagetype); } case ACSF_SetActorFlag: { int tid = args[0]; - FString flagname = level.Behaviors.LookupString(args[1]); + FString flagname = Level->Behaviors.LookupString(args[1]); bool flagvalue = !!args[2]; int count = 0; // Return value; number of actors affected if (tid == 0) @@ -6531,7 +6549,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) } else { - FActorIterator it(tid); + auto it = Level->GetActorIterator(tid); while ((actor = it.Next()) != nullptr) { // Don't log errors when affecting many actors because things might share a TID but not share the flag @@ -6547,7 +6565,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_SetTranslation: { int tid = args[0]; - const char *trname = level.Behaviors.LookupString(args[1]); + const char *trname = Level->Behaviors.LookupString(args[1]); if (tid == 0) { if (activator != nullptr) @@ -6555,7 +6573,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) } else { - FActorIterator it(tid); + auto it = Level->GetActorIterator(tid); while ((actor = it.Next()) != nullptr) { actor->SetTranslation(trname); @@ -6572,31 +6590,31 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) float height = float(args[5]); if (args[2] == -1) color = -1; - FSectorTagIterator it(args[0]); + auto it = Level->GetSectorTagIterator(args[0]); int s; while ((s = it.Next()) >= 0) { - level.sectors[s].planes[which].GlowColor = color; - level.sectors[s].planes[which].GlowHeight = height; + Level->sectors[s].planes[which].GlowColor = color; + Level->sectors[s].planes[which].GlowHeight = height; } break; } case ACSF_SetFogDensity: { - FSectorTagIterator it(args[0]); + auto it = Level->GetSectorTagIterator(args[0]); int s; int d = clamp(args[1]/2, 0, 255); while ((s = it.Next()) >= 0) { - level.sectors[s].SetFogDensity(d); + Level->sectors[s].SetFogDensity(d); } break; } case ACSF_GetActorFloorTexture: { - auto a = SingleActorFromTID(args[0], activator); + auto a = Level->SingleActorFromTID(args[0], activator); if (a != nullptr) { return GlobalACSStrings.AddString(TexMan.GetTexture(a->floorpic)->GetName()); @@ -6610,7 +6628,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_GetActorFloorTerrain: { - auto a = SingleActorFromTID(args[0], activator); + auto a = Level->SingleActorFromTID(args[0], activator); if (a != nullptr) { return GlobalACSStrings.AddString(Terrains[a->floorterrain].Name); @@ -6623,7 +6641,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) } case ACSF_StrArg: - return -FName(level.Behaviors.LookupString(args[0])); + return -FName(Level->Behaviors.LookupString(args[0])); case ACSF_Floor: return args[0] & ~0xffff; @@ -6638,31 +6656,31 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) return ScriptCall(activator, argCount, args); case ACSF_StartSlideshow: - G_StartSlideshow(FName(level.Behaviors.LookupString(args[0]))); + G_StartSlideshow(Level, FName(Level->Behaviors.LookupString(args[0]))); break; case ACSF_GetSectorHealth: { int part = args[1]; - FSectorTagIterator it(args[0]); + auto it = Level->GetSectorTagIterator(args[0]); int s = it.Next(); if (s < 0) return 0; - sector_t* ss = &level.sectors[s]; + sector_t* ss = &Level->sectors[s]; FHealthGroup* grp; if (part == SECPART_Ceiling) { - return (ss->healthceilinggroup && (grp = P_GetHealthGroup(ss->healthceilinggroup))) + return (ss->healthceilinggroup && (grp = P_GetHealthGroup(Level, ss->healthceilinggroup))) ? grp->health : ss->healthceiling; } else if (part == SECPART_Floor) { - return (ss->healthfloorgroup && (grp = P_GetHealthGroup(ss->healthfloorgroup))) + return (ss->healthfloorgroup && (grp = P_GetHealthGroup(Level, ss->healthfloorgroup))) ? grp->health : ss->healthfloor; } else if (part == SECPART_3D) { - return (ss->health3dgroup && (grp = P_GetHealthGroup(ss->health3dgroup))) + return (ss->health3dgroup && (grp = P_GetHealthGroup(Level, ss->health3dgroup))) ? grp->health : ss->health3d; } return 0; @@ -6670,14 +6688,14 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_GetLineHealth: { - FLineIdIterator it(args[0]); + auto it = Level->GetLineIdIterator(args[0]); int l = it.Next(); if (l < 0) return 0; - line_t* ll = &level.lines[l]; + line_t* ll = &Level->lines[l]; if (ll->healthgroup > 0) { - FHealthGroup* grp = P_GetHealthGroup(ll->healthgroup); + FHealthGroup* grp = P_GetHealthGroup(Level, ll->healthgroup); if (grp) return grp->health; } @@ -6687,10 +6705,10 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_GetLineX: case ACSF_GetLineY: { - FLineIdIterator it(args[0]); + auto it = Level->GetLineIdIterator(args[0]); int lineno = it.Next(); if (lineno < 0) return 0; - DVector2 delta = level.lines[lineno].Delta(); + DVector2 delta = Level->lines[lineno].Delta(); double result = delta[funcIndex - ACSF_GetLineX] * ACSToDouble(args[1]); if (args[2]) { @@ -6763,12 +6781,12 @@ static bool CharArrayParms(int &capacity, int &offset, int &a, FACSStackMemory& PClass *DLevelScript::GetClassForIndex(int index) const { - return PClass::FindActor(level.Behaviors.LookupString(index)); + return PClass::FindActor(Level->Behaviors.LookupString(index)); } -int DLevelScript::RunScript () +int DLevelScript::RunScript() { - DACSThinker *controller = level.ACSThinker; + DACSThinker *controller = Level->ACSThinker; ACSLocalVariables locals(Localvars); ACSLocalArrays noarrays; ACSLocalArrays *localarrays = &noarrays; @@ -6787,7 +6805,7 @@ int DLevelScript::RunScript () } // Hexen truncates all special arguments to bytes (only when using an old MAPINFO and old ACS format - const int specialargmask = ((level.flags2 & LEVEL2_HEXENHACK) && activeBehavior->GetFormat() == ACS_Old) ? 255 : ~0; + const int specialargmask = ((Level->flags2 & LEVEL2_HEXENHACK) && activeBehavior->GetFormat() == ACS_Old) ? 255 : ~0; switch (state) { @@ -6803,10 +6821,10 @@ int DLevelScript::RunScript () // state running { int secnum; - FSectorTagIterator it(statedata); + auto it = Level->GetSectorTagIterator(statedata); while ((secnum = it.Next()) >= 0) { - if (level.sectors[secnum].floordata || level.sectors[secnum].ceilingdata) + if (Level->sectors[secnum].floordata || Level->sectors[secnum].ceilingdata) return resultValue; } @@ -6817,7 +6835,7 @@ int DLevelScript::RunScript () case SCRIPT_PolyWait: // Wait for polyobj(s) to stop moving, then enter state running - if (!PO_Busy (statedata)) + if (!PO_Busy (Level, statedata)) { state = SCRIPT_Running; } @@ -6964,20 +6982,20 @@ int DLevelScript::RunScript () break; case PCD_LSPEC1: - P_ExecuteSpecial(NEXTBYTE, activationline, activator, backSide, + P_ExecuteSpecial(Level, NEXTBYTE, activationline, activator, backSide, STACK(1) & specialargmask, 0, 0, 0, 0); sp -= 1; break; case PCD_LSPEC2: - P_ExecuteSpecial(NEXTBYTE, activationline, activator, backSide, + P_ExecuteSpecial(Level, NEXTBYTE, activationline, activator, backSide, STACK(2) & specialargmask, STACK(1) & specialargmask, 0, 0, 0); sp -= 2; break; case PCD_LSPEC3: - P_ExecuteSpecial(NEXTBYTE, activationline, activator, backSide, + P_ExecuteSpecial(Level, NEXTBYTE, activationline, activator, backSide, STACK(3) & specialargmask, STACK(2) & specialargmask, STACK(1) & specialargmask, 0, 0); @@ -6985,7 +7003,7 @@ int DLevelScript::RunScript () break; case PCD_LSPEC4: - P_ExecuteSpecial(NEXTBYTE, activationline, activator, backSide, + P_ExecuteSpecial(Level, NEXTBYTE, activationline, activator, backSide, STACK(4) & specialargmask, STACK(3) & specialargmask, STACK(2) & specialargmask, @@ -6994,7 +7012,7 @@ int DLevelScript::RunScript () break; case PCD_LSPEC5: - P_ExecuteSpecial(NEXTBYTE, activationline, activator, backSide, + P_ExecuteSpecial(Level, NEXTBYTE, activationline, activator, backSide, STACK(5) & specialargmask, STACK(4) & specialargmask, STACK(3) & specialargmask, @@ -7004,7 +7022,7 @@ int DLevelScript::RunScript () break; case PCD_LSPEC5RESULT: - STACK(5) = P_ExecuteSpecial(NEXTBYTE, activationline, activator, backSide, + STACK(5) = P_ExecuteSpecial(Level, NEXTBYTE, activationline, activator, backSide, STACK(5) & specialargmask, STACK(4) & specialargmask, STACK(3) & specialargmask, @@ -7014,7 +7032,7 @@ int DLevelScript::RunScript () break; case PCD_LSPEC5EX: - P_ExecuteSpecial(NEXTWORD, activationline, activator, backSide, + P_ExecuteSpecial(Level, NEXTWORD, activationline, activator, backSide, STACK(5) & specialargmask, STACK(4) & specialargmask, STACK(3) & specialargmask, @@ -7024,7 +7042,7 @@ int DLevelScript::RunScript () break; case PCD_LSPEC5EXRESULT: - STACK(5) = P_ExecuteSpecial(NEXTWORD, activationline, activator, backSide, + STACK(5) = P_ExecuteSpecial(Level, NEXTWORD, activationline, activator, backSide, STACK(5) & specialargmask, STACK(4) & specialargmask, STACK(3) & specialargmask, @@ -7035,14 +7053,14 @@ int DLevelScript::RunScript () case PCD_LSPEC1DIRECT: temp = NEXTBYTE; - P_ExecuteSpecial(temp, activationline, activator, backSide, + P_ExecuteSpecial(Level, temp, activationline, activator, backSide, uallong(pc[0]) & specialargmask ,0, 0, 0, 0); pc += 1; break; case PCD_LSPEC2DIRECT: temp = NEXTBYTE; - P_ExecuteSpecial(temp, activationline, activator, backSide, + P_ExecuteSpecial(Level, temp, activationline, activator, backSide, uallong(pc[0]) & specialargmask, uallong(pc[1]) & specialargmask, 0, 0, 0); pc += 2; @@ -7050,7 +7068,7 @@ int DLevelScript::RunScript () case PCD_LSPEC3DIRECT: temp = NEXTBYTE; - P_ExecuteSpecial(temp, activationline, activator, backSide, + P_ExecuteSpecial(Level, temp, activationline, activator, backSide, uallong(pc[0]) & specialargmask, uallong(pc[1]) & specialargmask, uallong(pc[2]) & specialargmask, 0, 0); @@ -7059,7 +7077,7 @@ int DLevelScript::RunScript () case PCD_LSPEC4DIRECT: temp = NEXTBYTE; - P_ExecuteSpecial(temp, activationline, activator, backSide, + P_ExecuteSpecial(Level, temp, activationline, activator, backSide, uallong(pc[0]) & specialargmask, uallong(pc[1]) & specialargmask, uallong(pc[2]) & specialargmask, @@ -7069,7 +7087,7 @@ int DLevelScript::RunScript () case PCD_LSPEC5DIRECT: temp = NEXTBYTE; - P_ExecuteSpecial(temp, activationline, activator, backSide, + P_ExecuteSpecial(Level, temp, activationline, activator, backSide, uallong(pc[0]) & specialargmask, uallong(pc[1]) & specialargmask, uallong(pc[2]) & specialargmask, @@ -7080,32 +7098,32 @@ int DLevelScript::RunScript () // Parameters for PCD_LSPEC?DIRECTB are by definition bytes so never need and-ing. case PCD_LSPEC1DIRECTB: - P_ExecuteSpecial(((uint8_t *)pc)[0], activationline, activator, backSide, + P_ExecuteSpecial(Level, ((uint8_t *)pc)[0], activationline, activator, backSide, ((uint8_t *)pc)[1], 0, 0, 0, 0); pc = (int *)((uint8_t *)pc + 2); break; case PCD_LSPEC2DIRECTB: - P_ExecuteSpecial(((uint8_t *)pc)[0], activationline, activator, backSide, + P_ExecuteSpecial(Level, ((uint8_t *)pc)[0], activationline, activator, backSide, ((uint8_t *)pc)[1], ((uint8_t *)pc)[2], 0, 0, 0); pc = (int *)((uint8_t *)pc + 3); break; case PCD_LSPEC3DIRECTB: - P_ExecuteSpecial(((uint8_t *)pc)[0], activationline, activator, backSide, + P_ExecuteSpecial(Level, ((uint8_t *)pc)[0], activationline, activator, backSide, ((uint8_t *)pc)[1], ((uint8_t *)pc)[2], ((uint8_t *)pc)[3], 0, 0); pc = (int *)((uint8_t *)pc + 4); break; case PCD_LSPEC4DIRECTB: - P_ExecuteSpecial(((uint8_t *)pc)[0], activationline, activator, backSide, + P_ExecuteSpecial(Level, ((uint8_t *)pc)[0], activationline, activator, backSide, ((uint8_t *)pc)[1], ((uint8_t *)pc)[2], ((uint8_t *)pc)[3], ((uint8_t *)pc)[4], 0); pc = (int *)((uint8_t *)pc + 5); break; case PCD_LSPEC5DIRECTB: - P_ExecuteSpecial(((uint8_t *)pc)[0], activationline, activator, backSide, + P_ExecuteSpecial(Level, ((uint8_t *)pc)[0], activationline, activator, backSide, ((uint8_t *)pc)[1], ((uint8_t *)pc)[2], ((uint8_t *)pc)[3], ((uint8_t *)pc)[4], ((uint8_t *)pc)[5]); pc = (int *)((uint8_t *)pc + 6); @@ -7141,7 +7159,7 @@ int DLevelScript::RunScript () if(pcd == PCD_CALLSTACK) { funcnum = STACK(1); - module = level.Behaviors.GetModule(funcnum>>LIBRARYID_SHIFT); + module = Level->Behaviors.GetModule(funcnum>>LIBRARYID_SHIFT); --sp; funcnum &= 0xFFFF; // Clear out tag @@ -8313,7 +8331,7 @@ scriptwait: goto scriptwait; case PCD_SCRIPTWAITNAMED: - statedata = -FName(level.Behaviors.LookupString(STACK(1))); + statedata = -FName(Level->Behaviors.LookupString(STACK(1))); sp--; goto scriptwait; @@ -8376,7 +8394,7 @@ scriptwait: case PCD_PRINTSTRING: case PCD_PRINTLOCALIZED: - lookup = level.Behaviors.LookupString (STACK(1)); + lookup = Level->Behaviors.LookupString (STACK(1), true); if (pcd == PCD_PRINTLOCALIZED) { lookup = GStrings(lookup); @@ -8426,12 +8444,12 @@ scriptwait: switch (STACK(1)) { case PRINTNAME_LEVELNAME: - work += level.LevelName; + work += Level->LevelName; break; case PRINTNAME_LEVEL: { - FString uppername = level.MapName; + FString uppername = Level->MapName; uppername.ToUpper(); work += uppername; break; @@ -8439,7 +8457,7 @@ scriptwait: case PRINTNAME_NEXTLEVEL: { - FString uppername = level.NextMap; + FString uppername = Level->NextMap; uppername.ToUpper(); work += uppername; break; @@ -8447,7 +8465,7 @@ scriptwait: case PRINTNAME_NEXTSECRET: { - FString uppername = level.NextSecretMap; + FString uppername = Level->NextSecretMap; uppername.ToUpper(); work += uppername; break; @@ -8472,9 +8490,9 @@ scriptwait: player = activator->player; } } - else if (playeringame[STACK(1)-1]) + else if (Level->PlayerInGame(STACK(1)-1)) { - player = &players[STACK(1)-1]; + player = Level->Players[STACK(1)-1]; } else { @@ -8564,7 +8582,7 @@ scriptwait: // [GRB] Print key name(s) for a command case PCD_PRINTBIND: - lookup = level.Behaviors.LookupString (STACK(1)); + lookup = Level->Behaviors.LookupString (STACK(1)); if (lookup != NULL) { int key1 = 0, key2 = 0; @@ -8603,9 +8621,9 @@ scriptwait: screen = screen->target; } if (pcd == PCD_ENDPRINTBOLD || screen == NULL || - screen->CheckLocalView (consoleplayer)) + screen->CheckLocalView()) { - if (pcd == PCD_ENDPRINTBOLD && (gameinfo.correctprintbold || (level.flags2 & LEVEL2_HEXENHACK))) + if (pcd == PCD_ENDPRINTBOLD && (gameinfo.correctprintbold || (Level->flags2 & LEVEL2_HEXENHACK))) C_MidPrintBold(activefont, work); else C_MidPrint (activefont, work); @@ -8628,6 +8646,7 @@ scriptwait: { optstart = sp; } + if (Level->isPrimaryLevel()) { AActor *screen = activator; if (screen != NULL && @@ -8637,8 +8656,7 @@ scriptwait: { screen = screen->target; } - if (pcd == PCD_ENDHUDMESSAGEBOLD || screen == NULL || - players[consoleplayer].mo == screen) + if (Level->isPrimaryLevel() && (pcd == PCD_ENDHUDMESSAGEBOLD || screen == NULL || Level->isConsolePlayer(screen))) { int type = Stack[optstart-6]; int id = Stack[optstart-5]; @@ -8651,7 +8669,7 @@ scriptwait: if (type & HUDMSG_COLORSTRING) { - color = V_FindFontColor(level.Behaviors.LookupString(Stack[optstart-4])); + color = V_FindFontColor(Level->Behaviors.LookupString(Stack[optstart-4])); } else { @@ -8796,7 +8814,7 @@ scriptwait: break; case PCD_MUSICCHANGE: - lookup = level.Behaviors.LookupString (STACK(2)); + lookup = Level->Behaviors.LookupString (STACK(2)); if (lookup != NULL) { S_ChangeMusic (lookup, STACK(1)); @@ -8810,11 +8828,11 @@ scriptwait: // [BC] End ST PCD's case PCD_TIMER: - PushToStack (level.time); + PushToStack (Level->time); break; case PCD_SECTORSOUND: - lookup = level.Behaviors.LookupString (STACK(2)); + lookup = Level->Behaviors.LookupString (STACK(2)); if (lookup != NULL) { if (activationline) @@ -8839,7 +8857,7 @@ scriptwait: break; case PCD_AMBIENTSOUND: - lookup = level.Behaviors.LookupString (STACK(2)); + lookup = Level->Behaviors.LookupString (STACK(2)); if (lookup != NULL) { S_Sound (CHAN_AUTO, @@ -8850,8 +8868,8 @@ scriptwait: break; case PCD_LOCALAMBIENTSOUND: - lookup = level.Behaviors.LookupString (STACK(2)); - if (lookup != NULL && activator->CheckLocalView (consoleplayer)) + lookup = Level->Behaviors.LookupString (STACK(2)); + if (lookup != NULL && activator->CheckLocalView()) { S_Sound (CHAN_AUTO, lookup, @@ -8861,7 +8879,7 @@ scriptwait: break; case PCD_ACTIVATORSOUND: - lookup = level.Behaviors.LookupString (STACK(2)); + lookup = Level->Behaviors.LookupString (STACK(2)); if (lookup != NULL) { if (activator != NULL) @@ -8881,7 +8899,7 @@ scriptwait: break; case PCD_SOUNDSEQUENCE: - lookup = level.Behaviors.LookupString (STACK(1)); + lookup = Level->Behaviors.LookupString (STACK(1)); if (lookup != NULL) { if (activationline != NULL) @@ -8899,10 +8917,10 @@ scriptwait: case PCD_REPLACETEXTURES: { - const char *fromname = level.Behaviors.LookupString(STACK(3)); - const char *toname = level.Behaviors.LookupString(STACK(2)); + const char *fromname = Level->Behaviors.LookupString(STACK(3)); + const char *toname = Level->Behaviors.LookupString(STACK(2)); - P_ReplaceTextures(fromname, toname, STACK(1)); + Level->ReplaceTextures(fromname, toname, STACK(1)); sp -= 3; break; } @@ -8911,10 +8929,10 @@ scriptwait: { int lineno; - FLineIdIterator itr(STACK(2)); + auto itr = Level->GetLineIdIterator(STACK(2)); while ((lineno = itr.Next()) >= 0) { - auto &line = level.lines[lineno]; + auto &line = Level->lines[lineno]; switch (STACK(1)) { case BLOCK_NOTHING: @@ -8948,13 +8966,13 @@ scriptwait: { int line; - FLineIdIterator itr(STACK(2)); + auto itr = Level->GetLineIdIterator(STACK(2)); while ((line = itr.Next()) >= 0) { if (STACK(1)) - level.lines[line].flags |= ML_BLOCKMONSTERS; + Level->lines[line].flags |= ML_BLOCKMONSTERS; else - level.lines[line].flags &= ~ML_BLOCKMONSTERS; + Level->lines[line].flags &= ~ML_BLOCKMONSTERS; } sp -= 2; @@ -8971,13 +8989,13 @@ scriptwait: if (specnum >= -ACSF_ACS_NamedExecuteAlways && specnum <= -ACSF_ACS_NamedExecute) { specnum = NamedACSToNormalACS[-specnum - ACSF_ACS_NamedExecute]; - arg0 = -FName(level.Behaviors.LookupString(arg0)); + arg0 = -FName(Level->Behaviors.LookupString(arg0)); } - FLineIdIterator itr(STACK(7)); + auto itr = Level->GetLineIdIterator(STACK(7)); while ((linenum = itr.Next()) >= 0) { - line_t *line = &level.lines[linenum]; + line_t *line = &Level->lines[linenum]; line->special = specnum; line->args[0] = arg0; line->args[1] = STACK(4); @@ -9000,12 +9018,12 @@ scriptwait: if (specnum >= -ACSF_ACS_NamedExecuteAlways && specnum <= -ACSF_ACS_NamedExecute) { specnum = NamedACSToNormalACS[-specnum - ACSF_ACS_NamedExecute]; - arg0 = -FName(level.Behaviors.LookupString(arg0)); + arg0 = -FName(Level->Behaviors.LookupString(arg0)); } if (STACK(7) != 0) { - FActorIterator iterator (STACK(7)); + auto iterator = Level->GetActorIterator(STACK(7)); AActor *actor; while ( (actor = iterator.Next ()) ) @@ -9032,10 +9050,10 @@ scriptwait: break; case PCD_THINGSOUND: - lookup = level.Behaviors.LookupString (STACK(2)); + lookup = Level->Behaviors.LookupString (STACK(2)); if (lookup != NULL) { - FActorIterator iterator (STACK(3)); + auto iterator = Level->GetActorIterator(STACK(3)); AActor *spot; while ( (spot = iterator.Next ()) ) @@ -9059,25 +9077,25 @@ scriptwait: break; case PCD_SETGRAVITY: - level.gravity = ACSToDouble(STACK(1)); + Level->gravity = ACSToDouble(STACK(1)); sp--; break; case PCD_SETGRAVITYDIRECT: - level.gravity = ACSToDouble(uallong(pc[0])); + Level->gravity = ACSToDouble(uallong(pc[0])); pc++; break; case PCD_SETAIRCONTROL: - level.aircontrol = ACSToDouble(STACK(1)); + Level->aircontrol = ACSToDouble(STACK(1)); sp--; - G_AirControlChanged (); + Level->AirControlChanged (); break; case PCD_SETAIRCONTROLDIRECT: - level.aircontrol = ACSToDouble(uallong(pc[0])); + Level->aircontrol = ACSToDouble(uallong(pc[0])); pc++; - G_AirControlChanged (); + Level->AirControlChanged (); break; case PCD_SPAWN: @@ -9116,7 +9134,7 @@ scriptwait: } else { - FActorIterator it(STACK(1)); + auto it = Level->GetActorIterator(STACK(1)); AActor *actor; for (actor = it.Next(); actor != NULL; actor = it.Next()) { @@ -9128,7 +9146,7 @@ scriptwait: case PCD_GIVEINVENTORY: { - int typeindex = FName(level.Behaviors.LookupString(STACK(2))).GetIndex(); + int typeindex = FName(Level->Behaviors.LookupString(STACK(2))).GetIndex(); ScriptUtil::Exec(NAME_GiveInventory, ScriptUtil::Pointer, activator, ScriptUtil::Int, typeindex, ScriptUtil::Int, STACK(1), ScriptUtil::End); sp -= 2; break; @@ -9136,15 +9154,15 @@ scriptwait: case PCD_GIVEACTORINVENTORY: { - int typeindex = FName(level.Behaviors.LookupString(STACK(2))).GetIndex(); - FName type = FName(level.Behaviors.LookupString(STACK(2))); + int typeindex = FName(Level->Behaviors.LookupString(STACK(2))).GetIndex(); + FName type = FName(Level->Behaviors.LookupString(STACK(2))); if (STACK(3) == 0) { ScriptUtil::Exec(NAME_GiveInventory, ScriptUtil::Pointer, nullptr, ScriptUtil::Int, typeindex, ScriptUtil::Int, STACK(1), ScriptUtil::End); } else { - FActorIterator it(STACK(3)); + auto it = Level->GetActorIterator(STACK(3)); AActor *actor; for (actor = it.Next(); actor != NULL; actor = it.Next()) { @@ -9157,7 +9175,7 @@ scriptwait: case PCD_GIVEINVENTORYDIRECT: { - int typeindex = FName(level.Behaviors.LookupString(TAGSTR(uallong(pc[0])))).GetIndex(); + int typeindex = FName(Level->Behaviors.LookupString(TAGSTR(uallong(pc[0])))).GetIndex(); ScriptUtil::Exec(NAME_GiveInventory, ScriptUtil::Pointer, activator, ScriptUtil::Int, typeindex, ScriptUtil::Int, uallong(pc[1]), ScriptUtil::End); pc += 2; break; @@ -9165,7 +9183,7 @@ scriptwait: case PCD_TAKEINVENTORY: { - int typeindex = FName(level.Behaviors.LookupString(STACK(2))).GetIndex(); + int typeindex = FName(Level->Behaviors.LookupString(STACK(2))).GetIndex(); ScriptUtil::Exec(NAME_TakeInventory, ScriptUtil::Pointer, activator, ScriptUtil::Int, typeindex, ScriptUtil::Int, STACK(1), ScriptUtil::End); sp -= 2; break; @@ -9173,15 +9191,15 @@ scriptwait: case PCD_TAKEACTORINVENTORY: { - int typeindex = FName(level.Behaviors.LookupString(STACK(2))).GetIndex(); - FName type = FName(level.Behaviors.LookupString(STACK(2))); + int typeindex = FName(Level->Behaviors.LookupString(STACK(2))).GetIndex(); + FName type = FName(Level->Behaviors.LookupString(STACK(2))); if (STACK(3) == 0) { ScriptUtil::Exec(NAME_TakeInventory, ScriptUtil::Pointer, nullptr, ScriptUtil::Int, typeindex, ScriptUtil::Int, STACK(1), ScriptUtil::End); } else { - FActorIterator it(STACK(3)); + auto it = Level->GetActorIterator(STACK(3)); AActor *actor; for (actor = it.Next(); actor != NULL; actor = it.Next()) { @@ -9194,46 +9212,46 @@ scriptwait: case PCD_TAKEINVENTORYDIRECT: { - int typeindex = FName(level.Behaviors.LookupString(TAGSTR(uallong(pc[0])))).GetIndex(); + int typeindex = FName(Level->Behaviors.LookupString(TAGSTR(uallong(pc[0])))).GetIndex(); ScriptUtil::Exec(NAME_TakeInventory, ScriptUtil::Pointer, activator, ScriptUtil::Int, typeindex, ScriptUtil::Int, uallong(pc[1]), ScriptUtil::End); pc += 2; break; } case PCD_CHECKINVENTORY: - STACK(1) = CheckInventory (activator, level.Behaviors.LookupString (STACK(1)), false); + STACK(1) = CheckInventory (activator, Level->Behaviors.LookupString (STACK(1)), false); break; case PCD_CHECKACTORINVENTORY: - STACK(2) = CheckInventory (SingleActorFromTID(STACK(2), NULL), - level.Behaviors.LookupString (STACK(1)), false); + STACK(2) = CheckInventory (Level->SingleActorFromTID(STACK(2), NULL), + Level->Behaviors.LookupString (STACK(1)), false); sp--; break; case PCD_CHECKINVENTORYDIRECT: - PushToStack (CheckInventory (activator, level.Behaviors.LookupString (TAGSTR(uallong(pc[0]))), false)); + PushToStack (CheckInventory (activator, Level->Behaviors.LookupString (TAGSTR(uallong(pc[0]))), false)); pc += 1; break; case PCD_USEINVENTORY: - STACK(1) = UseInventory (activator, level.Behaviors.LookupString (STACK(1))); + STACK(1) = UseInventory (Level, activator, Level->Behaviors.LookupString (STACK(1))); break; case PCD_USEACTORINVENTORY: { int ret = 0; - const char *type = level.Behaviors.LookupString(STACK(1)); + const char *type = Level->Behaviors.LookupString(STACK(1)); if (STACK(2) == 0) { - ret = UseInventory(NULL, type); + ret = UseInventory(Level, NULL, type); } else { - FActorIterator it(STACK(2)); + auto it = Level->GetActorIterator(STACK(2)); AActor *actor; for (actor = it.Next(); actor != NULL; actor = it.Next()) { - ret += UseInventory(actor, type); + ret += UseInventory(Level, actor, type); } } STACK(2) = ret; @@ -9259,7 +9277,7 @@ scriptwait: case PCD_GETAMMOCAPACITY: if (activator != NULL) { - PClass *type = PClass::FindClass (level.Behaviors.LookupString (STACK(1))); + PClass *type = PClass::FindClass (Level->Behaviors.LookupString (STACK(1))); if (type != NULL && type->ParentClass == PClass::FindActor(NAME_Ammo)) { @@ -9287,7 +9305,7 @@ scriptwait: case PCD_SETAMMOCAPACITY: if (activator != NULL) { - PClassActor *type = PClass::FindActor (level.Behaviors.LookupString (STACK(2))); + PClassActor *type = PClass::FindActor (Level->Behaviors.LookupString (STACK(2))); if (type != NULL && type->ParentClass == PClass::FindActor(NAME_Ammo)) { @@ -9311,27 +9329,27 @@ scriptwait: break; case PCD_SETMUSIC: - S_ChangeMusic (level.Behaviors.LookupString (STACK(3)), STACK(2)); + S_ChangeMusic (Level->Behaviors.LookupString (STACK(3)), STACK(2)); sp -= 3; break; case PCD_SETMUSICDIRECT: - S_ChangeMusic (level.Behaviors.LookupString (TAGSTR(uallong(pc[0]))), uallong(pc[1])); + S_ChangeMusic (Level->Behaviors.LookupString (TAGSTR(uallong(pc[0]))), uallong(pc[1])); pc += 3; break; case PCD_LOCALSETMUSIC: - if (activator == players[consoleplayer].mo) + if (Level->isConsolePlayer(activator)) { - S_ChangeMusic (level.Behaviors.LookupString (STACK(3)), STACK(2)); + S_ChangeMusic (Level->Behaviors.LookupString (STACK(3)), STACK(2)); } sp -= 3; break; case PCD_LOCALSETMUSICDIRECT: - if (activator == players[consoleplayer].mo) + if (Level->isConsolePlayer(activator)) { - S_ChangeMusic (level.Behaviors.LookupString (TAGSTR(uallong(pc[0]))), uallong(pc[1])); + S_ChangeMusic (Level->Behaviors.LookupString (TAGSTR(uallong(pc[0]))), uallong(pc[1])); } pc += 3; break; @@ -9349,7 +9367,7 @@ scriptwait: case PCD_CANCELFADE: { - TThinkerIterator iterator; + auto iterator = Level->GetThinkerIterator(); DFlashFader *fader; while ( (fader = iterator.Next()) ) @@ -9369,7 +9387,7 @@ scriptwait: case PCD_SETACTORPOSITION: { bool result = false; - AActor *actor = SingleActorFromTID (STACK(5), activator); + AActor *actor = Level->SingleActorFromTID (STACK(5), activator); if (actor != NULL) result = P_MoveThing(actor, DVector3(ACSToDouble(STACK(4)), ACSToDouble(STACK(3)), ACSToDouble(STACK(2))), !!STACK(1)); sp -= 4; @@ -9381,7 +9399,7 @@ scriptwait: case PCD_GETACTORY: case PCD_GETACTORZ: { - AActor *actor = SingleActorFromTID(STACK(1), activator); + AActor *actor = Level->SingleActorFromTID(STACK(1), activator); if (actor == NULL) { STACK(1) = 0; @@ -9399,28 +9417,28 @@ scriptwait: case PCD_GETACTORFLOORZ: { - AActor *actor = SingleActorFromTID(STACK(1), activator); + AActor *actor = Level->SingleActorFromTID(STACK(1), activator); STACK(1) = actor == NULL ? 0 : DoubleToACS(actor->floorz); } break; case PCD_GETACTORCEILINGZ: { - AActor *actor = SingleActorFromTID(STACK(1), activator); + AActor *actor = Level->SingleActorFromTID(STACK(1), activator); STACK(1) = actor == NULL ? 0 : DoubleToACS(actor->ceilingz); } break; case PCD_GETACTORANGLE: { - AActor *actor = SingleActorFromTID(STACK(1), activator); + AActor *actor = Level->SingleActorFromTID(STACK(1), activator); STACK(1) = actor == NULL ? 0 : AngleToACS(actor->Angles.Yaw); } break; case PCD_GETACTORPITCH: { - AActor *actor = SingleActorFromTID(STACK(1), activator); + AActor *actor = Level->SingleActorFromTID(STACK(1), activator); STACK(1) = actor == NULL ? 0 : PitchToACS(actor->Angles.Pitch); } break; @@ -9450,19 +9468,19 @@ scriptwait: double z = 0; if (tag != 0) - secnum = P_FindFirstSectorFromTag (tag); + secnum = Level->FindFirstSectorFromTag (tag); else - secnum = P_PointInSector (x, y)->sectornum; + secnum = Level->PointInSector (DVector2(x, y))->sectornum; if (secnum >= 0) { if (pcd == PCD_GETSECTORFLOORZ) { - z = level.sectors[secnum].floorplane.ZatPoint (x, y); + z = Level->sectors[secnum].floorplane.ZatPoint (x, y); } else { - z = level.sectors[secnum].ceilingplane.ZatPoint (x, y); + z = Level->sectors[secnum].ceilingplane.ZatPoint (x, y); } } sp -= 2; @@ -9472,28 +9490,30 @@ scriptwait: case PCD_GETSECTORLIGHTLEVEL: { - int secnum = P_FindFirstSectorFromTag (STACK(1)); + int secnum = Level->FindFirstSectorFromTag (STACK(1)); int z = -1; if (secnum >= 0) { - z = level.sectors[secnum].lightlevel; + z = Level->sectors[secnum].lightlevel; } STACK(1) = z; } break; case PCD_SETFLOORTRIGGER: - Create (activator, activationline, backSide, false, STACK(8), - STACK(7), STACK(6), STACK(5), STACK(4), STACK(3), STACK(2), STACK(1)); - sp -= 8; - break; - case PCD_SETCEILINGTRIGGER: - Create (activator, activationline, backSide, true, STACK(8), - STACK(7), STACK(6), STACK(5), STACK(4), STACK(3), STACK(2), STACK(1)); + { + int secnum = Level->FindFirstSectorFromTag(STACK(8)); + if (secnum >= 0) + { + Level->CreateThinker(activator, activationline, backSide, pcd == PCD_SETCEILINGTRIGGER, &Level->sectors[secnum], + STACK(7), STACK(6), STACK(5), STACK(4), STACK(3), STACK(2), STACK(1)); + } + sp -= 8; break; + } case PCD_STARTTRANSLATION: { @@ -9620,7 +9640,7 @@ scriptwait: } else { - STACK(1) = activator->player->ReadyWeapon->GetClass()->TypeName == FName(level.Behaviors.LookupString (STACK(1)), true); + STACK(1) = activator->player->ReadyWeapon->GetClass()->TypeName == FName(Level->Behaviors.LookupString (STACK(1)), true); } break; @@ -9660,7 +9680,7 @@ scriptwait: } else { - PushToStack (int(activator->player - players)); + PushToStack (Level->PlayerNum(activator->player)); } break; @@ -9671,18 +9691,18 @@ scriptwait: } else { - STACK(1) = playeringame[STACK(1)]; + STACK(1) = Level->PlayerInGame(STACK(1)); } break; case PCD_PLAYERISBOT: - if (STACK(1) < 0 || STACK(1) >= MAXPLAYERS || !playeringame[STACK(1)]) + if (STACK(1) < 0 || STACK(1) >= MAXPLAYERS || !Level->PlayerInGame(STACK(1))) { STACK(1) = false; } else { - STACK(1) = (players[STACK(1)].Bot != NULL); + STACK(1) = (Level->Players[STACK(1)]->Bot != nullptr); } break; @@ -9709,21 +9729,21 @@ scriptwait: // Like Thing_Projectile(Gravity) specials, but you can give the // projectile a TID. // Thing_Projectile2 (tid, type, angle, speed, vspeed, gravity, newtid); - P_Thing_Projectile(STACK(7), activator, STACK(6), NULL, STACK(5) * (360. / 256.), + Level->EV_Thing_Projectile(STACK(7), activator, STACK(6), NULL, STACK(5) * (360. / 256.), STACK(4) / 8., STACK(3) / 8., 0, NULL, STACK(2), STACK(1), false); sp -= 7; break; case PCD_SPAWNPROJECTILE: // Same, but takes an actor name instead of a spawn ID. - P_Thing_Projectile(STACK(7), activator, 0, level.Behaviors.LookupString(STACK(6)), STACK(5) * (360. / 256.), + Level->EV_Thing_Projectile(STACK(7), activator, 0, Level->Behaviors.LookupString(STACK(6)), STACK(5) * (360. / 256.), STACK(4) / 8., STACK(3) / 8., 0, NULL, STACK(2), STACK(1), false); sp -= 7; break; case PCD_STRLEN: { - const char *str = level.Behaviors.LookupString(STACK(1)); + const char *str = Level->Behaviors.LookupString(STACK(1)); if (str != NULL) { STACK(1) = int32_t(strlen(str)); @@ -9741,7 +9761,7 @@ scriptwait: break; case PCD_GETCVAR: - STACK(1) = DoGetCVar(GetCVar(activator, level.Behaviors.LookupString(STACK(1))), false); + STACK(1) = DoGetCVar(GetCVar(activator, Level->Behaviors.LookupString(STACK(1))), false); break; case PCD_SETHUDSIZE: @@ -9757,16 +9777,16 @@ scriptwait: case PCD_GETLEVELINFO: switch (STACK(1)) { - case LEVELINFO_PAR_TIME: STACK(1) = level.partime; break; - case LEVELINFO_SUCK_TIME: STACK(1) = level.sucktime; break; - case LEVELINFO_CLUSTERNUM: STACK(1) = level.cluster; break; - case LEVELINFO_LEVELNUM: STACK(1) = level.levelnum; break; - case LEVELINFO_TOTAL_SECRETS: STACK(1) = level.total_secrets; break; - case LEVELINFO_FOUND_SECRETS: STACK(1) = level.found_secrets; break; - case LEVELINFO_TOTAL_ITEMS: STACK(1) = level.total_items; break; - case LEVELINFO_FOUND_ITEMS: STACK(1) = level.found_items; break; - case LEVELINFO_TOTAL_MONSTERS: STACK(1) = level.total_monsters; break; - case LEVELINFO_KILLED_MONSTERS: STACK(1) = level.killed_monsters; break; + case LEVELINFO_PAR_TIME: STACK(1) = Level->partime; break; + case LEVELINFO_SUCK_TIME: STACK(1) = Level->sucktime; break; + case LEVELINFO_CLUSTERNUM: STACK(1) = Level->cluster; break; + case LEVELINFO_LEVELNUM: STACK(1) = Level->levelnum; break; + case LEVELINFO_TOTAL_SECRETS: STACK(1) = Level->total_secrets; break; + case LEVELINFO_FOUND_SECRETS: STACK(1) = Level->found_secrets; break; + case LEVELINFO_TOTAL_ITEMS: STACK(1) = Level->total_items; break; + case LEVELINFO_FOUND_ITEMS: STACK(1) = Level->found_items; break; + case LEVELINFO_TOTAL_MONSTERS: STACK(1) = Level->total_monsters; break; + case LEVELINFO_KILLED_MONSTERS: STACK(1) = Level->killed_monsters; break; default: STACK(1) = 0; break; } break; @@ -9775,24 +9795,24 @@ scriptwait: { const char *sky1name, *sky2name; - sky1name = level.Behaviors.LookupString (STACK(2)); - sky2name = level.Behaviors.LookupString (STACK(1)); + sky1name = Level->Behaviors.LookupString (STACK(2)); + sky2name = Level->Behaviors.LookupString (STACK(1)); if (sky1name[0] != 0) { - sky1texture = level.skytexture1 = TexMan.GetTextureID(sky1name, ETextureType::Wall, FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_ReturnFirst); + Level->skytexture1 = TexMan.GetTextureID(sky1name, ETextureType::Wall, FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_ReturnFirst); } if (sky2name[0] != 0) { - sky2texture = level.skytexture2 = TexMan.GetTextureID(sky2name, ETextureType::Wall, FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_ReturnFirst); + Level->skytexture2 = TexMan.GetTextureID(sky2name, ETextureType::Wall, FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_ReturnFirst); } - R_InitSkyMap (); + InitSkyMap (Level); sp -= 2; } break; case PCD_SETCAMERATOTEXTURE: { - const char *picname = level.Behaviors.LookupString (STACK(2)); + const char *picname = Level->Behaviors.LookupString (STACK(2)); AActor *camera; if (STACK(3) == 0) @@ -9801,7 +9821,7 @@ scriptwait: } else { - FActorIterator it (STACK(3)); + auto it = Level->GetActorIterator(STACK(3)); camera = it.Next (); } @@ -9814,7 +9834,7 @@ scriptwait: } else { - level.canvasTextureInfo.Add(camera, picnum, STACK(1)); + Level->canvasTextureInfo.Add(camera, picnum, STACK(1)); } } sp -= 3; @@ -9833,7 +9853,7 @@ scriptwait: case PCD_SETACTORSTATE: { - const char *statename = level.Behaviors.LookupString (STACK(2)); + const char *statename = Level->Behaviors.LookupString (STACK(2)); FState *state; if (STACK(3) == 0) @@ -9854,7 +9874,7 @@ scriptwait: } else { - FActorIterator iterator (STACK(3)); + auto iterator = Level->GetActorIterator(STACK(3)); AActor *actor; int count = 0; @@ -9874,24 +9894,24 @@ scriptwait: break; case PCD_PLAYERCLASS: // [GRB] - if (STACK(1) < 0 || STACK(1) >= MAXPLAYERS || !playeringame[STACK(1)]) + if (STACK(1) < 0 || STACK(1) >= MAXPLAYERS || !Level->PlayerInGame(STACK(1))) { STACK(1) = -1; } else { - STACK(1) = players[STACK(1)].CurrentPlayerClass; + STACK(1) = Level->Players[STACK(1)]->CurrentPlayerClass; } break; case PCD_GETPLAYERINFO: // [GRB] - if (STACK(2) < 0 || STACK(2) >= MAXPLAYERS || !playeringame[STACK(2)]) + if (STACK(2) < 0 || STACK(2) >= MAXPLAYERS || !Level->PlayerInGame(STACK(2))) { STACK(2) = -1; } else { - player_t *pl = &players[STACK(2)]; + player_t *pl = Level->Players[STACK(2)]; userinfo_t *userinfo = &pl->userinfo; switch (STACK(1)) { @@ -9913,7 +9933,7 @@ scriptwait: case PCD_CHANGELEVEL: { - G_ChangeLevel(level.Behaviors.LookupString(STACK(4)), STACK(3), STACK(2), STACK(1)); + Level->ChangeLevel(Level->Behaviors.LookupString(STACK(4)), STACK(3), STACK(2), STACK(1)); sp -= 4; } break; @@ -9922,18 +9942,18 @@ scriptwait: { int tag = STACK(5); int amount = STACK(4); - FName type = level.Behaviors.LookupString(STACK(3)); - FName protection = FName (level.Behaviors.LookupString(STACK(2)), true); + FName type = Level->Behaviors.LookupString(STACK(3)); + FName protection = FName (Level->Behaviors.LookupString(STACK(2)), true); PClassActor *protectClass = PClass::FindActor (protection); int flags = STACK(1); sp -= 5; - P_SectorDamage(tag, amount, type, protectClass, flags); + P_SectorDamage(Level, tag, amount, type, protectClass, flags); } break; case PCD_THINGDAMAGE2: - STACK(3) = P_Thing_Damage (STACK(3), activator, STACK(2), FName(level.Behaviors.LookupString(STACK(1)))); + STACK(3) = Level->EV_Thing_Damage (STACK(3), activator, STACK(2), FName(Level->Behaviors.LookupString(STACK(1)))); sp -= 2; break; @@ -9949,7 +9969,7 @@ scriptwait: case PCD_GETACTORLIGHTLEVEL: { - AActor *actor = SingleActorFromTID(STACK(1), activator); + AActor *actor = Level->SingleActorFromTID(STACK(1), activator); if (actor != NULL) { sector_t *sector = actor->Sector; @@ -9978,9 +9998,9 @@ scriptwait: } case PCD_SETMUGSHOTSTATE: - if (!multiplayer || (activator != nullptr && activator->CheckLocalView(consoleplayer))) + if (!multiplayer || (activator != nullptr && activator->CheckLocalView())) { - StatusBar->SetMugShotState(level.Behaviors.LookupString(STACK(1))); + StatusBar->SetMugShotState(Level->Behaviors.LookupString(STACK(1))); } sp--; break; @@ -9989,13 +10009,14 @@ scriptwait: { int playernum = STACK(1); - if (playernum < 0 || playernum >= MAXPLAYERS || !playeringame[playernum] || players[playernum].camera == NULL || players[playernum].camera->player != NULL) + if (playernum < 0 || playernum >= MAXPLAYERS || !Level->PlayerInGame(playernum) || + Level->Players[playernum]->camera == nullptr || Level->Players[playernum]->camera->player != nullptr) { STACK(1) = -1; } else { - STACK(1) = players[playernum].camera->tid; + STACK(1) = Level->Players[playernum]->camera->tid; } } break; @@ -10007,15 +10028,15 @@ scriptwait: case PCD_MORPHACTOR: { int tag = STACK(7); - FName playerclass_name = level.Behaviors.LookupString(STACK(6)); + FName playerclass_name = Level->Behaviors.LookupString(STACK(6)); auto playerclass = PClass::FindActor (playerclass_name); - FName monsterclass_name = level.Behaviors.LookupString(STACK(5)); + FName monsterclass_name = Level->Behaviors.LookupString(STACK(5)); PClassActor *monsterclass = PClass::FindActor(monsterclass_name); int duration = STACK(4); int style = STACK(3); - FName morphflash_name = level.Behaviors.LookupString(STACK(2)); + FName morphflash_name = Level->Behaviors.LookupString(STACK(2)); PClassActor *morphflash = PClass::FindActor(morphflash_name); - FName unmorphflash_name = level.Behaviors.LookupString(STACK(1)); + FName unmorphflash_name = Level->Behaviors.LookupString(STACK(1)); PClassActor *unmorphflash = PClass::FindActor(unmorphflash_name); int changes = 0; @@ -10025,7 +10046,7 @@ scriptwait: } else { - FActorIterator iterator (tag); + auto iterator = Level->GetActorIterator(tag); AActor *actor; while ( (actor = iterator.Next ()) ) @@ -10051,7 +10072,7 @@ scriptwait: } else { - FActorIterator iterator (tag); + auto iterator = Level->GetActorIterator(tag); AActor *actor; while ( (actor = iterator.Next ()) ) @@ -10095,7 +10116,7 @@ scriptwait: index += STACK(6); - lookup = level.Behaviors.LookupString (STACK(2)); + lookup = Level->Behaviors.LookupString (STACK(2)); if (!lookup) { // no data, operation complete @@ -10225,10 +10246,10 @@ scriptwait: #undef PushtoStack -static DLevelScript *P_GetScriptGoing (AActor *who, line_t *where, int num, const ScriptPtr *code, FBehavior *module, +static DLevelScript *P_GetScriptGoing (FLevelLocals *l, AActor *who, line_t *where, int num, const ScriptPtr *code, FBehavior *module, const int *args, int argcount, int flags) { - DACSThinker *controller = level.ACSThinker; + DACSThinker *controller = l->ACSThinker; DLevelScript **running; if (controller && !(flags & ACS_ALWAYS) && (running = controller->RunningScripts.CheckKey(num)) != NULL) @@ -10241,15 +10262,16 @@ static DLevelScript *P_GetScriptGoing (AActor *who, line_t *where, int num, cons return NULL; } - return Create (who, where, num, code, module, args, argcount, flags); + return Create (l, who, where, num, code, module, args, argcount, flags); } -DLevelScript::DLevelScript (AActor *who, line_t *where, int num, const ScriptPtr *code, FBehavior *module, +DLevelScript::DLevelScript (FLevelLocals *l, AActor *who, line_t *where, int num, const ScriptPtr *code, FBehavior *module, const int *args, int argcount, int flags) : activeBehavior (module) { - if (level.ACSThinker == nullptr) - level.ACSThinker = Create(); + Level = l; + if (Level->ACSThinker == nullptr) + Level->ACSThinker = Level->CreateThinker(); script = num; assert(code->VarCount >= code->ArgCount); @@ -10277,11 +10299,11 @@ DLevelScript::DLevelScript (AActor *who, line_t *where, int num, const ScriptPtr // goes by while they're in their default state. if (!(flags & ACS_ALWAYS)) - level.ACSThinker->RunningScripts[num] = this; + Level->ACSThinker->RunningScripts[num] = this; Link(); - if (level.flags2 & LEVEL2_HEXENHACK) + if (Level->flags2 & LEVEL2_HEXENHACK) { PutLast(); } @@ -10289,9 +10311,8 @@ DLevelScript::DLevelScript (AActor *who, line_t *where, int num, const ScriptPtr DPrintf(DMSG_SPAMMY, "%s started.\n", ScriptPresentation(num).GetChars()); } -static void SetScriptState (int script, DLevelScript::EScriptState state) +void SetScriptState (DACSThinker *controller, int script, DLevelScript::EScriptState state) { - DACSThinker *controller = level.ACSThinker; DLevelScript **running; if (controller != NULL && (running = controller->RunningScripts.CheckKey(script)) != NULL) @@ -10300,25 +10321,25 @@ static void SetScriptState (int script, DLevelScript::EScriptState state) } } -void P_DoDeferedScripts () +void FLevelLocals::DoDeferedScripts () { const ScriptPtr *scriptdata; FBehavior *module; // Handle defered scripts in this step, too - for(int i = level.info->deferred.Size()-1; i>=0; i--) + for(int i = info->deferred.Size()-1; i>=0; i--) { - acsdefered_t *def = &level.info->deferred[i]; + acsdefered_t *def = &info->deferred[i]; switch (def->type) { case acsdefered_t::defexecute: case acsdefered_t::defexealways: - scriptdata = level.Behaviors.FindScript (def->script, module); + scriptdata = Behaviors.FindScript (def->script, module); if (scriptdata) { - P_GetScriptGoing ((unsigned)def->playernum < MAXPLAYERS && - playeringame[def->playernum] ? players[def->playernum].mo : NULL, - NULL, def->script, + P_GetScriptGoing (this, (unsigned)def->playernum < MAXPLAYERS && + PlayerInGame(def->playernum) ? Players[def->playernum]->mo : nullptr, + nullptr, def->script, scriptdata, module, def->args, 3, def->type == acsdefered_t::defexealways ? ACS_ALWAYS : 0); @@ -10330,17 +10351,17 @@ void P_DoDeferedScripts () break; case acsdefered_t::defsuspend: - SetScriptState (def->script, DLevelScript::SCRIPT_Suspended); + SetScriptState (ACSThinker, def->script, DLevelScript::SCRIPT_Suspended); DPrintf (DMSG_SPAMMY, "Deferred suspend of %s\n", ScriptPresentation(def->script).GetChars()); break; case acsdefered_t::defterminate: - SetScriptState (def->script, DLevelScript::SCRIPT_PleaseRemove); + SetScriptState (ACSThinker, def->script, DLevelScript::SCRIPT_PleaseRemove); DPrintf (DMSG_SPAMMY, "Deferred terminate of %s\n", ScriptPresentation(def->script).GetChars()); break; } } - level.info->deferred.Clear(); + info->deferred.Clear(); } static void addDefered (level_info_t *i, acsdefered_t::EType type, int script, const int *args, int argcount, AActor *who) @@ -10362,7 +10383,7 @@ static void addDefered (level_info_t *i, acsdefered_t::EType type, int script, c } if (who != NULL && who->player != NULL) { - def.playernum = int(who->player - players); + def.playernum = who->Level->PlayerNum(who->player); } else { @@ -10374,14 +10395,14 @@ static void addDefered (level_info_t *i, acsdefered_t::EType type, int script, c EXTERN_CVAR (Bool, sv_cheats) -int P_StartScript (AActor *who, line_t *where, int script, const char *map, const int *args, int argcount, int flags) +int P_StartScript (FLevelLocals *Level, AActor *who, line_t *where, int script, const char *map, const int *args, int argcount, int flags) { - if (map == NULL || 0 == strnicmp (level.MapName, map, 8)) + if (map == NULL || 0 == strnicmp (Level->MapName, map, 8)) { FBehavior *module = NULL; const ScriptPtr *scriptdata; - if ((scriptdata = level.Behaviors.FindScript (script, module)) != NULL) + if ((scriptdata = Level->Behaviors.FindScript (script, module)) != NULL) { if ((flags & ACS_NET) && netgame && !sv_cheats) { @@ -10399,7 +10420,7 @@ int P_StartScript (AActor *who, line_t *where, int script, const char *map, cons return false; } } - DLevelScript *runningScript = P_GetScriptGoing (who, where, script, + DLevelScript *runningScript = P_GetScriptGoing (Level, who, where, script, scriptdata, module, args, argcount, flags); if (runningScript != NULL) { @@ -10413,7 +10434,7 @@ int P_StartScript (AActor *who, line_t *where, int script, const char *map, cons } else { - if (!(flags & ACS_NET) || (who && who->player == &players[consoleplayer])) + if (!(flags & ACS_NET) || (who && Level->isConsolePlayer(who->player->mo))) // The indirection is necessary here. { Printf("P_StartScript: Unknown %s\n", ScriptPresentation(script).GetChars()); } @@ -10429,20 +10450,20 @@ int P_StartScript (AActor *who, line_t *where, int script, const char *map, cons return false; } -void P_SuspendScript (int script, const char *map) +void P_SuspendScript (FLevelLocals *Level, int script, const char *map) { - if (strnicmp (level.MapName, map, 8)) + if (strnicmp (Level->MapName, map, 8)) addDefered (FindLevelInfo (map), acsdefered_t::defsuspend, script, NULL, 0, NULL); else - SetScriptState (script, DLevelScript::SCRIPT_Suspended); + SetScriptState (Level->ACSThinker, script, DLevelScript::SCRIPT_Suspended); } -void P_TerminateScript (int script, const char *map) +void P_TerminateScript (FLevelLocals *Level, int script, const char *map) { - if (strnicmp (level.MapName, map, 8)) + if (strnicmp (Level->MapName, map, 8)) addDefered (FindLevelInfo (map), acsdefered_t::defterminate, script, NULL, 0, NULL); else - SetScriptState (script, DLevelScript::SCRIPT_PleaseRemove); + SetScriptState (Level->ACSThinker, script, DLevelScript::SCRIPT_PleaseRemove); } FSerializer &Serialize(FSerializer &arc, const char *key, acsdefered_t &defer, acsdefered_t *def) @@ -10460,13 +10481,17 @@ FSerializer &Serialize(FSerializer &arc, const char *key, acsdefered_t &defer, a CCMD (scriptstat) { - if (level.ACSThinker == NULL) + for (auto Level : AllLevels()) { - Printf ("No scripts are running.\n"); - } - else - { - level.ACSThinker->DumpScriptStatus (); + Printf("Script status for %s", Level->MapName.GetChars()); + if (Level->ACSThinker == nullptr) + { + Printf("No scripts are running.\n"); + } + else + { + Level->ACSThinker->DumpScriptStatus(); + } } } @@ -10521,11 +10546,11 @@ void ACSProfileInfo::AddRun(unsigned int num_instr) } } -void ArrangeScriptProfiles(TArray &profiles) +void FBehaviorContainer::ArrangeScriptProfiles(TArray &profiles) { - for (unsigned int mod_num = 0; mod_num < level.Behaviors.StaticModules.Size(); ++mod_num) + for (unsigned int mod_num = 0; mod_num < StaticModules.Size(); ++mod_num) { - FBehavior *module = level.Behaviors.StaticModules[mod_num]; + FBehavior *module = StaticModules[mod_num]; ProfileCollector prof; prof.Module = module; for (int i = 0; i < module->NumScripts; ++i) @@ -10537,11 +10562,11 @@ void ArrangeScriptProfiles(TArray &profiles) } } -void ArrangeFunctionProfiles(TArray &profiles) +void FBehaviorContainer::ArrangeFunctionProfiles(TArray &profiles) { - for (unsigned int mod_num = 0; mod_num < level.Behaviors.StaticModules.Size(); ++mod_num) + for (unsigned int mod_num = 0; mod_num < StaticModules.Size(); ++mod_num) { - FBehavior *module = level.Behaviors.StaticModules[mod_num]; + FBehavior *module = StaticModules[mod_num]; ProfileCollector prof; prof.Module = module; for (int i = 0; i < module->NumFunctions; ++i) @@ -10679,7 +10704,7 @@ static void ShowProfileData(TArray &profiles, long ilimit, } } -CCMD(acsprofile) +void ACSProfile(FLevelLocals *Level, FCommandLine &argv) { static int (*sort_funcs[])(const void*, const void *) = { @@ -10692,14 +10717,15 @@ CCMD(acsprofile) static const char *sort_names[] = { "total", "min", "max", "avg", "runs" }; static const uint8_t sort_match_len[] = { 1, 2, 2, 1, 1 }; - TArray ScriptProfiles, FuncProfiles; - long limit = 10; + TArray ScriptProfiles, FuncProfiles; + long limit = 10; int (*sorter)(const void *, const void *) = sort_by_total_instr; assert(countof(sort_names) == countof(sort_match_len)); - ArrangeScriptProfiles(ScriptProfiles); - ArrangeFunctionProfiles(FuncProfiles); + Printf("ACS profile for %s\n", Level->MapName.GetChars()); + Level->Behaviors.ArrangeScriptProfiles(ScriptProfiles); + Level->Behaviors.ArrangeFunctionProfiles(FuncProfiles); if (argv.argc() > 1) { @@ -10750,6 +10776,14 @@ CCMD(acsprofile) ShowProfileData(FuncProfiles, limit, sorter, true); } +CCMD(acsprofile) +{ + for (auto Level : AllLevels()) + { + ACSProfile(Level, argv); + } +} + ADD_STAT(ACS) { return FStringf("ACS time: %f ms", ACSTime.TimeMS()); diff --git a/src/p_acs.h b/src/p_acs.h index f3c724353e..7c31068a03 100644 --- a/src/p_acs.h +++ b/src/p_acs.h @@ -37,6 +37,7 @@ #include "doomtype.h" #include "dthinker.h" +#include "doomerrors.h" #define LOCAL_SIZE 20 #define NUM_MAPVARS 128 @@ -349,7 +350,7 @@ class FBehavior public: FBehavior (); ~FBehavior (); - bool Init(int lumpnum, FileReader * fr = NULL, int len = 0); + bool Init(FLevelLocals *l, int lumpnum, FileReader * fr = NULL, int len = 0, int reallumpnum = -1); bool IsGood (); uint8_t *FindChunk (uint32_t id) const; @@ -377,7 +378,7 @@ public: const char *GetModuleName() const { return ModuleName; } ACSProfileInfo *GetFunctionProfileData(int index) { return index >= 0 && index < NumFunctions ? &FunctionProfileData[index] : NULL; } ACSProfileInfo *GetFunctionProfileData(ScriptFunction *func) { return GetFunctionProfileData((int)(func - (ScriptFunction *)Functions)); } - const char *LookupString (uint32_t index) const; + const char *LookupString (uint32_t index, bool forprint = false) const; BoundsCheckingArray MapVars; @@ -385,25 +386,28 @@ public: private: struct ArrayInfo; - ACSFormat Format; - - int LumpNum; + FLevelLocals *Level; uint8_t *Data; - int DataSize; uint8_t *Chunks; ScriptPtr *Scripts; - int NumScripts; ScriptFunction *Functions; ACSProfileInfo *FunctionProfileData; - int NumFunctions; ArrayInfo *ArrayStore; - int NumArrays; ArrayInfo **Arrays; + + ACSFormat Format; + int LumpNum; + int DataSize; + int NumScripts; + int NumFunctions; + int NumArrays; int NumTotalArrays; uint32_t StringTable; + uint32_t LibraryID; + bool ShouldLocalize; + int32_t MapVarStore[NUM_MAPVARS]; TArray Imports; - uint32_t LibraryID; char ModuleName[9]; TArray JumpPoints; @@ -420,16 +424,17 @@ private: void MarkMapVarStrings() const; void LockMapVarStrings(int levelnum) const; - friend void ArrangeScriptProfiles(TArray &profiles); - friend void ArrangeFunctionProfiles(TArray &profiles); friend struct FBehaviorContainer; }; struct FBehaviorContainer { + FLevelLocals *Level; TArray StaticModules; - FBehavior *LoadModule(int lumpnum, FileReader *fr = nullptr, int len = 0); + FBehaviorContainer(FLevelLocals *l) : Level(l) {} + + FBehavior *LoadModule(int lumpnum, FileReader *fr = nullptr, int len = 0, int reallumpnum = -1); void LoadDefaultModules(); void UnloadModules(); bool CheckAllGood(); @@ -440,9 +445,11 @@ struct FBehaviorContainer void UnlockLevelVarStrings(int levelnum); const ScriptPtr *FindScript(int script, FBehavior *&module); - const char *LookupString(uint32_t index); + const char *LookupString(uint32_t index, bool forprint = false); void StartTypedScripts(uint16_t type, AActor *activator, bool always, int arg1 = 0, bool runNow = false); void StopMyScripts(AActor *actor); + void ArrangeScriptProfiles(TArray &profiles); + void ArrangeFunctionProfiles(TArray &profiles); }; @@ -453,7 +460,8 @@ class DACSThinker : public DThinker DECLARE_CLASS(DACSThinker, DThinker) HAS_OBJECT_POINTERS public: - DACSThinker(); + static const int DEFAULT_STAT = STAT_SCRIPTS; + void Construct() {} ~DACSThinker(); void Serialize(FSerializer &arc); @@ -466,8 +474,8 @@ public: void StopScriptsFor(AActor *actor); private: - DLevelScript *LastScript; - DLevelScript *Scripts; // List of all running scripts + DLevelScript *LastScript = nullptr; + DLevelScript *Scripts = nullptr; // List of all running scripts friend class DLevelScript; friend class FBehavior; diff --git a/src/p_actionfunctions.cpp b/src/p_actionfunctions.cpp index 82895f135d..fbb97c7d07 100644 --- a/src/p_actionfunctions.cpp +++ b/src/p_actionfunctions.cpp @@ -70,9 +70,6 @@ #include "actorinlines.h" #include "types.h" -AActor *SingleActorFromTID(int tid, AActor *defactor); - - static FRandom pr_camissile ("CustomActorfire"); static FRandom pr_cabullet ("CustomBullet"); static FRandom pr_cwjump ("CustomWpJump"); @@ -298,7 +295,7 @@ DEFINE_ACTION_FUNCTION(AActor, GetZAt) double c = angle.Cos(); pos = mobj->Vec2Offset(pos.X * c + pos.Y * s, pos.X * s - pos.Y * c); } - sector_t *sec = P_PointInSector(pos); + sector_t *sec = self->Level->PointInSector(pos); if (sec) { @@ -871,7 +868,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_RadiusDamageSelf) // the player to indicate bad things happened. AActor *flash = NULL; if(flashtype != NULL) - flash = Spawn(flashtype, self->target->PosPlusZ(self->target->Height / 4), ALLOW_REPLACE); + flash = Spawn(self->Level, flashtype, self->target->PosPlusZ(self->target->Height / 4), ALLOW_REPLACE); int dmgFlags = 0; FName dmgType = NAME_BFGSplash; @@ -1297,8 +1294,8 @@ DEFINE_ACTION_FUNCTION(AActor, A_Print) PARAM_NAME (fontname); if (text[0] == '$') text = GStrings(&text[1]); - if (self->CheckLocalView (consoleplayer) || - (self->target != NULL && self->target->CheckLocalView (consoleplayer))) + if (self->CheckLocalView() || + (self->target != NULL && self->target->CheckLocalView())) { float saved = con_midtime; FFont *font = NULL; @@ -1361,7 +1358,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Log) PARAM_STRING_VAL(text); PARAM_BOOL(local); - if (local && !self->CheckLocalView(consoleplayer)) return 0; + if (local && !self->CheckLocalView()) return 0; if (text[0] == '$') text = GStrings(&text[1]); FString formatted = strbin1(text); @@ -1381,7 +1378,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_LogInt) PARAM_INT(num); PARAM_BOOL(local); - if (local && !self->CheckLocalView(consoleplayer)) return 0; + if (local && !self->CheckLocalView()) return 0; Printf("%d\n", num); return 0; } @@ -1398,7 +1395,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_LogFloat) PARAM_FLOAT(num); PARAM_BOOL(local); - if (local && !self->CheckLocalView(consoleplayer)) return 0; + if (local && !self->CheckLocalView()) return 0; IGNORE_FORMAT_PRE Printf("%H\n", num); IGNORE_FORMAT_POST @@ -1588,7 +1585,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_SpawnDebris) double xo = (pr_spawndebris() - 128) / 16.; double yo = (pr_spawndebris() - 128) / 16.; double zo = pr_spawndebris()*self->Height / 256 + self->GetBobOffset(); - mo = Spawn(debris, self->Vec3Offset(xo, yo, zo), ALLOW_REPLACE); + mo = Spawn(self->Level, debris, self->Vec3Offset(xo, yo, zo), ALLOW_REPLACE); if (mo) { if (transfer_translation) @@ -1672,7 +1669,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_SpawnParticle) acc.X = accelx * c + accely * s; acc.Y = accelx * s - accely * c; } - P_SpawnParticle(self->Vec3Offset(pos), vel, acc, color, startalpha, lifetime, size, fadestep, sizestep, flags); + P_SpawnParticle(self->Level, self->Vec3Offset(pos), vel, acc, color, startalpha, lifetime, size, fadestep, sizestep, flags); } return 0; } @@ -1687,18 +1684,20 @@ DEFINE_ACTION_FUNCTION(AActor, CheckIfSeen) { PARAM_SELF_PROLOGUE(AActor); + auto Level = self->Level; for (int i = 0; i < MAXPLAYERS; i++) { - if (playeringame[i]) + if (Level->PlayerInGame(i)) { + auto p = Level->Players[i]; // Always check sight from each player. - if (P_CheckSight(players[i].mo, self, SF_IGNOREVISIBILITY)) + if (P_CheckSight(p->mo, self, SF_IGNOREVISIBILITY)) { ACTION_RETURN_BOOL(false); } // If a player is viewing from a non-player, then check that too. - if (players[i].camera != NULL && players[i].camera->player == NULL && - P_CheckSight(players[i].camera, self, SF_IGNOREVISIBILITY)) + if (p->camera != nullptr && p->camera->player == NULL && + P_CheckSight(p->camera, self, SF_IGNOREVISIBILITY)) { ACTION_RETURN_BOOL(false); } @@ -1758,18 +1757,20 @@ DEFINE_ACTION_FUNCTION(AActor, CheckSightOrRange) PARAM_BOOL(twodi); range *= range; - for (int i = 0; i < MAXPLAYERS; ++i) + auto Level = self->Level; + for (int i = 0; i < MAXPLAYERS; i++) { - if (playeringame[i]) + if (Level->PlayerInGame(i)) { + auto p = Level->Players[i]; // Always check from each player. - if (DoCheckSightOrRange(self, players[i].mo, range, twodi, true)) + if (DoCheckSightOrRange(self, p->mo, range, twodi, true)) { ACTION_RETURN_BOOL(false); } // If a player is viewing from a non-player, check that too. - if (players[i].camera != NULL && players[i].camera->player == NULL && - DoCheckSightOrRange(self, players[i].camera, range, twodi, true)) + if (p->camera != nullptr && p->camera->player == nullptr && + DoCheckSightOrRange(self, p->camera, range, twodi, true)) { ACTION_RETURN_BOOL(false); } @@ -1786,18 +1787,20 @@ DEFINE_ACTION_FUNCTION(AActor, CheckRange) PARAM_BOOL(twodi); range *= range; - for (int i = 0; i < MAXPLAYERS; ++i) + auto Level = self->Level; + for (int i = 0; i < MAXPLAYERS; i++) { - if (playeringame[i]) + if (Level->PlayerInGame(i)) { + auto p = Level->Players[i]; // Always check from each player. - if (DoCheckSightOrRange(self, players[i].mo, range, twodi, false)) + if (DoCheckSightOrRange(self, p->mo, range, twodi, false)) { ACTION_RETURN_BOOL(false); } // If a player is viewing from a non-player, check that too. - if (players[i].camera != NULL && players[i].camera->player == NULL && - DoCheckSightOrRange(self, players[i].camera, range, twodi, false)) + if (p->camera != nullptr && p->camera->player == nullptr && + DoCheckSightOrRange(self, p->camera, range, twodi, false)) { ACTION_RETURN_BOOL(false); } @@ -1851,7 +1854,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_SetBlend) // if (color2.a == 0) // color2 = color; - Create(color.r/255.f, color.g/255.f, color.b/255.f, float(alpha), + self->Level->CreateThinker(color.r/255.f, color.g/255.f, color.b/255.f, float(alpha), color2.r/255.f, color2.g/255.f, color2.b/255.f, float(alpha2), float(tics)/TICRATE, self, true); return 0; @@ -1924,7 +1927,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Burst) double xo = (pr_burst() - 128) * self->radius / 128; double yo = (pr_burst() - 128) * self->radius / 128; double zo = (pr_burst() * self->Height / 255); - mo = Spawn(chunk, self->Vec3Offset(xo, yo, zo), ALLOW_REPLACE); + mo = Spawn(self->Level, chunk, self->Vec3Offset(xo, yo, zo), ALLOW_REPLACE); if (mo) { @@ -2025,7 +2028,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Respawn) } if (self->CountsAsKill()) { - level.total_monsters++; + self->Level->total_monsters++; } } else @@ -2305,7 +2308,7 @@ DEFINE_ACTION_FUNCTION(AActor, CheckLOF) range */ - sector_t *sec = P_PointInSector(pos); + sector_t *sec = self->Level->PointInSector(pos); if (range == 0) { @@ -2623,9 +2626,9 @@ DEFINE_ACTION_FUNCTION(AActor, A_ChangeCountFlags) PARAM_INT(item); PARAM_INT(secret); - if (self->CountsAsKill() && self->health > 0) --level.total_monsters; - if (self->flags & MF_COUNTITEM) --level.total_items; - if (self->flags5 & MF5_COUNTSECRET) --level.total_secrets; + if (self->CountsAsKill() && self->health > 0) --self->Level->total_monsters; + if (self->flags & MF_COUNTITEM) --self->Level->total_items; + if (self->flags5 & MF5_COUNTSECRET) --self->Level->total_secrets; if (kill != -1) { @@ -2644,9 +2647,9 @@ DEFINE_ACTION_FUNCTION(AActor, A_ChangeCountFlags) if (secret == 0) self->flags5 &= ~MF5_COUNTSECRET; else self->flags5 |= MF5_COUNTSECRET; } - if (self->CountsAsKill() && self->health > 0) ++level.total_monsters; - if (self->flags & MF_COUNTITEM) ++level.total_items; - if (self->flags5 & MF5_COUNTSECRET) ++level.total_secrets; + if (self->CountsAsKill() && self->health > 0) ++self->Level->total_monsters; + if (self->flags & MF_COUNTITEM) ++self->Level->total_items; + if (self->flags5 & MF5_COUNTSECRET) ++self->Level->total_secrets; return 0; } @@ -2677,7 +2680,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_RaiseChildren) PARAM_SELF_PROLOGUE(AActor); PARAM_INT(flags); - TThinkerIterator it; + auto it = self->Level->GetThinkerIterator(); AActor *mo; while ((mo = it.Next()) != NULL) @@ -2700,7 +2703,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_RaiseSiblings) PARAM_SELF_PROLOGUE(AActor); PARAM_INT(flags); - TThinkerIterator it; + auto it = self->Level->GetThinkerIterator(); AActor *mo; if (self->master != NULL) @@ -3052,7 +3055,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Teleport) } } - DSpotState *state = GetSpotState(&level, false); + DSpotState *state = GetSpotState(self->Level, false); if (state == NULL) { return numret; @@ -3115,7 +3118,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Teleport) P_SpawnTeleportFog(ref, prev, true, true); else { - fog1 = Spawn(fog_type, prev, ALLOW_REPLACE); + fog1 = Spawn(self->Level, fog_type, prev, ALLOW_REPLACE); if (fog1 != NULL) fog1->target = ref; } @@ -3126,7 +3129,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Teleport) P_SpawnTeleportFog(ref, ref->Pos(), false, true); else { - fog2 = Spawn(fog_type, ref->Pos(), ALLOW_REPLACE); + fog2 = Spawn(self->Level, fog_type, ref->Pos(), ALLOW_REPLACE); if (fog2 != NULL) fog2->target = ref; } @@ -3181,7 +3184,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Quake) PARAM_INT (tremrad); PARAM_SOUND (sound); - P_StartQuake(self, 0, intensity, duration, damrad, tremrad, sound); + P_StartQuake(self->Level, self, 0, intensity, duration, damrad, tremrad, sound); return 0; } @@ -3211,7 +3214,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_QuakeEx) PARAM_INT(highpoint); PARAM_FLOAT(rollIntensity); PARAM_FLOAT(rollWave); - P_StartQuakeXYZ(self, 0, intensityX, intensityY, intensityZ, duration, damrad, tremrad, sound, flags, mulWaveX, mulWaveY, mulWaveZ, falloff, highpoint, + P_StartQuakeXYZ(self->Level, self, 0, intensityX, intensityY, intensityZ, duration, damrad, tremrad, sound, flags, mulWaveX, mulWaveY, mulWaveZ, falloff, highpoint, rollIntensity, rollWave); return 0; } @@ -3301,8 +3304,8 @@ DEFINE_ACTION_FUNCTION(AActor, A_LineEffect) if ((oldjunk.special = special)) // Linedef type { oldjunk.tag = tag; // Sector tag for linedef - P_TranslateLineDef(&junk, &oldjunk); // Turn into native type - res = !!P_ExecuteSpecial(junk.special, NULL, self, false, junk.args[0], + self->Level->TranslateLineDef(&junk, &oldjunk); // Turn into native type + res = !!P_ExecuteSpecial(self->Level, junk.special, NULL, self, false, junk.args[0], junk.args[1], junk.args[2], junk.args[3], junk.args[4]); if (res && !(junk.flags & ML_REPEAT_SPECIAL)) // If only once, self->flags6 |= MF6_LINEDONE; // no more for this thing @@ -3390,7 +3393,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_WolfAttack) || (self->target->flags2 & (MF2_INVULNERABLE|MF2_DORMANT))); if (flags & WAF_USEPUFF && pufftype) { - AActor *dpuff = GetDefaultByType(pufftype->GetReplacement()); + AActor *dpuff = GetDefaultByType(pufftype->GetReplacement(self->Level)); mod = dpuff->DamageType; if (dpuff->flags2 & MF2_THRUGHOST && self->target->flags3 & MF3_GHOST) @@ -3457,7 +3460,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Warp) if ((flags & WARPF_USETID)) { - reference = SingleActorFromTID(destination_selector, self); + reference = self->Level->SingleActorFromTID(destination_selector, self); } else { @@ -3654,7 +3657,7 @@ static bool DoRadiusGive(AActor *self, AActor *thing, PClassActor *item, int amo if ((flags & RGF_NOSIGHT) || P_CheckSight(thing, self, SF_IGNOREVISIBILITY | SF_IGNOREWATERBOUNDARY)) { // OK to give; target is in direct path, or the monster doesn't care about it being in line of sight. - auto gift = Spawn(item); + auto gift = Spawn(self->Level, item); if (gift->IsKindOf(NAME_Health)) { gift->IntVar(NAME_Amount) *= amount; @@ -3705,7 +3708,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_RadiusGive) int given = 0; if (flags & RGF_MISSILES) { - TThinkerIterator it; + auto it = self->Level->GetThinkerIterator(); while ((thing = it.Next()) && ((unlimited) || (given < limit))) { given += DoRadiusGive(self, thing, item, amount, distance, flags, filter, species, mindist); @@ -3715,7 +3718,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_RadiusGive) { FPortalGroupArray check(FPortalGroupArray::PGA_Full3d); double mid = self->Center(); - FMultiBlockThingsIterator it(check, self->X(), self->Y(), mid-distance, mid+distance, distance, false, self->Sector); + FMultiBlockThingsIterator it(check, self->Level, self->X(), self->Y(), mid-distance, mid+distance, distance, false, self->Sector); FMultiBlockThingsIterator::CheckResult cres; while ((it.Next(&cres)) && ((unlimited) || (given < limit))) @@ -3934,7 +3937,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_DamageChildren) AActor *source = COPY_AAPTR(self, src); AActor *inflictor = COPY_AAPTR(self, inflict); - TThinkerIterator it; + auto it = self->Level->GetThinkerIterator(); AActor *mo; while ( (mo = it.Next()) ) @@ -3964,7 +3967,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_DamageSiblings) AActor *source = COPY_AAPTR(self, src); AActor *inflictor = COPY_AAPTR(self, inflict); - TThinkerIterator it; + auto it = self->Level->GetThinkerIterator(); AActor *mo; if (self->master != NULL) @@ -4115,7 +4118,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_KillChildren) AActor *source = COPY_AAPTR(self, src); AActor *inflictor = COPY_AAPTR(self, inflict); - TThinkerIterator it; + auto it = self->Level->GetThinkerIterator(); AActor *mo; while ( (mo = it.Next()) ) @@ -4146,7 +4149,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_KillSiblings) AActor *source = COPY_AAPTR(self, src); AActor *inflictor = COPY_AAPTR(self, inflict); - TThinkerIterator it; + auto it = self->Level->GetThinkerIterator(); AActor *mo; if (self->master != NULL) @@ -4274,7 +4277,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_RemoveChildren) PARAM_CLASS(filter, AActor); PARAM_NAME(species); - TThinkerIterator it; + auto it = self->Level->GetThinkerIterator(); AActor *mo; while ((mo = it.Next()) != NULL) @@ -4300,7 +4303,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_RemoveSiblings) PARAM_CLASS(filter, AActor); PARAM_NAME(species); - TThinkerIterator it; + auto it = self->Level->GetThinkerIterator(); AActor *mo; if (self->master != NULL) @@ -4841,7 +4844,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_CheckTerrain) } else if (sec->special == Scroll_StrifeCurrent) { - int anglespeed = tagManager.GetFirstSectorTag(sec) - 100; + int anglespeed = self->Level->GetFirstSectorTag(sec) - 100; double speed = (anglespeed % 10) / 16.; DAngle an = (anglespeed / 10) * (360 / 8.); self->Thrust(an, speed); @@ -4922,7 +4925,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_SetMugshotState) { PARAM_SELF_PROLOGUE(AActor); PARAM_STRING(name); - if (self->CheckLocalView(consoleplayer)) + if (self->CheckLocalView()) StatusBar->SetMugShotState(name); return 0; } diff --git a/src/p_conversation.cpp b/src/p_conversation.cpp index 5bb9dec505..6ae26d308f 100644 --- a/src/p_conversation.cpp +++ b/src/p_conversation.cpp @@ -55,6 +55,7 @@ #include "menu/menu.h" #include "g_levellocals.h" #include "vm.h" +#include "v_video.h" #include "actorinlines.h" // The conversations as they exist inside a SCRIPTxx lump. @@ -96,28 +97,20 @@ struct TeaserSpeech static FRandom pr_randomspeech("RandomSpeech"); -TArray StrifeDialogues; - -typedef TMap FDialogueIDMap; // maps dialogue IDs to dialogue array index (for ACS) -typedef TMap FDialogueMap; // maps actor class names to dialogue array index - -FClassMap StrifeTypes; -static FDialogueIDMap DialogueRoots; -static FDialogueMap ClassRoots; static int ConversationMenuY; -static int ConversationPauseTic; +// These two should be moved to player_t... +static FStrifeDialogueNode *PrevNode; static int StaticLastReply; -static bool LoadScriptFile(int lumpnum, FileReader &lump, int numnodes, bool include, int type); -static FStrifeDialogueNode *ReadRetailNode (FileReader &lump, uint32_t &prevSpeakerType); -static FStrifeDialogueNode *ReadTeaserNode (FileReader &lump, uint32_t &prevSpeakerType); -static void ParseReplies (FStrifeDialogueReply **replyptr, Response *responses); +static bool LoadScriptFile(FLevelLocals *Level, const char *name, int lumpnum, FileReader &lump, int numnodes, bool include, int type); +static FStrifeDialogueNode *ReadRetailNode (FLevelLocals *Level, const char *name, FileReader &lump, uint32_t &prevSpeakerType); +static FStrifeDialogueNode *ReadTeaserNode (FLevelLocals *Level, const char *name, FileReader &lump, uint32_t &prevSpeakerType); +static void ParseReplies (const char *name, int pos, FStrifeDialogueReply **replyptr, Response *responses); static bool DrawConversationMenu (); static void PickConversationReply (int replyindex); static void TerminalResponse (const char *str); -static FStrifeDialogueNode *PrevNode; //============================================================================ // @@ -127,17 +120,7 @@ static FStrifeDialogueNode *PrevNode; // //============================================================================ -void SetStrifeType(int convid, PClassActor *Class) -{ - StrifeTypes[convid] = Class; -} - -void ClearStrifeTypes() -{ - StrifeTypes.Clear(); -} - -void SetConversation(int convid, PClassActor *Class, int dlgindex) +void FLevelLocals::SetConversation(int convid, PClassActor *Class, int dlgindex) { if (convid != -1) { @@ -156,14 +139,14 @@ PClassActor *GetStrifeType (int typenum) else return *ptype; } -int GetConversation(int conv_id) +int FLevelLocals::GetConversation(int conv_id) { int *pindex = DialogueRoots.CheckKey(conv_id); if (pindex == NULL) return -1; else return *pindex; } -int GetConversation(FName classname) +int FLevelLocals::GetConversation(FName classname) { int *pindex = ClassRoots.CheckKey(classname); if (pindex == NULL) return -1; @@ -178,12 +161,11 @@ int GetConversation(FName classname) // //============================================================================ -void P_LoadStrifeConversations (MapData *map, const char *mapname) +void P_LoadStrifeConversations (FLevelLocals *Level, MapData *map, const char *mapname) { - P_FreeStrifeConversations (); if (map->Size(ML_CONVERSATION) > 0) { - LoadScriptFile (map->lumpnum, map->Reader(ML_CONVERSATION), map->Size(ML_CONVERSATION), false, 0); + LoadScriptFile (Level, nullptr, map->lumpnum, map->Reader(ML_CONVERSATION), map->Size(ML_CONVERSATION), false, 0); } else { @@ -192,8 +174,8 @@ void P_LoadStrifeConversations (MapData *map, const char *mapname) char scriptname_b[9] = { 'S','C','R','I','P','T',mapname[3],mapname[4],0 }; char scriptname_t[9] = { 'D','I','A','L','O','G',mapname[3],mapname[4],0 }; - if ( LoadScriptFile(scriptname_t, false, 2) - || LoadScriptFile(scriptname_b, false, 1)) + if ( LoadScriptFile(Level, scriptname_t, false, 2) + || LoadScriptFile(Level, scriptname_b, false, 1)) { return; } @@ -201,13 +183,13 @@ void P_LoadStrifeConversations (MapData *map, const char *mapname) if (gameinfo.Dialogue.IsNotEmpty()) { - if (LoadScriptFile(gameinfo.Dialogue, false, 0)) + if (LoadScriptFile(Level, gameinfo.Dialogue, false, 0)) { return; } } - LoadScriptFile("SCRIPT00", false, 1); + LoadScriptFile(Level, "SCRIPT00", false, 1); } } @@ -219,7 +201,7 @@ void P_LoadStrifeConversations (MapData *map, const char *mapname) // //============================================================================ -bool LoadScriptFile (const char *name, bool include, int type) +bool LoadScriptFile (FLevelLocals *Level, const char *name, bool include, int type) { int lumpnum = Wads.CheckNumForName (name); const bool found = lumpnum >= 0 @@ -236,11 +218,16 @@ bool LoadScriptFile (const char *name, bool include, int type) } FileReader lump = Wads.ReopenLumpReader (lumpnum); - bool res = LoadScriptFile(lumpnum, lump, Wads.LumpLength(lumpnum), include, type); + auto fn = Wads.GetLumpFile(lumpnum); + auto wadname = Wads.GetWadName(fn); + if (stricmp(wadname, "STRIFE0.WAD") && stricmp(wadname, "STRIFE1.WAD") && stricmp(wadname, "SVE.WAD")) name = nullptr; // Only localize IWAD content. + if (name && !stricmp(name, "SCRIPT00")) name = nullptr; // This only contains random string references which already use the string table. + + bool res = LoadScriptFile(Level, name, lumpnum, lump, Wads.LumpLength(lumpnum), include, type); return res; } -static bool LoadScriptFile(int lumpnum, FileReader &lump, int numnodes, bool include, int type) +static bool LoadScriptFile(FLevelLocals *Level, const char *name, int lumpnum, FileReader &lump, int numnodes, bool include, int type) { int i; uint32_t prevSpeakerType; @@ -261,13 +248,13 @@ static bool LoadScriptFile(int lumpnum, FileReader &lump, int numnodes, bool inc if (!isbinary) { - P_ParseUSDF(lumpnum, lump, numnodes); + P_ParseUSDF(Level, lumpnum, lump, numnodes); } else { if (!include) { - LoadScriptFile("SCRIPT00", true, 1); + LoadScriptFile(Level, "SCRIPT00", true, 1); } if (!(gameinfo.flags & GI_SHAREWARE)) { @@ -297,13 +284,13 @@ static bool LoadScriptFile(int lumpnum, FileReader &lump, int numnodes, bool inc { if (!(gameinfo.flags & GI_SHAREWARE)) { - node = ReadRetailNode (lump, prevSpeakerType); + node = ReadRetailNode (Level, name, lump, prevSpeakerType); } else { - node = ReadTeaserNode (lump, prevSpeakerType); + node = ReadTeaserNode (Level, name, lump, prevSpeakerType); } - node->ThisNodeNum = StrifeDialogues.Push(node); + node->ThisNodeNum = Level->StrifeDialogues.Push(node); } } return true; @@ -317,7 +304,17 @@ static bool LoadScriptFile(int lumpnum, FileReader &lump, int numnodes, bool inc // //============================================================================ -static FStrifeDialogueNode *ReadRetailNode (FileReader &lump, uint32_t &prevSpeakerType) +static FString TokenFromString(const char *speech) +{ + FString token = speech; + token.ToUpper(); + token.ReplaceChars(".,-+!?'", ' '); + token.Substitute(" ", ""); + token.Truncate(5); + return token; +} + +static FStrifeDialogueNode *ReadRetailNode (FLevelLocals *Level, const char *name, FileReader &lump, uint32_t &prevSpeakerType) { FStrifeDialogueNode *node; Speech speech; @@ -327,6 +324,7 @@ static FStrifeDialogueNode *ReadRetailNode (FileReader &lump, uint32_t &prevSpea node = new FStrifeDialogueNode; + auto pos = lump.Tell(); lump.Read (&speech, sizeof(speech)); // Byte swap all the ints in the original data @@ -343,14 +341,23 @@ static FStrifeDialogueNode *ReadRetailNode (FileReader &lump, uint32_t &prevSpea { if (type != NULL) { - ClassRoots[type->TypeName] = StrifeDialogues.Size(); + Level->ClassRoots[type->TypeName] = Level->StrifeDialogues.Size(); } - DialogueRoots[speech.SpeakerType] = StrifeDialogues.Size(); + Level->DialogueRoots[speech.SpeakerType] = Level->StrifeDialogues.Size(); prevSpeakerType = speech.SpeakerType; } // Convert the rest of the data to our own internal format. - node->Dialogue = speech.Dialogue; + + if (name) + { + FStringf label("$TXT_DLG_%s_d%d_%s", name, int(pos), TokenFromString(speech.Dialogue)); + node->Dialogue = label; + } + else + { + node->Dialogue = speech.Dialogue; + } // The speaker's portrait, if any. speech.Dialogue[0] = 0; //speech.Backdrop[8] = 0; @@ -380,7 +387,7 @@ static FStrifeDialogueNode *ReadRetailNode (FileReader &lump, uint32_t &prevSpea node->ItemCheckNode = speech.Link; node->Children = NULL; - ParseReplies (&node->Children, &speech.Responses[0]); + ParseReplies (name, int(pos), &node->Children, &speech.Responses[0]); return node; } @@ -393,7 +400,7 @@ static FStrifeDialogueNode *ReadRetailNode (FileReader &lump, uint32_t &prevSpea // //============================================================================ -static FStrifeDialogueNode *ReadTeaserNode (FileReader &lump, uint32_t &prevSpeakerType) +static FStrifeDialogueNode *ReadTeaserNode (FLevelLocals *Level, const char *name, FileReader &lump, uint32_t &prevSpeakerType) { FStrifeDialogueNode *node; TeaserSpeech speech; @@ -403,6 +410,7 @@ static FStrifeDialogueNode *ReadTeaserNode (FileReader &lump, uint32_t &prevSpea node = new FStrifeDialogueNode; + auto pos = lump.Tell() * 1516 / 1488; lump.Read (&speech, sizeof(speech)); // Byte swap all the ints in the original data @@ -418,14 +426,22 @@ static FStrifeDialogueNode *ReadTeaserNode (FileReader &lump, uint32_t &prevSpea { if (type != NULL) { - ClassRoots[type->TypeName] = StrifeDialogues.Size(); + Level->ClassRoots[type->TypeName] = Level->StrifeDialogues.Size(); } - DialogueRoots[speech.SpeakerType] = StrifeDialogues.Size(); + Level->DialogueRoots[speech.SpeakerType] = Level->StrifeDialogues.Size(); prevSpeakerType = speech.SpeakerType; } // Convert the rest of the data to our own internal format. - node->Dialogue = speech.Dialogue; + if (name) + { + FStringf label("$TXT_DLG_%s_d%d_%s", name, pos, TokenFromString(speech.Dialogue)); + node->Dialogue = label; + } + else + { + node->Dialogue = speech.Dialogue; + } // The Teaser version doesn't have portraits. node->Backdrop = ""; @@ -458,7 +474,7 @@ static FStrifeDialogueNode *ReadTeaserNode (FileReader &lump, uint32_t &prevSpea node->ItemCheckNode = 0; node->Children = NULL; - ParseReplies (&node->Children, &speech.Responses[0]); + ParseReplies (name, int(pos), &node->Children, &speech.Responses[0]); return node; } @@ -473,7 +489,7 @@ static FStrifeDialogueNode *ReadTeaserNode (FileReader &lump, uint32_t &prevSpea // //============================================================================ -static void ParseReplies (FStrifeDialogueReply **replyptr, Response *responses) +static void ParseReplies (const char *name, int pos, FStrifeDialogueReply **replyptr, Response *responses) { FStrifeDialogueReply *reply; int j, k; @@ -527,24 +543,52 @@ static void ParseReplies (FStrifeDialogueReply **replyptr, Response *responses) reply->ItemCheckRequire.Clear(); reply->ItemCheckExclude.Clear(); + if (name) + { + FStringf label("$TXT_RPLY%d_%s_d%d_%s", j, name, pos, TokenFromString(rsp->Reply)); + reply->Reply = label; + } + else + { + reply->Reply = rsp->Reply; + } + + // If the first item check has a positive amount required, then // add that to the reply string. Otherwise, use the reply as-is. - reply->Reply = rsp->Reply; reply->NeedsGold = (rsp->Count[0] > 0); // QuickYes messages are shown when you meet the item checks. // QuickNo messages are shown when you don't. - if (rsp->Yes[0] == '_' && rsp->Yes[1] == 0) + // Note that empty nodes contain a '_' in retail Strife, a '.' in the teasers and an empty string in SVE. + if (((rsp->Yes[0] == '_' || rsp->Yes[0] == '.') && rsp->Yes[1] == 0) || rsp->Yes[0] == 0) { reply->QuickYes = ""; } else { - reply->QuickYes = rsp->Yes; + if (name) + { + FStringf label("$TXT_RYES%d_%s_d%d_%s", j, name, pos, TokenFromString(rsp->Yes)); + reply->QuickYes = label; + } + else + { + reply->QuickYes = rsp->Yes; + } } if (reply->ItemCheck[0].Item != 0) { - reply->QuickNo = rsp->No; + if (name && strncmp(rsp->No, "NO. ", 4)) // All 'no' nodes starting with 'NO.' won't ever be shown and they all contain broken text. + { + FStringf label("$TXT_RNO%d_%s_d%d_%s", j, name, pos, TokenFromString(rsp->No)); + reply->QuickNo = label; + } + else + { + reply->QuickNo = rsp->No; + } + } else { @@ -581,7 +625,7 @@ FStrifeDialogueNode::~FStrifeDialogueNode () // //============================================================================ -static int FindNode (const FStrifeDialogueNode *node) +int FLevelLocals::FindNode (const FStrifeDialogueNode *node) { int rootnode = 0; @@ -725,16 +769,6 @@ DEFINE_ACTION_FUNCTION(DConversationMenu, SendConversationReply) void P_FreeStrifeConversations () { - FStrifeDialogueNode *node; - - while (StrifeDialogues.Pop (node)) - { - delete node; - } - - DialogueRoots.Clear(); - ClassRoots.Clear(); - PrevNode = NULL; if (CurrentMenu != NULL && CurrentMenu->IsKindOf("ConversationMenu")) { @@ -756,16 +790,17 @@ void P_StartConversation (AActor *npc, AActor *pc, bool facetalker, bool saveang int i; // Make sure this is actually a player. - if (pc->player == NULL) return; + if (pc == nullptr || pc->player == nullptr || npc == nullptr || !pc->Level->isPrimaryLevel()) return; + auto Level = pc->Level; // [CW] If an NPC is talking to a PC already, then don't let // anyone else talk to the NPC. for (i = 0; i < MAXPLAYERS; i++) { - if (!playeringame[i] || pc->player == &players[i]) + if (!Level->PlayerInGame(i) || pc->player == Level->Players[i]) continue; - if (npc == players[i].ConversationNPC) + if (npc == Level->Players[i]->ConversationNPC) return; } @@ -779,7 +814,7 @@ void P_StartConversation (AActor *npc, AActor *pc, bool facetalker, bool saveang FStrifeDialogueNode *CurNode = npc->Conversation; - if (pc->player == &players[consoleplayer]) + if (pc->player == Level->GetConsolePlayer()) { S_Sound (CHAN_VOICE | CHAN_UI, gameinfo.chatSound, 1, ATTN_NONE); } @@ -818,7 +853,7 @@ void P_StartConversation (AActor *npc, AActor *pc, bool facetalker, bool saveang if (jump && CurNode->ItemCheckNode > 0) { int root = pc->player->ConversationNPC->ConversationRoot; - CurNode = StrifeDialogues[root + CurNode->ItemCheckNode - 1]; + CurNode = Level->StrifeDialogues[root + CurNode->ItemCheckNode - 1]; } else { @@ -827,7 +862,7 @@ void P_StartConversation (AActor *npc, AActor *pc, bool facetalker, bool saveang } // The rest is only done when the conversation is actually displayed. - if (pc->player == &players[consoleplayer]) + if (pc->player == Level->GetConsolePlayer()) { if (CurNode->SpeakerVoice != 0) { @@ -904,14 +939,14 @@ static void HandleReply(player_t *player, bool isconsole, int nodenum, int reply AActor *npc; bool takestuff; int i; - - if (player->ConversationNPC == NULL || (unsigned)nodenum >= StrifeDialogues.Size()) + auto Level = player->mo->Level; + if (player->ConversationNPC == nullptr || (unsigned)nodenum >= Level->StrifeDialogues.Size()) { return; } // Find the reply. - node = StrifeDialogues[nodenum]; + node = Level->StrifeDialogues[nodenum]; for (i = 0, reply = node->Children; reply != NULL && i != replynum; ++i, reply = reply->Next) { } npc = player->ConversationNPC; @@ -961,7 +996,7 @@ static void HandleReply(player_t *player, bool isconsole, int nodenum, int reply if (takestuff) { - auto item = Spawn(reply->GiveType); + auto item = Spawn(player->mo->Level, reply->GiveType); // Items given here should not count as items! item->ClearCounters(); if (item->GetClass()->TypeName == NAME_FlameThrower) @@ -993,7 +1028,7 @@ static void HandleReply(player_t *player, bool isconsole, int nodenum, int reply if (reply->ActionSpecial != 0) { - takestuff |= !!P_ExecuteSpecial(reply->ActionSpecial, NULL, player->mo, false, + takestuff |= !!P_ExecuteSpecial(player->mo->Level, reply->ActionSpecial, NULL, player->mo, false, reply->Args[0], reply->Args[1], reply->Args[2], reply->Args[3], reply->Args[4]); } @@ -1041,9 +1076,9 @@ static void HandleReply(player_t *player, bool isconsole, int nodenum, int reply const bool isNegative = reply->NextNode < 0; const unsigned next = (unsigned)(rootnode + (isNegative ? -1 : 1) * reply->NextNode - 1); - if (next < StrifeDialogues.Size()) + if (next < Level->StrifeDialogues.Size()) { - npc->Conversation = StrifeDialogues[next]; + npc->Conversation = Level->StrifeDialogues[next]; if (isNegative) { @@ -1081,7 +1116,7 @@ static void HandleReply(player_t *player, bool isconsole, int nodenum, int reply if (isconsole) { - I_SetMusicVolume (level.MusicVolume); + I_SetMusicVolume (player->mo->Level->MusicVolume); } } diff --git a/src/p_conversation.h b/src/p_conversation.h index 2a516e06eb..63e7707d92 100644 --- a/src/p_conversation.h +++ b/src/p_conversation.h @@ -57,19 +57,13 @@ struct FStrifeDialogueReply bool NeedsGold = false; }; -extern TArray StrifeDialogues; - struct MapData; -void SetStrifeType(int convid, PClassActor *Class); -void SetConversation(int convid, PClassActor *Class, int dlgindex); PClassActor *GetStrifeType (int typenum); -int GetConversation(int conv_id); -int GetConversation(FName classname); -bool LoadScriptFile (const char *name, bool include, int type = 0); +bool LoadScriptFile (FLevelLocals *Level, const char *name, bool include, int type = 0); -void P_LoadStrifeConversations (MapData *map, const char *mapname); +void P_LoadStrifeConversations (FLevelLocals *Level, MapData *map, const char *mapname); void P_FreeStrifeConversations (); void P_StartConversation (AActor *npc, AActor *pc, bool facetalker, bool saveangle); @@ -78,7 +72,7 @@ void P_ResumeConversation (); void P_ConversationCommand (int netcode, int player, uint8_t **stream); class FileReader; -bool P_ParseUSDF(int lumpnum, FileReader &lump, int lumplen); +bool P_ParseUSDF(FLevelLocals *Level, int lumpnum, FileReader &lump, int lumplen); #endif diff --git a/src/p_destructible.cpp b/src/p_destructible.cpp index 56ab0ea5da..126ddbd422 100755 --- a/src/p_destructible.cpp +++ b/src/p_destructible.cpp @@ -37,7 +37,6 @@ #include "actor.h" #include "p_trace.h" #include "p_lnspec.h" -#include "r_sky.h" #include "p_local.h" #include "p_maputl.h" #include "c_cvars.h" @@ -75,9 +74,9 @@ void P_SetHealthGroupHealth(FHealthGroup* grp, int health) } } -void P_SetHealthGroupHealth(int id, int health) +void P_SetHealthGroupHealth(FLevelLocals *Level, int id, int health) { - P_SetHealthGroupHealth(P_GetHealthGroup(id), health); + P_SetHealthGroupHealth(P_GetHealthGroup(Level, id), health); } void P_DamageHealthGroup(FHealthGroup* grp, void* object, AActor* source, int damage, FName damagetype, int side, int part, DVector3 position, bool isradius) @@ -125,7 +124,7 @@ void P_DamageLinedef(line_t* line, AActor* source, int damage, FName damagetype, if (dogroups) { - damage = E_WorldLineDamaged(line, source, damage, damagetype, side, position, isradius); + damage = line->GetLevel()->localEventManager->WorldLineDamaged(line, source, damage, damagetype, side, position, isradius); if (damage < 0) damage = 0; } @@ -133,6 +132,7 @@ void P_DamageLinedef(line_t* line, AActor* source, int damage, FName damagetype, line->health -= damage; if (line->health < 0) line->health = 0; + auto Level = line->GetLevel(); // callbacks here // first off, call special if needed @@ -145,7 +145,7 @@ void P_DamageLinedef(line_t* line, AActor* source, int damage, FName damagetype, if (dogroups && line->healthgroup) { - FHealthGroup* grp = P_GetHealthGroup(line->healthgroup); + FHealthGroup* grp = P_GetHealthGroup(Level, line->healthgroup); if (grp) grp->health = line->health; P_DamageHealthGroup(grp, line, source, damage, damagetype, side, -1, position, isradius); @@ -160,12 +160,13 @@ void P_DamageSector(sector_t* sector, AActor* source, int damage, FName damagety if (dogroups) { - damage = E_WorldSectorDamaged(sector, source, damage, damagetype, part, position, isradius); + damage = sector->Level->localEventManager->WorldSectorDamaged(sector, source, damage, damagetype, part, position, isradius); if (damage < 0) damage = 0; } if (!damage) return; + auto Level = sector->Level; int* sectorhealth; int group; int dmg; @@ -209,7 +210,7 @@ void P_DamageSector(sector_t* sector, AActor* source, int damage, FName damagety if (dogroups && group) { - FHealthGroup* grp = P_GetHealthGroup(group); + FHealthGroup* grp = P_GetHealthGroup(Level, group); if (grp) grp->health = newhealth; P_DamageHealthGroup(grp, sector, source, damage, damagetype, 0, part, position, isradius); @@ -225,35 +226,36 @@ void P_DamageSector(sector_t* sector, AActor* source, int damage, FName damagety // //=========================================================================== -FHealthGroup* P_GetHealthGroup(int id) +FHealthGroup* P_GetHealthGroup(FLevelLocals *Level, int id) { - FHealthGroup* grp = level.healthGroups.CheckKey(id); + FHealthGroup* grp = Level->healthGroups.CheckKey(id); return grp; } -FHealthGroup* P_GetHealthGroupOrNew(int id, int health) +FHealthGroup* P_GetHealthGroupOrNew(FLevelLocals *Level, int id, int health) { - FHealthGroup* grp = level.healthGroups.CheckKey(id); + FHealthGroup* grp = Level->healthGroups.CheckKey(id); if (!grp) { FHealthGroup newgrp; newgrp.id = id; newgrp.health = health; - grp = &(level.healthGroups.Insert(id, newgrp)); + grp = &(Level->healthGroups.Insert(id, newgrp)); } return grp; } -void P_InitHealthGroups() +void P_InitHealthGroups(FLevelLocals *Level) { - level.healthGroups.Clear(); + Level->healthGroups.Clear(); TArray groupsInError; - for (unsigned i = 0; i < level.lines.Size(); i++) + + for (unsigned i = 0; i < Level->lines.Size(); i++) { - line_t* lline = &level.lines[i]; + line_t* lline = &Level->lines[i]; if (lline->healthgroup > 0) { - FHealthGroup* grp = P_GetHealthGroupOrNew(lline->healthgroup, lline->health); + FHealthGroup* grp = P_GetHealthGroupOrNew(Level, lline->healthgroup, lline->health); if (grp->health != lline->health) { Printf(TEXTCOLOR_RED "Warning: line %d in health group %d has different starting health (line health = %d, group health = %d)\n", i, lline->healthgroup, lline->health, grp->health); @@ -264,12 +266,12 @@ void P_InitHealthGroups() grp->lines.Push(lline); } } - for (unsigned i = 0; i < level.sectors.Size(); i++) + for (unsigned i = 0; i < Level->sectors.Size(); i++) { - sector_t* lsector = &level.sectors[i]; + sector_t* lsector = &Level->sectors[i]; if (lsector->healthceilinggroup > 0) { - FHealthGroup* grp = P_GetHealthGroupOrNew(lsector->healthceilinggroup, lsector->healthceiling); + FHealthGroup* grp = P_GetHealthGroupOrNew(Level, lsector->healthceilinggroup, lsector->healthceiling); if (grp->health != lsector->healthceiling) { Printf(TEXTCOLOR_RED "Warning: sector ceiling %d in health group %d has different starting health (ceiling health = %d, group health = %d)\n", i, lsector->healthceilinggroup, lsector->healthceiling, grp->health); @@ -281,7 +283,7 @@ void P_InitHealthGroups() } if (lsector->healthfloorgroup > 0) { - FHealthGroup* grp = P_GetHealthGroupOrNew(lsector->healthfloorgroup, lsector->healthfloor); + FHealthGroup* grp = P_GetHealthGroupOrNew(Level, lsector->healthfloorgroup, lsector->healthfloor); if (grp->health != lsector->healthfloor) { Printf(TEXTCOLOR_RED "Warning: sector floor %d in health group %d has different starting health (floor health = %d, group health = %d)\n", i, lsector->healthfloorgroup, lsector->healthfloor, grp->health); @@ -295,7 +297,7 @@ void P_InitHealthGroups() } for (unsigned i = 0; i < groupsInError.Size(); i++) { - FHealthGroup* grp = P_GetHealthGroup(groupsInError[i]); + FHealthGroup* grp = P_GetHealthGroup(Level, groupsInError[i]); Printf(TEXTCOLOR_GOLD "Health group %d is using the highest found health value of %d", groupsInError[i], grp->health); } } @@ -520,7 +522,7 @@ void P_GeometryRadiusAttack(AActor* bombspot, AActor* bombsource, int bombdamage // enumerate all lines around FBoundingBox bombbox(bombspot->X(), bombspot->Y(), bombdistance); - FBlockLinesIterator it(bombbox); + FBlockLinesIterator it(bombspot->Level, bombbox); line_t* ln; int vc = validcount; TArray lines; @@ -840,7 +842,7 @@ FSerializer &Serialize(FSerializer &arc, const char *key, FHealthGroup& g, FHeal return arc; } -void P_SerializeHealthGroups(FSerializer& arc) +void P_SerializeHealthGroups(FLevelLocals *Level, FSerializer& arc) { // todo : stuff if (arc.BeginArray("healthgroups")) @@ -853,7 +855,7 @@ void P_SerializeHealthGroups(FSerializer& arc) { FHealthGroup grp; arc(nullptr, grp); - FHealthGroup* existinggrp = P_GetHealthGroup(grp.id); + FHealthGroup* existinggrp = P_GetHealthGroup(Level, grp.id); if (!existinggrp) continue; existinggrp->health = grp.health; @@ -861,7 +863,7 @@ void P_SerializeHealthGroups(FSerializer& arc) } else { - TMap::ConstIterator it(level.healthGroups); + TMap::ConstIterator it(Level->healthGroups); TMap::ConstPair* pair; while (it.NextPair(pair)) { @@ -883,11 +885,11 @@ DEFINE_FIELD_X(HealthGroup, FHealthGroup, health) DEFINE_FIELD_X(HealthGroup, FHealthGroup, sectors) DEFINE_FIELD_X(HealthGroup, FHealthGroup, lines) -DEFINE_ACTION_FUNCTION(FHealthGroup, Find) +DEFINE_ACTION_FUNCTION(FLevelLocals, FindHealthGroup) { - PARAM_PROLOGUE; + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_INT(id); - FHealthGroup* grp = P_GetHealthGroup(id); + FHealthGroup* grp = P_GetHealthGroup(self, id); ACTION_RETURN_POINTER(grp); } @@ -993,7 +995,7 @@ DEFINE_ACTION_FUNCTION(_Line, GetHealth) PARAM_SELF_STRUCT_PROLOGUE(line_t); if (self->healthgroup) { - FHealthGroup* grp = P_GetHealthGroup(self->healthgroup); + FHealthGroup* grp = P_GetHealthGroup(self->GetLevel(), self->healthgroup); if (grp) ACTION_RETURN_INT(grp->health); } @@ -1011,7 +1013,7 @@ DEFINE_ACTION_FUNCTION(_Line, SetHealth) self->health = newhealth; if (self->healthgroup) { - FHealthGroup* grp = P_GetHealthGroup(self->healthgroup); + FHealthGroup* grp = P_GetHealthGroup(self->GetLevel(), self->healthgroup); if (grp) P_SetHealthGroupHealth(grp, newhealth); } @@ -1024,14 +1026,15 @@ DEFINE_ACTION_FUNCTION(_Sector, GetHealth) PARAM_INT(part); FHealthGroup* grp; + auto Level = self->Level; switch (part) { case SECPART_Floor: - ACTION_RETURN_INT((self->healthfloorgroup && (grp = P_GetHealthGroup(self->healthfloorgroup))) ? grp->health : self->healthfloor); + ACTION_RETURN_INT((self->healthfloorgroup && (grp = P_GetHealthGroup(Level, self->healthfloorgroup))) ? grp->health : self->healthfloor); case SECPART_Ceiling: - ACTION_RETURN_INT((self->healthceilinggroup && (grp = P_GetHealthGroup(self->healthceilinggroup))) ? grp->health : self->healthceiling); + ACTION_RETURN_INT((self->healthceilinggroup && (grp = P_GetHealthGroup(Level, self->healthceilinggroup))) ? grp->health : self->healthceiling); case SECPART_3D: - ACTION_RETURN_INT((self->health3dgroup && (grp = P_GetHealthGroup(self->health3dgroup))) ? grp->health : self->health3d); + ACTION_RETURN_INT((self->health3dgroup && (grp = P_GetHealthGroup(Level, self->health3dgroup))) ? grp->health : self->health3d); default: ACTION_RETURN_INT(0); } @@ -1066,8 +1069,8 @@ DEFINE_ACTION_FUNCTION(_Sector, SetHealth) return 0; } - FHealthGroup* grp = group ? P_GetHealthGroup(group) : nullptr; + FHealthGroup* grp = group ? P_GetHealthGroup(self->Level, group) : nullptr; *health = newhealth; if (grp) P_SetHealthGroupHealth(grp, newhealth); return 0; -} \ No newline at end of file +} diff --git a/src/p_destructible.h b/src/p_destructible.h index 99c14b9271..24a95b6a48 100755 --- a/src/p_destructible.h +++ b/src/p_destructible.h @@ -21,13 +21,14 @@ enum SECPART_3D = 2 }; -void P_InitHealthGroups(); +struct FLevelLocals; +void P_InitHealthGroups(FLevelLocals *Level); void P_SetHealthGroupHealth(FHealthGroup* group, int health); -void P_SetHealthGroupHealth(int group, int health); +void P_SetHealthGroupHealth(FLevelLocals *Level, int group, int health); -FHealthGroup* P_GetHealthGroup(int id); -FHealthGroup* P_GetHealthGroupOrNew(int id, int startinghealth); +FHealthGroup* P_GetHealthGroup(FLevelLocals *Level, int id); +FHealthGroup* P_GetHealthGroupOrNew(FLevelLocals *Level, int id, int startinghealth); void P_DamageSector(sector_t* sector, AActor* source, int damage, FName damagetype, int part, DVector3 position, bool isradius, bool dogroups); void P_DamageLinedef(line_t* line, AActor* source, int damage, FName damagetype, int side, DVector3 position, bool isradius, bool dogroups); @@ -40,4 +41,4 @@ bool P_ProjectileHitPlane(AActor* projectile, int part); bool P_CheckLinedefVulnerable(line_t* line, int side, int part = -1); bool P_CheckSectorVulnerable(sector_t* sector, int part); -void P_SerializeHealthGroups(FSerializer& arc); \ No newline at end of file +void P_SerializeHealthGroups(FLevelLocals *Level, FSerializer& arc); \ No newline at end of file diff --git a/src/p_effect.cpp b/src/p_effect.cpp index da43890c5d..54f362347a 100644 --- a/src/p_effect.cpp +++ b/src/p_effect.cpp @@ -36,7 +36,7 @@ #include "doomtype.h" #include "doomstat.h" -#include "i_system.h" + #include "actor.h" #include "m_argv.h" #include "p_effect.h" @@ -47,23 +47,20 @@ #include "r_utility.h" #include "g_levellocals.h" #include "vm.h" +#include "actorinlines.h" +#include "g_game.h" CVAR (Int, cl_rockettrails, 1, CVAR_ARCHIVE); CVAR (Bool, r_rail_smartspiral, 0, CVAR_ARCHIVE); CVAR (Int, r_rail_spiralsparsity, 1, CVAR_ARCHIVE); CVAR (Int, r_rail_trailsparsity, 1, CVAR_ARCHIVE); CVAR (Bool, r_particles, true, 0); +EXTERN_CVAR(Int, r_maxparticles); FRandom pr_railtrail("RailTrail"); #define FADEFROMTTL(a) (1.f/(a)) -// [RH] particle globals -uint32_t ActiveParticles; -uint32_t InactiveParticles; -TArray Particles; -TArray ParticlesInSubsec; - static int grey1, grey2, grey3, grey4, red, green, blue, yellow, black, red1, green1, blue1, yellow1, purple, purple1, white, rblue1, rblue2, rblue3, rblue4, orange, yorange, dred, grey5, @@ -102,15 +99,15 @@ static const struct ColorList { {NULL, 0, 0, 0 } }; -inline particle_t *NewParticle (void) +inline particle_t *NewParticle (FLevelLocals *Level) { particle_t *result = nullptr; - if (InactiveParticles != NO_PARTICLE) + if (Level->InactiveParticles != NO_PARTICLE) { - result = &Particles[InactiveParticles]; - InactiveParticles = result->tnext; - result->tnext = ActiveParticles; - ActiveParticles = uint32_t(result - Particles.Data()); + result = &Level->Particles[Level->InactiveParticles]; + Level->InactiveParticles = result->tnext; + result->tnext = Level->ActiveParticles; + Level->ActiveParticles = uint32_t(result - Level->Particles.Data()); } return result; } @@ -118,26 +115,9 @@ inline particle_t *NewParticle (void) // // [RH] Particle functions // -void P_InitParticles (); +void P_InitParticles (FLevelLocals *); -// [BC] Allow the maximum number of particles to be specified by a cvar (so people -// with lots of nice hardware can have lots of particles!). -CUSTOM_CVAR( Int, r_maxparticles, 4000, CVAR_ARCHIVE ) -{ - if ( self == 0 ) - self = 4000; - else if (self > 65535) - self = 65535; - else if (self < 100) - self = 100; - - if ( gamestate != GS_STARTUP ) - { - P_InitParticles( ); - } -} - -void P_InitParticles () +void P_InitParticles (FLevelLocals *Level) { const char *i; int num; @@ -151,45 +131,45 @@ void P_InitParticles () // This should be good, but eh... int NumParticles = clamp(num, 100, 65535); - Particles.Resize(NumParticles); - P_ClearParticles (); + Level->Particles.Resize(NumParticles); + P_ClearParticles (Level); } -void P_ClearParticles () +void P_ClearParticles (FLevelLocals *Level) { int i = 0; - memset (Particles.Data(), 0, Particles.Size() * sizeof(particle_t)); - ActiveParticles = NO_PARTICLE; - InactiveParticles = 0; - for (auto &p : Particles) + memset (Level->Particles.Data(), 0, Level->Particles.Size() * sizeof(particle_t)); + Level->ActiveParticles = NO_PARTICLE; + Level->InactiveParticles = 0; + for (auto &p : Level->Particles) p.tnext = ++i; - Particles.Last().tnext = NO_PARTICLE; + Level->Particles.Last().tnext = NO_PARTICLE; } // Group particles by subsectors. Because particles are always // in motion, there is little benefit to caching this information // from one frame to the next. -void P_FindParticleSubsectors () +void P_FindParticleSubsectors (FLevelLocals *Level) { - if (ParticlesInSubsec.Size() < level.subsectors.Size()) + if (Level->ParticlesInSubsec.Size() < Level->subsectors.Size()) { - ParticlesInSubsec.Reserve (level.subsectors.Size() - ParticlesInSubsec.Size()); + Level->ParticlesInSubsec.Reserve (Level->subsectors.Size() - Level->ParticlesInSubsec.Size()); } - fillshort (&ParticlesInSubsec[0], level.subsectors.Size(), NO_PARTICLE); + fillshort (&Level->ParticlesInSubsec[0], Level->subsectors.Size(), NO_PARTICLE); if (!r_particles) { return; } - for (uint16_t i = ActiveParticles; i != NO_PARTICLE; i = Particles[i].tnext) + for (uint16_t i = Level->ActiveParticles; i != NO_PARTICLE; i = Level->Particles[i].tnext) { // Try to reuse the subsector from the last portal check, if still valid. - if (Particles[i].subsector == NULL) Particles[i].subsector = R_PointInSubsector(Particles[i].Pos); - int ssnum = Particles[i].subsector->Index(); - Particles[i].snext = ParticlesInSubsec[ssnum]; - ParticlesInSubsec[ssnum] = i; + if (Level->Particles[i].subsector == nullptr) Level->Particles[i].subsector = Level->PointInRenderSubsector(Level->Particles[i].Pos); + int ssnum = Level->Particles[i].subsector->Index(); + Level->Particles[i].snext = Level->ParticlesInSubsec[ssnum]; + Level->ParticlesInSubsec[ssnum] = i; } } @@ -219,7 +199,6 @@ void P_InitEffects () { const struct ColorList *color = Colors; - P_InitParticles(); while (color->color) { *(color->color) = ParticleColor(color->r, color->g, color->b); @@ -231,18 +210,18 @@ void P_InitEffects () blood2 = ParticleColor(RPART(kind)/3, GPART(kind)/3, BPART(kind)/3); } -void P_ThinkParticles () +void P_ThinkParticles (FLevelLocals *Level) { int i; particle_t *particle, *prev; - i = ActiveParticles; + i = Level->ActiveParticles; prev = NULL; while (i != NO_PARTICLE) { - particle = &Particles[i]; + particle = &Level->Particles[i]; i = particle->tnext; - if (!particle->notimefreeze && ((bglobal.freeze) || (level.flags2 & LEVEL2_FROZEN))) + if (!particle->notimefreeze && Level->isFrozen()) { prev = particle; continue; @@ -257,19 +236,19 @@ void P_ThinkParticles () if (prev) prev->tnext = i; else - ActiveParticles = i; - particle->tnext = InactiveParticles; - InactiveParticles = (int)(particle - Particles.Data()); + Level->ActiveParticles = i; + particle->tnext = Level->InactiveParticles; + Level->InactiveParticles = (int)(particle - Level->Particles.Data()); continue; } // Handle crossing a line portal - DVector2 newxy = P_GetOffsetPosition(particle->Pos.X, particle->Pos.Y, particle->Vel.X, particle->Vel.Y); + DVector2 newxy = Level->GetPortalOffsetPosition(particle->Pos.X, particle->Pos.Y, particle->Vel.X, particle->Vel.Y); particle->Pos.X = newxy.X; particle->Pos.Y = newxy.Y; particle->Pos.Z += particle->Vel.Z; particle->Vel += particle->Acc; - particle->subsector = R_PointInSubsector(particle->Pos); + particle->subsector = Level->PointInRenderSubsector(particle->Pos); sector_t *s = particle->subsector->sector; // Handle crossing a sector portal. if (!s->PortalBlocksMovement(sector_t::ceiling)) @@ -298,10 +277,10 @@ enum PSFlag PS_NOTIMEFREEZE = 1 << 5, }; -void P_SpawnParticle(const DVector3 &pos, const DVector3 &vel, const DVector3 &accel, PalEntry color, double startalpha, int lifetime, double size, +void P_SpawnParticle(FLevelLocals *Level, const DVector3 &pos, const DVector3 &vel, const DVector3 &accel, PalEntry color, double startalpha, int lifetime, double size, double fadestep, double sizestep, int flags) { - particle_t *particle = NewParticle(); + particle_t *particle = NewParticle(Level); if (particle) { @@ -325,23 +304,16 @@ void P_SpawnParticle(const DVector3 &pos, const DVector3 &vel, const DVector3 &a // // Run effects on all actors in the world // -void P_RunEffects () +void P_RunEffects (FLevelLocals *Level) { - if (players[consoleplayer].camera == NULL) return; - - int pnum = players[consoleplayer].camera->Sector->Index() * level.sectors.Size(); - AActor *actor; - TThinkerIterator iterator; + auto iterator = Level->GetThinkerIterator(); while ( (actor = iterator.Next ()) ) { if (actor->effects || actor->fountaincolor) { - // Only run the effect if the actor is potentially visible - int rnum = pnum + actor->Sector->Index(); - if (level.rejectmatrix.Size() == 0 || !(level.rejectmatrix[rnum>>3] & (1 << (rnum & 7)))) - P_RunEffect (actor, actor->effects); + P_RunEffect (actor, actor->effects); } } } @@ -351,14 +323,14 @@ void P_RunEffects () // // Creates a particle with "jitter" // -particle_t *JitterParticle (int ttl) +particle_t *JitterParticle (FLevelLocals *Level, int ttl) { - return JitterParticle (ttl, 1.0); + return JitterParticle (Level, ttl, 1.0); } // [XA] Added "drift speed" multiplier setting for enhanced railgun stuffs. -particle_t *JitterParticle (int ttl, double drift) +particle_t *JitterParticle (FLevelLocals *Level, int ttl, double drift) { - particle_t *particle = NewParticle (); + particle_t *particle = NewParticle (Level); if (particle) { int i; @@ -381,10 +353,10 @@ static void MakeFountain (AActor *actor, int color1, int color2) { particle_t *particle; - if (!(level.time & 1)) + if (!(actor->Level->time & 1)) return; - particle = JitterParticle (51); + particle = JitterParticle (actor->Level, 51); if (particle) { @@ -424,7 +396,7 @@ void P_RunEffect (AActor *actor, int effects) DAngle an = moveangle + 90.; double speed; - particle = JitterParticle (3 + (M_Random() & 31)); + particle = JitterParticle (actor->Level, 3 + (M_Random() & 31)); if (particle) { double pathdist = M_Random() / 256.; DVector3 pos = actor->Vec3Offset( @@ -441,7 +413,7 @@ void P_RunEffect (AActor *actor, int effects) particle->size = 2; } for (i = 6; i; i--) { - particle_t *particle = JitterParticle (3 + (M_Random() & 31)); + particle_t *particle = JitterParticle (actor->Level, 3 + (M_Random() & 31)); if (particle) { double pathdist = M_Random() / 256.; DVector3 pos = actor->Vec3Offset( @@ -470,7 +442,7 @@ void P_RunEffect (AActor *actor, int effects) DVector3 pos = actor->Vec3Angle(-actor->radius * 2, moveangle, -actor->Height * actor->Vel.Z / 8 + actor->Height * (2. / 3)); - P_DrawSplash2 (6, pos, moveangle + 180, 2, 2); + P_DrawSplash2 (actor->Level, 6, pos, moveangle + 180, 2, 2); } if (actor->fountaincolor) { @@ -497,7 +469,7 @@ void P_RunEffect (AActor *actor, int effects) for (i = 3; i > 0; i--) { - particle = JitterParticle (16); + particle = JitterParticle (actor->Level, 16); if (particle != NULL) { DAngle ang = M_Random() * (360 / 256.); @@ -518,7 +490,7 @@ void P_RunEffect (AActor *actor, int effects) } } -void P_DrawSplash (int count, const DVector3 &pos, DAngle angle, int kind) +void P_DrawSplash (FLevelLocals *Level, int count, const DVector3 &pos, DAngle angle, int kind) { int color1, color2; @@ -534,7 +506,7 @@ void P_DrawSplash (int count, const DVector3 &pos, DAngle angle, int kind) for (; count; count--) { - particle_t *p = JitterParticle (10); + particle_t *p = JitterParticle (Level, 10); if (!p) break; @@ -552,7 +524,7 @@ void P_DrawSplash (int count, const DVector3 &pos, DAngle angle, int kind) } } -void P_DrawSplash2 (int count, const DVector3 &pos, DAngle angle, int updown, int kind) +void P_DrawSplash2 (FLevelLocals *Level, int count, const DVector3 &pos, DAngle angle, int updown, int kind) { int color1, color2, zadd; double zvel, zspread; @@ -583,7 +555,7 @@ void P_DrawSplash2 (int count, const DVector3 &pos, DAngle angle, int updown, in for (; count; count--) { - particle_t *p = NewParticle (); + particle_t *p = NewParticle (Level); DAngle an; if (!p) @@ -659,14 +631,23 @@ void P_DrawRailTrail(AActor *source, TArray &portalhits, int color1, seg.extend = (tempvec - (seg.dir | tempvec) * seg.dir) * 3; length += seg.length; - // Only consider sound in 2D (for now, anyway) - // [BB] You have to divide by lengthsquared here, not multiply with it. - AActor *mo = players[consoleplayer].camera; - - double r = ((seg.start.Y - mo->Y()) * (-seg.dir.Y) - (seg.start.X - mo->X()) * (seg.dir.X)) / (seg.length * seg.length); - r = clamp(r, 0., 1.); - seg.soundpos = seg.start + r * seg.dir; - seg.sounddist = (seg.soundpos - mo->Pos()).LengthSquared(); + auto player = source->Level->GetConsolePlayer(); + if (player) + { + // Only consider sound in 2D (for now, anyway) + // [BB] You have to divide by lengthsquared here, not multiply with it. + AActor *mo = player->camera; + double r = ((seg.start.Y - mo->Y()) * (-seg.dir.Y) - (seg.start.X - mo->X()) * (seg.dir.X)) / (seg.length * seg.length); + r = clamp(r, 0., 1.); + seg.soundpos = seg.start + r * seg.dir; + seg.sounddist = (seg.soundpos - mo->Pos()).LengthSquared(); + } + else + { + // Set to invalid for secondary levels. + seg.soundpos = {0,0}; + seg.sounddist = -1; + } trail.Push(seg); } @@ -677,30 +658,34 @@ void P_DrawRailTrail(AActor *source, TArray &portalhits, int color1, { if (!(flags & RAF_SILENT)) { - FSoundID sound; - - // Allow other sounds than 'weapons/railgf'! - if (!source->player) sound = source->AttackSound; - else if (source->player->ReadyWeapon) sound = source->player->ReadyWeapon->AttackSound; - else sound = 0; - if (!sound) sound = "weapons/railgf"; - - // The railgun's sound is special. It gets played from the - // point on the slug's trail that is closest to the hearing player. - AActor *mo = players[consoleplayer].camera; - - if (fabs(mo->X() - trail[0].start.X) < 20 && fabs(mo->Y() - trail[0].start.Y) < 20) - { // This player (probably) fired the railgun - S_Sound (mo, CHAN_WEAPON, sound, 1, ATTN_NORM); - } - else + auto player = source->Level->GetConsolePlayer(); + if (player) { - TrailSegment *shortest = NULL; - for (auto &seg : trail) - { - if (shortest == NULL || shortest->sounddist > seg.sounddist) shortest = &seg; + FSoundID sound; + + // Allow other sounds than 'weapons/railgf'! + if (!source->player) sound = source->AttackSound; + else if (source->player->ReadyWeapon) sound = source->player->ReadyWeapon->AttackSound; + else sound = 0; + if (!sound) sound = "weapons/railgf"; + + // The railgun's sound is special. It gets played from the + // point on the slug's trail that is closest to the hearing player. + AActor *mo = player->camera; + + if (fabs(mo->X() - trail[0].start.X) < 20 && fabs(mo->Y() - trail[0].start.Y) < 20) + { // This player (probably) fired the railgun + S_Sound (mo, CHAN_WEAPON, sound, 1, ATTN_NORM); + } + else + { + TrailSegment *shortest = NULL; + for (auto &seg : trail) + { + if (shortest == NULL || shortest->sounddist > seg.sounddist) shortest = &seg; + } + S_Sound (source->Level, DVector3(shortest->soundpos, r_viewpoint.Pos.Z), CHAN_WEAPON, sound, 1, ATTN_NORM); } - S_Sound (DVector3(shortest->soundpos, r_viewpoint.Pos.Z), CHAN_WEAPON, sound, 1, ATTN_NORM); } } } @@ -723,7 +708,7 @@ void P_DrawRailTrail(AActor *source, TArray &portalhits, int color1, deg = (double)SpiralOffset; for (i = spiral_steps; i; i--) { - particle_t *p = NewParticle (); + particle_t *p = NewParticle (source->Level); DVector3 tempvec; if (!p) @@ -794,7 +779,7 @@ void P_DrawRailTrail(AActor *source, TArray &portalhits, int color1, { // [XA] inner trail uses a different default duration (33). int innerduration = (duration == 0) ? 33 : duration; - particle_t *p = JitterParticle (innerduration, (float)drift); + particle_t *p = JitterParticle (source->Level, innerduration, (float)drift); if (!p) return; @@ -878,7 +863,7 @@ void P_DrawRailTrail(AActor *source, TArray &portalhits, int color1, if (rnd & 4) diff.Z = clamp(diff.Z + ((rnd & 32) ? 1 : -1), -maxdiff, maxdiff); } - AActor *thing = Spawn (spawnclass, pos + diff, ALLOW_REPLACE); + AActor *thing = Spawn (source->Level, spawnclass, pos + diff, ALLOW_REPLACE); if (thing) { if (source) thing->target = source; @@ -914,7 +899,7 @@ void P_DisconnectEffect (AActor *actor) for (i = 64; i; i--) { - particle_t *p = JitterParticle (TICRATE*2); + particle_t *p = JitterParticle (actor->Level, TICRATE*2); if (!p) break; diff --git a/src/p_effect.h b/src/p_effect.h index 00689118ac..22a9ab8236 100644 --- a/src/p_effect.h +++ b/src/p_effect.h @@ -41,6 +41,7 @@ #define FX_VISIBILITYPULSE 0x00000040 struct subsector_t; +struct FLevelLocals; // [RH] Particle details @@ -62,24 +63,22 @@ struct particle_t uint16_t snext; }; -extern TArray Particles; -extern TArray ParticlesInSubsec; - const uint16_t NO_PARTICLE = 0xffff; -void P_ClearParticles (); -void P_FindParticleSubsectors (); +void P_InitParticles(FLevelLocals *); +void P_ClearParticles (FLevelLocals *Level); +void P_FindParticleSubsectors (FLevelLocals *Level); class AActor; -particle_t *JitterParticle (int ttl); -particle_t *JitterParticle (int ttl, double drift); +particle_t *JitterParticle (FLevelLocals *Level, int ttl); +particle_t *JitterParticle (FLevelLocals *Level, int ttl, double drift); -void P_ThinkParticles (void); -void P_SpawnParticle(const DVector3 &pos, const DVector3 &vel, const DVector3 &accel, PalEntry color, double startalpha, int lifetime, double size, double fadestep, double sizestep, int flags = 0); +void P_ThinkParticles (FLevelLocals *Level); +void P_SpawnParticle(FLevelLocals *Level, const DVector3 &pos, const DVector3 &vel, const DVector3 &accel, PalEntry color, double startalpha, int lifetime, double size, double fadestep, double sizestep, int flags = 0); void P_InitEffects (void); -void P_RunEffects (void); +void P_RunEffects (FLevelLocals *Level); void P_RunEffect (AActor *actor, int effects); @@ -91,6 +90,6 @@ struct SPortalHit }; void P_DrawRailTrail(AActor *source, TArray &portalhits, int color1, int color2, double maxdiff = 0, int flags = 0, PClassActor *spawnclass = NULL, DAngle angle = 0., int duration = 35, double sparsity = 1.0, double drift = 1.0, int SpiralOffset = 270, DAngle pitch = 0.); -void P_DrawSplash (int count, const DVector3 &pos, DAngle angle, int kind); -void P_DrawSplash2 (int count, const DVector3 &pos, DAngle angle, int updown, int kind); +void P_DrawSplash (FLevelLocals *Level, int count, const DVector3 &pos, DAngle angle, int kind); +void P_DrawSplash2 (FLevelLocals *Level, int count, const DVector3 &pos, DAngle angle, int updown, int kind); void P_DisconnectEffect (AActor *actor); diff --git a/src/p_enemy.cpp b/src/p_enemy.cpp index 50e4d2140e..161238c4e7 100644 --- a/src/p_enemy.cpp +++ b/src/p_enemy.cpp @@ -33,7 +33,7 @@ #include "templates.h" #include "m_random.h" -#include "i_system.h" + #include "doomdef.h" #include "p_local.h" #include "p_maputl.h" @@ -161,12 +161,12 @@ static void P_RecursiveSound(sector_t *sec, AActor *soundtarget, bool splash, AA // I wish there was a better method to do this than randomly looking through the portal at a few places... if (checkabove) { - sector_t *upper = P_PointInSector(check->v1->fPos() + check->Delta() / 2 + sec->GetPortalDisplacement(sector_t::ceiling)); + sector_t *upper = sec->Level->PointInSector(check->v1->fPos() + check->Delta() / 2 + sec->GetPortalDisplacement(sector_t::ceiling)); NoiseMarkSector(upper, soundtarget, splash, emitter, soundblocks, maxdist); } if (checkbelow) { - sector_t *lower = P_PointInSector(check->v1->fPos() + check->Delta() / 2 + sec->GetPortalDisplacement(sector_t::floor)); + sector_t *lower = sec->Level->PointInSector(check->v1->fPos() + check->Delta() / 2 + sec->GetPortalDisplacement(sector_t::floor)); NoiseMarkSector(lower, soundtarget, splash, emitter, soundblocks, maxdist); } @@ -464,7 +464,7 @@ int P_Move (AActor *actor) // [RH] I'm not so sure this is such a good idea // [GZ] That's why it's compat-optioned. - if (compatflags & COMPATF_MBFMONSTERMOVE && !(actor->flags8 & MF8_NOFRICTION)) + if (actor->Level->i_compatflags & COMPATF_MBFMONSTERMOVE && !(actor->flags8 & MF8_NOFRICTION)) { // killough 10/98: make monsters get affected by ice and sludge too: movefactor = P_GetMoveFactor (actor, &friction); @@ -864,10 +864,10 @@ void P_NewChaseDir(AActor * actor) if (actor->floorz - actor->dropoffz > actor->MaxDropOffHeight && actor->Z() <= actor->floorz && !(actor->flags & MF_DROPOFF) && !(actor->flags2 & MF2_ONMOBJ) && - !(actor->flags & MF_FLOAT) && !(i_compatflags & COMPATF_DROPOFF)) + !(actor->flags & MF_FLOAT) && !(actor->Level->i_compatflags & COMPATF_DROPOFF)) { FBoundingBox box(actor->X(), actor->Y(), actor->radius); - FBlockLinesIterator it(box); + FBlockLinesIterator it(actor->Level, box); line_t *line; double deltax = 0; @@ -997,7 +997,7 @@ void P_RandomChaseDir (AActor *actor) if (actor->FriendPlayer != 0) { - player = players[i = actor->FriendPlayer - 1].mo; + player = actor->Level->Players[i = actor->FriendPlayer - 1]->mo; } else { @@ -1005,12 +1005,12 @@ void P_RandomChaseDir (AActor *actor) { i = 0; } - else for (i = pr_newchasedir() & (MAXPLAYERS-1); !playeringame[i]; i = (i+1) & (MAXPLAYERS-1)) + else for (i = pr_newchasedir() & (MAXPLAYERS-1); !actor->Level->PlayerInGame(i); i = (i+1) & (MAXPLAYERS-1)) { } - player = players[i].mo; + player = actor->Level->Players[i]->mo; } - if (player != NULL && playeringame[i]) + if (player != NULL && actor->Level->PlayerInGame(i)) { if (pr_newchasedir() & 1 || !P_CheckSight (actor, player)) { @@ -1201,9 +1201,9 @@ int P_LookForMonsters (AActor *actor) { int count; AActor *mo; - TThinkerIterator iterator; + auto iterator = actor->Level->GetThinkerIterator(); - if (!P_CheckSight (players[0].mo, actor, SF_SEEPASTBLOCKEVERYTHING)) + if (!P_CheckSight (actor->Level->Players[0]->mo, actor, SF_SEEPASTBLOCKEVERYTHING)) { // Player can't see monster return false; } @@ -1258,7 +1258,7 @@ AActor *LookForTIDInBlock (AActor *lookee, int index, void *extparams) AActor *link; AActor *other; - for (block = level.blockmap.blocklinks[index]; block != NULL; block = block->NextActor) + for (block = lookee->Level->blockmap.blocklinks[index]; block != NULL; block = block->NextActor) { link = block->Me; @@ -1339,7 +1339,7 @@ int P_LookForTID (AActor *actor, INTBOOL allaround, FLookExParams *params) actor->LastLookActor = nullptr; } - FActorIterator iterator (actor->TIDtoHate, actor->LastLookActor); + auto iterator = actor->Level->GetActorIterator(actor->TIDtoHate, actor->LastLookActor); int c = (pr_look3() & 31) + 7; // Look for between 7 and 38 hatees at a time while ((other = iterator.Next()) != actor->LastLookActor) { @@ -1429,7 +1429,7 @@ AActor *LookForEnemiesInBlock (AActor *lookee, int index, void *extparam) AActor *other; FLookExParams *params = (FLookExParams *)extparam; - for (block = level.blockmap.blocklinks[index]; block != NULL; block = block->NextActor) + for (block = lookee->Level->blockmap.blocklinks[index]; block != NULL; block = block->NextActor) { link = block->Me; @@ -1592,13 +1592,15 @@ int P_LookForPlayers (AActor *actor, INTBOOL allaround, FLookExParams *params) // Go back to a player, no matter whether it's visible or not for (int anyone=0; anyone<=1; anyone++) { + auto Level = actor->Level; for (int c=0; cIsFriend(players[c].mo) && - (anyone || P_IsVisible(actor, players[c].mo, allaround))) + auto p = Level->Players[i]; + if (Level->PlayerInGame(c) && p->playerstate==PST_LIVE && + actor->IsFriend(p->mo) && + (anyone || P_IsVisible(actor, p->mo, allaround))) { - actor->target = players[c].mo; + actor->target = Level->Players[c]->mo; // killough 12/98: // get out of refiring loop, to avoid hitting player accidentally @@ -1623,8 +1625,9 @@ int P_LookForPlayers (AActor *actor, INTBOOL allaround, FLookExParams *params) } // [SP] if false, and in deathmatch, intentional fall-through if (!(gameinfo.gametype & (GAME_DoomStrifeChex)) && + actor->Level->isPrimaryLevel() && !multiplayer && - players[0].health <= 0 && + actor->Level->Players[0]->health <= 0 && actor->goal == NULL && gamestate != GS_TITLELEVEL ) @@ -1648,7 +1651,7 @@ int P_LookForPlayers (AActor *actor, INTBOOL allaround, FLookExParams *params) if (c++ < MAXPLAYERS) { pnum = (pnum + 1) & (MAXPLAYERS - 1); - if (!playeringame[pnum]) + if (!actor->Level->PlayerInGame(pnum)) continue; if (actor->TIDtoHate == 0) @@ -1686,12 +1689,12 @@ int P_LookForPlayers (AActor *actor, INTBOOL allaround, FLookExParams *params) return actor->target == actor->goal && actor->goal != NULL; } - player = &players[pnum]; + player = actor->Level->Players[pnum]; if (!(player->mo->flags & MF_SHOOTABLE)) continue; // not shootable (observer or dead) - if (!((actor->flags ^ player->mo->flags) & MF_FRIENDLY)) + if (actor->IsFriend(player->mo)) continue; // same +MF_FRIENDLY, ignore if (player->cheats & CF_NOTARGET) @@ -1715,7 +1718,7 @@ int P_LookForPlayers (AActor *actor, INTBOOL allaround, FLookExParams *params) // the player then, eh? if(!(actor->flags6 & MF6_SEEINVISIBLE)) { - if ((player->mo->flags & MF_SHADOW && !(i_compatflags & COMPATF_INVISIBILITY)) || + if ((player->mo->flags & MF_SHADOW && !(actor->Level->i_compatflags & COMPATF_INVISIBILITY)) || player->mo->flags3 & MF3_GHOST) { if (player->mo->Distance2D (actor) > 128 && player->mo->Vel.XY().LengthSquared() < 5*5) @@ -1760,10 +1763,10 @@ DEFINE_ACTION_FUNCTION(AActor, A_Look) // [RH] Set goal now if appropriate if (self->special == Thing_SetGoal && self->args[0] == 0) { - NActorIterator iterator (NAME_PatrolPoint, self->args[1]); + auto iterator = self->Level->GetActorIterator(NAME_PatrolPoint, self->args[1]); self->special = 0; self->goal = iterator.Next (); - self->reactiontime = self->args[2] * TICRATE + level.maptime; + self->reactiontime = self->args[2] * TICRATE + self->Level->maptime; if (self->args[3] == 0) self->flags5 &= ~MF5_CHASEGOAL; else self->flags5 |= MF5_CHASEGOAL; } @@ -1776,7 +1779,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Look) } else { - targ = (i_compatflags & COMPATF_SOUNDTARGET || self->flags & MF_NOSECTOR)? + targ = (self->Level->i_compatflags & COMPATF_SOUNDTARGET || self->flags & MF_NOSECTOR)? self->Sector->SoundTarget : self->LastHeard; // [RH] If the soundtarget is dead, don't chase it @@ -1838,7 +1841,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Look) // [RH] Don't start chasing after a goal if it isn't time yet. if (self->target == self->goal) { - if (self->reactiontime > level.maptime) + if (self->reactiontime > self->Level->maptime) self->target = nullptr; } else if (self->SeeSound) @@ -1889,10 +1892,10 @@ DEFINE_ACTION_FUNCTION(AActor, A_LookEx) // [RH] Set goal now if appropriate if (self->special == Thing_SetGoal && self->args[0] == 0) { - NActorIterator iterator(NAME_PatrolPoint, self->args[1]); + auto iterator = self->Level->GetActorIterator(NAME_PatrolPoint, self->args[1]); self->special = 0; self->goal = iterator.Next (); - self->reactiontime = self->args[2] * TICRATE + level.maptime; + self->reactiontime = self->args[2] * TICRATE + self->Level->maptime; if (self->args[3] == 0) self->flags5 &= ~MF5_CHASEGOAL; else @@ -1909,7 +1912,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_LookEx) { if (!(flags & LOF_NOSOUNDCHECK)) { - targ = (i_compatflags & COMPATF_SOUNDTARGET || self->flags & MF_NOSECTOR)? + targ = (self->Level->i_compatflags & COMPATF_SOUNDTARGET || self->flags & MF_NOSECTOR)? self->Sector->SoundTarget : self->LastHeard; if (targ != NULL) { @@ -2020,7 +2023,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_LookEx) // [RH] Don't start chasing after a goal if it isn't time yet. if (self->target == self->goal) { - if (self->reactiontime > level.maptime) + if (self->reactiontime > self->Level->maptime) self->target = nullptr; } else if (self->SeeSound && !(flags & LOF_NOSEESOUND)) @@ -2150,7 +2153,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Look2) if (targ && (targ->flags & MF_SHOOTABLE)) { - if ((level.flags & LEVEL_NOALLIES) || + if ((self->Level->flags & LEVEL_NOALLIES) || (self->flags & MF_FRIENDLY) != (targ->flags & MF_FRIENDLY)) { if (self->flags & MF_AMBUSH) @@ -2284,7 +2287,7 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi if (actor->FriendPlayer != 0) { - player = &players[actor->FriendPlayer - 1]; + player = actor->Level->Players[actor->FriendPlayer - 1]; } else { @@ -2293,10 +2296,10 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi { i = 0; } - else for (i = pr_newchasedir() & (MAXPLAYERS-1); !playeringame[i]; i = (i+1) & (MAXPLAYERS-1)) + else for (i = pr_newchasedir() & (MAXPLAYERS-1); !actor->Level->PlayerInGame(i); i = (i+1) & (MAXPLAYERS-1)) { } - player = &players[i]; + player = actor->Level->Players[i]; } if (player->attacker && player->attacker->health > 0 && player->attacker->flags & MF_SHOOTABLE && pr_newchasedir() < 80) { @@ -2372,15 +2375,15 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi if (result) { // reached the goal - NActorIterator iterator (NAME_PatrolPoint, actor->goal->args[0]); - NActorIterator specit (NAME_PatrolSpecial, actor->goal->tid); + auto iterator = actor->Level->GetActorIterator(NAME_PatrolPoint, actor->goal->args[0]); + auto specit = actor->Level->GetActorIterator(NAME_PatrolSpecial, actor->goal->tid); AActor *spec; // Execute the specials of any PatrolSpecials with the same TID // as the goal. while ( (spec = specit.Next()) ) { - P_ExecuteSpecial(spec->special, NULL, actor, false, spec->args[0], + P_ExecuteSpecial(actor->Level, spec->special, NULL, actor, false, spec->args[0], spec->args[1], spec->args[2], spec->args[3], spec->args[4]); } @@ -2390,7 +2393,7 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi if (newgoal != NULL && actor->goal == actor->target) { delay = newgoal->args[1]; - actor->reactiontime = delay * TICRATE + level.maptime; + actor->reactiontime = delay * TICRATE + actor->Level->maptime; } else { @@ -2627,7 +2630,7 @@ bool P_CheckForResurrection(AActor *self, bool usevilestates) FPortalGroupArray check(FPortalGroupArray::PGA_Full3d); - FMultiBlockThingsIterator it(check, viletry.X, viletry.Y, self->Z() - 64, self->Top() + 64, 32., false, NULL); + FMultiBlockThingsIterator it(check, self->Level, viletry.X, viletry.Y, self->Z() - 64, self->Top() + 64, 32., false, NULL); FMultiBlockThingsIterator::CheckResult cres; while (it.Next(&cres)) { @@ -2721,7 +2724,7 @@ bool P_CheckForResurrection(AActor *self, bool usevilestates) { corpsehit->Translation = info->Translation; // Clean up bloodcolor translation from crushed corpses } - if (ib_compatflags & BCOMPATF_VILEGHOSTS) + if (self->Level->ib_compatflags & BCOMPATF_VILEGHOSTS) { corpsehit->Height *= 4; // [GZ] This was a commented-out feature, so let's make use of it, @@ -3037,14 +3040,14 @@ int CheckBossDeath (AActor *actor) // make sure there is a player alive for victory for (i = 0; i < MAXPLAYERS; i++) - if (playeringame[i] && players[i].health > 0) + if (actor->Level->PlayerInGame(i) && actor->Level->Players[i]->health > 0) break; if (i == MAXPLAYERS) return false; // no one left alive, so do not end game // Make sure all bosses are dead - TThinkerIterator iterator; + auto iterator = actor->Level->GetThinkerIterator(); AActor *other; while ( (other = iterator.Next ()) ) @@ -3070,13 +3073,14 @@ void A_BossDeath(AActor *self) FName mytype = self->GetClass()->TypeName; // Ugh... - FName type = self->GetClass()->GetReplacee()->TypeName; + FName type = self->GetClass()->GetReplacee(self->Level)->TypeName; // Do generic special death actions first bool checked = false; - for (unsigned i = 0; i < level.info->specialactions.Size(); i++) + auto Level = self->Level; + for (unsigned i = 0; i < Level->info->specialactions.Size(); i++) { - FSpecialAction *sa = &level.info->specialactions[i]; + FSpecialAction *sa = &Level->info->specialactions[i]; if (type == sa->Type || mytype == sa->Type) { @@ -3086,15 +3090,27 @@ void A_BossDeath(AActor *self) } checked = true; - P_ExecuteSpecial(sa->Action, NULL, self, false, - sa->Args[0], sa->Args[1], sa->Args[2], sa->Args[3], sa->Args[4]); + if (sa->Action & 0x40000000) + { + // This is a Doom format special from UMAPINFO. It must be translated here, because at parsing time there is not sufficient context to do it. + maplinedef_t ml; + ml.special = sa->Action & 0x3fffffff; + ml.tag = sa->Args[0]; + line_t line; + self->Level->TranslateLineDef(&line, &ml); + P_ExecuteSpecial(self->Level, line.special, nullptr, self, false, line.args[0], line.args[1], line.args[2], line.args[3], line.args[4]); + } + else + { + P_ExecuteSpecial(self->Level, sa->Action, nullptr, self, false, sa->Args[0], sa->Args[1], sa->Args[2], sa->Args[3], sa->Args[4]); + } } } // [RH] These all depend on the presence of level flags now // rather than being hard-coded to specific levels/episodes. - if ((level.flags & (LEVEL_MAP07SPECIAL| + if ((Level->flags & (LEVEL_MAP07SPECIAL| LEVEL_BRUISERSPECIAL| LEVEL_CYBORGSPECIAL| LEVEL_SPIDERSPECIAL| @@ -3103,14 +3119,14 @@ void A_BossDeath(AActor *self) LEVEL_SORCERER2SPECIAL)) == 0) return; - if ((i_compatflags & COMPATF_ANYBOSSDEATH) || ( // [GZ] Added for UAC_DEAD - ((level.flags & LEVEL_MAP07SPECIAL) && (type == NAME_Fatso || type == NAME_Arachnotron)) || - ((level.flags & LEVEL_BRUISERSPECIAL) && (type == NAME_BaronOfHell)) || - ((level.flags & LEVEL_CYBORGSPECIAL) && (type == NAME_Cyberdemon)) || - ((level.flags & LEVEL_SPIDERSPECIAL) && (type == NAME_SpiderMastermind)) || - ((level.flags & LEVEL_HEADSPECIAL) && (type == NAME_Ironlich)) || - ((level.flags & LEVEL_MINOTAURSPECIAL) && (type == NAME_Minotaur)) || - ((level.flags & LEVEL_SORCERER2SPECIAL) && (type == NAME_Sorcerer2)) + if ((Level->i_compatflags & COMPATF_ANYBOSSDEATH) || ( // [GZ] Added for UAC_DEAD + ((Level->flags & LEVEL_MAP07SPECIAL) && (type == NAME_Fatso || type == NAME_Arachnotron)) || + ((Level->flags & LEVEL_BRUISERSPECIAL) && (type == NAME_BaronOfHell)) || + ((Level->flags & LEVEL_CYBORGSPECIAL) && (type == NAME_Cyberdemon)) || + ((Level->flags & LEVEL_SPIDERSPECIAL) && (type == NAME_SpiderMastermind)) || + ((Level->flags & LEVEL_HEADSPECIAL) && (type == NAME_Ironlich)) || + ((Level->flags & LEVEL_MINOTAURSPECIAL) && (type == NAME_Minotaur)) || + ((Level->flags & LEVEL_SORCERER2SPECIAL) && (type == NAME_Sorcerer2)) )) ; else @@ -3122,47 +3138,47 @@ void A_BossDeath(AActor *self) } // victory! - if (level.flags & LEVEL_SPECKILLMONSTERS) + if (Level->flags & LEVEL_SPECKILLMONSTERS) { // Kill any remaining monsters - P_Massacre (); + Level->Massacre (); } - if (level.flags & LEVEL_MAP07SPECIAL) + if (Level->flags & LEVEL_MAP07SPECIAL) { if (type == NAME_Fatso) { - EV_DoFloor (DFloor::floorLowerToLowest, NULL, 666, 1., 0, -1, 0, false); + Level->EV_DoFloor (DFloor::floorLowerToLowest, NULL, 666, 1., 0, -1, 0, false); return; } if (type == NAME_Arachnotron) { - EV_DoFloor (DFloor::floorRaiseByTexture, NULL, 667, 1., 0, -1, 0, false); + Level->EV_DoFloor (DFloor::floorRaiseByTexture, NULL, 667, 1., 0, -1, 0, false); return; } } else { - switch (level.flags & LEVEL_SPECACTIONSMASK) + switch (Level->flags & LEVEL_SPECACTIONSMASK) { case LEVEL_SPECLOWERFLOOR: - EV_DoFloor (DFloor::floorLowerToLowest, NULL, 666, 1., 0, -1, 0, false); + Level->EV_DoFloor (DFloor::floorLowerToLowest, NULL, 666, 1., 0, -1, 0, false); return; case LEVEL_SPECLOWERFLOORTOHIGHEST: - EV_DoFloor (DFloor::floorLowerToHighest, NULL, 666, 1., 0, -1, 0, false); + Level->EV_DoFloor (DFloor::floorLowerToHighest, NULL, 666, 1., 0, -1, 0, false); return; case LEVEL_SPECOPENDOOR: - EV_DoDoor (DDoor::doorOpen, NULL, NULL, 666, 8., 0, 0, 0); + Level->EV_DoDoor (DDoor::doorOpen, NULL, NULL, 666, 8., 0, 0, 0); return; } } - // [RH] If noexit, then don't end the level. + // [RH] If noexit, then don't end the Level-> if ((deathmatch || alwaysapplydmflags) && (dmflags & DF_NO_EXIT)) return; - G_ExitLevel (0, false); + Level->ExitLevel (0, false); } //---------------------------------------------------------------------------- @@ -3173,7 +3189,7 @@ void A_BossDeath(AActor *self) // //---------------------------------------------------------------------------- -int P_Massacre (bool baddies, PClassActor *cls) +int FLevelLocals::Massacre (bool baddies, FName cls) { // jff 02/01/98 'em' cheat - kill all monsters // partially taken from Chi's .46 port @@ -3183,7 +3199,7 @@ int P_Massacre (bool baddies, PClassActor *cls) int killcount = 0; AActor *actor; - TThinkerIterator iterator(cls? cls : RUNTIME_CLASS(AActor)); + auto iterator = GetThinkerIterator(cls); while ( (actor = iterator.Next ()) ) { diff --git a/src/p_interaction.cpp b/src/p_interaction.cpp index ec2854c6a9..6f7791c4db 100644 --- a/src/p_interaction.cpp +++ b/src/p_interaction.cpp @@ -347,12 +347,12 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf } // [ZZ] Fire WorldThingDied script hook. - E_WorldThingDied(this, inflictor); + Level->localEventManager->WorldThingDied(this, inflictor); // [JM] Fire KILL type scripts for actor. Not needed for players, since they have the "DEATH" script type. if (!player && !(flags7 & MF7_NOKILLSCRIPTS) && ((flags7 & MF7_USEKILLSCRIPTS) || gameinfo.forcekillscripts)) { - level.Behaviors.StartTypedScripts(SCRIPT_Kill, this, true, 0, true); + Level->Behaviors.StartTypedScripts(SCRIPT_Kill, this, true, 0, true); } flags &= ~(MF_SHOOTABLE|MF_FLOAT|MF_SKULLFLY); @@ -387,7 +387,7 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf } if (CountsAsKill()) - level.killed_monsters++; + Level->killed_monsters++; if (source && source->player) { @@ -399,9 +399,9 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf // Don't count any frags at level start, because they're just telefrags // resulting from insufficient deathmatch starts, and it wouldn't be // fair to count them toward a player's score. - if (player && level.maptime) + if (player && Level->maptime) { - source->player->frags[player - players]++; + source->player->frags[Level->PlayerNum(player)]++; if (player == source->player) // [RH] Cumulative frag count { char buff[256]; @@ -492,13 +492,13 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf source->player->multicount++; if (source->player->lastkilltime > 0) { - if (source->player->lastkilltime < level.time - 3*TICRATE) + if (source->player->lastkilltime < Level->time - 3*TICRATE) { source->player->multicount = 1; } if (deathmatch && - source->CheckLocalView (consoleplayer) && + source->CheckLocalView() && cl_showmultikills) { const char *multimsg; @@ -535,7 +535,7 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf } } } - source->player->lastkilltime = level.time; + source->player->lastkilltime = Level->time; } // [RH] Implement fraglimit @@ -543,15 +543,15 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf fraglimit <= D_GetFragCount (source->player)) { Printf ("%s\n", GStrings("TXT_FRAGLIMIT")); - G_ExitLevel (0, false); + Level->ExitLevel (0, false); } } } - else if (!multiplayer && CountsAsKill()) + else if (!multiplayer && CountsAsKill() && Level->isPrimaryLevel()) { // count all monster deaths, // even those caused by other monsters - players[0].killcount++; + Level->Players[0]->killcount++; } if (player) @@ -560,28 +560,29 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf ClientObituary (this, inflictor, source, dmgflags, MeansOfDeath); // [ZZ] fire player death hook - E_PlayerDied(int(player - players)); + Level->localEventManager->PlayerDied(Level->PlayerNum(player)); // Death script execution, care of Skull Tag - level.Behaviors.StartTypedScripts (SCRIPT_Death, this, true); + Level->Behaviors.StartTypedScripts (SCRIPT_Death, this, true); // [RH] Force a delay between death and respawn - player->respawn_time = level.time + TICRATE; + player->respawn_time = Level->time + TICRATE; //Added by MC: Respawn bots - if (bglobal.botnum && !demoplayback) + if (Level->BotInfo.botnum && !demoplayback) { if (player->Bot != NULL) - player->Bot->t_respawn = (pr_botrespawn()%15)+((bglobal.botnum-1)*2)+TICRATE+1; + player->Bot->t_respawn = (pr_botrespawn()%15)+((Level->BotInfo.botnum-1)*2)+TICRATE+1; //Added by MC: Discard enemies. for (int i = 0; i < MAXPLAYERS; i++) { - if (players[i].Bot != NULL && this == players[i].Bot->enemy) + DBot *Bot = Level->Players[i]->Bot; + if (Bot != nullptr && this == Bot->enemy) { - if (players[i].Bot->dest == players[i].Bot->enemy) - players[i].Bot->dest = nullptr; - players[i].Bot->enemy = nullptr; + if (Bot->dest == Bot->enemy) + Bot->dest = nullptr; + Bot->enemy = nullptr; } } @@ -592,7 +593,7 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf // count environment kills against you if (!source) { - player->frags[player - players]++; + player->frags[Level->PlayerNum(player)]++; player->fragcount--; // [RH] Cumulative frag count } @@ -605,7 +606,7 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf VMCall(func, ¶m, 1, nullptr, 0); } - if (this == players[consoleplayer].camera && automapactive) + if (Level->isCamera(this) && automapactive) { // don't die in auto map, switch view prior to dying AM_Stop (); @@ -617,8 +618,7 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf } // [RH] If this is the unmorphed version of another monster, destroy this - // actor, because the morphed version is the one that will stick around in - // the level. + // actor, because the morphed version is the one that will stick around. if (flags & MF_UNMORPHED) { Destroy (); @@ -1247,7 +1247,7 @@ static int DamageMobj (AActor *target, AActor *inflictor, AActor *source, int da //Use the original damage to check for telefrag amount. Don't let the now-amplified damagetypes do it. if (!telefragDamage || (target->flags7 & MF7_LAXTELEFRAGDMG)) { // Still allow telefragging :-( - damage = (int)(damage * level.teamdamage); + damage = (int)(damage * target->Level->teamdamage); if (damage <= 0) { return (damage < 0) ? -1 : 0; @@ -1352,7 +1352,7 @@ static int DamageMobj (AActor *target, AActor *inflictor, AActor *source, int da player->damagecount = 100; // teleport stomp does 10k points... } temp = damage < 100 ? damage : 100; - if (player == &players[consoleplayer]) + if (player == target->Level->GetConsolePlayer() ) { I_Tactile (40,10,40+temp*2); } @@ -1460,7 +1460,7 @@ static int DamageMobj (AActor *target, AActor *inflictor, AActor *source, int da } const int realdamage = MAX(0, damage); - E_WorldThingDamaged(target, inflictor, source, realdamage, mod, flags, angle); + target->Level->localEventManager->WorldThingDamaged(target, inflictor, source, realdamage, mod, flags, angle); needevent = false; target->CallDie (source, inflictor, flags, MeansOfDeath); @@ -1481,7 +1481,7 @@ static int DoDamageMobj(AActor *target, AActor *inflictor, AActor *source, int d if (realdamage > 0 && needevent) { // [ZZ] event handlers only need the resultant damage (they can't do anything about it anyway) - E_WorldThingDamaged(target, inflictor, source, realdamage, mod, flags, angle); + target->Level->localEventManager->WorldThingDamaged(target, inflictor, source, realdamage, mod, flags, angle); } return MAX(0, realdamage); @@ -1623,7 +1623,7 @@ bool AActor::OkayToSwitchTarget(AActor *other) int infight; if (flags7 & MF7_FORCEINFIGHTING) infight = 1; else if (flags5 & MF5_NOINFIGHTING) infight = -1; - else infight = G_SkillProperty(SKILLP_Infight); + else infight = Level->GetInfighting(); if (infight < 0 && other->player == NULL && !IsHostile (other)) { @@ -1681,7 +1681,7 @@ bool P_PoisonPlayer (player_t *player, AActor *poisoner, AActor *source, int poi } if (source != NULL && source->player != player && player->mo->IsTeammate (source)) { - poison = (int)(poison * level.teamdamage); + poison = (int)(poison * player->mo->Level->teamdamage); } if (poison > 0) { @@ -1802,7 +1802,7 @@ void P_PoisonDamage (player_t *player, AActor *source, int damage, bool playPain return; } } - if (!(level.time&63) && playPainSound) + if (!(target->Level->time&63) && playPainSound) { FState *painstate = target->FindState(NAME_Pain, player->poisonpaintype); if (painstate != NULL) diff --git a/src/p_lnspec.cpp b/src/p_lnspec.cpp index be79b0079f..8e0a56ec01 100644 --- a/src/p_lnspec.cpp +++ b/src/p_lnspec.cpp @@ -71,7 +71,7 @@ static const uint8_t ChangeMap[8] = { 0, 1, 5, 3, 7, 2, 6, 0 }; -#define FUNC(a) static int a (line_t *ln, AActor *it, bool backSide, \ +#define FUNC(a) static int a (FLevelLocals *Level, line_t *ln, AActor *it, bool backSide, \ int arg0, int arg1, int arg2, int arg3, int arg4) #define SPEED(a) ((a) / 8.) @@ -141,115 +141,115 @@ FUNC(LS_NOP) FUNC(LS_Polyobj_RotateLeft) // Polyobj_RotateLeft (po, speed, angle) { - return EV_RotatePoly (ln, arg0, arg1, arg2, 1, false); + return EV_RotatePoly (Level, ln, arg0, arg1, arg2, 1, false); } FUNC(LS_Polyobj_RotateRight) // Polyobj_rotateRight (po, speed, angle) { - return EV_RotatePoly (ln, arg0, arg1, arg2, -1, false); + return EV_RotatePoly (Level, ln, arg0, arg1, arg2, -1, false); } FUNC(LS_Polyobj_Move) // Polyobj_Move (po, speed, angle, distance) { - return EV_MovePoly (ln, arg0, SPEED(arg1), BYTEANGLE(arg2), arg3, false); + return EV_MovePoly (Level, ln, arg0, SPEED(arg1), BYTEANGLE(arg2), arg3, false); } FUNC(LS_Polyobj_MoveTimes8) // Polyobj_MoveTimes8 (po, speed, angle, distance) { - return EV_MovePoly (ln, arg0, SPEED(arg1), BYTEANGLE(arg2), arg3 * 8, false); + return EV_MovePoly (Level, ln, arg0, SPEED(arg1), BYTEANGLE(arg2), arg3 * 8, false); } FUNC(LS_Polyobj_MoveTo) // Polyobj_MoveTo (po, speed, x, y) { - return EV_MovePolyTo (ln, arg0, SPEED(arg1), DVector2(arg2, arg3), false); + return EV_MovePolyTo (Level, ln, arg0, SPEED(arg1), DVector2(arg2, arg3), false); } FUNC(LS_Polyobj_MoveToSpot) // Polyobj_MoveToSpot (po, speed, tid) { - FActorIterator iterator (arg2); + auto iterator = Level->GetActorIterator(arg2); AActor *spot = iterator.Next(); if (spot == NULL) return false; - return EV_MovePolyTo (ln, arg0, SPEED(arg1), spot->Pos(), false); + return EV_MovePolyTo (Level, ln, arg0, SPEED(arg1), spot->Pos(), false); } FUNC(LS_Polyobj_DoorSwing) // Polyobj_DoorSwing (po, speed, angle, delay) { - return EV_OpenPolyDoor (ln, arg0, arg1, BYTEANGLE(arg2), arg3, 0, PODOOR_SWING); + return EV_OpenPolyDoor (Level, ln, arg0, arg1, BYTEANGLE(arg2), arg3, 0, PODOOR_SWING); } FUNC(LS_Polyobj_DoorSlide) // Polyobj_DoorSlide (po, speed, angle, distance, delay) { - return EV_OpenPolyDoor (ln, arg0, SPEED(arg1), BYTEANGLE(arg2), arg4, arg3, PODOOR_SLIDE); + return EV_OpenPolyDoor (Level, ln, arg0, SPEED(arg1), BYTEANGLE(arg2), arg4, arg3, PODOOR_SLIDE); } FUNC(LS_Polyobj_OR_RotateLeft) // Polyobj_OR_RotateLeft (po, speed, angle) { - return EV_RotatePoly (ln, arg0, arg1, arg2, 1, true); + return EV_RotatePoly (Level, ln, arg0, arg1, arg2, 1, true); } FUNC(LS_Polyobj_OR_RotateRight) // Polyobj_OR_RotateRight (po, speed, angle) { - return EV_RotatePoly (ln, arg0, arg1, arg2, -1, true); + return EV_RotatePoly (Level, ln, arg0, arg1, arg2, -1, true); } FUNC(LS_Polyobj_OR_Move) // Polyobj_OR_Move (po, speed, angle, distance) { - return EV_MovePoly (ln, arg0, SPEED(arg1), BYTEANGLE(arg2), arg3, true); + return EV_MovePoly (Level, ln, arg0, SPEED(arg1), BYTEANGLE(arg2), arg3, true); } FUNC(LS_Polyobj_OR_MoveTimes8) // Polyobj_OR_MoveTimes8 (po, speed, angle, distance) { - return EV_MovePoly (ln, arg0, SPEED(arg1), BYTEANGLE(arg2), arg3 * 8, true); + return EV_MovePoly (Level, ln, arg0, SPEED(arg1), BYTEANGLE(arg2), arg3 * 8, true); } FUNC(LS_Polyobj_OR_MoveTo) // Polyobj_OR_MoveTo (po, speed, x, y) { - return EV_MovePolyTo (ln, arg0, SPEED(arg1), DVector2(arg2, arg3), true); + return EV_MovePolyTo (Level, ln, arg0, SPEED(arg1), DVector2(arg2, arg3), true); } FUNC(LS_Polyobj_OR_MoveToSpot) // Polyobj_OR_MoveToSpot (po, speed, tid) { - FActorIterator iterator (arg2); + auto iterator = Level->GetActorIterator(arg2); AActor *spot = iterator.Next(); if (spot == NULL) return false; - return EV_MovePolyTo (ln, arg0, SPEED(arg1), spot->Pos(), true); + return EV_MovePolyTo (Level, ln, arg0, SPEED(arg1), spot->Pos(), true); } FUNC(LS_Polyobj_Stop) // Polyobj_Stop (po) { - return EV_StopPoly (arg0); + return EV_StopPoly (Level, arg0); } FUNC(LS_Door_Close) // Door_Close (tag, speed, lighttag) { - return EV_DoDoor (DDoor::doorClose, ln, it, arg0, SPEED(arg1), 0, 0, arg2); + return Level->EV_DoDoor (DDoor::doorClose, ln, it, arg0, SPEED(arg1), 0, 0, arg2); } FUNC(LS_Door_Open) // Door_Open (tag, speed, lighttag) { - return EV_DoDoor (DDoor::doorOpen, ln, it, arg0, SPEED(arg1), 0, 0, arg2); + return Level->EV_DoDoor (DDoor::doorOpen, ln, it, arg0, SPEED(arg1), 0, 0, arg2); } FUNC(LS_Door_Raise) // Door_Raise (tag, speed, delay, lighttag) { - return EV_DoDoor (DDoor::doorRaise, ln, it, arg0, SPEED(arg1), TICS(arg2), 0, arg3); + return Level->EV_DoDoor (DDoor::doorRaise, ln, it, arg0, SPEED(arg1), TICS(arg2), 0, arg3); } FUNC(LS_Door_LockedRaise) @@ -258,9 +258,9 @@ FUNC(LS_Door_LockedRaise) #if 0 // In Hexen this originally created a thinker running for nearly 4 years. // Let's not do this unless it becomes necessary because this can hang tagwait. - return EV_DoDoor (arg2 || (level.flags2 & LEVEL2_HEXENHACK) ? DDoor::doorRaise : DDoor::doorOpen, ln, it, + return Level->EV_DoDoor (arg2 || (Level->flags2 & LEVEL2_HEXENHACK) ? DDoor::doorRaise : DDoor::doorOpen, ln, it, #else - return EV_DoDoor (arg2 ? DDoor::doorRaise : DDoor::doorOpen, ln, it, + return Level->EV_DoDoor (arg2 ? DDoor::doorRaise : DDoor::doorOpen, ln, it, #endif arg0, SPEED(arg1), TICS(arg2), arg3, arg4); } @@ -268,19 +268,19 @@ FUNC(LS_Door_LockedRaise) FUNC(LS_Door_CloseWaitOpen) // Door_CloseWaitOpen (tag, speed, delay, lighttag) { - return EV_DoDoor (DDoor::doorCloseWaitOpen, ln, it, arg0, SPEED(arg1), OCTICS(arg2), 0, arg3); + return Level->EV_DoDoor (DDoor::doorCloseWaitOpen, ln, it, arg0, SPEED(arg1), OCTICS(arg2), 0, arg3); } FUNC(LS_Door_WaitRaise) // Door_WaitRaise(tag, speed, delay, wait, lighttag) { - return EV_DoDoor(DDoor::doorWaitRaise, ln, it, arg0, SPEED(arg1), TICS(arg2), 0, arg4, false, TICS(arg3)); + return Level->EV_DoDoor(DDoor::doorWaitRaise, ln, it, arg0, SPEED(arg1), TICS(arg2), 0, arg4, false, TICS(arg3)); } FUNC(LS_Door_WaitClose) // Door_WaitRaise(tag, speed, wait, lighttag) { - return EV_DoDoor(DDoor::doorWaitClose, ln, it, arg0, SPEED(arg1), 0, 0, arg3, false, TICS(arg2)); + return Level->EV_DoDoor(DDoor::doorWaitClose, ln, it, arg0, SPEED(arg1), 0, 0, arg3, false, TICS(arg2)); } FUNC(LS_Door_Animated) @@ -289,13 +289,13 @@ FUNC(LS_Door_Animated) if (arg3 != 0 && !P_CheckKeys (it, arg3, arg0 != 0)) return false; - return EV_SlidingDoor (ln, it, arg0, arg1, arg2, DAnimatedDoor::adOpenClose); + return Level->EV_SlidingDoor (ln, it, arg0, arg1, arg2, DAnimatedDoor::adOpenClose); } FUNC(LS_Door_AnimatedClose) // Door_AnimatedClose (tag, speed) { - return EV_SlidingDoor(ln, it, arg0, arg1, -1, DAnimatedDoor::adClose); + return Level->EV_SlidingDoor(ln, it, arg0, arg1, -1, DAnimatedDoor::adClose); } FUNC(LS_Generic_Door) @@ -326,203 +326,203 @@ FUNC(LS_Generic_Door) tag = arg0; lightTag = 0; } - return EV_DoDoor (type, ln, it, tag, SPEED(arg1), OCTICS(arg3), arg4, lightTag, boomgen); + return Level->EV_DoDoor (type, ln, it, tag, SPEED(arg1), OCTICS(arg3), arg4, lightTag, boomgen); } FUNC(LS_Floor_LowerByValue) // Floor_LowerByValue (tag, speed, height, change) { - return EV_DoFloor (DFloor::floorLowerByValue, ln, arg0, SPEED(arg1), arg2, -1, CHANGE(arg3), false); + return Level->EV_DoFloor (DFloor::floorLowerByValue, ln, arg0, SPEED(arg1), arg2, -1, CHANGE(arg3), false); } FUNC(LS_Floor_LowerToLowest) // Floor_LowerToLowest (tag, speed, change) { - return EV_DoFloor (DFloor::floorLowerToLowest, ln, arg0, SPEED(arg1), 0, -1, CHANGE(arg2), false); + return Level->EV_DoFloor (DFloor::floorLowerToLowest, ln, arg0, SPEED(arg1), 0, -1, CHANGE(arg2), false); } FUNC(LS_Floor_LowerToHighest) // Floor_LowerToHighest (tag, speed, adjust, hereticlower) { - return EV_DoFloor (DFloor::floorLowerToHighest, ln, arg0, SPEED(arg1), (arg2-128), -1, 0, false, arg3==1); + return Level->EV_DoFloor (DFloor::floorLowerToHighest, ln, arg0, SPEED(arg1), (arg2-128), -1, 0, false, arg3==1); } FUNC(LS_Floor_LowerToHighestEE) // Floor_LowerToHighestEE (tag, speed, change) { - return EV_DoFloor (DFloor::floorLowerToHighest, ln, arg0, SPEED(arg1), 0, -1, CHANGE(arg2), false); + return Level->EV_DoFloor (DFloor::floorLowerToHighest, ln, arg0, SPEED(arg1), 0, -1, CHANGE(arg2), false); } FUNC(LS_Floor_LowerToNearest) // Floor_LowerToNearest (tag, speed, change) { - return EV_DoFloor (DFloor::floorLowerToNearest, ln, arg0, SPEED(arg1), 0, -1, CHANGE(arg2), false); + return Level->EV_DoFloor (DFloor::floorLowerToNearest, ln, arg0, SPEED(arg1), 0, -1, CHANGE(arg2), false); } FUNC(LS_Floor_RaiseByValue) // Floor_RaiseByValue (tag, speed, height, change, crush) { - return EV_DoFloor (DFloor::floorRaiseByValue, ln, arg0, SPEED(arg1), arg2, CRUSH(arg4), CHANGE(arg3), true); + return Level->EV_DoFloor (DFloor::floorRaiseByValue, ln, arg0, SPEED(arg1), arg2, CRUSH(arg4), CHANGE(arg3), true); } FUNC(LS_Floor_RaiseToHighest) // Floor_RaiseToHighest (tag, speed, change, crush) { - return EV_DoFloor (DFloor::floorRaiseToHighest, ln, arg0, SPEED(arg1), 0, CRUSH(arg3), CHANGE(arg2), true); + return Level->EV_DoFloor (DFloor::floorRaiseToHighest, ln, arg0, SPEED(arg1), 0, CRUSH(arg3), CHANGE(arg2), true); } FUNC(LS_Floor_RaiseToNearest) // Floor_RaiseToNearest (tag, speed, change, crush) { - return EV_DoFloor (DFloor::floorRaiseToNearest, ln, arg0, SPEED(arg1), 0, CRUSH(arg3), CHANGE(arg2), true); + return Level->EV_DoFloor (DFloor::floorRaiseToNearest, ln, arg0, SPEED(arg1), 0, CRUSH(arg3), CHANGE(arg2), true); } FUNC(LS_Floor_RaiseToLowest) // Floor_RaiseToLowest (tag, change, crush) { // This is merely done for completeness as it's a rather pointless addition. - return EV_DoFloor (DFloor::floorRaiseToLowest, ln, arg0, 2., 0, CRUSH(arg3), CHANGE(arg2), true); + return Level->EV_DoFloor (DFloor::floorRaiseToLowest, ln, arg0, 2., 0, CRUSH(arg3), CHANGE(arg2), true); } FUNC(LS_Floor_RaiseAndCrush) // Floor_RaiseAndCrush (tag, speed, crush, crushmode) { - return EV_DoFloor (DFloor::floorRaiseAndCrush, ln, arg0, SPEED(arg1), 0, arg2, 0, CRUSHTYPE(arg3)); + return Level->EV_DoFloor (DFloor::floorRaiseAndCrush, ln, arg0, SPEED(arg1), 0, arg2, 0, CRUSHTYPE(arg3)); } FUNC(LS_Floor_RaiseAndCrushDoom) // Floor_RaiseAndCrushDoom (tag, speed, crush, crushmode) { - return EV_DoFloor (DFloor::floorRaiseAndCrushDoom, ln, arg0, SPEED(arg1), 0, arg2, 0, CRUSHTYPE(arg3)); + return Level->EV_DoFloor (DFloor::floorRaiseAndCrushDoom, ln, arg0, SPEED(arg1), 0, arg2, 0, CRUSHTYPE(arg3)); } FUNC(LS_Floor_RaiseByValueTimes8) // FLoor_RaiseByValueTimes8 (tag, speed, height, change, crush) { - return EV_DoFloor (DFloor::floorRaiseByValue, ln, arg0, SPEED(arg1), arg2*8, CRUSH(arg4), CHANGE(arg3), true); + return Level->EV_DoFloor (DFloor::floorRaiseByValue, ln, arg0, SPEED(arg1), arg2*8, CRUSH(arg4), CHANGE(arg3), true); } FUNC(LS_Floor_LowerByValueTimes8) // Floor_LowerByValueTimes8 (tag, speed, height, change) { - return EV_DoFloor (DFloor::floorLowerByValue, ln, arg0, SPEED(arg1), arg2*8, -1, CHANGE(arg3), false); + return Level->EV_DoFloor (DFloor::floorLowerByValue, ln, arg0, SPEED(arg1), arg2*8, -1, CHANGE(arg3), false); } FUNC(LS_Floor_CrushStop) // Floor_CrushStop (tag) { - return EV_FloorCrushStop (arg0, ln); + return Level->EV_FloorCrushStop (arg0, ln); } FUNC(LS_Floor_LowerInstant) // Floor_LowerInstant (tag, unused, height, change) { - return EV_DoFloor (DFloor::floorLowerInstant, ln, arg0, 0., arg2*8, -1, CHANGE(arg3), false); + return Level->EV_DoFloor (DFloor::floorLowerInstant, ln, arg0, 0., arg2*8, -1, CHANGE(arg3), false); } FUNC(LS_Floor_RaiseInstant) // Floor_RaiseInstant (tag, unused, height, change, crush) { - return EV_DoFloor (DFloor::floorRaiseInstant, ln, arg0, 0., arg2*8, CRUSH(arg4), CHANGE(arg3), true); + return Level->EV_DoFloor (DFloor::floorRaiseInstant, ln, arg0, 0., arg2*8, CRUSH(arg4), CHANGE(arg3), true); } FUNC(LS_Floor_ToCeilingInstant) // Floor_ToCeilingInstant (tag, change, crush, gap) { - return EV_DoFloor (DFloor::floorLowerToCeiling, ln, arg0, 0, arg3, CRUSH(arg2), CHANGE(arg1), true); + return Level->EV_DoFloor (DFloor::floorLowerToCeiling, ln, arg0, 0, arg3, CRUSH(arg2), CHANGE(arg1), true); } FUNC(LS_Floor_MoveToValueTimes8) // Floor_MoveToValueTimes8 (tag, speed, height, negative, change) { - return EV_DoFloor (DFloor::floorMoveToValue, ln, arg0, SPEED(arg1), + return Level->EV_DoFloor (DFloor::floorMoveToValue, ln, arg0, SPEED(arg1), arg2*8*(arg3?-1:1), -1, CHANGE(arg4), false); } FUNC(LS_Floor_MoveToValue) // Floor_MoveToValue (tag, speed, height, negative, change) { - return EV_DoFloor (DFloor::floorMoveToValue, ln, arg0, SPEED(arg1), + return Level->EV_DoFloor (DFloor::floorMoveToValue, ln, arg0, SPEED(arg1), arg2*(arg3?-1:1), -1, CHANGE(arg4), false); } FUNC(LS_Floor_MoveToValueAndCrush) // Floor_MoveToValueAndCrush (tag, speed, height, crush, crushmode) { - return EV_DoFloor(DFloor::floorMoveToValue, ln, arg0, SPEED(arg1), + return Level->EV_DoFloor(DFloor::floorMoveToValue, ln, arg0, SPEED(arg1), arg2, CRUSH(arg3) -1, 0, CRUSHTYPE(arg4), false); } FUNC(LS_Floor_RaiseToLowestCeiling) // Floor_RaiseToLowestCeiling (tag, speed, change, crush) { - return EV_DoFloor (DFloor::floorRaiseToLowestCeiling, ln, arg0, SPEED(arg1), 0, CRUSH(arg3), CHANGE(arg2), true); + return Level->EV_DoFloor (DFloor::floorRaiseToLowestCeiling, ln, arg0, SPEED(arg1), 0, CRUSH(arg3), CHANGE(arg2), true); } FUNC(LS_Floor_LowerToLowestCeiling) // Floor_LowerToLowestCeiling (tag, speed, change) { - return EV_DoFloor (DFloor::floorLowerToLowestCeiling, ln, arg0, SPEED(arg1), arg4, -1, CHANGE(arg2), true); + return Level->EV_DoFloor (DFloor::floorLowerToLowestCeiling, ln, arg0, SPEED(arg1), arg4, -1, CHANGE(arg2), true); } FUNC(LS_Floor_RaiseByTexture) // Floor_RaiseByTexture (tag, speed, change, crush) { - return EV_DoFloor (DFloor::floorRaiseByTexture, ln, arg0, SPEED(arg1), 0, CRUSH(arg3), CHANGE(arg2), true); + return Level->EV_DoFloor (DFloor::floorRaiseByTexture, ln, arg0, SPEED(arg1), 0, CRUSH(arg3), CHANGE(arg2), true); } FUNC(LS_Floor_LowerByTexture) // Floor_LowerByTexture (tag, speed, change, crush) { - return EV_DoFloor (DFloor::floorLowerByTexture, ln, arg0, SPEED(arg1), 0, -1, CHANGE(arg2), true); + return Level->EV_DoFloor (DFloor::floorLowerByTexture, ln, arg0, SPEED(arg1), 0, -1, CHANGE(arg2), true); } FUNC(LS_Floor_RaiseToCeiling) // Floor_RaiseToCeiling (tag, speed, change, crush, gap) { - return EV_DoFloor (DFloor::floorRaiseToCeiling, ln, arg0, SPEED(arg1), arg4, CRUSH(arg3), CHANGE(arg2), true); + return Level->EV_DoFloor (DFloor::floorRaiseToCeiling, ln, arg0, SPEED(arg1), arg4, CRUSH(arg3), CHANGE(arg2), true); } FUNC(LS_Floor_RaiseByValueTxTy) // Floor_RaiseByValueTxTy (tag, speed, height) { - return EV_DoFloor (DFloor::floorRaiseAndChange, ln, arg0, SPEED(arg1), arg2, -1, 0, false); + return Level->EV_DoFloor (DFloor::floorRaiseAndChange, ln, arg0, SPEED(arg1), arg2, -1, 0, false); } FUNC(LS_Floor_LowerToLowestTxTy) // Floor_LowerToLowestTxTy (tag, speed) { - return EV_DoFloor (DFloor::floorLowerAndChange, ln, arg0, SPEED(arg1), arg2, -1, 0, false); + return Level->EV_DoFloor (DFloor::floorLowerAndChange, ln, arg0, SPEED(arg1), arg2, -1, 0, false); } FUNC(LS_Floor_Waggle) // Floor_Waggle (tag, amplitude, frequency, delay, time) { - return EV_StartWaggle (arg0, ln, arg1, arg2, arg3, arg4, false); + return Level->EV_StartWaggle (arg0, ln, arg1, arg2, arg3, arg4, false); } FUNC(LS_Ceiling_Waggle) // Ceiling_Waggle (tag, amplitude, frequency, delay, time) { - return EV_StartWaggle (arg0, ln, arg1, arg2, arg3, arg4, true); + return Level->EV_StartWaggle (arg0, ln, arg1, arg2, arg3, arg4, true); } FUNC(LS_Floor_TransferTrigger) // Floor_TransferTrigger (tag) { - return EV_DoChange (ln, trigChangeOnly, arg0); + return Level->EV_DoChange (ln, trigChangeOnly, arg0); } FUNC(LS_Floor_TransferNumeric) // Floor_TransferNumeric (tag) { - return EV_DoChange (ln, numChangeOnly, arg0); + return Level->EV_DoChange (ln, numChangeOnly, arg0); } FUNC(LS_Floor_Donut) // Floor_Donut (pillartag, pillarspeed, slimespeed) { - return EV_DoDonut (arg0, ln, SPEED(arg1), SPEED(arg2)); + return Level->EV_DoDonut (arg0, ln, SPEED(arg1), SPEED(arg2)); } FUNC(LS_Generic_Floor) @@ -557,7 +557,7 @@ FUNC(LS_Generic_Floor) } } - return EV_DoFloor (type, ln, arg0, SPEED(arg1), arg2, + return Level->EV_DoFloor (type, ln, arg0, SPEED(arg1), arg2, (arg4 & 16) ? 20 : -1, arg4 & 7, false); } @@ -565,70 +565,70 @@ FUNC(LS_Generic_Floor) FUNC(LS_Floor_Stop) // Floor_Stop (tag) { - return EV_StopFloor(arg0, ln); + return Level->EV_StopFloor(arg0, ln); } FUNC(LS_Stairs_BuildDown) // Stair_BuildDown (tag, speed, height, delay, reset) { - return EV_BuildStairs (arg0, DFloor::buildDown, ln, + return Level->EV_BuildStairs (arg0, DFloor::buildDown, ln, arg2, SPEED(arg1), TICS(arg3), arg4, 0, DFloor::stairUseSpecials); } FUNC(LS_Stairs_BuildUp) // Stairs_BuildUp (tag, speed, height, delay, reset) { - return EV_BuildStairs (arg0, DFloor::buildUp, ln, + return Level->EV_BuildStairs (arg0, DFloor::buildUp, ln, arg2, SPEED(arg1), TICS(arg3), arg4, 0, DFloor::stairUseSpecials); } FUNC(LS_Stairs_BuildDownSync) // Stairs_BuildDownSync (tag, speed, height, reset) { - return EV_BuildStairs (arg0, DFloor::buildDown, ln, + return Level->EV_BuildStairs (arg0, DFloor::buildDown, ln, arg2, SPEED(arg1), 0, arg3, 0, DFloor::stairUseSpecials|DFloor::stairSync); } FUNC(LS_Stairs_BuildUpSync) // Stairs_BuildUpSync (tag, speed, height, reset) { - return EV_BuildStairs (arg0, DFloor::buildUp, ln, + return Level->EV_BuildStairs (arg0, DFloor::buildUp, ln, arg2, SPEED(arg1), 0, arg3, 0, DFloor::stairUseSpecials|DFloor::stairSync); } FUNC(LS_Stairs_BuildUpDoom) // Stairs_BuildUpDoom (tag, speed, height, delay, reset) { - return EV_BuildStairs (arg0, DFloor::buildUp, ln, + return Level->EV_BuildStairs (arg0, DFloor::buildUp, ln, arg2, SPEED(arg1), TICS(arg3), arg4, 0, 0); } FUNC(LS_Stairs_BuildUpDoomCrush) // Stairs_BuildUpDoom (tag, speed, height, delay, reset) { - return EV_BuildStairs(arg0, DFloor::buildUp, ln, + return Level->EV_BuildStairs(arg0, DFloor::buildUp, ln, arg2, SPEED(arg1), TICS(arg3), arg4, 0, DFloor::stairCrush); } FUNC(LS_Stairs_BuildDownDoom) // Stair_BuildDownDoom (tag, speed, height, delay, reset) { - return EV_BuildStairs (arg0, DFloor::buildDown, ln, + return Level->EV_BuildStairs (arg0, DFloor::buildDown, ln, arg2, SPEED(arg1), TICS(arg3), arg4, 0, 0); } FUNC(LS_Stairs_BuildDownDoomSync) // Stairs_BuildDownDoomSync (tag, speed, height, reset) { - return EV_BuildStairs (arg0, DFloor::buildDown, ln, + return Level->EV_BuildStairs (arg0, DFloor::buildDown, ln, arg2, SPEED(arg1), 0, arg3, 0, DFloor::stairSync); } FUNC(LS_Stairs_BuildUpDoomSync) // Stairs_BuildUpDoomSync (tag, speed, height, reset) { - return EV_BuildStairs (arg0, DFloor::buildUp, ln, + return Level->EV_BuildStairs (arg0, DFloor::buildUp, ln, arg2, SPEED(arg1), 0, arg3, 0, DFloor::stairSync); } @@ -637,7 +637,7 @@ FUNC(LS_Generic_Stairs) // Generic_Stairs (tag, speed, step, dir/igntxt, reset) { DFloor::EStair type = (arg3 & 1) ? DFloor::buildUp : DFloor::buildDown; - bool res = EV_BuildStairs (arg0, type, ln, + bool res = Level->EV_BuildStairs (arg0, type, ln, arg2, SPEED(arg1), 0, arg4, arg3 & 2, 0); if (res && ln && (ln->flags & ML_REPEAT_SPECIAL) && ln->special == Generic_Stairs) @@ -650,61 +650,61 @@ FUNC(LS_Generic_Stairs) FUNC(LS_Pillar_Build) // Pillar_Build (tag, speed, height) { - return EV_DoPillar (DPillar::pillarBuild, ln, arg0, SPEED(arg1), arg2, 0, -1, false); + return Level->EV_DoPillar (DPillar::pillarBuild, ln, arg0, SPEED(arg1), arg2, 0, -1, false); } FUNC(LS_Pillar_BuildAndCrush) // Pillar_BuildAndCrush (tag, speed, height, crush, crushtype) { - return EV_DoPillar (DPillar::pillarBuild, ln, arg0, SPEED(arg1), arg2, 0, arg3, CRUSHTYPE(arg4)); + return Level->EV_DoPillar (DPillar::pillarBuild, ln, arg0, SPEED(arg1), arg2, 0, arg3, CRUSHTYPE(arg4)); } FUNC(LS_Pillar_Open) // Pillar_Open (tag, speed, f_height, c_height) { - return EV_DoPillar (DPillar::pillarOpen, ln, arg0, SPEED(arg1), arg2, arg3, -1, false); + return Level->EV_DoPillar (DPillar::pillarOpen, ln, arg0, SPEED(arg1), arg2, arg3, -1, false); } FUNC(LS_Ceiling_LowerByValue) // Ceiling_LowerByValue (tag, speed, height, change, crush) { - return EV_DoCeiling (DCeiling::ceilLowerByValue, ln, arg0, SPEED(arg1), 0, arg2, CRUSH(arg4), 0, CHANGE(arg3)); + return Level->EV_DoCeiling (DCeiling::ceilLowerByValue, ln, arg0, SPEED(arg1), 0, arg2, CRUSH(arg4), 0, CHANGE(arg3)); } FUNC(LS_Ceiling_RaiseByValue) // Ceiling_RaiseByValue (tag, speed, height, change) { - return EV_DoCeiling (DCeiling::ceilRaiseByValue, ln, arg0, SPEED(arg1), 0, arg2, CRUSH(arg4), 0, CHANGE(arg3)); + return Level->EV_DoCeiling (DCeiling::ceilRaiseByValue, ln, arg0, SPEED(arg1), 0, arg2, CRUSH(arg4), 0, CHANGE(arg3)); } FUNC(LS_Ceiling_LowerByValueTimes8) // Ceiling_LowerByValueTimes8 (tag, speed, height, change, crush) { - return EV_DoCeiling (DCeiling::ceilLowerByValue, ln, arg0, SPEED(arg1), 0, arg2*8, -1, 0, CHANGE(arg3)); + return Level->EV_DoCeiling (DCeiling::ceilLowerByValue, ln, arg0, SPEED(arg1), 0, arg2*8, -1, 0, CHANGE(arg3)); } FUNC(LS_Ceiling_RaiseByValueTimes8) // Ceiling_RaiseByValueTimes8 (tag, speed, height, change) { - return EV_DoCeiling (DCeiling::ceilRaiseByValue, ln, arg0, SPEED(arg1), 0, arg2*8, -1, 0, CHANGE(arg3)); + return Level->EV_DoCeiling (DCeiling::ceilRaiseByValue, ln, arg0, SPEED(arg1), 0, arg2*8, -1, 0, CHANGE(arg3)); } FUNC(LS_Ceiling_CrushAndRaise) // Ceiling_CrushAndRaise (tag, speed, crush, crushtype) { - return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), SPEED(arg1)/2, 8, arg2, 0, 0, CRUSHTYPE(arg3, false)); + return Level->EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), SPEED(arg1)/2, 8, arg2, 0, 0, CRUSHTYPE(arg3, false)); } FUNC(LS_Ceiling_LowerAndCrush) // Ceiling_LowerAndCrush (tag, speed, crush, crushtype) { - return EV_DoCeiling (DCeiling::ceilLowerAndCrush, ln, arg0, SPEED(arg1), SPEED(arg1), 8, arg2, 0, 0, CRUSHTYPE(arg3, arg1 == 8)); + return Level->EV_DoCeiling (DCeiling::ceilLowerAndCrush, ln, arg0, SPEED(arg1), SPEED(arg1), 8, arg2, 0, 0, CRUSHTYPE(arg3, arg1 == 8)); } FUNC(LS_Ceiling_LowerAndCrushDist) // Ceiling_LowerAndCrush (tag, speed, crush, dist, crushtype) { - return EV_DoCeiling (DCeiling::ceilLowerAndCrush, ln, arg0, SPEED(arg1), SPEED(arg1), arg3, arg2, 0, 0, CRUSHTYPE(arg4, arg1 == 8)); + return Level->EV_DoCeiling (DCeiling::ceilLowerAndCrush, ln, arg0, SPEED(arg1), SPEED(arg1), arg3, arg2, 0, 0, CRUSHTYPE(arg4, arg1 == 8)); } FUNC(LS_Ceiling_CrushStop) @@ -723,160 +723,160 @@ FUNC(LS_Ceiling_CrushStop) remove = gameinfo.gametype == GAME_Hexen; break; } - return EV_CeilingCrushStop (arg0, remove); + return Level->EV_CeilingCrushStop (arg0, remove); } FUNC(LS_Ceiling_CrushRaiseAndStay) // Ceiling_CrushRaiseAndStay (tag, speed, crush, crushtype) { - return EV_DoCeiling (DCeiling::ceilCrushRaiseAndStay, ln, arg0, SPEED(arg1), SPEED(arg1)/2, 8, arg2, 0, 0, CRUSHTYPE(arg3, false)); + return Level->EV_DoCeiling (DCeiling::ceilCrushRaiseAndStay, ln, arg0, SPEED(arg1), SPEED(arg1)/2, 8, arg2, 0, 0, CRUSHTYPE(arg3, false)); } FUNC(LS_Ceiling_MoveToValueTimes8) // Ceiling_MoveToValueTimes8 (tag, speed, height, negative, change) { - return EV_DoCeiling (DCeiling::ceilMoveToValue, ln, arg0, SPEED(arg1), 0, + return Level->EV_DoCeiling (DCeiling::ceilMoveToValue, ln, arg0, SPEED(arg1), 0, arg2*8*((arg3) ? -1 : 1), -1, 0, CHANGE(arg4)); } FUNC(LS_Ceiling_MoveToValue) // Ceiling_MoveToValue (tag, speed, height, negative, change) { - return EV_DoCeiling (DCeiling::ceilMoveToValue, ln, arg0, SPEED(arg1), 0, + return Level->EV_DoCeiling (DCeiling::ceilMoveToValue, ln, arg0, SPEED(arg1), 0, arg2*((arg3) ? -1 : 1), -1, 0, CHANGE(arg4)); } FUNC(LS_Ceiling_MoveToValueAndCrush) // Ceiling_MoveToValueAndCrush (tag, speed, height, crush, crushmode) { - return EV_DoCeiling (DCeiling::ceilMoveToValue, ln, arg0, SPEED(arg1), 0, + return Level->EV_DoCeiling (DCeiling::ceilMoveToValue, ln, arg0, SPEED(arg1), 0, arg2, CRUSH(arg3), 0, 0, CRUSHTYPE(arg4, arg1 == 8)); } FUNC(LS_Ceiling_LowerToHighestFloor) // Ceiling_LowerToHighestFloor (tag, speed, change, crush, gap) { - return EV_DoCeiling (DCeiling::ceilLowerToHighestFloor, ln, arg0, SPEED(arg1), 0, arg4, CRUSH(arg3), 0, CHANGE(arg2)); + return Level->EV_DoCeiling (DCeiling::ceilLowerToHighestFloor, ln, arg0, SPEED(arg1), 0, arg4, CRUSH(arg3), 0, CHANGE(arg2)); } FUNC(LS_Ceiling_LowerInstant) // Ceiling_LowerInstant (tag, unused, height, change, crush) { - return EV_DoCeiling (DCeiling::ceilLowerInstant, ln, arg0, 0, 0, arg2*8, CRUSH(arg4), 0, CHANGE(arg3)); + return Level->EV_DoCeiling (DCeiling::ceilLowerInstant, ln, arg0, 0, 0, arg2*8, CRUSH(arg4), 0, CHANGE(arg3)); } FUNC(LS_Ceiling_RaiseInstant) // Ceiling_RaiseInstant (tag, unused, height, change) { - return EV_DoCeiling (DCeiling::ceilRaiseInstant, ln, arg0, 0, 0, arg2*8, -1, 0, CHANGE(arg3)); + return Level->EV_DoCeiling (DCeiling::ceilRaiseInstant, ln, arg0, 0, 0, arg2*8, -1, 0, CHANGE(arg3)); } FUNC(LS_Ceiling_CrushRaiseAndStayA) // Ceiling_CrushRaiseAndStayA (tag, dnspeed, upspeed, damage, crushtype) { - return EV_DoCeiling (DCeiling::ceilCrushRaiseAndStay, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 0, 0, CRUSHTYPE(arg4, false)); + return Level->EV_DoCeiling (DCeiling::ceilCrushRaiseAndStay, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 0, 0, CRUSHTYPE(arg4, false)); } FUNC(LS_Ceiling_CrushRaiseAndStaySilA) // Ceiling_CrushRaiseAndStaySilA (tag, dnspeed, upspeed, damage, crushtype) { - return EV_DoCeiling (DCeiling::ceilCrushRaiseAndStay, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 1, 0, CRUSHTYPE(arg4, false)); + return Level->EV_DoCeiling (DCeiling::ceilCrushRaiseAndStay, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 1, 0, CRUSHTYPE(arg4, false)); } FUNC(LS_Ceiling_CrushAndRaiseA) // Ceiling_CrushAndRaiseA (tag, dnspeed, upspeed, damage, crushtype) { - return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 0, 0, CRUSHTYPE(arg4, arg1 == 8 && arg2 == 8)); + return Level->EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 0, 0, CRUSHTYPE(arg4, arg1 == 8 && arg2 == 8)); } FUNC(LS_Ceiling_CrushAndRaiseDist) // Ceiling_CrushAndRaiseDist (tag, dist, speed, damage, crushtype) { - return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg2), SPEED(arg2), arg1, arg3, 0, 0, CRUSHTYPE(arg4, arg2 == 8)); + return Level->EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg2), SPEED(arg2), arg1, arg3, 0, 0, CRUSHTYPE(arg4, arg2 == 8)); } FUNC(LS_Ceiling_CrushAndRaiseSilentA) // Ceiling_CrushAndRaiseSilentA (tag, dnspeed, upspeed, damage, crushtype) { - return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 1, 0, CRUSHTYPE(arg4, arg1 == 8 && arg2 == 8)); + return Level->EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg3, 1, 0, CRUSHTYPE(arg4, arg1 == 8 && arg2 == 8)); } FUNC(LS_Ceiling_CrushAndRaiseSilentDist) // Ceiling_CrushAndRaiseSilentDist (tag, dist, upspeed, damage, crushtype) { - return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg2), SPEED(arg2), arg1, arg3, 1, 0, CRUSHTYPE(arg4, arg2 == 8)); + return Level->EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg2), SPEED(arg2), arg1, arg3, 1, 0, CRUSHTYPE(arg4, arg2 == 8)); } FUNC(LS_Ceiling_RaiseToNearest) // Ceiling_RaiseToNearest (tag, speed, change) { - return EV_DoCeiling (DCeiling::ceilRaiseToNearest, ln, arg0, SPEED(arg1), 0, 0, -1, CHANGE(arg2), 0); + return Level->EV_DoCeiling (DCeiling::ceilRaiseToNearest, ln, arg0, SPEED(arg1), 0, 0, -1, CHANGE(arg2), 0); } FUNC(LS_Ceiling_RaiseToHighest) // Ceiling_RaiseToHighest (tag, speed, change) { - return EV_DoCeiling (DCeiling::ceilRaiseToHighest, ln, arg0, SPEED(arg1), 0, 0, -1, CHANGE(arg2), 0); + return Level->EV_DoCeiling (DCeiling::ceilRaiseToHighest, ln, arg0, SPEED(arg1), 0, 0, -1, CHANGE(arg2), 0); } FUNC(LS_Ceiling_RaiseToLowest) // Ceiling_RaiseToLowest (tag, speed, change) { - return EV_DoCeiling (DCeiling::ceilRaiseToLowest, ln, arg0, SPEED(arg1), 0, 0, -1, CHANGE(arg2), 0); + return Level->EV_DoCeiling (DCeiling::ceilRaiseToLowest, ln, arg0, SPEED(arg1), 0, 0, -1, CHANGE(arg2), 0); } FUNC(LS_Ceiling_RaiseToHighestFloor) // Ceiling_RaiseToHighestFloor (tag, speed, change) { - return EV_DoCeiling (DCeiling::ceilRaiseToHighestFloor, ln, arg0, SPEED(arg1), 0, 0, -1, CHANGE(arg2), 0); + return Level->EV_DoCeiling (DCeiling::ceilRaiseToHighestFloor, ln, arg0, SPEED(arg1), 0, 0, -1, CHANGE(arg2), 0); } FUNC(LS_Ceiling_RaiseByTexture) // Ceiling_RaiseByTexture (tag, speed, change) { - return EV_DoCeiling (DCeiling::ceilRaiseByTexture, ln, arg0, SPEED(arg1), 0, 0, -1, CHANGE(arg2), 0); + return Level->EV_DoCeiling (DCeiling::ceilRaiseByTexture, ln, arg0, SPEED(arg1), 0, 0, -1, CHANGE(arg2), 0); } FUNC(LS_Ceiling_LowerToLowest) // Ceiling_LowerToLowest (tag, speed, change, crush) { - return EV_DoCeiling (DCeiling::ceilLowerToLowest, ln, arg0, SPEED(arg1), 0, 0, CRUSH(arg3), 0, CHANGE(arg2)); + return Level->EV_DoCeiling (DCeiling::ceilLowerToLowest, ln, arg0, SPEED(arg1), 0, 0, CRUSH(arg3), 0, CHANGE(arg2)); } FUNC(LS_Ceiling_LowerToNearest) // Ceiling_LowerToNearest (tag, speed, change, crush) { - return EV_DoCeiling (DCeiling::ceilLowerToNearest, ln, arg0, SPEED(arg1), 0, 0, CRUSH(arg3), 0, CHANGE(arg2)); + return Level->EV_DoCeiling (DCeiling::ceilLowerToNearest, ln, arg0, SPEED(arg1), 0, 0, CRUSH(arg3), 0, CHANGE(arg2)); } FUNC(LS_Ceiling_ToHighestInstant) // Ceiling_ToHighestInstant (tag, change, crush) { - return EV_DoCeiling (DCeiling::ceilLowerToHighest, ln, arg0, 2, 0, 0, CRUSH(arg2), 0, CHANGE(arg1)); + return Level->EV_DoCeiling (DCeiling::ceilLowerToHighest, ln, arg0, 2, 0, 0, CRUSH(arg2), 0, CHANGE(arg1)); } FUNC(LS_Ceiling_ToFloorInstant) // Ceiling_ToFloorInstant (tag, change, crush, gap) { - return EV_DoCeiling (DCeiling::ceilRaiseToFloor, ln, arg0, 2, 0, arg3, CRUSH(arg2), 0, CHANGE(arg1)); + return Level->EV_DoCeiling (DCeiling::ceilRaiseToFloor, ln, arg0, 2, 0, arg3, CRUSH(arg2), 0, CHANGE(arg1)); } FUNC(LS_Ceiling_LowerToFloor) // Ceiling_LowerToFloor (tag, speed, change, crush, gap) { - return EV_DoCeiling (DCeiling::ceilLowerToFloor, ln, arg0, SPEED(arg1), 0, arg4, CRUSH(arg3), 0, CHANGE(arg2)); + return Level->EV_DoCeiling (DCeiling::ceilLowerToFloor, ln, arg0, SPEED(arg1), 0, arg4, CRUSH(arg3), 0, CHANGE(arg2)); } FUNC(LS_Ceiling_LowerByTexture) // Ceiling_LowerByTexture (tag, speed, change, crush) { - return EV_DoCeiling (DCeiling::ceilLowerByTexture, ln, arg0, SPEED(arg1), 0, 0, CRUSH(arg3), 0, CHANGE(arg2)); + return Level->EV_DoCeiling (DCeiling::ceilLowerByTexture, ln, arg0, SPEED(arg1), 0, 0, CRUSH(arg3), 0, CHANGE(arg2)); } FUNC(LS_Ceiling_Stop) // Ceiling_Stop (tag) { - return EV_StopCeiling(arg0, ln); + return Level->EV_StopCeiling(arg0, ln); } @@ -907,14 +907,14 @@ FUNC(LS_Generic_Ceiling) } } - return EV_DoCeiling (type, ln, arg0, SPEED(arg1), SPEED(arg1), arg2, + return Level->EV_DoCeiling (type, ln, arg0, SPEED(arg1), SPEED(arg1), arg2, (arg4 & 16) ? 20 : -1, 0, arg4 & 7); } FUNC(LS_Generic_Crusher) // Generic_Crusher (tag, dnspeed, upspeed, silent, damage) { - return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), + return Level->EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg4, arg3 ? 2 : 0, 0, (arg1 <= 24 && arg2 <= 24)? DCeiling::ECrushMode::crushSlowdown : DCeiling::ECrushMode::crushDoom); } @@ -922,20 +922,20 @@ FUNC(LS_Generic_Crusher2) // Generic_Crusher2 (tag, dnspeed, upspeed, silent, damage) { // same as above but uses Hexen's crushing method. - return EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), + return Level->EV_DoCeiling (DCeiling::ceilCrushAndRaise, ln, arg0, SPEED(arg1), SPEED(arg2), 0, arg4, arg3 ? 2 : 0, 0, DCeiling::ECrushMode::crushHexen); } FUNC(LS_Plat_PerpetualRaise) // Plat_PerpetualRaise (tag, speed, delay) { - return EV_DoPlat (arg0, ln, DPlat::platPerpetualRaise, 0, SPEED(arg1), TICS(arg2), 8, 0); + return Level->EV_DoPlat (arg0, ln, DPlat::platPerpetualRaise, 0, SPEED(arg1), TICS(arg2), 8, 0); } FUNC(LS_Plat_PerpetualRaiseLip) // Plat_PerpetualRaiseLip (tag, speed, delay, lip) { - return EV_DoPlat (arg0, ln, DPlat::platPerpetualRaise, 0, SPEED(arg1), TICS(arg2), arg3, 0); + return Level->EV_DoPlat (arg0, ln, DPlat::platPerpetualRaise, 0, SPEED(arg1), TICS(arg2), arg3, 0); } FUNC(LS_Plat_Stop) @@ -954,20 +954,20 @@ FUNC(LS_Plat_Stop) remove = gameinfo.gametype == GAME_Hexen; break; } - EV_StopPlat(arg0, remove); + Level->EV_StopPlat(arg0, remove); return true; } FUNC(LS_Plat_DownWaitUpStay) // Plat_DownWaitUpStay (tag, speed, delay) { - return EV_DoPlat (arg0, ln, DPlat::platDownWaitUpStay, 0, SPEED(arg1), TICS(arg2), 8, 0); + return Level->EV_DoPlat (arg0, ln, DPlat::platDownWaitUpStay, 0, SPEED(arg1), TICS(arg2), 8, 0); } FUNC(LS_Plat_DownWaitUpStayLip) // Plat_DownWaitUpStayLip (tag, speed, delay, lip, floor-sound?) { - return EV_DoPlat (arg0, ln, + return Level->EV_DoPlat (arg0, ln, arg4 ? DPlat::platDownWaitUpStayStone : DPlat::platDownWaitUpStay, 0, SPEED(arg1), TICS(arg2), arg3, 0); } @@ -975,25 +975,25 @@ FUNC(LS_Plat_DownWaitUpStayLip) FUNC(LS_Plat_DownByValue) // Plat_DownByValue (tag, speed, delay, height) { - return EV_DoPlat (arg0, ln, DPlat::platDownByValue, arg3*8, SPEED(arg1), TICS(arg2), 0, 0); + return Level->EV_DoPlat (arg0, ln, DPlat::platDownByValue, arg3*8, SPEED(arg1), TICS(arg2), 0, 0); } FUNC(LS_Plat_UpByValue) // Plat_UpByValue (tag, speed, delay, height) { - return EV_DoPlat (arg0, ln, DPlat::platUpByValue, arg3*8, SPEED(arg1), TICS(arg2), 0, 0); + return Level->EV_DoPlat (arg0, ln, DPlat::platUpByValue, arg3*8, SPEED(arg1), TICS(arg2), 0, 0); } FUNC(LS_Plat_UpWaitDownStay) // Plat_UpWaitDownStay (tag, speed, delay) { - return EV_DoPlat (arg0, ln, DPlat::platUpWaitDownStay, 0, SPEED(arg1), TICS(arg2), 0, 0); + return Level->EV_DoPlat (arg0, ln, DPlat::platUpWaitDownStay, 0, SPEED(arg1), TICS(arg2), 0, 0); } FUNC(LS_Plat_UpNearestWaitDownStay) // Plat_UpNearestWaitDownStay (tag, speed, delay) { - return EV_DoPlat (arg0, ln, DPlat::platUpNearestWaitDownStay, 0, SPEED(arg1), TICS(arg2), 0, 0); + return Level->EV_DoPlat (arg0, ln, DPlat::platUpNearestWaitDownStay, 0, SPEED(arg1), TICS(arg2), 0, 0); } FUNC(LS_Plat_RaiseAndStayTx0) @@ -1015,19 +1015,19 @@ FUNC(LS_Plat_RaiseAndStayTx0) } - return EV_DoPlat (arg0, ln, type, 0, SPEED(arg1), 0, 0, 1); + return Level->EV_DoPlat (arg0, ln, type, 0, SPEED(arg1), 0, 0, 1); } FUNC(LS_Plat_UpByValueStayTx) // Plat_UpByValueStayTx (tag, speed, height) { - return EV_DoPlat (arg0, ln, DPlat::platUpByValueStay, arg2*8, SPEED(arg1), 0, 0, 2); + return Level->EV_DoPlat (arg0, ln, DPlat::platUpByValueStay, arg2*8, SPEED(arg1), 0, 0, 2); } FUNC(LS_Plat_ToggleCeiling) // Plat_ToggleCeiling (tag) { - return EV_DoPlat (arg0, ln, DPlat::platToggle, 0, 0, 0, 0, 0); + return Level->EV_DoPlat (arg0, ln, DPlat::platToggle, 0, 0, 0, 0, 0); } FUNC(LS_Generic_Lift) @@ -1054,15 +1054,15 @@ FUNC(LS_Generic_Lift) break; } - return EV_DoPlat (arg0, ln, type, arg4*8, SPEED(arg1), OCTICS(arg2), 0, 0); + return Level->EV_DoPlat (arg0, ln, type, arg4*8, SPEED(arg1), OCTICS(arg2), 0, 0); } FUNC(LS_Exit_Normal) // Exit_Normal (position) { - if (CheckIfExitIsGood (it, FindLevelInfo(G_GetExitMap()))) + if (Level->CheckIfExitIsGood (it, FindLevelInfo(Level->NextMap))) { - G_ExitLevel (arg0, false); + Level->ExitLevel (arg0, false); return true; } return false; @@ -1071,9 +1071,9 @@ FUNC(LS_Exit_Normal) FUNC(LS_Exit_Secret) // Exit_Secret (position) { - if (CheckIfExitIsGood (it, FindLevelInfo(G_GetSecretExitMap()))) + if (Level->CheckIfExitIsGood (it, FindLevelInfo(Level->GetSecretExitMap()))) { - G_SecretExitLevel (arg0); + Level->SecretExitLevel (arg0); return true; } return false; @@ -1086,9 +1086,9 @@ FUNC(LS_Teleport_NewMap) { level_info_t *info = FindLevelByNum (arg0); - if (info && CheckIfExitIsGood (it, info)) + if (info && Level->CheckIfExitIsGood (it, info)) { - G_ChangeLevel(info->MapName, arg1, arg2 ? CHANGELEVEL_KEEPFACING : 0); + Level->ChangeLevel(info->MapName, arg1, arg2 ? CHANGELEVEL_KEEPFACING : 0); return true; } } @@ -1103,7 +1103,7 @@ FUNC(LS_Teleport) { flags |= TELF_SOURCEFOG; } - return EV_Teleport (arg0, arg1, ln, backSide, it, flags); + return Level->EV_Teleport (arg0, arg1, ln, backSide, it, flags); } FUNC( LS_Teleport_NoStop ) @@ -1114,7 +1114,7 @@ FUNC( LS_Teleport_NoStop ) { flags |= TELF_SOURCEFOG; } - return EV_Teleport( arg0, arg1, ln, backSide, it, flags); + return Level->EV_Teleport( arg0, arg1, ln, backSide, it, flags); } FUNC(LS_Teleport_NoFog) @@ -1144,7 +1144,7 @@ FUNC(LS_Teleport_NoFog) { flags |= TELF_KEEPHEIGHT; } - return EV_Teleport (arg0, arg2, ln, backSide, it, flags); + return Level->EV_Teleport (arg0, arg2, ln, backSide, it, flags); } FUNC(LS_Teleport_ZombieChanger) @@ -1153,7 +1153,7 @@ FUNC(LS_Teleport_ZombieChanger) // This is practically useless outside of Strife, but oh well. if (it != NULL) { - EV_Teleport (arg0, arg1, ln, backSide, it, 0); + Level->EV_Teleport (arg0, arg1, ln, backSide, it, 0); if (it->health >= 0) it->SetState (it->FindState(NAME_Pain)); return true; } @@ -1163,27 +1163,27 @@ FUNC(LS_Teleport_ZombieChanger) FUNC(LS_TeleportOther) // TeleportOther (other_tid, dest_tid, fog?) { - return EV_TeleportOther (arg0, arg1, arg2?true:false); + return Level->EV_TeleportOther (arg0, arg1, arg2?true:false); } FUNC(LS_TeleportGroup) // TeleportGroup (group_tid, source_tid, dest_tid, move_source?, fog?) { - return EV_TeleportGroup (arg0, it, arg1, arg2, arg3?true:false, arg4?true:false); + return Level->EV_TeleportGroup (arg0, it, arg1, arg2, arg3?true:false, arg4?true:false); } FUNC(LS_TeleportInSector) // TeleportInSector (tag, source_tid, dest_tid, bFog, group_tid) { - return EV_TeleportSector (arg0, arg1, arg2, arg3?true:false, arg4); + return Level->EV_TeleportSector (arg0, arg1, arg2, arg3?true:false, arg4); } FUNC(LS_Teleport_EndGame) // Teleport_EndGame () { - if (!backSide && CheckIfExitIsGood (it, NULL)) + if (!backSide && Level->CheckIfExitIsGood (it, NULL)) { - G_ChangeLevel(NULL, 0, 0); + Level->ChangeLevel(NULL, 0, 0); return true; } return false; @@ -1192,7 +1192,7 @@ FUNC(LS_Teleport_EndGame) FUNC(LS_Teleport_Line) // Teleport_Line (thisid, destid, reversed) { - return EV_SilentLineTeleport (ln, backSide, it, arg1, arg2); + return Level->EV_SilentLineTeleport (ln, backSide, it, arg1, arg2); } static void ThrustThingHelper(AActor *it, DAngle angle, double force, INTBOOL nolimit) @@ -1210,7 +1210,7 @@ FUNC(LS_ThrustThing) { if (arg3 != 0) { - FActorIterator iterator (arg3); + auto iterator = Level->GetActorIterator(arg3); while ((it = iterator.Next()) != NULL) { ThrustThingHelper (it, BYTEANGLE(arg0), arg1, arg2); @@ -1219,7 +1219,7 @@ FUNC(LS_ThrustThing) } else if (it) { - if (level.flags2 & LEVEL2_HEXENHACK && backSide) + if (Level->flags2 & LEVEL2_HEXENHACK && backSide) { return false; } @@ -1241,7 +1241,7 @@ FUNC(LS_ThrustThingZ) // [BC] if (arg0 != 0) { - FActorIterator iterator (arg0); + auto iterator = Level->GetActorIterator(arg0); while ( (victim = iterator.Next ()) ) { @@ -1281,7 +1281,7 @@ FUNC(LS_Thing_SetSpecial) // [BC] else { AActor *actor; - FActorIterator iterator (arg0); + auto iterator = Level->GetActorIterator(arg0); while ( (actor = iterator.Next ()) ) { @@ -1308,7 +1308,7 @@ FUNC(LS_Thing_ChangeTID) } else { - FActorIterator iterator (arg0); + auto iterator = Level->GetActorIterator(arg0); AActor *actor, *next; next = iterator.Next (); @@ -1424,7 +1424,7 @@ FUNC(LS_Thing_Activate) if (arg0 != 0) { AActor *actor; - FActorIterator iterator (arg0); + auto iterator = Level->GetActorIterator(arg0); int count = 0; actor = iterator.Next (); @@ -1454,7 +1454,7 @@ FUNC(LS_Thing_Deactivate) if (arg0 != 0) { AActor *actor; - FActorIterator iterator (arg0); + auto iterator = Level->GetActorIterator(arg0); int count = 0; actor = iterator.Next (); @@ -1483,7 +1483,7 @@ FUNC(LS_Thing_Remove) { if (arg0 != 0) { - FActorIterator iterator (arg0); + auto iterator = Level->GetActorIterator(arg0); AActor *actor; actor = iterator.Next (); @@ -1510,30 +1510,30 @@ FUNC(LS_Thing_Destroy) if (arg0 == 0 && arg2 == 0) { - P_Massacre (); + Level->Massacre (); } else if (arg0 == 0) { - TThinkerIterator iterator; + auto iterator = Level->GetThinkerIterator(); actor = iterator.Next (); while (actor) { AActor *temp = iterator.Next (); - if (actor->flags & MF_SHOOTABLE && tagManager.SectorHasTag(actor->Sector, arg2)) + if (actor->flags & MF_SHOOTABLE && Level->SectorHasTag(actor->Sector, arg2)) P_DamageMobj (actor, NULL, it, arg1 ? TELEFRAG_DAMAGE : actor->health, NAME_None); actor = temp; } } else { - FActorIterator iterator (arg0); + auto iterator = Level->GetActorIterator(arg0); actor = iterator.Next (); while (actor) { AActor *temp = iterator.Next (); - if (actor->flags & MF_SHOOTABLE && (arg2 == 0 || tagManager.SectorHasTag(actor->Sector, arg2))) + if (actor->flags & MF_SHOOTABLE && (arg2 == 0 || Level->SectorHasTag(actor->Sector, arg2))) P_DamageMobj (actor, NULL, it, arg1 ? TELEFRAG_DAMAGE : actor->health, NAME_None); actor = temp; } @@ -1544,30 +1544,30 @@ FUNC(LS_Thing_Destroy) FUNC(LS_Thing_Damage) // Thing_Damage (tid, amount, MOD) { - P_Thing_Damage (arg0, it, arg1, MODtoDamageType (arg2)); + Level->EV_Thing_Damage (arg0, it, arg1, MODtoDamageType (arg2)); return true; } FUNC(LS_Thing_Projectile) // Thing_Projectile (tid, type, angle, speed, vspeed) { - return P_Thing_Projectile (arg0, it, arg1, NULL, BYTEANGLE(arg2), SPEED(arg3), + return Level->EV_Thing_Projectile (arg0, it, arg1, NULL, BYTEANGLE(arg2), SPEED(arg3), SPEED(arg4), 0, NULL, 0, 0, false); } FUNC(LS_Thing_ProjectileGravity) // Thing_ProjectileGravity (tid, type, angle, speed, vspeed) { - return P_Thing_Projectile (arg0, it, arg1, NULL, BYTEANGLE(arg2), SPEED(arg3), + return Level->EV_Thing_Projectile (arg0, it, arg1, NULL, BYTEANGLE(arg2), SPEED(arg3), SPEED(arg4), 0, NULL, 1, 0, false); } FUNC(LS_Thing_Hate) // Thing_Hate (hater, hatee, group/"xray"?) { - FActorIterator haterIt (arg0); - AActor *hater, *hatee = NULL; - FActorIterator hateeIt (arg1); + AActor *hater, *hatee = nullptr; + auto haterIt = Level->GetActorIterator(arg0); + auto hateeIt = Level->GetActorIterator(arg1); bool nothingToHate = false; if (arg1 != 0) @@ -1728,32 +1728,32 @@ FUNC(LS_Thing_Hate) FUNC(LS_Thing_ProjectileAimed) // Thing_ProjectileAimed (tid, type, speed, target, newtid) { - return P_Thing_Projectile (arg0, it, arg1, NULL, 0., SPEED(arg2), 0, arg3, it, 0, arg4, false); + return Level->EV_Thing_Projectile (arg0, it, arg1, NULL, 0., SPEED(arg2), 0, arg3, it, 0, arg4, false); } FUNC(LS_Thing_ProjectileIntercept) // Thing_ProjectileIntercept (tid, type, speed, target, newtid) { - return P_Thing_Projectile (arg0, it, arg1, NULL, 0., SPEED(arg2), 0, arg3, it, 0, arg4, true); + return Level->EV_Thing_Projectile (arg0, it, arg1, NULL, 0., SPEED(arg2), 0, arg3, it, 0, arg4, true); } // [BC] added newtid for next two FUNC(LS_Thing_Spawn) // Thing_Spawn (tid, type, angle, newtid) { - return P_Thing_Spawn (arg0, it, arg1, BYTEANGLE(arg2), true, arg3); + return Level->EV_Thing_Spawn (arg0, it, arg1, BYTEANGLE(arg2), true, arg3); } FUNC(LS_Thing_SpawnNoFog) // Thing_SpawnNoFog (tid, type, angle, newtid) { - return P_Thing_Spawn (arg0, it, arg1, BYTEANGLE(arg2), false, arg3); + return Level->EV_Thing_Spawn (arg0, it, arg1, BYTEANGLE(arg2), false, arg3); } FUNC(LS_Thing_SpawnFacing) // Thing_SpawnFacing (tid, type, nofog, newtid) { - return P_Thing_Spawn (arg0, it, arg1, 1000000., arg2 ? false : true, arg3); + return Level->EV_Thing_Spawn (arg0, it, arg1, 1000000., arg2 ? false : true, arg3); } FUNC(LS_Thing_Raise) @@ -1768,7 +1768,7 @@ FUNC(LS_Thing_Raise) } else { - TActorIterator iterator (arg0); + auto iterator = Level->GetActorIterator(arg0); while ( (target = iterator.Next ()) ) { @@ -1795,7 +1795,7 @@ FUNC(LS_Thing_Stop) } else { - TActorIterator iterator (arg0); + auto iterator = Level->GetActorIterator(arg0); while ( (target = iterator.Next ()) ) { @@ -1811,8 +1811,8 @@ FUNC(LS_Thing_Stop) FUNC(LS_Thing_SetGoal) // Thing_SetGoal (tid, goal, delay, chasegoal) { - TActorIterator selfiterator (arg0); - NActorIterator goaliterator (NAME_PatrolPoint, arg1); + auto selfiterator = Level->GetActorIterator(arg0); + auto goaliterator = Level->GetActorIterator(NAME_PatrolPoint, arg1); AActor *self; AActor *goal = goaliterator.Next (); bool ok = false; @@ -1850,7 +1850,7 @@ FUNC(LS_Thing_SetGoal) FUNC(LS_Thing_Move) // [BC] // Thing_Move (tid, mapspot, nofog) { - return P_Thing_Move (arg0, it, arg1, arg2 ? false : true); + return Level->EV_Thing_Move (arg0, it, arg1, arg2 ? false : true); } enum @@ -1861,7 +1861,7 @@ enum FUNC(LS_Thing_SetTranslation) // Thing_SetTranslation (tid, range) { - TActorIterator iterator (arg0); + auto iterator = Level->GetActorIterator(arg0); int range; AActor *target; bool ok = false; @@ -1913,7 +1913,7 @@ FUNC(LS_ACS_Execute) if (arg1 == 0) { - mapname = level.MapName; + mapname = Level->MapName; } else if ((info = FindLevelByNum(arg1)) != NULL) { @@ -1923,7 +1923,7 @@ FUNC(LS_ACS_Execute) { return false; } - return P_StartScript(it, ln, arg0, mapname, args, 3, flags); + return P_StartScript(Level, it, ln, arg0, mapname, args, 3, flags); } FUNC(LS_ACS_ExecuteAlways) @@ -1936,7 +1936,7 @@ FUNC(LS_ACS_ExecuteAlways) if (arg1 == 0) { - mapname = level.MapName; + mapname = Level->MapName; } else if ((info = FindLevelByNum(arg1)) != NULL) { @@ -1946,7 +1946,7 @@ FUNC(LS_ACS_ExecuteAlways) { return false; } - return P_StartScript(it, ln, arg0, mapname, args, 3, flags); + return P_StartScript(Level, it, ln, arg0, mapname, args, 3, flags); } FUNC(LS_ACS_LockedExecute) @@ -1955,7 +1955,7 @@ FUNC(LS_ACS_LockedExecute) if (arg4 && !P_CheckKeys (it, arg4, true)) return false; else - return LS_ACS_Execute (ln, it, backSide, arg0, arg1, arg2, arg3, 0); + return LS_ACS_Execute (Level, ln, it, backSide, arg0, arg1, arg2, arg3, 0); } FUNC(LS_ACS_LockedExecuteDoor) @@ -1964,7 +1964,7 @@ FUNC(LS_ACS_LockedExecuteDoor) if (arg4 && !P_CheckKeys (it, arg4, false)) return false; else - return LS_ACS_Execute (ln, it, backSide, arg0, arg1, arg2, arg3, 0); + return LS_ACS_Execute (Level, ln, it, backSide, arg0, arg1, arg2, arg3, 0); } FUNC(LS_ACS_ExecuteWithResult) @@ -1976,7 +1976,7 @@ FUNC(LS_ACS_ExecuteWithResult) int args[4] = { arg1, arg2, arg3, arg4 }; int flags = (backSide ? ACS_BACKSIDE : 0) | ACS_ALWAYS | ACS_WANTRESULT; - return P_StartScript (it, ln, arg0, level.MapName, args, 4, flags); + return P_StartScript (Level, it, ln, arg0, Level->MapName, args, 4, flags); } FUNC(LS_ACS_Suspend) @@ -1985,9 +1985,9 @@ FUNC(LS_ACS_Suspend) level_info_t *info; if (arg1 == 0) - P_SuspendScript (arg0, level.MapName); + P_SuspendScript (Level, arg0, Level->MapName); else if ((info = FindLevelByNum (arg1)) ) - P_SuspendScript (arg0, info->MapName); + P_SuspendScript (Level, arg0, info->MapName); return true; } @@ -1998,9 +1998,9 @@ FUNC(LS_ACS_Terminate) level_info_t *info; if (arg1 == 0) - P_TerminateScript (arg0, level.MapName); + P_TerminateScript (Level, arg0, Level->MapName); else if ((info = FindLevelByNum (arg1)) ) - P_TerminateScript (arg0, info->MapName); + P_TerminateScript (Level, arg0, info->MapName); return true; } @@ -2016,7 +2016,7 @@ FUNC(LS_FS_Execute) { if (arg1 && ln && backSide) return false; if (arg2!=0 && !P_CheckKeys(it, arg2, !!arg3)) return false; - return T_RunScript(&level, arg0, it); + return T_RunScript(Level, arg0, it); } @@ -2024,26 +2024,26 @@ FUNC(LS_FS_Execute) FUNC(LS_FloorAndCeiling_LowerByValue) // FloorAndCeiling_LowerByValue (tag, speed, height) { - return EV_DoElevator (ln, DElevator::elevateLower, SPEED(arg1), arg2, arg0); + return Level->EV_DoElevator (ln, DElevator::elevateLower, SPEED(arg1), arg2, arg0); } FUNC(LS_FloorAndCeiling_RaiseByValue) // FloorAndCeiling_RaiseByValue (tag, speed, height) { - return EV_DoElevator (ln, DElevator::elevateRaise, SPEED(arg1), arg2, arg0); + return Level->EV_DoElevator (ln, DElevator::elevateRaise, SPEED(arg1), arg2, arg0); } FUNC(LS_FloorAndCeiling_LowerRaise) // FloorAndCeiling_LowerRaise (tag, fspeed, cspeed, boomemu) { - bool res = EV_DoCeiling (DCeiling::ceilRaiseToHighest, ln, arg0, SPEED(arg2), 0, 0, 0, 0, 0); + bool res = Level->EV_DoCeiling (DCeiling::ceilRaiseToHighest, ln, arg0, SPEED(arg2), 0, 0, 0, 0, 0); // The switch based Boom equivalents of FloorandCeiling_LowerRaise do incorrect checks // which cause the floor only to move when the ceiling fails to do so. // To avoid problems with maps that have incorrect args this only uses a // more or less unintuitive value for the fourth arg to trigger Boom's broken behavior if (arg3 != 1998 || !res) // (1998 for the year in which Boom was released... :P) { - res |= EV_DoFloor (DFloor::floorLowerToLowest, ln, arg0, SPEED(arg1), 0, -1, 0, false); + res |= Level->EV_DoFloor (DFloor::floorLowerToLowest, ln, arg0, SPEED(arg1), 0, -1, 0, false); } return res; } @@ -2051,109 +2051,109 @@ FUNC(LS_FloorAndCeiling_LowerRaise) FUNC(LS_Elevator_MoveToFloor) // Elevator_MoveToFloor (tag, speed) { - return EV_DoElevator (ln, DElevator::elevateCurrent, SPEED(arg1), 0, arg0); + return Level->EV_DoElevator (ln, DElevator::elevateCurrent, SPEED(arg1), 0, arg0); } FUNC(LS_Elevator_RaiseToNearest) // Elevator_RaiseToNearest (tag, speed) { - return EV_DoElevator (ln, DElevator::elevateUp, SPEED(arg1), 0, arg0); + return Level->EV_DoElevator (ln, DElevator::elevateUp, SPEED(arg1), 0, arg0); } FUNC(LS_Elevator_LowerToNearest) // Elevator_LowerToNearest (tag, speed) { - return EV_DoElevator (ln, DElevator::elevateDown, SPEED(arg1), 0, arg0); + return Level->EV_DoElevator (ln, DElevator::elevateDown, SPEED(arg1), 0, arg0); } FUNC(LS_Light_ForceLightning) // Light_ForceLightning (mode) { - P_ForceLightning (arg0); + Level->ForceLightning (arg0); return true; } FUNC(LS_Light_RaiseByValue) // Light_RaiseByValue (tag, value) { - EV_LightChange (arg0, arg1); + Level->EV_LightChange (arg0, arg1); return true; } FUNC(LS_Light_LowerByValue) // Light_LowerByValue (tag, value) { - EV_LightChange (arg0, -arg1); + Level->EV_LightChange (arg0, -arg1); return true; } FUNC(LS_Light_ChangeToValue) // Light_ChangeToValue (tag, value) { - EV_LightTurnOn (arg0, arg1); + Level->EV_LightTurnOn (arg0, arg1); return true; } FUNC(LS_Light_Fade) // Light_Fade (tag, value, tics); { - EV_StartLightFading (arg0, arg1, TICS(arg2)); + Level->EV_StartLightFading (arg0, arg1, TICS(arg2)); return true; } FUNC(LS_Light_Glow) // Light_Glow (tag, upper, lower, tics) { - EV_StartLightGlowing (arg0, arg1, arg2, TICS(arg3)); + Level->EV_StartLightGlowing (arg0, arg1, arg2, TICS(arg3)); return true; } FUNC(LS_Light_Flicker) // Light_Flicker (tag, upper, lower) { - EV_StartLightFlickering (arg0, arg1, arg2); + Level->EV_StartLightFlickering (arg0, arg1, arg2); return true; } FUNC(LS_Light_Strobe) // Light_Strobe (tag, upper, lower, u-tics, l-tics) { - EV_StartLightStrobing (arg0, arg1, arg2, TICS(arg3), TICS(arg4)); + Level->EV_StartLightStrobing (arg0, arg1, arg2, TICS(arg3), TICS(arg4)); return true; } FUNC(LS_Light_StrobeDoom) // Light_StrobeDoom (tag, u-tics, l-tics) { - EV_StartLightStrobing (arg0, TICS(arg1), TICS(arg2)); + Level->EV_StartLightStrobing (arg0, TICS(arg1), TICS(arg2)); return true; } FUNC(LS_Light_MinNeighbor) // Light_MinNeighbor (tag) { - EV_TurnTagLightsOff (arg0); + Level->EV_TurnTagLightsOff (arg0); return true; } FUNC(LS_Light_MaxNeighbor) // Light_MaxNeighbor (tag) { - EV_LightTurnOn (arg0, -1); + Level->EV_LightTurnOn (arg0, -1); return true; } FUNC(LS_Light_Stop) // Light_Stop (tag) { - EV_StopLightEffect (arg0); + Level->EV_StopLightEffect (arg0); return true; } FUNC(LS_Radius_Quake) // Radius_Quake (intensity, duration, damrad, tremrad, tid) { - return P_StartQuake (it, arg4, arg0, arg1, arg2*64, arg3*64, "world/quake"); + return P_StartQuake (Level, it, arg4, arg0, arg1, arg2*64, arg3*64, "world/quake"); } FUNC(LS_UsePuzzleItem) @@ -2194,10 +2194,10 @@ FUNC(LS_Sector_ChangeSound) return false; rtn = false; - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); while ((secNum = itr.Next()) >= 0) { - level.sectors[secNum].seqType = arg1; + Level->sectors[secNum].seqType = arg1; rtn = true; } return rtn; @@ -2213,13 +2213,13 @@ FUNC(LS_Sector_ChangeFlags) return false; rtn = false; - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); // exclude protected flags arg1 &= ~SECF_NOMODIFY; arg2 &= ~SECF_NOMODIFY; while ((secNum = itr.Next()) >= 0) { - level.sectors[secNum].Flags = (level.sectors[secNum].Flags | arg1) & ~arg2; + Level->sectors[secNum].Flags = (Level->sectors[secNum].Flags | arg1) & ~arg2; rtn = true; } return rtn; @@ -2227,7 +2227,6 @@ FUNC(LS_Sector_ChangeFlags) -void AdjustPusher(int tag, int magnitude, int angle, bool wind); FUNC(LS_Sector_SetWind) // Sector_SetWind (tag, amount, angle) @@ -2235,7 +2234,7 @@ FUNC(LS_Sector_SetWind) if (arg3) return false; - AdjustPusher (arg0, arg1, arg2, true); + Level->AdjustPusher (arg0, arg1, arg2, true); return true; } @@ -2245,14 +2244,14 @@ FUNC(LS_Sector_SetCurrent) if (arg3) return false; - AdjustPusher (arg0, arg1, arg2, false); + Level->AdjustPusher (arg0, arg1, arg2, false); return true; } FUNC(LS_Sector_SetFriction) // Sector_SetFriction (tag, amount) { - P_SetSectorFriction (arg0, arg1, true); + P_SetSectorFriction (Level, arg0, arg1, true); return true; } @@ -2262,11 +2261,11 @@ FUNC(LS_Sector_SetTranslucent) if (arg0 != 0) { int secnum; - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); while ((secnum = itr.Next()) >= 0) { - level.sectors[secnum].SetAlpha(arg1, clamp(arg2, 0, 255) / 255.); - level.sectors[secnum].ChangeFlags(arg1, ~PLANEF_ADDITIVE, arg3? PLANEF_ADDITIVE:0); + Level->sectors[secnum].SetAlpha(arg1, clamp(arg2, 0, 255) / 255.); + Level->sectors[secnum].ChangeFlags(arg1, ~PLANEF_ADDITIVE, arg3? PLANEF_ADDITIVE:0); } return true; } @@ -2278,10 +2277,10 @@ FUNC(LS_Sector_SetLink) { if (arg0 != 0) // control tag == 0 is for static initialization and must not be handled here { - int control = P_FindFirstSectorFromTag(arg0); + int control = Level->FindFirstSectorFromTag(arg0); if (control >= 0) { - return P_AddSectorLinks(&level.sectors[control], arg1, arg2, arg3); + return P_AddSectorLinks(&Level->sectors[control], arg1, arg2, arg3); } } return false; @@ -2311,7 +2310,7 @@ FUNC(LS_Scroll_Texture_Both) sidechoice = 0; } - SetWallScroller (&level, arg0, sidechoice, dx, dy, scw_all); + SetWallScroller (Level, arg0, sidechoice, dx, dy, scw_all); return true; } @@ -2322,7 +2321,7 @@ FUNC(LS_Scroll_Wall) if (arg0 == 0) return false; - SetWallScroller (&level, arg0, !!arg3, arg1 / 65536., arg2 / 65536., EScrollPos(arg4)); + SetWallScroller (Level, arg0, !!arg3, arg1 / 65536., arg2 / 65536., EScrollPos(arg4)); return true; } @@ -2338,19 +2337,19 @@ FUNC(LS_Scroll_Floor) if (arg3 == 0 || arg3 == 2) { - SetScroller (&level, arg0, EScroll::sc_floor, -dx, dy); + SetScroller (Level, arg0, EScroll::sc_floor, -dx, dy); } else { - SetScroller (&level, arg0, EScroll::sc_floor, 0, 0); + SetScroller (Level, arg0, EScroll::sc_floor, 0, 0); } if (arg3 > 0) { - SetScroller (&level, arg0, EScroll::sc_carry, dx, dy); + SetScroller (Level, arg0, EScroll::sc_carry, dx, dy); } else { - SetScroller (&level, arg0, EScroll::sc_carry, 0, 0); + SetScroller (Level, arg0, EScroll::sc_carry, 0, 0); } return true; } @@ -2361,7 +2360,7 @@ FUNC(LS_Scroll_Ceiling) double dx = arg1 / 32.; double dy = arg2 / 32.; - SetScroller (&level, arg0, EScroll::sc_ceiling, -dx, dy); + SetScroller (Level, arg0, EScroll::sc_ceiling, -dx, dy); return true; } @@ -2379,7 +2378,7 @@ FUNC(LS_Sector_SetDamage) // problems by adding an unwanted constructor. // Since it doesn't really matter whether the type is translated // here or in P_PlayerInSpecialSector I think it's the best solution. - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); int secnum; while ((secnum = itr.Next()) >= 0) { @@ -2401,10 +2400,10 @@ FUNC(LS_Sector_SetDamage) arg3 = 1; } } - level.sectors[secnum].damageamount = (short)arg1; - level.sectors[secnum].damagetype = MODtoDamageType(arg2); - level.sectors[secnum].damageinterval = (short)arg3; - level.sectors[secnum].leakydamage = (short)arg4; + Level->sectors[secnum].damageamount = (short)arg1; + Level->sectors[secnum].damagetype = MODtoDamageType(arg2); + Level->sectors[secnum].damageinterval = (short)arg3; + Level->sectors[secnum].leakydamage = (short)arg4; } return true; } @@ -2418,10 +2417,10 @@ FUNC(LS_Sector_SetGravity) arg2 = 99; gravity = (double)arg1 + (double)arg2 * 0.01; - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); int secnum; while ((secnum = itr.Next()) >= 0) - level.sectors[secnum].gravity = gravity; + Level->sectors[secnum].gravity = gravity; return true; } @@ -2429,11 +2428,11 @@ FUNC(LS_Sector_SetGravity) FUNC(LS_Sector_SetColor) // Sector_SetColor (tag, r, g, b, desaturate) { - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); int secnum; while ((secnum = itr.Next()) >= 0) { - level.sectors[secnum].SetColor(PalEntry(arg1, arg2, arg3), arg4); + Level->sectors[secnum].SetColor(PalEntry(arg1, arg2, arg3), arg4); } return true; @@ -2442,11 +2441,11 @@ FUNC(LS_Sector_SetColor) FUNC(LS_Sector_SetFade) // Sector_SetFade (tag, r, g, b) { - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); int secnum; while ((secnum = itr.Next()) >= 0) { - level.sectors[secnum].SetFade(PalEntry(arg1, arg2, arg3)); + Level->sectors[secnum].SetFade(PalEntry(arg1, arg2, arg3)); } return true; } @@ -2457,12 +2456,12 @@ FUNC(LS_Sector_SetCeilingPanning) double xofs = arg1 + arg2 / 100.; double yofs = arg3 + arg4 / 100.; - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); int secnum; while ((secnum = itr.Next()) >= 0) { - level.sectors[secnum].SetXOffset(sector_t::ceiling, xofs); - level.sectors[secnum].SetYOffset(sector_t::ceiling, yofs); + Level->sectors[secnum].SetXOffset(sector_t::ceiling, xofs); + Level->sectors[secnum].SetYOffset(sector_t::ceiling, yofs); } return true; } @@ -2473,12 +2472,12 @@ FUNC(LS_Sector_SetFloorPanning) double xofs = arg1 + arg2 / 100.; double yofs = arg3 + arg4 / 100.; - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); int secnum; while ((secnum = itr.Next()) >= 0) { - level.sectors[secnum].SetXOffset(sector_t::floor, xofs); - level.sectors[secnum].SetYOffset(sector_t::floor, yofs); + Level->sectors[secnum].SetXOffset(sector_t::floor, xofs); + Level->sectors[secnum].SetYOffset(sector_t::floor, yofs); } return true; } @@ -2494,14 +2493,14 @@ FUNC(LS_Sector_SetFloorScale) if (yscale) yscale = 1. / yscale; - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); int secnum; while ((secnum = itr.Next()) >= 0) { if (xscale) - level.sectors[secnum].SetXScale(sector_t::floor, xscale); + Level->sectors[secnum].SetXScale(sector_t::floor, xscale); if (yscale) - level.sectors[secnum].SetYScale(sector_t::floor, yscale); + Level->sectors[secnum].SetYScale(sector_t::floor, yscale); } return true; } @@ -2517,14 +2516,14 @@ FUNC(LS_Sector_SetCeilingScale) if (yscale) yscale = 1. / yscale; - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); int secnum; while ((secnum = itr.Next()) >= 0) { if (xscale) - level.sectors[secnum].SetXScale(sector_t::ceiling, xscale); + Level->sectors[secnum].SetXScale(sector_t::ceiling, xscale); if (yscale) - level.sectors[secnum].SetYScale(sector_t::ceiling, yscale); + Level->sectors[secnum].SetYScale(sector_t::ceiling, yscale); } return true; } @@ -2539,14 +2538,14 @@ FUNC(LS_Sector_SetFloorScale2) if (yscale) yscale = 1. / yscale; - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); int secnum; while ((secnum = itr.Next()) >= 0) { if (arg1) - level.sectors[secnum].SetXScale(sector_t::floor, xscale); + Level->sectors[secnum].SetXScale(sector_t::floor, xscale); if (arg2) - level.sectors[secnum].SetYScale(sector_t::floor, yscale); + Level->sectors[secnum].SetYScale(sector_t::floor, yscale); } return true; } @@ -2561,14 +2560,14 @@ FUNC(LS_Sector_SetCeilingScale2) if (yscale) yscale = 1. / yscale; - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); int secnum; while ((secnum = itr.Next()) >= 0) { if (arg1) - level.sectors[secnum].SetXScale(sector_t::ceiling, xscale); + Level->sectors[secnum].SetXScale(sector_t::ceiling, xscale); if (arg2) - level.sectors[secnum].SetYScale(sector_t::ceiling, yscale); + Level->sectors[secnum].SetYScale(sector_t::ceiling, yscale); } return true; } @@ -2579,12 +2578,12 @@ FUNC(LS_Sector_SetRotation) DAngle ceiling = (double)arg2; DAngle floor = (double)arg1; - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); int secnum; while ((secnum = itr.Next()) >= 0) { - level.sectors[secnum].SetAngle(sector_t::floor, floor); - level.sectors[secnum].SetAngle(sector_t::ceiling, ceiling); + Level->sectors[secnum].SetAngle(sector_t::floor, floor); + Level->sectors[secnum].SetAngle(sector_t::ceiling, ceiling); } return true; } @@ -2594,11 +2593,11 @@ FUNC(LS_Line_AlignCeiling) { bool ret = 0; - FLineIdIterator itr(arg0); + auto itr = Level->GetLineIdIterator(arg0); int line; while ((line = itr.Next()) >= 0) { - ret |= P_AlignFlat (line, !!arg1, 1); + ret |= Level->AlignFlat (line, !!arg1, 1); } return ret; } @@ -2608,11 +2607,11 @@ FUNC(LS_Line_AlignFloor) { bool ret = 0; - FLineIdIterator itr(arg0); + auto itr = Level->GetLineIdIterator(arg0); int line; while ((line = itr.Next()) >= 0) { - ret |= P_AlignFlat (line, !!arg1, 0); + ret |= Level->AlignFlat (line, !!arg1, 0); } return ret; } @@ -2627,11 +2626,11 @@ FUNC(LS_Line_SetTextureOffset) if (arg0 == 0 || arg3 < 0 || arg3 > 1) return false; - FLineIdIterator itr(arg0); + auto itr = Level->GetLineIdIterator(arg0); int line; while ((line = itr.Next()) >= 0) { - side_t *side = level.lines[line].sidedef[arg3]; + side_t *side = Level->lines[line].sidedef[arg3]; if (side != NULL) { @@ -2682,11 +2681,11 @@ FUNC(LS_Line_SetTextureScale) if (arg0 == 0 || arg3 < 0 || arg3 > 1) return false; - FLineIdIterator itr(arg0); + auto itr = Level->GetLineIdIterator(arg0); int line; while ((line = itr.Next()) >= 0) { - side_t *side = level.lines[line].sidedef[arg3]; + side_t *side = Level->lines[line].sidedef[arg3]; if (side != NULL) { if ((arg4&8)==0) @@ -2756,11 +2755,11 @@ FUNC(LS_Line_SetBlocking) if (arg2 & 1) clearflags |= flagtrans[i]; } - FLineIdIterator itr(arg0); + auto itr = Level->GetLineIdIterator(arg0); int line; while ((line = itr.Next()) >= 0) { - level.lines[line].flags = (level.lines[line].flags & ~clearflags) | setflags; + Level->lines[line].flags = (Level->lines[line].flags & ~clearflags) | setflags; } return true; } @@ -2788,11 +2787,11 @@ FUNC(LS_Line_SetAutomapFlags) if (arg2 & 1) clearflags |= flagtrans[i]; } - FLineIdIterator itr(arg0); + auto itr = Level->GetLineIdIterator(arg0); int line; while ((line = itr.Next()) >= 0) { - level.lines[line].flags = (level.lines[line].flags & ~clearflags) | setflags; + Level->lines[line].flags = (Level->lines[line].flags & ~clearflags) | setflags; } return true; @@ -2803,11 +2802,11 @@ FUNC(LS_Line_SetAutomapStyle) { if (arg1 < AMLS_COUNT && arg1 >= 0) { - FLineIdIterator itr(arg0); + auto itr = Level->GetLineIdIterator(arg0); int line; while ((line = itr.Next()) >= 0) { - level.lines[line].automapstyle = (AutomapLineStyle) arg1; + Level->lines[line].automapstyle = (AutomapLineStyle) arg1; } return true; @@ -2822,7 +2821,7 @@ FUNC(LS_ChangeCamera) AActor *camera; if (arg0 != 0) { - FActorIterator iterator (arg0); + auto iterator = Level->GetActorIterator(arg0); camera = iterator.Next (); } else @@ -2836,24 +2835,25 @@ FUNC(LS_ChangeCamera) for (i = 0; i < MAXPLAYERS; i++) { - if (!playeringame[i]) + if (!Level->PlayerInGame(i)) continue; - AActor *oldcamera = players[i].camera; + auto p = Level->Players[i]; + AActor *oldcamera = p->camera; if (camera) { - players[i].camera = camera; + p->camera = camera; if (arg2) - players[i].cheats |= CF_REVERTPLEASE; + p->cheats |= CF_REVERTPLEASE; } else { - players[i].camera = players[i].mo; - players[i].cheats &= ~CF_REVERTPLEASE; + p->camera = p->mo; + p->cheats &= ~CF_REVERTPLEASE; } - if (oldcamera != players[i].camera) + if (oldcamera != p->camera) { - R_ClearPastViewer (players[i].camera); + R_ClearPastViewer (p->camera); } } } @@ -2951,9 +2951,9 @@ FUNC(LS_SetPlayerProperty) item->ColorVar(NAME_BlendColor) = MakeSpecialColormap(INVERSECOLORMAP); } } - else if (it->player - players == consoleplayer) + else if (it->player && it->player == Level->GetConsolePlayer()) { - level.flags2 |= LEVEL2_ALLMAP; + Level->flags2 |= LEVEL2_ALLMAP; } } else @@ -2966,9 +2966,9 @@ FUNC(LS_SetPlayerProperty) item->Destroy (); } } - else if (it->player - players == consoleplayer) + else if (it->player && it->player == Level->GetConsolePlayer()) { - level.flags2 &= ~LEVEL2_ALLMAP; + Level->flags2 &= ~LEVEL2_ALLMAP; } } } @@ -2978,37 +2978,38 @@ FUNC(LS_SetPlayerProperty) for (i = 0; i < MAXPLAYERS; i++) { - if (!playeringame[i] || players[i].mo == NULL) + auto p = Level->Players[i]; + if (!Level->PlayerInGame(i) || p->mo == nullptr) continue; if (arg1) { // Give power if (power != 4) { - auto item = players[i].mo->GiveInventoryType ((PClass::FindActor(powers[power]))); + auto item = p->mo->GiveInventoryType ((PClass::FindActor(powers[power]))); if (item != NULL && power == 0 && arg1 == 1) { item->ColorVar(NAME_BlendColor) = MakeSpecialColormap(INVERSECOLORMAP); } } - else if (i == consoleplayer) + else if (p == Level->GetConsolePlayer()) { - level.flags2 |= LEVEL2_ALLMAP; + Level->flags2 |= LEVEL2_ALLMAP; } } else { // Take power if (power != 4) { - auto item = players[i].mo->FindInventory (PClass::FindActor(powers[power])); + auto item = p->mo->FindInventory (PClass::FindActor(powers[power])); if (item != NULL) { item->Destroy (); } } - else if (i == consoleplayer) + else if (p == Level->GetConsolePlayer()) { - level.flags2 &= ~LEVEL2_ALLMAP; + Level->flags2 &= ~LEVEL2_ALLMAP; } } } @@ -3066,32 +3067,33 @@ FUNC(LS_SetPlayerProperty) { int i; - if ((ib_compatflags & BCOMPATF_LINKFROZENPROPS) && (mask & (CF_FROZEN | CF_TOTALLYFROZEN))) + if ((Level->ib_compatflags & BCOMPATF_LINKFROZENPROPS) && (mask & (CF_FROZEN | CF_TOTALLYFROZEN))) { // Clearing one of these properties clears both of them (if the compat flag is set.) mask = CF_FROZEN | CF_TOTALLYFROZEN; } for (i = 0; i < MAXPLAYERS; i++) { - if (!playeringame[i]) + if (!Level->PlayerInGame(i)) continue; + auto p = Level->Players[i]; if (arg1) { - players[i].cheats |= mask; + p->cheats |= mask; if (arg2 == PROP_FLY) { - players[i].mo->flags2 |= MF2_FLY; - players[i].mo->flags |= MF_NOGRAVITY; + p->mo->flags2 |= MF2_FLY; + p->mo->flags |= MF_NOGRAVITY; } } else { - players[i].cheats &= ~mask; + p->cheats &= ~mask; if (arg2 == PROP_FLY) { - players[i].mo->flags2 &= ~MF2_FLY; - players[i].mo->flags &= ~MF_NOGRAVITY; + p->mo->flags2 &= ~MF2_FLY; + p->mo->flags &= ~MF_NOGRAVITY; } } } @@ -3103,18 +3105,18 @@ FUNC(LS_SetPlayerProperty) FUNC(LS_TranslucentLine) // TranslucentLine (id, amount, type) { - FLineIdIterator itr(arg0); + auto itr = Level->GetLineIdIterator(arg0); int linenum; while ((linenum = itr.Next()) >= 0) { - level.lines[linenum].alpha = clamp(arg1, 0, 255) / 255.; + Level->lines[linenum].alpha = clamp(arg1, 0, 255) / 255.; if (arg2 == 0) { - level.lines[linenum].flags &= ~ML_ADDTRANS; + Level->lines[linenum].flags &= ~ML_ADDTRANS; } else if (arg2 == 1) { - level.lines[linenum].flags |= ML_ADDTRANS; + Level->lines[linenum].flags |= ML_ADDTRANS; } else { @@ -3129,7 +3131,7 @@ FUNC(LS_Autosave) { if (gameaction != ga_savegame) { - level.flags2 &= ~LEVEL2_NOAUTOSAVEHINT; + Level->flags2 &= ~LEVEL2_NOAUTOSAVEHINT; Net_WriteByte (DEM_CHECKAUTOSAVE); } return true; @@ -3159,7 +3161,7 @@ FUNC(LS_NoiseAlert) } else { - FActorIterator iter (arg0); + auto iter = Level->GetActorIterator(arg0); target = iter.Next(); } @@ -3173,7 +3175,7 @@ FUNC(LS_NoiseAlert) } else { - FActorIterator iter (arg1); + auto iter = Level->GetActorIterator(arg1); emitter = iter.Next(); } @@ -3198,7 +3200,7 @@ FUNC(LS_SendToCommunicator) it->player->SetLogNumber (arg0); } - if (it->CheckLocalView (consoleplayer)) + if (it->CheckLocalView()) { S_StopSound (CHAN_VOICE); S_Sound (CHAN_VOICE, name, 1, ATTN_NORM); @@ -3233,11 +3235,11 @@ FUNC(LS_ClearForceField) { bool rtn = false; - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); int secnum; while ((secnum = itr.Next()) >= 0) { - sector_t *sec = &level.sectors[secnum]; + sector_t *sec = &Level->sectors[secnum]; rtn = true; sec->RemoveForceField(); @@ -3285,13 +3287,13 @@ FUNC(LS_GlassBreak) { if (type != nullptr) { - glass = Spawn(*type, DVector3(linemid, ONFLOORZ), ALLOW_REPLACE); + glass = Spawn(Level, *type, DVector3(linemid, ONFLOORZ), ALLOW_REPLACE); glass->AddZ(24.); } } else { - glass = Spawn("GlassJunk", DVector3(linemid, ONFLOORZ), ALLOW_REPLACE); + glass = Spawn(Level, "GlassJunk", DVector3(linemid, ONFLOORZ), ALLOW_REPLACE); glass->AddZ(24.); glass->SetState(glass->SpawnState + (pr_glass() % glass->health)); } @@ -3311,9 +3313,9 @@ FUNC(LS_GlassBreak) { for (int i = 0; i < MAXPLAYERS; ++i) { - if (playeringame[i]) + if (Level->PlayerInGame(i)) { - it = players[i].mo; + it = Level->Players[i]->mo; break; } } @@ -3333,7 +3335,7 @@ FUNC(LS_GlassBreak) FUNC(LS_StartConversation) // StartConversation (tid, facetalker) { - FActorIterator iterator (arg0); + auto iterator = Level->GetActorIterator(arg0); AActor *target = iterator.Next(); @@ -3377,14 +3379,14 @@ FUNC(LS_Thing_SetConversation) if (arg1 != 0) { - dlg_index = GetConversation(arg1); + dlg_index = Level->GetConversation(arg1); if (dlg_index == -1) return false; - node = StrifeDialogues[dlg_index]; + node = Level->StrifeDialogues[dlg_index]; } if (arg0 != 0) { - FActorIterator iterator (arg0); + auto iterator = Level->GetActorIterator(arg0); while ((it = iterator.Next()) != NULL) { it->ConversationRoot = dlg_index; @@ -3402,20 +3404,20 @@ FUNC(LS_Thing_SetConversation) FUNC(LS_Line_SetPortalTarget) // Line_SetPortalTarget(thisid, destid) { - return P_ChangePortal(ln, arg0, arg1); + return Level->ChangePortal(ln, arg0, arg1); } FUNC(LS_Sector_SetPlaneReflection) // Sector_SetPlaneReflection (tag, floor, ceiling) { int secnum; - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); while ((secnum = itr.Next()) >= 0) { - sector_t * s = &level.sectors[secnum]; + sector_t * s = &Level->sectors[secnum]; if (!s->floorplane.isSlope()) s->reflect[sector_t::floor] = arg1 / 255.f; - if (!s->ceilingplane.isSlope()) level.sectors[secnum].reflect[sector_t::ceiling] = arg2 / 255.f; + if (!s->ceilingplane.isSlope()) Level->sectors[secnum].reflect[sector_t::ceiling] = arg2 / 255.f; } return true; @@ -3428,15 +3430,15 @@ FUNC(LS_SetGlobalFogParameter) switch (arg0) { case 0: - level.fogdensity = arg1 >> 1; + Level->fogdensity = arg1 >> 1; return true; case 1: - level.outsidefogdensity = arg1 >> 1; + Level->outsidefogdensity = arg1 >> 1; return true; case 2: - level.skyfog = arg1; + Level->skyfog = arg1; return true; default: @@ -3450,11 +3452,11 @@ FUNC(LS_Sector_SetFloorGlow) int secnum; PalEntry color(arg2, arg3, arg4); if (arg1 < 0) color = -1; // negative height invalidates the glow. - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); while ((secnum = itr.Next()) >= 0) { - sector_t * s = &level.sectors[secnum]; + sector_t * s = &Level->sectors[secnum]; s->SetGlowColor(sector_t::floor, color); s->SetGlowHeight(sector_t::floor, float(arg1)); } @@ -3467,11 +3469,11 @@ FUNC(LS_Sector_SetCeilingGlow) int secnum; PalEntry color(arg2, arg3, arg4); if (arg1 < 0) color = -1; // negative height invalidates the glow. - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); while ((secnum = itr.Next()) >= 0) { - sector_t * s = &level.sectors[secnum]; + sector_t * s = &Level->sectors[secnum]; s->SetGlowColor(sector_t::ceiling, color); s->SetGlowHeight(sector_t::ceiling, float(arg1)); } @@ -3481,7 +3483,7 @@ FUNC(LS_Sector_SetCeilingGlow) FUNC(LS_Line_SetHealth) // Line_SetHealth(id, health) { - FLineIdIterator itr(arg0); + auto itr = Level->GetLineIdIterator(arg0); int l; if (arg1 < 0) @@ -3489,10 +3491,10 @@ FUNC(LS_Line_SetHealth) while ((l = itr.Next()) >= 0) { - line_t* line = &level.lines[l]; + line_t* line = &Level->lines[l]; line->health = arg1; if (line->healthgroup) - P_SetHealthGroupHealth(line->healthgroup, arg1); + P_SetHealthGroupHealth(Level, line->healthgroup, arg1); } return true; } @@ -3500,7 +3502,7 @@ FUNC(LS_Line_SetHealth) FUNC(LS_Sector_SetHealth) // Sector_SetHealth(id, part, health) { - FSectorTagIterator itr(arg0); + auto itr = Level->GetSectorTagIterator(arg0); int s; if (arg2 < 0) @@ -3508,24 +3510,24 @@ FUNC(LS_Sector_SetHealth) while ((s = itr.Next()) >= 0) { - sector_t* sector = &level.sectors[s]; + sector_t* sector = &Level->sectors[s]; if (arg1 == SECPART_Ceiling) { sector->healthceiling = arg2; if (sector->healthceilinggroup) - P_SetHealthGroupHealth(sector->healthceilinggroup, arg2); + P_SetHealthGroupHealth(Level, sector->healthceilinggroup, arg2); } else if (arg1 == SECPART_Floor) { sector->healthfloor = arg2; if (sector->healthfloorgroup) - P_SetHealthGroupHealth(sector->healthfloorgroup, arg2); + P_SetHealthGroupHealth(Level, sector->healthfloorgroup, arg2); } else if (arg1 == SECPART_3D) { sector->health3d = arg2; if (sector->health3dgroup) - P_SetHealthGroupHealth(sector->health3dgroup, arg2); + P_SetHealthGroupHealth(Level, sector->health3dgroup, arg2); } } return true; @@ -3925,7 +3927,7 @@ int P_FindLineSpecial (const char *string, int *min_args, int *max_args) // //========================================================================== -int P_ExecuteSpecial(int num, +int P_ExecuteSpecial(FLevelLocals *Level, int num, struct line_t *line, class AActor *activator, bool backSide, @@ -3937,7 +3939,7 @@ int P_ExecuteSpecial(int num, { if (num >= 0 && num < (int)countof(LineSpecials)) { - return LineSpecials[num](line, activator, backSide, arg1, arg2, arg3, arg4, arg5); + return LineSpecials[num](Level, line, activator, backSide, arg1, arg2, arg3, arg4, arg5); } return 0; } @@ -3960,6 +3962,6 @@ DEFINE_ACTION_FUNCTION(FLevelLocals, ExecuteSpecial) PARAM_INT(arg4); PARAM_INT(arg5); - ACTION_RETURN_INT(P_ExecuteSpecial(special, linedef, activator, lineside, arg1, arg2, arg3, arg4, arg5)); + ACTION_RETURN_INT(P_ExecuteSpecial(self, special, linedef, activator, lineside, arg1, arg2, arg3, arg4, arg5)); } diff --git a/src/p_lnspec.h b/src/p_lnspec.h index 034c5f2b6c..044605b159 100644 --- a/src/p_lnspec.h +++ b/src/p_lnspec.h @@ -187,10 +187,12 @@ typedef enum { struct line_t; class AActor; +struct FLevelLocals; FName MODtoDamageType (int mod); -typedef int (*lnSpecFunc)(struct line_t *line, +typedef int (*lnSpecFunc)(FLevelLocals *Level, + struct line_t *line, class AActor *activator, bool backSide, int arg1, @@ -210,14 +212,16 @@ FLineSpecial *P_GetLineSpecialInfo(int num); int P_GetMaxLineSpecial(); int P_FindLineSpecial (const char *string, int *min_args=NULL, int *max_args=NULL); bool P_ActivateThingSpecial(AActor * thing, AActor * trigger, bool death=false); -int P_ExecuteSpecial(int num, - struct line_t *line, - class AActor *activator, - bool backSide, - int arg1, - int arg2, - int arg3, - int arg4, - int arg5); +int P_ExecuteSpecial( + FLevelLocals *lev, + int num, + struct line_t *line, + class AActor *activator, + bool backSide, + int arg1, + int arg2, + int arg3, + int arg4, + int arg5); #endif //__P_LNSPEC_H__ diff --git a/src/p_local.h b/src/p_local.h index fbec34e4a9..93405dc08a 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -55,11 +55,6 @@ struct FLinePortal; #define STEEPSLOPE (46342/65536.) // [RH] Minimum floorplane.c value for walking -// Inspired by Maes -extern int bmapnegx; -extern int bmapnegy; - -//#define GRAVITY FRACUNIT #define MAXMOVE (30.) #define TALKRANGE (128.) @@ -97,8 +92,6 @@ void P_PredictionLerpReset(); #define SPF_TEMPPLAYER 1 // spawning a short-lived dummy player #define SPF_WEAPONFULLYUP 2 // spawn with weapon already raised -AActor *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags=0); - int P_FaceMobj (AActor *source, AActor *target, DAngle *delta); bool P_SeekerMissile (AActor *actor, double thresh, double turnMax, bool precise = false, bool usecurspeed=false); @@ -145,14 +138,7 @@ AActor *P_SpawnSubMissile (AActor *source, PClassActor *type, AActor *target); / extern FClassMap SpawnableThings; extern FClassMap StrifeTypes; -bool P_Thing_Spawn (int tid, AActor *source, int type, DAngle angle, bool fog, int newtid); -bool P_Thing_Projectile (int tid, AActor *source, int type, const char * type_name, DAngle angle, - double speed, double vspeed, int dest, AActor *forcedest, int gravity, int newtid, - bool leadTarget); - bool P_MoveThing(AActor *source, const DVector3 &pos, bool fog); -bool P_Thing_Move (int tid, AActor *source, int mapspot, bool fog); -int P_Thing_Damage (int tid, AActor *whofor0, int amount, FName type); void P_Thing_SetVelocity(AActor *actor, const DVector3 &vec, bool add, bool setbob); void P_RemoveThing(AActor * actor); bool P_Thing_Raise(AActor *thing, AActor *raiser, int flags = 0); diff --git a/src/p_map.cpp b/src/p_map.cpp index 8801b1791f..b33e8b133d 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -275,7 +275,7 @@ static bool PIT_FindFloorCeiling(FMultiBlockLinesIterator &mit, FMultiBlockLines void P_GetFloorCeilingZ(FCheckPosition &tmf, int flags) { - sector_t *sec = (!(flags & FFCF_SAMESECTOR) || tmf.thing->Sector == NULL)? P_PointInSector(tmf.pos) : tmf.sector; + sector_t *sec = (!(flags & FFCF_SAMESECTOR) || tmf.thing->Sector == NULL)? tmf.thing->Level->PointInSector(tmf.pos) : tmf.sector; F3DFloor *ffc, *fff; tmf.ceilingz = NextHighestCeilingAt(sec, tmf.pos.X, tmf.pos.Y, tmf.pos.Z, tmf.pos.Z + tmf.thing->Height, flags, &tmf.ceilingsector, &ffc); @@ -413,15 +413,15 @@ bool P_TeleportMove(AActor* thing, const DVector3 &pos, bool telefrag, bool modi spechit.Clear(); // this is needed so that no more specials get activated after crossing a teleporter. - bool StompAlwaysFrags = ((thing->flags2 & MF2_TELESTOMP) || (level.flags & LEVEL_MONSTERSTELEFRAG) || telefrag) && !(thing->flags7 & MF7_NOTELESTOMP); + bool StompAlwaysFrags = ((thing->flags2 & MF2_TELESTOMP) || (thing->Level->flags & LEVEL_MONSTERSTELEFRAG) || telefrag) && !(thing->flags7 & MF7_NOTELESTOMP); // P_LineOpening requires the thing's z to be the destination z in order to work. double savedz = thing->Z(); thing->SetZ(pos.Z); - sector_t *sector = P_PointInSector(pos); + sector_t *sector = thing->Level->PointInSector(pos); FPortalGroupArray grouplist; - FMultiBlockLinesIterator mit(grouplist, pos.X, pos.Y, pos.Z, thing->Height, thing->radius, sector); + FMultiBlockLinesIterator mit(grouplist, thing->Level, pos.X, pos.Y, pos.Z, thing->Height, thing->radius, sector); FMultiBlockLinesIterator::CheckResult cres; while (mit.Next(&cres)) @@ -432,7 +432,7 @@ bool P_TeleportMove(AActor* thing, const DVector3 &pos, bool telefrag, bool modi if (tmf.touchmidtex) tmf.dropoffz = tmf.floorz; - FMultiBlockThingsIterator mit2(grouplist, pos.X, pos.Y, pos.Z, thing->Height, thing->radius, false, sector); + FMultiBlockThingsIterator mit2(grouplist, thing->Level, pos.X, pos.Y, pos.Z, thing->Height, thing->radius, false, sector); FMultiBlockThingsIterator::CheckResult cres2; while (mit2.Next(&cres2)) @@ -459,7 +459,7 @@ bool P_TeleportMove(AActor* thing, const DVector3 &pos, bool telefrag, bool modi // [RH] Z-Check // But not if not MF2_PASSMOBJ or MF3_DONTOVERLAP are set! // Otherwise those things would get stuck inside each other. - if ((thing->flags2 & MF2_PASSMOBJ || th->flags4 & MF4_ACTLIKEBRIDGE) && !(i_compatflags & COMPATF_NO_PASSMOBJ)) + if ((thing->flags2 & MF2_PASSMOBJ || th->flags4 & MF4_ACTLIKEBRIDGE) && !(thing->Level->i_compatflags & COMPATF_NO_PASSMOBJ)) { if (!(th->flags3 & thing->flags3 & MF3_DONTOVERLAP)) { @@ -508,15 +508,12 @@ bool P_TeleportMove(AActor* thing, const DVector3 &pos, bool telefrag, bool modi thing->AdjustFloorClip(); } - if (thing == players[consoleplayer].camera) - { - R_ResetViewInterpolation(); - } + thing->renderflags |= RF_NOINTERPOLATEVIEW; // If this teleport was caused by a move, P_TryMove() will handle the // sector transition messages better than we can here. // This needs to be compatibility optioned because some older maps exploited this missing feature. - if (!(thing->flags6 & MF6_INTRYMOVE) && !(i_compatflags2 & COMPATF2_TELEPORT)) + if (!(thing->flags6 & MF6_INTRYMOVE) && !(thing->Level->i_compatflags2 & COMPATF2_TELEPORT)) { thing->CheckSectorTransition(oldsec); } @@ -850,7 +847,7 @@ bool PIT_CheckLine(FMultiBlockLinesIterator &mit, FMultiBlockLinesIterator::Chec // into being friendly with the MBF flag automatically gain MF3_NOBLOCKMONST, so this // just optionally generalizes the behavior to other friendly monsters. bool NotBlocked = ((tm.thing->flags3 & MF3_NOBLOCKMONST) - || ((i_compatflags & COMPATF_NOBLOCKFRIENDS) && (tm.thing->flags & MF_FRIENDLY))); + || ((tm.thing->Level->i_compatflags & COMPATF_NOBLOCKFRIENDS) && (tm.thing->flags & MF_FRIENDLY))); uint32_t ProjectileBlocking = ML_BLOCKEVERYTHING | ML_BLOCKPROJECTILE; if ( tm.thing->flags8 & MF8_BLOCKASPLAYER ) ProjectileBlocking |= ML_BLOCK_PLAYERS | ML_BLOCKING; @@ -975,7 +972,7 @@ bool PIT_CheckLine(FMultiBlockLinesIterator &mit, FMultiBlockLinesIterator::Chec // better than Strife's handling of rails, which lets you jump into rails // from either side. How long until somebody reports this as a bug and I'm // forced to say, "It's not a bug. It's a feature?" Ugh. - (!(level.flags2 & LEVEL2_RAILINGHACK) || + (!(tm.thing->Level->flags2 & LEVEL2_RAILINGHACK) || open.bottom == tm.thing->Sector->floorplane.ZatPoint(ref))) { open.bottom += 32; @@ -1082,7 +1079,7 @@ static bool PIT_CheckPortal(FMultiBlockLinesIterator &mit, FMultiBlockLinesItera tm.thing->AddZ(zofs); FBoundingBox pbox(cres.Position.X, cres.Position.Y, tm.thing->radius); - FBlockLinesIterator it(pbox); + FBlockLinesIterator it(tm.thing->Level, pbox); bool ret = false; line_t *ld; @@ -1163,7 +1160,7 @@ static bool CanAttackHurt(AActor *victim, AActor *shooter) // to harm / be harmed by anything. if (!victim->player && !shooter->player) { - int infight = G_SkillProperty(SKILLP_Infight); + int infight = victim->Level->GetInfighting(); if (infight < 0 && (victim->flags7 & MF7_FORCEINFIGHTING)) infight = 0; // This must override the 'no infight' setting to take effect. if (infight < 0) @@ -1263,7 +1260,7 @@ bool PIT_CheckThing(FMultiBlockThingsIterator &it, FMultiBlockThingsIterator::Ch // walking on other actors and unblocking is too messy through restricted portal types so disable it. if (!(cres.portalflags & FFCF_RESTRICTEDPORTAL)) { - if (!(i_compatflags & COMPATF_NO_PASSMOBJ) && !(tm.thing->flags & (MF_FLOAT | MF_MISSILE | MF_SKULLFLY | MF_NOGRAVITY)) && + if (!(thing->Level->i_compatflags & COMPATF_NO_PASSMOBJ) && !(tm.thing->flags & (MF_FLOAT | MF_MISSILE | MF_SKULLFLY | MF_NOGRAVITY)) && (thing->flags & MF_SOLID) && (thing->flags4 & MF4_ACTLIKEBRIDGE)) { // [RH] Let monsters walk on actors as well as floors @@ -1311,7 +1308,7 @@ bool PIT_CheckThing(FMultiBlockThingsIterator &it, FMultiBlockThingsIterator::Ch // [RH] If the other thing is a bridge, then treat the moving thing as if it had MF2_PASSMOBJ, so // you can use a scrolling floor to move scenery items underneath a bridge. - if ((tm.thing->flags2 & MF2_PASSMOBJ || thing->flags4 & MF4_ACTLIKEBRIDGE) && !(i_compatflags & COMPATF_NO_PASSMOBJ)) + if ((tm.thing->flags2 & MF2_PASSMOBJ || thing->flags4 & MF4_ACTLIKEBRIDGE) && !(tm.thing->Level->i_compatflags & COMPATF_NO_PASSMOBJ)) { // check if a mobj passed over/under another object if (!(tm.thing->flags & MF_MISSILE) || !(tm.thing->flags2 & MF2_RIP) || @@ -1365,10 +1362,10 @@ bool PIT_CheckThing(FMultiBlockThingsIterator &it, FMultiBlockThingsIterator::Ch if ((thing->flags6 & MF6_BUMPSPECIAL) && ((tm.thing->player != NULL) || ((thing->activationtype & THINGSPEC_MonsterTrigger) && (tm.thing->flags3 & MF3_ISMONSTER)) || ((thing->activationtype & THINGSPEC_MissileTrigger) && (tm.thing->flags & MF_MISSILE)) - ) && (level.maptime > thing->lastbump)) // Leave the bumper enough time to go away + ) && (thing->Level->maptime > thing->lastbump)) // Leave the bumper enough time to go away { if (P_ActivateThingSpecial(thing, tm.thing)) - thing->lastbump = level.maptime + TICRATE; + thing->lastbump = thing->Level->maptime + TICRATE; } } @@ -1441,7 +1438,7 @@ bool PIT_CheckThing(FMultiBlockThingsIterator &it, FMultiBlockThingsIterator::Ch { clipheight = thing->projectilepassheight; } - else if (thing->projectilepassheight < 0 && (i_compatflags & COMPATF_MISSILECLIP)) + else if (thing->projectilepassheight < 0 && (thing->Level->i_compatflags & COMPATF_MISSILECLIP)) { clipheight = -thing->projectilepassheight; } @@ -1668,7 +1665,7 @@ bool P_CheckPosition(AActor *thing, const DVector2 &pos, FCheckPosition &tm, boo tm.pos.Y = pos.Y; tm.pos.Z = thing->Z(); - newsec = tm.sector = P_PointInSector(pos); + newsec = tm.sector = thing->Level->PointInSector(pos); tm.ceilingline = thing->BlockingLine = NULL; // Retrieve the base floor / ceiling from the target location. @@ -1750,7 +1747,7 @@ bool P_CheckPosition(AActor *thing, const DVector2 &pos, FCheckPosition &tm, boo FBoundingBox box(pos.X, pos.Y, thing->radius); FPortalGroupArray pcheck; - FMultiBlockThingsIterator it2(pcheck, pos.X, pos.Y, thing->Z(), thing->Height, thing->radius, false, newsec); + FMultiBlockThingsIterator it2(pcheck, thing->Level, pos.X, pos.Y, thing->Z(), thing->Height, thing->radius, false, newsec); FMultiBlockThingsIterator::CheckResult tcres; while ((it2.Next(&tcres))) @@ -1763,7 +1760,7 @@ bool P_CheckPosition(AActor *thing, const DVector2 &pos, FCheckPosition &tm, boo AActor *BlockingMobj = thing->BlockingMobj; // If this blocks through a restricted line portal, it will always completely block. - if (BlockingMobj == NULL || (i_compatflags & COMPATF_NO_PASSMOBJ) || (tcres.portalflags & FFCF_RESTRICTEDPORTAL)) + if (BlockingMobj == NULL || (thing->Level->i_compatflags & COMPATF_NO_PASSMOBJ) || (tcres.portalflags & FFCF_RESTRICTEDPORTAL)) { // Thing slammed into something; don't let it move now. thing->Height = realHeight; return false; @@ -1822,7 +1819,7 @@ bool P_CheckPosition(AActor *thing, const DVector2 &pos, FCheckPosition &tm, boo return (thing->BlockingMobj = thingblocker) == NULL; - FMultiBlockLinesIterator it(pcheck, pos.X, pos.Y, thing->Z(), thing->Height, thing->radius, newsec); + FMultiBlockLinesIterator it(pcheck, thing->Level, pos.X, pos.Y, thing->Z(), thing->Height, thing->radius, newsec); FMultiBlockLinesIterator::CheckResult lcres; double thingdropoffz = tm.floorz; @@ -2041,7 +2038,7 @@ void P_FakeZMovement(AActor *mo) } if (mo->player && mo->flags&MF_NOGRAVITY && (mo->Z() > mo->floorz) && !mo->IsNoClip2()) { - mo->AddZ(DAngle(4.5 * level.maptime).Sin()); + mo->AddZ(DAngle(4.5 * mo->Level->maptime).Sin()); } // @@ -2068,7 +2065,7 @@ static void CheckForPushSpecial(line_t *line, int side, AActor *mobj, DVector2 * { if (line->special && !(mobj->flags6 & MF6_NOTRIGGER)) { - if (posforwindowcheck && !(i_compatflags2 & COMPATF2_PUSHWINDOW) && line->backsector != NULL) + if (posforwindowcheck && !(mobj->Level->i_compatflags2 & COMPATF2_PUSHWINDOW) && line->backsector != NULL) { // Make sure this line actually blocks us and is not a window // or similar construct we are standing inside of. DVector3 pos = mobj->PosRelative(line); @@ -2111,7 +2108,7 @@ static void CheckForPushSpecial(line_t *line, int side, AActor *mobj, DVector2 * } else if (mobj->flags2 & MF2_IMPACT) { - if ((level.flags2 & LEVEL2_MISSILESACTIVATEIMPACT) || + if ((mobj->Level->flags2 & LEVEL2_MISSILESACTIVATEIMPACT) || !(mobj->flags & MF_MISSILE) || (mobj->target == NULL)) { @@ -2175,7 +2172,7 @@ bool P_TryMove(AActor *thing, const DVector2 &pos, goto pushline; } } - if (!(tm.thing->flags2 & MF2_PASSMOBJ) || (i_compatflags & COMPATF_NO_PASSMOBJ)) + if (!(tm.thing->flags2 & MF2_PASSMOBJ) || (tm.thing->Level->i_compatflags & COMPATF_NO_PASSMOBJ)) { thing->SetZ(oldz); thing->flags6 &= ~MF6_INTRYMOVE; @@ -2274,7 +2271,7 @@ bool P_TryMove(AActor *thing, const DVector2 &pos, // compatibility check: Doom originally did not allow monsters to cross dropoffs at all. // If the compatibility flag is on, only allow this when the velocity comes from a scroller - if ((i_compatflags & COMPATF_CROSSDROPOFF) && !(thing->flags4 & MF4_SCROLLMOVE)) + if ((thing->Level->i_compatflags & COMPATF_CROSSDROPOFF) && !(thing->flags4 & MF4_SCROLLMOVE)) { dropoff = false; } @@ -2333,7 +2330,7 @@ bool P_TryMove(AActor *thing, const DVector2 &pos, if (thing->player && thing->player->Bot != NULL && thing->flags & MF_SHOOTABLE) { if (tm.sector != thing->Sector - && bglobal.IsDangerous(tm.sector)) + && thing->Level->BotInfo.IsDangerous(tm.sector)) { thing->player->Bot->prev = thing->player->Bot->dest; thing->player->Bot->dest = nullptr; @@ -2451,7 +2448,7 @@ bool P_TryMove(AActor *thing, const DVector2 &pos, } // if this is the current camera we need to store the point where the portal was crossed and the exit // so that the renderer can properly calculate an interpolated position along the movement path. - if (thing == players[consoleplayer].camera) + if (thing->Level->isCamera(thing)) { divline_t dl1 = { besthit.Oldrefpos.X,besthit.Oldrefpos.Y, besthit.Refpos.X - besthit.Oldrefpos.X, besthit.Refpos.Y - besthit.Oldrefpos.Y }; DVector3a hit = { {dl1.x + dl1.dx * bestfrac, dl1.y + dl1.dy * bestfrac, 0.},0. }; @@ -2466,7 +2463,8 @@ bool P_TryMove(AActor *thing, const DVector2 &pos, { P_TranslatePortalXY(ld, hit.pos.X, hit.pos.Y); P_TranslatePortalZ(ld, hit.pos.Z); - players[consoleplayer].viewz += hit.pos.Z; // needs to be done here because otherwise the renderer will not catch the change. + auto p = thing->Level->GetConsolePlayer(); + if (p) p->viewz += hit.pos.Z; // needs to be done here because otherwise the renderer will not catch the change. P_TranslatePortalAngle(ld, hit.angle); } R_AddInterpolationPoint(hit); @@ -2596,7 +2594,7 @@ bool P_TryMove(AActor *thing, const DVector2 &pos, thing->UnlinkFromWorld(&ctx); thing->SetXYZ(thing->PosRelative(tm.portalgroup)); thing->Prev += thing->Pos() - oldpos; - thing->Sector = P_PointInSector(thing->Pos()); + thing->Sector = thing->Level->PointInSector(thing->Pos()); thing->PrevPortalGroup = thing->Sector->PortalGroup; thing->LinkToWorld(&ctx); @@ -2928,7 +2926,7 @@ void FSlide::HitSlideLine(line_t* ld) void FSlide::SlideTraverse(const DVector2 &start, const DVector2 &end) { FLineOpening open; - FPathTraverse it(start.X, start.Y, end.X, end.Y, PT_ADDLINES); + FPathTraverse it(slidemo->Level, start.X, start.Y, end.X, end.Y, PT_ADDLINES); intercept_t *in; while ((in = it.Next())) @@ -2963,7 +2961,7 @@ void FSlide::SlideTraverse(const DVector2 &start, const DVector2 &end) goto isblocking; } if (li->flags & ML_BLOCKMONSTERS && !((slidemo->flags3 & MF3_NOBLOCKMONST) - || ((i_compatflags & COMPATF_NOBLOCKFRIENDS) && (slidemo->flags & MF_FRIENDLY)))) + || ((slidemo->Level->i_compatflags & COMPATF_NOBLOCKFRIENDS) && (slidemo->flags & MF_FRIENDLY)))) { goto isblocking; } @@ -3285,7 +3283,7 @@ const secplane_t * P_CheckSlopeWalk(AActor *actor, DVector2 &move) bool FSlide::BounceTraverse(const DVector2 &start, const DVector2 &end) { FLineOpening open; - FPathTraverse it(start.X, start.Y, end.X, end.Y, PT_ADDLINES); + FPathTraverse it(slidemo->Level, start.X, start.Y, end.X, end.Y, PT_ADDLINES); intercept_t *in; while ((in = it.Next())) @@ -3819,7 +3817,7 @@ struct aim_t newtrace.aimdir = position == sector_t::ceiling? aim_t::aim_up : aim_t::aim_down; newtrace.startpos = startpos + entersec->GetPortalDisplacement(position); newtrace.startfrac = frac + 1. / attackrange; // this is to skip the transition line to the portal which would produce a bogus opening - newtrace.lastsector = P_PointInSector(newtrace.startpos + aimtrace * newtrace.startfrac); + newtrace.lastsector = entersec->Level->PointInSector(newtrace.startpos + aimtrace * newtrace.startfrac); newtrace.limitz = portalz; if (aimdebug) Printf("-----Entering %s portal from sector %d to sector %d\n", position ? "ceiling" : "floor", lastsector->sectornum, newtrace.lastsector->sectornum); @@ -3858,7 +3856,7 @@ struct aim_t DVector2 pos = newtrace.startpos + newtrace.aimtrace * newtrace.startfrac; - newtrace.lastsector = P_PointInSector(pos); + newtrace.lastsector = li->GetLevel()->PointInSector(pos); P_TranslatePortalZ(li, limitz); if (aimdebug) Printf("-----Entering line portal from sector %d to sector %d\n", lastsector->sectornum, newtrace.lastsector->sectornum); @@ -3977,7 +3975,7 @@ struct aim_t if (ceilingportalstate) EnterSectorPortal(sector_t::ceiling, 0, lastsector, toppitch, MIN(0., bottompitch)); if (floorportalstate) EnterSectorPortal(sector_t::floor, 0, lastsector, MAX(0., toppitch), bottompitch); - FPathTraverse it(startpos.X, startpos.Y, aimtrace.X, aimtrace.Y, PT_ADDLINES | PT_ADDTHINGS | PT_COMPATIBLE | PT_DELTA, startfrac); + FPathTraverse it(lastsector->Level, startpos.X, startpos.Y, aimtrace.X, aimtrace.Y, PT_ADDLINES | PT_ADDTHINGS | PT_COMPATIBLE | PT_DELTA, startfrac); intercept_t *in; if (aimdebug) @@ -4269,7 +4267,7 @@ DAngle P_AimLineAttack(AActor *t1, DAngle angle, double distance, FTranslatedLin // can't shoot outside view angles if (vrange == 0) { - if (t1->player == NULL || !level.IsFreelookAllowed()) + if (t1->player == NULL || !t1->Level->IsFreelookAllowed()) { vrange = 35.; } @@ -4417,7 +4415,7 @@ AActor *P_LineAttack(AActor *t1, DAngle angle, double distance, shootz += sz; // We need to check the defaults of the replacement here - AActor *puffDefaults = GetDefaultByType(pufftype->GetReplacement()); + AActor *puffDefaults = GetDefaultByType(pufftype->GetReplacement(t1->Level)); TData.hitGhosts = (t1->player != NULL && t1->player->ReadyWeapon != NULL && @@ -4442,7 +4440,7 @@ AActor *P_LineAttack(AActor *t1, DAngle angle, double distance, AActor *tempuff = NULL; if (pufftype != NULL) - tempuff = Spawn(pufftype, t1->Pos(), ALLOW_REPLACE); + tempuff = Spawn(t1->Level, pufftype, t1->Pos(), ALLOW_REPLACE); if (tempuff != NULL) { TData.PuffSpecies = tempuff->GetSpecies(); @@ -4539,7 +4537,7 @@ AActor *P_LineAttack(AActor *t1, DAngle angle, double distance, // position a bit closer for puffs if (nointeract || trace.HitType != TRACE_HitWall || ((trace.Line->special != Line_Horizon) || spawnSky)) { - DVector2 pos = P_GetOffsetPosition(trace.HitPos.X, trace.HitPos.Y, -trace.HitVector.X * 4, -trace.HitVector.Y * 4); + DVector2 pos = t1->Level->GetPortalOffsetPosition(trace.HitPos.X, trace.HitPos.Y, -trace.HitVector.X * 4, -trace.HitVector.Y * 4); puff = P_SpawnPuff(t1, pufftype, DVector3(pos, trace.HitPos.Z - trace.HitVector.Z * 4), trace.SrcAngleFromTarget, trace.SrcAngleFromTarget - 90, 0, puffFlags); puff->radius = 1/65536.; @@ -4588,9 +4586,9 @@ AActor *P_LineAttack(AActor *t1, DAngle angle, double distance, // Hit a thing, so it could be either a puff or blood DVector3 bleedpos = trace.HitPos; // position a bit closer for puffs/blood if using compatibility mode. - if (i_compatflags & COMPATF_HITSCAN) + if (trace.Actor->Level->i_compatflags & COMPATF_HITSCAN) { - DVector2 ofs = P_GetOffsetPosition(bleedpos.X, bleedpos.Y, -10 * trace.HitVector.X, -10 * trace.HitVector.Y); + DVector2 ofs = t1->Level->GetPortalOffsetPosition(bleedpos.X, bleedpos.Y, -10 * trace.HitVector.X, -10 * trace.HitVector.Y); bleedpos.X = ofs.X; bleedpos.Y = ofs.Y; bleedpos.Z -= -10 * trace.HitVector.Z; @@ -4781,7 +4779,7 @@ int P_LineTrace(AActor *t1, DAngle angle, double distance, if ( flags & TRF_BLOCKSELF ) { bool Projectile = ( (t1->flags&MF_MISSILE) || (t1->BounceFlags&BOUNCE_MBF) ); - bool NotBlocked = ( (t1->flags3&MF3_NOBLOCKMONST) || ( (i_compatflags&COMPATF_NOBLOCKFRIENDS) && (t1->flags&MF_FRIENDLY) ) ); + bool NotBlocked = ( (t1->flags3&MF3_NOBLOCKMONST) || ( (t1->Level->i_compatflags&COMPATF_NOBLOCKFRIENDS) && (t1->flags&MF_FRIENDLY) ) ); if ( Projectile ) lflags |= ML_BLOCKPROJECTILE; if ( !Projectile || (t1->flags8&MF8_BLOCKASPLAYER) ) lflags |= ML_BLOCKING; if ( !NotBlocked ) lflags |= ML_BLOCKMONSTERS; @@ -4952,7 +4950,7 @@ void P_TraceBleed(int damage, const DVector3 &pos, AActor *actor, DAngle angle, bloodcolor.a = 1; } - DImpactDecal::StaticCreate(bloodType, bleedtrace.HitPos, + DImpactDecal::StaticCreate(actor->Level, bloodType, bleedtrace.HitPos, bleedtrace.Line->sidedef[bleedtrace.Side], bleedtrace.ffloor, bloodcolor); } } @@ -5099,9 +5097,9 @@ static ETraceStatus ProcessRailHit(FTraceResults &res, void *userdata) newhit.HitActor = res.Actor; newhit.HitPos = res.HitPos; newhit.HitAngle = res.SrcAngleFromTarget; - if (i_compatflags & COMPATF_HITSCAN) + if (res.Actor->Level->i_compatflags & COMPATF_HITSCAN) { - DVector2 ofs = P_GetOffsetPosition(newhit.HitPos.X, newhit.HitPos.Y, -10 * res.HitVector.X, -10 * res.HitVector.Y); + DVector2 ofs = res.Actor->Level->GetPortalOffsetPosition(newhit.HitPos.X, newhit.HitPos.Y, -10 * res.HitVector.X, -10 * res.HitVector.Y); newhit.HitPos.X = ofs.X; newhit.HitPos.Y = ofs.Y; newhit.HitPos.Z -= -10 * res.HitVector.Z; @@ -5163,7 +5161,7 @@ void P_RailAttack(FRailParams *p) int flags; assert(puffclass != NULL); // Because we set it to a default above - AActor *puffDefaults = GetDefaultByType(puffclass->GetReplacement()); //Contains all the flags such as FOILINVUL, etc. + AActor *puffDefaults = GetDefaultByType(puffclass->GetReplacement(source->Level)); //Contains all the flags such as FOILINVUL, etc. // disabled because not complete yet. flags = (puffDefaults->flags6 & MF6_NOTRIGGER) ? TRACE_ReportPortals : TRACE_PCross | TRACE_Impact | TRACE_ReportPortals; @@ -5187,7 +5185,7 @@ void P_RailAttack(FRailParams *p) // used as damage inflictor AActor *thepuff = NULL; - if (puffclass != NULL) thepuff = Spawn(puffclass, source->Pos(), ALLOW_REPLACE); + if (puffclass != NULL) thepuff = Spawn(source->Level, puffclass, source->Pos(), ALLOW_REPLACE); rail_data.PuffSpecies = (thepuff != NULL) ? thepuff->GetSpecies() : NAME_None; Trace(start, source->Sector, vec, p->distance, MF_SHOOTABLE, ML_BLOCKEVERYTHING, source, trace, flags, ProcessRailHit, &rail_data); @@ -5376,7 +5374,7 @@ bool P_TalkFacing(AActor *player) bool P_UseTraverse(AActor *usething, const DVector2 &start, const DVector2 &end, bool &foundline) { - FPathTraverse it(start.X, start.Y, end.X, end.Y, PT_ADDLINES | PT_ADDTHINGS); + FPathTraverse it(usething->Level, start.X, start.Y, end.X, end.Y, PT_ADDLINES | PT_ADDTHINGS); intercept_t *in; DVector3 xpos = { start.X, start.Y, usething->Z() }; @@ -5427,7 +5425,7 @@ bool P_UseTraverse(AActor *usething, const DVector2 &start, const DVector2 &end, P_LineOpening(open, NULL, in->d.line, it.InterceptPoint(in)); } if (open.range <= 0 || - (in->d.line->special != 0 && (i_compatflags & COMPATF_USEBLOCKING))) + (in->d.line->special != 0 && (usething->Level->i_compatflags & COMPATF_USEBLOCKING))) { // [RH] Give sector a chance to intercept the use @@ -5487,7 +5485,7 @@ bool P_UseTraverse(AActor *usething, const DVector2 &start, const DVector2 &end, //[RH] And now I've changed it again. If the line is of type // SPAC_USE, then it eats the use. Everything else passes // it through, including SPAC_USETHROUGH. - if (i_compatflags & COMPATF_USEBLOCKING) + if (usething->Level->i_compatflags & COMPATF_USEBLOCKING) { if (in->d.line->activation & SPAC_UseThrough) continue; else return true; @@ -5519,7 +5517,7 @@ bool P_UseTraverse(AActor *usething, const DVector2 &start, const DVector2 &end, bool P_NoWayTraverse(AActor *usething, const DVector2 &start, const DVector2 &end) { - FPathTraverse it(start.X, start.Y, end.X, end.Y, PT_ADDLINES); + FPathTraverse it(usething->Level, start.X, start.Y, end.X, end.Y, PT_ADDLINES); intercept_t *in; while ((in = it.Next())) @@ -5596,7 +5594,7 @@ int P_UsePuzzleItem(AActor *PuzzleItemUser, int PuzzleItemType) start = PuzzleItemUser->GetPortalTransition(PuzzleItemUser->Height / 2); end = PuzzleItemUser->Angles.Yaw.ToVector(usedist); - FPathTraverse it(start.X, start.Y, end.X, end.Y, PT_DELTA | PT_ADDLINES | PT_ADDTHINGS); + FPathTraverse it(PuzzleItemUser->Level, start.X, start.Y, end.X, end.Y, PT_DELTA | PT_ADDLINES | PT_ADDTHINGS); intercept_t *in; while ((in = it.Next())) @@ -5624,7 +5622,7 @@ int P_UsePuzzleItem(AActor *PuzzleItemUser, int PuzzleItemType) return false; } int args[3] = { in->d.line->args[2], in->d.line->args[3], in->d.line->args[4] }; - P_StartScript(PuzzleItemUser, in->d.line, in->d.line->args[1], NULL, args, 3, ACS_ALWAYS); + P_StartScript(PuzzleItemUser->Level, PuzzleItemUser, in->d.line, in->d.line->args[1], NULL, args, 3, ACS_ALWAYS); in->d.line->special = 0; return true; } @@ -5639,7 +5637,7 @@ int P_UsePuzzleItem(AActor *PuzzleItemUser, int PuzzleItemType) continue; } int args[3] = { mobj->args[2], mobj->args[3], mobj->args[4] }; - P_StartScript(PuzzleItemUser, NULL, mobj->args[1], NULL, args, 3, ACS_ALWAYS); + P_StartScript(PuzzleItemUser->Level, PuzzleItemUser, NULL, mobj->args[1], NULL, args, 3, ACS_ALWAYS); mobj->special = 0; return true; } @@ -5836,7 +5834,7 @@ int P_RadiusAttack(AActor *bombspot, AActor *bombsource, int bombdamage, int bom fulldamagedistance = clamp(fulldamagedistance, 0, bombdistance - 1); FPortalGroupArray grouplist(FPortalGroupArray::PGA_Full3d); - FMultiBlockThingsIterator it(grouplist, bombspot->X(), bombspot->Y(), bombspot->Z() - bombdistance, bombspot->Height + bombdistance*2, bombdistance, false, bombspot->Sector); + FMultiBlockThingsIterator it(grouplist, bombspot->Level, bombspot->X(), bombspot->Y(), bombspot->Z() - bombdistance, bombspot->Height + bombdistance*2, bombdistance, false, bombspot->Sector); FMultiBlockThingsIterator::CheckResult cres; if (flags & RADF_SOURCEISSPOT) @@ -6167,7 +6165,7 @@ void P_DoCrunch(AActor *thing, FChangePosition *cpos) if (!(thing && thing->CallGrind(true) && cpos)) return; cpos->nofit = true; - if ((cpos->crushchange > 0) && !(level.maptime & 3)) + if ((cpos->crushchange > 0) && !(thing->Level->maptime & 3)) { int newdam = P_DamageMobj(thing, NULL, NULL, cpos->crushchange, NAME_Crush); @@ -6183,7 +6181,7 @@ void P_DoCrunch(AActor *thing, FChangePosition *cpos) { AActor *mo; - mo = Spawn(bloodcls, thing->PosPlusZ(thing->Height / 2), ALLOW_REPLACE); + mo = Spawn(thing->Level, bloodcls, thing->PosPlusZ(thing->Height / 2), ALLOW_REPLACE); mo->Vel.X = pr_crunch.Random2() / 16.; mo->Vel.Y = pr_crunch.Random2() / 16.; @@ -6203,7 +6201,7 @@ void P_DoCrunch(AActor *thing, FChangePosition *cpos) DAngle an = (M_Random() - 128) * (360./256); if (cl_bloodtype >= 1) { - P_DrawSplash2(32, thing->PosPlusZ(thing->Height/2), an, 2, thing->BloodColor); + P_DrawSplash2(thing->Level, 32, thing->PosPlusZ(thing->Height/2), an, 2, thing->BloodColor); } } if (thing->CrushPainSound != 0 && !S_GetSoundPlayingInfo(thing, thing->CrushPainSound)) @@ -6274,7 +6272,7 @@ int P_PushUp(AActor *thing, FChangePosition *cpos) if (cpos->instant) { intersect->Prev.Z += intersect->Z() - oldz; - if (intersect->CheckLocalView(consoleplayer)) R_ResetViewInterpolation(); + intersect->renderflags |= RF_NOINTERPOLATEVIEW; } intersect->UpdateRenderSectorList(); @@ -6371,7 +6369,7 @@ void PIT_FloorDrop(AActor *thing, FChangePosition *cpos) if (cpos->instant) { thing->Prev.Z += thing->floorz - oldz; - if (thing->CheckLocalView(consoleplayer)) R_ResetViewInterpolation(); + thing->renderflags |= RF_NOINTERPOLATEVIEW; } thing->SetZ(thing->floorz); P_CheckFakeFloorTriggers(thing, oldz); @@ -6385,7 +6383,7 @@ void PIT_FloorDrop(AActor *thing, FChangePosition *cpos) if (cpos->instant) { thing->Prev.Z += -oldfloorz + thing->floorz; - if (thing->CheckLocalView(consoleplayer)) R_ResetViewInterpolation(); + thing->renderflags |= RF_NOINTERPOLATEVIEW; } thing->AddZ(-oldfloorz + thing->floorz); P_CheckFakeFloorTriggers(thing, oldz); @@ -6425,7 +6423,7 @@ void PIT_FloorRaise(AActor *thing, FChangePosition *cpos) if (cpos->instant) { thing->Prev.Z += thing->floorz - thing->Z(); - if (thing->CheckLocalView(consoleplayer)) R_ResetViewInterpolation(); + thing->renderflags |= RF_NOINTERPOLATEVIEW; } thing->SetZ(thing->floorz); @@ -6439,7 +6437,7 @@ void PIT_FloorRaise(AActor *thing, FChangePosition *cpos) if (cpos->instant) { thing->Prev.Z += -oldfloorz + thing->floorz; - if (thing->CheckLocalView(consoleplayer)) R_ResetViewInterpolation(); + thing->renderflags |= RF_NOINTERPOLATEVIEW; } } else return; @@ -6751,7 +6749,7 @@ void SpawnShootDecal(AActor *t1, const FTraceResults &trace) } if (decalbase != NULL) { - DImpactDecal::StaticCreate(decalbase->GetDecal(), + DImpactDecal::StaticCreate(t1->Level, decalbase->GetDecal(), trace.HitPos, trace.Line->sidedef[trace.Side], trace.ffloor); } } @@ -6775,7 +6773,7 @@ static void SpawnDeepSplash(AActor *t1, const FTraceResults &trace, AActor *puff } else return; - P_HitWater(puff != NULL ? puff : t1, P_PointInSector(*hitpos), *hitpos); + P_HitWater(puff != NULL ? puff : t1, t1->Level->PointInSector(*hitpos), *hitpos); } //============================================================================= @@ -6827,16 +6825,16 @@ bool P_ActivateThingSpecial(AActor * thing, AActor * trigger, bool death) // Run the special, if any if (thing->special) { - res = !!P_ExecuteSpecial(thing->special, NULL, + res = !!P_ExecuteSpecial(thing->Level, thing->special, NULL, // TriggerActs overrides the level flag, which only concerns thing activated by death - (((death && level.flags & LEVEL_ACTOWNSPECIAL && !(thing->activationtype & THINGSPEC_TriggerActs)) + (((death && thing->Level->flags & LEVEL_ACTOWNSPECIAL && !(thing->activationtype & THINGSPEC_TriggerActs)) || (thing->activationtype & THINGSPEC_ThingActs)) // Who triggers? ? thing : trigger), false, thing->args[0], thing->args[1], thing->args[2], thing->args[3], thing->args[4]); // Clears the special if it was run on thing's death or if flag is set. // Note that Hexen originally did not clear the special which some original maps depend on (e.g. the bell in HEXDD.) - if ((death && !(level.flags2 & LEVEL2_HEXENHACK)) || (thing->activationtype & THINGSPEC_ClearSpecial && res)) thing->special = 0; + if ((death && !(thing->Level->flags2 & LEVEL2_HEXENHACK)) || (thing->activationtype & THINGSPEC_ClearSpecial && res)) thing->special = 0; } // Returns the result diff --git a/src/p_maputl.cpp b/src/p_maputl.cpp index 678f3fbdd9..16f6a72adf 100644 --- a/src/p_maputl.cpp +++ b/src/p_maputl.cpp @@ -80,7 +80,6 @@ #include "po_man.h" #include "vm.h" -sector_t *P_PointInSectorBuggy(double x, double y); int P_VanillaPointOnDivlineSide(double x, double y, const divline_t* line); @@ -354,19 +353,19 @@ void AActor::UnlinkFromWorld (FLinkContext *ctx) bool AActor::FixMapthingPos() { - sector_t *secstart = P_PointInSectorBuggy(X(), Y()); + sector_t *secstart = Level->PointInSectorBuggy(X(), Y()); - int blockx = level.blockmap.GetBlockX(X()); - int blocky = level.blockmap.GetBlockY(Y()); + int blockx = Level->blockmap.GetBlockX(X()); + int blocky = Level->blockmap.GetBlockY(Y()); bool success = false; - if (level.blockmap.isValidBlock(blockx, blocky)) + if (Level->blockmap.isValidBlock(blockx, blocky)) { int *list; - for (list = level.blockmap.GetLines(blockx, blocky); *list != -1; ++list) + for (list = Level->blockmap.GetLines(blockx, blocky); *list != -1; ++list) { - line_t *ldef = &level.lines[*list]; + line_t *ldef = &Level->lines[*list]; if (ldef->frontsector == ldef->backsector) { // Skip two-sided lines inside a single sector @@ -452,16 +451,16 @@ void AActor::LinkToWorld(FLinkContext *ctx, bool spawningmapthing, sector_t *sec { if (!spawning) { - sector = P_PointInSector(Pos()); + sector = Level->PointInSector(Pos()); } else { - sector = P_PointInSectorBuggy(X(), Y()); + sector = Level->PointInSectorBuggy(X(), Y()); } } Sector = sector; - subsector = R_PointInSubsector(Pos()); // this is from the rendering nodes, not the gameplay nodes! + subsector = Level->PointInRenderSubsector(Pos()); // this is from the rendering nodes, not the gameplay nodes! section = subsector->section; if (!(flags & MF_NOSECTOR)) @@ -504,7 +503,7 @@ void AActor::LinkToWorld(FLinkContext *ctx, bool spawningmapthing, sector_t *sec { FPortalGroupArray check; - P_CollectConnectedGroups(Sector->PortalGroup, Pos(), Top(), radius, check); + Level->CollectConnectedGroups(Sector->PortalGroup, Pos(), Top(), radius, check); BlockNode = NULL; FBlockNode **alink = &this->BlockNode; @@ -512,25 +511,25 @@ void AActor::LinkToWorld(FLinkContext *ctx, bool spawningmapthing, sector_t *sec { DVector3 pos = i==-1? Pos() : PosRelative(check[i] & ~FPortalGroupArray::FLAT); - int x1 = level.blockmap.GetBlockX(pos.X - radius); - int x2 = level.blockmap.GetBlockX(pos.X + radius); - int y1 = level.blockmap.GetBlockY(pos.Y - radius); - int y2 = level.blockmap.GetBlockY(pos.Y + radius); + int x1 = Level->blockmap.GetBlockX(pos.X - radius); + int x2 = Level->blockmap.GetBlockX(pos.X + radius); + int y1 = Level->blockmap.GetBlockY(pos.Y - radius); + int y2 = Level->blockmap.GetBlockY(pos.Y + radius); - if (x1 >= level.blockmap.bmapwidth || x2 < 0 || y1 >= level.blockmap.bmapheight || y2 < 0) + if (x1 >= Level->blockmap.bmapwidth || x2 < 0 || y1 >= Level->blockmap.bmapheight || y2 < 0) { // thing is off the map } else { // [RH] Link into every block this actor touches, not just the center one x1 = MAX(0, x1); y1 = MAX(0, y1); - x2 = MIN(level.blockmap.bmapwidth - 1, x2); - y2 = MIN(level.blockmap.bmapheight - 1, y2); + x2 = MIN(Level->blockmap.bmapwidth - 1, x2); + y2 = MIN(Level->blockmap.bmapheight - 1, y2); for (int y = y1; y <= y2; ++y) { for (int x = x1; x <= x2; ++x) { - FBlockNode **link = &level.blockmap.blocklinks[y*level.blockmap.bmapwidth + x]; + FBlockNode **link = &Level->blockmap.blocklinks[y*Level->blockmap.bmapwidth + x]; FBlockNode *node = FBlockNode::Create(this, x, y, this->Sector->PortalGroup); // Link in to block @@ -582,9 +581,10 @@ void AActor::SetOrigin(double x, double y, double z, bool moving) // //=========================================================================== -FBlockLinesIterator::FBlockLinesIterator(int _minx, int _miny, int _maxx, int _maxy, bool keepvalidcount) +FBlockLinesIterator::FBlockLinesIterator(FLevelLocals *l, int _minx, int _miny, int _maxx, int _maxy, bool keepvalidcount) { if (!keepvalidcount) validcount++; + Level = l; minx = _minx; maxx = _maxx; miny = _miny; @@ -595,15 +595,16 @@ FBlockLinesIterator::FBlockLinesIterator(int _minx, int _miny, int _maxx, int _m void FBlockLinesIterator::init(const FBoundingBox &box) { validcount++; - maxy = level.blockmap.GetBlockY(box.Top()); - miny = level.blockmap.GetBlockY(box.Bottom()); - maxx = level.blockmap.GetBlockX(box.Right()); - minx = level.blockmap.GetBlockX(box.Left()); + maxy = Level->blockmap.GetBlockY(box.Top()); + miny = Level->blockmap.GetBlockY(box.Bottom()); + maxx = Level->blockmap.GetBlockX(box.Right()); + minx = Level->blockmap.GetBlockX(box.Left()); Reset(); } -FBlockLinesIterator::FBlockLinesIterator(const FBoundingBox &box) +FBlockLinesIterator::FBlockLinesIterator(FLevelLocals *l, const FBoundingBox &box) { + Level = l; init(box); } @@ -617,13 +618,13 @@ void FBlockLinesIterator::StartBlock(int x, int y) { curx = x; cury = y; - if (level.blockmap.isValidBlock(x, y)) + if (Level->blockmap.isValidBlock(x, y)) { - unsigned offset = y*level.blockmap.bmapwidth + x; - polyLink = level.PolyBlockMap.Size() > offset? level.PolyBlockMap[offset] : nullptr; + unsigned offset = y*Level->blockmap.bmapwidth + x; + polyLink = Level->PolyBlockMap.Size() > offset? Level->PolyBlockMap[offset] : nullptr; polyIndex = 0; - list = level.blockmap.GetLines(x, y); + list = Level->blockmap.GetLines(x, y); } else { @@ -682,7 +683,7 @@ line_t *FBlockLinesIterator::Next() { while (*list != -1) { - line_t *ld = &level.lines[*list]; + line_t *ld = &Level->lines[*list]; list++; if (ld->validcount != validcount) @@ -711,24 +712,24 @@ line_t *FBlockLinesIterator::Next() //=========================================================================== FMultiBlockLinesIterator::FMultiBlockLinesIterator(FPortalGroupArray &check, AActor *origin, double checkradius) - : checklist(check) + : checklist(check), blockIterator(origin->Level) { checkpoint = origin->Pos(); - if (!check.inited) P_CollectConnectedGroups(origin->Sector->PortalGroup, checkpoint, origin->Top(), checkradius, checklist); + if (!check.inited) origin->Level->CollectConnectedGroups(origin->Sector->PortalGroup, checkpoint, origin->Top(), checkradius, checklist); checkpoint.Z = checkradius == -1? origin->radius : checkradius; basegroup = origin->Sector->PortalGroup; startsector = origin->Sector; Reset(); } -FMultiBlockLinesIterator::FMultiBlockLinesIterator(FPortalGroupArray &check, double checkx, double checky, double checkz, double checkh, double checkradius, sector_t *newsec) - : checklist(check) +FMultiBlockLinesIterator::FMultiBlockLinesIterator(FPortalGroupArray &check, FLevelLocals *Level, double checkx, double checky, double checkz, double checkh, double checkradius, sector_t *newsec) + : checklist(check), blockIterator(Level) { checkpoint = { checkx, checky, checkz }; - if (newsec == NULL) newsec = P_PointInSector(checkx, checky); + if (newsec == NULL) newsec = Level->PointInSector(checkx, checky); startsector = newsec; basegroup = newsec->PortalGroup; - if (!check.inited) P_CollectConnectedGroups(basegroup, checkpoint, checkz + checkh, checkradius, checklist); + if (!check.inited) Level->CollectConnectedGroups(basegroup, checkpoint, checkz + checkh, checkradius, checklist); checkpoint.Z = checkradius; Reset(); } @@ -848,10 +849,10 @@ bool FMultiBlockLinesIterator::Next(FMultiBlockLinesIterator::CheckResult *item) bool FMultiBlockLinesIterator::startIteratorForGroup(int group) { - offset = level.Displacements.getOffset(basegroup, group); + offset = blockIterator.Level->Displacements.getOffset(basegroup, group); offset.X += checkpoint.X; offset.Y += checkpoint.Y; - cursector = group == startsector->PortalGroup ? startsector : P_PointInSector(offset); + cursector = group == startsector->PortalGroup ? startsector : blockIterator.Level->PointInSector(offset); // If we ended up in a different group, // presumably because the spot to be checked is too far outside the actual portal group, // the search needs to abort. @@ -881,18 +882,20 @@ void FMultiBlockLinesIterator::Reset() // //=========================================================================== -FBlockThingsIterator::FBlockThingsIterator() +FBlockThingsIterator::FBlockThingsIterator(FLevelLocals *l) : DynHash(0) { + Level = l; minx = maxx = 0; miny = maxy = 0; ClearHash(); block = NULL; } -FBlockThingsIterator::FBlockThingsIterator(int _minx, int _miny, int _maxx, int _maxy) +FBlockThingsIterator::FBlockThingsIterator(FLevelLocals *l, int _minx, int _miny, int _maxx, int _maxy) : DynHash(0) { + Level = l; minx = _minx; maxx = _maxx; miny = _miny; @@ -903,10 +906,10 @@ FBlockThingsIterator::FBlockThingsIterator(int _minx, int _miny, int _maxx, int void FBlockThingsIterator::init(const FBoundingBox &box) { - maxy = level.blockmap.GetBlockY(box.Top()); - miny = level.blockmap.GetBlockY(box.Bottom()); - maxx = level.blockmap.GetBlockX(box.Right()); - minx = level.blockmap.GetBlockX(box.Left()); + maxy = Level->blockmap.GetBlockY(box.Top()); + miny = Level->blockmap.GetBlockY(box.Bottom()); + maxx = Level->blockmap.GetBlockX(box.Right()); + minx = Level->blockmap.GetBlockX(box.Left()); ClearHash(); Reset(); } @@ -934,9 +937,9 @@ void FBlockThingsIterator::StartBlock(int x, int y) { curx = x; cury = y; - if (level.blockmap.isValidBlock(x, y)) + if (Level->blockmap.isValidBlock(x, y)) { - block = level.blockmap.blocklinks[y*level.blockmap.bmapwidth + x]; + block = Level->blockmap.blocklinks[y*Level->blockmap.bmapwidth + x]; } else { @@ -984,9 +987,9 @@ AActor *FBlockThingsIterator::Next(bool centeronly) if (centeronly) { // Block boundaries for compatibility mode - double blockleft = (curx * FBlockmap::MAPBLOCKUNITS) + level.blockmap.bmaporgx; + double blockleft = (curx * FBlockmap::MAPBLOCKUNITS) + Level->blockmap.bmaporgx; double blockright = blockleft + FBlockmap::MAPBLOCKUNITS; - double blockbottom = (cury * FBlockmap::MAPBLOCKUNITS) + level.blockmap.bmaporgy; + double blockbottom = (cury * FBlockmap::MAPBLOCKUNITS) + Level->blockmap.bmaporgy; double blocktop = blockbottom + FBlockmap::MAPBLOCKUNITS; // only return actors with the center in this block @@ -1053,24 +1056,24 @@ AActor *FBlockThingsIterator::Next(bool centeronly) //=========================================================================== FMultiBlockThingsIterator::FMultiBlockThingsIterator(FPortalGroupArray &check, AActor *origin, double checkradius, bool ignorerestricted) - : checklist(check) + : checklist(check), blockIterator(origin->Level) { checkpoint = origin->Pos(); - if (!check.inited) P_CollectConnectedGroups(origin->Sector->PortalGroup, checkpoint, origin->Top(), checkradius, checklist); + if (!check.inited) origin->Level->CollectConnectedGroups(origin->Sector->PortalGroup, checkpoint, origin->Top(), checkradius, checklist); checkpoint.Z = checkradius == -1? origin->radius : checkradius; basegroup = origin->Sector->PortalGroup; Reset(); } -FMultiBlockThingsIterator::FMultiBlockThingsIterator(FPortalGroupArray &check, double checkx, double checky, double checkz, double checkh, double checkradius, bool ignorerestricted, sector_t *newsec) - : checklist(check) +FMultiBlockThingsIterator::FMultiBlockThingsIterator(FPortalGroupArray &check, FLevelLocals *Level, double checkx, double checky, double checkz, double checkh, double checkradius, bool ignorerestricted, sector_t *newsec) + : checklist(check), blockIterator(Level) { checkpoint.X = checkx; checkpoint.Y = checky; checkpoint.Z = checkz; - if (newsec == NULL) newsec = P_PointInSector(checkx, checky); + if (newsec == NULL) newsec = Level->PointInSector(checkx, checky); basegroup = newsec->PortalGroup; - if (!check.inited) P_CollectConnectedGroups(basegroup, checkpoint, checkz + checkh, checkradius, checklist); + if (!check.inited) Level->CollectConnectedGroups(basegroup, checkpoint, checkz + checkh, checkradius, checklist); checkpoint.Z = checkradius; Reset(); } @@ -1087,7 +1090,7 @@ bool FMultiBlockThingsIterator::Next(FMultiBlockThingsIterator::CheckResult *ite if (thing != NULL) { item->thing = thing; - item->Position = checkpoint + level.Displacements.getOffset(basegroup, thing->Sector->PortalGroup); + item->Position = checkpoint + blockIterator.Level->Displacements.getOffset(basegroup, thing->Sector->PortalGroup); item->portalflags = portalflags; return true; } @@ -1126,7 +1129,7 @@ bool FMultiBlockThingsIterator::Next(FMultiBlockThingsIterator::CheckResult *ite void FMultiBlockThingsIterator::startIteratorForGroup(int group) { - DVector2 offset = level.Displacements.getOffset(basegroup, group); + DVector2 offset = blockIterator.Level->Displacements.getOffset(basegroup, group); offset.X += checkpoint.X; offset.Y += checkpoint.Y; bbox.setBox(offset.X, offset.Y, checkpoint.Z); @@ -1169,7 +1172,7 @@ TArray FPathTraverse::intercepts(128); void FPathTraverse::AddLineIntercepts(int bx, int by) { - FBlockLinesIterator it(bx, by, bx, by, true); + FBlockLinesIterator it(Level, bx, by, bx, by, true); line_t *ld; while ((ld = it.Next())) @@ -1459,13 +1462,13 @@ void FPathTraverse::init(double x1, double y1, double x2, double y2, int flags, y2 += y1; } - x1 -= level.blockmap.bmaporgx; - y1 -= level.blockmap.bmaporgy; + x1 -= Level->blockmap.bmaporgx; + y1 -= Level->blockmap.bmaporgy; xt1 = x1 / FBlockmap::MAPBLOCKUNITS; yt1 = y1 / FBlockmap::MAPBLOCKUNITS; - x2 -= level.blockmap.bmaporgx; - y2 -= level.blockmap.bmaporgy; + x2 -= Level->blockmap.bmaporgx; + y2 -= Level->blockmap.bmaporgy; xt2 = x2 / FBlockmap::MAPBLOCKUNITS; yt2 = y2 / FBlockmap::MAPBLOCKUNITS; @@ -1540,10 +1543,10 @@ void FPathTraverse::init(double x1, double y1, double x2, double y2, int flags, // Count is present to prevent a round off error // from skipping the break statement. - bool compatible = (flags & PT_COMPATIBLE) && (i_compatflags & COMPATF_HITSCAN); + bool compatible = (flags & PT_COMPATIBLE) && (Level->i_compatflags & COMPATF_HITSCAN); // we want to use one list of checked actors for the entire operation - FBlockThingsIterator btit; + FBlockThingsIterator btit(Level); for (count = 0 ; count < 1000 ; count++) { if (flags & PT_ADDLINES) @@ -1690,14 +1693,15 @@ AActor *P_BlockmapSearch (AActor *mo, int distance, AActor *(*check)(AActor*, in int finalStop; int count; AActor *target; - int bmapwidth = level.blockmap.bmapwidth; - int bmapheight = level.blockmap.bmapheight; + auto Level = mo->Level; + int bmapwidth = Level->blockmap.bmapwidth; + int bmapheight = Level->blockmap.bmapheight; - startX = level.blockmap.GetBlockX(mo->X()); - startY = level.blockmap.GetBlockY(mo->Y()); + startX = Level->blockmap.GetBlockX(mo->X()); + startY = Level->blockmap.GetBlockY(mo->Y()); validcount++; - if (level.blockmap.isValidBlock(startX, startY)) + if (Level->blockmap.isValidBlock(startX, startY)) { if ( (target = check (mo, startY*bmapwidth+startX, params)) ) { // found a target right away @@ -1788,7 +1792,7 @@ static AActor *RoughBlockCheck (AActor *mo, int index, void *param) FBlockNode *link; - for (link = level.blockmap.blocklinks[index]; link != NULL; link = link->NextActor) + for (link = mo->Level->blockmap.blocklinks[index]; link != NULL; link = link->NextActor) { if (link->Me != mo) { @@ -1933,15 +1937,15 @@ int P_VanillaPointOnLineSide(double x, double y, const line_t* line) // //========================================================================== -subsector_t *P_PointInSubsector(double x, double y) +subsector_t *FLevelLocals::PointInSubsector(double x, double y) { int side; - auto node = level.HeadGamenode(); - if (node == nullptr) return &level.subsectors[0]; + auto node = HeadGamenode(); + if (node == nullptr) return &subsectors[0]; - fixed_t xx = FLOAT2FIXED(x); - fixed_t yy = FLOAT2FIXED(y); + fixed_t xx = FloatToFixed(x); + fixed_t yy = FloatToFixed(y); do { side = R_PointOnSide(xx, yy, node); @@ -1958,11 +1962,11 @@ subsector_t *P_PointInSubsector(double x, double y) // //========================================================================== -sector_t *P_PointInSectorBuggy(double x, double y) +sector_t *FLevelLocals::PointInSectorBuggy(double x, double y) { // single subsector is a special case - auto node = level.HeadGamenode(); - if (node == nullptr) return level.subsectors[0].sector; + auto node = HeadGamenode(); + if (node == nullptr) return subsectors[0].sector; do { // Use original buggy point-on-side test when spawning @@ -1979,3 +1983,31 @@ sector_t *P_PointInSectorBuggy(double x, double y) subsector_t *ssec = (subsector_t *)((uint8_t *)node - 1); return ssec->sector; } + +//========================================================================== +// +// RPointInRenderSubsector +// +//========================================================================== + +subsector_t *FLevelLocals::PointInRenderSubsector (fixed_t x, fixed_t y) +{ + node_t *node; + int side; + + // single subsector is a special case + if (nodes.Size() == 0) + return &subsectors[0]; + + node = HeadNode(); + + do + { + side = R_PointOnSide (x, y, node); + node = (node_t *)node->children[side]; + } + while (!((size_t)node & 1)); + + return (subsector_t *)((uint8_t *)node - 1); +} + diff --git a/src/p_maputl.h b/src/p_maputl.h index 23e3f3ed62..5a65c27d3a 100644 --- a/src/p_maputl.h +++ b/src/p_maputl.h @@ -4,6 +4,7 @@ #include #include "r_defs.h" #include "doomstat.h" +#include "doomdata.h" #include "m_bbox.h" extern int validcount; @@ -50,7 +51,7 @@ inline int P_PointOnLineSidePrecise(const DVector2 &pt, const line_t *line) inline int P_PointOnLineSide (double x, double y, const line_t *line) { extern int P_VanillaPointOnLineSide(double x, double y, const line_t* line); - return i_compatflags2 & COMPATF2_POINTONLINE + return (line->flags & ML_COMPATSIDE) ? P_VanillaPointOnLineSide(x, y, line) : P_PointOnLineSidePrecise(x, y, line); } @@ -117,7 +118,7 @@ struct FLineOpening static const double LINEOPEN_MIN = -FLT_MAX; static const double LINEOPEN_MAX = FLT_MAX; -void P_LineOpening(FLineOpening &open, AActor *thing, const line_t *linedef, const DVector2 &xy, const DVector2 *ref = NULL, int flags = 0); +void P_LineOpening(FLineOpening &open, AActor *thing, const line_t *linedef, const DVector2 &xy, const DVector2 *ref = nullptr, int flags = 0); inline void P_LineOpening(FLineOpening &open, AActor *thing, const line_t *linedef, const DVector2 &xy, const DVector3 *ref, int flags = 0) { P_LineOpening(open, thing, linedef, xy, reinterpret_cast(ref), flags); @@ -206,6 +207,7 @@ private: class FBlockLinesIterator { friend class FMultiBlockLinesIterator; + FLevelLocals *Level; int minx, maxx; int miny, maxy; @@ -216,11 +218,11 @@ class FBlockLinesIterator void StartBlock(int x, int y); - FBlockLinesIterator() {} + FBlockLinesIterator(FLevelLocals *l) { Level = l; } void init(const FBoundingBox &box); public: - FBlockLinesIterator(int minx, int miny, int maxx, int maxy, bool keepvalidcount = false); - FBlockLinesIterator(const FBoundingBox &box); + FBlockLinesIterator(FLevelLocals *Level, int minx, int miny, int maxx, int maxy, bool keepvalidcount = false); + FBlockLinesIterator(FLevelLocals *Level, const FBoundingBox &box); line_t *Next(); void Reset() { StartBlock(minx, miny); } }; @@ -254,7 +256,7 @@ public: }; FMultiBlockLinesIterator(FPortalGroupArray &check, AActor *origin, double checkradius = -1); - FMultiBlockLinesIterator(FPortalGroupArray &check, double checkx, double checky, double checkz, double checkh, double checkradius, sector_t *newsec); + FMultiBlockLinesIterator(FPortalGroupArray &check, FLevelLocals *Level, double checkx, double checky, double checkz, double checkh, double checkradius, sector_t *newsec); bool Next(CheckResult *item); void Reset(); @@ -276,6 +278,7 @@ public: class FBlockThingsIterator { + FLevelLocals *Level; int minx, maxx; int miny, maxy; @@ -302,15 +305,16 @@ class FBlockThingsIterator // The following is only for use in the path traverser // and therefore declared private. - FBlockThingsIterator(); + FBlockThingsIterator(FLevelLocals *); friend class FPathTraverse; friend class FMultiBlockThingsIterator; public: - FBlockThingsIterator(int minx, int miny, int maxx, int maxy); - FBlockThingsIterator(const FBoundingBox &box) + FBlockThingsIterator(FLevelLocals *Level, int minx, int miny, int maxx, int maxy); + FBlockThingsIterator(FLevelLocals *l, const FBoundingBox &box) { + Level = l; init(box); } void init(const FBoundingBox &box); @@ -331,7 +335,7 @@ class FMultiBlockThingsIterator void startIteratorForGroup(int group); protected: - FMultiBlockThingsIterator(FPortalGroupArray &check) : checklist(check) {} + FMultiBlockThingsIterator(FPortalGroupArray &check, FLevelLocals *Level) : checklist(check), blockIterator(Level) {} public: struct CheckResult @@ -342,7 +346,7 @@ public: }; FMultiBlockThingsIterator(FPortalGroupArray &check, AActor *origin, double checkradius = -1, bool ignorerestricted = false); - FMultiBlockThingsIterator(FPortalGroupArray &check, double checkx, double checky, double checkz, double checkh, double checkradius, bool ignorerestricted, sector_t *newsec); + FMultiBlockThingsIterator(FPortalGroupArray &check, FLevelLocals *Level, double checkx, double checky, double checkz, double checkh, double checkradius, bool ignorerestricted, sector_t *newsec); bool Next(CheckResult *item); void Reset(); const FBoundingBox &Box() const @@ -358,6 +362,7 @@ class FPathTraverse protected: static TArray intercepts; + FLevelLocals *Level; divline_t trace; double Startfrac; unsigned int intercept_index; @@ -366,17 +371,21 @@ protected: virtual void AddLineIntercepts(int bx, int by); virtual void AddThingIntercepts(int bx, int by, FBlockThingsIterator &it, bool compatible); - FPathTraverse() {} + FPathTraverse(FLevelLocals *l) + { + Level = l; + } public: intercept_t *Next(); - FPathTraverse(double x1, double y1, double x2, double y2, int flags, double startfrac = 0) + FPathTraverse(FLevelLocals *l, double x1, double y1, double x2, double y2, int flags, double startfrac = 0) { + Level = l; init(x1, y1, x2, y2, flags, startfrac); } void init(double x1, double y1, double x2, double y2, int flags, double startfrac = 0); - int PortalRelocate(intercept_t *in, int flags, DVector3 *optpos = NULL); + int PortalRelocate(intercept_t *in, int flags, DVector3 *optpos = nullptr); void PortalRelocate(const DVector2 &disp, int flags, double hitfrac); virtual ~FPathTraverse(); const divline_t &Trace() const { return trace; } @@ -392,23 +401,6 @@ public: }; -//============================================================================ -// -// A traverser that uses the portal blockmap -// This should be in portal.h but that'd create circular dependencies. -// -//============================================================================ - -class FLinePortalTraverse : public FPathTraverse -{ - void AddLineIntercepts(int bx, int by); - -public: - FLinePortalTraverse() - { - } -}; - // // P_MAPUTL // @@ -423,4 +415,4 @@ double P_InterceptVector(const divline_t *v2, const divline_t *v1); #define PT_COMPATIBLE 4 #define PT_DELTA 8 // x2,y2 is passed as a delta, not as an endpoint -#endif \ No newline at end of file +#endif diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index 3aeed82fff..2335088fcc 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -59,7 +59,7 @@ // HEADER FILES ------------------------------------------------------------ #include #include "templates.h" -#include "i_system.h" + #include "m_random.h" #include "doomdef.h" #include "p_local.h" @@ -109,8 +109,6 @@ // EXTERNAL FUNCTION PROTOTYPES -------------------------------------------- -void G_PlayerReborn (int player); - // PRIVATE FUNCTION PROTOTYPES --------------------------------------------- static void PlayerLandedOnThing (AActor *mo, AActor *onmobj); @@ -147,7 +145,10 @@ FRandom pr_spawnmobj ("SpawnActor"); CUSTOM_CVAR (Float, sv_gravity, 800.f, CVAR_SERVERINFO|CVAR_NOSAVE) { - level.gravity = self; + for (auto Level : AllLevels()) + { + Level->gravity = self; + } } CVAR (Bool, cl_missiledecals, true, CVAR_ARCHIVE) @@ -383,7 +384,7 @@ void AActor::PostSerialize() AddToHash(); if (player) { - if (playeringame[player - players] && + if (Level->PlayerInGame(player) && player->cls != NULL && !(flags4 & MF4_NOSKIN) && state->sprite == GetDefaultByType(player->cls)->SpawnState->sprite) @@ -401,16 +402,6 @@ void AActor::PostSerialize() -AActor::AActor () throw() -{ -} - -AActor::AActor (const AActor &other) throw() - : DThinker() -{ - memcpy (&snext, &other.snext, (uint8_t *)&this[1] - (uint8_t *)&snext); -} - AActor &AActor::operator= (const AActor &other) { memcpy (&snext, &other.snext, (uint8_t *)&this[1] - (uint8_t *)&snext); @@ -498,7 +489,7 @@ int AActor::GetTics(FState * newstate) bool AActor::SetState (FState *newstate, bool nofunction) { if (debugfile && player && (player->cheats & CF_PREDICTING)) - fprintf (debugfile, "for pl %td: SetState while predicting!\n", player-players); + fprintf (debugfile, "for pl %d: SetState while predicting!\n", Level->PlayerNum(player)); do { if (newstate == NULL) @@ -739,7 +730,7 @@ AActor *AActor::GiveInventoryType (PClassActor *type) { if (type != nullptr) { - auto item = Spawn (type); + auto item = Spawn (Level, type); if (!CallTryPickup (item, this)) { item->Destroy (); @@ -784,7 +775,7 @@ void AActor::ClearInventory() void AActor::CopyFriendliness (AActor *other, bool changeTarget, bool resetHealth) { - level.total_monsters -= CountsAsKill(); + Level->total_monsters -= CountsAsKill(); TIDtoHate = other->TIDtoHate; LastLookActor = other->LastLookActor; LastLookPlayerNumber = other->LastLookPlayerNumber; @@ -799,7 +790,7 @@ void AActor::CopyFriendliness (AActor *other, bool changeTarget, bool resetHealt LastHeard = target = other->target; } if (resetHealth) health = SpawnHealth(); - level.total_monsters += CountsAsKill(); + Level->total_monsters += CountsAsKill(); } DEFINE_ACTION_FUNCTION(AActor, CopyFriendliness) @@ -952,18 +943,23 @@ DEFINE_ACTION_FUNCTION(AActor, GiveBody) // //============================================================================ -bool AActor::CheckLocalView (int playernum) const +bool AActor::CheckLocalView() const { - if (players[playernum].camera == this) - { - return true; - } - if (players[playernum].mo != this || players[playernum].camera == NULL) + auto p = Level->GetConsolePlayer(); + if (p == nullptr) { return false; } - if (players[playernum].camera->player == NULL && - !(players[playernum].camera->flags3 & MF3_ISMONSTER)) + if (p->camera == this) + { + return true; + } + if (p->mo != this || p->camera == nullptr) + { + return false; + } + if (p->camera->player == NULL && + !(p->camera->flags3 & MF3_ISMONSTER)) { return true; } @@ -974,7 +970,7 @@ DEFINE_ACTION_FUNCTION(AActor, CheckLocalView) { PARAM_SELF_PROLOGUE(AActor); PARAM_INT(cp); - ACTION_RETURN_BOOL(self->CheckLocalView(cp)); + ACTION_RETURN_BOOL(self->CheckLocalView()); } //============================================================================ @@ -990,8 +986,10 @@ bool AActor::IsInsideVisibleAngles() const // Don't bother masking if not wanted. if (!(renderflags & RF_MASKROTATION)) return true; + + auto p = Level->GetConsolePlayer(); - if (players[consoleplayer].camera == nullptr) + if (p == nullptr || p->camera == nullptr) return true; DAngle anglestart = VisibleStartAngle; @@ -1014,7 +1012,7 @@ bool AActor::IsInsideVisibleAngles() const } - AActor *mo = players[consoleplayer].camera; + AActor *mo = p->camera; if (mo != nullptr) { @@ -1044,22 +1042,25 @@ bool AActor::IsInsideVisibleAngles() const // // Returns true if this actor should be seen by the console player. // +// Not that even for secondary maps this must check the real player! +// //============================================================================ bool AActor::IsVisibleToPlayer() const { + auto p = Level->GetConsolePlayer(); // [BB] Safety check. This should never be NULL. Nevertheless, we return true to leave the default ZDoom behavior unaltered. - if ( players[consoleplayer].camera == NULL ) + if (p == nullptr || p->camera == nullptr ) return true; if (VisibleToTeam != 0 && teamplay && - (signed)(VisibleToTeam-1) != players[consoleplayer].userinfo.GetTeam() ) + (signed)(VisibleToTeam-1) != p->userinfo.GetTeam() ) return false; auto &vis = GetInfo()->VisibleToPlayerClass; if (vis.Size() == 0) return true; // early out for the most common case. - const player_t* pPlayer = players[consoleplayer].camera->player; + const player_t* pPlayer = p->camera->player; if (pPlayer) { @@ -1170,7 +1171,7 @@ bool AActor::Grind(bool items) // see rh_log entry for February 21, 1999. Don't know if it is still relevant. if (state == NULL // Only use the default crushed state if: && !(flags & MF_NOBLOOD) // 1. the monster bleeeds, - && (i_compatflags & COMPATF_CORPSEGIBS) // 2. the compat setting is on, + && (Level->i_compatflags & COMPATF_CORPSEGIBS) // 2. the compat setting is on, && player == NULL) // 3. and the thing isn't a player. { isgeneric = true; @@ -1207,7 +1208,7 @@ bool AActor::Grind(bool items) if (i != NULL) { - i = i->GetReplacement(); + i = i->GetReplacement(Level); const AActor *defaults = GetDefaultByType (i); if (defaults->SpawnState == NULL || @@ -1226,7 +1227,7 @@ bool AActor::Grind(bool items) return false; } - AActor *gib = Spawn (i, Pos(), ALLOW_REPLACE); + AActor *gib = Spawn (Level, i, Pos(), ALLOW_REPLACE); if (gib != NULL) { gib->RenderStyle = RenderStyle; @@ -1425,7 +1426,7 @@ void P_ExplodeMissile (AActor *mo, line_t *line, AActor *target, bool onsky) } } - DImpactDecal::StaticCreate(base->GetDecal(), linepos, line->sidedef[side], ffloor); + DImpactDecal::StaticCreate(mo->Level, base->GetDecal(), linepos, line->sidedef[side], ffloor); } } } @@ -1825,7 +1826,7 @@ double P_XYMovement (AActor *mo, DVector2 scroll) // [anon] When friction is turned off, turn off the crouching and water // speed caps as well, since it is a sort of friction, and the modders // most likely want to deal with that themselves. - if ((mo->player != NULL && (i_compatflags & COMPATF_WALLRUN)) || ((mo->waterlevel >= 1 || + if ((mo->player != NULL && (mo->Level->i_compatflags & COMPATF_WALLRUN)) || ((mo->waterlevel >= 1 || (mo->player != NULL && mo->player->crouchfactor < 0.75)) && !(mo->flags8 & MF8_NOFRICTION))) { // preserve the direction instead of clamping x and y independently. @@ -1947,7 +1948,7 @@ double P_XYMovement (AActor *mo, DVector2 scroll) DAngle oldangle = mo->Angles.Yaw; do { - if (i_compatflags & COMPATF_WALLRUN) pushtime++; + if (mo->Level->i_compatflags & COMPATF_WALLRUN) pushtime++; tm.PushTime = pushtime; ptry = start + move * step / steps; @@ -1998,7 +1999,7 @@ double P_XYMovement (AActor *mo, DVector2 scroll) // actor's velocity, do not attempt to slide. if (mo->Vel.XY() == startvel) { - if (player && (i_compatflags & COMPATF_WALLRUN)) + if (player && (mo->Level->i_compatflags & COMPATF_WALLRUN)) { // [RH] Here is the key to wall running: The move is clipped using its full speed. // If the move is done a second time (because it was too fast for one move), it @@ -2016,7 +2017,7 @@ double P_XYMovement (AActor *mo, DVector2 scroll) } else { - if (!player || !(i_compatflags & COMPATF_WALLRUN)) + if (!player || !(mo->Level->i_compatflags & COMPATF_WALLRUN)) { move = mo->Vel; onestep = move / steps; @@ -2225,15 +2226,16 @@ explode: (!(mo->flags2 & MF2_FLY) || !(mo->flags & MF_NOGRAVITY)) && !mo->waterlevel) { // [RH] Friction when falling is available for larger aircontrols - if (player != NULL && level.airfriction != 1.) + auto airfriction = mo->Level->airfriction; + if (player != NULL && airfriction != 1.) { - mo->Vel.X *= level.airfriction; - mo->Vel.Y *= level.airfriction; + mo->Vel.X *= airfriction; + mo->Vel.Y *= airfriction; if (player->mo == mo) // Not voodoo dolls { - player->Vel.X *= level.airfriction; - player->Vel.Y *= level.airfriction; + player->Vel.X *= airfriction; + player->Vel.Y *= airfriction; } } return Oldfloorz; @@ -2336,7 +2338,7 @@ void P_MonsterFallingDamage (AActor *mo) int damage; double vel; - if (!(level.flags2 & LEVEL2_MONSTERFALLINGDAMAGE)) + if (!(mo->Level->flags2 & LEVEL2_MONSTERFALLINGDAMAGE)) return; if (mo->floorsector->Flags & SECF_NOFALLINGDAMAGE) return; @@ -2459,7 +2461,7 @@ void P_ZMovement (AActor *mo, double oldfloorz) // Hexen yanked all items to the floor, except those being spawned at map start in the air. // Those were kept at their original height. // Do this only if the item was actually spawned by the map above ground to avoid problems. - if (mo->specialf1 > 0 && (mo->flags2 & MF2_FLOATBOB) && (ib_compatflags & BCOMPATF_FLOATBOB)) + if (mo->specialf1 > 0 && (mo->flags2 & MF2_FLOATBOB) && (mo->Level->ib_compatflags & BCOMPATF_FLOATBOB)) { mo->SetZ(mo->floorz + mo->specialf1); } @@ -2484,7 +2486,7 @@ void P_ZMovement (AActor *mo, double oldfloorz) { if (!mo->IsNoClip2()) { - mo->AddZ(DAngle(360 / 80.f * level.maptime).Sin() / 8); + mo->AddZ(DAngle(360 / 80.f * mo->Level->maptime).Sin() / 8); } if (!(mo->flags8 & MF8_NOFRICTION)) @@ -2818,7 +2820,7 @@ void P_NightmareRespawn (AActor *mobj) z = ONFLOORZ; // spawn it - mo = AActor::StaticSpawn(mobj->GetClass(), DVector3(mobj->SpawnPoint.X, mobj->SpawnPoint.Y, z), NO_REPLACE, true); + mo = AActor::StaticSpawn(mobj->Level, mobj->GetClass(), DVector3(mobj->SpawnPoint.X, mobj->SpawnPoint.Y, z), NO_REPLACE, true); mo->health = mobj->SpawnHealth(); if (z == ONFLOORZ) @@ -2896,19 +2898,6 @@ void P_NightmareRespawn (AActor *mobj) } -AActor *AActor::TIDHash[128]; - -// -// P_ClearTidHashes -// -// Clears the tid hashtable. -// - -void AActor::ClearTIDHashes () -{ - memset(TIDHash, 0, sizeof(TIDHash)); -} - // // P_AddMobjToHash // @@ -2926,10 +2915,11 @@ void AActor::AddToHash () else { int hash = TIDHASH (tid); + auto &slot = Level->TIDHash[hash]; - inext = TIDHash[hash]; - iprev = &TIDHash[hash]; - TIDHash[hash] = this; + inext = slot; + iprev = &slot; + slot = this; if (inext) { inext->iprev = &inext; @@ -2966,9 +2956,9 @@ void AActor::RemoveFromHash () // //========================================================================== -bool P_IsTIDUsed(int tid) +bool FLevelLocals::IsTIDUsed(int tid) { - AActor *probe = AActor::TIDHash[tid & 127]; + AActor *probe = TIDHash[tid & 127]; while (probe != NULL) { if (probe->tid == tid) @@ -2991,7 +2981,7 @@ bool P_IsTIDUsed(int tid) // //========================================================================== -int P_FindUniqueTID(int start_tid, int limit) +int FLevelLocals::FindUniqueTID(int start_tid, int limit) { int tid; @@ -3007,7 +2997,7 @@ int P_FindUniqueTID(int start_tid, int limit) } for (tid = start_tid; tid <= limit; ++tid) { - if (tid != 0 && !P_IsTIDUsed(tid)) + if (tid != 0 && !IsTIDUsed(tid)) { return tid; } @@ -3029,7 +3019,7 @@ int P_FindUniqueTID(int start_tid, int limit) { // Use a positive starting TID. tid = pr_uniquetid.GenRand32() & INT_MAX; - tid = P_FindUniqueTID(tid == 0 ? 1 : tid, 5); + tid = FindUniqueTID(tid == 0 ? 1 : tid, 5); if (tid != 0) { return tid; @@ -3042,9 +3032,11 @@ int P_FindUniqueTID(int start_tid, int limit) CCMD(utid) { - Printf("%d\n", - P_FindUniqueTID(argv.argc() > 1 ? atoi(argv[1]) : 0, - (argv.argc() > 2 && atoi(argv[2]) >= 0) ? atoi(argv[2]) : 0)); + for (auto Level : AllLevels()) + { + Printf("%s, %d\n", Level->MapName.GetChars(), Level->FindUniqueTID(argv.argc() > 1 ? atoi(argv[1]) : 0, + (argv.argc() > 2 && atoi(argv[2]) >= 0) ? atoi(argv[2]) : 0)); + } } //========================================================================== @@ -3282,7 +3274,7 @@ bool AActor::IsOkayToAttack (AActor *link) AActor * Friend; if (flags5 & MF5_SUMMONEDMONSTER) Friend = tracer; else if (flags2 & MF2_SEEKERMISSILE) Friend = target; - else if ((flags & MF_FRIENDLY) && FriendPlayer) Friend = players[FriendPlayer-1].mo; + else if ((flags & MF_FRIENDLY) && FriendPlayer) Friend = Level->Players[FriendPlayer-1]->mo; else Friend = this; // Friend checks @@ -3413,7 +3405,7 @@ DVector3 AActor::GetPortalTransition(double byoffset, sector_t **pSec) if (testz >= sec->GetPortalPlaneZ(sector_t::ceiling)) { pos = PosRelative(sec->GetOppositePortalGroup(sector_t::ceiling)); - sec = P_PointInSector(pos); + sec = Level->PointInSector(pos); moved = true; } else break; @@ -3425,7 +3417,7 @@ DVector3 AActor::GetPortalTransition(double byoffset, sector_t **pSec) if (testz < sec->GetPortalPlaneZ(sector_t::floor)) { pos = PosRelative(sec->GetOppositePortalGroup(sector_t::floor)); - sec = P_PointInSector(pos); + sec = Level->PointInSector(pos); } else break; } @@ -3448,7 +3440,7 @@ void AActor::CheckPortalTransition(bool islinked) if (islinked && !moved) UnlinkFromWorld(&ctx); SetXYZ(PosRelative(Sector->GetOppositePortalGroup(sector_t::ceiling))); Prev += Pos() - oldpos; - Sector = P_PointInSector(Pos()); + Sector = Level->PointInSector(Pos()); PrevPortalGroup = Sector->PortalGroup; moved = true; } @@ -3465,7 +3457,7 @@ void AActor::CheckPortalTransition(bool islinked) if (islinked && !moved) UnlinkFromWorld(&ctx); SetXYZ(PosRelative(Sector->GetOppositePortalGroup(sector_t::floor))); Prev += Pos() - oldpos; - Sector = P_PointInSector(Pos()); + Sector = Level->PointInSector(Pos()); PrevPortalGroup = Sector->PortalGroup; moved = true; } @@ -3523,18 +3515,15 @@ void AActor::Tick () // apply velocity // ensure that the actor is not linked into the blockmap - if (!(flags5 & MF5_NOTIMEFREEZE)) + //Added by MC: Freeze mode. + if (isFrozen()) { - //Added by MC: Freeze mode. - if (bglobal.freeze || level.flags2 & LEVEL2_FROZEN) + // Boss cubes shouldn't be accelerated by timefreeze + if (flags6 & MF6_BOSSCUBE) { - // Boss cubes shouldn't be accelerated by timefreeze - if (flags6 & MF6_BOSSCUBE) - { - special2++; - } - return; + special2++; } + return; } if (!Vel.isZero() || !(flags & MF_NOBLOCKMAP)) @@ -3573,34 +3562,23 @@ void AActor::Tick () return; } - if (!(flags5 & MF5_NOTIMEFREEZE)) + if (isFrozen()) { // Boss cubes shouldn't be accelerated by timefreeze if (flags6 & MF6_BOSSCUBE) { special2++; } - //Added by MC: Freeze mode. - if (bglobal.freeze && !(player && player->Bot == NULL)) - { - return; - } - - // Apply freeze mode. - if ((level.flags2 & LEVEL2_FROZEN) && (player == NULL || player->timefreezer == 0)) - { - return; - } + return; } - if (effects & FX_ROCKET) { if (++smokecounter == 4) { // add some smoke behind the rocket smokecounter = 0; - AActor *th = Spawn("RocketSmokeTrail", Vec3Offset(-Vel), ALLOW_REPLACE); + AActor *th = Spawn(Level, "RocketSmokeTrail", Vec3Offset(-Vel), ALLOW_REPLACE); if (th) { th->tics -= pr_rockettrail()&3; @@ -3618,7 +3596,7 @@ void AActor::Tick () double xo = -moveangle.Cos() * radius * 2 + pr_rockettrail() / 64.; double yo = -moveangle.Sin() * radius * 2 + pr_rockettrail() / 64.; double zo = -Height * Vel.Z / 8. + Height * (2 / 3.); - AActor * th = Spawn("GrenadeSmokeTrail", Vec3Offset(xo, yo, zo), ALLOW_REPLACE); + AActor * th = Spawn(Level, "GrenadeSmokeTrail", Vec3Offset(xo, yo, zo), ALLOW_REPLACE); if (th) { th->tics -= pr_rockettrail()&3; @@ -3695,16 +3673,16 @@ void AActor::Tick () } } - if (bglobal.botnum && !demoplayback && + if (Level->BotInfo.botnum && !demoplayback && ((flags & (MF_SPECIAL|MF_MISSILE)) || (flags3 & MF3_ISMONSTER))) { - bglobal.BotTick(this); + Level->BotInfo.BotTick(this); } // [RH] Consider carrying sectors here DVector2 cumm(0, 0); - if ((((flags8 & MF8_INSCROLLSEC) && level.Scrolls.Size() > 0) || player != NULL) && !(flags & MF_NOCLIP) && !(flags & MF_NOSECTOR)) + if ((((flags8 & MF8_INSCROLLSEC) && Level->Scrolls.Size() > 0) || player != NULL) && !(flags & MF_NOCLIP) && !(flags & MF_NOSECTOR)) { double height, waterheight; // killough 4/4/98: add waterheight const msecnode_t *node; @@ -3728,9 +3706,9 @@ void AActor::Tick () sector_t *sec = node->m_sector; DVector2 scrollv; - if (level.Scrolls.Size() > unsigned(sec->Index())) + if (Level->Scrolls.Size() > unsigned(sec->Index())) { - scrollv = level.Scrolls[sec->Index()]; + scrollv = Level->Scrolls[sec->Index()]; } else { @@ -3745,7 +3723,7 @@ void AActor::Tick () scrolltype <= Scroll_SouthWest_Fast) { // Hexen scroll special scrolltype -= Scroll_North_Slow; - if (i_compatflags&COMPATF_RAVENSCROLL) + if (Level->i_compatflags&COMPATF_RAVENSCROLL) { scrollv.X -= HexenCompatSpeeds[HexenScrollies[scrolltype][0]+4] * (1. / (32 * CARRYFACTOR)); scrollv.Y += HexenCompatSpeeds[HexenScrollies[scrolltype][1]+4] * (1. / (32 * CARRYFACTOR)); @@ -3764,7 +3742,7 @@ void AActor::Tick () scrolltype -= Carry_East5; uint8_t dir = HereticScrollDirs[scrolltype / 5]; double carryspeed = HereticSpeedMuls[scrolltype % 5] * (1. / (32 * CARRYFACTOR)); - if (scrolltype < 5 && !(i_compatflags&COMPATF_RAVENSCROLL)) + if (scrolltype < 5 && !(Level->i_compatflags&COMPATF_RAVENSCROLL)) { // Use speeds that actually match the scrolling textures! carryspeed = (1 << ((scrolltype % 5) + 15)) / 65536.; @@ -3774,7 +3752,7 @@ void AActor::Tick () } else if (scrolltype == dScroll_EastLavaDamage) { // Special Heretic scroll special - if (i_compatflags&COMPATF_RAVENSCROLL) + if (Level->i_compatflags&COMPATF_RAVENSCROLL) { scrollv.X += 28. / (32*CARRYFACTOR); } @@ -3786,7 +3764,7 @@ void AActor::Tick () } else if (scrolltype == Scroll_StrifeCurrent) { // Strife scroll special - int anglespeed = tagManager.GetFirstSectorTag(sec) - 100; + int anglespeed = Level->GetFirstSectorTag(sec) - 100; double carryspeed = (anglespeed % 10) / (16 * CARRYFACTOR); DAngle angle = ((anglespeed / 10) * 45.); scrollv += angle.ToVector(carryspeed); @@ -3827,7 +3805,7 @@ void AActor::Tick () // Some levels designed with Boom in mind actually want things to accelerate // at neighboring scrolling sector boundaries. But it is only important for // non-player objects. - if (player != NULL || !(i_compatflags & COMPATF_BOOMSCROLL)) + if (player != NULL || !(Level->i_compatflags & COMPATF_BOOMSCROLL)) { if (countx > 1) { @@ -3920,7 +3898,7 @@ void AActor::Tick () } if (Vel.Z != 0 || BlockingMobj || Z() != floorz) { // Handle Z velocity and gravity - if (((flags2 & MF2_PASSMOBJ) || (flags & MF_SPECIAL)) && !(i_compatflags & COMPATF_NO_PASSMOBJ)) + if (((flags2 & MF2_PASSMOBJ) || (flags & MF_SPECIAL)) && !(Level->i_compatflags & COMPATF_NO_PASSMOBJ)) { if (!(onmo = P_CheckOnmobj (this))) { @@ -3931,7 +3909,7 @@ void AActor::Tick () { if (player) { - if (Vel.Z < level.gravity * Sector->gravity * (-1./100)// -655.36f) + if (Vel.Z < Level->gravity * Sector->gravity * (-1./100)// -655.36f) && !(flags&MF_NOGRAVITY)) { PlayerLandedOnThing (this, onmo); @@ -3959,12 +3937,12 @@ void AActor::Tick () if ((onmo->flags6 & MF6_BUMPSPECIAL) && ((player != NULL) || ((onmo->activationtype & THINGSPEC_MonsterTrigger) && (flags3 & MF3_ISMONSTER)) || ((onmo->activationtype & THINGSPEC_MissileTrigger) && (flags & MF_MISSILE)) - ) && (level.maptime > onmo->lastbump)) // Leave the bumper enough time to go away + ) && (Level->maptime > onmo->lastbump)) // Leave the bumper enough time to go away { if (player == NULL || !(player->cheats & CF_PREDICTING)) { if (P_ActivateThingSpecial(onmo, this)) - onmo->lastbump = level.maptime + TICRATE; + onmo->lastbump = Level->maptime + TICRATE; } } if (Vel.Z != 0 && (BounceFlags & BOUNCE_Actors)) @@ -4005,7 +3983,7 @@ void AActor::Tick () } // Check for poison damage, but only once per PoisonPeriod tics (or once per second if none). - if (PoisonDurationReceived && (level.time % (PoisonPeriodReceived ? PoisonPeriodReceived : TICRATE) == 0)) + if (PoisonDurationReceived && (Level->time % (PoisonPeriodReceived ? PoisonPeriodReceived : TICRATE) == 0)) { P_DamageMobj(this, NULL, Poisoner, PoisonDamageReceived, PoisonDamageTypeReceived ? PoisonDamageTypeReceived : (FName)NAME_Poison, 0); @@ -4059,7 +4037,7 @@ void AActor::Tick () if (movecount < respawn_monsters) return; - if (level.time & 31) + if (Level->time & 31) return; if (pr_nightmarerespawn() > 4) @@ -4352,7 +4330,7 @@ bool AActor::UpdateWaterLevel(bool dosplash) else if (oldlevel == 3 && waterlevel < 3) { // Our head just came up. - if (player->air_finished > level.time) + if (player->air_finished > Level->time) { // We hadn't run out of air yet. S_Sound(this, CHAN_VOICE, "*surface", 1, ATTN_NORM); @@ -4377,29 +4355,17 @@ DEFINE_ACTION_FUNCTION(AActor, UpdateWaterLevel) // //========================================================================== -AActor *AActor::StaticSpawn (PClassActor *type, const DVector3 &pos, replace_t allowreplacement, bool SpawningMapThing) +void ConstructActor(AActor *actor, const DVector3 &pos, bool SpawningMapThing) { - if (type == NULL) - { - I_Error ("Tried to spawn a class-less actor\n"); - } - - if (allowreplacement) - { - type = type->GetReplacement(); - } - - AActor *actor; - - actor = static_cast(const_cast(type)->CreateNew ()); - actor->SpawnTime = level.totaltime; - actor->SpawnOrder = level.spawnindex++; + auto Level = actor->Level; + actor->SpawnTime = Level->totaltime; + actor->SpawnOrder = Level->spawnindex++; // Set default dialogue - actor->ConversationRoot = GetConversation(actor->GetClass()->TypeName); + actor->ConversationRoot = Level->GetConversation(actor->GetClass()->TypeName); if (actor->ConversationRoot != -1) { - actor->Conversation = StrifeDialogues[actor->ConversationRoot]; + actor->Conversation = Level->StrifeDialogues[actor->ConversationRoot]; } else { @@ -4414,7 +4380,7 @@ AActor *AActor::StaticSpawn (PClassActor *type, const DVector3 &pos, replace_t a // Actors with zero gravity need the NOGRAVITY flag set. if (actor->Gravity == 0) actor->flags |= MF_NOGRAVITY; - FRandom &rng = bglobal.m_Thinking ? pr_botspawnmobj : pr_spawnmobj; + FRandom &rng = Level->BotInfo.m_Thinking ? pr_botspawnmobj : pr_spawnmobj; if (actor->isFast() && actor->flags3 & MF3_ISMONSTER) actor->reactiontime = 0; @@ -4461,7 +4427,7 @@ AActor *AActor::StaticSpawn (PClassActor *type, const DVector3 &pos, replace_t a actor->SetZ(actor->ceilingz - actor->Height); } - if (SpawningMapThing || !type->IsDescendantOf (NAME_PlayerPawn)) + if (SpawningMapThing || !actor->IsKindOf (NAME_PlayerPawn)) { // Check if there's something solid to stand on between the current position and the // current sector's floor. For map spawns this must be delayed until after setting the @@ -4537,30 +4503,50 @@ AActor *AActor::StaticSpawn (PClassActor *type, const DVector3 &pos, replace_t a actor->CallBeginPlay (); if (actor->ObjectFlags & OF_EuthanizeMe) { - return NULL; + return; } } - if (level.flags & LEVEL_NOALLIES && !actor->player) + if (Level->flags & LEVEL_NOALLIES && !actor->player) { actor->flags &= ~MF_FRIENDLY; } // [RH] Count monsters whenever they are spawned. if (actor->CountsAsKill()) { - level.total_monsters++; + Level->total_monsters++; } // [RH] Same, for items if (actor->flags & MF_COUNTITEM) { - level.total_items++; + Level->total_items++; } // And for secrets if (actor->flags5 & MF5_COUNTSECRET) { - level.total_secrets++; + Level->total_secrets++; } // force scroller check in the first tic. actor->flags8 |= MF8_INSCROLLSEC; +} + + +AActor *AActor::StaticSpawn(FLevelLocals *Level, PClassActor *type, const DVector3 &pos, replace_t allowreplacement, bool SpawningMapThing) +{ + if (type == NULL) + { + I_Error("Tried to spawn a class-less actor\n"); + } + + if (allowreplacement) + { + type = type->GetReplacement(Level); + } + + AActor *actor; + + actor = static_cast(Level->CreateThinker(type)); + + ConstructActor(actor, pos, SpawningMapThing); return actor; } @@ -4572,7 +4558,7 @@ DEFINE_ACTION_FUNCTION(AActor, Spawn) PARAM_FLOAT(y); PARAM_FLOAT(z); PARAM_INT(flags); - ACTION_RETURN_OBJECT(AActor::StaticSpawn(type, DVector3(x, y, z), replace_t(flags))); + ACTION_RETURN_OBJECT(AActor::StaticSpawn(currentVMLevel, type, DVector3(x, y, z), replace_t(flags))); } PClassActor *ClassForSpawn(FName classname) @@ -4625,7 +4611,7 @@ void AActor::HandleSpawnFlags () if (flags & MF_COUNTKILL) { flags &= ~MF_COUNTKILL; - level.total_monsters--; + Level->total_monsters--; } } if (SpawnFlags & MTF_SHADOW) @@ -4644,7 +4630,7 @@ void AActor::HandleSpawnFlags () { //Printf("Secret %s in sector %i!\n", GetTag(), Sector->sectornum); flags5 |= MF5_COUNTSECRET; - level.total_secrets++; + Level->total_secrets++; } } } @@ -4696,7 +4682,7 @@ void AActor::PostBeginPlay () void AActor::CallPostBeginPlay() { Super::CallPostBeginPlay(); - E_WorldThingSpawned(this); + Level->localEventManager->WorldThingSpawned(this); } bool AActor::isFast() @@ -4814,7 +4800,7 @@ void AActor::OnDestroy () // note that this differs from ThingSpawned in that you can actually override OnDestroy to avoid calling the hook. // but you can't really do that without utterly breaking the game, so it's ok. // note: if OnDestroy is ever made optional, E_WorldThingDestroyed should still be called for ANY thing. - E_WorldThingDestroyed(this); + Level->localEventManager->WorldThingDestroyed(this); DeleteAttachedLights(); ClearRenderSectorList(); @@ -4905,7 +4891,7 @@ EXTERN_CVAR(Float, fov) extern bool demonew; -AActor *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags) +AActor *FLevelLocals::SpawnPlayer (FPlayerStart *mthing, int playernum, int flags) { player_t *p; AActor *mobj, *oldactor; @@ -4918,7 +4904,7 @@ AActor *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags) return NULL; } // not playing? - if ((unsigned)playernum >= (unsigned)MAXPLAYERS || !playeringame[playernum]) + if ((unsigned)playernum >= (unsigned)MAXPLAYERS || !PlayerInGame(playernum) ) return NULL; // Old lerp data needs to go @@ -4927,7 +4913,7 @@ AActor *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags) P_PredictionLerpReset(); } - p = &players[playernum]; + p = Players[playernum]; if (p->cls == NULL) { @@ -4989,9 +4975,9 @@ AActor *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags) spawn.Z = ONFLOORZ; } - mobj = Spawn (p->cls, spawn, NO_REPLACE); + mobj = Spawn (this, p->cls, spawn, NO_REPLACE); - if (level.flags & LEVEL_USEPLAYERSTARTZ) + if (flags & LEVEL_USEPLAYERSTARTZ) { if (spawn.Z == ONFLOORZ) mobj->AddZ(mthing->pos.Z); @@ -5007,7 +4993,7 @@ AActor *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags) state = p->playerstate; if (state == PST_REBORN || state == PST_ENTER) { - G_PlayerReborn (playernum); + PlayerReborn (playernum); } else if (oldactor != NULL && oldactor->player == p && !(flags & SPF_TEMPPLAYER)) { @@ -5017,7 +5003,7 @@ AActor *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags) VMValue params[] = { mobj, oldactor }; VMCall(func, params, 2, nullptr, 0); } - level.Behaviors.StopMyScripts (oldactor); // cancel all ENTER/RESPAWN scripts for the voodoo doll + Behaviors.StopMyScripts (oldactor); // cancel all ENTER/RESPAWN scripts for the voodoo doll } // [GRB] Reset skin @@ -5076,9 +5062,9 @@ AActor *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags) for (int ii = 0; ii < MAXPLAYERS; ++ii) { - if (playeringame[ii] && players[ii].camera == oldactor) + if (PlayerInGame(ii) && Players[ii]->camera == oldactor) { - players[ii].camera = mobj; + Players[ii]->camera = mobj; } } @@ -5100,7 +5086,7 @@ AActor *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags) VMCall(func, params, 1, nullptr, 0); } } - else if ((multiplayer || (level.flags2 & LEVEL2_ALLOWRESPAWN) || sv_singleplayerrespawn || + else if ((multiplayer || (flags2 & LEVEL2_ALLOWRESPAWN) || sv_singleplayerrespawn || !!G_SkillProperty(SKILLP_PlayerRespawn)) && state == PST_REBORN && oldactor != NULL) { // Special inventory handling for respawning in coop IFVM(PlayerPawn, FilterCoopRespawnInventory) @@ -5146,7 +5132,7 @@ AActor *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags) { if (state == PST_ENTER || (state == PST_LIVE && !savegamerestore)) { - level.Behaviors.StartTypedScripts (SCRIPT_Enter, p->mo, true); + Behaviors.StartTypedScripts (SCRIPT_Enter, p->mo, true); } else if (state == PST_REBORN) { @@ -5157,20 +5143,20 @@ AActor *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags) // monsters who last targeted this player will wake up immediately // after the player has respawned. AActor *th; - TThinkerIterator it; + auto it = GetThinkerIterator(); while ((th = it.Next())) { if (th->LastHeard == oldactor) th->LastHeard = nullptr; } - for(auto &sec : level.sectors) + for(auto &sec : sectors) { if (sec.SoundTarget == oldactor) sec.SoundTarget = nullptr; } DObject::StaticPointerSubstitution (oldactor, p->mo); - E_PlayerRespawned(int(p - players)); - level.Behaviors.StartTypedScripts (SCRIPT_Respawn, p->mo, true); + localEventManager->PlayerRespawned(PlayerNum(p)); + Behaviors.StartTypedScripts (SCRIPT_Respawn, p->mo, true); } } return mobj; @@ -5183,7 +5169,7 @@ AActor *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags) // already be in host byte order. // // [RH] position is used to weed out unwanted start spots -AActor *P_SpawnMapThing (FMapThing *mthing, int position) +AActor *FLevelLocals::SpawnMapThing (FMapThing *mthing, int position) { PClassActor *i; int mask; @@ -5229,7 +5215,7 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) { // count deathmatch start positions FPlayerStart start(mthing, 0); - level.deathmatchstarts.Push(start); + deathmatchstarts.Push(start); return NULL; } @@ -5257,7 +5243,7 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) } } - if (pnum == -1 || (level.flags & LEVEL_FILTERSTARTS)) + if (pnum == -1 || (flags & LEVEL_FILTERSTARTS)) { // check for appropriate game type if (deathmatch) @@ -5287,10 +5273,14 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) // this is enabled for all games. if (!multiplayer) { // Single player - int spawnmask = players[consoleplayer].GetSpawnClass(); - if (spawnmask != 0 && (mthing->ClassFilter & spawnmask) == 0) - { // Not for current class - return NULL; + auto p = GetConsolePlayer(); + if (p) + { + int spawnmask = p->GetSpawnClass(); + if (spawnmask != 0 && (mthing->ClassFilter & spawnmask) == 0) + { // Not for current class + return nullptr; + } } } else if (!deathmatch) @@ -5298,9 +5288,9 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) mask = 0; for (int i = 0; i < MAXPLAYERS; i++) { - if (playeringame[i]) + if (PlayerInGame(i)) { - int spawnmask = players[i].GetSpawnClass(); + int spawnmask = Players[i]->GetSpawnClass(); if (spawnmask != 0) mask |= spawnmask; else @@ -5322,10 +5312,10 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) // save spots for respawning in network games FPlayerStart start(mthing, pnum+1); - level.playerstarts[pnum] = start; - if (level.flags2 & LEVEL2_RANDOMPLAYERSTARTS) + playerstarts[pnum] = start; + if (flags2 & LEVEL2_RANDOMPLAYERSTARTS) { // When using random player starts, all starts count - level.AllPlayerStarts.Push(start); + AllPlayerStarts.Push(start); } else { // When not using random player starts, later single player @@ -5333,22 +5323,22 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) // ones are for voodoo dolls and not likely to be ideal for // spawning regular players. unsigned i; - for (i = 0; i < level.AllPlayerStarts.Size(); ++i) + for (i = 0; i < AllPlayerStarts.Size(); ++i) { - if (level.AllPlayerStarts[i].type == pnum+1) + if (AllPlayerStarts[i].type == pnum+1) { - level.AllPlayerStarts[i] = start; + AllPlayerStarts[i] = start; break; } } - if (i == level.AllPlayerStarts.Size()) + if (i == AllPlayerStarts.Size()) { - level.AllPlayerStarts.Push(start); + AllPlayerStarts.Push(start); } } - if (!deathmatch && !(level.flags2 & LEVEL2_RANDOMPLAYERSTARTS)) + if (!deathmatch && !(flags2 & LEVEL2_RANDOMPLAYERSTARTS)) { - return P_SpawnPlayer(&start, pnum, (level.flags2 & LEVEL2_PRERAISEWEAPON) ? SPF_WEAPONFULLYUP : 0); + return SpawnPlayer(&start, pnum, (flags2 & LEVEL2_PRERAISEWEAPON) ? SPF_WEAPONFULLYUP : 0); } return NULL; } @@ -5364,7 +5354,7 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) } else { - P_PointInSector (mthing->pos)->seqType = type; + PointInSector (mthing->pos)->seqType = type; } return NULL; } @@ -5373,7 +5363,7 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) // it to the unknown thing. // Handle decorate replacements explicitly here // to check for missing frames in the replacement object. - i = mentry->Type->GetReplacement(); + i = mentry->Type->GetReplacement(this); const AActor *defaults = GetDefaultByType (i); if (defaults->SpawnState == NULL || @@ -5408,7 +5398,7 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) } // don't spawn any monsters if -nomonsters - if (((level.flags2 & LEVEL2_NOMONSTERS) || (dmflags & DF_NO_MONSTERS)) && info->flags3 & MF3_ISMONSTER ) + if (((flags2 & LEVEL2_NOMONSTERS) || (dmflags & DF_NO_MONSTERS)) && info->flags3 & MF3_ISMONSTER ) { return NULL; } @@ -5433,12 +5423,12 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) else sz = ONFLOORZ; - mobj = AActor::StaticSpawn (i, DVector3(mthing->pos, sz), NO_REPLACE, true); + mobj = AActor::StaticSpawn (this, i, DVector3(mthing->pos, sz), NO_REPLACE, true); if (sz == ONFLOORZ) { mobj->AddZ(mthing->pos.Z); - if ((mobj->flags2 & MF2_FLOATBOB) && (ib_compatflags & BCOMPATF_FLOATBOB)) + if ((mobj->flags2 & MF2_FLOATBOB) && (mobj->Level->ib_compatflags & BCOMPATF_FLOATBOB)) { mobj->specialf1 = mthing->pos.Z; } @@ -5461,7 +5451,7 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) } // For Hexen floatbob 'compatibility' we do not really want to alter the floorz. - if (mobj->specialf1 == 0 || !(mobj->flags2 & MF2_FLOATBOB) || !(ib_compatflags & BCOMPATF_FLOATBOB)) + if (mobj->specialf1 == 0 || !(mobj->flags2 & MF2_FLOATBOB) || !(mobj->Level->ib_compatflags & BCOMPATF_FLOATBOB)) { P_FindFloorCeiling(mobj, FFCF_SAMESECTOR | FFCF_ONLY3DFLOORS | FFCF_3DRESTRICT); } @@ -5560,16 +5550,16 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) //=========================================================================== CVAR(Bool, dumpspawnedthings, false, 0) -AActor *SpawnMapThing(int index, FMapThing *mt, int position) +AActor *FLevelLocals::SpawnMapThing(int index, FMapThing *mt, int position) { - AActor *spawned = P_SpawnMapThing(mt, position); + AActor *spawned = SpawnMapThing(mt, position); if (dumpspawnedthings) { Printf("%5d: (%5f, %5f, %5f), doomednum = %5d, flags = %04x, type = %s\n", index, mt->pos.X, mt->pos.Y, mt->pos.Z, mt->EdNum, mt->flags, spawned ? spawned->GetClass()->TypeName.GetChars() : "(none)"); } - T_AddSpawnedThing(&level, spawned); + T_AddSpawnedThing(this, spawned); return spawned; } @@ -5592,7 +5582,7 @@ AActor *P_SpawnPuff (AActor *source, PClassActor *pufftype, const DVector3 &pos1 if (pufftype == nullptr) return nullptr; if (!(flags & PF_NORANDOMZ)) pos.Z += pr_spawnpuff.Random2() / 64.; - puff = Spawn(pufftype, pos, ALLOW_REPLACE); + puff = Spawn(source->Level, pufftype, pos, ALLOW_REPLACE); if (puff == NULL) return NULL; if ((puff->flags4 & MF4_RANDOMIZE) && puff->tics > 0) @@ -5643,7 +5633,7 @@ AActor *P_SpawnPuff (AActor *source, PClassActor *pufftype, const DVector3 &pos1 { if (cl_pufftype && updown != 3 && (puff->flags4 & MF4_ALLOWPARTICLES)) { - P_DrawSplash2 (32, pos, particledir, updown, 1); + P_DrawSplash2 (source->Level, 32, pos, particledir, updown, 1); if (cl_pufftype == 1) puff->renderflags |= RF_INVISIBLE; } @@ -5695,7 +5685,7 @@ void P_SpawnBlood (const DVector3 &pos1, DAngle dir, int damage, AActor *origina if (bloodcls != NULL) { - th = Spawn(bloodcls, pos, NO_REPLACE); // GetBloodType already performed the replacement + th = Spawn(originator->Level, bloodcls, pos, NO_REPLACE); // GetBloodType already performed the replacement th->Vel.Z = 2; th->Angles.Yaw = dir; // [NG] Applying PUFFGETSOWNER to the blood will make it target the owner @@ -5767,7 +5757,7 @@ void P_SpawnBlood (const DVector3 &pos1, DAngle dir, int damage, AActor *origina } if (bloodtype >= 1) - P_DrawSplash2 (40, pos, dir, 2, originator->BloodColor); + P_DrawSplash2 (originator->Level, 40, pos, dir, 2, originator->BloodColor); } DEFINE_ACTION_FUNCTION(AActor, SpawnBlood) @@ -5802,7 +5792,7 @@ void P_BloodSplatter (const DVector3 &pos, AActor *originator, DAngle hitangle) { AActor *mo; - mo = Spawn(bloodcls, pos, NO_REPLACE); // GetBloodType already performed the replacement + mo = Spawn(originator->Level, bloodcls, pos, NO_REPLACE); // GetBloodType already performed the replacement mo->target = originator; mo->Vel.X = pr_splatter.Random2 () / 64.; mo->Vel.Y = pr_splatter.Random2() / 64.; @@ -5818,7 +5808,7 @@ void P_BloodSplatter (const DVector3 &pos, AActor *originator, DAngle hitangle) } if (bloodtype >= 1) { - P_DrawSplash2 (40, pos, hitangle-180., 2, originator->BloodColor); + P_DrawSplash2 (originator->Level, 40, pos, hitangle-180., 2, originator->BloodColor); } } @@ -5846,7 +5836,7 @@ void P_BloodSplatter2 (const DVector3 &pos, AActor *originator, DAngle hitangle) AActor *mo; - mo = Spawn (bloodcls, pos + add, NO_REPLACE); // GetBloodType already performed the replacement + mo = Spawn (originator->Level, bloodcls, pos + add, NO_REPLACE); // GetBloodType already performed the replacement mo->target = originator; // colorize the blood! @@ -5859,7 +5849,7 @@ void P_BloodSplatter2 (const DVector3 &pos, AActor *originator, DAngle hitangle) } if (bloodtype >= 1) { - P_DrawSplash2(40, pos + add, hitangle - 180., 2, originator->BloodColor); + P_DrawSplash2(originator->Level, 40, pos + add, hitangle - 180., 2, originator->BloodColor); } } @@ -5900,7 +5890,7 @@ void P_RipperBlood (AActor *mo, AActor *bleeder) if (bloodcls != NULL) { AActor *th; - th = Spawn (bloodcls, pos, NO_REPLACE); // GetBloodType already performed the replacement + th = Spawn (bleeder->Level, bloodcls, pos, NO_REPLACE); // GetBloodType already performed the replacement // [NG] Applying PUFFGETSOWNER to the blood will make it target the owner if (th->flags5 & MF5_PUFFGETSOWNER) th->target = bleeder; if (gameinfo.gametype == GAME_Heretic) @@ -5919,7 +5909,7 @@ void P_RipperBlood (AActor *mo, AActor *bleeder) } if (bloodtype >= 1) { - P_DrawSplash2(28, pos, bleeder->AngleTo(mo) + 180., 0, bleeder->BloodColor); + P_DrawSplash2(bleeder->Level, 28, pos, bleeder->AngleTo(mo) + 180., 0, bleeder->BloodColor); } } @@ -6043,14 +6033,14 @@ foundone: { if (smallsplash && splash->SmallSplash) { - mo = Spawn(splash->SmallSplash, pos, ALLOW_REPLACE); + mo = Spawn(sec->Level, splash->SmallSplash, pos, ALLOW_REPLACE); if (mo) mo->Floorclip += splash->SmallSplashClip; } else { if (splash->SplashChunk) { - mo = Spawn(splash->SplashChunk, pos, ALLOW_REPLACE); + mo = Spawn(sec->Level, splash->SplashChunk, pos, ALLOW_REPLACE); mo->target = thing; if (splash->ChunkXVelShift != 255) { @@ -6064,7 +6054,7 @@ foundone: } if (splash->SplashBase) { - mo = Spawn(splash->SplashBase, pos, ALLOW_REPLACE); + mo = Spawn(sec->Level, splash->SplashBase, pos, ALLOW_REPLACE); } if (thing->player && !splash->NoAlert && alert) { @@ -6079,7 +6069,7 @@ foundone: } else { - S_Sound(pos, CHAN_ITEM, smallsplash ? + S_Sound(thing->Level, pos, CHAN_ITEM, smallsplash ? splash->SmallSplashSound : splash->NormalSplashSound, 1, ATTN_IDLE); } @@ -6200,7 +6190,7 @@ bool P_CheckMissileSpawn (AActor* th, double maxdist) newpos = th->Vec3Offset(newpos); th->SetXYZ(newpos); - th->Sector = P_PointInSector(th->Pos()); + th->Sector = th->Level->PointInSector(th->Pos()); FCheckPosition tm(!!(th->flags2 & MF2_RIP)); @@ -6287,7 +6277,7 @@ void P_PlaySpawnSound(AActor *missile, AActor *spawner) // If there is no spawner use the spawn position. // But not in a silenced sector. if (!(missile->Sector->Flags & SECF_SILENT)) - S_Sound (missile->Pos(), CHAN_WEAPON, missile->SeeSound, 1, ATTN_NORM); + S_Sound (missile->Level, missile->Pos(), CHAN_WEAPON, missile->SeeSound, 1, ATTN_NORM); } } } @@ -6344,7 +6334,7 @@ AActor *P_SpawnMissileXYZ (DVector3 pos, AActor *source, AActor *dest, PClassAct pos.Z -= source->Floorclip; } - AActor *th = Spawn (type, pos, ALLOW_REPLACE); + AActor *th = Spawn (source->Level, type, pos, ALLOW_REPLACE); P_PlaySpawnSound(th, source); @@ -6455,7 +6445,7 @@ AActor *P_OldSpawnMissile(AActor *source, AActor *owner, AActor *dest, PClassAct { return nullptr; } - AActor *th = Spawn (type, source->PosPlusZ(32.), ALLOW_REPLACE); + AActor *th = Spawn (source->Level, type, source->PosPlusZ(32.), ALLOW_REPLACE); P_PlaySpawnSound(th, source); th->target = owner; // record missile's originator @@ -6569,7 +6559,7 @@ AActor *P_SpawnMissileAngleZSpeed (AActor *source, double z, z -= source->Floorclip; } - mo = Spawn (type, source->PosAtZ(z), ALLOW_REPLACE); + mo = Spawn (source->Level, type, source->PosAtZ(z), ALLOW_REPLACE); P_PlaySpawnSound(mo, source); if (owner == NULL) owner = source; @@ -6602,7 +6592,7 @@ DEFINE_ACTION_FUNCTION(AActor, SpawnMissileAngleZSpeed) AActor *P_SpawnSubMissile(AActor *source, PClassActor *type, AActor *target) { - AActor *other = Spawn(type, source->Pos(), ALLOW_REPLACE); + AActor *other = Spawn(source->Level, type, source->Pos(), ALLOW_REPLACE); if (source == nullptr || type == nullptr) { @@ -6689,7 +6679,7 @@ AActor *P_SpawnPlayerMissile (AActor *source, double x, double y, double z, if (source->player != NULL && !nofreeaim && - level.IsFreelookAllowed() && + source->Level->IsFreelookAllowed() && source->player->userinfo.GetAimDist() <= 0.5) { break; @@ -6699,7 +6689,7 @@ AActor *P_SpawnPlayerMissile (AActor *source, double x, double y, double z, if (pLineTarget->linetarget == NULL) { an = angle; - if (nofreeaim || !level.IsFreelookAllowed()) + if (nofreeaim || !source->Level->IsFreelookAllowed()) { pitch = 0.; } @@ -6717,7 +6707,7 @@ AActor *P_SpawnPlayerMissile (AActor *source, double x, double y, double z, } } DVector3 pos = source->Vec2OffsetZ(x, y, z); - AActor *MissileActor = Spawn (type, pos, ALLOW_REPLACE); + AActor *MissileActor = Spawn (source->Level, type, pos, ALLOW_REPLACE); if (pMissileActor) *pMissileActor = MissileActor; P_PlaySpawnSound(MissileActor, source); MissileActor->target = source; @@ -6775,7 +6765,7 @@ int AActor::GetTeam() // Check for monsters that belong to a player on the team but aren't part of the team themselves. if (myTeam == TEAM_NONE && FriendPlayer != 0) { - myTeam = players[FriendPlayer - 1].userinfo.GetTeam(); + myTeam = Level->Players[FriendPlayer - 1]->userinfo.GetTeam(); } return myTeam; @@ -6849,13 +6839,13 @@ bool AActor::IsFriend (AActor *other) if (deathmatch && teamplay) return IsTeammate(other) || (FriendPlayer != 0 && other->FriendPlayer != 0 && - players[FriendPlayer-1].mo->IsTeammate(players[other->FriendPlayer-1].mo)); + Level->Players[FriendPlayer-1]->mo->IsTeammate(Level->Players[other->FriendPlayer-1]->mo)); return !deathmatch || FriendPlayer == other->FriendPlayer || FriendPlayer == 0 || other->FriendPlayer == 0 || - players[FriendPlayer-1].mo->IsTeammate(players[other->FriendPlayer-1].mo); + Level->Players[FriendPlayer-1]->mo->IsTeammate(Level->Players[other->FriendPlayer-1]->mo); } // [SP] If friendly flags match, then they are on the same team. /*if (!((flags ^ other->flags) & MF_FRIENDLY)) @@ -6882,13 +6872,13 @@ bool AActor::IsHostile (AActor *other) if (deathmatch && teamplay) return !IsTeammate(other) && !(FriendPlayer != 0 && other->FriendPlayer != 0 && - players[FriendPlayer-1].mo->IsTeammate(players[other->FriendPlayer-1].mo)); + Level->Players[FriendPlayer-1]->mo->IsTeammate(Level->Players[other->FriendPlayer-1]->mo)); return deathmatch && FriendPlayer != other->FriendPlayer && FriendPlayer !=0 && other->FriendPlayer != 0 && - !players[FriendPlayer-1].mo->IsTeammate(players[other->FriendPlayer-1].mo); + !Level->Players[FriendPlayer-1]->mo->IsTeammate(Level->Players[other->FriendPlayer-1]->mo); } return true; } @@ -7143,11 +7133,11 @@ void AActor::Revive() // [RH] If it's a monster, it gets to count as another kill if (CountsAsKill()) { - level.total_monsters++; + Level->total_monsters++; } // [ZZ] resurrect hook - E_WorldThingRevived(this); + Level->localEventManager->WorldThingRevived(this); } int AActor::GetGibHealth() const @@ -7210,19 +7200,19 @@ void AActor::ClearCounters() { if (CountsAsKill() && health > 0) { - level.total_monsters--; + Level->total_monsters--; flags &= ~MF_COUNTKILL; } // Same, for items if (flags & MF_COUNTITEM) { - level.total_items--; + Level->total_items--; flags &= ~MF_COUNTITEM; } // And finally for secrets if (flags5 & MF5_COUNTSECRET) { - level.total_secrets--; + Level->total_secrets--; flags5 &= ~MF5_COUNTSECRET; } } diff --git a/src/p_openmap.cpp b/src/p_openmap.cpp index 9331dca720..765d91797d 100644 --- a/src/p_openmap.cpp +++ b/src/p_openmap.cpp @@ -35,7 +35,7 @@ */ #include "p_setup.h" -#include "i_system.h" + #include "cmdlib.h" #include "w_wad.h" #include "md5.h" diff --git a/src/p_pspr.cpp b/src/p_pspr.cpp index 5b5881940f..97be2772c8 100644 --- a/src/p_pspr.cpp +++ b/src/p_pspr.cpp @@ -600,10 +600,6 @@ void P_BobWeapon (player_t *player, float *x, float *y, double ticfrac) static void P_CheckWeaponButtons (player_t *player) { - if (player->Bot == nullptr && bot_observer) - { - return; - } auto weapon = player->ReadyWeapon; if (weapon == nullptr) { @@ -965,8 +961,8 @@ DAngle P_BulletSlope (AActor *mo, FTranslatedLineTarget *pLineTarget, int aimfla an = mo->Angles.Yaw + angdiff[i]; pitch = P_AimLineAttack (mo, an, 16.*64, pLineTarget, 0., aimflags); - if (mo->player != NULL && - level.IsFreelookAllowed() && + if (mo->player != nullptr && + mo->Level->IsFreelookAllowed() && mo->player->userinfo.GetAimDist() <= 0.5) { break; diff --git a/src/p_saveg.cpp b/src/p_saveg.cpp index 714b9bb2d3..9406bff660 100644 --- a/src/p_saveg.cpp +++ b/src/p_saveg.cpp @@ -33,7 +33,7 @@ ** */ -#include "i_system.h" + #include "p_local.h" #include "p_spec.h" @@ -57,6 +57,7 @@ #include "g_levellocals.h" #include "events.h" #include "p_destructible.h" +#include "r_sky.h" #include "fragglescript/t_script.h" //========================================================================== @@ -248,11 +249,6 @@ FSerializer &Serialize(FSerializer &arc, const char *key, secplane_t &p, secplan FSerializer &Serialize(FSerializer &arc, const char *key, sector_t &p, sector_t *def) { - // save the Scroll data here because it's a lot easier to handle a default. - // Just writing out the full array can massively inflate the archive for no gain. - DVector2 scroll = { 0,0 }, nul = { 0,0 }; - if (arc.isWriting() && level.Scrolls.Size() > 0) scroll = level.Scrolls[p.sectornum]; - if (arc.BeginObject(key)) { arc("floorplane", p.floorplane, def->floorplane) @@ -300,23 +296,12 @@ FSerializer &Serialize(FSerializer &arc, const char *key, sector_t &p, sector_t ("gravity", p.gravity, def->gravity) .Terrain("floorterrain", p.terrainnum[0], &def->terrainnum[0]) .Terrain("ceilingterrain", p.terrainnum[1], &def->terrainnum[1]) - ("scrolls", scroll, nul) ("healthfloor", p.healthfloor, def->healthfloor) ("healthceiling", p.healthceiling, def->healthceiling) ("health3d", p.health3d, def->health3d) // GZDoom exclusive: .Array("reflect", p.reflect, def->reflect, 2, true) .EndObject(); - - if (arc.isReading() && !scroll.isZero()) - { - if (level.Scrolls.Size() == 0) - { - level.Scrolls.Resize(level.sectors.Size()); - memset(&level.Scrolls[0], 0, sizeof(level.Scrolls[0])*level.Scrolls.Size()); - level.Scrolls[p.sectornum] = scroll; - } - } } return arc; } @@ -330,9 +315,9 @@ FSerializer &Serialize(FSerializer &arc, const char *key, sector_t &p, sector_t // //========================================================================== -void RecalculateDrawnSubsectors() +void FLevelLocals::RecalculateDrawnSubsectors() { - for (auto &sub : level.subsectors) + for (auto &sub : subsectors) { for (unsigned int j = 0; j encoded(1 + (numsubsectors + 5) / 6); @@ -366,7 +351,7 @@ FSerializer &SerializeSubsectors(FSerializer &arc, const char *key) by = 0; for (unsigned j = 0; j < 6; j++) { - if (i + j < numsubsectors && (level.subsectors[i + j].flags & SSECMF_DRAWN)) + if (i + j < numsubsectors && (subsectors[i + j].flags & SSECMF_DRAWN)) { by |= (1 << j); } @@ -382,7 +367,7 @@ FSerializer &SerializeSubsectors(FSerializer &arc, const char *key) str = &encoded[0]; if (arc.BeginArray(key)) { - auto numvertexes = level.vertexes.Size(); + auto numvertexes = vertexes.Size(); arc(nullptr, numvertexes) (nullptr, numsubsectors) .StringPtr(nullptr, str) @@ -400,7 +385,7 @@ FSerializer &SerializeSubsectors(FSerializer &arc, const char *key) .StringPtr(nullptr, str) .EndArray(); - if (num_verts == (int)level.vertexes.Size() && num_subs == (int)numsubsectors) + if (num_verts == (int)vertexes.Size() && num_subs == (int)numsubsectors) { success = true; int sub = 0; @@ -421,7 +406,7 @@ FSerializer &SerializeSubsectors(FSerializer &arc, const char *key) { if (sub + s < (int)numsubsectors && (by & (1 << s))) { - level.subsectors[sub + s].flags |= SSECMF_DRAWN; + subsectors[sub + s].flags |= SSECMF_DRAWN; } } sub += 6; @@ -541,13 +526,12 @@ FSerializer &Serialize(FSerializer &arc, const char *key, zone_t &z, zone_t *def // //========================================================================== -void P_SerializeSounds(FSerializer &arc) +void P_SerializeSounds(FLevelLocals *Level, FSerializer &arc) { S_SerializeSounds(arc); - DSeqNode::SerializeSequences (arc); const char *name = NULL; uint8_t order; - float musvol = level.MusicVolume; + float musvol = Level->MusicVolume; if (arc.isWriting()) { @@ -560,9 +544,8 @@ void P_SerializeSounds(FSerializer &arc) if (arc.isReading()) { if (!S_ChangeMusic(name, order)) - if (level.cdtrack == 0 || !S_ChangeCDMusic(level.cdtrack, level.cdid)) - S_ChangeMusic(level.Music, level.musicorder); - level.SetMusicVolume(musvol); + Level->SetMusic(); + Level->SetMusicVolume(musvol); } } @@ -575,7 +558,6 @@ void P_SerializeSounds(FSerializer &arc) void CopyPlayer(player_t *dst, player_t *src, const char *name); static void ReadOnePlayer(FSerializer &arc, bool skipload); static void ReadMultiplePlayers(FSerializer &arc, int numPlayers, int numPlayersNow, bool skipload); -static void SpawnExtraPlayers(); //========================================================================== // @@ -583,7 +565,7 @@ static void SpawnExtraPlayers(); // //========================================================================== -void P_SerializePlayers(FSerializer &arc, bool skipload) +void P_SerializePlayers(FLevelLocals *Level, FSerializer &arc, bool skipload) { int numPlayers, numPlayersNow; int i; @@ -591,7 +573,7 @@ void P_SerializePlayers(FSerializer &arc, bool skipload) // Count the number of players present right now. for (numPlayersNow = 0, i = 0; i < MAXPLAYERS; ++i) { - if (playeringame[i]) + if (Level->PlayerInGame(i)) { ++numPlayersNow; } @@ -606,13 +588,13 @@ void P_SerializePlayers(FSerializer &arc, bool skipload) // Record each player's name, followed by their data. for (i = 0; i < MAXPLAYERS; ++i) { - if (playeringame[i]) + if (Level->PlayerInGame(i)) { if (arc.BeginObject(nullptr)) { - const char *n = players[i].userinfo.GetName(); + const char *n = Level->Players[i]->userinfo.GetName(); arc.StringPtr("playername", n); - players[i].Serialize(arc); + Level->Players[i]->Serialize(arc); arc.EndObject(); } } @@ -640,10 +622,11 @@ void P_SerializePlayers(FSerializer &arc, bool skipload) } if (!skipload && numPlayersNow > numPlayers) { - SpawnExtraPlayers(); + Level->SpawnExtraPlayers(); } // Redo pitch limits, since the spawned player has them at 0. - players[consoleplayer].SendPitchLimits(); + auto p = Level->GetConsolePlayer(); + if (p) p->SendPitchLimits(); } } @@ -840,7 +823,7 @@ void CopyPlayer(player_t *dst, player_t *src, const char *name) if (dst->Bot != nullptr) { - botinfo_t *thebot = bglobal.botinfo; + botinfo_t *thebot = src->mo->Level->BotInfo.botinfo; while (thebot && stricmp(name, thebot->name)) { thebot = thebot->next; @@ -849,7 +832,7 @@ void CopyPlayer(player_t *dst, player_t *src, const char *name) { thebot->inuse = BOTINUSE_Yes; } - bglobal.botnum++; + src->mo->Level->BotInfo.botnum++; dst->userinfo.TransferFrom(uibackup2); } else @@ -891,23 +874,23 @@ void CopyPlayer(player_t *dst, player_t *src, const char *name) // //========================================================================== -static void SpawnExtraPlayers() +void FLevelLocals::SpawnExtraPlayers() { // If there are more players now than there were in the savegame, // be sure to spawn the extra players. int i; - if (deathmatch) + if (deathmatch || !isPrimaryLevel()) { return; } for (i = 0; i < MAXPLAYERS; ++i) { - if (playeringame[i] && players[i].mo == NULL) + if (PlayerInGame(i) && Players[i]->mo == NULL) { - players[i].playerstate = PST_ENTER; - P_SpawnPlayer(&level.playerstarts[i], i, (level.flags2 & LEVEL2_PRERAISEWEAPON) ? SPF_WEAPONFULLYUP : 0); + Players[i]->playerstate = PST_ENTER; + SpawnPlayer(&playerstarts[i], i, (flags2 & LEVEL2_PRERAISEWEAPON) ? SPF_WEAPONFULLYUP : 0); } } } @@ -918,13 +901,13 @@ static void SpawnExtraPlayers() // //============================================================================ -void G_SerializeLevel(FSerializer &arc, bool hubload) +void FLevelLocals::Serialize(FSerializer &arc, bool hubload) { - int i = level.totaltime; + int i = totaltime; if (arc.isWriting()) { - arc.Array("checksum", level.md5, 16); + arc.Array("checksum", md5, 16); } else { @@ -933,11 +916,11 @@ void G_SerializeLevel(FSerializer &arc, bool hubload) // deep down in the deserializer or just a crash if the few insufficient safeguards were not triggered. uint8_t chk[16] = { 0 }; arc.Array("checksum", chk, 16); - if (arc.GetSize("linedefs") != level.lines.Size() || - arc.GetSize("sidedefs") != level.sides.Size() || - arc.GetSize("sectors") != level.sectors.Size() || - arc.GetSize("polyobjs") != level.Polyobjects.Size() || - memcmp(chk, level.md5, 16)) + if (arc.GetSize("linedefs") != lines.Size() || + arc.GetSize("sidedefs") != sides.Size() || + arc.GetSize("sectors") != sectors.Size() || + arc.GetSize("polyobjs") != Polyobjects.Size() || + memcmp(chk, md5, 16)) { I_Error("Savegame is from a different level"); } @@ -946,92 +929,108 @@ void G_SerializeLevel(FSerializer &arc, bool hubload) if (arc.isReading()) { - DThinker::DestroyAllThinkers(); + Thinkers.DestroyAllThinkers(); interpolator.ClearInterpolations(); arc.ReadObjects(hubload); + ActiveSequences = 0; } arc("multiplayer", multiplayer); - arc("level.flags", level.flags) - ("level.flags2", level.flags2) - ("level.fadeto", level.fadeto) - ("level.found_secrets", level.found_secrets) - ("level.found_items", level.found_items) - ("level.killed_monsters", level.killed_monsters) - ("level.total_secrets", level.total_secrets) - ("level.total_items", level.total_items) - ("level.total_monsters", level.total_monsters) - ("level.gravity", level.gravity) - ("level.aircontrol", level.aircontrol) - ("level.teamdamage", level.teamdamage) - ("level.maptime", level.maptime) - ("level.totaltime", i) - ("level.skytexture1", level.skytexture1) - ("level.skytexture2", level.skytexture2) - ("level.fogdensity", level.fogdensity) - ("level.outsidefogdensity", level.outsidefogdensity) - ("level.skyfog", level.skyfog) - ("level.deathsequence", level.deathsequence) - ("level.bodyqueslot", level.bodyqueslot) - ("level.spawnindex", level.spawnindex) - .Array("level.bodyque", level.bodyque, level.BODYQUESIZE) - ("level.corpsequeue", level.CorpseQueue) - ("level.spotstate", level.SpotState) - ("level.fragglethinker", level.FraggleScriptThinker) - ("level.acsthinker", level.ACSThinker); - ("level.impactdecalcount", level.ImpactDecalCount); + arc("flags", flags) + ("flags2", flags2) + ("fadeto", fadeto) + ("found_secrets", found_secrets) + ("found_items", found_items) + ("killed_monsters", killed_monsters) + ("total_secrets", total_secrets) + ("total_items", total_items) + ("total_monsters", total_monsters) + ("gravity", gravity) + ("aircontrol", aircontrol) + ("teamdamage", teamdamage) + ("maptime", maptime) + ("totaltime", i) + ("skytexture1", skytexture1) + ("skytexture2", skytexture2) + ("fogdensity", fogdensity) + ("outsidefogdensity", outsidefogdensity) + ("skyfog", skyfog) + ("deathsequence", deathsequence) + ("bodyqueslot", bodyqueslot) + ("spawnindex", spawnindex) + .Array("bodyque", bodyque, BODYQUESIZE) + ("corpsequeue", CorpseQueue) + ("spotstate", SpotState) + ("fragglethinker", FraggleScriptThinker) + ("acsthinker", ACSThinker) + ("impactdecalcount", ImpactDecalCount) + ("scrolls", Scrolls) + ("automap", automap) + ("interpolator", interpolator) + ("frozenstate", frozenstate) + ("sndseqlisthead", SequenceListHead); + // Hub transitions must keep the current total time if (!hubload) - level.totaltime = i; + totaltime = i; if (arc.isReading()) { - sky1texture = level.skytexture1; - sky2texture = level.skytexture2; - R_InitSkyMap(); - G_AirControlChanged(); + InitSkyMap(this); + AirControlChanged(); } - level.Behaviors.SerializeModuleStates(arc); + Behaviors.SerializeModuleStates(arc); // The order here is important: First world state, then portal state, then thinkers, and last polyobjects. - arc("linedefs", level.lines, level.loadlines); - arc("sidedefs", level.sides, level.loadsides); - arc("sectors", level.sectors, level.loadsectors); - arc("zones", level.Zones); - arc("lineportals", level.linePortals); - arc("sectorportals", level.sectorPortals); - if (arc.isReading()) P_FinalizePortals(); - - // [ZZ] serialize health groups - P_SerializeHealthGroups(arc); - // [ZZ] serialize events - E_SerializeEvents(arc); - DThinker::SerializeThinkers(arc, hubload); - arc("polyobjs", level.Polyobjects); - SerializeSubsectors(arc, "subsectors"); - StatusBar->SerializeMessages(arc); - AM_SerializeMarkers(arc); - FRemapTable::StaticSerializeTranslations(arc); - level.canvasTextureInfo.Serialize(arc); - P_SerializePlayers(arc, hubload); - P_SerializeSounds(arc); - + SetCompatLineOnSide(false); // This flag should not be saved. It solely depends on current compatibility state. + arc("linedefs", lines, loadlines); + SetCompatLineOnSide(true); + arc("sidedefs", sides, loadsides); + arc("sectors", sectors, loadsectors); + arc("zones", Zones); + arc("lineportals", linePortals); + arc("sectorportals", sectorPortals); if (arc.isReading()) { - for (auto &sec : level.sectors) - { + FinalizePortals(); + } + + // [ZZ] serialize health groups + P_SerializeHealthGroups(this, arc); + // [ZZ] serialize events + arc("firstevent", localEventManager->FirstEventHandler) + ("lastevent", localEventManager->LastEventHandler); + Thinkers.SerializeThinkers(arc, hubload); + arc("polyobjs", Polyobjects); + SerializeSubsectors(arc, "subsectors"); + StatusBar->SerializeMessages(arc); + FRemapTable::StaticSerializeTranslations(arc); + canvasTextureInfo.Serialize(arc); + P_SerializePlayers(this, arc, hubload); + P_SerializeSounds(this, arc); + + // Regenerate some data that wasn't saved + if (arc.isReading()) + { + for (auto &sec : sectors) + { P_Recalculate3DFloors(&sec); } for (int i = 0; i < MAXPLAYERS; ++i) { - if (playeringame[i] && players[i].mo != NULL) + if (PlayerInGame(i) && Players[i]->mo != nullptr) { - FWeaponSlots::SetupWeaponSlots(players[i].mo); + FWeaponSlots::SetupWeaponSlots(Players[i]->mo); } } + localEventManager->SetOwnerForHandlers(); // This cannot be automated. + RecreateAllAttachedLights(); + InitPortalGroups(this); + + automap->UpdateShowAllLines(); + } - AActor::RecreateAllAttachedLights(); - InitPortalGroups(&level); + } diff --git a/src/p_saveg.h b/src/p_saveg.h index 6c4c74f464..186c5d21a2 100644 --- a/src/p_saveg.h +++ b/src/p_saveg.h @@ -44,6 +44,4 @@ void P_DestroyThinkers(bool hubLoad); void P_ReadACSDefereds (FSerializer &); void P_WriteACSDefereds (FSerializer &); -void G_SerializeLevel(FSerializer &arc, bool hubLoad); - #endif // __P_SAVEG_H__ diff --git a/src/p_setup.cpp b/src/p_setup.cpp index 3cd8792449..7ea4d9f154 100644 --- a/src/p_setup.cpp +++ b/src/p_setup.cpp @@ -71,10 +71,11 @@ #include "a_specialspot.h" #include "maploader/maploader.h" #include "p_acs.h" +#include "am_map.h" +#include "i_system.h" +#include "v_video.h" #include "fragglescript/t_script.h" -void P_ClearUDMFKeys(); - extern AActor *SpawnMapThing (int index, FMapThing *mthing, int position); extern unsigned int R_OldBlend; @@ -142,7 +143,7 @@ static void PrecacheLevel(FLevelLocals *Level) memset(hitlist.Data(), 0, cnt); AActor *actor; - TThinkerIterator iterator; + auto iterator = Level->GetThinkerIterator(); while ((actor = iterator.Next())) { @@ -174,20 +175,14 @@ static void PrecacheLevel(FLevelLocals *Level) AddToList(hitlist.Data(), Level->sides[i].GetTexture(side_t::bottom), FTextureManager::HIT_Wall); } - // Sky texture is always present. - // Note that F_SKY1 is the name used to - // indicate a sky floor/ceiling as a flat, - // while the sky texture is stored like - // a wall texture, with an episode dependant - // name. - if (sky1texture.isValid()) + if (Level->skytexture1.isValid()) { - AddToList(hitlist.Data(), sky1texture, FTextureManager::HIT_Sky); + AddToList(hitlist.Data(), Level->skytexture1, FTextureManager::HIT_Sky); } - if (sky2texture.isValid()) + if (Level->skytexture2.isValid()) { - AddToList(hitlist.Data(), sky2texture, FTextureManager::HIT_Sky); + AddToList(hitlist.Data(), Level->skytexture2, FTextureManager::HIT_Sky); } for (auto n : gameinfo.PrecachedTextures) @@ -260,10 +255,31 @@ void FLevelLocals::ClearPortals() void FLevelLocals::ClearLevelData() { + interpolator.ClearInterpolations(); // [RH] Nothing to interpolate on a fresh level. + Thinkers.DestroyAllThinkers(); + ClearAllSubsectorLinks(); // can't be done as part of the polyobj deletion process. + total_monsters = total_items = total_secrets = killed_monsters = found_items = found_secrets = wminfo.maxfrags = 0; + for (int i = 0; i < 4; i++) + { + UDMFKeys[i].Clear(); + } + + SN_StopAllSequences(this); + + FStrifeDialogueNode *node; + + while (StrifeDialogues.Pop (node)) + { + delete node; + } + + DialogueRoots.Clear(); + ClassRoots.Clear(); + // delete allocated data in the level arrays. if (sectors.Size() > 0) { @@ -275,6 +291,9 @@ void FLevelLocals::ClearLevelData() } ClearPortals(); + tagManager.Clear(); + ClearTIDHashes(); + if (SpotState) SpotState->Destroy(); SpotState = nullptr; ACSThinker = nullptr; FraggleScriptThinker = nullptr; @@ -317,7 +336,9 @@ void FLevelLocals::ClearLevelData() AllPlayerStarts.Clear(); memset(playerstarts, 0, sizeof(playerstarts)); Scrolls.Clear(); - + if (automap) automap->Destroy(); + Behaviors.UnloadModules(); + localEventManager->Shutdown(); } //========================================================================== @@ -328,25 +349,13 @@ void FLevelLocals::ClearLevelData() void P_FreeLevelData () { - - // [ZZ] delete per-map event handlers - E_Shutdown(true); R_FreePastViewers(); - P_ClearUDMFKeys(); - // [RH] Clear all ThingID hash chains. - AActor::ClearTIDHashes(); - - interpolator.ClearInterpolations(); // [RH] Nothing to interpolate on a fresh level. - FPolyObj::ClearAllSubsectorLinks(); // can't be done as part of the polyobj deletion process. - SN_StopAllSequences (); - DThinker::DestroyAllThinkers (); - tagManager.Clear(); - - level.Behaviors.UnloadModules (); - - P_FreeStrifeConversations (); - level.ClearLevelData(); + for (auto Level : AllLevels()) + { + Level->ClearLevelData(); + } + // primaryLevel->FreeSecondaryLevels(); } //=========================================================================== @@ -357,29 +366,29 @@ void P_FreeLevelData () // //=========================================================================== -void P_SetupLevel(const char *lumpname, int position, bool newGame) +void P_SetupLevel(FLevelLocals *Level, int position, bool newGame) { int i; - level.ShaderStartTime = I_msTimeFS(); // indicate to the shader system that the level just started + Level->ShaderStartTime = I_msTimeFS(); // indicate to the shader system that the level just started // This is motivated as follows: - level.maptype = MAPTYPE_UNKNOWN; + Level->maptype = MAPTYPE_UNKNOWN; wminfo.partime = 180; if (!savegamerestore) { - level.SetMusicVolume(level.MusicVolume); + Level->SetMusicVolume(Level->MusicVolume); for (i = 0; i < MAXPLAYERS; ++i) { - players[i].killcount = players[i].secretcount - = players[i].itemcount = 0; + Level->Players[i]->killcount = Level->Players[i]->secretcount + = Level->Players[i]->itemcount = 0; } } for (i = 0; i < MAXPLAYERS; ++i) { - players[i].mo = nullptr; + Level->Players[i]->mo = nullptr; } // [RH] Clear any scripted translation colors the previous level may have set. for (i = 0; i < int(translationtables[TRANSLATION_LevelScripted].Size()); ++i) @@ -394,7 +403,8 @@ void P_SetupLevel(const char *lumpname, int position, bool newGame) translationtables[TRANSLATION_LevelScripted].Clear(); // Initial height of PointOfView will be set by player think. - players[consoleplayer].viewz = NO_VALUE; + auto p = Level->GetConsolePlayer(); + if (p) p->viewz = NO_VALUE; // Make sure all sounds are stopped before Z_FreeTags. S_Start(); @@ -405,28 +415,28 @@ void P_SetupLevel(const char *lumpname, int position, bool newGame) // Free all level data from the previous map P_FreeLevelData(); - MapData *map = P_OpenMapData(lumpname, true); + MapData *map = P_OpenMapData(Level->MapName, true); if (map == nullptr) { - I_Error("Unable to open map '%s'\n", lumpname); + I_Error("Unable to open map '%s'\n", Level->MapName.GetChars()); } // [ZZ] init per-map static handlers. we need to call this before everything is set up because otherwise scripts don't receive PlayerEntered event // (which happens at god-knows-what stage in this function, but definitely not the last part, because otherwise it'd work to put E_InitStaticHandlers before the player spawning) - E_InitStaticHandlers(true); + Level->localEventManager->InitStaticHandlers(true); // generate a checksum for the level, to be included and checked with savegames. - map->GetChecksum(level.md5); + map->GetChecksum(Level->md5); // find map num - level.lumpnum = map->lumpnum; + Level->lumpnum = map->lumpnum; if (newGame) { - E_NewGame(EventHandlerType::PerMap); + Level->localEventManager->NewGame(); } - MapLoader loader(&level); - loader.LoadLevel(map, lumpname, position); + MapLoader loader(Level); + loader.LoadLevel(map, Level->MapName.GetChars(), position); delete map; // if deathmatch, randomly spawn the active players @@ -434,39 +444,40 @@ void P_SetupLevel(const char *lumpname, int position, bool newGame) { for (i = 0; i < MAXPLAYERS; i++) { - if (playeringame[i]) + if (Level->PlayerInGame(i)) { - players[i].mo = nullptr; - G_DeathMatchSpawnPlayer(i); + Level->Players[i]->mo = nullptr; + Level->DeathMatchSpawnPlayer(i); } } } // the same, but for random single/coop player starts - else if (level.flags2 & LEVEL2_RANDOMPLAYERSTARTS) + else if (Level->flags2 & LEVEL2_RANDOMPLAYERSTARTS) { for (i = 0; i < MAXPLAYERS; ++i) { - if (playeringame[i]) + if (Level->PlayerInGame(i)) { - players[i].mo = nullptr; - FPlayerStart *mthing = G_PickPlayerStart(i); - P_SpawnPlayer(mthing, i, (level.flags2 & LEVEL2_PRERAISEWEAPON) ? SPF_WEAPONFULLYUP : 0); + Level->Players[i]->mo = nullptr; + FPlayerStart *mthing = Level->PickPlayerStart(i); + Level->SpawnPlayer(mthing, i, (Level->flags2 & LEVEL2_PRERAISEWEAPON) ? SPF_WEAPONFULLYUP : 0); } } } // [SP] move unfriendly players around // horribly hacky - yes, this needs rewritten. - if (level.deathmatchstarts.Size() > 0) + if (Level->deathmatchstarts.Size() > 0) { for (i = 0; i < MAXPLAYERS; ++i) { - if (playeringame[i] && players[i].mo != nullptr) + auto p = Level->Players[i]; + if (Level->PlayerInGame(i) && p->mo != nullptr) { - if (!(players[i].mo->flags & MF_FRIENDLY)) + if (!(p->mo->flags & MF_FRIENDLY)) { - AActor * oldSpawn = players[i].mo; - G_DeathMatchSpawnPlayer(i); + AActor * oldSpawn = p->mo; + Level->DeathMatchSpawnPlayer(i); oldSpawn->Destroy(); } } @@ -477,7 +488,7 @@ void P_SetupLevel(const char *lumpname, int position, bool newGame) // Don't count monsters in end-of-level sectors if option is on if (dmflags2 & DF2_NOCOUNTENDMONST) { - TThinkerIterator it; + auto it = Level->GetThinkerIterator(); AActor * mo; while ((mo = it.Next())) @@ -492,7 +503,7 @@ void P_SetupLevel(const char *lumpname, int position, bool newGame) } } - T_PreprocessScripts(&level); // preprocess FraggleScript scripts + T_PreprocessScripts(Level); // preprocess FraggleScript scripts // build subsector connect matrix // UNUSED P_ConnectSubsectors (); @@ -500,13 +511,13 @@ void P_SetupLevel(const char *lumpname, int position, bool newGame) R_OldBlend = 0xffffffff; // [RH] Remove all particles - P_ClearParticles(); + P_ClearParticles(Level); // preload graphics and sounds if (precache) { - PrecacheLevel(&level); - S_PrecacheLevel(); + PrecacheLevel(Level); + S_PrecacheLevel(Level); } if (deathmatch) @@ -516,7 +527,7 @@ void P_SetupLevel(const char *lumpname, int position, bool newGame) // This check was previously done at run time each time the heightsec was checked. // However, since 3D floors are static data, we can easily precalculate this and store it in the sector's flags for quick access. - for (auto &s : level.sectors) + for (auto &s : Level->sectors) { if (s.heightsec != nullptr) { @@ -531,17 +542,26 @@ void P_SetupLevel(const char *lumpname, int position, bool newGame) } } - P_ResetSightCounters(true); - // Create a backup of the map data so the savegame code can toss out all fields that haven't changed in order to reduce processing time and file size. // Note that we want binary identity here, so assignment is not sufficient because it won't initialize any padding bytes. // Note that none of these structures may contain non POD fields anyway. - level.loadsectors.Resize(level.sectors.Size()); - memcpy(&level.loadsectors[0], &level.sectors[0], level.sectors.Size() * sizeof(level.sectors[0])); - level.loadlines.Resize(level.lines.Size()); - memcpy(&level.loadlines[0], &level.lines[0], level.lines.Size() * sizeof(level.lines[0])); - level.loadsides.Resize(level.sides.Size()); - memcpy(&level.loadsides[0], &level.sides[0], level.sides.Size() * sizeof(level.sides[0])); + Level->loadsectors.Resize(Level->sectors.Size()); + memcpy(&Level->loadsectors[0], &Level->sectors[0], Level->sectors.Size() * sizeof(Level->sectors[0])); + Level->loadlines.Resize(Level->lines.Size()); + memcpy(&Level->loadlines[0], &Level->lines[0], Level->lines.Size() * sizeof(Level->lines[0])); + Level->loadsides.Resize(Level->sides.Size()); + memcpy(&Level->loadsides[0], &Level->sides[0], Level->sides.Size() * sizeof(Level->sides[0])); + + Level->automap = AM_Create(Level); + Level->automap->LevelInit(); + Level->SetCompatLineOnSide(true); + + // [RH] Start lightning, if MAPINFO tells us to + if (Level->flags & LEVEL_STARTLIGHTNING) + { + Level->StartLightning(); + } + } // @@ -558,11 +578,14 @@ void P_Init () } static void P_Shutdown () -{ - DThinker::DestroyThinkersInList(STAT_STATIC); +{ + for (auto Level : AllLevels()) + { + Level->Thinkers.DestroyThinkersInList(STAT_STATIC); + } P_FreeLevelData (); // [ZZ] delete global event handlers - E_Shutdown(false); + staticEventManager.Shutdown(); // clear out the handlers before starting the engine shutdown ST_Clear(); for (auto &p : players) { @@ -578,39 +601,43 @@ static void P_Shutdown () CCMD(dumpgeometry) { - for (auto §or : level.sectors) + for (auto Level : AllLevels()) { - Printf(PRINT_LOG, "Sector %d\n", sector.sectornum); - for (int j = 0; jMapName.GetChars()); + for (auto §or : Level->sectors) { - subsector_t * sub = sector.subsectors[j]; - - Printf(PRINT_LOG, " Subsector %d - real sector = %d - %s\n", int(sub->Index()), sub->sector->sectornum, sub->hacked & 1 ? "hacked" : ""); - for (uint32_t k = 0; knumlines; k++) + Printf(PRINT_LOG, "Sector %d\n", sector.sectornum); + for (int j = 0; jfirstline + k; - if (seg->linedef) + subsector_t * sub = sector.subsectors[j]; + + Printf(PRINT_LOG, " Subsector %d - real sector = %d - %s\n", int(sub->Index()), sub->sector->sectornum, sub->hacked & 1 ? "hacked" : ""); + for (uint32_t k = 0; knumlines; k++) { - Printf(PRINT_LOG, " (%4.4f, %4.4f), (%4.4f, %4.4f) - seg %d, linedef %d, side %d", - seg->v1->fX(), seg->v1->fY(), seg->v2->fX(), seg->v2->fY(), - seg->Index(), seg->linedef->Index(), seg->sidedef != seg->linedef->sidedef[0]); + seg_t * seg = sub->firstline + k; + if (seg->linedef) + { + Printf(PRINT_LOG, " (%4.4f, %4.4f), (%4.4f, %4.4f) - seg %d, linedef %d, side %d", + seg->v1->fX(), seg->v1->fY(), seg->v2->fX(), seg->v2->fY(), + seg->Index(), seg->linedef->Index(), seg->sidedef != seg->linedef->sidedef[0]); + } + else + { + Printf(PRINT_LOG, " (%4.4f, %4.4f), (%4.4f, %4.4f) - seg %d, miniseg", + seg->v1->fX(), seg->v1->fY(), seg->v2->fX(), seg->v2->fY(), seg->Index()); + } + if (seg->PartnerSeg) + { + subsector_t * sub2 = seg->PartnerSeg->Subsector; + Printf(PRINT_LOG, ", back sector = %d, real back sector = %d", sub2->render_sector->sectornum, seg->PartnerSeg->frontsector->sectornum); + } + else if (seg->backsector) + { + Printf(PRINT_LOG, ", back sector = %d (no partnerseg)", seg->backsector->sectornum); + } + + Printf(PRINT_LOG, "\n"); } - else - { - Printf(PRINT_LOG, " (%4.4f, %4.4f), (%4.4f, %4.4f) - seg %d, miniseg", - seg->v1->fX(), seg->v1->fY(), seg->v2->fX(), seg->v2->fY(), seg->Index()); - } - if (seg->PartnerSeg) - { - subsector_t * sub2 = seg->PartnerSeg->Subsector; - Printf(PRINT_LOG, ", back sector = %d, real back sector = %d", sub2->render_sector->sectornum, seg->PartnerSeg->frontsector->sectornum); - } - else if (seg->backsector) - { - Printf(PRINT_LOG, ", back sector = %d (no partnerseg)", seg->backsector->sectornum); - } - - Printf(PRINT_LOG, "\n"); } } } @@ -624,14 +651,46 @@ CCMD(dumpgeometry) CCMD(listmapsections) { - for (int i = 0; i < 100; i++) + for (auto Level : AllLevels()) { - for (auto &sub : level.subsectors) + Printf("Map sections for %s:\n", Level->MapName.GetChars()); + for (int i = 0; i < 100; i++) { - if (sub.mapsection == i) + for (auto &sub : Level->subsectors) { - Printf("Mapsection %d, sector %d, line %d\n", i, sub.render_sector->Index(), sub.firstline->linedef->Index()); - break; + if (sub.mapsection == i) + { + Printf("Mapsection %d, sector %d, line %d\n", i, sub.render_sector->Index(), sub.firstline->linedef->Index()); + break; + } + } + } + } +} + +//========================================================================== +// +// +// +//========================================================================== + +CUSTOM_CVAR(Bool, forcewater, false, CVAR_ARCHIVE | CVAR_SERVERINFO) +{ + if (gamestate == GS_LEVEL) for (auto Level : AllLevels()) + { + for (auto &sec : Level->sectors) + { + sector_t *hsec = sec.GetHeightSec(); + if (hsec && !(hsec->MoreFlags & SECMF_UNDERWATER)) + { + if (self) + { + hsec->MoreFlags |= SECMF_FORCEDUNDERWATER; + } + else + { + hsec->MoreFlags &= ~SECMF_FORCEDUNDERWATER; + } } } } diff --git a/src/p_setup.h b/src/p_setup.h index 1cd67c2adc..0cae8124cb 100644 --- a/src/p_setup.h +++ b/src/p_setup.h @@ -140,13 +140,7 @@ public: MapData * P_OpenMapData(const char * mapname, bool justcheck); bool P_CheckMapData(const char * mapname); - -// NOT called by W_Ticker. Fixme. [RH] Is that bad? -// -// [RH] The only parameter used is mapname, so I removed playermask and skill. -// On September 1, 1998, I added the position to indicate which set -// of single-player start spots should be spawned in the level. -void P_SetupLevel (const char *mapname, int position, bool newGame); +void P_SetupLevel (FLevelLocals *Level, int position, bool newGame); void P_FreeLevelData(); @@ -156,13 +150,9 @@ void P_Init (void); struct line_t; struct maplinedef_t; -void P_LoadTranslator(const char *lumpname); -void P_TranslateLineDef (line_t *ld, maplinedef_t *mld, int lineindexforid = -1); -int P_TranslateSectorSpecial (int); - -int GetUDMFInt(int type, int index, FName key); -double GetUDMFFloat(int type, int index, FName key); -FString GetUDMFString(int type, int index, FName key); +int GetUDMFInt(FLevelLocals *Level, int type, int index, FName key); +double GetUDMFFloat(FLevelLocals *Level, int type, int index, FName key); +FString GetUDMFString(FLevelLocals *Level, int type, int index, FName key); void FixMinisegReferences(); void FixHoles(); diff --git a/src/p_spec.cpp b/src/p_spec.cpp index 4c37e48eaa..bd4319f41a 100644 --- a/src/p_spec.cpp +++ b/src/p_spec.cpp @@ -98,30 +98,24 @@ #include "p_setup.h" #include "c_console.h" -#include "maploader/maploader.h" +#include "p_spec_thinkers.h" static FRandom pr_playerinspecialsector ("PlayerInSpecialSector"); EXTERN_CVAR(Bool, cl_predict_specials) - - -// killough 3/7/98: Initialize generalized scrolling -void P_SpawnScrollers(FLevelLocals *Level); -static void P_SpawnFriction (); // phares 3/16/98 -void P_SpawnPushers (); // phares 3/20/98 - +EXTERN_CVAR(Bool, forcewater) // [RH] Check dmflags for noexit and respond accordingly -bool CheckIfExitIsGood (AActor *self, level_info_t *info) +bool FLevelLocals::CheckIfExitIsGood (AActor *self, level_info_t *info) { - cluster_info_t *cluster; + cluster_info_t *clusterdef; // The world can always exit itself. if (self == NULL) return true; - // We must kill all monsters to exit the level. - if ((dmflags2 & DF2_KILL_MONSTERS) && level.killed_monsters != level.total_monsters) + // We must kill all monsters to exit the Level + if ((dmflags2 & DF2_KILL_MONSTERS) && killed_monsters != total_monsters) return false; // Is this a deathmatch game and we're not allowed to exit? @@ -134,15 +128,15 @@ bool CheckIfExitIsGood (AActor *self, level_info_t *info) if (self->health <= 0 && !multiplayer && info != NULL && - info->cluster == level.cluster && - (cluster = FindClusterInfo(level.cluster)) != NULL && - cluster->flags & CLUSTER_HUB) + info->cluster == cluster && + (clusterdef = FindClusterInfo(cluster)) != NULL && + clusterdef->flags & CLUSTER_HUB) { return false; } if (deathmatch && gameaction != ga_completed) { - Printf ("%s exited the level.\n", self->player->userinfo.GetName()); + Printf ("%s exited the level\n", self->player->userinfo.GetName()); } return true; } @@ -170,9 +164,11 @@ bool P_ActivateLine (line_t *line, AActor *mo, int side, int activationType, DVe return false; } + auto Level = line->GetLevel(); + // [MK] Use WorldLinePreActivated to decide if activation should continue bool shouldactivate = true; - E_WorldLinePreActivated(line, mo, activationType, &shouldactivate); + Level->localEventManager->WorldLinePreActivated(line, mo, activationType, &shouldactivate); if ( !shouldactivate ) return false; bool remote = (line->special != 7 && line->special != 8 && (line->special < 11 || line->special > 14)); @@ -181,13 +177,10 @@ bool P_ActivateLine (line_t *line, AActor *mo, int side, int activationType, DVe lineActivation = line->activation; repeat = line->flags & ML_REPEAT_SPECIAL; buttonSuccess = false; - buttonSuccess = P_ExecuteSpecial(line->special, - line, mo, side == 1, line->args[0], - line->args[1], line->args[2], - line->args[3], line->args[4]); + buttonSuccess = P_ExecuteSpecial(line->GetLevel(), line->special, line, mo, side == 1, line->args[0], line->args[1], line->args[2], line->args[3], line->args[4]); // [MK] Fire up WorldLineActivated - if ( buttonSuccess ) E_WorldLineActivated(line, mo, activationType); + if ( buttonSuccess ) Level->localEventManager->WorldLineActivated(line, mo, activationType); special = line->special; if (!repeat && buttonSuccess) @@ -204,13 +197,13 @@ bool P_ActivateLine (line_t *line, AActor *mo, int side, int activationType, DVe } // some old WADs use this method to create walls that change the texture when shot. else if (activationType == SPAC_Impact && // only for shootable triggers - (level.flags2 & LEVEL2_DUMMYSWITCHES) && // this is only a compatibility setting for an old hack! + (Level->flags2 & LEVEL2_DUMMYSWITCHES) && // this is only a compatibility setting for an old hack! !repeat && // only non-repeatable triggers (specialGeneric_Crusher) && // not for Boom's generalized linedefs special && // not for lines without a special - tagManager.LineHasID(line, line->args[0]) && // Safety check: exclude edited UDMF linedefs or ones that don't map the tag to args[0] + Level->LineHasId(line, line->args[0]) && // Safety check: exclude edited UDMF linedefs or ones that don't map the tag to args[0] line->args[0] && // only if there's a tag (which is stored in the first arg) - P_FindFirstSectorFromTag (line->args[0]) == -1) // only if no sector is tagged to this linedef + Level->FindFirstSectorFromTag (line->args[0]) == -1) // only if no sector is tagged to this linedef { P_ChangeSwitchTexture (line->sidedef[0], repeat, special); line->special = 0; @@ -253,6 +246,7 @@ DEFINE_ACTION_FUNCTION(_Line, RemoteActivate) bool P_TestActivateLine (line_t *line, AActor *mo, int side, int activationType, DVector3 *optpos) { + auto Level = line->GetLevel(); int lineActivation = line->activation; if (line->flags & ML_FIRSTSIDEONLY && side == 1) @@ -315,7 +309,7 @@ bool P_TestActivateLine (line_t *line, AActor *mo, int side, int activationType, // lax activation checks, monsters can also activate certain lines // even without them being marked as monster activate-able. This is // the default for non-Hexen maps in Hexen format. - if (!(level.flags2 & LEVEL2_LAXMONSTERACTIVATION)) + if (!(Level->flags2 & LEVEL2_LAXMONSTERACTIVATION)) { return false; } @@ -402,10 +396,7 @@ bool P_PredictLine(line_t *line, AActor *mo, int side, int activationType) if (line->locknumber > 0) return false; lineActivation = line->activation; buttonSuccess = false; - buttonSuccess = P_ExecuteSpecial(line->special, - line, mo, side == 1, line->args[0], - line->args[1], line->args[2], - line->args[3], line->args[4]); + buttonSuccess = P_ExecuteSpecial(line->GetLevel(), line->special,line, mo, side == 1, line->args[0], line->args[1], line->args[2], line->args[3], line->args[4]); special = line->special; @@ -438,6 +429,8 @@ void P_PlayerInSpecialSector (player_t *player, sector_t * sector) // Has hit ground. AActor *ironfeet; + auto Level = sector->Level; + // [RH] Apply any customizable damage if (sector->damageamount > 0) { @@ -459,12 +452,12 @@ void P_PlayerInSpecialSector (player_t *player, sector_t * sector) player->hazardtype = sector->damagetype; player->hazardinterval = sector->damageinterval; } - else if (level.time % sector->damageinterval == 0) + else if (Level->time % sector->damageinterval == 0) { if (!(player->cheats & (CF_GODMODE|CF_GODMODE2))) P_DamageMobj(player->mo, NULL, NULL, sector->damageamount, sector->damagetype); if ((sector->Flags & SECF_ENDLEVEL) && player->health <= 10 && (!deathmatch || !(dmflags & DF_NO_EXIT))) { - G_ExitLevel(0, false); + Level->ExitLevel(0, false); } if (sector->Flags & SECF_DMGTERRAINFX) { @@ -475,7 +468,7 @@ void P_PlayerInSpecialSector (player_t *player, sector_t * sector) } else if (sector->damageamount < 0) { - if (level.time % sector->damageinterval == 0) + if (Level->time % sector->damageinterval == 0) { P_GiveBody(player->mo, -sector->damageamount, 100); } @@ -484,7 +477,7 @@ void P_PlayerInSpecialSector (player_t *player, sector_t * sector) if (sector->isSecret()) { sector->ClearSecret(); - P_GiveSecret(player->mo, true, true, sector->Index()); + P_GiveSecret(Level, player->mo, true, true, sector->Index()); } } @@ -518,14 +511,14 @@ static void DoSectorDamage(AActor *actor, sector_t *sec, int amount, FName type, P_DamageMobj (actor, NULL, NULL, amount, type, dflags); } -void P_SectorDamage(int tag, int amount, FName type, PClassActor *protectClass, int flags) +void P_SectorDamage(FLevelLocals *Level, int tag, int amount, FName type, PClassActor *protectClass, int flags) { - FSectorTagIterator itr(tag); + auto itr = Level->GetSectorTagIterator(tag); int secnum; while ((secnum = itr.Next()) >= 0) { AActor *actor, *next; - sector_t *sec = &level.sectors[secnum]; + sector_t *sec = &Level->sectors[secnum]; // Do for actors in this sector. for (actor = sec->thinglist; actor != NULL; actor = next) @@ -579,7 +572,7 @@ void P_SectorDamage(int tag, int amount, FName type, PClassActor *protectClass, CVAR(Bool, showsecretsector, false, 0) CVAR(Bool, cl_showsecretmessage, true, CVAR_ARCHIVE) -void P_GiveSecret(AActor *actor, bool printmessage, bool playsound, int sectornum) +void P_GiveSecret(FLevelLocals *Level, AActor *actor, bool printmessage, bool playsound, int sectornum) { if (actor != NULL) { @@ -595,7 +588,7 @@ void P_GiveSecret(AActor *actor, bool printmessage, bool playsound, int sectornu ret.IntAt(&retval); VMCall(func, params, countof(params), &ret, 1); } - if (retval && cl_showsecretmessage && actor->CheckLocalView(consoleplayer)) + if (retval && cl_showsecretmessage && actor->CheckLocalView()) { if (printmessage) { @@ -610,16 +603,16 @@ void P_GiveSecret(AActor *actor, bool printmessage, bool playsound, int sectornu if (playsound) S_Sound (CHAN_AUTO | CHAN_UI, "misc/secret", 1, ATTN_NORM); } } - level.found_secrets++; + Level->found_secrets++; } DEFINE_ACTION_FUNCTION(FLevelLocals, GiveSecret) { - PARAM_PROLOGUE; + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_OBJECT(activator, AActor); PARAM_BOOL(printmessage); PARAM_BOOL(playsound); - P_GiveSecret(activator, printmessage, playsound, -1); + P_GiveSecret(self, activator, printmessage, playsound, -1); return 0; } @@ -631,8 +624,10 @@ DEFINE_ACTION_FUNCTION(FLevelLocals, GiveSecret) void P_PlayerOnSpecialFlat (player_t *player, int floorType) { + auto Level = player->mo->Level; + if (Terrains[floorType].DamageAmount && - !(level.time & Terrains[floorType].DamageTimeMask)) + !(Level->time & Terrains[floorType].DamageTimeMask)) { AActor *ironfeet = NULL; @@ -669,843 +664,19 @@ void P_PlayerOnSpecialFlat (player_t *player, int floorType) // EXTERN_CVAR (Float, timelimit) -void P_UpdateSpecials () +void P_UpdateSpecials (FLevelLocals *Level) { // LEVEL TIMER if (deathmatch && timelimit) { - if (level.maptime >= (int)(timelimit * TICRATE * 60)) + if (Level->maptime >= (int)(timelimit * TICRATE * 60)) { Printf ("%s\n", GStrings("TXT_TIMELIMIT")); - G_ExitLevel(0, false); + Level->ExitLevel(0, false); } } } - - -// -// SPECIAL SPAWNING -// - -CUSTOM_CVAR (Bool, forcewater, false, CVAR_ARCHIVE|CVAR_SERVERINFO) -{ - if (gamestate == GS_LEVEL) - { - for (auto &sec : level.sectors) - { - sector_t *hsec = sec.GetHeightSec(); - if (hsec && !(hsec->MoreFlags & SECMF_UNDERWATER)) - { - if (self) - { - hsec->MoreFlags |= SECMF_FORCEDUNDERWATER; - } - else - { - hsec->MoreFlags &= ~SECMF_FORCEDUNDERWATER; - } - } - } - } -} - -class DLightTransfer : public DThinker -{ - DECLARE_CLASS (DLightTransfer, DThinker) - - DLightTransfer() {} -public: - DLightTransfer (sector_t *srcSec, int target, bool copyFloor); - void Serialize(FSerializer &arc); - void Tick (); - -protected: - static void DoTransfer (int level, int target, bool floor); - - sector_t *Source; - int TargetTag; - bool CopyFloor; - short LastLight; -}; - -IMPLEMENT_CLASS(DLightTransfer, false, false) - -void DLightTransfer::Serialize(FSerializer &arc) -{ - Super::Serialize (arc); - arc("lastlight", LastLight) - ("source", Source) - ("targettag", TargetTag) - ("copyfloor", CopyFloor); -} - -DLightTransfer::DLightTransfer (sector_t *srcSec, int target, bool copyFloor) -{ - int secnum; - - Source = srcSec; - TargetTag = target; - CopyFloor = copyFloor; - DoTransfer (LastLight = srcSec->lightlevel, target, copyFloor); - - if (copyFloor) - { - FSectorTagIterator itr(target); - while ((secnum = itr.Next()) >= 0) - level.sectors[secnum].ChangeFlags(sector_t::floor, 0, PLANEF_ABSLIGHTING); - } - else - { - FSectorTagIterator itr(target); - while ((secnum = itr.Next()) >= 0) - level.sectors[secnum].ChangeFlags(sector_t::ceiling, 0, PLANEF_ABSLIGHTING); - } - ChangeStatNum (STAT_LIGHTTRANSFER); -} - -void DLightTransfer::Tick () -{ - int light = Source->lightlevel; - - if (light != LastLight) - { - LastLight = light; - DoTransfer (light, TargetTag, CopyFloor); - } -} - -void DLightTransfer::DoTransfer (int llevel, int target, bool floor) -{ - int secnum; - - if (floor) - { - FSectorTagIterator itr(target); - while ((secnum = itr.Next()) >= 0) - level.sectors[secnum].SetPlaneLight(sector_t::floor, llevel); - } - else - { - FSectorTagIterator itr(target); - while ((secnum = itr.Next()) >= 0) - level.sectors[secnum].SetPlaneLight(sector_t::ceiling, llevel); - } -} - - -class DWallLightTransfer : public DThinker -{ - enum - { - WLF_SIDE1=1, - WLF_SIDE2=2, - WLF_NOFAKECONTRAST=4 - }; - - DECLARE_CLASS (DWallLightTransfer, DThinker) - DWallLightTransfer() {} -public: - DWallLightTransfer (sector_t *srcSec, int target, uint8_t flags); - void Serialize(FSerializer &arc); - void Tick (); - -protected: - static void DoTransfer (short level, int target, uint8_t flags); - - sector_t *Source; - int TargetID; - short LastLight; - uint8_t Flags; -}; - -IMPLEMENT_CLASS(DWallLightTransfer, false, false) - -void DWallLightTransfer::Serialize(FSerializer &arc) -{ - Super::Serialize (arc); - arc("lastlight", LastLight) - ("source", Source) - ("targetid", TargetID) - ("flags", Flags); -} - -DWallLightTransfer::DWallLightTransfer (sector_t *srcSec, int target, uint8_t flags) -{ - int linenum; - int wallflags; - - Source = srcSec; - TargetID = target; - Flags = flags; - DoTransfer (LastLight = srcSec->GetLightLevel(), target, Flags); - - if (!(flags & WLF_NOFAKECONTRAST)) - { - wallflags = WALLF_ABSLIGHTING; - } - else - { - wallflags = WALLF_ABSLIGHTING | WALLF_NOFAKECONTRAST; - } - - FLineIdIterator itr(target); - while ((linenum = itr.Next()) >= 0) - { - if (flags & WLF_SIDE1 && level.lines[linenum].sidedef[0] != NULL) - { - level.lines[linenum].sidedef[0]->Flags |= wallflags; - } - - if (flags & WLF_SIDE2 && level.lines[linenum].sidedef[1] != NULL) - { - level.lines[linenum].sidedef[1]->Flags |= wallflags; - } - } - ChangeStatNum(STAT_LIGHTTRANSFER); -} - -void DWallLightTransfer::Tick () -{ - short light = sector_t::ClampLight(Source->lightlevel); - - if (light != LastLight) - { - LastLight = light; - DoTransfer (light, TargetID, Flags); - } -} - -void DWallLightTransfer::DoTransfer (short lightlevel, int target, uint8_t flags) -{ - int linenum; - - FLineIdIterator itr(target); - while ((linenum = itr.Next()) >= 0) - { - line_t *line = &level.lines[linenum]; - - if (flags & WLF_SIDE1 && line->sidedef[0] != NULL) - { - line->sidedef[0]->SetLight(lightlevel); - } - - if (flags & WLF_SIDE2 && line->sidedef[1] != NULL) - { - line->sidedef[1]->SetLight(lightlevel); - } - } -} - -//----------------------------------------------------------------------------- -// -// Portals -// -//----------------------------------------------------------------------------- - -//--------------------------------------------------------------------------- -// Upper stacks go in the top sector. Lower stacks go in the bottom sector. - -static void SetupFloorPortal (AActor *point) -{ - NActorIterator it (NAME_LowerStackLookOnly, point->tid); - sector_t *Sector = point->Sector; - auto skyv = it.Next(); - if (skyv != nullptr) - { - skyv->target = point; - if (Sector->GetAlpha(sector_t::floor) == 1.) - Sector->SetAlpha(sector_t::floor, clamp(point->args[0], 0, 255) / 255.); - - Sector->Portals[sector_t::floor] = P_GetStackPortal(skyv, sector_t::floor); - } -} - -static void SetupCeilingPortal (AActor *point) -{ - NActorIterator it (NAME_UpperStackLookOnly, point->tid); - sector_t *Sector = point->Sector; - auto skyv = it.Next(); - if (skyv != nullptr) - { - skyv->target = point; - if (Sector->GetAlpha(sector_t::ceiling) == 1.) - Sector->SetAlpha(sector_t::ceiling, clamp(point->args[0], 0, 255) / 255.); - - Sector->Portals[sector_t::ceiling] = P_GetStackPortal(skyv, sector_t::ceiling); - } -} - -void P_SetupPortals() -{ - TThinkerIterator it("StackPoint"); - AActor *pt; - TArray points; - - while ((pt = it.Next())) - { - FName nm = pt->GetClass()->TypeName; - if (nm == NAME_UpperStackLookOnly) - { - SetupFloorPortal(pt); - } - else if (nm == NAME_LowerStackLookOnly) - { - SetupCeilingPortal(pt); - } - pt->special1 = 0; - points.Push(pt); - } - // the semantics here are incredibly lax so the final setup can only be done once all portals have been created, - // because later stackpoints will happily overwrite info in older ones, if there are multiple links. - for (auto &s : level.sectorPortals) - { - if (s.mType == PORTS_STACKEDSECTORTHING && s.mSkybox) - { - for (auto &ss : level.sectorPortals) - { - if (ss.mType == PORTS_STACKEDSECTORTHING && ss.mSkybox == s.mSkybox->target) - { - s.mPartner = unsigned((&ss) - &level.sectorPortals[0]); - } - } - } - } - // Now we can finally set the displacement and delete the stackpoint reference. - for (auto &s : level.sectorPortals) - { - if (s.mType == PORTS_STACKEDSECTORTHING && s.mSkybox) - { - s.mDisplacement = s.mSkybox->Pos() - s.mSkybox->target->Pos(); - s.mSkybox = nullptr; - } - } -} - -static void SetPortal(sector_t *sector, int plane, unsigned pnum, double alpha) -{ - // plane: 0=floor, 1=ceiling, 2=both - if (plane > 0) - { - if (sector->GetPortalType(sector_t::ceiling) == PORTS_SKYVIEWPOINT) - { - sector->Portals[sector_t::ceiling] = pnum; - if (sector->GetAlpha(sector_t::ceiling) == 1.) - sector->SetAlpha(sector_t::ceiling, alpha); - - if (level.sectorPortals[pnum].mFlags & PORTSF_SKYFLATONLY) - sector->SetTexture(sector_t::ceiling, skyflatnum); - } - } - if (plane == 2 || plane == 0) - { - if (sector->GetPortalType(sector_t::floor) == PORTS_SKYVIEWPOINT) - { - sector->Portals[sector_t::floor] = pnum; - } - if (sector->GetAlpha(sector_t::floor) == 1.) - sector->SetAlpha(sector_t::floor, alpha); - - if (level.sectorPortals[pnum].mFlags & PORTSF_SKYFLATONLY) - sector->SetTexture(sector_t::floor, skyflatnum); - } -} - -static void CopyPortal(int sectortag, int plane, unsigned pnum, double alpha, bool tolines) -{ - int s; - FSectorTagIterator itr(sectortag); - while ((s = itr.Next()) >= 0) - { - SetPortal(&level.sectors[s], plane, pnum, alpha); - } - - for (auto &line : level.lines) - { - // Check if this portal needs to be copied to other sectors - // This must be done here to ensure that it gets done only after the portal is set up - if (line.special == Sector_SetPortal && - line.args[1] == 1 && - (line.args[2] == plane || line.args[2] == 3) && - line.args[3] == sectortag) - { - if (line.args[0] == 0) - { - SetPortal(line.frontsector, plane, pnum, alpha); - } - else - { - FSectorTagIterator itr(line.args[0]); - while ((s = itr.Next()) >= 0) - { - SetPortal(&level.sectors[s], plane, pnum, alpha); - } - } - } - if (tolines && line.special == Sector_SetPortal && - line.args[1] == 5 && - line.args[3] == sectortag) - { - if (line.args[0] == 0) - { - line.portaltransferred = pnum; - } - else - { - FLineIdIterator itr(line.args[0]); - while ((s = itr.Next()) >= 0) - { - level.lines[s].portaltransferred = pnum; - } - } - } - } -} - - -void P_SpawnPortal(line_t *line, int sectortag, int plane, int bytealpha, int linked) -{ - if (plane < 0 || plane > 2 || (linked && plane == 2)) return; - for (auto &oline : level.lines) - { - // We must look for the reference line with a linear search unless we want to waste the line ID for it - // which is not a good idea. - if (oline.special == Sector_SetPortal && - oline.args[0] == sectortag && - oline.args[1] == linked && - oline.args[2] == plane && - oline.args[3] == 1) - { - // beware of overflows. - DVector2 pos1 = line->v1->fPos() + line->Delta() / 2; - DVector2 pos2 = oline.v1->fPos() + oline.Delta() / 2; - unsigned pnum = P_GetPortal(linked ? PORTS_LINKEDPORTAL : PORTS_PORTAL, plane, line->frontsector, oline.frontsector, pos2 - pos1); - CopyPortal(sectortag, plane, pnum, bytealpha / 255., false); - return; - } - } -} - -// This searches the viewpoint's sector -// for a skybox line special, gets its tag and transfers the skybox to all tagged sectors. -void P_SpawnSkybox(AActor *origin) -{ - sector_t *Sector = origin->Sector; - if (Sector == NULL) - { - Printf("Sector not initialized for SkyCamCompat\n"); - origin->Sector = Sector = P_PointInSector(origin->Pos()); - } - if (Sector) - { - for(auto refline : Sector->Lines) - { - if (refline->special == Sector_SetPortal && refline->args[1] == 2) - { - // We found the setup linedef for this skybox, so let's use it for our init. - unsigned pnum = P_GetSkyboxPortal(origin); - CopyPortal(refline->args[0], refline->args[2], pnum, 0, true); - return; - } - } - } -} - - - -// -// P_SetSectorDamage -// -// Sets damage properties for one sector. Allows combination of original specials with explicit use of the damage properties -// - -static void P_SetupSectorDamage(sector_t *sector, int damage, int interval, int leakchance, FName type, int flags) -{ - // Only set if damage is not yet initialized. This ensures that UDMF takes precedence over sector specials. - if (sector->damageamount == 0) - { - sector->damageamount = damage; - sector->damageinterval = MAX(1, interval); - sector->leakydamage = leakchance; - sector->damagetype = type; - sector->Flags = (sector->Flags & ~SECF_DAMAGEFLAGS) | (flags & SECF_DAMAGEFLAGS); - } -} - -// -// P_InitSectorSpecial -// -// Sets up everything derived from 'sector->special' for one sector -// ('fromload' is necessary to allow conversion upon savegame load.) -// -void P_SpawnLights(sector_t *sector); - -void P_InitSectorSpecial(sector_t *sector, int special) -{ - // [RH] All secret sectors are marked with a BOOM-ish bitfield - if (sector->special & SECRET_MASK) - { - sector->Flags |= SECF_SECRET | SECF_WASSECRET; - level.total_secrets++; - } - if (sector->special & FRICTION_MASK) - { - sector->Flags |= SECF_FRICTION; - } - if (sector->special & PUSH_MASK) - { - sector->Flags |= SECF_PUSH; - } - if ((sector->special & DAMAGE_MASK) == 0x100) - { - P_SetupSectorDamage(sector, 5, 32, 0, NAME_Fire, 0); - } - else if ((sector->special & DAMAGE_MASK) == 0x200) - { - P_SetupSectorDamage(sector, 10, 32, 0, NAME_Slime, 0); - } - else if ((sector->special & DAMAGE_MASK) == 0x300) - { - P_SetupSectorDamage(sector, 20, 32, 5, NAME_Slime, 0); - } - sector->special &= 0xff; - - // [RH] Normal DOOM special or BOOM specialized? - bool keepspecial = false; - P_SpawnLights(sector); - switch (sector->special) - { - case dLight_Strobe_Hurt: - P_SetupSectorDamage(sector, 20, 32, 5, NAME_Slime, 0); - break; - - case dDamage_Hellslime: - P_SetupSectorDamage(sector, 10, 32, 0, NAME_Slime, 0); - break; - - case dDamage_Nukage: - P_SetupSectorDamage(sector, 5, 32, 0, NAME_Slime, 0); - break; - - case dSector_DoorCloseIn30: - Create(sector, DDoor::doorWaitClose, 2, 0, 0, 30 * TICRATE); - break; - - case dDamage_End: - P_SetupSectorDamage(sector, 20, 32, 256, NAME_None, SECF_ENDGODMODE|SECF_ENDLEVEL); - break; - - case dSector_DoorRaiseIn5Mins: - Create (sector, DDoor::doorWaitRaise, 2, TICRATE*30/7, 0, 5*60*TICRATE); - break; - - case dFriction_Low: - sector->friction = FRICTION_LOW; - sector->movefactor = 0x269/65536.; - sector->Flags |= SECF_FRICTION; - break; - - case dDamage_SuperHellslime: - P_SetupSectorDamage(sector, 20, 32, 5, NAME_Slime, 0); - break; - - case dDamage_LavaWimpy: - P_SetupSectorDamage(sector, 5, 16, 256, NAME_Fire, SECF_DMGTERRAINFX); - break; - - case dDamage_LavaHefty: - P_SetupSectorDamage(sector, 8, 16, 256, NAME_Fire, SECF_DMGTERRAINFX); - break; - - case dScroll_EastLavaDamage: - P_SetupSectorDamage(sector, 5, 16, 256, NAME_Fire, SECF_DMGTERRAINFX); - P_CreateScroller(EScroll::sc_floor, -4., 0, sector, 0); - keepspecial = true; - break; - - case hDamage_Sludge: - P_SetupSectorDamage(sector, 4, 32, 0, NAME_Slime, 0); - break; - - case sLight_Strobe_Hurt: - P_SetupSectorDamage(sector, 5, 32, 0, NAME_Slime, 0); - break; - - case sDamage_Hellslime: - P_SetupSectorDamage(sector, 2, 32, 0, NAME_Slime, SECF_HAZARD); - break; - - case Damage_InstantDeath: - // Strife's instant death sector - P_SetupSectorDamage(sector, TELEFRAG_DAMAGE, 1, 256, NAME_InstantDeath, 0); - break; - - case sDamage_SuperHellslime: - P_SetupSectorDamage(sector, 4, 32, 0, NAME_Slime, SECF_HAZARD); - break; - - case Sector_Hidden: - sector->MoreFlags |= SECMF_HIDDEN; - break; - - case Sector_Heal: - // CoD's healing sector - P_SetupSectorDamage(sector, -1, 32, 0, NAME_None, 0); - break; - - case Sky2: - sector->sky = PL_SKYFLAT; - break; - - default: - if (sector->special >= Scroll_North_Slow && sector->special <= Scroll_SouthWest_Fast) - { // Hexen scroll special - static const int8_t hexenScrollies[24][2] = - { - { 0, 1 }, { 0, 2 }, { 0, 4 }, - { -1, 0 }, { -2, 0 }, { -4, 0 }, - { 0, -1 }, { 0, -2 }, { 0, -4 }, - { 1, 0 }, { 2, 0 }, { 4, 0 }, - { 1, 1 }, { 2, 2 }, { 4, 4 }, - { -1, 1 }, { -2, 2 }, { -4, 4 }, - { -1, -1 }, { -2, -2 }, { -4, -4 }, - { 1, -1 }, { 2, -2 }, { 4, -4 } - }; - - - int i = sector->special - Scroll_North_Slow; - double dx = hexenScrollies[i][0] / 2.; - double dy = hexenScrollies[i][1] / 2.; - P_CreateScroller(EScroll::sc_floor, dx, dy, sector, 0); - } - else if (sector->special >= Carry_East5 && sector->special <= Carry_East35) - { - // Heretic scroll special - // Only east scrollers also scroll the texture - P_CreateScroller(EScroll::sc_floor, -0.5 * (1 << ((sector->special & 0xff) - Carry_East5)), 0, sector, 0); - } - keepspecial = true; - break; - } - if (!keepspecial) sector->special = 0; -} - -// -// P_SpawnSpecials -// -// After the map has been loaded, scan for specials that spawn thinkers -// - -void P_SpawnSpecials (MapLoader *ml) -{ - P_SetupPortals(); - - for (auto &sec : level.sectors) - { - if (sec.special == 0) - continue; - - P_InitSectorSpecial(&sec, sec.special); - } - -#ifndef NO_EDATA - ml->ProcessEDSectors(); -#endif - - - // Init other misc stuff - - P_SpawnScrollers(&level); // killough 3/7/98: Add generalized scrollers - P_SpawnFriction(); // phares 3/12/98: New friction model using linedefs - P_SpawnPushers(); // phares 3/20/98: New pusher model using linedefs - - TThinkerIterator it2("SkyCamCompat"); - AActor *pt2; - while ((pt2 = it2.Next())) - { - P_SpawnSkybox(pt2); - } - - for (auto &line : level.lines) - { - switch (line.special) - { - int s; - sector_t *sec; - - // killough 3/7/98: - // support for drawn heights coming from different sector - case Transfer_Heights: - { - sec = line.frontsector; - - if (line.args[1] & 2) - { - sec->MoreFlags |= SECMF_FAKEFLOORONLY; - } - if (line.args[1] & 4) - { - sec->MoreFlags |= SECMF_CLIPFAKEPLANES; - } - if (line.args[1] & 8) - { - sec->MoreFlags |= SECMF_UNDERWATER; - } - else if (forcewater) - { - sec->MoreFlags |= SECMF_FORCEDUNDERWATER; - } - if (line.args[1] & 16) - { - sec->MoreFlags |= SECMF_IGNOREHEIGHTSEC; - } - else level.HasHeightSecs = true; - if (line.args[1] & 32) - { - sec->MoreFlags |= SECMF_NOFAKELIGHT; - } - FSectorTagIterator itr(line.args[0]); - while ((s = itr.Next()) >= 0) - { - level.sectors[s].heightsec = sec; - sec->e->FakeFloor.Sectors.Push(&level.sectors[s]); - level.sectors[s].MoreFlags |= (sec->MoreFlags & SECMF_IGNOREHEIGHTSEC); // copy this to the destination sector for easier checking. - level.sectors[s].AdjustFloorClip(); - } - break; - } - - // killough 3/16/98: Add support for setting - // floor lighting independently (e.g. lava) - case Transfer_FloorLight: - Create (line.frontsector, line.args[0], true); - break; - - // killough 4/11/98: Add support for setting - // ceiling lighting independently - case Transfer_CeilingLight: - Create (line.frontsector, line.args[0], false); - break; - - // [Graf Zahl] Add support for setting lighting - // per wall independently - case Transfer_WallLight: - Create (line.frontsector, line.args[0], line.args[1]); - break; - - case Sector_Attach3dMidtex: - P_Attach3dMidtexLinesToSector(line.frontsector, line.args[0], line.args[1], !!line.args[2]); - break; - - case Sector_SetLink: - if (line.args[0] == 0) - { - P_AddSectorLinks(line.frontsector, line.args[1], line.args[2], line.args[3]); - } - break; - - case Sector_SetPortal: - // arg 0 = sector tag - // arg 1 = type - // - 0: normal (handled here) - // - 1: copy (handled by the portal they copy) - // - 2: EE-style skybox (handled by the camera object) - // - 3: EE-style flat portal (GZDoom HW renderer only for now) - // - 4: EE-style horizon portal (GZDoom HW renderer only for now) - // - 5: copy portal to line (GZDoom HW renderer only for now) - // - 6: linked portal - // other values reserved for later use - // arg 2 = 0:floor, 1:ceiling, 2:both - // arg 3 = 0: anchor, 1: reference line - // arg 4 = for the anchor only: alpha - if ((line.args[1] == 0 || line.args[1] == 6) && line.args[3] == 0) - { - P_SpawnPortal(&line, line.args[0], line.args[2], line.args[4], line.args[1]); - } - else if (line.args[1] == 3 || line.args[1] == 4) - { - unsigned pnum = P_GetPortal(line.args[1] == 3 ? PORTS_PLANE : PORTS_HORIZON, line.args[2], line.frontsector, NULL, { 0,0 }); - CopyPortal(line.args[0], line.args[2], pnum, 0, true); - } - break; - - case Line_SetPortal: - P_SpawnLinePortal(&line); - break; - - // [RH] ZDoom Static_Init settings - case Static_Init: - switch (line.args[1]) - { - case Init_Gravity: - { - double grav = line.Delta().Length() / 100.; - FSectorTagIterator itr(line.args[0]); - while ((s = itr.Next()) >= 0) - level.sectors[s].gravity = grav; - } - break; - - //case Init_Color: - // handled in P_LoadSideDefs2() - - case Init_Damage: - { - int damage = int(line.Delta().Length()); - FSectorTagIterator itr(line.args[0]); - while ((s = itr.Next()) >= 0) - { - sector_t *sec = &level.sectors[s]; - sec->damageamount = damage; - sec->damagetype = NAME_None; - if (sec->damageamount < 20) - { - sec->leakydamage = 0; - sec->damageinterval = 32; - } - else if (sec->damageamount < 50) - { - sec->leakydamage = 5; - sec->damageinterval = 32; - } - else - { - sec->leakydamage = 256; - sec->damageinterval = 1; - } - } - } - break; - - case Init_SectorLink: - if (line.args[3] == 0) - P_AddSectorLinksByID(line.frontsector, line.args[0], line.args[2]); - break; - - // killough 10/98: - // - // Support for sky textures being transferred from sidedefs. - // Allows scrolling and other effects (but if scrolling is - // used, then the same sector tag needs to be used for the - // sky sector, the sky-transfer linedef, and the scroll-effect - // linedef). Still requires user to use F_SKY1 for the floor - // or ceiling texture, to distinguish floor and ceiling sky. - - case Init_TransferSky: - { - FSectorTagIterator itr(line.args[0]); - while ((s = itr.Next()) >= 0) - level.sectors[s].sky = (line.Index() + 1) | PL_SKYFLAT; - break; - } - } - break; - } - } - // [RH] Start running any open scripts on this map - level.Behaviors.StartTypedScripts (SCRIPT_Open, NULL, false); -} - //////////////////////////////////////////////////////////////////////////// // // FRICTION EFFECTS @@ -1559,32 +730,7 @@ void P_SpawnSpecials (MapLoader *ml) // // Initialize the sectors where friction is increased or decreased -static void P_SpawnFriction(void) -{ - line_t *l = &level.lines[0]; - - for (unsigned i = 0 ; i < level.lines.Size() ; i++,l++) - { - if (l->special == Sector_SetFriction) - { - int length; - - if (l->args[1]) - { // [RH] Allow setting friction amount from parameter - length = l->args[1] <= 200 ? l->args[1] : 200; - } - else - { - length = int(l->Delta().Length()); - } - - P_SetSectorFriction (l->args[0], length, false); - l->special = 0; - } - } -} - -void P_SetSectorFriction (int tag, int amount, bool alterFlag) +void P_SetSectorFriction (FLevelLocals *Level, int tag, int amount, bool alterFlag) { int s; double friction, movefactor; @@ -1601,7 +747,7 @@ void P_SetSectorFriction (int tag, int amount, bool alterFlag) // higher friction value actually means 'less friction'. movefactor = FrictionToMoveFactor(friction); - FSectorTagIterator itr(tag); + auto itr = Level->GetSectorTagIterator(tag); while ((s = itr.Next()) >= 0) { // killough 8/28/98: @@ -1614,19 +760,19 @@ void P_SetSectorFriction (int tag, int amount, bool alterFlag) // drag on CPU. New code adjusts friction of sector only once // at level startup, and then uses this friction value. - level.sectors[s].friction = friction; - level.sectors[s].movefactor = movefactor; + Level->sectors[s].friction = friction; + Level->sectors[s].movefactor = movefactor; if (alterFlag) { // When used inside a script, the sectors' friction flags // can be enabled and disabled at will. if (friction == ORIG_FRICTION) { - level.sectors[s].Flags &= ~SECF_FRICTION; + Level->sectors[s].Flags &= ~SECF_FRICTION; } else { - level.sectors[s].Flags |= SECF_FRICTION; + Level->sectors[s].Flags |= SECF_FRICTION; } } } diff --git a/src/p_spec.h b/src/p_spec.h index 0b1e93f8ce..9508dd2253 100644 --- a/src/p_spec.h +++ b/src/p_spec.h @@ -40,12 +40,6 @@ class FScanner; struct level_info_t; struct FDoorAnimation; -struct FThinkerCollection -{ - int RefNum; - DThinker *Obj; -}; - enum class EScroll : int { sc_side, @@ -63,7 +57,6 @@ enum EScrollPos : int scw_all = 7, }; -void P_CreateScroller(EScroll type, double dx, double dy, sector_t *affectee, int accel, EScrollPos scrollpos = EScrollPos::scw_all); //jff 2/23/98 identify the special classes that can share sectors @@ -87,17 +80,10 @@ const double CARRYFACTOR = 3 / 32.; #define DAMAGE_NO_ARMOR 16 -// [RH] If a deathmatch game, checks to see if noexit is enabled. -// If so, it kills the player and returns false. Otherwise, -// it returns true, and the player is allowed to live. -bool CheckIfExitIsGood (AActor *self, level_info_t *info); - class MapLoader; -// at map load -void P_SpawnSpecials (MapLoader *ml); // every tic -void P_UpdateSpecials (void); +void P_UpdateSpecials (FLevelLocals *); // when needed bool P_ActivateLine (line_t *ld, AActor *mo, int side, int activationType, DVector3 *optpos = NULL); @@ -106,10 +92,10 @@ bool P_PredictLine (line_t *ld, AActor *mo, int side, int activationType); void P_PlayerInSpecialSector (player_t *player, sector_t * sector=NULL); void P_PlayerOnSpecialFlat (player_t *player, int floorType); -void P_SectorDamage(int tag, int amount, FName type, PClassActor *protectClass, int flags); -void P_SetSectorFriction (int tag, int amount, bool alterFlag); +void P_SectorDamage(FLevelLocals *Level, int tag, int amount, FName type, PClassActor *protectClass, int flags); +void P_SetSectorFriction (FLevelLocals *level, int tag, int amount, bool alterFlag); double FrictionToMoveFactor(double friction); -void P_GiveSecret(AActor *actor, bool printmessage, bool playsound, int sectornum); +void P_GiveSecret(FLevelLocals *Level, AActor *actor, bool printmessage, bool playsound, int sectornum); // // getNextSector() @@ -129,30 +115,6 @@ inline sector_t *getNextSector (line_t *line, const sector_t *sec) #include "p_tags.h" -class DLighting : public DSectorEffect -{ - DECLARE_CLASS(DLighting, DSectorEffect) -public: - DLighting(sector_t *sector); -protected: - DLighting(); -}; - -void EV_StartLightFlickering (int tag, int upper, int lower); -void EV_StartLightStrobing (int tag, int upper, int lower, int utics, int ltics); -void EV_StartLightStrobing (int tag, int utics, int ltics); -void EV_TurnTagLightsOff (int tag); -void EV_LightTurnOn (int tag, int bright); -void EV_LightTurnOnPartway (int tag, double frac); // killough 10/98 -void EV_LightChange (int tag, int value); -void EV_StopLightEffect (int tag); - -void P_SpawnGlowingLight (sector_t *sector); - -void EV_StartLightGlowing (int tag, int upper, int lower, int tics); -void EV_StartLightFading (int tag, int value, int tics); - - // // P_SWITCH // @@ -162,519 +124,11 @@ void EV_StartLightFading (int tag, int value, int tics); bool P_ChangeSwitchTexture (side_t *side, int useAgain, uint8_t special, bool *quest=NULL); bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno, const DVector3 *optpos = NULL); -// -// P_PLATS -// -class DPlat : public DMovingFloor -{ - DECLARE_CLASS (DPlat, DMovingFloor) -public: - enum EPlatState - { - up, - down, - waiting, - in_stasis - }; - - enum EPlatType - { - platPerpetualRaise, - platDownWaitUpStay, - platDownWaitUpStayStone, - platUpWaitDownStay, - platUpNearestWaitDownStay, - platDownByValue, - platUpByValue, - platUpByValueStay, - platRaiseAndStay, - platToggle, - platDownToNearestFloor, - platDownToLowestCeiling, - platRaiseAndStayLockout, - }; - - void Serialize(FSerializer &arc); - void Tick (); - - bool IsLift() const { return m_Type == platDownWaitUpStay || m_Type == platDownWaitUpStayStone; } - DPlat(sector_t *sector); - -protected: - - double m_Speed; - double m_Low; - double m_High; - int m_Wait; - int m_Count; - EPlatState m_Status; - EPlatState m_OldStatus; - int m_Crush; - int m_Tag; - EPlatType m_Type; - - void PlayPlatSound (const char *sound); - void Reactivate (); - void Stop (); - -private: - DPlat (); - - friend bool EV_DoPlat (int tag, line_t *line, EPlatType type, - double height, double speed, int delay, int lip, int change); - friend void EV_StopPlat (int tag, bool remove); - friend void P_ActivateInStasis (int tag); -}; - -bool EV_DoPlat (int tag, line_t *line, DPlat::EPlatType type, - double height, double speed, int delay, int lip, int change); -void EV_StopPlat (int tag, bool remove); -void P_ActivateInStasis (int tag); - -// -// [RH] -// P_PILLAR -// - -class DPillar : public DMover -{ - DECLARE_CLASS (DPillar, DMover) - HAS_OBJECT_POINTERS -public: - enum EPillar - { - pillarBuild, - pillarOpen - - }; - - DPillar (sector_t *sector, EPillar type, double speed, double height, - double height2, int crush, bool hexencrush); - - void Serialize(FSerializer &arc); - void Tick (); - void OnDestroy() override; - -protected: - EPillar m_Type; - double m_FloorSpeed; - double m_CeilingSpeed; - double m_FloorTarget; - double m_CeilingTarget; - int m_Crush; - bool m_Hexencrush; - TObjPtr m_Interp_Ceiling; - TObjPtr m_Interp_Floor; - -private: - DPillar (); -}; - -bool EV_DoPillar (DPillar::EPillar type, line_t *line, int tag, - double speed, double height, double height2, int crush, bool hexencrush); - -// -// P_DOORS -// -class DDoor : public DMovingCeiling -{ - DECLARE_CLASS (DDoor, DMovingCeiling) -public: - enum EVlDoor - { - doorClose, - doorOpen, - doorRaise, - doorWaitRaise, - doorCloseWaitOpen, - doorWaitClose, - }; - - DDoor (sector_t *sector); - DDoor (sector_t *sec, EVlDoor type, double speed, int delay, int lightTag, int topcountdown); - - void Serialize(FSerializer &arc); - void Tick (); -protected: - EVlDoor m_Type; - double m_TopDist; - double m_BotDist, m_OldFloorDist; - vertex_t *m_BotSpot; - double m_Speed; - - // 1 = up, 0 = waiting at top, -1 = down - int m_Direction; - - // tics to wait at the top - int m_TopWait; - // (keep in case a door going down is reset) - // when it reaches 0, start going down - int m_TopCountdown; - - int m_LightTag; - - void DoorSound (bool raise, class DSeqNode *curseq=NULL) const; - - friend bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing, - int tag, double speed, int delay, int lock, - int lightTag, bool boomgen, int topcountdown); -private: - DDoor (); - -}; - -bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing, - int tag, double speed, int delay, int lock, - int lightTag, bool boomgen = false, int topcountdown = 0); - - -class DAnimatedDoor : public DMovingCeiling -{ - DECLARE_CLASS (DAnimatedDoor, DMovingCeiling) -public: - - enum EADType - { - adOpenClose, - adClose - }; - - DAnimatedDoor (sector_t *sector); - DAnimatedDoor (sector_t *sec, line_t *line, int speed, int delay, FDoorAnimation *anim, EADType type); - - void Serialize(FSerializer &arc); - void Tick (); - - bool StartClosing (); -protected: - line_t *m_Line1, *m_Line2; - int m_Frame; - FDoorAnimation *m_DoorAnim; - int m_Timer; - double m_BotDist; - int m_Status; - int m_Type; - enum - { - Opening, - Waiting, - Closing, - Dead - }; - int m_Speed; - int m_Delay; - bool m_SetBlocking1, m_SetBlocking2; - - friend bool EV_SlidingDoor (line_t *line, AActor *thing, int tag, int speed, int delay, EADType type); -private: - DAnimatedDoor (); -}; - -bool EV_SlidingDoor (line_t *line, AActor *thing, int tag, int speed, int delay, DAnimatedDoor::EADType type); - -// -// P_CEILNG -// - -// [RH] Changed these -class DCeiling : public DMovingCeiling -{ - DECLARE_CLASS (DCeiling, DMovingCeiling) -public: - enum ECeiling - { - ceilLowerByValue, - ceilRaiseByValue, - ceilMoveToValue, - ceilLowerToHighestFloor, - ceilLowerInstant, - ceilRaiseInstant, - ceilCrushAndRaise, - ceilLowerAndCrush, - ceil_placeholder, - ceilCrushRaiseAndStay, - ceilRaiseToNearest, - ceilLowerToLowest, - ceilLowerToFloor, - - // The following are only used by Generic_Ceiling - ceilRaiseToHighest, - ceilLowerToHighest, - ceilRaiseToLowest, - ceilLowerToNearest, - ceilRaiseToHighestFloor, - ceilRaiseToFloor, - ceilRaiseByTexture, - ceilLowerByTexture, - - genCeilingChg0, - genCeilingChgT, - genCeilingChg - }; - - enum class ECrushMode - { - crushDoom = 0, - crushHexen = 1, - crushSlowdown = 2 - }; - - - DCeiling (sector_t *sec); - DCeiling (sector_t *sec, double speed1, double speed2, int silent); - - void Serialize(FSerializer &arc); - void Tick (); - -protected: - ECeiling m_Type; - double m_BottomHeight; - double m_TopHeight; - double m_Speed; - double m_Speed1; // [RH] dnspeed of crushers - double m_Speed2; // [RH] upspeed of crushers - int m_Crush; - ECrushMode m_CrushMode; - int m_Silent; - int m_Direction; // 1 = up, 0 = waiting, -1 = down - - // [RH] Need these for BOOM-ish transferring ceilings - FTextureID m_Texture; - secspecial_t m_NewSpecial{}; - - // ID - int m_Tag; - int m_OldDirection; - - void PlayCeilingSound (); - -private: - DCeiling (); - - friend bool P_CreateCeiling(sector_t *sec, DCeiling::ECeiling type, line_t *line, int tag, double speed, double speed2, double height, int crush, int silent, int change, DCeiling::ECrushMode hexencrush); - friend bool EV_CeilingCrushStop (int tag, bool remove); - friend void P_ActivateInStasisCeiling (int tag); -}; - -bool P_CreateCeiling(sector_t *sec, DCeiling::ECeiling type, line_t *line, int tag, double speed, double speed2, double height, int crush, int silent, int change, DCeiling::ECrushMode hexencrush); -bool EV_DoCeiling (DCeiling::ECeiling type, line_t *line, int tag, double speed, double speed2, double height, int crush, int silent, int change, DCeiling::ECrushMode hexencrush = DCeiling::ECrushMode::crushDoom); - -bool EV_CeilingCrushStop (int tag, bool remove); -bool EV_StopCeiling(int tag, line_t *line); -void P_ActivateInStasisCeiling (int tag); - - - -// -// P_FLOOR -// - -class DFloor : public DMovingFloor -{ - DECLARE_CLASS (DFloor, DMovingFloor) -public: - enum EFloor - { - floorLowerToLowest, - floorLowerToNearest, - floorLowerToHighest, - floorLowerByValue, - floorRaiseByValue, - floorRaiseToHighest, - floorRaiseToNearest, - floorRaiseAndCrush, - floorRaiseAndCrushDoom, - floorCrushStop, - floorLowerInstant, - floorRaiseInstant, - floorMoveToValue, - floorRaiseToLowestCeiling, - floorRaiseByTexture, - - floorLowerAndChange, - floorRaiseAndChange, - - floorRaiseToLowest, - floorRaiseToCeiling, - floorLowerToLowestCeiling, - floorLowerByTexture, - floorLowerToCeiling, - - donutRaise, - - buildStair, - waitStair, - resetStair, - - // Not to be used as parameters to EV_DoFloor() - genFloorChg0, - genFloorChgT, - genFloorChg - }; - - // [RH] Changed to use Hexen-ish specials - enum EStair - { - buildUp, - buildDown - }; - - enum EStairType - { - stairUseSpecials = 1, - stairSync = 2, - stairCrush = 4, - }; - - DFloor (sector_t *sec); - - void Serialize(FSerializer &arc); - void Tick (); - -//protected: - EFloor m_Type; - int m_Crush; - bool m_Hexencrush; - bool m_Instant; - int m_Direction; - secspecial_t m_NewSpecial{}; - FTextureID m_Texture; - double m_FloorDestDist; - double m_Speed; - - // [RH] New parameters used to reset and delay stairs - double m_OrgDist; - int m_ResetCount; - int m_Delay; - int m_PauseTime; - int m_StepTime; - int m_PerStepTime; - - void StartFloorSound (); - void SetFloorChangeType (sector_t *sec, int change); - - friend bool EV_BuildStairs (int tag, DFloor::EStair type, line_t *line, - double stairsize, double speed, int delay, int reset, int igntxt, - int usespecials); - friend bool EV_DoFloor (DFloor::EFloor floortype, line_t *line, int tag, - double speed, double height, int crush, int change, bool hexencrush, bool hereticlower); - friend bool EV_DoDonut (int tag, line_t *line, double pillarspeed, double slimespeed); -private: - DFloor (); -}; - -bool P_CreateFloor(sector_t *sec, DFloor::EFloor floortype, line_t *line, - double speed, double height, int crush, int change, bool hexencrush, bool hereticlower); - -bool EV_BuildStairs (int tag, DFloor::EStair type, line_t *line, - double stairsize, double speed, int delay, int reset, int igntxt, - int usespecials); -bool EV_DoFloor(DFloor::EFloor floortype, line_t *line, int tag, - double speed, double height, int crush, int change, bool hexencrush, bool hereticlower = false); - -bool EV_FloorCrushStop (int tag, line_t *line); -bool EV_StopFloor(int tag, line_t *line); -bool EV_DoDonut (int tag, line_t *line, double pillarspeed, double slimespeed); - -class DElevator : public DMover -{ - DECLARE_CLASS (DElevator, DMover) - HAS_OBJECT_POINTERS -public: - enum EElevator - { - elevateUp, - elevateDown, - elevateCurrent, - // [RH] For FloorAndCeiling_Raise/Lower - elevateRaise, - elevateLower - }; - - DElevator (sector_t *sec); - - void OnDestroy() override; - void Serialize(FSerializer &arc); - void Tick (); - -protected: - EElevator m_Type; - int m_Direction; - double m_FloorDestDist; - double m_CeilingDestDist; - double m_Speed; - TObjPtr m_Interp_Ceiling; - TObjPtr m_Interp_Floor; - - void StartFloorSound (); - - friend bool EV_DoElevator (line_t *line, DElevator::EElevator type, double speed, double height, int tag); -private: - DElevator (); -}; - -bool EV_DoElevator (line_t *line, DElevator::EElevator type, double speed, double height, int tag); - -class DWaggleBase : public DMover -{ - DECLARE_CLASS (DWaggleBase, DMover) - HAS_OBJECT_POINTERS -public: - DWaggleBase (sector_t *sec); - - void Serialize(FSerializer &arc); - -protected: - double m_OriginalDist; - double m_Accumulator; - double m_AccDelta; - double m_TargetScale; - double m_Scale; - double m_ScaleDelta; - int m_Ticker; - int m_State; - - friend bool EV_StartWaggle (int tag, line_t *line, int height, int speed, - int offset, int timer, bool ceiling); - - void DoWaggle (bool ceiling); - DWaggleBase (); -}; - -bool EV_StartWaggle (int tag, line_t *line, int height, int speed, - int offset, int timer, bool ceiling); - -class DFloorWaggle : public DWaggleBase -{ - DECLARE_CLASS (DFloorWaggle, DWaggleBase) -public: - DFloorWaggle (sector_t *sec); - void Tick (); -private: - DFloorWaggle (); -}; - -class DCeilingWaggle : public DWaggleBase -{ - DECLARE_CLASS (DCeilingWaggle, DWaggleBase) -public: - DCeilingWaggle (sector_t *sec); - void Tick (); -private: - DCeilingWaggle (); -}; - -//jff 3/15/98 pure texture/type change for better generalized support -enum EChange -{ - trigChangeOnly, - numChangeOnly, -}; - -bool EV_DoChange (line_t *line, EChange changetype, int tag); - - - +#include "a_plats.h" +#include "a_pillar.h" +#include "a_doors.h" +#include "a_ceiling.h" +#include "a_floor.h" // // P_TELEPT // @@ -691,13 +145,7 @@ enum //Spawns teleport fog. Pass the actor to pluck TeleFogFromType and TeleFogToType. 'from' determines if this is the fog to spawn at the old position (true) or new (false). void P_SpawnTeleportFog(AActor *mobj, const DVector3 &pos, bool beforeTele = true, bool setTarget = false); - bool P_Teleport(AActor *thing, DVector3 pos, DAngle angle, int flags); -bool EV_Teleport (int tid, int tag, line_t *line, int side, AActor *thing, int flags); -bool EV_SilentLineTeleport (line_t *line, int side, AActor *thing, int id, INTBOOL reverse); -bool EV_TeleportOther (int other_tid, int dest_tid, bool fog); -bool EV_TeleportGroup (int group_tid, AActor *victim, int source_tid, int dest_tid, bool moveSource, bool fog); -bool EV_TeleportSector (int tag, int source_tid, int dest_tid, bool fog, int group_tid); // @@ -709,15 +157,14 @@ bool EV_TeleportSector (int tag, int source_tid, int dest_tid, bool fog, int gro #define ACS_WANTRESULT 4 #define ACS_NET 8 -int P_StartScript (AActor *who, line_t *where, int script, const char *map, const int *args, int argcount, int flags); -void P_SuspendScript (int script, const char *map); -void P_TerminateScript (int script, const char *map); -void P_DoDeferedScripts (void); +int P_StartScript (FLevelLocals *Level, AActor *who, line_t *where, int script, const char *map, const int *args, int argcount, int flags); +void P_SuspendScript (FLevelLocals *Level, int script, const char *map); +void P_TerminateScript (FLevelLocals *Level, int script, const char *map); // // [RH] p_quake.c // -bool P_StartQuakeXYZ(AActor *activator, int tid, int intensityX, int intensityY, int intensityZ, int duration, int damrad, int tremrad, FSoundID quakesfx, int flags, double waveSpeedX, double waveSpeedY, double waveSpeedZ, int falloff, int highpoint, double rollIntensity, double rollWave); -bool P_StartQuake(AActor *activator, int tid, int intensity, int duration, int damrad, int tremrad, FSoundID quakesfx); +bool P_StartQuakeXYZ(FLevelLocals *Level, AActor *activator, int tid, int intensityX, int intensityY, int intensityZ, int duration, int damrad, int tremrad, FSoundID quakesfx, int flags, double waveSpeedX, double waveSpeedY, double waveSpeedZ, int falloff, int highpoint, double rollIntensity, double rollWave); +bool P_StartQuake(FLevelLocals *Level, AActor *activator, int tid, int intensity, int duration, int damrad, int tremrad, FSoundID quakesfx); #endif diff --git a/src/p_spec_thinkers.h b/src/p_spec_thinkers.h new file mode 100644 index 0000000000..f616c936aa --- /dev/null +++ b/src/p_spec_thinkers.h @@ -0,0 +1,8 @@ +#pragma once + +#include "p_spec.h" +#include "r_defs.h" +#include "a_lighttransfer.h" +#include "a_lights.h" +#include "a_pusher.h" +#include "a_scroll.h" diff --git a/src/p_things.cpp b/src/p_things.cpp index b03397239c..e631389764 100644 --- a/src/p_things.cpp +++ b/src/p_things.cpp @@ -47,17 +47,14 @@ #include "actorinlines.h" #include "vm.h" -// Set of spawnable things for the Thing_Spawn and Thing_Projectile specials. -FClassMap SpawnableThings; - static FRandom pr_leadtarget ("LeadTarget"); -bool P_Thing_Spawn (int tid, AActor *source, int type, DAngle angle, bool fog, int newtid) +bool FLevelLocals::EV_Thing_Spawn (int tid, AActor *source, int type, DAngle angle, bool fog, int newtid) { int rtn = 0; PClassActor *kind; AActor *spot, *mobj; - FActorIterator iterator (tid); + auto iterator = GetActorIterator(tid); kind = P_GetSpawnableType(type); @@ -65,10 +62,10 @@ bool P_Thing_Spawn (int tid, AActor *source, int type, DAngle angle, bool fog, i return false; // Handle decorate replacements. - kind = kind->GetReplacement(); + kind = kind->GetReplacement(this); if ((GetDefaultByType(kind)->flags3 & MF3_ISMONSTER) && - ((dmflags & DF_NO_MONSTERS) || (level.flags2 & LEVEL2_NOMONSTERS))) + ((dmflags & DF_NO_MONSTERS) || (flags2 & LEVEL2_NOMONSTERS))) return false; if (tid == 0) @@ -81,7 +78,7 @@ bool P_Thing_Spawn (int tid, AActor *source, int type, DAngle angle, bool fog, i } while (spot != NULL) { - mobj = Spawn (kind, spot->Pos(), ALLOW_REPLACE); + mobj = Spawn (spot->Level, kind, spot->Pos(), ALLOW_REPLACE); if (mobj != NULL) { @@ -131,10 +128,7 @@ bool P_MoveThing(AActor *source, const DVector3 &pos, bool fog) P_SpawnTeleportFog(source, old, true, true); } source->ClearInterpolation(); - if (source == players[consoleplayer].camera) - { - R_ResetViewInterpolation(); - } + source->renderflags |= RF_NOINTERPOLATEVIEW; return true; } else @@ -144,16 +138,16 @@ bool P_MoveThing(AActor *source, const DVector3 &pos, bool fog) } } -bool P_Thing_Move (int tid, AActor *source, int mapspot, bool fog) +bool FLevelLocals::EV_Thing_Move (int tid, AActor *source, int mapspot, bool fog) { AActor *target; if (tid != 0) { - FActorIterator iterator1(tid); + auto iterator1 = GetActorIterator(tid); source = iterator1.Next(); } - FActorIterator iterator2 (mapspot); + auto iterator2 = GetActorIterator(mapspot); target = iterator2.Next (); if (source != NULL && target != NULL) @@ -256,14 +250,14 @@ DEFINE_ACTION_FUNCTION(AActor, VelIntercept) return 0; } -bool P_Thing_Projectile (int tid, AActor *source, int type, const char *type_name, DAngle angle, +bool FLevelLocals::EV_Thing_Projectile (int tid, AActor *source, int type, const char *type_name, DAngle angle, double speed, double vspeed, int dest, AActor *forcedest, int gravity, int newtid, bool leadTarget) { int rtn = 0; PClassActor *kind; AActor *spot, *mobj, *targ = forcedest; - FActorIterator iterator (tid); + auto iterator = GetActorIterator(tid); int defflags3; if (type_name == NULL) @@ -280,11 +274,11 @@ bool P_Thing_Projectile (int tid, AActor *source, int type, const char *type_nam } // Handle decorate replacements. - kind = kind->GetReplacement(); + kind = kind->GetReplacement(this); defflags3 = GetDefaultByType(kind)->flags3; if ((defflags3 & MF3_ISMONSTER) && - ((dmflags & DF_NO_MONSTERS) || (level.flags2 & LEVEL2_NOMONSTERS))) + ((dmflags & DF_NO_MONSTERS) || (flags2 & LEVEL2_NOMONSTERS))) return false; if (tid == 0) @@ -297,7 +291,7 @@ bool P_Thing_Projectile (int tid, AActor *source, int type, const char *type_nam } while (spot != NULL) { - FActorIterator tit (dest); + auto tit = GetActorIterator(dest); if (dest == 0 || (targ = tit.Next())) { @@ -316,7 +310,7 @@ bool P_Thing_Projectile (int tid, AActor *source, int type, const char *type_nam { z -= spot->Floorclip; } - mobj = Spawn (kind, spot->PosAtZ(z), ALLOW_REPLACE); + mobj = Spawn (spot->Level, kind, spot->PosAtZ(z), ALLOW_REPLACE); if (mobj) { @@ -394,9 +388,9 @@ bool P_Thing_Projectile (int tid, AActor *source, int type, const char *type_nam return rtn != 0; } -int P_Thing_Damage (int tid, AActor *whofor0, int amount, FName type) +int FLevelLocals::EV_Thing_Damage (int tid, AActor *whofor0, int amount, FName type) { - FActorIterator iterator (tid); + auto iterator = GetActorIterator(tid); int count = 0; AActor *actor; @@ -543,173 +537,6 @@ void P_Thing_SetVelocity(AActor *actor, const DVector3 &vec, bool add, bool setb } } -PClassActor *P_GetSpawnableType(int spawnnum) -{ - if (spawnnum < 0) - { // A named arg from a UDMF map - FName spawnname = FName(ENamedName(-spawnnum)); - if (spawnname.IsValidName()) - { - return PClass::FindActor(spawnname); - } - } - else - { // A numbered arg from a Hexen or UDMF map - PClassActor **type = SpawnableThings.CheckKey(spawnnum); - if (type != NULL) - { - return *type; - } - } - return NULL; -} - -struct MapinfoSpawnItem -{ - FName classname; // DECORATE is read after MAPINFO so we do not have the actual classes available here yet. - // These are for error reporting. We must store the file information because it's no longer available when these items get resolved. - FString filename; - int linenum; -}; - -typedef TMap SpawnMap; -static SpawnMap SpawnablesFromMapinfo; -static SpawnMap ConversationIDsFromMapinfo; - -static int SpawnableSort(const void *a, const void *b) -{ - return (*((FClassMap::Pair **)a))->Key - (*((FClassMap::Pair **)b))->Key; -} - -static void DumpClassMap(FClassMap &themap) -{ - FClassMap::Iterator it(themap); - FClassMap::Pair *pair; - TArray allpairs(themap.CountUsed(), true); - int i = 0; - - // Sort into numerical order, since their arrangement in the map can - // be in an unspecified order. - while (it.NextPair(pair)) - { - allpairs[i++] = pair; - } - qsort(allpairs.Data(), i, sizeof(allpairs[0]), SpawnableSort); - for (int j = 0; j < i; ++j) - { - pair = allpairs[j]; - Printf ("%d %s\n", pair->Key, pair->Value->TypeName.GetChars()); - } -} - -CCMD(dumpspawnables) -{ - DumpClassMap(SpawnableThings); -} - -CCMD (dumpconversationids) -{ - DumpClassMap(StrifeTypes); -} - - -static void ParseSpawnMap(FScanner &sc, SpawnMap & themap, const char *descript) -{ - TMap defined; - int error = 0; - - MapinfoSpawnItem editem; - - editem.filename = sc.ScriptName; - - while (true) - { - if (sc.CheckString("}")) return; - else if (sc.CheckNumber()) - { - int ednum = sc.Number; - sc.MustGetStringName("="); - sc.MustGetString(); - - bool *def = defined.CheckKey(ednum); - if (def != NULL) - { - sc.ScriptMessage("%s %d defined more than once", descript, ednum); - error++; - } - else if (ednum < 0) - { - sc.ScriptMessage("%s must be positive, got %d", descript, ednum); - error++; - } - defined[ednum] = true; - editem.classname = sc.String; - editem.linenum = sc.Line; - - themap.Insert(ednum, editem); - } - else - { - sc.ScriptError("Number expected"); - } - } - if (error > 0) - { - sc.ScriptError("%d errors encountered in %s definition", error, descript); - } -} - -void FMapInfoParser::ParseSpawnNums() -{ - ParseOpenBrace(); - ParseSpawnMap(sc, SpawnablesFromMapinfo, "Spawn number"); -} - -void FMapInfoParser::ParseConversationIDs() -{ - ParseOpenBrace(); - ParseSpawnMap(sc, ConversationIDsFromMapinfo, "Conversation ID"); -} - - -void InitClassMap(FClassMap &themap, SpawnMap &thedata) -{ - themap.Clear(); - SpawnMap::Iterator it(thedata); - SpawnMap::Pair *pair; - int error = 0; - - while (it.NextPair(pair)) - { - PClassActor *cls = NULL; - if (pair->Value.classname != NAME_None) - { - cls = PClass::FindActor(pair->Value.classname); - if (cls == NULL) - { - Printf(TEXTCOLOR_RED "Script error, \"%s\" line %d:\nUnknown actor class %s\n", - pair->Value.filename.GetChars(), pair->Value.linenum, pair->Value.classname.GetChars()); - error++; - } - themap.Insert(pair->Key, cls); - } - else - { - themap.Remove(pair->Key); - } - } - if (error > 0) - { - I_Error("%d unknown actor classes found", error); - } - thedata.Clear(); // we do not need this any longer -} - -void InitSpawnablesFromMapinfo() -{ - InitClassMap(SpawnableThings, SpawnablesFromMapinfo); - InitClassMap(StrifeTypes, ConversationIDsFromMapinfo); -} int P_Thing_CheckInputNum(player_t *p, int inputnum) { int renum = 0; @@ -754,7 +581,7 @@ int P_Thing_CheckProximity(AActor *self, PClass *classname, double distance, int const bool ptrWillChange = !!(flags & (CPXF_SETTARGET | CPXF_SETMASTER | CPXF_SETTRACER)); const bool ptrDistPref = !!(flags & (CPXF_CLOSEST | CPXF_FARTHEST)); - TThinkerIterator it; + auto it = self->Level->GetThinkerIterator(); AActor *mo, *dist = nullptr; // [MC] Process of elimination, I think, will get through this as quickly and @@ -876,6 +703,7 @@ int P_Thing_Warp(AActor *caller, AActor *reference, double xofs, double yofs, do } DVector3 old = caller->Pos(); + auto Level = caller->Level; int oldpgroup = caller->Sector->PortalGroup; zofs += reference->Height * heightoffset; @@ -957,15 +785,15 @@ int P_Thing_Warp(AActor *caller, AActor *reference, double xofs, double yofs, do if (flags & WARPF_WARPINTERPOLATION) { // This just translates the movement but doesn't change the vector - DVector3 displacedold = old + level.Displacements.getOffset(oldpgroup, caller->Sector->PortalGroup); + DVector3 displacedold = old + Level->Displacements.getOffset(oldpgroup, caller->Sector->PortalGroup); caller->Prev += caller->Pos() - displacedold; caller->PrevPortalGroup = caller->Sector->PortalGroup; } else if (flags & WARPF_COPYINTERPOLATION) { // Map both positions of the reference actor to the current portal group - DVector3 displacedold = old + level.Displacements.getOffset(reference->PrevPortalGroup, caller->Sector->PortalGroup); - DVector3 displacedref = old + level.Displacements.getOffset(reference->Sector->PortalGroup, caller->Sector->PortalGroup); + DVector3 displacedold = old + Level->Displacements.getOffset(reference->PrevPortalGroup, caller->Sector->PortalGroup); + DVector3 displacedref = old + Level->Displacements.getOffset(reference->Sector->PortalGroup, caller->Sector->PortalGroup); caller->Prev = caller->Pos() + displacedold - displacedref; caller->PrevPortalGroup = caller->Sector->PortalGroup; } diff --git a/src/p_tick.cpp b/src/p_tick.cpp index e4cc536cfd..0407ba81b0 100644 --- a/src/p_tick.cpp +++ b/src/p_tick.cpp @@ -37,8 +37,10 @@ #include "g_levellocals.h" #include "events.h" #include "actorinlines.h" +#include "g_game.h" extern gamestate_t wipegamestate; +extern uint8_t globalfreeze, globalchangefreeze; //========================================================================== // @@ -62,7 +64,8 @@ bool P_CheckTickerPaused () && players[consoleplayer].viewz != NO_VALUE && wipegamestate == gamestate) { - S_PauseSound (!(level.flags2 & LEVEL2_PAUSE_MUSIC_IN_MENUS), false); + // Only the current UI level's settings are relevant for sound. + S_PauseSound (!(primaryLevel->flags2 & LEVEL2_PAUSE_MUSIC_IN_MENUS), false); return true; } return false; @@ -75,7 +78,10 @@ void P_Ticker (void) { int i; - interpolator.UpdateInterpolations (); + for (auto Level : AllLevels()) + { + Level->interpolator.UpdateInterpolations(); + } r_NoInterpolate = true; if (!demoplayback) @@ -92,12 +98,17 @@ void P_Ticker (void) DPSprite::NewTick(); // [RH] Frozen mode is only changed every 4 tics, to make it work with A_Tracer(). - if ((level.time & 3) == 0) + // This may not be perfect but it is not really relevant for sublevels that tracer homing behavior is preserved. + if ((primaryLevel->maptime & 3) == 0) { - if (bglobal.changefreeze) + if (globalchangefreeze) { - bglobal.freeze ^= 1; - bglobal.changefreeze = 0; + globalfreeze ^= 1; + globalchangefreeze = 0; + for (auto Level : AllLevels()) + { + Level->frozenstate = (Level->frozenstate & ~2) | (2 * globalfreeze); + } } } @@ -116,40 +127,43 @@ void P_Ticker (void) P_ResetSightCounters (false); R_ClearInterpolationPath(); - // Reset all actor interpolations for all actors before the current thinking turn so that indirect actor movement gets properly interpolated. - TThinkerIterator it; - AActor *ac; - - while ((ac = it.Next())) - { - ac->ClearInterpolation(); - } - // Since things will be moving, it's okay to interpolate them in the renderer. r_NoInterpolate = false; - P_ThinkParticles(); // [RH] make the particles think - - for (i = 0; iCallTick (); // [RH] moved this here - level.Tick (); // [RH] let the level tick - DThinker::RunThinkers (); - - //if added by MC: Freeze mode. - if (!bglobal.freeze && !(level.flags2 & LEVEL2_FROZEN)) + // Reset all actor interpolations on all levels before the current thinking turn so that indirect actor movement gets properly interpolated. + for (auto Level : AllLevels()) { - P_UpdateSpecials (); - P_RunEffects (); // [RH] Run particle effects - } + // todo: set up a sandbox for secondary levels here. - // for par times - level.time++; - level.maptime++; - level.totaltime++; + auto it = Level->GetThinkerIterator(); + AActor *ac; + + while ((ac = it.Next())) + { + ac->ClearInterpolation(); + } + P_ThinkParticles(Level); // [RH] make the particles think + + for (i = 0; i < MAXPLAYERS; i++) + if (Level->PlayerInGame(i)) + P_PlayerThink(Level->Players[i]); + + // [ZZ] call the WorldTick hook + Level->localEventManager->WorldTick(); + Level->Tick(); // [RH] let the level tick + Level->Thinkers.RunThinkers(Level); + + //if added by MC: Freeze mode. + if (!Level->isFrozen()) + { + P_UpdateSpecials(Level); + P_RunEffects(Level); // [RH] Run particle effects + } + + // for par times + Level->time++; + Level->maptime++; + Level->totaltime++; + } + StatusBar->CallTick(); // Status bar should tick AFTER the thinkers to properly reflect the level's state at this time. } diff --git a/src/p_usdf.cpp b/src/p_usdf.cpp index 9520c869cf..cf579e790d 100644 --- a/src/p_usdf.cpp +++ b/src/p_usdf.cpp @@ -40,12 +40,15 @@ #include "actor.h" #include "a_pickups.h" #include "w_wad.h" +#include "g_levellocals.h" #define Zd 1 #define St 2 class USDFParser : public UDMFParserBase { + FLevelLocals *Level; + //=========================================================================== // // Checks an actor type (different representation depending on namespace) @@ -300,7 +303,7 @@ class USDFParser : public UDMFParserBase FStrifeDialogueNode *node = new FStrifeDialogueNode; FStrifeDialogueReply **replyptr = &node->Children; - node->ThisNodeNum = StrifeDialogues.Push(node); + node->ThisNodeNum = Level->StrifeDialogues.Push(node); node->ItemCheckNode = -1; FString SpeakerName; @@ -403,7 +406,7 @@ class USDFParser : public UDMFParserBase PClassActor *type = nullptr; int dlgid = -1; FName clsid = NAME_None; - unsigned int startpos = StrifeDialogues.Size(); + unsigned int startpos = Level->StrifeDialogues.Size(); while (!sc.CheckToken('}')) { @@ -455,11 +458,11 @@ class USDFParser : public UDMFParserBase sc.ScriptMessage("No valid actor type defined in conversation."); return false; } - SetConversation(dlgid, type, startpos); - for(;startpos < StrifeDialogues.Size(); startpos++) + Level->SetConversation(dlgid, type, startpos); + for(;startpos < Level->StrifeDialogues.Size(); startpos++) { - StrifeDialogues[startpos]->SpeakerType = type; - StrifeDialogues[startpos]->MenuClassName = clsid; + Level->StrifeDialogues[startpos]->SpeakerType = type; + Level->StrifeDialogues[startpos]->MenuClassName = clsid; } return true; } @@ -471,8 +474,9 @@ class USDFParser : public UDMFParserBase //=========================================================================== public: - bool Parse(int lumpnum, FileReader &lump, int lumplen) + bool Parse(FLevelLocals *l, int lumpnum, FileReader &lump, int lumplen) { + Level = l; sc.OpenMem(Wads.GetLumpFullName(lumpnum), lump.Read(lumplen)); sc.SetCMode(true); // Namespace must be the first field because everything else depends on it. @@ -512,7 +516,7 @@ public: { sc.MustGetToken('='); sc.MustGetToken(TK_StringConst); - LoadScriptFile(sc.String, true); + LoadScriptFile(Level, sc.String, true); sc.MustGetToken(';'); } else @@ -526,13 +530,13 @@ public: -bool P_ParseUSDF(int lumpnum, FileReader &lump, int lumplen) +bool P_ParseUSDF(FLevelLocals *l, int lumpnum, FileReader &lump, int lumplen) { USDFParser parse; try { - if (!parse.Parse(lumpnum, lump, lumplen)) + if (!parse.Parse(l, lumpnum, lump, lumplen)) { // clean up the incomplete dialogue structures here return false; diff --git a/src/p_user.cpp b/src/p_user.cpp index 6b3e408fd3..6fd7070ec6 100644 --- a/src/p_user.cpp +++ b/src/p_user.cpp @@ -89,6 +89,8 @@ #include "actorinlines.h" #include "p_acs.h" #include "events.h" +#include "g_game.h" +#include "v_video.h" #include "gstrings.h" static FRandom pr_skullpop ("SkullPop"); @@ -238,46 +240,6 @@ void SetupPlayerClasses () } } -CCMD (clearplayerclasses) -{ - if (ParsingKeyConf) - { - PlayerClasses.Clear (); - } -} - -CCMD (addplayerclass) -{ - if (ParsingKeyConf && argv.argc () > 1) - { - PClassActor *ti = PClass::FindActor(argv[1]); - - if (ValidatePlayerClass(ti, argv[1])) - { - FPlayerClass newclass; - - newclass.Type = ti; - newclass.Flags = 0; - - int arg = 2; - while (arg < argv.argc()) - { - if (!stricmp (argv[arg], "nomenu")) - { - newclass.Flags |= PCF_NOMENU; - } - else - { - Printf ("Unknown flag '%s' for player class '%s'\n", argv[arg], argv[1]); - } - - arg++; - } - PlayerClasses.Push (newclass); - } - } -} - CCMD (playerclasses) { for (unsigned int i = 0; i < PlayerClasses.Size (); i++) @@ -438,11 +400,11 @@ void player_t::SetLogText (const char *text) { LogText = text; - if (mo->CheckLocalView(consoleplayer)) + if (mo && mo->CheckLocalView()) { // Print log text to console AddToConsole(-1, TEXTCOLOR_GOLD); - AddToConsole(-1, GStrings(text[0] == '$' ? text + 1 : text)); + AddToConsole(-1, LogText[0] == '$'? GStrings(text+1) : text ); AddToConsole(-1, "\n"); } } @@ -675,9 +637,10 @@ bool player_t::Resurrect() mo->special1 = 0; // required for the Hexen fighter's fist attack. // This gets set by AActor::Die as flag for the wimpy death and must be reset here. mo->SetState(mo->SpawnState); + int pnum = mo->Level->PlayerNum(this); if (!(mo->flags2 & MF2_DONTTRANSLATE)) { - mo->Translation = TRANSLATION(TRANSLATION_Players, uint8_t(this - players)); + mo->Translation = TRANSLATION(TRANSLATION_Players, uint8_t(pnum)); } if (ReadyWeapon != nullptr) { @@ -692,9 +655,8 @@ bool player_t::Resurrect() // player is now alive. // fire E_PlayerRespawned and start the ACS SCRIPT_Respawn. - E_PlayerRespawned(int(this - players)); - // - level.Behaviors.StartTypedScripts(SCRIPT_Respawn, mo, true); + mo->Level->localEventManager->PlayerRespawned(pnum); + mo->Level->Behaviors.StartTypedScripts(SCRIPT_Respawn, mo, true); return true; } @@ -891,7 +853,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_PlayerScream) } // Handle the different player death screams - if ((((level.flags >> 15) | (dmflags)) & + if ((((self->Level->flags >> 15) | (dmflags)) & (DF_FORCE_FALLINGZD | DF_FORCE_FALLINGHX)) && self->Vel.Z <= -39) { @@ -994,8 +956,8 @@ void P_CheckPlayerSprite(AActor *actor, int &spritenum, DVector2 &scale) CUSTOM_CVAR (Float, sv_aircontrol, 0.00390625f, CVAR_SERVERINFO|CVAR_NOSAVE) { - level.aircontrol = self; - G_AirControlChanged (); + primaryLevel->aircontrol = self; + primaryLevel->AirControlChanged (); } //========================================================================== @@ -1010,7 +972,7 @@ void P_FallingDamage (AActor *actor) int damage; double vel; - damagestyle = ((level.flags >> 15) | (dmflags)) & + damagestyle = ((actor->Level->flags >> 15) | (dmflags)) & (DF_FORCE_FALLINGZD | DF_FORCE_FALLINGHX); if (damagestyle == 0) @@ -1107,11 +1069,11 @@ void P_CheckMusicChange(player_t *player) { if (--player->MUSINFOtics < 0) { - if (player - players == consoleplayer) + if (player == player->mo->Level->GetConsolePlayer()) { if (player->MUSINFOactor->args[0] != 0) { - FName *music = level.info->MusicMap.CheckKey(player->MUSINFOactor->args[0]); + FName *music = player->MUSINFOactor->Level->info->MusicMap.CheckKey(player->MUSINFOactor->args[0]); if (music != NULL) { @@ -1123,7 +1085,7 @@ void P_CheckMusicChange(player_t *player) S_ChangeMusic("*"); } } - DPrintf(DMSG_NOTIFY, "MUSINFO change for player %d to %d\n", (int)(player - players), player->MUSINFOactor->args[0]); + DPrintf(DMSG_NOTIFY, "MUSINFO change for player %d to %d\n", (int)player->mo->Level->PlayerNum(player), player->MUSINFOactor->args[0]); } } } @@ -1220,6 +1182,12 @@ void P_PlayerThink (player_t *player) I_Error ("No player %td start\n", player - players + 1); } + // Bots do not think in freeze mode. + if (player->mo->Level->isFrozen() && player->Bot != nullptr) + { + return; + } + if (debugfile && !(player->cheats & CF_PREDICTING)) { fprintf (debugfile, "tic %d for pl %d: (%f, %f, %f, %f) b:%02x p:%d y:%d f:%d s:%d u:%d\n", @@ -1249,7 +1217,6 @@ void P_PredictionLerpReset() bool P_LerpCalculate(AActor *pmo, PredictPos from, PredictPos to, PredictPos &result, float scale) { - //DVector2 pfrom = level.Displacements.getOffset(from.portalgroup, to.portalgroup); DVector3 vecFrom = from.pos; DVector3 vecTo = to.pos; DVector3 vecResult; @@ -1259,7 +1226,6 @@ bool P_LerpCalculate(AActor *pmo, PredictPos from, PredictPos to, PredictPos &re DVector3 delta = vecResult - vecTo; result.pos = pmo->Vec3Offset(vecResult - to.pos); - //result.portalgroup = P_PointInSector(result.pos.x, result.pos.y)->PortalGroup; // As a fail safe, assume extrapolation is the threshold. return (delta.LengthSquared() > cl_predict_lerpthreshold && scale <= 1.00f); @@ -1367,7 +1333,7 @@ void P_PredictPlayer (player_t *player) singletics || demoplayback || player->mo == NULL || - player != &players[consoleplayer] || + player != player->mo->Level->GetConsolePlayer() || player->playerstate != PST_LIVE || !netgame || /*player->morphTics ||*/ @@ -1684,7 +1650,7 @@ bool P_IsPlayerTotallyFrozen(const player_t *player) return gamestate == GS_TITLELEVEL || player->cheats & CF_TOTALLYFROZEN || - ((level.flags2 & LEVEL2_FROZEN) && player->timefreezer == 0); + player->mo->isFrozen(); } diff --git a/src/posix/cocoa/i_input.mm b/src/posix/cocoa/i_input.mm index 87abe4298e..7ae2050b49 100644 --- a/src/posix/cocoa/i_input.mm +++ b/src/posix/cocoa/i_input.mm @@ -45,6 +45,8 @@ #include "doomstat.h" #include "v_video.h" #include "events.h" +#include "g_game.h" +#include "g_levellocals.h" EXTERN_CVAR(Int, m_use_mouse) @@ -91,7 +93,7 @@ void CheckGUICapture() : (MENU_On == menuactive || MENU_OnNoPause == menuactive); // [ZZ] check active event handlers that want the UI processing - if (!wantCapture && E_CheckUiProcessors()) + if (!wantCapture && primaryLevel->localEventManager->CheckUiProcessors()) { wantCapture = true; } @@ -196,7 +198,7 @@ void CheckNativeMouse() && (MENU_On == menuactive || MENU_OnNoPause == menuactive); } - if (!wantNative && E_CheckRequireMouse()) + if (!wantNative && primaryLevel->localEventManager->CheckRequireMouse()) wantNative = true; I_SetNativeMouse(wantNative); diff --git a/src/posix/cocoa/i_main.mm b/src/posix/cocoa/i_main.mm index 9fe38947b4..7f823b628c 100644 --- a/src/posix/cocoa/i_main.mm +++ b/src/posix/cocoa/i_main.mm @@ -44,6 +44,7 @@ #include "m_argv.h" #include "st_console.h" #include "version.h" +#include "doomerrors.h" #define ZD_UNUSED(VARIABLE) ((void)(VARIABLE)) diff --git a/src/posix/cocoa/i_video.mm b/src/posix/cocoa/i_video.mm index 0746056daf..0c1abb8838 100644 --- a/src/posix/cocoa/i_video.mm +++ b/src/posix/cocoa/i_video.mm @@ -39,6 +39,7 @@ #include "c_dispatch.h" #include "doomstat.h" #include "hardware.h" +#include "i_system.h" #include "m_argv.h" #include "m_png.h" #include "r_renderer.h" @@ -46,6 +47,7 @@ #include "st_console.h" #include "v_text.h" #include "version.h" +#include "doomerrors.h" #include "gl/renderer/gl_renderer.h" #include "gl/system/gl_framebuffer.h" diff --git a/src/posix/i_system.h b/src/posix/i_system.h index 1ff06a79e8..7e68378241 100644 --- a/src/posix/i_system.h +++ b/src/posix/i_system.h @@ -99,9 +99,6 @@ void I_Quit (void); void I_Tactile (int on, int off, int total); -void I_Error (const char *error, ...) GCCPRINTF(1,2); -void I_FatalError (const char *error, ...) GCCPRINTF(1,2); - void addterm (void (*func)(void), const char *name); #define atterm(t) addterm (t, #t) void popterm (); diff --git a/src/posix/sdl/critsec.cpp b/src/posix/sdl/critsec.cpp index 04aa4aa9d5..03a6202b9c 100644 --- a/src/posix/sdl/critsec.cpp +++ b/src/posix/sdl/critsec.cpp @@ -36,6 +36,7 @@ #include "SDL.h" #include "i_system.h" +#include "doomerrors.h" class FInternalCriticalSection { diff --git a/src/posix/sdl/hardware.cpp b/src/posix/sdl/hardware.cpp index faf1b49882..61d36abf0c 100644 --- a/src/posix/sdl/hardware.cpp +++ b/src/posix/sdl/hardware.cpp @@ -35,11 +35,13 @@ #include #include +#include "i_system.h" #include "hardware.h" #include "c_dispatch.h" #include "v_text.h" #include "doomstat.h" #include "m_argv.h" +#include "doomerrors.h" #include "swrenderer/r_swrenderer.h" IVideo *Video; diff --git a/src/posix/sdl/i_input.cpp b/src/posix/sdl/i_input.cpp index cc40b4fde3..61a1fe0bef 100644 --- a/src/posix/sdl/i_input.cpp +++ b/src/posix/sdl/i_input.cpp @@ -44,6 +44,9 @@ #include "c_dispatch.h" #include "dikeys.h" #include "events.h" +#include "g_game.h" +#include "g_levellocals.h" + static void I_CheckGUICapture (); static void I_CheckNativeMouse (); @@ -179,7 +182,7 @@ static void I_CheckGUICapture () } // [ZZ] check active event handlers that want the UI processing - if (!wantCapt && E_CheckUiProcessors()) + if (!wantCapt && primaryLevel->localEventManager->CheckUiProcessors()) wantCapt = true; if (wantCapt != GUICapture) diff --git a/src/posix/sdl/i_main.cpp b/src/posix/sdl/i_main.cpp index 3d7912fc8b..caddfcf870 100644 --- a/src/posix/sdl/i_main.cpp +++ b/src/posix/sdl/i_main.cpp @@ -53,6 +53,9 @@ #include "r_utility.h" #include "doomstat.h" #include "vm.h" +#include "doomerrors.h" +#include "i_system.h" +#include "g_game.h" // MACROS ------------------------------------------------------------------ @@ -162,7 +165,7 @@ static int DoomSpecificInfo (char *buffer, char *end) } else { - p += snprintf (buffer+p, size-p, "\n\nCurrent map: %s", level.MapName.GetChars()); + p += snprintf (buffer+p, size-p, "\n\nCurrent map: %s", primaryLevel->MapName.GetChars()); if (!viewactive) { diff --git a/src/posix/sdl/i_system.cpp b/src/posix/sdl/i_system.cpp index 8b73d2f141..9303fc6eb8 100644 --- a/src/posix/sdl/i_system.cpp +++ b/src/posix/sdl/i_system.cpp @@ -19,7 +19,9 @@ //----------------------------------------------------------------------------- // +#include "i_system.h" +#include #include #include #include diff --git a/src/posix/unix/i_specialpaths.cpp b/src/posix/unix/i_specialpaths.cpp index 60cc12fcf8..b6cba526ac 100644 --- a/src/posix/unix/i_specialpaths.cpp +++ b/src/posix/unix/i_specialpaths.cpp @@ -37,6 +37,7 @@ #include #include "i_system.h" #include "cmdlib.h" +#include "doomerrors.h" #include "version.h" // for GAMENAME diff --git a/src/r_data/a_dynlightdata.cpp b/src/r_data/a_dynlightdata.cpp index acddbe906a..1d8564a453 100644 --- a/src/r_data/a_dynlightdata.cpp +++ b/src/r_data/a_dynlightdata.cpp @@ -46,7 +46,7 @@ inline PClassActor * GetRealType(PClassActor * ti) { - PClassActor *rep = ti->GetReplacement(false); + PClassActor *rep = ti->GetReplacement(nullptr, false); if (rep != ti && rep != NULL && rep->IsDescendantOf(NAME_DehackedPickup)) { return rep; @@ -55,6 +55,7 @@ inline PClassActor * GetRealType(PClassActor * ti) } TDeletingArray LightDefaults; +int AttenuationIsSet = -1; //----------------------------------------------------------------------------- // @@ -89,7 +90,7 @@ void FLightDefaults::ApplyProperties(FDynamicLight * light) const { float pulseTime = float(m_Param / TICRATE); - light->m_lastUpdate = level.maptime; + light->m_lastUpdate = light->Level->maptime; if (m_swapped) light->m_cycler.SetParams(float(m_Args[LIGHT_SECONDARY_INTENSITY]), float(m_Args[LIGHT_INTENSITY]), pulseTime, oldtype == PulseLight); else light->m_cycler.SetParams(float(m_Args[LIGHT_INTENSITY]), float(m_Args[LIGHT_SECONDARY_INTENSITY]), pulseTime, oldtype == PulseLight); light->m_cycler.ShouldCycle(true); @@ -101,14 +102,18 @@ void FLightDefaults::ApplyProperties(FDynamicLight * light) const light->SetOffset(m_Pos); // this must be the last thing to do. } -void FLightDefaults::SetAttenuationForLevel() +void FLightDefaults::SetAttenuationForLevel(bool yes) { - for (auto ldef : LightDefaults) + if (AttenuationIsSet != int(yes)) { - if (ldef->m_attenuate == -1) + for (auto ldef : LightDefaults) { - if (level.flags3 & LEVEL3_ATTENUATE) ldef->m_lightFlags |= LF_ATTENUATE; else ldef->m_lightFlags &= ~LF_ATTENUATE; + if (ldef->m_attenuate == -1) + { + if (yes) ldef->m_lightFlags |= LF_ATTENUATE; else ldef->m_lightFlags &= ~LF_ATTENUATE; + } } + AttenuationIsSet = yes; } } diff --git a/src/r_data/colormaps.cpp b/src/r_data/colormaps.cpp index d8feac7c71..5c5ed6a3b2 100644 --- a/src/r_data/colormaps.cpp +++ b/src/r_data/colormaps.cpp @@ -38,7 +38,7 @@ #include #include -#include "i_system.h" + #include "w_wad.h" #include "r_sky.h" #include "colormaps.h" diff --git a/src/r_data/gldefs.cpp b/src/r_data/gldefs.cpp index 054e299cde..be4645699b 100644 --- a/src/r_data/gldefs.cpp +++ b/src/r_data/gldefs.cpp @@ -33,7 +33,7 @@ ** */ #include -#include "i_system.h" + #include "sc_man.h" #include "templates.h" #include "w_wad.h" @@ -43,6 +43,7 @@ #include "v_text.h" #include "g_levellocals.h" #include "a_dynlight.h" +#include "v_video.h" #include "textures/skyboxtexture.h" #include "hwrenderer/postprocessing/hw_postprocessshader.h" #include "hwrenderer/textures/hw_material.h" @@ -53,6 +54,7 @@ void InitializeActorLights(TArray &LightAssociations); TArray usershaders; extern TDeletingArray LightDefaults; +extern int AttenuationIsSet; //----------------------------------------------------------------------------- @@ -1777,6 +1779,7 @@ void ParseGLDefs() const char *defsLump = NULL; LightDefaults.DeleteAndClear(); + AttenuationIsSet = -1; //gl_DestroyUserShaders(); function says 'todo' switch (gameinfo.gametype) { diff --git a/src/r_data/models/models.cpp b/src/r_data/models/models.cpp index f8eb8cf9be..1779d2d948 100644 --- a/src/r_data/models/models.cpp +++ b/src/r_data/models/models.cpp @@ -167,13 +167,13 @@ void FModelRenderer::RenderModel(float x, float y, float z, FSpriteModelFrame *s objectToWorldMatrix.rotate(-smf->rolloffset, 1, 0, 0); // consider the pixel stretching. For non-voxels this must be factored out here - float stretch = (smf->modelIDs[0] != -1 ? Models[smf->modelIDs[0]]->getAspectFactor() : 1.f) / level.info->pixelstretch; + float stretch = (smf->modelIDs[0] != -1 ? Models[smf->modelIDs[0]]->getAspectFactor(actor->Level) : 1.f) / actor->Level->info->pixelstretch; objectToWorldMatrix.scale(1, stretch, 1); float orientation = scaleFactorX * scaleFactorY * scaleFactorZ; BeginDrawModel(actor, smf, objectToWorldMatrix, orientation < 0); - RenderFrameModels(smf, actor->state, actor->tics, actor->GetClass(), translation); + RenderFrameModels(actor->Level, smf, actor->state, actor->tics, actor->GetClass(), translation); EndDrawModel(actor, smf); } @@ -211,11 +211,11 @@ void FModelRenderer::RenderHUDModel(DPSprite *psp, float ofsX, float ofsY) float orientation = smf->xscale * smf->yscale * smf->zscale; BeginDrawHUDModel(playermo, objectToWorldMatrix, orientation < 0); - RenderFrameModels(smf, psp->GetState(), psp->GetTics(), playermo->player->ReadyWeapon->GetClass(), 0); + RenderFrameModels(playermo->Level, smf, psp->GetState(), psp->GetTics(), playermo->player->ReadyWeapon->GetClass(), 0); EndDrawHUDModel(playermo); } -void FModelRenderer::RenderFrameModels(const FSpriteModelFrame *smf, const FState *curState, const int curTics, const PClass *ti, int translation) +void FModelRenderer::RenderFrameModels(FLevelLocals *Level, const FSpriteModelFrame *smf, const FState *curState, const int curTics, const PClass *ti, int translation) { // [BB] Frame interpolation: Find the FSpriteModelFrame smfNext which follows after smf in the animation // and the scalar value inter ( element of [0,1) ), both necessary to determine the interpolated frame. @@ -229,7 +229,7 @@ void FModelRenderer::RenderFrameModels(const FSpriteModelFrame *smf, const FStat // [BB] To interpolate at more than 35 fps we take tic fractions into account. float ticFraction = 0.; // [BB] In case the tic counter is frozen we have to leave ticFraction at zero. - if (ConsoleState == c_up && menuactive != MENU_On && !(level.flags2 & LEVEL2_FROZEN)) + if (ConsoleState == c_up && menuactive != MENU_On && !Level->isFrozen()) { ticFraction = I_GetTimeFrac(); } diff --git a/src/r_data/models/models.h b/src/r_data/models/models.h index 6a286dc92b..ba09203904 100644 --- a/src/r_data/models/models.h +++ b/src/r_data/models/models.h @@ -46,6 +46,7 @@ FTextureID LoadSkin(const char * path, const char * fn); struct FSpriteModelFrame; class IModelVertexBuffer; +struct FLevelLocals; enum ModelRendererType { @@ -81,7 +82,7 @@ public: virtual void DrawElements(int numIndices, size_t offset) = 0; private: - void RenderFrameModels(const FSpriteModelFrame *smf, const FState *curState, const int curTics, const PClass *ti, int translation); + void RenderFrameModels(FLevelLocals *Level, const FSpriteModelFrame *smf, const FState *curState, const int curTics, const PClass *ti, int translation); }; struct FModelVertex @@ -138,7 +139,7 @@ public: virtual void RenderFrame(FModelRenderer *renderer, FTexture * skin, int frame, int frame2, double inter, int translation=0) = 0; virtual void BuildVertexBuffer(FModelRenderer *renderer) = 0; virtual void AddSkins(uint8_t *hitlist) = 0; - virtual float getAspectFactor() { return 1.f; } + virtual float getAspectFactor(FLevelLocals *) { return 1.f; } void SetVertexBuffer(FModelRenderer *renderer, IModelVertexBuffer *buffer) { mVBuf[renderer->GetType()] = buffer; } IModelVertexBuffer *GetVertexBuffer(FModelRenderer *renderer) const { return mVBuf[renderer->GetType()]; } @@ -407,7 +408,7 @@ public: virtual void AddSkins(uint8_t *hitlist); FTextureID GetPaletteTexture() const { return mPalette; } void BuildVertexBuffer(FModelRenderer *renderer); - float getAspectFactor(); + float getAspectFactor(FLevelLocals *) override; }; @@ -502,12 +503,12 @@ void BSPNodeWalkCircle(void *node, float x, float y, float radiusSquared, const // Search BSP for subsectors within the given radius and call callback(subsector) for each found template -void BSPWalkCircle(float x, float y, float radiusSquared, const Callback &callback) +void BSPWalkCircle(FLevelLocals *Level, float x, float y, float radiusSquared, const Callback &callback) { - if (level.nodes.Size() == 0) - callback(&level.subsectors[0]); + if (Level->nodes.Size() == 0) + callback(&Level->subsectors[0]); else - BSPNodeWalkCircle(level.HeadNode(), x, y, radiusSquared, callback); + BSPNodeWalkCircle(Level->HeadNode(), x, y, radiusSquared, callback); } #endif diff --git a/src/r_data/models/models_voxel.cpp b/src/r_data/models/models_voxel.cpp index 9a01b6487d..b0acb941c2 100644 --- a/src/r_data/models/models_voxel.cpp +++ b/src/r_data/models/models_voxel.cpp @@ -383,9 +383,9 @@ int FVoxelModel::FindFrame(const char * name) // //=========================================================================== -float FVoxelModel::getAspectFactor() +float FVoxelModel::getAspectFactor(FLevelLocals *Level) { - return level.info->pixelstretch; + return Level->info->pixelstretch; } //=========================================================================== diff --git a/src/r_data/portalgroups.cpp b/src/r_data/portalgroups.cpp index 25bbdd1988..8d682b78e7 100644 --- a/src/r_data/portalgroups.cpp +++ b/src/r_data/portalgroups.cpp @@ -466,40 +466,3 @@ void InitPortalGroups(FLevelLocals *Level) GroupLinePortals(Level); } -CCMD(dumpportals) -{ - auto Level = &level; - for(unsigned i=0;iportalGroups.Size(); i++) - { - auto p = Level->portalGroups[i]; - double xdisp = p->mDisplacement.X; - double ydisp = p->mDisplacement.Y; - Printf(PRINT_LOG, "Portal #%d, %s, displacement = (%f,%f)\n", i, p->plane==0? "floor":"ceiling", - xdisp, ydisp); - Printf(PRINT_LOG, "Coverage:\n"); - for(auto &sub : Level->subsectors) - { - auto port = sub.render_sector->GetPortalGroup(p->plane); - if (port == p) - { - Printf(PRINT_LOG, "\tSubsector %d (%d):\n\t\t", sub.Index(), sub.render_sector->sectornum); - for(unsigned k = 0;k< sub.numlines; k++) - { - Printf(PRINT_LOG, "(%.3f,%.3f), ", sub.firstline[k].v1->fX() + xdisp, sub.firstline[k].v1->fY() + ydisp); - } - Printf(PRINT_LOG, "\n\t\tCovered by subsectors:\n"); - FPortalCoverage *cov = &sub.portalcoverage[p->plane]; - for(int l = 0;l< cov->sscount; l++) - { - subsector_t *csub = &Level->subsectors[cov->subsectors[l]]; - Printf(PRINT_LOG, "\t\t\t%5d (%4d): ", cov->subsectors[l], csub->render_sector->sectornum); - for(unsigned m = 0;m< csub->numlines; m++) - { - Printf(PRINT_LOG, "(%.3f,%.3f), ", csub->firstline[m].v1->fX(), csub->firstline[m].v1->fY()); - } - Printf(PRINT_LOG, "\n"); - } - } - } - } -} diff --git a/src/r_data/r_canvastexture.cpp b/src/r_data/r_canvastexture.cpp index a64f50b874..4a159170f5 100644 --- a/src/r_data/r_canvastexture.cpp +++ b/src/r_data/r_canvastexture.cpp @@ -102,7 +102,7 @@ void SetCameraToTexture(AActor *viewpoint, const FString &texturename, double fo FTexture *tex = TexMan.GetTexture(textureid); if (tex && tex->isCanvas()) { - level.canvasTextureInfo.Add(viewpoint, textureid, fov); + viewpoint->Level->canvasTextureInfo.Add(viewpoint, textureid, fov); } } } diff --git a/src/r_data/r_interpolate.cpp b/src/r_data/r_interpolate.cpp index 70cf093931..aec62630c3 100644 --- a/src/r_data/r_interpolate.cpp +++ b/src/r_data/r_interpolate.cpp @@ -39,6 +39,7 @@ #include "p_local.h" #include "po_man.h" #include "serializer.h" +#include "g_levellocals.h" //========================================================================== // @@ -61,7 +62,7 @@ public: DSectorPlaneInterpolation() {} DSectorPlaneInterpolation(sector_t *sector, bool plane, bool attach); - void OnDestroy() override; + void UnlinkFromMap() override; void UpdateInterpolation(); void Restore(); void Interpolate(double smoothratio); @@ -89,7 +90,7 @@ public: DSectorScrollInterpolation() {} DSectorScrollInterpolation(sector_t *sector, bool plane); - void OnDestroy() override; + void UnlinkFromMap() override; void UpdateInterpolation(); void Restore(); void Interpolate(double smoothratio); @@ -117,7 +118,7 @@ public: DWallScrollInterpolation() {} DWallScrollInterpolation(side_t *side, int part); - void OnDestroy() override; + void UnlinkFromMap() override; void UpdateInterpolation(); void Restore(); void Interpolate(double smoothratio); @@ -144,7 +145,7 @@ public: DPolyobjInterpolation() {} DPolyobjInterpolation(FPolyObj *poly); - void OnDestroy() override; + void UnlinkFromMap() override; void UpdateInterpolation(); void Restore(); void Interpolate(double smoothratio); @@ -171,22 +172,6 @@ IMPLEMENT_CLASS(DSectorScrollInterpolation, false, false) IMPLEMENT_CLASS(DWallScrollInterpolation, false, false) IMPLEMENT_CLASS(DPolyobjInterpolation, false, false) -//========================================================================== -// -// Important note: -// The linked list of interpolations and the pointers in the interpolated -// objects are not processed by the garbage collector. This is intentional! -// -// If an interpolation is no longer owned by any thinker it should -// be destroyed even if the interpolator still has a link to it. -// -// When such an interpolation is destroyed by the garbage collector it -// will automatically be unlinked from the list. -// -//========================================================================== - -FInterpolator interpolator; - //========================================================================== // // @@ -303,33 +288,26 @@ void FInterpolator::ClearInterpolations() { DInterpolation *probe = Head; Head = nullptr; + while (probe != nullptr) { DInterpolation *next = probe->Next; probe->Next = probe->Prev = nullptr; + probe->UnlinkFromMap(); probe->Destroy(); probe = next; } } - -//========================================================================== -// -// -// -//========================================================================== - -//========================================================================== -// -// -// -//========================================================================== - -DInterpolation::DInterpolation() +FSerializer &Serialize(FSerializer &arc, const char *key, FInterpolator &rs, FInterpolator *def) { - Next = nullptr; - Prev = nullptr; - refcount = 0; + if (arc.BeginObject(key)) + { + arc("head", rs.Head) + ("count", rs.count) + .EndObject(); + } + return arc; } //========================================================================== @@ -338,6 +316,12 @@ DInterpolation::DInterpolation() // //========================================================================== +//========================================================================== +// +// +// +//========================================================================== + int DInterpolation::AddRef() { return ++refcount; @@ -352,7 +336,11 @@ int DInterpolation::AddRef() int DInterpolation::DelRef(bool force) { if (refcount > 0) --refcount; - if (force && refcount == 0) Destroy(); + if (force && refcount == 0) + { + UnlinkFromMap(); + Destroy(); + } return refcount; } @@ -362,11 +350,10 @@ int DInterpolation::DelRef(bool force) // //========================================================================== -void DInterpolation::OnDestroy() +void DInterpolation::UnlinkFromMap() { - interpolator.RemoveInterpolation(this); + Level->interpolator.RemoveInterpolation(this); refcount = 0; - Super::OnDestroy(); } //========================================================================== @@ -379,10 +366,7 @@ void DInterpolation::Serialize(FSerializer &arc) { Super::Serialize(arc); arc("refcount", refcount); - if (arc.isReading()) - { - interpolator.AddInterpolation(this); - } + arc("level", Level); } //========================================================================== @@ -398,6 +382,7 @@ void DInterpolation::Serialize(FSerializer &arc) //========================================================================== DSectorPlaneInterpolation::DSectorPlaneInterpolation(sector_t *_sector, bool _plane, bool attach) +: DInterpolation(_sector->Level) { sector = _sector; ceiling = _plane; @@ -408,7 +393,7 @@ DSectorPlaneInterpolation::DSectorPlaneInterpolation(sector_t *_sector, bool _pl P_Start3dMidtexInterpolations(attached, sector, ceiling); P_StartLinkedSectorInterpolations(attached, sector, ceiling); } - interpolator.AddInterpolation(this); + sector->Level->interpolator.AddInterpolation(this); } //========================================================================== @@ -417,7 +402,7 @@ DSectorPlaneInterpolation::DSectorPlaneInterpolation(sector_t *_sector, bool _pl // //========================================================================== -void DSectorPlaneInterpolation::OnDestroy() +void DSectorPlaneInterpolation::UnlinkFromMap() { if (sector != nullptr) { @@ -431,11 +416,11 @@ void DSectorPlaneInterpolation::OnDestroy() } sector = nullptr; } - for(unsigned i=0; iDelRef(); } - Super::OnDestroy(); + attached.Reset(); } //========================================================================== @@ -513,7 +498,7 @@ void DSectorPlaneInterpolation::Interpolate(double smoothratio) { pplane->setD(oldheight + (bakheight - oldheight) * smoothratio); sector->SetPlaneTexZ(pos, oldtexz + (baktexz - oldtexz) * smoothratio, true); - P_RecalculateAttached3DFloors(sector); + P_RecalculateAttached3DFloors(sector); sector->CheckPortalPlane(pos); } } @@ -563,11 +548,12 @@ size_t DSectorPlaneInterpolation::PropagateMark() //========================================================================== DSectorScrollInterpolation::DSectorScrollInterpolation(sector_t *_sector, bool _plane) +: DInterpolation(_sector->Level) { sector = _sector; ceiling = _plane; UpdateInterpolation (); - interpolator.AddInterpolation(this); + sector->Level->interpolator.AddInterpolation(this); } //========================================================================== @@ -576,7 +562,7 @@ DSectorScrollInterpolation::DSectorScrollInterpolation(sector_t *_sector, bool _ // //========================================================================== -void DSectorScrollInterpolation::OnDestroy() +void DSectorScrollInterpolation::UnlinkFromMap() { if (sector != nullptr) { @@ -590,7 +576,6 @@ void DSectorScrollInterpolation::OnDestroy() } sector = nullptr; } - Super::OnDestroy(); } //========================================================================== @@ -630,6 +615,7 @@ void DSectorScrollInterpolation::Interpolate(double smoothratio) if (refcount == 0 && oldx == bakx && oldy == baky) { + UnlinkFromMap(); Destroy(); } else @@ -668,11 +654,12 @@ void DSectorScrollInterpolation::Serialize(FSerializer &arc) //========================================================================== DWallScrollInterpolation::DWallScrollInterpolation(side_t *_side, int _part) +: DInterpolation(_side->GetLevel()) { side = _side; part = _part; UpdateInterpolation (); - interpolator.AddInterpolation(this); + side->GetLevel()->interpolator.AddInterpolation(this); } //========================================================================== @@ -681,14 +668,13 @@ DWallScrollInterpolation::DWallScrollInterpolation(side_t *_side, int _part) // //========================================================================== -void DWallScrollInterpolation::OnDestroy() +void DWallScrollInterpolation::UnlinkFromMap() { if (side != nullptr) { side->textures[part].interpolation = nullptr; side = nullptr; } - Super::OnDestroy(); } //========================================================================== @@ -728,6 +714,7 @@ void DWallScrollInterpolation::Interpolate(double smoothratio) if (refcount == 0 && oldx == bakx && oldy == baky) { + UnlinkFromMap(); Destroy(); } else @@ -765,12 +752,13 @@ void DWallScrollInterpolation::Serialize(FSerializer &arc) //========================================================================== DPolyobjInterpolation::DPolyobjInterpolation(FPolyObj *po) +: DInterpolation(po->Level) { poly = po; oldverts.Resize(po->Vertices.Size() << 1); bakverts.Resize(po->Vertices.Size() << 1); UpdateInterpolation (); - interpolator.AddInterpolation(this); + po->Level->interpolator.AddInterpolation(this); } //========================================================================== @@ -779,13 +767,12 @@ DPolyobjInterpolation::DPolyobjInterpolation(FPolyObj *po) // //========================================================================== -void DPolyobjInterpolation::OnDestroy() +void DPolyobjInterpolation::UnlinkFromMap() { if (poly != nullptr) { poly->interpolation = nullptr; } - Super::OnDestroy(); } //========================================================================== @@ -846,6 +833,7 @@ void DPolyobjInterpolation::Interpolate(double smoothratio) } if (refcount == 0 && !changed) { + UnlinkFromMap(); Destroy(); } else @@ -982,11 +970,3 @@ void FPolyObj::StopInterpolation() } -ADD_STAT (interpolations) -{ - FString out; - out.Format ("%d interpolations", interpolator.CountInterpolations ()); - return out; -} - - diff --git a/src/r_data/r_interpolate.h b/src/r_data/r_interpolate.h index dabfa3a1e6..888f387c51 100644 --- a/src/r_data/r_interpolate.h +++ b/src/r_data/r_interpolate.h @@ -2,6 +2,8 @@ #define R_INTERPOLATE_H #include "dobject.h" + +struct FLevelLocals; //========================================================================== // // @@ -15,19 +17,20 @@ class DInterpolation : public DObject DECLARE_ABSTRACT_CLASS(DInterpolation, DObject) HAS_OBJECT_POINTERS - TObjPtr Next; - TObjPtr Prev; + TObjPtr Next = nullptr; + TObjPtr Prev = nullptr; protected: - int refcount; + FLevelLocals *Level; + int refcount = 0; - DInterpolation(); + DInterpolation(FLevelLocals *l = nullptr) : Level(l) {} public: int AddRef(); int DelRef(bool force = false); - void OnDestroy() override; + virtual void UnlinkFromMap(); virtual void UpdateInterpolation() = 0; virtual void Restore() = 0; virtual void Interpolate(double smoothratio) = 0; @@ -43,19 +46,13 @@ public: struct FInterpolator { - TObjPtr Head; - bool didInterp; - int count; + TObjPtr Head = nullptr; + bool didInterp = false; + int count = 0; int CountInterpolations (); public: - FInterpolator() - { - Head = nullptr; - didInterp = false; - count = 0; - } void UpdateInterpolations(); void AddInterpolation(DInterpolation *); void RemoveInterpolation(DInterpolation *); @@ -64,9 +61,6 @@ public: void ClearInterpolations(); }; -extern FInterpolator interpolator; - - #endif diff --git a/src/r_data/r_sections.cpp b/src/r_data/r_sections.cpp index 18a26b1817..998945aa64 100644 --- a/src/r_data/r_sections.cpp +++ b/src/r_data/r_sections.cpp @@ -23,7 +23,7 @@ #include -#include "i_system.h" + #include "p_local.h" #include "c_dispatch.h" #include "r_defs.h" @@ -814,9 +814,10 @@ public: // //============================================================================= -void PrintSections(FSectionContainer &container) +void PrintSections(FLevelLocals *Level) { - auto Level = &level; + FSectionContainer &container = Level->sections; + Printf("Sections for %s\n", Level->MapName.GetChars()); for (unsigned i = 0; i < container.allSections.Size(); i++) { auto §ion = container.allSections[i]; @@ -853,7 +854,7 @@ void PrintSections(FSectionContainer &container) } } } - Printf(PRINT_LOG, "%d sectors, %d subsectors, %d sections\n", Level->sectors.Size(), Level->subsectors.Size(), container.allSections.Size()); + Printf(PRINT_LOG, "%d sectors, %d subsectors, %d sections\n\n", Level->sectors.Size(), Level->subsectors.Size(), container.allSections.Size()); } @@ -875,9 +876,3 @@ void CreateSections(FLevelLocals *Level) creat.FixMissingReferences(); } -CCMD(printsections) -{ - PrintSections(level.sections); -} - - diff --git a/src/r_data/r_sections.h b/src/r_data/r_sections.h index c971cb09bc..fcd7cd3b2a 100644 --- a/src/r_data/r_sections.h +++ b/src/r_data/r_sections.h @@ -34,7 +34,7 @@ struct BoundingRect void setEmpty() { left = top = FLT_MAX; - bottom = right = FLT_MIN; + bottom = right = -FLT_MAX; } bool contains(const BoundingRect & other) const diff --git a/src/r_data/r_translate.cpp b/src/r_data/r_translate.cpp index cb3cd28fd5..e6a85c929a 100644 --- a/src/r_data/r_translate.cpp +++ b/src/r_data/r_translate.cpp @@ -919,7 +919,7 @@ void R_InitTranslationTables () // Each player corpse has its own translation so they won't change // color if the player who created them changes theirs. - for (i = 0; i < level.BODYQUESIZE; ++i) + for (i = 0; i < FLevelLocals::BODYQUESIZE; ++i) { PushIdentityTable(TRANSLATION_PlayerCorpses); } diff --git a/src/r_data/sprites.cpp b/src/r_data/sprites.cpp index 2a5224b4fe..eecb27dd20 100644 --- a/src/r_data/sprites.cpp +++ b/src/r_data/sprites.cpp @@ -23,7 +23,7 @@ #include "doomtype.h" #include "w_wad.h" -#include "i_system.h" + #include "s_sound.h" #include "d_player.h" #include "d_netinf.h" diff --git a/src/r_defs.h b/src/r_defs.h index a7cdb5c877..4aefe42d58 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -264,7 +264,6 @@ public: // Stores things/mobjs. // class DSectorEffect; -struct sector_t; struct FRemapTable; enum @@ -453,7 +452,6 @@ public: #include "p_3dfloors.h" struct subsector_t; -struct sector_t; struct side_t; extern bool gl_plane_reflection_i; @@ -652,6 +650,7 @@ struct sector_t splane planes[2]; + FLevelLocals *Level; extsector_t * e; // This stores data that requires construction/destruction. Such data must not be copied by R_FakeFlat. secplane_t floorplane, ceilingplane; // [RH] store floor and ceiling planes instead of heights @@ -1196,6 +1195,11 @@ struct side_t Light = l; } + FLevelLocals *GetLevel() + { + return sector->Level; + } + FTextureID GetTexture(int which) const { return textures[which].texture; @@ -1408,6 +1412,7 @@ struct line_t FSectorPortal *GetTransferredPortal(); void AdjustLine(); + inline FLevelLocals *GetLevel() const; inline FLinePortal *getPortal() const; inline bool isLinePortal() const; inline bool isVisualPortal() const; @@ -1492,6 +1497,11 @@ struct seg_t int segnum; int Index() const { return segnum; } + + FLevelLocals *GetLevel() const + { + return frontsector->Level; + } }; //extern seg_t *segs; @@ -1593,26 +1603,9 @@ typedef uint8_t lighttable_t; // This could be wider for >8 bit display. //---------------------------------------------------------------------------------- // -// The playsim can use different nodes than the renderer so this is -// not the same as R_PointInSubsector +// // //---------------------------------------------------------------------------------- -subsector_t *P_PointInSubsector(double x, double y); - -inline sector_t *P_PointInSector(const DVector2 &pos) -{ - return P_PointInSubsector(pos.X, pos.Y)->sector; -} - -inline sector_t *P_PointInSector(double X, double Y) -{ - return P_PointInSubsector(X, Y)->sector; -} - -inline sector_t *P_PointInSectorXY(double X, double Y) // This is for the benefit of unambiguously looking up this function's address -{ - return P_PointInSubsector(X, Y)->sector; -} inline bool FBoundingBox::inRange(const line_t *ld) const { diff --git a/src/r_renderer.h b/src/r_renderer.h index 46fd9a4303..126d7a2eef 100644 --- a/src/r_renderer.h +++ b/src/r_renderer.h @@ -14,6 +14,7 @@ struct sector_t; class FCanvasTexture; class FileWriter; class DCanvas; +struct FLevelLocals; struct FRenderer { @@ -32,7 +33,7 @@ struct FRenderer virtual void DrawRemainingPlayerSprites() = 0; // set up the colormap for a newly loaded level. - virtual void SetColormap() = 0; + virtual void SetColormap(FLevelLocals *) = 0; virtual void SetClearColor(int color) = 0; diff --git a/src/r_sky.cpp b/src/r_sky.cpp index 94fb65644e..7ff9973f08 100644 --- a/src/r_sky.cpp +++ b/src/r_sky.cpp @@ -43,10 +43,6 @@ // sky mapping // FTextureID skyflatnum; -FTextureID sky1texture, sky2texture; -double sky1pos, sky2pos; -float hw_sky1pos, hw_sky2pos; -bool skystretch; // [RH] Stretch sky texture if not taller than 128 pixels? // Also now controls capped skies. 0 = normal, 1 = stretched, 2 = capped @@ -65,31 +61,32 @@ CVAR(Float, skyoffset, 0, 0) // for testing // //========================================================================== -void R_InitSkyMap() +void InitSkyMap(FLevelLocals *Level) { int skyheight; FTexture *skytex1, *skytex2; // Do not allow the null texture which has no bitmap and will crash. - if (sky1texture.isNull()) + if (Level->skytexture1.isNull()) { - sky1texture = TexMan.CheckForTexture("-noflat-", ETextureType::Any); + Level->skytexture1 = TexMan.CheckForTexture("-noflat-", ETextureType::Any); } - if (sky2texture.isNull()) + if (Level->skytexture2.isNull()) { - sky2texture = TexMan.CheckForTexture("-noflat-", ETextureType::Any); + Level->skytexture2 = TexMan.CheckForTexture("-noflat-", ETextureType::Any); } - skytex1 = TexMan.GetTexture(sky1texture, false); - skytex2 = TexMan.GetTexture(sky2texture, false); + skytex1 = TexMan.GetTexture(Level->skytexture1, false); + skytex2 = TexMan.GetTexture(Level->skytexture2, false); if (skytex1 == nullptr) return; - if ((level.flags & LEVEL_DOUBLESKY) && skytex1->GetDisplayHeight() != skytex2->GetDisplayHeight()) + if ((Level->flags & LEVEL_DOUBLESKY) && skytex1->GetDisplayHeight() != skytex2->GetDisplayHeight()) { Printf(TEXTCOLOR_BOLD "Both sky textures must be the same height." TEXTCOLOR_NORMAL "\n"); - sky2texture = sky1texture; + Level->flags &= ~LEVEL_DOUBLESKY; + Level->skytexture1 = Level->skytexture2; } // There are various combinations for sky rendering depending on how tall the sky is: @@ -109,14 +106,23 @@ void R_InitSkyMap() if (skyheight >= 128 && skyheight < 200) { - skystretch = (r_skymode == 1 + Level->skystretch = (r_skymode == 1 && skyheight >= 128 - && level.IsFreelookAllowed() - && !(level.flags & LEVEL_FORCETILEDSKY)) ? 1 : 0; + && Level->IsFreelookAllowed() + && !(Level->flags & LEVEL_FORCETILEDSKY)) ? 1 : 0; } - else skystretch = false; + else Level->skystretch = false; } +void R_InitSkyMap() +{ + for(auto Level : AllLevels()) + { + InitSkyMap(Level); + } +} + + //========================================================================== // // R_UpdateSky @@ -127,14 +133,16 @@ void R_InitSkyMap() void R_UpdateSky (uint64_t mstime) { - // Scroll the sky double ms = (double)mstime * FRACUNIT; - sky1pos = ms * level.skyspeed1; - sky2pos = ms * level.skyspeed2; - - // The hardware renderer uses a different value range and clamps it to a single rotation - hw_sky1pos = (float)(fmod((double(mstime) * level.skyspeed1), 1024.) * (90. / 256.)); - hw_sky2pos = (float)(fmod((double(mstime) * level.skyspeed2), 1024.) * (90. / 256.)); + for(auto Level : AllLevels()) + { + // Scroll the sky + Level->sky1pos = ms * Level->skyspeed1; + Level->sky2pos = ms * Level->skyspeed2; + // The hardware renderer uses a different value range and clamps it to a single rotation + Level->hw_sky1pos = (float)(fmod((double(mstime) * Level->skyspeed1), 1024.) * (90. / 256.)); + Level->hw_sky2pos = (float)(fmod((double(mstime) * Level->skyspeed2), 1024.) * (90. / 256.)); + } } diff --git a/src/r_sky.h b/src/r_sky.h index 05154e2fd9..9d80740c95 100644 --- a/src/r_sky.h +++ b/src/r_sky.h @@ -30,17 +30,16 @@ #include "textures/textures.h" +struct FLevelLocals; + extern FTextureID skyflatnum; -extern FTextureID sky1texture, sky2texture; -extern double sky1pos, sky2pos; -extern float hw_sky1pos, hw_sky2pos; -extern bool skystretch; extern int freelookviewheight; #define SKYSTRETCH_HEIGHT 228 // Called whenever the sky changes. -void R_InitSkyMap (); +void InitSkyMap(FLevelLocals *Level); +void R_InitSkyMap(); void R_UpdateSky (uint64_t mstime); // 57 world units roughly represent one sky texel for the glTranslate call. diff --git a/src/r_utility.cpp b/src/r_utility.cpp index 9117fc01f4..d779156178 100644 --- a/src/r_utility.cpp +++ b/src/r_utility.cpp @@ -62,7 +62,8 @@ #include "vm.h" #include "i_time.h" #include "actorinlines.h" - +#include "g_game.h" +#include "i_system.h" // EXTERNAL DATA DECLARATIONS ---------------------------------------------- @@ -361,33 +362,6 @@ CUSTOM_CVAR (Int, screenblocks, 10, CVAR_ARCHIVE) R_SetViewSize (self); } -//========================================================================== -// -// R_PointInSubsector -// -//========================================================================== - -subsector_t *R_PointInSubsector (fixed_t x, fixed_t y) -{ - node_t *node; - int side; - - // single subsector is a special case - if (level.nodes.Size() == 0) - return &level.subsectors[0]; - - node = level.HeadNode(); - - do - { - side = R_PointOnSide (x, y, node); - node = (node_t *)node->children[side]; - } - while (!((size_t)node & 1)); - - return (subsector_t *)((uint8_t *)node - 1); -} - //========================================================================== // // @@ -450,8 +424,9 @@ void R_InterpolateView (FRenderViewpoint &viewpoint, player_t *player, double Fr NoInterpolateView = false; iview->Old = iview->New; } - int oldgroup = R_PointInSubsector(iview->Old.Pos)->sector->PortalGroup; - int newgroup = R_PointInSubsector(iview->New.Pos)->sector->PortalGroup; + auto Level = viewpoint.ViewLevel; + int oldgroup = Level->PointInRenderSubsector(iview->Old.Pos)->sector->PortalGroup; + int newgroup = Level->PointInRenderSubsector(iview->New.Pos)->sector->PortalGroup; DAngle oviewangle = iview->Old.Angles.Yaw; DAngle nviewangle = iview->New.Angles.Yaw; @@ -518,7 +493,7 @@ void R_InterpolateView (FRenderViewpoint &viewpoint, player_t *player, double Fr } else { - DVector2 disp = level.Displacements.getOffset(oldgroup, newgroup); + DVector2 disp = viewpoint.ViewLevel->Displacements.getOffset(oldgroup, newgroup); viewpoint.Pos = iview->Old.Pos + (iview->New.Pos - iview->Old.Pos - disp) * Frac; viewpoint.Path[0] = viewpoint.Path[1] = iview->New.Pos; } @@ -556,7 +531,7 @@ void R_InterpolateView (FRenderViewpoint &viewpoint, player_t *player, double Fr } // Due to interpolation this is not necessarily the same as the sector the camera is in. - viewpoint.sector = R_PointInSubsector(viewpoint.Pos)->sector; + viewpoint.sector = Level->PointInRenderSubsector(viewpoint.Pos)->sector; bool moved = false; while (!viewpoint.sector->PortalBlocksMovement(sector_t::ceiling)) { @@ -564,7 +539,7 @@ void R_InterpolateView (FRenderViewpoint &viewpoint, player_t *player, double Fr { viewpoint.Pos += viewpoint.sector->GetPortalDisplacement(sector_t::ceiling); viewpoint.ActorPos += viewpoint.sector->GetPortalDisplacement(sector_t::ceiling); - viewpoint.sector = R_PointInSubsector(viewpoint.Pos)->sector; + viewpoint.sector = Level->PointInRenderSubsector(viewpoint.Pos)->sector; moved = true; } else break; @@ -577,7 +552,7 @@ void R_InterpolateView (FRenderViewpoint &viewpoint, player_t *player, double Fr { viewpoint.Pos += viewpoint.sector->GetPortalDisplacement(sector_t::floor); viewpoint.ActorPos += viewpoint.sector->GetPortalDisplacement(sector_t::floor); - viewpoint.sector = R_PointInSubsector(viewpoint.Pos)->sector; + viewpoint.sector = Level->PointInRenderSubsector(viewpoint.Pos)->sector; moved = true; } else break; @@ -771,6 +746,7 @@ void R_SetupFrame (FRenderViewpoint &viewpoint, FViewWindow &viewwindow, AActor { I_Error ("Tried to render from a NULL actor."); } + viewpoint.ViewLevel = actor->Level; player_t *player = actor->player; unsigned int newblend; @@ -807,7 +783,7 @@ void R_SetupFrame (FRenderViewpoint &viewpoint, FViewWindow &viewwindow, AActor if (player != NULL && gamestate != GS_TITLELEVEL && ((player->cheats & CF_CHASECAM) || (r_deathcamera && viewpoint.camera->health <= 0))) { - sector_t *oldsector = R_PointInSubsector(iview->Old.Pos)->sector; + sector_t *oldsector = viewpoint.ViewLevel->PointInRenderSubsector(iview->Old.Pos)->sector; // [RH] Use chasecam view DVector3 campos; DAngle camangle; @@ -839,8 +815,9 @@ void R_SetupFrame (FRenderViewpoint &viewpoint, FViewWindow &viewwindow, AActor player = viewpoint.camera->player; } - if (iview->otic == -1 || r_NoInterpolate) + if (iview->otic == -1 || r_NoInterpolate || (viewpoint.camera->renderflags & RF_NOINTERPOLATEVIEW)) { + viewpoint.camera->renderflags &= ~RF_NOINTERPOLATEVIEW; R_ResetViewInterpolation (); iview->otic = nowtic; } @@ -854,8 +831,6 @@ void R_SetupFrame (FRenderViewpoint &viewpoint, FViewWindow &viewwindow, AActor viewpoint.SetViewAngle (viewwindow); - interpolator.DoInterpolations (viewpoint.TicFrac); - // Keep the view within the sector's floor and ceiling if (viewpoint.sector->PortalBlocksMovement(sector_t::ceiling)) { @@ -1029,7 +1004,7 @@ void R_SetupFrame (FRenderViewpoint &viewpoint, FViewWindow &viewwindow, AActor // However, to set up a projection matrix this needs to be adjusted. double radPitch = viewpoint.Angles.Pitch.Normalized180().Radians(); double angx = cos(radPitch); - double angy = sin(radPitch) * level.info->pixelstretch; + double angy = sin(radPitch) * actor->Level->info->pixelstretch; double alen = sqrt(angx*angx + angy*angy); viewpoint.HWAngles.Pitch = RAD2DEG((float)asin(angy / alen)); diff --git a/src/r_utility.h b/src/r_utility.h index 1eb93096a4..bdc9aea171 100644 --- a/src/r_utility.h +++ b/src/r_utility.h @@ -13,6 +13,8 @@ struct FViewWindow; // There a 0-31, i.e. 32 LUT in the COLORMAP lump. #define NUMCOLORMAPS 32 +struct FLevelLocals; + struct FRenderViewpoint { FRenderViewpoint(); @@ -24,6 +26,7 @@ struct FRenderViewpoint FRotator HWAngles; // Actual rotation angles for the hardware renderer DVector2 ViewVector; // HWR only: direction the camera is facing. AActor *ViewActor; // either the same as camera or nullptr + FLevelLocals *ViewLevel; // The level this viewpoint is on. DVector3 Path[2]; // View path for portal calculations double Cos; // cos(Angles.Yaw) @@ -108,12 +111,6 @@ struct DVector3a DAngle angle; }; - -subsector_t *R_PointInSubsector (fixed_t x, fixed_t y); -inline subsector_t *R_PointInSubsector(const DVector2 &pos) -{ - return R_PointInSubsector(FLOAT2FIXED(pos.X), FLOAT2FIXED(pos.Y)); -} void R_ResetViewInterpolation (); void R_RebuildViewInterpolation(player_t *player); bool R_GetViewInterpolationStatus(); diff --git a/src/gl/renderer/gl_postprocess.cpp b/src/rendering/gl/renderer/gl_postprocess.cpp similarity index 100% rename from src/gl/renderer/gl_postprocess.cpp rename to src/rendering/gl/renderer/gl_postprocess.cpp diff --git a/src/gl/renderer/gl_postprocessstate.cpp b/src/rendering/gl/renderer/gl_postprocessstate.cpp similarity index 100% rename from src/gl/renderer/gl_postprocessstate.cpp rename to src/rendering/gl/renderer/gl_postprocessstate.cpp diff --git a/src/gl/renderer/gl_postprocessstate.h b/src/rendering/gl/renderer/gl_postprocessstate.h similarity index 100% rename from src/gl/renderer/gl_postprocessstate.h rename to src/rendering/gl/renderer/gl_postprocessstate.h diff --git a/src/gl/renderer/gl_renderbuffers.cpp b/src/rendering/gl/renderer/gl_renderbuffers.cpp similarity index 100% rename from src/gl/renderer/gl_renderbuffers.cpp rename to src/rendering/gl/renderer/gl_renderbuffers.cpp diff --git a/src/gl/renderer/gl_renderbuffers.h b/src/rendering/gl/renderer/gl_renderbuffers.h similarity index 100% rename from src/gl/renderer/gl_renderbuffers.h rename to src/rendering/gl/renderer/gl_renderbuffers.h diff --git a/src/gl/renderer/gl_renderer.cpp b/src/rendering/gl/renderer/gl_renderer.cpp similarity index 96% rename from src/gl/renderer/gl_renderer.cpp rename to src/rendering/gl/renderer/gl_renderer.cpp index aed0be31a3..38a0ad6043 100644 --- a/src/gl/renderer/gl_renderer.cpp +++ b/src/rendering/gl/renderer/gl_renderer.cpp @@ -116,7 +116,6 @@ void FGLRenderer::Initialize(int width, int height) FGLRenderer::~FGLRenderer() { FlushModels(); - AActor::DeleteAllAttachedLights(); TexMan.FlushAll(); if (mShaderManager != nullptr) delete mShaderManager; if (mSamplerManager != nullptr) delete mSamplerManager; @@ -245,21 +244,24 @@ sector_t *FGLRenderer::RenderView(player_t* player) if (cl_capfps || r_NoInterpolate) r_viewpoint.TicFrac = 1.; else r_viewpoint.TicFrac = I_GetTimeFrac(); - P_FindParticleSubsectors(); - screen->mLights->Clear(); screen->mViewpoints->Clear(); // NoInterpolateView should have no bearing on camera textures, but needs to be preserved for the main view below. bool saved_niv = NoInterpolateView; NoInterpolateView = false; - // prepare all camera textures that have been used in the last frame - auto Level = &level; - gl_RenderState.CheckTimer(Level->ShaderStartTime); - Level->canvasTextureInfo.UpdateAll([&](AActor *camera, FCanvasTexture *camtex, double fov) + + // Shader start time does not need to be handled per level. Just use the one from the camera to render from. + gl_RenderState.CheckTimer(player->camera->Level->ShaderStartTime); + // prepare all camera textures that have been used in the last frame. + // This must be done for all levels, not just the primary one! + for (auto Level : AllLevels()) { - RenderTextureView(camtex, camera, fov); - }); + Level->canvasTextureInfo.UpdateAll([&](AActor *camera, FCanvasTexture *camtex, double fov) + { + RenderTextureView(camtex, camera, fov); + }); + } NoInterpolateView = saved_niv; @@ -353,7 +355,6 @@ void FGLRenderer::WriteSavePic (player_t *player, FileWriter *file, int width, i mBuffers = mSaveBuffers; hw_ClearFakeFlat(); - P_FindParticleSubsectors(); // make sure that all recently spawned particles have a valid subsector. gl_RenderState.SetVertexBuffer(screen->mVertexData); screen->mVertexData->Reset(); screen->mLights->Clear(); @@ -391,4 +392,4 @@ void FGLRenderer::BeginFrame() mSaveBuffers->Setup(SAVEPICWIDTH, SAVEPICHEIGHT, SAVEPICWIDTH, SAVEPICHEIGHT); } -} \ No newline at end of file +} diff --git a/src/gl/renderer/gl_renderer.h b/src/rendering/gl/renderer/gl_renderer.h similarity index 100% rename from src/gl/renderer/gl_renderer.h rename to src/rendering/gl/renderer/gl_renderer.h diff --git a/src/gl/renderer/gl_renderstate.cpp b/src/rendering/gl/renderer/gl_renderstate.cpp similarity index 100% rename from src/gl/renderer/gl_renderstate.cpp rename to src/rendering/gl/renderer/gl_renderstate.cpp diff --git a/src/gl/renderer/gl_renderstate.h b/src/rendering/gl/renderer/gl_renderstate.h similarity index 100% rename from src/gl/renderer/gl_renderstate.h rename to src/rendering/gl/renderer/gl_renderstate.h diff --git a/src/gl/renderer/gl_scene.cpp b/src/rendering/gl/renderer/gl_scene.cpp similarity index 95% rename from src/gl/renderer/gl_scene.cpp rename to src/rendering/gl/renderer/gl_scene.cpp index f19bf10189..c62203be98 100644 --- a/src/gl/renderer/gl_scene.cpp +++ b/src/rendering/gl/renderer/gl_scene.cpp @@ -39,6 +39,7 @@ #include "p_local.h" #include "serializer.h" #include "g_levellocals.h" +#include "actorinlines.h" #include "r_data/models/models.h" #include "hwrenderer/dynlights/hw_dynlightdata.h" #include "hwrenderer/utility/hw_clock.h" @@ -155,6 +156,10 @@ sector_t * FGLRenderer::RenderViewpoint (FRenderViewpoint &mainvp, AActor * came if (mainview && toscreen) UpdateShadowMap(); + // Update the attenuation flag of all light defaults for each viewpoint. + // This function will only do something if the setting differs. + FLightDefaults::SetAttenuationForLevel(!!(camera->Level->flags3 & LEVEL3_ATTENUATE)); + // Render (potentially) multiple views for stereo 3d // Fixme. The view offsetting should be done with a static table and not require setup of the entire render state for the mode. auto vrmode = VRMode::GetVRMode(mainview && toscreen); @@ -175,7 +180,7 @@ sector_t * FGLRenderer::RenderViewpoint (FRenderViewpoint &mainvp, AActor * came } - auto di = HWDrawInfo::StartDrawInfo(nullptr, mainvp, nullptr); + auto di = HWDrawInfo::StartDrawInfo(mainvp.ViewLevel, nullptr, mainvp, nullptr); auto &vp = di->Viewpoint; di->Set3DViewport(gl_RenderState); @@ -217,8 +222,7 @@ sector_t * FGLRenderer::RenderViewpoint (FRenderViewpoint &mainvp, AActor * came mBuffers->BlitToEyeTexture(eye_ix); } - interpolator.RestoreInterpolations (); return mainvp.sector; } -} \ No newline at end of file +} diff --git a/src/gl/renderer/gl_stereo3d.cpp b/src/rendering/gl/renderer/gl_stereo3d.cpp similarity index 100% rename from src/gl/renderer/gl_stereo3d.cpp rename to src/rendering/gl/renderer/gl_stereo3d.cpp diff --git a/src/gl/shaders/gl_postprocessshader.cpp b/src/rendering/gl/shaders/gl_postprocessshader.cpp similarity index 100% rename from src/gl/shaders/gl_postprocessshader.cpp rename to src/rendering/gl/shaders/gl_postprocessshader.cpp diff --git a/src/gl/shaders/gl_postprocessshaderinstance.h b/src/rendering/gl/shaders/gl_postprocessshaderinstance.h similarity index 100% rename from src/gl/shaders/gl_postprocessshaderinstance.h rename to src/rendering/gl/shaders/gl_postprocessshaderinstance.h diff --git a/src/gl/shaders/gl_shader.cpp b/src/rendering/gl/shaders/gl_shader.cpp similarity index 100% rename from src/gl/shaders/gl_shader.cpp rename to src/rendering/gl/shaders/gl_shader.cpp diff --git a/src/gl/shaders/gl_shader.h b/src/rendering/gl/shaders/gl_shader.h similarity index 100% rename from src/gl/shaders/gl_shader.h rename to src/rendering/gl/shaders/gl_shader.h diff --git a/src/gl/shaders/gl_shaderprogram.cpp b/src/rendering/gl/shaders/gl_shaderprogram.cpp similarity index 100% rename from src/gl/shaders/gl_shaderprogram.cpp rename to src/rendering/gl/shaders/gl_shaderprogram.cpp diff --git a/src/gl/shaders/gl_shaderprogram.h b/src/rendering/gl/shaders/gl_shaderprogram.h similarity index 100% rename from src/gl/shaders/gl_shaderprogram.h rename to src/rendering/gl/shaders/gl_shaderprogram.h diff --git a/src/gl/system/gl_buffers.cpp b/src/rendering/gl/system/gl_buffers.cpp similarity index 99% rename from src/gl/system/gl_buffers.cpp rename to src/rendering/gl/system/gl_buffers.cpp index b67bb99b97..5e1617edb6 100644 --- a/src/gl/system/gl_buffers.cpp +++ b/src/rendering/gl/system/gl_buffers.cpp @@ -27,6 +27,7 @@ #include "gl_load/gl_system.h" #include "gl_buffers.h" #include "gl/renderer/gl_renderstate.h" +#include "v_video.h" namespace OpenGLRenderer { diff --git a/src/gl/system/gl_buffers.h b/src/rendering/gl/system/gl_buffers.h similarity index 100% rename from src/gl/system/gl_buffers.h rename to src/rendering/gl/system/gl_buffers.h diff --git a/src/gl/system/gl_debug.cpp b/src/rendering/gl/system/gl_debug.cpp similarity index 100% rename from src/gl/system/gl_debug.cpp rename to src/rendering/gl/system/gl_debug.cpp diff --git a/src/gl/system/gl_debug.h b/src/rendering/gl/system/gl_debug.h similarity index 100% rename from src/gl/system/gl_debug.h rename to src/rendering/gl/system/gl_debug.h diff --git a/src/gl/system/gl_framebuffer.cpp b/src/rendering/gl/system/gl_framebuffer.cpp similarity index 100% rename from src/gl/system/gl_framebuffer.cpp rename to src/rendering/gl/system/gl_framebuffer.cpp diff --git a/src/gl/system/gl_framebuffer.h b/src/rendering/gl/system/gl_framebuffer.h similarity index 100% rename from src/gl/system/gl_framebuffer.h rename to src/rendering/gl/system/gl_framebuffer.h diff --git a/src/gl/textures/gl_hwtexture.cpp b/src/rendering/gl/textures/gl_hwtexture.cpp similarity index 100% rename from src/gl/textures/gl_hwtexture.cpp rename to src/rendering/gl/textures/gl_hwtexture.cpp diff --git a/src/gl/textures/gl_hwtexture.h b/src/rendering/gl/textures/gl_hwtexture.h similarity index 100% rename from src/gl/textures/gl_hwtexture.h rename to src/rendering/gl/textures/gl_hwtexture.h diff --git a/src/gl/textures/gl_samplers.cpp b/src/rendering/gl/textures/gl_samplers.cpp similarity index 100% rename from src/gl/textures/gl_samplers.cpp rename to src/rendering/gl/textures/gl_samplers.cpp diff --git a/src/gl/textures/gl_samplers.h b/src/rendering/gl/textures/gl_samplers.h similarity index 100% rename from src/gl/textures/gl_samplers.h rename to src/rendering/gl/textures/gl_samplers.h diff --git a/src/gl_load/gl_extlist.txt b/src/rendering/gl_load/gl_extlist.txt similarity index 100% rename from src/gl_load/gl_extlist.txt rename to src/rendering/gl_load/gl_extlist.txt diff --git a/src/gl_load/gl_interface.cpp b/src/rendering/gl_load/gl_interface.cpp similarity index 99% rename from src/gl_load/gl_interface.cpp rename to src/rendering/gl_load/gl_interface.cpp index d2dc502db3..72806a6a03 100644 --- a/src/gl_load/gl_interface.cpp +++ b/src/rendering/gl_load/gl_interface.cpp @@ -27,6 +27,7 @@ */ #include "gl_load/gl_system.h" +#include "doomerrors.h" #include "tarray.h" #include "doomtype.h" #include "m_argv.h" diff --git a/src/gl_load/gl_interface.h b/src/rendering/gl_load/gl_interface.h similarity index 100% rename from src/gl_load/gl_interface.h rename to src/rendering/gl_load/gl_interface.h diff --git a/src/gl_load/gl_load.c b/src/rendering/gl_load/gl_load.c similarity index 100% rename from src/gl_load/gl_load.c rename to src/rendering/gl_load/gl_load.c diff --git a/src/gl_load/gl_load.h b/src/rendering/gl_load/gl_load.h similarity index 100% rename from src/gl_load/gl_load.h rename to src/rendering/gl_load/gl_load.h diff --git a/src/gl_load/gl_system.h b/src/rendering/gl_load/gl_system.h similarity index 100% rename from src/gl_load/gl_system.h rename to src/rendering/gl_load/gl_system.h diff --git a/src/hwrenderer/data/buffers.h b/src/rendering/hwrenderer/data/buffers.h similarity index 100% rename from src/hwrenderer/data/buffers.h rename to src/rendering/hwrenderer/data/buffers.h diff --git a/src/hwrenderer/data/flatvertices.cpp b/src/rendering/hwrenderer/data/flatvertices.cpp similarity index 96% rename from src/hwrenderer/data/flatvertices.cpp rename to src/rendering/hwrenderer/data/flatvertices.cpp index 6ba517bdf9..2d956e5e2b 100644 --- a/src/hwrenderer/data/flatvertices.cpp +++ b/src/rendering/hwrenderer/data/flatvertices.cpp @@ -31,6 +31,7 @@ #include "c_cvars.h" #include "g_levellocals.h" #include "flatvertices.h" +#include "v_video.h" #include "cmdlib.h" #include "hwrenderer/data/buffers.h" #include "hwrenderer/scene/hw_renderstate.h" @@ -232,9 +233,9 @@ int FFlatVertexBuffer::CreateIndexedVertices(int h, sector_t *sec, const secplan // //========================================================================== -void FFlatVertexBuffer::CreateIndexedFlatVertices() +void FFlatVertexBuffer::CreateIndexedFlatVertices(TArray §ors) { - auto verts = BuildVertices(); + auto verts = BuildVertices(sectors); int i = 0; /* @@ -259,7 +260,7 @@ void FFlatVertexBuffer::CreateIndexedFlatVertices() for (int h = sector_t::floor; h <= sector_t::ceiling; h++) { - for (auto &sec : level.sectors) + for (auto &sec : sectors) { CreateIndexedVertices(h, &sec, sec.GetSecPlane(h), h == sector_t::floor, verts); } @@ -267,7 +268,7 @@ void FFlatVertexBuffer::CreateIndexedFlatVertices() // We need to do a final check for Vavoom water and FF_FIX sectors. // No new vertices are needed here. The planes come from the actual sector - for (auto &sec : level.sectors) + for (auto &sec : sectors) { for (auto ff : sec.e->XFloor.ffloors) { @@ -310,10 +311,10 @@ void FFlatVertexBuffer::UpdatePlaneVertices(sector_t *sec, int plane) // //========================================================================== -void FFlatVertexBuffer::CreateVertices() +void FFlatVertexBuffer::CreateVertices(TArray §ors) { vbo_shadowdata.Resize(NUM_RESERVED); - CreateIndexedFlatVertices(); + CreateIndexedFlatVertices(sectors); } //========================================================================== @@ -390,10 +391,10 @@ void FFlatVertexBuffer::Copy(int start, int count) // //========================================================================== -void FFlatVertexBuffer::CreateVBO() +void FFlatVertexBuffer::CreateVBO(TArray §ors) { vbo_shadowdata.Resize(mNumReserved); - FFlatVertexBuffer::CreateVertices(); + FFlatVertexBuffer::CreateVertices(sectors); mCurIndex = mIndex = vbo_shadowdata.Size(); Copy(0, mIndex); mIndexBuffer->SetData(ibo_data.Size() * sizeof(uint32_t), &ibo_data[0]); diff --git a/src/hwrenderer/data/flatvertices.h b/src/rendering/hwrenderer/data/flatvertices.h similarity index 95% rename from src/hwrenderer/data/flatvertices.h rename to src/rendering/hwrenderer/data/flatvertices.h index 890e5580c2..1a1588c710 100644 --- a/src/hwrenderer/data/flatvertices.h +++ b/src/rendering/hwrenderer/data/flatvertices.h @@ -84,7 +84,7 @@ public: return std::make_pair(mVertexBuffer, mIndexBuffer); } - void CreateVBO(); + void CreateVBO(TArray §ors); void Copy(int start, int count); FFlatVertex *GetBuffer(int index) const @@ -119,11 +119,11 @@ private: int CreateIndexedSectionVertices(subsector_t *sub, const secplane_t &plane, int floor, VertexContainer &cont); int CreateIndexedSectorVertices(sector_t *sec, const secplane_t &plane, int floor, VertexContainer &cont); int CreateIndexedVertices(int h, sector_t *sec, const secplane_t &plane, int floor, VertexContainers &cont); - void CreateIndexedFlatVertices(); + void CreateIndexedFlatVertices(TArray §ors); void UpdatePlaneVertices(sector_t *sec, int plane); protected: - void CreateVertices(); + void CreateVertices(TArray §ors); void CheckPlanes(sector_t *sector); public: void CheckUpdate(sector_t *sector); diff --git a/src/hwrenderer/data/hw_vertexbuilder.cpp b/src/rendering/hwrenderer/data/hw_vertexbuilder.cpp similarity index 92% rename from src/hwrenderer/data/hw_vertexbuilder.cpp rename to src/rendering/hwrenderer/data/hw_vertexbuilder.cpp index 6a0542cdf9..a21b3c78f1 100644 --- a/src/hwrenderer/data/hw_vertexbuilder.cpp +++ b/src/rendering/hwrenderer/data/hw_vertexbuilder.cpp @@ -129,7 +129,7 @@ static void CreateVerticesForSection(FSection §ion, VertexContainer &gen, bo static void CreateVerticesForSector(sector_t *sec, VertexContainer &gen) { - auto sections = level.sections.SectionsForSector(sec); + auto sections = sec->Level->sections.SectionsForSector(sec); for (auto §ion :sections) { CreateVerticesForSection( section, gen, true); @@ -137,12 +137,12 @@ static void CreateVerticesForSector(sector_t *sec, VertexContainer &gen) } -TArray BuildVertices() +TArray BuildVertices(TArray §ors) { - TArray verticesPerSector(level.sectors.Size(), true); - for (unsigned i=0; i verticesPerSector(sectors.Size(), true); + for (unsigned i=0; i< sectors.Size(); i++) { - CreateVerticesForSector(&level.sectors[i], verticesPerSector[i]); + CreateVerticesForSector(§ors[i], verticesPerSector[i]); } return verticesPerSector; } diff --git a/src/hwrenderer/data/hw_vertexbuilder.h b/src/rendering/hwrenderer/data/hw_vertexbuilder.h similarity index 96% rename from src/hwrenderer/data/hw_vertexbuilder.h rename to src/rendering/hwrenderer/data/hw_vertexbuilder.h index 60ed770b86..8ab7d21d86 100644 --- a/src/hwrenderer/data/hw_vertexbuilder.h +++ b/src/rendering/hwrenderer/data/hw_vertexbuilder.h @@ -64,6 +64,6 @@ struct VertexContainer using VertexContainers = TArray; -VertexContainers BuildVertices(); +VertexContainers BuildVertices(TArray §ors); diff --git a/src/hwrenderer/data/hw_viewpointbuffer.cpp b/src/rendering/hwrenderer/data/hw_viewpointbuffer.cpp similarity index 100% rename from src/hwrenderer/data/hw_viewpointbuffer.cpp rename to src/rendering/hwrenderer/data/hw_viewpointbuffer.cpp diff --git a/src/hwrenderer/data/hw_viewpointbuffer.h b/src/rendering/hwrenderer/data/hw_viewpointbuffer.h similarity index 100% rename from src/hwrenderer/data/hw_viewpointbuffer.h rename to src/rendering/hwrenderer/data/hw_viewpointbuffer.h diff --git a/src/hwrenderer/data/renderqueue.h b/src/rendering/hwrenderer/data/renderqueue.h similarity index 100% rename from src/hwrenderer/data/renderqueue.h rename to src/rendering/hwrenderer/data/renderqueue.h diff --git a/src/hwrenderer/data/shaderuniforms.h b/src/rendering/hwrenderer/data/shaderuniforms.h similarity index 100% rename from src/hwrenderer/data/shaderuniforms.h rename to src/rendering/hwrenderer/data/shaderuniforms.h diff --git a/src/hwrenderer/dynlights/hw_aabbtree.cpp b/src/rendering/hwrenderer/dynlights/hw_aabbtree.cpp similarity index 100% rename from src/hwrenderer/dynlights/hw_aabbtree.cpp rename to src/rendering/hwrenderer/dynlights/hw_aabbtree.cpp diff --git a/src/hwrenderer/dynlights/hw_aabbtree.h b/src/rendering/hwrenderer/dynlights/hw_aabbtree.h similarity index 100% rename from src/hwrenderer/dynlights/hw_aabbtree.h rename to src/rendering/hwrenderer/dynlights/hw_aabbtree.h diff --git a/src/hwrenderer/dynlights/hw_dynlightdata.cpp b/src/rendering/hwrenderer/dynlights/hw_dynlightdata.cpp similarity index 100% rename from src/hwrenderer/dynlights/hw_dynlightdata.cpp rename to src/rendering/hwrenderer/dynlights/hw_dynlightdata.cpp diff --git a/src/hwrenderer/dynlights/hw_dynlightdata.h b/src/rendering/hwrenderer/dynlights/hw_dynlightdata.h similarity index 100% rename from src/hwrenderer/dynlights/hw_dynlightdata.h rename to src/rendering/hwrenderer/dynlights/hw_dynlightdata.h diff --git a/src/hwrenderer/dynlights/hw_lightbuffer.cpp b/src/rendering/hwrenderer/dynlights/hw_lightbuffer.cpp similarity index 100% rename from src/hwrenderer/dynlights/hw_lightbuffer.cpp rename to src/rendering/hwrenderer/dynlights/hw_lightbuffer.cpp diff --git a/src/hwrenderer/dynlights/hw_lightbuffer.h b/src/rendering/hwrenderer/dynlights/hw_lightbuffer.h similarity index 100% rename from src/hwrenderer/dynlights/hw_lightbuffer.h rename to src/rendering/hwrenderer/dynlights/hw_lightbuffer.h diff --git a/src/hwrenderer/dynlights/hw_shadowmap.cpp b/src/rendering/hwrenderer/dynlights/hw_shadowmap.cpp similarity index 97% rename from src/hwrenderer/dynlights/hw_shadowmap.cpp rename to src/rendering/hwrenderer/dynlights/hw_shadowmap.cpp index 3f9dc89eb5..e563814e1a 100644 --- a/src/hwrenderer/dynlights/hw_shadowmap.cpp +++ b/src/rendering/hwrenderer/dynlights/hw_shadowmap.cpp @@ -26,6 +26,7 @@ #include "hwrenderer/data/buffers.h" #include "stats.h" #include "g_levellocals.h" +#include "v_video.h" /* The 1D shadow maps are stored in a 1024x1024 texture as float depth values (R32F). @@ -83,9 +84,9 @@ CUSTOM_CVAR(Int, gl_shadowmap_quality, 512, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) CUSTOM_CVAR (Bool, gl_light_shadowmap, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) { - if (!self) + if (!self) for (auto Level : AllLevels()) { - auto light = level.lights; + auto light = Level->lights; while (light) { light->mShadowmapIndex = 1024; @@ -111,9 +112,10 @@ void IShadowMap::CollectLights() { if (mLights.Size() != 1024 * 4) mLights.Resize(1024 * 4); int lightindex = 0; + auto Level = &level; // Todo: this should go through the blockmap in a spiral pattern around the player so that closer lights are preferred. - for (auto light = level.lights; light; light = light->next) + for (auto light = Level->lights; light; light = light->next) { LightsProcessed++; if (light->shadowmapped && light->IsActive() && lightindex < 1024 * 4) diff --git a/src/hwrenderer/dynlights/hw_shadowmap.h b/src/rendering/hwrenderer/dynlights/hw_shadowmap.h similarity index 100% rename from src/hwrenderer/dynlights/hw_shadowmap.h rename to src/rendering/hwrenderer/dynlights/hw_shadowmap.h diff --git a/src/hwrenderer/models/hw_models.cpp b/src/rendering/hwrenderer/models/hw_models.cpp similarity index 100% rename from src/hwrenderer/models/hw_models.cpp rename to src/rendering/hwrenderer/models/hw_models.cpp diff --git a/src/hwrenderer/models/hw_models.h b/src/rendering/hwrenderer/models/hw_models.h similarity index 98% rename from src/hwrenderer/models/hw_models.h rename to src/rendering/hwrenderer/models/hw_models.h index 4d2086acf7..e3ee0b6a77 100644 --- a/src/hwrenderer/models/hw_models.h +++ b/src/rendering/hwrenderer/models/hw_models.h @@ -26,6 +26,7 @@ #include "p_pspr.h" #include "r_data/voxels.h" #include "r_data/models/models.h" +#include "hwrenderer/data/buffers.h" class GLSprite; struct HWDrawInfo; diff --git a/src/hwrenderer/postprocessing/hw_postprocess.cpp b/src/rendering/hwrenderer/postprocessing/hw_postprocess.cpp similarity index 100% rename from src/hwrenderer/postprocessing/hw_postprocess.cpp rename to src/rendering/hwrenderer/postprocessing/hw_postprocess.cpp diff --git a/src/hwrenderer/postprocessing/hw_postprocess.h b/src/rendering/hwrenderer/postprocessing/hw_postprocess.h similarity index 100% rename from src/hwrenderer/postprocessing/hw_postprocess.h rename to src/rendering/hwrenderer/postprocessing/hw_postprocess.h diff --git a/src/hwrenderer/postprocessing/hw_postprocess_cvars.cpp b/src/rendering/hwrenderer/postprocessing/hw_postprocess_cvars.cpp similarity index 100% rename from src/hwrenderer/postprocessing/hw_postprocess_cvars.cpp rename to src/rendering/hwrenderer/postprocessing/hw_postprocess_cvars.cpp diff --git a/src/hwrenderer/postprocessing/hw_postprocess_cvars.h b/src/rendering/hwrenderer/postprocessing/hw_postprocess_cvars.h similarity index 100% rename from src/hwrenderer/postprocessing/hw_postprocess_cvars.h rename to src/rendering/hwrenderer/postprocessing/hw_postprocess_cvars.h diff --git a/src/hwrenderer/postprocessing/hw_postprocessshader.cpp b/src/rendering/hwrenderer/postprocessing/hw_postprocessshader.cpp similarity index 97% rename from src/hwrenderer/postprocessing/hw_postprocessshader.cpp rename to src/rendering/hwrenderer/postprocessing/hw_postprocessshader.cpp index dc6a465b62..9131fe10e8 100644 --- a/src/hwrenderer/postprocessing/hw_postprocessshader.cpp +++ b/src/rendering/hwrenderer/postprocessing/hw_postprocessshader.cpp @@ -23,6 +23,7 @@ #include "vm.h" #include "d_player.h" #include "hw_postprocessshader.h" +#include "g_levellocals.h" TArray PostProcessShaders; @@ -32,7 +33,7 @@ static bool IsConsolePlayer(player_t *player) AActor *activator = player ? player->mo : nullptr; if (activator == nullptr || activator->player == nullptr) return false; - return int(activator->player - players) == consoleplayer; + return activator->player == activator->Level->GetConsolePlayer(); } static void ShaderSetEnabled(player_t *player, const FString &shaderName, bool value) diff --git a/src/hwrenderer/postprocessing/hw_postprocessshader.h b/src/rendering/hwrenderer/postprocessing/hw_postprocessshader.h similarity index 100% rename from src/hwrenderer/postprocessing/hw_postprocessshader.h rename to src/rendering/hwrenderer/postprocessing/hw_postprocessshader.h diff --git a/src/hwrenderer/postprocessing/hw_present3dRowshader.cpp b/src/rendering/hwrenderer/postprocessing/hw_present3dRowshader.cpp similarity index 100% rename from src/hwrenderer/postprocessing/hw_present3dRowshader.cpp rename to src/rendering/hwrenderer/postprocessing/hw_present3dRowshader.cpp diff --git a/src/hwrenderer/postprocessing/hw_present3dRowshader.h b/src/rendering/hwrenderer/postprocessing/hw_present3dRowshader.h similarity index 100% rename from src/hwrenderer/postprocessing/hw_present3dRowshader.h rename to src/rendering/hwrenderer/postprocessing/hw_present3dRowshader.h diff --git a/src/hwrenderer/postprocessing/hw_presentshader.cpp b/src/rendering/hwrenderer/postprocessing/hw_presentshader.cpp similarity index 100% rename from src/hwrenderer/postprocessing/hw_presentshader.cpp rename to src/rendering/hwrenderer/postprocessing/hw_presentshader.cpp diff --git a/src/hwrenderer/postprocessing/hw_presentshader.h b/src/rendering/hwrenderer/postprocessing/hw_presentshader.h similarity index 100% rename from src/hwrenderer/postprocessing/hw_presentshader.h rename to src/rendering/hwrenderer/postprocessing/hw_presentshader.h diff --git a/src/hwrenderer/postprocessing/hw_shaderprogram.h b/src/rendering/hwrenderer/postprocessing/hw_shaderprogram.h similarity index 100% rename from src/hwrenderer/postprocessing/hw_shaderprogram.h rename to src/rendering/hwrenderer/postprocessing/hw_shaderprogram.h diff --git a/src/hwrenderer/postprocessing/hw_shadowmapshader.cpp b/src/rendering/hwrenderer/postprocessing/hw_shadowmapshader.cpp similarity index 100% rename from src/hwrenderer/postprocessing/hw_shadowmapshader.cpp rename to src/rendering/hwrenderer/postprocessing/hw_shadowmapshader.cpp diff --git a/src/hwrenderer/postprocessing/hw_shadowmapshader.h b/src/rendering/hwrenderer/postprocessing/hw_shadowmapshader.h similarity index 100% rename from src/hwrenderer/postprocessing/hw_shadowmapshader.h rename to src/rendering/hwrenderer/postprocessing/hw_shadowmapshader.h diff --git a/src/hwrenderer/scene/hw_bsp.cpp b/src/rendering/hwrenderer/scene/hw_bsp.cpp similarity index 97% rename from src/hwrenderer/scene/hw_bsp.cpp rename to src/rendering/hwrenderer/scene/hw_bsp.cpp index 4e6ba71324..cddf4db300 100644 --- a/src/hwrenderer/scene/hw_bsp.cpp +++ b/src/rendering/hwrenderer/scene/hw_bsp.cpp @@ -559,16 +559,16 @@ void HWDrawInfo::RenderThings(subsector_t * sub, sector_t * sector) void HWDrawInfo::RenderParticles(subsector_t *sub, sector_t *front) { SetupSprite.Clock(); - for (int i = ParticlesInSubsec[sub->Index()]; i != NO_PARTICLE; i = Particles[i].snext) + for (int i = Level->ParticlesInSubsec[sub->Index()]; i != NO_PARTICLE; i = Level->Particles[i].snext) { if (mClipPortal) { - int clipres = mClipPortal->ClipPoint(Particles[i].Pos); + int clipres = mClipPortal->ClipPoint(Level->Particles[i].Pos); if (clipres == PClip_InFront) continue; } GLSprite sprite; - sprite.ProcessParticle(this, &Particles[i], front); + sprite.ProcessParticle(this, &Level->Particles[i], front); } SetupSprite.Unclock(); } @@ -631,7 +631,7 @@ void HWDrawInfo::DoSubsector(subsector_t * sub) } // [RH] Add particles - if (gl_render_things && ParticlesInSubsec[sub->Index()] != NO_PARTICLE) + if (gl_render_things && Level->ParticlesInSubsec[sub->Index()] != NO_PARTICLE) { if (multithread) { @@ -691,7 +691,7 @@ void HWDrawInfo::DoSubsector(subsector_t * sub) fakesector = hw_FakeFlat(sector, in_area, false); } - uint8_t &srf = section_renderflags[level.sections.SectionIndex(sub->section)]; + uint8_t &srf = section_renderflags[Level->sections.SectionIndex(sub->section)]; if (!(srf & SSRF_PROCESSED)) { srf |= SSRF_PROCESSED; @@ -766,9 +766,9 @@ void HWDrawInfo::DoSubsector(subsector_t * sub) void HWDrawInfo::RenderBSPNode (void *node) { - if (level.nodes.Size() == 0) + if (Level->nodes.Size() == 0) { - DoSubsector (&level.subsectors[0]); + DoSubsector (&Level->subsectors[0]); return; } while (!((size_t)node & 1)) // Keep going until found a subsector diff --git a/src/hwrenderer/scene/hw_clipper.cpp b/src/rendering/hwrenderer/scene/hw_clipper.cpp similarity index 100% rename from src/hwrenderer/scene/hw_clipper.cpp rename to src/rendering/hwrenderer/scene/hw_clipper.cpp diff --git a/src/hwrenderer/scene/hw_clipper.h b/src/rendering/hwrenderer/scene/hw_clipper.h similarity index 100% rename from src/hwrenderer/scene/hw_clipper.h rename to src/rendering/hwrenderer/scene/hw_clipper.h diff --git a/src/hwrenderer/scene/hw_decal.cpp b/src/rendering/hwrenderer/scene/hw_decal.cpp similarity index 98% rename from src/hwrenderer/scene/hw_decal.cpp rename to src/rendering/hwrenderer/scene/hw_decal.cpp index d3c28735c0..01c69de3f7 100644 --- a/src/hwrenderer/scene/hw_decal.cpp +++ b/src/rendering/hwrenderer/scene/hw_decal.cpp @@ -49,7 +49,7 @@ void GLDecal::DrawDecal(HWDrawInfo *di, FRenderState &state) auto tex = gltexture; // calculate dynamic light effect. - if (level.HasDynamicLights && !di->isFullbrightScene() && gl_light_sprites) + if (di->Level->HasDynamicLights && !di->isFullbrightScene() && gl_light_sprites) { // Note: This should be replaced with proper shader based lighting. double x, y; @@ -107,7 +107,7 @@ void GLDecal::DrawDecal(HWDrawInfo *di, FRenderState &state) thiscm.FadeColor = Colormap.FadeColor; thiscm.CopyFrom3DLight(&lightlist[k]); di->SetColor(state, thisll, rellight, di->isFullbrightScene(), thiscm, alpha); - if (level.flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) thiscm.Decolorize(); + if (di->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) thiscm.Decolorize(); di->SetFog(state, thisll, rellight, di->isFullbrightScene(), &thiscm, false); state.SetSplitPlanes(lightlist[k].plane, lowplane); @@ -397,7 +397,7 @@ void GLWall::ProcessDecal(HWDrawInfo *di, DBaseDecal *decal, const FVector3 &nor gldecal->Colormap = Colormap; - if (level.flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) + if (di->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) { gldecal->Colormap.Decolorize(); } diff --git a/src/hwrenderer/scene/hw_drawinfo.cpp b/src/rendering/hwrenderer/scene/hw_drawinfo.cpp similarity index 93% rename from src/hwrenderer/scene/hw_drawinfo.cpp rename to src/rendering/hwrenderer/scene/hw_drawinfo.cpp index ca30582436..5d86051cc7 100644 --- a/src/hwrenderer/scene/hw_drawinfo.cpp +++ b/src/rendering/hwrenderer/scene/hw_drawinfo.cpp @@ -85,13 +85,14 @@ HWDrawInfo *FDrawInfoList::GetNew() mList.Pop(di); return di; } - return new HWDrawInfo; + return new HWDrawInfo(); } void FDrawInfoList::Release(HWDrawInfo * di) { di->DrawScene = nullptr; di->ClearBuffers(); + di->Level = nullptr; mList.Push(di); } @@ -101,10 +102,11 @@ void FDrawInfoList::Release(HWDrawInfo * di) // //========================================================================== -HWDrawInfo *HWDrawInfo::StartDrawInfo(HWDrawInfo *parent, FRenderViewpoint &parentvp, HWViewpointUniforms *uniforms) +HWDrawInfo *HWDrawInfo::StartDrawInfo(FLevelLocals *lev, HWDrawInfo *parent, FRenderViewpoint &parentvp, HWViewpointUniforms *uniforms) { HWDrawInfo *di = di_list.GetNew(); if (parent) di->DrawScene = parent->DrawScene; + di->Level = lev; di->StartScene(parentvp, uniforms); return di; } @@ -125,7 +127,7 @@ void HWDrawInfo::StartScene(FRenderViewpoint &parentvp, HWViewpointUniforms *uni mClipper = &staticClipper; Viewpoint = parentvp; - lightmode = level.lightMode; + lightmode = Level->lightMode; if (uniforms) { VPUniforms = *uniforms; @@ -193,16 +195,19 @@ void HWDrawInfo::ClearBuffers() HandledSubsectors.Clear(); spriteindex = 0; - CurrentMapSections.Resize(level.NumMapSections); - CurrentMapSections.Zero(); + if (Level) + { + CurrentMapSections.Resize(Level->NumMapSections); + CurrentMapSections.Zero(); - section_renderflags.Resize(level.sections.allSections.Size()); - ss_renderflags.Resize(level.subsectors.Size()); - no_renderflags.Resize(level.subsectors.Size()); + section_renderflags.Resize(Level->sections.allSections.Size()); + ss_renderflags.Resize(Level->subsectors.Size()); + no_renderflags.Resize(Level->subsectors.Size()); - memset(§ion_renderflags[0], 0, level.sections.allSections.Size() * sizeof(section_renderflags[0])); - memset(&ss_renderflags[0], 0, level.subsectors.Size() * sizeof(ss_renderflags[0])); - memset(&no_renderflags[0], 0, level.nodes.Size() * sizeof(no_renderflags[0])); + memset(§ion_renderflags[0], 0, Level->sections.allSections.Size() * sizeof(section_renderflags[0])); + memset(&ss_renderflags[0], 0, Level->subsectors.Size() * sizeof(ss_renderflags[0])); + memset(&no_renderflags[0], 0, Level->nodes.Size() * sizeof(no_renderflags[0])); + } Decals[0].Clear(); Decals[1].Clear(); @@ -219,7 +224,7 @@ void HWDrawInfo::ClearBuffers() void HWDrawInfo::UpdateCurrentMapSection() { - const int mapsection = R_PointInSubsector(Viewpoint.Pos)->mapsection; + const int mapsection = Level->PointInRenderSubsector(Viewpoint.Pos)->mapsection; CurrentMapSections.Set(mapsection); } @@ -234,7 +239,7 @@ void HWDrawInfo::SetViewArea() { auto &vp = Viewpoint; // The render_sector is better suited to represent the current position in GL - vp.sector = R_PointInSubsector(vp.Pos)->render_sector; + vp.sector = Level->PointInRenderSubsector(vp.Pos)->render_sector; // Get the heightsec state from the render sector, not the current one! if (vp.sector->GetHeightSec()) @@ -245,7 +250,7 @@ void HWDrawInfo::SetViewArea() } else { - in_area = level.HasHeightSecs ? area_default : area_normal; // depends on exposed lower sectors, if map contains heightsecs. + in_area = Level->HasHeightSecs ? area_default : area_normal; // depends on exposed lower sectors, if map contains heightsecs. } } @@ -335,7 +340,7 @@ angle_t HWDrawInfo::FrustumAngle() void HWDrawInfo::SetViewMatrix(const FRotator &angles, float vx, float vy, float vz, bool mirror, bool planemirror) { float mult = mirror ? -1.f : 1.f; - float planemult = planemirror ? -level.info->pixelstretch : level.info->pixelstretch; + float planemult = planemirror ? -Level->info->pixelstretch : Level->info->pixelstretch; VPUniforms.mViewMatrix.loadIdentity(); VPUniforms.mViewMatrix.rotate(angles.Roll.Degrees, 0.0f, 0.0f, 1.0f); @@ -424,7 +429,6 @@ void HWDrawInfo::CreateScene() // reset the portal manager screen->mPortalState->StartFrame(); - PO_LinkToSubsectors(); ProcessAll.Clock(); @@ -432,7 +436,7 @@ void HWDrawInfo::CreateScene() screen->mVertexData->Map(); screen->mLights->Map(); - RenderBSP(level.HeadNode()); + RenderBSP(Level->HeadNode()); // And now the crappy hacks that have to be done to avoid rendering anomalies. // These cannot be multithreaded when the time comes because all these depend @@ -551,7 +555,7 @@ void HWDrawInfo::RenderPortal(HWPortal *p, FRenderState &state, bool usestencil) { auto gp = static_cast(p); gp->SetupStencil(this, state, usestencil); - auto new_di = StartDrawInfo(this, Viewpoint, &VPUniforms); + auto new_di = StartDrawInfo(this->Level, this, Viewpoint, &VPUniforms); new_di->mCurrentPortal = gp; state.SetLightIndex(-1); gp->DrawContents(new_di, state); @@ -648,7 +652,7 @@ void HWDrawInfo::ProcessScene(bool toscreen, const std::functionmPortalState->BeginScene(); - int mapsection = R_PointInSubsector(Viewpoint.Pos)->mapsection; + int mapsection = Level->PointInRenderSubsector(Viewpoint.Pos)->mapsection; CurrentMapSections.Set(mapsection); DrawScene = drawScene; DrawScene(this, toscreen ? DM_MAINVIEW : DM_OFFSCREEN); diff --git a/src/hwrenderer/scene/hw_drawinfo.h b/src/rendering/hwrenderer/scene/hw_drawinfo.h similarity index 98% rename from src/hwrenderer/scene/hw_drawinfo.h rename to src/rendering/hwrenderer/scene/hw_drawinfo.h index bf625d5d1b..9738cbe443 100644 --- a/src/hwrenderer/scene/hw_drawinfo.h +++ b/src/rendering/hwrenderer/scene/hw_drawinfo.h @@ -97,11 +97,6 @@ enum DrawListType struct HWDrawInfo { - virtual ~HWDrawInfo() - { - ClearBuffers(); - } - struct wallseg { float x1, y1, z1, x2, y2, z2; @@ -142,6 +137,7 @@ struct HWDrawInfo int vpIndex; ELightMode lightmode; + FLevelLocals *Level; HWDrawInfo * outer = nullptr; int FullbrightFlags; std::atomic spriteindex; @@ -243,7 +239,7 @@ public: void RenderBSPNode(void *node); void RenderBSP(void *node); - static HWDrawInfo *StartDrawInfo(HWDrawInfo *parent, FRenderViewpoint &parentvp, HWViewpointUniforms *uniforms); + static HWDrawInfo *StartDrawInfo(FLevelLocals *lev, HWDrawInfo *parent, FRenderViewpoint &parentvp, HWViewpointUniforms *uniforms); void StartScene(FRenderViewpoint &parentvp, HWViewpointUniforms *uniforms); void ClearBuffers(); HWDrawInfo *EndDrawInfo(); diff --git a/src/hwrenderer/scene/hw_drawlist.cpp b/src/rendering/hwrenderer/scene/hw_drawlist.cpp similarity index 99% rename from src/hwrenderer/scene/hw_drawlist.cpp rename to src/rendering/hwrenderer/scene/hw_drawlist.cpp index 5b19288c15..b6f4859f11 100644 --- a/src/hwrenderer/scene/hw_drawlist.cpp +++ b/src/rendering/hwrenderer/scene/hw_drawlist.cpp @@ -289,7 +289,7 @@ void HWDrawList::SortWallIntoPlane(SortNode * head, SortNode * sort) float newtexv = ws->tcs[GLWall::UPLFT].v + ((ws->tcs[GLWall::LOLFT].v - ws->tcs[GLWall::UPLFT].v) / (ws->zbottom[0] - ws->ztop[0])) * (fh->z - ws->ztop[0]); // I make the very big assumption here that translucent walls in sloped sectors - // and 3D-floors never coexist in the same level. If that were the case this + // and 3D-floors never coexist in the same level - If that were the case this // code would become extremely more complicated. if (!ceiling) { @@ -588,7 +588,7 @@ inline int HWDrawList::CompareSprites(SortNode * a,SortNode * b) int res = s1->depth - s2->depth; if (res != 0) return -res; - else return (i_compatflags & COMPATF_SPRITESORT)? s2->index-s1->index : s1->index-s2->index; + else return reverseSort? s2->index-s1->index : s1->index-s2->index; } //========================================================================== @@ -702,6 +702,7 @@ SortNode * HWDrawList::DoSort(HWDrawInfo *di, SortNode * head) //========================================================================== void HWDrawList::Sort(HWDrawInfo *di) { + reverseSort = !!(di->Level->i_compatflags & COMPATF_SPRITESORT); SortZ = di->Viewpoint.Pos.Z; MakeSortList(); sorted = DoSort(di, SortNodes[SortNodeStart]); @@ -709,7 +710,7 @@ void HWDrawList::Sort(HWDrawInfo *di) //========================================================================== // -// Sorting the drawitems first by texture and then by light level. +// Sorting the drawitems first by texture and then by light level // //========================================================================== diff --git a/src/hwrenderer/scene/hw_drawlist.h b/src/rendering/hwrenderer/scene/hw_drawlist.h similarity index 99% rename from src/hwrenderer/scene/hw_drawlist.h rename to src/rendering/hwrenderer/scene/hw_drawlist.h index 66ae468ed0..e4279516c2 100644 --- a/src/hwrenderer/scene/hw_drawlist.h +++ b/src/rendering/hwrenderer/scene/hw_drawlist.h @@ -67,6 +67,7 @@ struct HWDrawList int SortNodeStart; float SortZ; SortNode * sorted; + bool reverseSort; public: HWDrawList() diff --git a/src/hwrenderer/scene/hw_drawlistadd.cpp b/src/rendering/hwrenderer/scene/hw_drawlistadd.cpp similarity index 100% rename from src/hwrenderer/scene/hw_drawlistadd.cpp rename to src/rendering/hwrenderer/scene/hw_drawlistadd.cpp diff --git a/src/hwrenderer/scene/hw_drawstructs.h b/src/rendering/hwrenderer/scene/hw_drawstructs.h similarity index 100% rename from src/hwrenderer/scene/hw_drawstructs.h rename to src/rendering/hwrenderer/scene/hw_drawstructs.h diff --git a/src/hwrenderer/scene/hw_fakeflat.cpp b/src/rendering/hwrenderer/scene/hw_fakeflat.cpp similarity index 98% rename from src/hwrenderer/scene/hw_fakeflat.cpp rename to src/rendering/hwrenderer/scene/hw_fakeflat.cpp index 510e7d48a3..b37d8b67f0 100644 --- a/src/hwrenderer/scene/hw_fakeflat.cpp +++ b/src/rendering/hwrenderer/scene/hw_fakeflat.cpp @@ -196,8 +196,9 @@ static sector_t *allocateSector(sector_t *sec) { if (fakesectorbuffer == nullptr) { - fakesectorbuffer = (sector_t**)FakeSectorAllocator.Alloc(level.sectors.Size() * sizeof(sector_t*)); - memset(fakesectorbuffer, 0, level.sectors.Size() * sizeof(sector_t*)); + unsigned numsectors = sec->Level->sectors.Size(); + fakesectorbuffer = (sector_t**)FakeSectorAllocator.Alloc(numsectors * sizeof(sector_t*)); + memset(fakesectorbuffer, 0, numsectors * sizeof(sector_t*)); } auto sectornum = sec->sectornum; fakesectorbuffer[sectornum] = (sector_t*)FakeSectorAllocator.Alloc(sizeof(sector_t)); diff --git a/src/hwrenderer/scene/hw_fakeflat.h b/src/rendering/hwrenderer/scene/hw_fakeflat.h similarity index 100% rename from src/hwrenderer/scene/hw_fakeflat.h rename to src/rendering/hwrenderer/scene/hw_fakeflat.h diff --git a/src/hwrenderer/scene/hw_flats.cpp b/src/rendering/hwrenderer/scene/hw_flats.cpp similarity index 97% rename from src/hwrenderer/scene/hw_flats.cpp rename to src/rendering/hwrenderer/scene/hw_flats.cpp index 1ba3b9ce7d..46417bce8b 100644 --- a/src/hwrenderer/scene/hw_flats.cpp +++ b/src/rendering/hwrenderer/scene/hw_flats.cpp @@ -141,7 +141,7 @@ void GLFlat::SetupLights(HWDrawInfo *di, FLightNode * node, FDynLightData &light Plane p; lightdata.Clear(); - if (renderstyle == STYLE_Add && !level.lightadditivesurfaces) + if (renderstyle == STYLE_Add && !di->Level->lightadditivesurfaces) { dynlightindex = -1; return; // no lights on additively blended surfaces. @@ -182,7 +182,7 @@ void GLFlat::SetupLights(HWDrawInfo *di, FLightNode * node, FDynLightData &light void GLFlat::DrawSubsectors(HWDrawInfo *di, FRenderState &state) { - if (level.HasDynamicLights && screen->BuffersArePersistent() && !di->isFullbrightScene()) + if (di->Level->HasDynamicLights && screen->BuffersArePersistent() && !di->isFullbrightScene()) { SetupLights(di, section->lighthead, lightdata, sector->PortalGroup); } @@ -377,7 +377,7 @@ inline void GLFlat::PutFlat(HWDrawInfo *di, bool fog) } else if (!screen->BuffersArePersistent()) { - if (level.HasDynamicLights && gltexture != nullptr && !di->isFullbrightScene() && !(hacktype & (SSRF_PLANEHACK|SSRF_FLOODHACK)) ) + if (di->Level->HasDynamicLights && gltexture != nullptr && !di->isFullbrightScene() && !(hacktype & (SSRF_PLANEHACK|SSRF_FLOODHACK)) ) { SetupLights(di, section->lighthead, lightdata, sector->PortalGroup); } @@ -484,13 +484,13 @@ void GLFlat::ProcessSector(HWDrawInfo *di, sector_t * frontsector, int which) #endif // Get the real sector for this one. - sector = &level.sectors[frontsector->sectornum]; + sector = &di->Level->sectors[frontsector->sectornum]; extsector_t::xfloor &x = sector->e->XFloor; dynlightindex = -1; hacktype = (which & (SSRF_PLANEHACK|SSRF_FLOODHACK)); uint8_t sink; - uint8_t &srf = hacktype? sink : di->section_renderflags[level.sections.SectionIndex(section)]; + uint8_t &srf = hacktype? sink : di->section_renderflags[di->Level->sections.SectionIndex(section)]; const auto &vp = di->Viewpoint; // @@ -615,8 +615,6 @@ void GLFlat::ProcessSector(HWDrawInfo *di, sector_t * frontsector, int which) stack = false; if ((which & SSRF_RENDER3DPLANES) && x.ffloors.Size()) { - player_t * player = players[consoleplayer].camera->player; - renderflags = SSRF_RENDER3DPLANES; srf |= SSRF_RENDER3DPLANES; // 3d-floors must not overlap! diff --git a/src/hwrenderer/scene/hw_portal.cpp b/src/rendering/hwrenderer/scene/hw_portal.cpp similarity index 98% rename from src/hwrenderer/scene/hw_portal.cpp rename to src/rendering/hwrenderer/scene/hw_portal.cpp index c31cda01b3..a9b0b25150 100644 --- a/src/hwrenderer/scene/hw_portal.cpp +++ b/src/rendering/hwrenderer/scene/hw_portal.cpp @@ -625,7 +625,7 @@ bool HWLineToLinePortal::Setup(HWDrawInfo *di, FRenderState &rstate, Clipper *cl line_t *line = lines[i].seg->linedef->getPortalDestination(); subsector_t *sub; if (line->sidedef[0]->Flags & WALLF_POLYOBJ) - sub = R_PointInSubsector(line->v1->fixX(), line->v1->fixY()); + sub = di->Level->PointInRenderSubsector(line->v1->fixX(), line->v1->fixY()); else sub = line->frontsector->subsectors[0]; di->CurrentMapSections.Set(sub->mapsection); } @@ -733,7 +733,7 @@ const char *HWSkyboxPortal::GetName() { return "Skybox"; } static uint8_t SetCoverage(HWDrawInfo *di, void *node) { - if (level.nodes.Size() == 0) + if (di->Level->nodes.Size() == 0) { return 0; } @@ -759,12 +759,12 @@ void HWSectorStackPortal::SetupCoverage(HWDrawInfo *di) int plane = origin->plane; for (int j = 0; jportalcoverage[plane].sscount; j++) { - subsector_t *dsub = &::level.subsectors[sub->portalcoverage[plane].subsectors[j]]; + subsector_t *dsub = &di->Level->subsectors[sub->portalcoverage[plane].subsectors[j]]; di->CurrentMapSections.Set(dsub->mapsection); di->ss_renderflags[dsub->Index()] |= SSRF_SEEN; } } - SetCoverage(di, ::level.HeadNode()); + SetCoverage(di, di->Level->HeadNode()); } //----------------------------------------------------------------------------- @@ -791,7 +791,7 @@ bool HWSectorStackPortal::Setup(HWDrawInfo *di, FRenderState &rstate, Clipper *c // If the viewpoint is not within the portal, we need to invalidate the entire clip area. // The portal will re-validate the necessary parts when its subsectors get traversed. - subsector_t *sub = R_PointInSubsector(vp.Pos); + subsector_t *sub = di->Level->PointInRenderSubsector(vp.Pos); if (!(di->ss_renderflags[sub->Index()] & SSRF_SEEN)) { clipper->SafeAddClipRange(0, ANGLE_MAX); @@ -948,7 +948,6 @@ void HWHorizonPortal::DrawContents(HWDrawInfo *di, FRenderState &state) Clocker c(PortalAll); FMaterial * gltexture; - player_t * player = &players[consoleplayer]; GLSectorPlane * sp = &origin->plane; auto &vp = di->Viewpoint; @@ -1020,7 +1019,7 @@ void HWEEHorizonPortal::DrawContents(HWDrawInfo *di, FRenderState &state) sector->GetTexture(sector_t::ceiling) == skyflatnum) { GLSkyInfo skyinfo; - skyinfo.init(sector->sky, 0); + skyinfo.init(di, sector->sky, 0); HWSkyPortal sky(screen->mSkyData, mState, &skyinfo, true); sky.DrawContents(di, state); } diff --git a/src/hwrenderer/scene/hw_portal.h b/src/rendering/hwrenderer/scene/hw_portal.h similarity index 99% rename from src/hwrenderer/scene/hw_portal.h rename to src/rendering/hwrenderer/scene/hw_portal.h index 879420c106..f5efdca28e 100644 --- a/src/hwrenderer/scene/hw_portal.h +++ b/src/rendering/hwrenderer/scene/hw_portal.h @@ -28,7 +28,7 @@ struct GLSkyInfo { return !!memcmp(this, &inf, sizeof(*this)); } - void init(int sky1, PalEntry fadecolor); + void init(HWDrawInfo *di, int sky1, PalEntry fadecolor); }; struct GLHorizonInfo diff --git a/src/hwrenderer/scene/hw_renderhacks.cpp b/src/rendering/hwrenderer/scene/hw_renderhacks.cpp similarity index 98% rename from src/hwrenderer/scene/hw_renderhacks.cpp rename to src/rendering/hwrenderer/scene/hw_renderhacks.cpp index 76add43c9b..dc4e11ca43 100644 --- a/src/hwrenderer/scene/hw_renderhacks.cpp +++ b/src/rendering/hwrenderer/scene/hw_renderhacks.cpp @@ -55,28 +55,28 @@ void HWDrawInfo::DispatchRenderHacks() glflat.section = nullptr; while (ofi.NextPair(pair)) { - auto sec = hw_FakeFlat(&level.sectors[pair->Key], in_area, false); + auto sec = hw_FakeFlat(&Level->sectors[pair->Key], in_area, false); glflat.ProcessSector(this, sec, SSRF_RENDERFLOOR | SSRF_PLANEHACK); } TMap::Iterator oci(otherCeilingPlanes); while (oci.NextPair(pair)) { - auto sec = hw_FakeFlat(&level.sectors[pair->Key], in_area, false); + auto sec = hw_FakeFlat(&Level->sectors[pair->Key], in_area, false); glflat.ProcessSector(this, sec, SSRF_RENDERCEILING | SSRF_PLANEHACK); } TMap::Iterator ffi(floodFloorSegs); while (ffi.NextPair(fpair)) { - auto sec = hw_FakeFlat(&level.sectors[fpair->Key], in_area, false); + auto sec = hw_FakeFlat(&Level->sectors[fpair->Key], in_area, false); glflat.ProcessSector(this, sec, SSRF_RENDERFLOOR | SSRF_FLOODHACK); } TMap::Iterator fci(floodCeilingSegs); while (fci.NextPair(fpair)) { - auto sec = hw_FakeFlat(&level.sectors[fpair->Key], in_area, false); + auto sec = hw_FakeFlat(&Level->sectors[fpair->Key], in_area, false); glflat.ProcessSector(this, sec, SSRF_RENDERCEILING | SSRF_FLOODHACK); } } @@ -108,7 +108,7 @@ static gl_floodrendernode *NewFloodRenderNode() int HWDrawInfo::SetupLightsForOtherPlane(subsector_t * sub, FDynLightData &lightdata, const secplane_t *plane) { - if (level.HasDynamicLights && !isFullbrightScene()) + if (Level->HasDynamicLights && !isFullbrightScene()) { Plane p; @@ -170,8 +170,8 @@ void HWDrawInfo::AddOtherFloorPlane(int sector, gl_subsectorrendernode * node) auto pNode = otherFloorPlanes.CheckKey(sector); node->next = pNode? *pNode : nullptr; - node->lightindex = SetupLightsForOtherPlane(node->sub, lightdata, &level.sectors[sector].floorplane); - node->vertexindex = CreateOtherPlaneVertices(node->sub, &level.sectors[sector].floorplane); + node->lightindex = SetupLightsForOtherPlane(node->sub, lightdata, &Level->sectors[sector].floorplane); + node->vertexindex = CreateOtherPlaneVertices(node->sub, &Level->sectors[sector].floorplane); otherFloorPlanes[sector] = node; } @@ -180,8 +180,8 @@ void HWDrawInfo::AddOtherCeilingPlane(int sector, gl_subsectorrendernode * node) auto pNode = otherCeilingPlanes.CheckKey(sector); node->next = pNode? *pNode : nullptr; - node->lightindex = SetupLightsForOtherPlane(node->sub, lightdata, &level.sectors[sector].ceilingplane); - node->vertexindex = CreateOtherPlaneVertices(node->sub, &level.sectors[sector].ceilingplane); + node->lightindex = SetupLightsForOtherPlane(node->sub, lightdata, &Level->sectors[sector].ceilingplane); + node->vertexindex = CreateOtherPlaneVertices(node->sub, &Level->sectors[sector].ceilingplane); otherCeilingPlanes[sector] = node; } @@ -837,7 +837,7 @@ void HWDrawInfo::PrepareLowerGap(seg_t * seg) void HWDrawInfo::PrepareUnhandledMissingTextures() { - if (!level.notexturefill) + if (!Level->notexturefill) { validcount++; for (int i = MissingUpperSegs.Size() - 1; i >= 0; i--) @@ -894,7 +894,7 @@ void HWDrawInfo::PrepareUnhandledMissingTextures() void HWDrawInfo::AddHackedSubsector(subsector_t * sub) { - if (!(level.maptype == MAPTYPE_HEXEN)) + if (!(Level->maptype == MAPTYPE_HEXEN)) { SubsectorHackInfo sh={sub, 0}; SubsectorHacks.Push (sh); @@ -1123,7 +1123,7 @@ void HWDrawInfo::ProcessLowerMinisegs(TArray &lowersegs) void HWDrawInfo::HandleHackedSubsectors() { - viewsubsector = R_PointInSubsector(Viewpoint.Pos); + viewsubsector = Level->PointInRenderSubsector(Viewpoint.Pos); // Each subsector may only be processed once in this loop! validcount++; diff --git a/src/hwrenderer/scene/hw_renderstate.cpp b/src/rendering/hwrenderer/scene/hw_renderstate.cpp similarity index 96% rename from src/hwrenderer/scene/hw_renderstate.cpp rename to src/rendering/hwrenderer/scene/hw_renderstate.cpp index 6f4bc036d9..ec183e3fb5 100644 --- a/src/hwrenderer/scene/hw_renderstate.cpp +++ b/src/rendering/hwrenderer/scene/hw_renderstate.cpp @@ -100,7 +100,7 @@ void HWDrawInfo::SetFog(FRenderState &state, int lightlevel, int rellight, bool PalEntry fogcolor; float fogdensity; - if (level.flags&LEVEL_HASFADETABLE) + if (Level->flags&LEVEL_HASFADETABLE) { fogdensity = 70; fogcolor = 0x808080; @@ -150,7 +150,7 @@ void HWDrawInfo::SetFog(FRenderState &state, int lightlevel, int rellight, bool state.SetFog(fogcolor, fogdensity); // Korshun: fullbright fog like in software renderer. - if (isSoftwareLighting() && cmap->BlendFactor == 0 && level.brightfog && fogdensity != 0 && fogcolor != 0) + if (isSoftwareLighting() && cmap->BlendFactor == 0 && Level->brightfog && fogdensity != 0 && fogcolor != 0) { state.SetSoftLightLevel(255); } diff --git a/src/hwrenderer/scene/hw_renderstate.h b/src/rendering/hwrenderer/scene/hw_renderstate.h similarity index 100% rename from src/hwrenderer/scene/hw_renderstate.h rename to src/rendering/hwrenderer/scene/hw_renderstate.h diff --git a/src/hwrenderer/scene/hw_sky.cpp b/src/rendering/hwrenderer/scene/hw_sky.cpp similarity index 91% rename from src/hwrenderer/scene/hw_sky.cpp rename to src/rendering/hwrenderer/scene/hw_sky.cpp index d2a8c41c52..7b4be86311 100644 --- a/src/hwrenderer/scene/hw_sky.cpp +++ b/src/rendering/hwrenderer/scene/hw_sky.cpp @@ -41,16 +41,16 @@ CVAR(Bool,gl_noskyboxes, false, 0) // //========================================================================== -void GLSkyInfo::init(int sky1, PalEntry FadeColor) +void GLSkyInfo::init(HWDrawInfo *di, int sky1, PalEntry FadeColor) { memset(this, 0, sizeof(*this)); if ((sky1 & PL_SKYFLAT) && (sky1 & (PL_SKYFLAT - 1))) { - const line_t *l = &level.lines[(sky1&(PL_SKYFLAT - 1)) - 1]; + const line_t *l = &di->Level->lines[(sky1&(PL_SKYFLAT - 1)) - 1]; const side_t *s = l->sidedef[0]; int pos; - if (level.flags & LEVEL_SWAPSKIES && s->GetTexture(side_t::bottom).isValid()) + if (di->Level->flags & LEVEL_SWAPSKIES && s->GetTexture(side_t::bottom).isValid()) { pos = side_t::bottom; } @@ -70,29 +70,29 @@ void GLSkyInfo::init(int sky1, PalEntry FadeColor) else { normalsky: - if (level.flags&LEVEL_DOUBLESKY) + if (di->Level->flags&LEVEL_DOUBLESKY) { - texture[1] = FMaterial::ValidateTexture(sky1texture, false, true); - x_offset[1] = hw_sky1pos; + texture[1] = FMaterial::ValidateTexture(di->Level->skytexture1, false, true); + x_offset[1] = di->Level->hw_sky1pos; doublesky = true; } - if ((level.flags&LEVEL_SWAPSKIES || (sky1 == PL_SKYFLAT) || (level.flags&LEVEL_DOUBLESKY)) && - sky2texture != sky1texture) // If both skies are equal use the scroll offset of the first! + if ((di->Level->flags&LEVEL_SWAPSKIES || (sky1 == PL_SKYFLAT) || (di->Level->flags&LEVEL_DOUBLESKY)) && + di->Level->skytexture2 != di->Level->skytexture1) // If both skies are equal use the scroll offset of the first! { - texture[0] = FMaterial::ValidateTexture(sky2texture, false, true); - skytexno1 = sky2texture; + texture[0] = FMaterial::ValidateTexture(di->Level->skytexture2, false, true); + skytexno1 = di->Level->skytexture2; sky2 = true; - x_offset[0] = hw_sky2pos; + x_offset[0] = di->Level->hw_sky2pos; } else if (!doublesky) { - texture[0] = FMaterial::ValidateTexture(sky1texture, false, true); - skytexno1 = sky1texture; - x_offset[0] = hw_sky1pos; + texture[0] = FMaterial::ValidateTexture(di->Level->skytexture1, false, true); + skytexno1 = di->Level->skytexture1; + x_offset[0] = di->Level->hw_sky1pos; } } - if (level.skyfog > 0) + if (di->Level->skyfog > 0) { fadecolor = FadeColor; fadecolor.a = 0; @@ -119,7 +119,7 @@ void GLWall::SkyPlane(HWDrawInfo *di, sector_t *sector, int plane, bool allowref if ((sportal == nullptr && sector->GetTexture(plane) == skyflatnum) || (gl_noskyboxes && sportal != nullptr && sportal->mType == PORTS_SKYVIEWPOINT)) { GLSkyInfo skyinfo; - skyinfo.init(sector->sky, Colormap.FadeColor); + skyinfo.init(di, sector->sky, Colormap.FadeColor); ptype = PORTALTYPE_SKY; sky = &skyinfo; PutPortal(di, ptype, plane); @@ -189,7 +189,7 @@ void GLWall::SkyLine(HWDrawInfo *di, sector_t *fs, line_t *line) } else { - skyinfo.init(fs->sky, Colormap.FadeColor); + skyinfo.init(di, fs->sky, Colormap.FadeColor); ptype = PORTALTYPE_SKY; sky = &skyinfo; } diff --git a/src/hwrenderer/scene/hw_skydome.cpp b/src/rendering/hwrenderer/scene/hw_skydome.cpp similarity index 97% rename from src/hwrenderer/scene/hw_skydome.cpp rename to src/rendering/hwrenderer/scene/hw_skydome.cpp index f0436ca530..262ded1ed1 100644 --- a/src/hwrenderer/scene/hw_skydome.cpp +++ b/src/rendering/hwrenderer/scene/hw_skydome.cpp @@ -66,6 +66,7 @@ #include "hwrenderer/textures/hw_material.h" #include "hw_skydome.h" #include "hw_renderstate.h" +#include "hw_drawinfo.h" #include "hwrenderer/data/buffers.h" //----------------------------------------------------------------------------- @@ -281,7 +282,7 @@ void FSkyVertexBuffer::CreateDome() // //----------------------------------------------------------------------------- -void FSkyVertexBuffer::SetupMatrices(FMaterial *tex, float x_offset, float y_offset, bool mirror, int mode, VSMatrix &modelMatrix, VSMatrix &textureMatrix) +void FSkyVertexBuffer::SetupMatrices(HWDrawInfo *di, FMaterial *tex, float x_offset, float y_offset, bool mirror, int mode, VSMatrix &modelMatrix, VSMatrix &textureMatrix) { int texw = tex->TextureWidth(); int texh = tex->TextureHeight(); @@ -291,7 +292,7 @@ void FSkyVertexBuffer::SetupMatrices(FMaterial *tex, float x_offset, float y_off float xscale = texw < 1024.f ? floor(1024.f / float(texw)) : 1.f; float yscale = 1.f; - if (texh <= 128 && (level.flags & LEVEL_FORCETILEDSKY)) + if (texh <= 128 && (di->Level->flags & LEVEL_FORCETILEDSKY)) { modelMatrix.translate(0.f, (-40 + tex->tex->GetSkyOffset() + skyoffset)*skyoffsetfactor, 0.f); modelMatrix.scale(1.f, 1.2f * 1.17f, 1.f); diff --git a/src/hwrenderer/scene/hw_skydome.h b/src/rendering/hwrenderer/scene/hw_skydome.h similarity index 86% rename from src/hwrenderer/scene/hw_skydome.h rename to src/rendering/hwrenderer/scene/hw_skydome.h index ed130084cb..fc850aeeb2 100644 --- a/src/hwrenderer/scene/hw_skydome.h +++ b/src/rendering/hwrenderer/scene/hw_skydome.h @@ -2,10 +2,13 @@ #include "v_palette.h" #include "r_data/matrix.h" +#include "hwrenderer/data/buffers.h" class FMaterial; class FRenderState; class IVertexBuffer; +struct HWSkyPortal; +struct HWDrawInfo; struct FSkyVertex { @@ -34,7 +37,6 @@ struct FSkyVertex }; -struct HWSkyPortal; class FSkyVertexBuffer { friend struct HWSkyPortal; @@ -68,7 +70,7 @@ public: FSkyVertexBuffer(); ~FSkyVertexBuffer(); - void SetupMatrices(FMaterial *tex, float x_offset, float y_offset, bool mirror, int mode, VSMatrix &modelmatrix, VSMatrix &textureMatrix); + void SetupMatrices(HWDrawInfo *di, FMaterial *tex, float x_offset, float y_offset, bool mirror, int mode, VSMatrix &modelmatrix, VSMatrix &textureMatrix); std::pair GetBufferObjects() const { return std::make_pair(mVertexBuffer, nullptr); diff --git a/src/hwrenderer/scene/hw_skyportal.cpp b/src/rendering/hwrenderer/scene/hw_skyportal.cpp similarity index 91% rename from src/hwrenderer/scene/hw_skyportal.cpp rename to src/rendering/hwrenderer/scene/hw_skyportal.cpp index 88e9c6a833..bba4b60eea 100644 --- a/src/hwrenderer/scene/hw_skyportal.cpp +++ b/src/rendering/hwrenderer/scene/hw_skyportal.cpp @@ -58,7 +58,7 @@ void HWSkyPortal::RenderDome(HWDrawInfo *di, FRenderState &state, FMaterial * te state.EnableModelMatrix(true); state.EnableTextureMatrix(true); - vertexBuffer->SetupMatrices(tex, x_offset, y_offset, mirror, mode, state.mModelMatrix, state.mTextureMatrix); + vertexBuffer->SetupMatrices(di, tex, x_offset, y_offset, mirror, mode, state.mModelMatrix, state.mTextureMatrix); } int rc = vertexBuffer->mRows + 1; @@ -104,9 +104,9 @@ void HWSkyPortal::RenderBox(HWDrawInfo *di, FRenderState &state, FTextureID texn state.mModelMatrix.loadIdentity(); if (!sky2) - state.mModelMatrix.rotate(-180.0f+x_offset, ::level.info->skyrotatevector.X, ::level.info->skyrotatevector.Z, ::level.info->skyrotatevector.Y); + state.mModelMatrix.rotate(-180.0f+x_offset, di->Level->info->skyrotatevector.X, di->Level->info->skyrotatevector.Z, di->Level->info->skyrotatevector.Y); else - state.mModelMatrix.rotate(-180.0f+x_offset, ::level.info->skyrotatevector2.X, ::level.info->skyrotatevector2.Z, ::level.info->skyrotatevector2.Y); + state.mModelMatrix.rotate(-180.0f+x_offset, di->Level->info->skyrotatevector2.X, di->Level->info->skyrotatevector2.Z, di->Level->info->skyrotatevector2.Y); if (sb->faces[5]) { @@ -203,10 +203,10 @@ void HWSkyPortal::DrawContents(HWDrawInfo *di, FRenderState &state) RenderDome(di, state, origin->texture[1], origin->x_offset[1], origin->y_offset, false, FSkyVertexBuffer::SKYMODE_SECONDLAYER); } - if (::level.skyfog>0 && !di->isFullbrightScene() && (origin->fadecolor & 0xffffff) != 0) + if (di->Level->skyfog>0 && !di->isFullbrightScene() && (origin->fadecolor & 0xffffff) != 0) { PalEntry FadeColor = origin->fadecolor; - FadeColor.a = clamp(::level.skyfog, 0, 255); + FadeColor.a = clamp(di->Level->skyfog, 0, 255); state.EnableTexture(false); state.SetObjectColor(FadeColor); diff --git a/src/hwrenderer/scene/hw_spritelight.cpp b/src/rendering/hwrenderer/scene/hw_spritelight.cpp similarity index 96% rename from src/hwrenderer/scene/hw_spritelight.cpp rename to src/rendering/hwrenderer/scene/hw_spritelight.cpp index f3058cf53f..028c2f03dc 100644 --- a/src/hwrenderer/scene/hw_spritelight.cpp +++ b/src/rendering/hwrenderer/scene/hw_spritelight.cpp @@ -67,13 +67,13 @@ void HWDrawInfo::GetDynSpriteLight(AActor *self, float x, float y, float z, FLig // This is a performance critical section of code where we cannot afford to let the compiler decide whether to inline the function or not. // This will do the calculations explicitly rather than calling one of AActor's utility functions. - if (level.Displacements.size > 0) + if (Level->Displacements.size > 0) { int fromgroup = light->Sector->PortalGroup; int togroup = portalgroup; if (fromgroup == togroup || fromgroup == 0 || togroup == 0) goto direct; - DVector2 offset = level.Displacements.getOffset(fromgroup, togroup); + DVector2 offset = Level->Displacements.getOffset(fromgroup, togroup); L = FVector3(x - (float)(light->X() + offset.X), y - (float)(light->Y() + offset.Y), z - (float)light->Z()); } else @@ -160,7 +160,7 @@ void hw_GetDynModelLight(AActor *self, FDynLightData &modellightdata) float radiusSquared = (float)(self->renderradius * self->renderradius); dl_validcount++; - BSPWalkCircle(x, y, radiusSquared, [&](subsector_t *subsector) // Iterate through all subsectors potentially touched by actor + BSPWalkCircle(self->Level, x, y, radiusSquared, [&](subsector_t *subsector) // Iterate through all subsectors potentially touched by actor { auto section = subsector->section; if (section->validcount == dl_validcount) return; // already done from a previous subsector. diff --git a/src/hwrenderer/scene/hw_sprites.cpp b/src/rendering/hwrenderer/scene/hw_sprites.cpp similarity index 97% rename from src/hwrenderer/scene/hw_sprites.cpp rename to src/rendering/hwrenderer/scene/hw_sprites.cpp index b7d8fb581c..14c6d60f0a 100644 --- a/src/hwrenderer/scene/hw_sprites.cpp +++ b/src/rendering/hwrenderer/scene/hw_sprites.cpp @@ -127,7 +127,7 @@ void GLSprite::DrawSprite(HWDrawInfo *di, FRenderState &state, bool translucent) state.AlphaFunc(Alpha_GEqual, gl_mask_sprite_threshold); state.SetColor(0.2f, 0.2f, 0.2f, fuzzalpha, Colormap.Desaturation); additivefog = true; - lightlist = nullptr; // the fuzz effect does not use the sector's light level so splitting is not needed. + lightlist = nullptr; // the fuzz effect does not use the sector's light di->Level-> so splitting is not needed. } else if (RenderStyle.BlendOp == STYLEOP_Add && RenderStyle.DestAlpha == STYLEALPHA_One) { @@ -142,7 +142,7 @@ void GLSprite::DrawSprite(HWDrawInfo *di, FRenderState &state, bool translucent) } if (RenderStyle.BlendOp != STYLEOP_Shadow) { - if (level.HasDynamicLights && !di->isFullbrightScene() && !fullbright) + if (di->Level->HasDynamicLights && !di->isFullbrightScene() && !fullbright) { if (dynlightindex == -1) // only set if we got no light buffer index. This covers all cases where sprite lighting is used. { @@ -224,7 +224,7 @@ void GLSprite::DrawSprite(HWDrawInfo *di, FRenderState &state, bool translucent) FColormap thiscm; thiscm.CopyFog(Colormap); thiscm.CopyFrom3DLight(&(*lightlist)[i]); - if (level.flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) + if (di->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) { thiscm.Decolorize(); } @@ -459,7 +459,7 @@ bool GLSprite::CalculateVertices(HWDrawInfo *di, FVector3 *v, DVector3 *vp) inline void GLSprite::PutSprite(HWDrawInfo *di, bool translucent) { // That's a lot of checks... - if (modelframe && !modelframe->isVoxel && RenderStyle.BlendOp != STYLEOP_Shadow && gl_light_sprites && level.HasDynamicLights && !di->isFullbrightScene() && !fullbright) + if (modelframe && !modelframe->isVoxel && RenderStyle.BlendOp != STYLEOP_Shadow && gl_light_sprites && di->Level->HasDynamicLights && !di->isFullbrightScene() && !fullbright) { hw_GetDynModelLight(actor, lightdata); dynlightindex = screen->mLights->UploadLights(lightdata); @@ -528,7 +528,7 @@ void GLSprite::SplitSprite(HWDrawInfo *di, sector_t * frontsector, bool transluc copySprite.lightlevel = hw_ClampLight(*lightlist[i].p_lightlevel); copySprite.Colormap.CopyLight(lightlist[i].extra_colormap); - if (level.flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) + if (di->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) { copySprite.Colormap.Decolorize(); } @@ -696,13 +696,13 @@ void GLSprite::Process(HWDrawInfo *di, AActor* thing, sector_t * sector, area_t // [RH] Interpolate the sprite's position to make it look smooth DVector3 thingpos = thing->InterpolatedPosition(vp.TicFrac); - if (thruportal == 1) thingpos += level.Displacements.getOffset(thing->Sector->PortalGroup, sector->PortalGroup); + if (thruportal == 1) thingpos += di->Level->Displacements.getOffset(thing->Sector->PortalGroup, sector->PortalGroup); // Some added checks if the camera actor is not supposed to be seen. It can happen that some portal setup has this actor in view in which case it may not be skipped here if (thing == camera && !vp.showviewer) { DVector3 thingorigin = thing->Pos(); - if (thruportal == 1) thingorigin += level.Displacements.getOffset(thing->Sector->PortalGroup, sector->PortalGroup); + if (thruportal == 1) thingorigin += di->Level->Displacements.getOffset(thing->Sector->PortalGroup, sector->PortalGroup); if (fabs(thingorigin.X - vp.ActorPos.X) < 2 && fabs(thingorigin.Y - vp.ActorPos.Y) < 2) return; } // Thing is invisible if close to the camera. @@ -753,7 +753,6 @@ void GLSprite::Process(HWDrawInfo *di, AActor* thing, sector_t * sector, area_t else Angles = thing->Angles; - player_t *player = &players[consoleplayer]; FloatRect r; if (sector->sectornum != thing->Sector->sectornum && !thruportal) @@ -773,7 +772,7 @@ void GLSprite::Process(HWDrawInfo *di, AActor* thing, sector_t * sector, area_t x = thingpos.X; z = thingpos.Z; y = thingpos.Y; - if (spritetype == RF_FACESPRITE) z -= thing->Floorclip; // wall and flat sprites are to be considered level geometry so this may not apply. + if (spritetype == RF_FACESPRITE) z -= thing->Floorclip; // wall and flat sprites are to be considered di->Level-> geometry so this may not apply. // [RH] Make floatbobbing a renderer-only effect. if (thing->flags2 & MF2_FLOATBOB) @@ -946,7 +945,7 @@ void GLSprite::Process(HWDrawInfo *di, AActor* thing, sector_t * sector, area_t Colormap = rendersector->Colormap; if (fullbright) { - if (rendersector == &level.sectors[rendersector->sectornum] || in_area != area_below) + if (rendersector == &di->Level->sectors[rendersector->sectornum] || in_area != area_below) // under water areas keep their color for fullbright objects { // Only make the light white but keep everything else (fog, desaturation and Boom colormap.) @@ -960,7 +959,7 @@ void GLSprite::Process(HWDrawInfo *di, AActor* thing, sector_t * sector, area_t Colormap.LightColor.b = (3 * Colormap.LightColor.b + 0xff) / 4; } } - else if (level.flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) + else if (di->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) { Colormap.Decolorize(); } @@ -1069,7 +1068,6 @@ void GLSprite::Process(HWDrawInfo *di, AActor* thing, sector_t * sector, area_t const bool drawWithXYBillboard = (!(actor->renderflags & RF_FORCEYBILLBOARD) && (actor->renderflags & RF_SPRITETYPEMASK) == RF_FACESPRITE - && players[consoleplayer].camera && (gl_billboard_mode == 1 || actor->renderflags & RF_FORCEXYBILLBOARD)); @@ -1113,8 +1111,6 @@ void GLSprite::Process(HWDrawInfo *di, AActor* thing, sector_t * sector, area_t void GLSprite::ProcessParticle (HWDrawInfo *di, particle_t *particle, sector_t *sector)//, int shade, int fakeside) { - player_t *player=&players[consoleplayer]; - if (particle->alpha==0) return; lightlevel = hw_ClampLight(sector->GetTexture(sector_t::ceiling) == skyflatnum ? @@ -1143,7 +1139,7 @@ void GLSprite::ProcessParticle (HWDrawInfo *di, particle_t *particle, sector_t * break; } } - if (level.flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) + if (di->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) { Colormap.Decolorize(); // ZDoom never applies colored light to particles. } @@ -1198,7 +1194,7 @@ void GLSprite::ProcessParticle (HWDrawInfo *di, particle_t *particle, sector_t * const auto &vp = di->Viewpoint; double timefrac = vp.TicFrac; - if (paused || bglobal.freeze || (level.flags2 & LEVEL2_FROZEN)) + if (paused || di->Level->isFrozen()) timefrac = 0.; float xvf = (particle->Vel.X) * timefrac; float yvf = (particle->Vel.Y) * timefrac; diff --git a/src/hwrenderer/scene/hw_viewpointuniforms.h b/src/rendering/hwrenderer/scene/hw_viewpointuniforms.h similarity index 100% rename from src/hwrenderer/scene/hw_viewpointuniforms.h rename to src/rendering/hwrenderer/scene/hw_viewpointuniforms.h diff --git a/src/hwrenderer/scene/hw_walls.cpp b/src/rendering/hwrenderer/scene/hw_walls.cpp similarity index 97% rename from src/hwrenderer/scene/hw_walls.cpp rename to src/rendering/hwrenderer/scene/hw_walls.cpp index c110378948..91ec1a5f8f 100644 --- a/src/hwrenderer/scene/hw_walls.cpp +++ b/src/rendering/hwrenderer/scene/hw_walls.cpp @@ -281,7 +281,7 @@ void GLWall::DrawWall(HWDrawInfo *di, FRenderState &state, bool translucent) { if (screen->BuffersArePersistent()) { - if (level.HasDynamicLights && !di->isFullbrightScene() && gltexture != nullptr) + if (di->Level->HasDynamicLights && !di->isFullbrightScene() && gltexture != nullptr) { SetupLights(di, lightdata); } @@ -322,7 +322,7 @@ void GLWall::SetupLights(HWDrawInfo *di, FDynLightData &lightdata) { lightdata.Clear(); - if (RenderStyle == STYLE_Add && !level.lightadditivesurfaces) return; // no lights on additively blended surfaces. + if (RenderStyle == STYLE_Add && !di->Level->lightadditivesurfaces) return; // no lights on additively blended surfaces. // check for wall types which cannot have dynamic lights on them (portal types never get here so they don't need to be checked.) switch (type) @@ -456,7 +456,7 @@ void GLWall::PutWall(HWDrawInfo *di, bool translucent) if (!screen->BuffersArePersistent()) { - if (level.HasDynamicLights && !di->isFullbrightScene() && gltexture != nullptr) + if (di->Level->HasDynamicLights && !di->isFullbrightScene() && gltexture != nullptr) { SetupLights(di, lightdata); } @@ -567,7 +567,7 @@ void GLWall::PutPortal(HWDrawInfo *di, int ptype, int plane) if (!portal) { line_t *otherside = lineportal->lines[0]->mDestination; - if (otherside != nullptr && otherside->portalindex < level.linePortals.Size()) + if (otherside != nullptr && otherside->portalindex < di->Level->linePortals.Size()) { di->ProcessActorsInPortal(otherside->getPortal()->mGroup, di->in_area); } @@ -604,7 +604,7 @@ void GLWall::PutPortal(HWDrawInfo *di, int ptype, int plane) void GLWall::Put3DWall(HWDrawInfo *di, lightlist_t * lightlist, bool translucent) { - // only modify the light level if it doesn't originate from the seg's frontsector. This is to account for light transferring effects + // only modify the light di->Level-> if it doesn't originate from the seg's frontsector. This is to account for light transferring effects if (lightlist->p_lightlevel != &seg->sidedef->sector->lightlevel) { lightlevel = hw_ClampLight(*lightlist->p_lightlevel); @@ -1095,6 +1095,12 @@ void GLWall::CheckTexturePosition(FTexCoordInfo *tci) } } + +static void GetTexCoordInfo(FMaterial *tex, FTexCoordInfo *tci, side_t *side, int texpos) +{ + tci->GetFromTexture(tex->tex, (float)side->GetTextureXScale(texpos), (float)side->GetTextureYScale(texpos), !!(side->GetLevel()->flags3 & LEVEL3_FORCEWORLDPANNING)); +} + //========================================================================== // // Handle one sided walls, upper and lower texture @@ -1129,7 +1135,7 @@ void GLWall::DoTexture(HWDrawInfo *di, int _type,seg_t * seg, int peg, FTexCoordInfo tci; - gltexture->GetTexCoordInfo(&tci, seg->sidedef, texpos); + GetTexCoordInfo(gltexture, &tci, seg->sidedef, texpos); type = _type; @@ -1190,7 +1196,7 @@ void GLWall::DoMidTexture(HWDrawInfo *di, seg_t * seg, bool drawfogboundary, // Align the texture to the ORIGINAL sector's height!! // At this point slopes don't matter because they don't affect the texture's z-position - gltexture->GetTexCoordInfo(&tci, seg->sidedef, side_t::mid); + GetTexCoordInfo(gltexture, &tci, seg->sidedef, side_t::mid); if (tci.mRenderHeight < 0) { mirrory = true; @@ -1516,7 +1522,7 @@ void GLWall::BuildFFBlock(HWDrawInfo *di, seg_t * seg, F3DFloor * rover, light = P_GetPlaneLight(rover->target, rover->top.plane, true); Colormap.Clear(); Colormap.LightColor = light->extra_colormap.FadeColor; - // the fog plane defines the light level, not the front sector + // the fog plane defines the light di->Level->, not the front sector lightlevel = hw_ClampLight(*light->p_lightlevel); gltexture = NULL; type = RENDERWALL_FFBLOCK; @@ -1530,19 +1536,19 @@ void GLWall::BuildFFBlock(HWDrawInfo *di, seg_t * seg, F3DFloor * rover, { gltexture = FMaterial::ValidateTexture(seg->sidedef->GetTexture(side_t::top), false, true); if (!gltexture) return; - gltexture->GetTexCoordInfo(&tci, seg->sidedef, side_t::top); + GetTexCoordInfo(gltexture, &tci, seg->sidedef, side_t::top); } else if (rover->flags&FF_LOWERTEXTURE) { gltexture = FMaterial::ValidateTexture(seg->sidedef->GetTexture(side_t::bottom), false, true); if (!gltexture) return; - gltexture->GetTexCoordInfo(&tci, seg->sidedef, side_t::bottom); + GetTexCoordInfo(gltexture, &tci, seg->sidedef, side_t::bottom); } else { gltexture = FMaterial::ValidateTexture(mastersd->GetTexture(side_t::mid), false, true); if (!gltexture) return; - gltexture->GetTexCoordInfo(&tci, mastersd, side_t::mid); + GetTexCoordInfo(gltexture, &tci, mastersd, side_t::mid); } to = (rover->flags&(FF_UPPERTEXTURE | FF_LOWERTEXTURE)) ? 0 : tci.TextureOffset(mastersd->GetTextureXOffset(side_t::mid)); @@ -1867,8 +1873,8 @@ void GLWall::Process(HWDrawInfo *di, seg_t *seg, sector_t * frontsector, sector_ else { // Need these for aligning the textures - realfront = &level.sectors[frontsector->sectornum]; - realback = backsector ? &level.sectors[backsector->sectornum] : NULL; + realfront = &di->Level->sectors[frontsector->sectornum]; + realback = backsector ? &di->Level->sectors[backsector->sectornum] : NULL; segfront = frontsector; segback = backsector; } @@ -1928,7 +1934,7 @@ void GLWall::Process(HWDrawInfo *di, seg_t *seg, sector_t * frontsector, sector_ int rel = 0; int orglightlevel = hw_ClampLight(frontsector->lightlevel); - bool foggy = (!Colormap.FadeColor.isBlack() || level.flags&LEVEL_HASFADETABLE); // fog disables fake contrast + bool foggy = (!Colormap.FadeColor.isBlack() || di->Level->flags&LEVEL_HASFADETABLE); // fog disables fake contrast lightlevel = hw_ClampLight(seg->sidedef->GetLightLevel(foggy, orglightlevel, false, &rel)); if (orglightlevel >= 253) // with the software renderer fake contrast won't be visible above this. { @@ -2062,7 +2068,7 @@ void GLWall::Process(HWDrawInfo *di, seg_t *seg, sector_t * frontsector, sector_ FTexture *tex = TexMan.GetTexture(seg->sidedef->GetTexture(side_t::mid), true); if (tex != NULL) { - if (i_compatflags & COMPATF_MASKEDMIDTEX) + if (di->Level->i_compatflags & COMPATF_MASKEDMIDTEX) { tex = tex->GetRawTexture(); } @@ -2195,7 +2201,7 @@ void GLWall::ProcessLowerMiniseg(HWDrawInfo *di, seg_t *seg, sector_t * frontsec { FTexCoordInfo tci; type = RENDERWALL_BOTTOM; - gltexture->GetTexCoordInfo(&tci, 1.f, 1.f); + tci.GetFromTexture(gltexture->tex, 1, 1, false); SetWallCoordinates(seg, &tci, bfh, bfh, bfh, ffh, ffh, 0); PutWall(di, false); } diff --git a/src/hwrenderer/scene/hw_walls_vertex.cpp b/src/rendering/hwrenderer/scene/hw_walls_vertex.cpp similarity index 100% rename from src/hwrenderer/scene/hw_walls_vertex.cpp rename to src/rendering/hwrenderer/scene/hw_walls_vertex.cpp diff --git a/src/hwrenderer/scene/hw_weapon.cpp b/src/rendering/hwrenderer/scene/hw_weapon.cpp similarity index 97% rename from src/hwrenderer/scene/hw_weapon.cpp rename to src/rendering/hwrenderer/scene/hw_weapon.cpp index 2dd4950634..70940cb51a 100644 --- a/src/hwrenderer/scene/hw_weapon.cpp +++ b/src/rendering/hwrenderer/scene/hw_weapon.cpp @@ -237,7 +237,7 @@ WeaponLighting HWDrawInfo::GetWeaponLighting(sector_t *viewsector, const DVector l.lightlevel = hw_ClampLight(fakesec->lightlevel); // calculate colormap for weapon sprites - if (viewsector->e->XFloor.ffloors.Size() && !(level.flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING)) + if (viewsector->e->XFloor.ffloors.Size() && !(Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING)) { TArray & lightlist = viewsector->e->XFloor.lightlist; for (unsigned i = 0; iColormap; - if (level.flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) l.cm.ClearColor(); + if (Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) l.cm.ClearColor(); } l.lightlevel = CalcLightLevel(l.lightlevel, getExtraLight(), true, 0); @@ -289,7 +289,7 @@ WeaponLighting HWDrawInfo::GetWeaponLighting(sector_t *viewsector, const DVector } // Korshun: fullbright fog in opengl, render weapon sprites fullbright (but don't cancel out the light color!) - if (level.brightfog && ((level.flags&LEVEL_HASFADETABLE) || l.cm.FadeColor != 0)) + if (Level->brightfog && ((Level->flags&LEVEL_HASFADETABLE) || l.cm.FadeColor != 0)) { l.lightlevel = 255; } @@ -488,8 +488,7 @@ void HWDrawInfo::PreparePlayerSprites(sector_t * viewsector, area_t in_area) bool brightflash = false; AActor * playermo = players[consoleplayer].camera; player_t * player = playermo->player; - const bool hudModelStep = IsHUDModelForPlayerAvailable(player); - + const auto &vp = Viewpoint; AActor *camera = vp.camera; @@ -502,6 +501,7 @@ void HWDrawInfo::PreparePlayerSprites(sector_t * viewsector, area_t in_area) (r_deathcamera && camera->health <= 0)) return; + const bool hudModelStep = IsHUDModelForPlayerAvailable(camera->player); WeaponPosition weap = GetWeaponPosition(camera->player, vp.TicFrac); WeaponLighting light = GetWeaponLighting(viewsector, vp.Pos, isFullbrightScene(), in_area, camera->Pos()); @@ -530,7 +530,7 @@ void HWDrawInfo::PreparePlayerSprites(sector_t * viewsector, area_t in_area) hudsprite.dynrgb[0] = hudsprite.dynrgb[1] = hudsprite.dynrgb[2] = 0; hudsprite.lightindex = -1; // set the lighting parameters - if (hudsprite.RenderStyle.BlendOp != STYLEOP_Shadow && level.HasDynamicLights && !isFullbrightScene() && gl_light_sprites) + if (hudsprite.RenderStyle.BlendOp != STYLEOP_Shadow && Level->HasDynamicLights && !isFullbrightScene() && gl_light_sprites) { if (!hudModelStep) { diff --git a/src/hwrenderer/scene/hw_weapon.h b/src/rendering/hwrenderer/scene/hw_weapon.h similarity index 100% rename from src/hwrenderer/scene/hw_weapon.h rename to src/rendering/hwrenderer/scene/hw_weapon.h diff --git a/src/hwrenderer/textures/hw_ihwtexture.h b/src/rendering/hwrenderer/textures/hw_ihwtexture.h similarity index 100% rename from src/hwrenderer/textures/hw_ihwtexture.h rename to src/rendering/hwrenderer/textures/hw_ihwtexture.h diff --git a/src/hwrenderer/textures/hw_material.cpp b/src/rendering/hwrenderer/textures/hw_material.cpp similarity index 100% rename from src/hwrenderer/textures/hw_material.cpp rename to src/rendering/hwrenderer/textures/hw_material.cpp diff --git a/src/hwrenderer/textures/hw_material.h b/src/rendering/hwrenderer/textures/hw_material.h similarity index 90% rename from src/hwrenderer/textures/hw_material.h rename to src/rendering/hwrenderer/textures/hw_material.h index 6bf3e265b6..154abcc89e 100644 --- a/src/hwrenderer/textures/hw_material.h +++ b/src/rendering/hwrenderer/textures/hw_material.h @@ -4,7 +4,7 @@ #include "m_fixed.h" #include "textures/textures.h" -#include "i_system.h" + #include "r_defs.h" EXTERN_CVAR(Bool, gl_precache) @@ -94,16 +94,6 @@ public: *r = mSpriteRect; } - void GetTexCoordInfo(FTexCoordInfo *tci, float x, float y) const - { - tci->GetFromTexture(tex, x, y); - } - - void GetTexCoordInfo(FTexCoordInfo *tci, side_t *side, int texpos) const - { - GetTexCoordInfo(tci, (float)side->GetTextureXScale(texpos), (float)side->GetTextureYScale(texpos)); - } - // This is scaled size in integer units as needed by walls and flats int TextureHeight() const { return mRenderHeight; } int TextureWidth() const { return mRenderWidth; } diff --git a/src/hwrenderer/textures/hw_precache.cpp b/src/rendering/hwrenderer/textures/hw_precache.cpp similarity index 99% rename from src/hwrenderer/textures/hw_precache.cpp rename to src/rendering/hwrenderer/textures/hw_precache.cpp index dc6829dd60..3a1ea46c65 100644 --- a/src/hwrenderer/textures/hw_precache.cpp +++ b/src/rendering/hwrenderer/textures/hw_precache.cpp @@ -34,6 +34,7 @@ #include "textures/skyboxtexture.h" #include "hwrenderer/textures/hw_material.h" #include "image.h" +#include "v_video.h" //========================================================================== diff --git a/src/hwrenderer/textures/hw_texcontainer.h b/src/rendering/hwrenderer/textures/hw_texcontainer.h similarity index 100% rename from src/hwrenderer/textures/hw_texcontainer.h rename to src/rendering/hwrenderer/textures/hw_texcontainer.h diff --git a/src/hwrenderer/utility/hw_clock.cpp b/src/rendering/hwrenderer/utility/hw_clock.cpp similarity index 97% rename from src/hwrenderer/utility/hw_clock.cpp rename to src/rendering/hwrenderer/utility/hw_clock.cpp index 179776a656..67b38ed162 100644 --- a/src/hwrenderer/utility/hw_clock.cpp +++ b/src/rendering/hwrenderer/utility/hw_clock.cpp @@ -32,7 +32,7 @@ ** */ -#include "i_system.h" + #include "g_level.h" #include "c_console.h" #include "c_dispatch.h" @@ -167,8 +167,9 @@ void CheckBench() FString compose; auto &vp = r_viewpoint; + auto Level = vp.ViewLevel; compose.Format("Map %s: \"%s\",\nx = %1.4f, y = %1.4f, z = %1.4f, angle = %1.4f, pitch = %1.4f\n", - level.MapName.GetChars(), level.LevelName.GetChars(), vp.Pos.X, vp.Pos.Y, vp.Pos.Z, vp.Angles.Yaw.Degrees, vp.Angles.Pitch.Degrees); + Level->MapName.GetChars(), Level->LevelName.GetChars(), vp.Pos.X, vp.Pos.Y, vp.Pos.Z, vp.Angles.Yaw.Degrees, vp.Angles.Pitch.Degrees); AppendRenderStats(compose); AppendRenderTimes(compose); diff --git a/src/hwrenderer/utility/hw_clock.h b/src/rendering/hwrenderer/utility/hw_clock.h similarity index 100% rename from src/hwrenderer/utility/hw_clock.h rename to src/rendering/hwrenderer/utility/hw_clock.h diff --git a/src/hwrenderer/utility/hw_cvars.cpp b/src/rendering/hwrenderer/utility/hw_cvars.cpp similarity index 100% rename from src/hwrenderer/utility/hw_cvars.cpp rename to src/rendering/hwrenderer/utility/hw_cvars.cpp diff --git a/src/hwrenderer/utility/hw_cvars.h b/src/rendering/hwrenderer/utility/hw_cvars.h similarity index 96% rename from src/hwrenderer/utility/hw_cvars.h rename to src/rendering/hwrenderer/utility/hw_cvars.h index 1f08a4722d..025880fc43 100644 --- a/src/hwrenderer/utility/hw_cvars.h +++ b/src/rendering/hwrenderer/utility/hw_cvars.h @@ -15,8 +15,6 @@ EXTERN_CVAR(Bool, gl_usefb) EXTERN_CVAR(Int, gl_weaponlight) -EXTERN_CVAR (Bool, gl_lights); - EXTERN_CVAR (Bool, gl_light_sprites); EXTERN_CVAR (Bool, gl_light_particles); EXTERN_CVAR (Bool, gl_light_shadowmap); @@ -69,4 +67,4 @@ EXTERN_CVAR(Bool, gl_billboard_particles) EXTERN_CVAR(Int, gl_enhanced_nv_stealth) EXTERN_CVAR(Int, gl_fuzztype) -EXTERN_CVAR(Int, gl_shadowmap_filter) \ No newline at end of file +EXTERN_CVAR(Int, gl_shadowmap_filter) diff --git a/src/hwrenderer/utility/hw_draw2d.cpp b/src/rendering/hwrenderer/utility/hw_draw2d.cpp similarity index 100% rename from src/hwrenderer/utility/hw_draw2d.cpp rename to src/rendering/hwrenderer/utility/hw_draw2d.cpp diff --git a/src/hwrenderer/utility/hw_lighting.cpp b/src/rendering/hwrenderer/utility/hw_lighting.cpp similarity index 89% rename from src/hwrenderer/utility/hw_lighting.cpp rename to src/rendering/hwrenderer/utility/hw_lighting.cpp index 499d947abd..e1845b51a9 100644 --- a/src/hwrenderer/utility/hw_lighting.cpp +++ b/src/rendering/hwrenderer/utility/hw_lighting.cpp @@ -164,7 +164,7 @@ PalEntry HWDrawInfo::CalcLightColor(int light, PalEntry pe, int blendfactor) // This is what Legacy's GL render does. // 2. black fog means no fog and always uses the distfogtable based on the level's fog density setting // 3. If outside fog is defined and the current fog color is the same as the outside fog -// the engine always uses the outside fog density to make the fog uniform across the level. +// the engine always uses the outside fog density to make the fog uniform across the Level-> // If the outside fog's density is undefined it uses the level's fog density and if that is // not defined it uses a default of 70. // 4. If a global fog density is specified it is being used for all fog on the level @@ -182,7 +182,7 @@ float HWDrawInfo::GetFogDensity(int lightlevel, PalEntry fogcolor, int sectorfog if (lightmode == ELightMode::DoomLegacy) { // uses approximations of Legacy's default settings. - density = level.fogdensity ? (float)level.fogdensity : 18; + density = Level->fogdensity ? (float)Level->fogdensity : 18; } else if (sectorfogdensity != 0) { @@ -192,7 +192,7 @@ float HWDrawInfo::GetFogDensity(int lightlevel, PalEntry fogcolor, int sectorfog else if ((fogcolor.d & 0xffffff) == 0) { // case 2: black fog - if ((!isSoftwareLighting() || blendfactor > 0) && !(level.flags3 & LEVEL3_NOLIGHTFADE)) + if ((!isSoftwareLighting() || blendfactor > 0) && !(Level->flags3 & LEVEL3_NOLIGHTFADE)) { density = distfogtable[lightmode != ELightMode::LinearStandard][hw_ClampLight(lightlevel)]; } @@ -201,15 +201,15 @@ float HWDrawInfo::GetFogDensity(int lightlevel, PalEntry fogcolor, int sectorfog density = 0; } } - else if (level.outsidefogdensity != 0 && APART(level.info->outsidefog) != 0xff && (fogcolor.d & 0xffffff) == (level.info->outsidefog & 0xffffff)) + else if (Level->outsidefogdensity != 0 && APART(Level->info->outsidefog) != 0xff && (fogcolor.d & 0xffffff) == (Level->info->outsidefog & 0xffffff)) { // case 3. outsidefogdensity has already been set as needed - density = (float)level.outsidefogdensity; + density = (float)Level->outsidefogdensity; } - else if (level.fogdensity != 0) + else if (Level->fogdensity != 0) { // case 4: level has fog density set - density = (float)level.fogdensity; + density = (float)Level->fogdensity; } else if (lightlevel < 248) { @@ -249,10 +249,10 @@ bool HWDrawInfo::CheckFog(sector_t *frontsector, sector_t *backsector) else if (fogcolor.a != 0) { } - else if (level.outsidefogdensity != 0 && APART(level.info->outsidefog) != 0xff && (fogcolor.d & 0xffffff) == (level.info->outsidefog & 0xffffff)) + else if (Level->outsidefogdensity != 0 && APART(Level->info->outsidefog) != 0xff && (fogcolor.d & 0xffffff) == (Level->info->outsidefog & 0xffffff)) { } - else if (level.fogdensity!=0 || lightmode == ELightMode::DoomLegacy) + else if (Level->fogdensity!=0 || lightmode == ELightMode::DoomLegacy) { // case 3: level has fog density set } @@ -267,11 +267,11 @@ bool HWDrawInfo::CheckFog(sector_t *frontsector, sector_t *backsector) if ((fogcolor.d & 0xffffff) == 0) { } - else if (level.outsidefogdensity != 0 && APART(level.info->outsidefog) != 0xff && (fogcolor.d & 0xffffff) == (level.info->outsidefog & 0xffffff)) + else if (Level->outsidefogdensity != 0 && APART(Level->info->outsidefog) != 0xff && (fogcolor.d & 0xffffff) == (Level->info->outsidefog & 0xffffff)) { return false; } - else if (level.fogdensity!=0 || lightmode == ELightMode::DoomLegacy) + else if (Level->fogdensity!=0 || lightmode == ELightMode::DoomLegacy) { // case 3: level has fog density set return false; diff --git a/src/hwrenderer/utility/hw_lighting.h b/src/rendering/hwrenderer/utility/hw_lighting.h similarity index 100% rename from src/hwrenderer/utility/hw_lighting.h rename to src/rendering/hwrenderer/utility/hw_lighting.h diff --git a/src/hwrenderer/utility/hw_shaderpatcher.cpp b/src/rendering/hwrenderer/utility/hw_shaderpatcher.cpp similarity index 100% rename from src/hwrenderer/utility/hw_shaderpatcher.cpp rename to src/rendering/hwrenderer/utility/hw_shaderpatcher.cpp diff --git a/src/hwrenderer/utility/hw_shaderpatcher.h b/src/rendering/hwrenderer/utility/hw_shaderpatcher.h similarity index 100% rename from src/hwrenderer/utility/hw_shaderpatcher.h rename to src/rendering/hwrenderer/utility/hw_shaderpatcher.h diff --git a/src/hwrenderer/utility/hw_vrmodes.cpp b/src/rendering/hwrenderer/utility/hw_vrmodes.cpp similarity index 100% rename from src/hwrenderer/utility/hw_vrmodes.cpp rename to src/rendering/hwrenderer/utility/hw_vrmodes.cpp diff --git a/src/hwrenderer/utility/hw_vrmodes.h b/src/rendering/hwrenderer/utility/hw_vrmodes.h similarity index 100% rename from src/hwrenderer/utility/hw_vrmodes.h rename to src/rendering/hwrenderer/utility/hw_vrmodes.h diff --git a/src/polyrenderer/drawers/poly_buffer.cpp b/src/rendering/polyrenderer/drawers/poly_buffer.cpp similarity index 98% rename from src/polyrenderer/drawers/poly_buffer.cpp rename to src/rendering/polyrenderer/drawers/poly_buffer.cpp index eb1b5e1e40..d205fe8cc8 100644 --- a/src/polyrenderer/drawers/poly_buffer.cpp +++ b/src/rendering/polyrenderer/drawers/poly_buffer.cpp @@ -23,7 +23,7 @@ #include #include "templates.h" #include "doomdef.h" -#include "i_system.h" + #include "w_wad.h" #include "v_video.h" #include "doomstat.h" diff --git a/src/polyrenderer/drawers/poly_buffer.h b/src/rendering/polyrenderer/drawers/poly_buffer.h similarity index 100% rename from src/polyrenderer/drawers/poly_buffer.h rename to src/rendering/polyrenderer/drawers/poly_buffer.h diff --git a/src/polyrenderer/drawers/poly_draw_args.cpp b/src/rendering/polyrenderer/drawers/poly_draw_args.cpp similarity index 99% rename from src/polyrenderer/drawers/poly_draw_args.cpp rename to src/rendering/polyrenderer/drawers/poly_draw_args.cpp index bb31c1515a..fe5dd1e8d9 100644 --- a/src/polyrenderer/drawers/poly_draw_args.cpp +++ b/src/rendering/polyrenderer/drawers/poly_draw_args.cpp @@ -23,7 +23,7 @@ #include #include "templates.h" #include "doomdef.h" -#include "i_system.h" + #include "w_wad.h" #include "v_video.h" #include "doomstat.h" diff --git a/src/polyrenderer/drawers/poly_draw_args.h b/src/rendering/polyrenderer/drawers/poly_draw_args.h similarity index 100% rename from src/polyrenderer/drawers/poly_draw_args.h rename to src/rendering/polyrenderer/drawers/poly_draw_args.h diff --git a/src/polyrenderer/drawers/poly_triangle.cpp b/src/rendering/polyrenderer/drawers/poly_triangle.cpp similarity index 99% rename from src/polyrenderer/drawers/poly_triangle.cpp rename to src/rendering/polyrenderer/drawers/poly_triangle.cpp index b0248eceb5..9fd779cdcd 100644 --- a/src/polyrenderer/drawers/poly_triangle.cpp +++ b/src/rendering/polyrenderer/drawers/poly_triangle.cpp @@ -23,7 +23,7 @@ #include #include "templates.h" #include "doomdef.h" -#include "i_system.h" + #include "w_wad.h" #include "v_video.h" #include "doomstat.h" diff --git a/src/polyrenderer/drawers/poly_triangle.h b/src/rendering/polyrenderer/drawers/poly_triangle.h similarity index 100% rename from src/polyrenderer/drawers/poly_triangle.h rename to src/rendering/polyrenderer/drawers/poly_triangle.h diff --git a/src/polyrenderer/drawers/screen_triangle.cpp b/src/rendering/polyrenderer/drawers/screen_triangle.cpp similarity index 99% rename from src/polyrenderer/drawers/screen_triangle.cpp rename to src/rendering/polyrenderer/drawers/screen_triangle.cpp index 151e86a9f4..c989a94d14 100644 --- a/src/polyrenderer/drawers/screen_triangle.cpp +++ b/src/rendering/polyrenderer/drawers/screen_triangle.cpp @@ -23,7 +23,7 @@ #include #include "templates.h" #include "doomdef.h" -#include "i_system.h" + #include "w_wad.h" #include "v_video.h" #include "doomstat.h" diff --git a/src/polyrenderer/drawers/screen_triangle.h b/src/rendering/polyrenderer/drawers/screen_triangle.h similarity index 100% rename from src/polyrenderer/drawers/screen_triangle.h rename to src/rendering/polyrenderer/drawers/screen_triangle.h diff --git a/src/polyrenderer/math/gpu_types.cpp b/src/rendering/polyrenderer/math/gpu_types.cpp similarity index 100% rename from src/polyrenderer/math/gpu_types.cpp rename to src/rendering/polyrenderer/math/gpu_types.cpp diff --git a/src/polyrenderer/math/gpu_types.h b/src/rendering/polyrenderer/math/gpu_types.h similarity index 100% rename from src/polyrenderer/math/gpu_types.h rename to src/rendering/polyrenderer/math/gpu_types.h diff --git a/src/polyrenderer/poly_all.cpp b/src/rendering/polyrenderer/poly_all.cpp similarity index 100% rename from src/polyrenderer/poly_all.cpp rename to src/rendering/polyrenderer/poly_all.cpp diff --git a/src/polyrenderer/poly_renderer.cpp b/src/rendering/polyrenderer/poly_renderer.cpp similarity index 97% rename from src/polyrenderer/poly_renderer.cpp rename to src/rendering/polyrenderer/poly_renderer.cpp index e878623fd4..5373d94327 100644 --- a/src/polyrenderer/poly_renderer.cpp +++ b/src/rendering/polyrenderer/poly_renderer.cpp @@ -34,6 +34,7 @@ #include "st_stuff.h" #include "g_levellocals.h" #include "p_effect.h" +#include "actorinlines.h" #include "polyrenderer/scene/poly_light.h" #include "swrenderer/scene/r_scene.h" #include "swrenderer/drawers/r_draw_rgba.h" @@ -131,11 +132,10 @@ void PolyRenderer::RenderActorView(AActor *actor, bool dontmaplines) NetUpdate(); DontMapLines = dontmaplines; - - R_SetupFrame(Viewpoint, Viewwindow, actor); - P_FindParticleSubsectors(); - PO_LinkToSubsectors(); + R_SetupFrame(Viewpoint, Viewwindow, actor); + Level = Viewpoint.ViewLevel; + static bool firstcall = true; if (firstcall) { @@ -186,7 +186,6 @@ void PolyRenderer::RenderActorView(AActor *actor, bool dontmaplines) if (Viewpoint.camera) Viewpoint.camera->renderflags = savedflags; - interpolator.RestoreInterpolations (); NetUpdate(); } @@ -222,7 +221,7 @@ PolyPortalViewpoint PolyRenderer::SetupPerspectiveMatrix(bool mirror) // We have to scale the pitch to account for the pixel stretching, because the playsim doesn't know about this and treats it as 1:1. double radPitch = Viewpoint.Angles.Pitch.Normalized180().Radians(); double angx = cos(radPitch); - double angy = sin(radPitch) * level.info->pixelstretch; + double angy = sin(radPitch) * PolyRenderer::Instance()->Level->info->pixelstretch; double alen = sqrt(angx*angx + angy*angy); float adjustedPitch = (float)asin(angy / alen); float adjustedViewAngle = (float)(Viewpoint.Angles.Yaw - 90).Radians(); @@ -238,7 +237,7 @@ PolyPortalViewpoint PolyRenderer::SetupPerspectiveMatrix(bool mirror) Mat4f::Rotate((float)Viewpoint.Angles.Roll.Radians(), 0.0f, 0.0f, 1.0f) * Mat4f::Rotate(adjustedPitch, 1.0f, 0.0f, 0.0f) * Mat4f::Rotate(adjustedViewAngle, 0.0f, -1.0f, 0.0f) * - Mat4f::Scale(1.0f, level.info->pixelstretch, 1.0f) * + Mat4f::Scale(1.0f, PolyRenderer::Instance()->Level->info->pixelstretch, 1.0f) * Mat4f::SwapYZ() * Mat4f::Translate((float)-Viewpoint.Pos.X, (float)-Viewpoint.Pos.Y, (float)-Viewpoint.Pos.Z); diff --git a/src/polyrenderer/poly_renderer.h b/src/rendering/polyrenderer/poly_renderer.h similarity index 99% rename from src/polyrenderer/poly_renderer.h rename to src/rendering/polyrenderer/poly_renderer.h index 34b880e1cb..949196af9c 100644 --- a/src/polyrenderer/poly_renderer.h +++ b/src/rendering/polyrenderer/poly_renderer.h @@ -68,6 +68,7 @@ public: FRenderViewpoint Viewpoint; PolyLightVisibility Light; RenderPolyScene Scene; + FLevelLocals *Level; private: void RenderActorView(AActor *actor, bool dontmaplines); diff --git a/src/polyrenderer/poly_renderthread.cpp b/src/rendering/polyrenderer/poly_renderthread.cpp similarity index 99% rename from src/polyrenderer/poly_renderthread.cpp rename to src/rendering/polyrenderer/poly_renderthread.cpp index 3293014f42..ccc8338bfe 100644 --- a/src/polyrenderer/poly_renderthread.cpp +++ b/src/rendering/polyrenderer/poly_renderthread.cpp @@ -24,7 +24,7 @@ #include "templates.h" #include "doomdef.h" #include "m_bbox.h" -#include "i_system.h" + #include "p_lnspec.h" #include "p_setup.h" #include "a_sharedglobal.h" diff --git a/src/polyrenderer/poly_renderthread.h b/src/rendering/polyrenderer/poly_renderthread.h similarity index 100% rename from src/polyrenderer/poly_renderthread.h rename to src/rendering/polyrenderer/poly_renderthread.h diff --git a/src/polyrenderer/scene/poly_cull.cpp b/src/rendering/polyrenderer/scene/poly_cull.cpp similarity index 96% rename from src/polyrenderer/scene/poly_cull.cpp rename to src/rendering/polyrenderer/scene/poly_cull.cpp index 6668e2f2bb..1428a5931f 100644 --- a/src/polyrenderer/scene/poly_cull.cpp +++ b/src/rendering/polyrenderer/scene/poly_cull.cpp @@ -32,18 +32,18 @@ void PolyCull::CullScene(sector_t *portalSector, line_t *portalLine) { for (uint32_t sub : PvsSubsectors) SubsectorDepths[sub] = 0xffffffff; - SubsectorDepths.resize(level.subsectors.Size(), 0xffffffff); + SubsectorDepths.resize(PolyRenderer::Instance()->Level->subsectors.Size(), 0xffffffff); for (uint32_t sector : SeenSectors) SectorSeen[sector] = false; - SectorSeen.resize(level.sectors.Size()); + SectorSeen.resize(PolyRenderer::Instance()->Level->sectors.Size()); PvsSubsectors.clear(); SeenSectors.clear(); NextPvsLineStart = 0; PvsLineStart.clear(); - PvsLineVisible.resize(level.segs.Size()); + PvsLineVisible.resize(PolyRenderer::Instance()->Level->segs.Size()); PortalSector = portalSector; PortalLine = portalLine; @@ -78,10 +78,10 @@ void PolyCull::CullScene(sector_t *portalSector, line_t *portalLine) FirstSkyHeight = true; MaxCeilingHeight = 0.0; MinFloorHeight = 0.0; - if (level.nodes.Size() == 0) - CullSubsector(&level.subsectors[0]); + if (PolyRenderer::Instance()->Level->nodes.Size() == 0) + CullSubsector(&PolyRenderer::Instance()->Level->subsectors[0]); else - CullNode(level.HeadNode()); + CullNode(PolyRenderer::Instance()->Level->HeadNode()); } void PolyCull::CullNode(void *node) diff --git a/src/polyrenderer/scene/poly_cull.h b/src/rendering/polyrenderer/scene/poly_cull.h similarity index 100% rename from src/polyrenderer/scene/poly_cull.h rename to src/rendering/polyrenderer/scene/poly_cull.h diff --git a/src/polyrenderer/scene/poly_decal.cpp b/src/rendering/polyrenderer/scene/poly_decal.cpp similarity index 100% rename from src/polyrenderer/scene/poly_decal.cpp rename to src/rendering/polyrenderer/scene/poly_decal.cpp diff --git a/src/polyrenderer/scene/poly_decal.h b/src/rendering/polyrenderer/scene/poly_decal.h similarity index 100% rename from src/polyrenderer/scene/poly_decal.h rename to src/rendering/polyrenderer/scene/poly_decal.h diff --git a/src/polyrenderer/scene/poly_light.cpp b/src/rendering/polyrenderer/scene/poly_light.cpp similarity index 94% rename from src/polyrenderer/scene/poly_light.cpp rename to src/rendering/polyrenderer/scene/poly_light.cpp index e0854fdcec..e7ebf4c1e0 100644 --- a/src/polyrenderer/scene/poly_light.cpp +++ b/src/rendering/polyrenderer/scene/poly_light.cpp @@ -34,7 +34,7 @@ void PolyLightVisibility::SetVisibility(FViewWindow &viewwindow, float vis) fixed_t PolyLightVisibility::LightLevelToShade(int lightlevel, bool foggy) { - bool nolightfade = !foggy && ((level.flags3 & LEVEL3_NOLIGHTFADE)); + bool nolightfade = !foggy && ((PolyRenderer::Instance()->Level->flags3 & LEVEL3_NOLIGHTFADE)); if (nolightfade) { return (MAX(255 - lightlevel, 0) * NUMCOLORMAPS) << (FRACBITS - 8); diff --git a/src/polyrenderer/scene/poly_light.h b/src/rendering/polyrenderer/scene/poly_light.h similarity index 100% rename from src/polyrenderer/scene/poly_light.h rename to src/rendering/polyrenderer/scene/poly_light.h diff --git a/src/polyrenderer/scene/poly_model.cpp b/src/rendering/polyrenderer/scene/poly_model.cpp similarity index 94% rename from src/polyrenderer/scene/poly_model.cpp rename to src/rendering/polyrenderer/scene/poly_model.cpp index 752552661a..a0c544ab8b 100644 --- a/src/polyrenderer/scene/poly_model.cpp +++ b/src/rendering/polyrenderer/scene/poly_model.cpp @@ -122,13 +122,13 @@ void PolyModelRenderer::AddLights(AActor *actor) float z = (float)actor->Center(); float radiusSquared = (float)(actor->renderradius * actor->renderradius); - BSPWalkCircle(x, y, radiusSquared, [&](subsector_t *subsector) // Iterate through all subsectors potentially touched by actor + BSPWalkCircle(actor->Level, x, y, radiusSquared, [&](subsector_t *subsector) // Iterate through all subsectors potentially touched by actor { FLightNode * node = subsector->section->lighthead; while (node) // check all lights touching a subsector { FDynamicLight *light = node->lightsource; - if (light->ShouldLightActor(actor)) + if (light->ShouldLightActor(actor)) { int group = subsector->sector->PortalGroup; DVector3 pos = light->PosRelative(group); @@ -256,8 +256,8 @@ void PolyModelRenderer::SetTransform() void PolyModelRenderer::DrawArrays(int start, int count) { PolyDrawArgs args; - args.SetLight(GetColorTable(sector->Colormap, sector->SpecialColors[sector_t::sprites], true), lightlevel, visibility, fullbrightSprite); - args.SetLights(Lights, NumLights); + auto nc = !!(sector->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING); + args.SetLight(GetSpriteColorTable(sector->Colormap, sector->SpecialColors[sector_t::sprites], nc), lightlevel, visibility, fullbrightSprite); args.SetLights(Lights, NumLights); args.SetStencilTestValue(StencilValue); args.SetClipPlane(0, PolyClipPlane()); args.SetStyle(RenderStyle, RenderAlpha, fillcolor, Translation, SkinTexture, fullbrightSprite); @@ -270,8 +270,8 @@ void PolyModelRenderer::DrawArrays(int start, int count) void PolyModelRenderer::DrawElements(int numIndices, size_t offset) { PolyDrawArgs args; - args.SetLight(GetColorTable(sector->Colormap, sector->SpecialColors[sector_t::sprites], true), lightlevel, visibility, fullbrightSprite); - args.SetLights(Lights, NumLights); + auto nc = !!(sector->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING); + args.SetLight(GetSpriteColorTable(sector->Colormap, sector->SpecialColors[sector_t::sprites], nc), lightlevel, visibility, fullbrightSprite); args.SetLights(Lights, NumLights); args.SetStencilTestValue(StencilValue); args.SetClipPlane(0, PolyClipPlane()); args.SetStyle(RenderStyle, RenderAlpha, fillcolor, Translation, SkinTexture, fullbrightSprite); diff --git a/src/polyrenderer/scene/poly_model.h b/src/rendering/polyrenderer/scene/poly_model.h similarity index 100% rename from src/polyrenderer/scene/poly_model.h rename to src/rendering/polyrenderer/scene/poly_model.h diff --git a/src/polyrenderer/scene/poly_particle.cpp b/src/rendering/polyrenderer/scene/poly_particle.cpp similarity index 98% rename from src/polyrenderer/scene/poly_particle.cpp rename to src/rendering/polyrenderer/scene/poly_particle.cpp index 73617ebce1..002daac52f 100644 --- a/src/polyrenderer/scene/poly_particle.cpp +++ b/src/rendering/polyrenderer/scene/poly_particle.cpp @@ -35,7 +35,7 @@ EXTERN_CVAR(Int, gl_particles_style) void RenderPolyParticle::Render(PolyRenderThread *thread, particle_t *particle, subsector_t *sub, uint32_t stencilValue) { double timefrac = r_viewpoint.TicFrac; - if (paused || bglobal.freeze || (level.flags2 & LEVEL2_FROZEN)) + if (paused || r_viewpoint.ViewLevel->isFrozen()) timefrac = 0.; DVector3 pos = particle->Pos + (particle->Vel * timefrac); double psize = particle->size / 8.0; diff --git a/src/polyrenderer/scene/poly_particle.h b/src/rendering/polyrenderer/scene/poly_particle.h similarity index 100% rename from src/polyrenderer/scene/poly_particle.h rename to src/rendering/polyrenderer/scene/poly_particle.h diff --git a/src/polyrenderer/scene/poly_plane.cpp b/src/rendering/polyrenderer/scene/poly_plane.cpp similarity index 99% rename from src/polyrenderer/scene/poly_plane.cpp rename to src/rendering/polyrenderer/scene/poly_plane.cpp index 27a3f2efa1..1a1ceb0e0c 100644 --- a/src/polyrenderer/scene/poly_plane.cpp +++ b/src/rendering/polyrenderer/scene/poly_plane.cpp @@ -246,7 +246,7 @@ void RenderPolyPlane::RenderSkyWalls(PolyRenderThread *thread, PolyDrawArgs &arg void RenderPolyPlane::SetLightLevel(PolyRenderThread *thread, PolyDrawArgs &args, const PolyTransferHeights &fakeflat, bool ceiling) { - bool foggy = level.fadeto || fakeflat.FrontSector->Colormap.FadeColor || (level.flags & LEVEL_HASFADETABLE); + bool foggy = PolyRenderer::Instance()->Level->fadeto || fakeflat.FrontSector->Colormap.FadeColor || (PolyRenderer::Instance()->Level->flags & LEVEL_HASFADETABLE); int lightlevel = ceiling ? fakeflat.CeilingLightLevel : fakeflat.FloorLightLevel; int actualextralight = foggy ? 0 : PolyRenderer::Instance()->Viewpoint.extralight << 4; diff --git a/src/polyrenderer/scene/poly_plane.h b/src/rendering/polyrenderer/scene/poly_plane.h similarity index 100% rename from src/polyrenderer/scene/poly_plane.h rename to src/rendering/polyrenderer/scene/poly_plane.h diff --git a/src/polyrenderer/scene/poly_playersprite.cpp b/src/rendering/polyrenderer/scene/poly_playersprite.cpp similarity index 95% rename from src/polyrenderer/scene/poly_playersprite.cpp rename to src/rendering/polyrenderer/scene/poly_playersprite.cpp index 93cfca926c..3cf04a53d5 100644 --- a/src/polyrenderer/scene/poly_playersprite.cpp +++ b/src/rendering/polyrenderer/scene/poly_playersprite.cpp @@ -66,6 +66,8 @@ void RenderPolyPlayerSprites::Render(PolyRenderThread *thread) FDynamicColormap *basecolormap; PolyCameraLight *cameraLight = PolyCameraLight::Instance(); + bool nc = !!(viewpoint.camera->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING); + if (cameraLight->FixedLightLevel() < 0 && viewpoint.sector->e && viewpoint.sector->e->XFloor.lightlist.Size()) { for (i = viewpoint.sector->e->XFloor.lightlist.Size() - 1; i >= 0; i--) @@ -79,9 +81,9 @@ void RenderPolyPlayerSprites::Render(PolyRenderThread *thread) break; sec = rover->model; if (rover->flags & FF_FADEWALLS) - basecolormap = GetColorTable(sec->Colormap, sec->SpecialColors[sector_t::sprites], true); + basecolormap = GetSpriteColorTable(sec->Colormap, sec->SpecialColors[sector_t::sprites], nc); else - basecolormap = GetColorTable(viewpoint.sector->e->XFloor.lightlist[i].extra_colormap, sec->SpecialColors[sector_t::sprites], true); + basecolormap = GetSpriteColorTable(viewpoint.sector->e->XFloor.lightlist[i].extra_colormap, sec->SpecialColors[sector_t::sprites], nc); } break; } @@ -89,7 +91,7 @@ void RenderPolyPlayerSprites::Render(PolyRenderThread *thread) if (!sec) { sec = viewpoint.sector; - basecolormap = GetColorTable(sec->Colormap, sec->SpecialColors[sector_t::sprites], true); + basecolormap = GetSpriteColorTable(sec->Colormap, sec->SpecialColors[sector_t::sprites], nc); } floorlight = ceilinglight = sec->lightlevel; } @@ -102,11 +104,11 @@ void RenderPolyPlayerSprites::Render(PolyRenderThread *thread) ceilinglight = fakeflat.CeilingLightLevel; // [RH] set basecolormap - basecolormap = GetColorTable(sec->Colormap, sec->SpecialColors[sector_t::sprites], true); + basecolormap = GetSpriteColorTable(sec->Colormap, sec->SpecialColors[sector_t::sprites], nc); } // [RH] set foggy flag - bool foggy = (level.fadeto || basecolormap->Fade || (level.flags & LEVEL_HASFADETABLE)); + bool foggy = (PolyRenderer::Instance()->Level->fadeto || basecolormap->Fade || (PolyRenderer::Instance()->Level->flags & LEVEL_HASFADETABLE)); // get light level lightnum = ((floorlight + ceilinglight) >> 1) + (foggy ? 0 : viewpoint.extralight << 4); @@ -458,7 +460,7 @@ void RenderPolyPlayerSprites::RenderSprite(PolyRenderThread *thread, DPSprite *p fixed_t RenderPolyPlayerSprites::LightLevelToShade(int lightlevel, bool foggy) { - bool nolightfade = !foggy && ((level.flags3 & LEVEL3_NOLIGHTFADE)); + bool nolightfade = !foggy && ((PolyRenderer::Instance()->Level->flags3 & LEVEL3_NOLIGHTFADE)); if (nolightfade) { return (MAX(255 - lightlevel, 0) * NUMCOLORMAPS) << (FRACBITS - 8); diff --git a/src/polyrenderer/scene/poly_playersprite.h b/src/rendering/polyrenderer/scene/poly_playersprite.h similarity index 100% rename from src/polyrenderer/scene/poly_playersprite.h rename to src/rendering/polyrenderer/scene/poly_playersprite.h diff --git a/src/polyrenderer/scene/poly_portal.cpp b/src/rendering/polyrenderer/scene/poly_portal.cpp similarity index 96% rename from src/polyrenderer/scene/poly_portal.cpp rename to src/rendering/polyrenderer/scene/poly_portal.cpp index a4a7ec467a..c70d659ecb 100644 --- a/src/polyrenderer/scene/poly_portal.cpp +++ b/src/rendering/polyrenderer/scene/poly_portal.cpp @@ -91,13 +91,13 @@ void PolyDrawSectorPortal::SaveGlobals() viewpoint.SetViewAngle(viewwindow); Portal->mFlags |= PORTSF_INSKYBOX; - if (Portal->mPartner > 0) level.sectorPortals[Portal->mPartner].mFlags |= PORTSF_INSKYBOX; + if (Portal->mPartner > 0) PolyRenderer::Instance()->Level->sectorPortals[Portal->mPartner].mFlags |= PORTSF_INSKYBOX; } void PolyDrawSectorPortal::RestoreGlobals() { Portal->mFlags &= ~PORTSF_INSKYBOX; - if (Portal->mPartner > 0) level.sectorPortals[Portal->mPartner].mFlags &= ~PORTSF_INSKYBOX; + if (Portal->mPartner > 0) PolyRenderer::Instance()->Level->sectorPortals[Portal->mPartner].mFlags &= ~PORTSF_INSKYBOX; auto &viewpoint = PolyRenderer::Instance()->Viewpoint; const auto &viewwindow = PolyRenderer::Instance()->Viewwindow; @@ -234,7 +234,7 @@ void PolyDrawLinePortal::SaveGlobals() } viewpoint.camera = nullptr; - viewpoint.sector = R_PointInSubsector(viewpoint.Pos)->sector; + viewpoint.sector = viewpoint.ViewLevel->PointInRenderSubsector(viewpoint.Pos)->sector; viewpoint.SetViewAngle(viewwindow); } diff --git a/src/polyrenderer/scene/poly_portal.h b/src/rendering/polyrenderer/scene/poly_portal.h similarity index 100% rename from src/polyrenderer/scene/poly_portal.h rename to src/rendering/polyrenderer/scene/poly_portal.h diff --git a/src/polyrenderer/scene/poly_scene.cpp b/src/rendering/polyrenderer/scene/poly_scene.cpp similarity index 96% rename from src/polyrenderer/scene/poly_scene.cpp rename to src/rendering/polyrenderer/scene/poly_scene.cpp index f92c73762e..ec21c0e15f 100644 --- a/src/polyrenderer/scene/poly_scene.cpp +++ b/src/rendering/polyrenderer/scene/poly_scene.cpp @@ -70,7 +70,7 @@ void RenderPolyScene::Render(PolyPortalViewpoint *viewpoint) const auto &rviewpoint = PolyRenderer::Instance()->Viewpoint; for (uint32_t sectorIndex : Cull.SeenSectors) { - sector_t *sector = &level.sectors[sectorIndex]; + sector_t *sector = &PolyRenderer::Instance()->Level->sectors[sectorIndex]; for (AActor *thing = sector->thinglist; thing != nullptr; thing = thing->snext) { if (!RenderPolySprite::IsThingCulled(thing)) @@ -132,7 +132,7 @@ void RenderPolyScene::RenderSectors() int end = thread->End; for (int i = start; i < end; i++) { - RenderSubsector(thread, &level.subsectors[subsectors[i]], i); + RenderSubsector(thread, &PolyRenderer::Instance()->Level->subsectors[subsectors[i]], i); } }, [&](PolyRenderThread *thread) { @@ -146,6 +146,7 @@ void RenderPolyScene::RenderSectors() void RenderPolyScene::RenderSubsector(PolyRenderThread *thread, subsector_t *sub, uint32_t subsectorDepth) { sector_t *frontsector = sub->sector; + auto Level = frontsector->Level; frontsector->MoreFlags |= SECMF_DRAWN; if (sub->polys) @@ -187,9 +188,9 @@ void RenderPolyScene::RenderSubsector(PolyRenderThread *thread, subsector_t *sub } int subsectorIndex = sub->Index(); - for (int i = ParticlesInSubsec[subsectorIndex]; i != NO_PARTICLE; i = Particles[i].snext) + for (int i = Level->ParticlesInSubsec[subsectorIndex]; i != NO_PARTICLE; i = Level->Particles[i].snext) { - particle_t *particle = &Particles[i]; + particle_t *particle = &Level->Particles[i]; thread->TranslucentObjects.push_back(thread->FrameMemory->NewObject(particle, sub, subsectorDepth, CurrentViewpoint->StencilValue)); } } @@ -254,15 +255,15 @@ int RenderPolyScene::PointOnSide(const DVector2 &pos, const node_t *node) void RenderPolyScene::AddSprite(PolyRenderThread *thread, AActor *thing, double sortDistance, const DVector2 &left, const DVector2 &right) { - if (level.nodes.Size() == 0) + if (PolyRenderer::Instance()->Level->nodes.Size() == 0) { - subsector_t *sub = &level.subsectors[0]; + subsector_t *sub = &PolyRenderer::Instance()->Level->subsectors[0]; if (Cull.SubsectorDepths[sub->Index()] != 0xffffffff) thread->TranslucentObjects.push_back(thread->FrameMemory->NewObject(thing, sub, Cull.SubsectorDepths[sub->Index()], sortDistance, 0.0f, 1.0f, CurrentViewpoint->StencilValue)); } else { - AddSprite(thread, thing, sortDistance, left, right, 0.0, 1.0, level.HeadNode()); + AddSprite(thread, thing, sortDistance, left, right, 0.0, 1.0, PolyRenderer::Instance()->Level->HeadNode()); } } @@ -303,15 +304,15 @@ void RenderPolyScene::AddSprite(PolyRenderThread *thread, AActor *thing, double void RenderPolyScene::AddModel(PolyRenderThread *thread, AActor *thing, double sortDistance, DVector2 pos) { - if (level.nodes.Size() == 0) + if (PolyRenderer::Instance()->Level->nodes.Size() == 0) { - subsector_t *sub = &level.subsectors[0]; + subsector_t *sub = &PolyRenderer::Instance()->Level->subsectors[0]; if (Cull.SubsectorDepths[sub->Index()] != 0xffffffff) thread->TranslucentObjects.push_back(thread->FrameMemory->NewObject(thing, sub, Cull.SubsectorDepths[sub->Index()], sortDistance, 0.0f, 1.0f, CurrentViewpoint->StencilValue)); } else { - void *node = level.HeadNode(); + void *node = PolyRenderer::Instance()->Level->HeadNode(); while (!((size_t)node & 1)) // Keep going until found a subsector { @@ -444,7 +445,7 @@ PolyTransferHeights::PolyTransferHeights(subsector_t *sub) : Subsector(sub) // If player's view height is underneath fake floor, lower the // drawn ceiling to be just under the floor height, and replace - // the drawn floor and ceiling textures, and light level, with + // the drawn floor and ceiling textures, and light PolyRenderer::Instance()->Level->, with // the control sector's. // // Similar for ceiling, only reflected. diff --git a/src/polyrenderer/scene/poly_scene.h b/src/rendering/polyrenderer/scene/poly_scene.h similarity index 100% rename from src/polyrenderer/scene/poly_scene.h rename to src/rendering/polyrenderer/scene/poly_scene.h diff --git a/src/polyrenderer/scene/poly_sky.cpp b/src/rendering/polyrenderer/scene/poly_sky.cpp similarity index 92% rename from src/polyrenderer/scene/poly_sky.cpp rename to src/rendering/polyrenderer/scene/poly_sky.cpp index 4e3e2fbfd8..0584f5d96e 100644 --- a/src/polyrenderer/scene/poly_sky.cpp +++ b/src/rendering/polyrenderer/scene/poly_sky.cpp @@ -229,7 +229,7 @@ Mat4f PolySkyDome::GLSkyMath() float xscale = texw < 1024.f ? floor(1024.f / float(texw)) : 1.f; float yscale = 1.f; - if (texh <= 128 && (level.flags & LEVEL_FORCETILEDSKY)) + if (texh <= 128 && (PolyRenderer::Instance()->Level->flags & LEVEL_FORCETILEDSKY)) { modelMatrix = modelMatrix * Mat4f::Translate(0.f, 0.f, (-40 + tex->GetSkyOffset() + skyoffset)*skyoffsetfactor); modelMatrix = modelMatrix * Mat4f::Scale(1.f, 1.f, 1.2f * 1.17f); @@ -291,9 +291,10 @@ void PolySkySetup::Update() double skyscale = 0.0; float skyiscale = 0.0f; fixed_t sky1cyl = 0, sky2cyl = 0; + auto Level = PolyRenderer::Instance()->Level; - auto skytex1 = TexMan.GetPalettedTexture(sky1texture, true); - auto skytex2 = TexMan.GetPalettedTexture(sky2texture, true); + auto skytex1 = TexMan.GetPalettedTexture(Level->skytexture1, true); + auto skytex2 = TexMan.GetPalettedTexture(Level->skytexture2, true); if (skytex1) { @@ -307,7 +308,7 @@ void PolySkySetup::Update() } else if (skyheight > 200) { - skytexturemid = (200 - skyheight) * sskytex1->GetScale().Y + ((r_skymode == 2 && !(level.flags & LEVEL_FORCETILEDSKY)) ? skytex1->GetSkyOffset() : 0); + skytexturemid = (200 - skyheight) * sskytex1->GetScale().Y + ((r_skymode == 2 && !(Level->flags & LEVEL_FORCETILEDSKY)) ? skytex1->GetSkyOffset() : 0); } if (viewwidth != 0 && viewheight != 0) @@ -319,7 +320,7 @@ void PolySkySetup::Update() skyscale *= float(90. / r_viewpoint.FieldOfView.Degrees); } - if (skystretch) + if (Level->skystretch) { skyscale *= (double)SKYSTRETCH_HEIGHT / skyheight; skyiscale *= skyheight / (float)SKYSTRETCH_HEIGHT; @@ -337,15 +338,15 @@ void PolySkySetup::Update() FTextureID sky1tex, sky2tex; double frontdpos = 0, backdpos = 0; - if ((level.flags & LEVEL_SWAPSKIES) && !(level.flags & LEVEL_DOUBLESKY)) + if ((PolyRenderer::Instance()->Level->flags & LEVEL_SWAPSKIES) && !(PolyRenderer::Instance()->Level->flags & LEVEL_DOUBLESKY)) { - sky1tex = sky2texture; + sky1tex = Level->skytexture2; } else { - sky1tex = sky1texture; + sky1tex = Level->skytexture1; } - sky2tex = sky2texture; + sky2tex = Level->skytexture2; skymid = skytexturemid; skyangle = 0; @@ -355,13 +356,13 @@ void PolySkySetup::Update() { // use sky1 sky1: frontskytex = GetSWTex(sky1tex); - if (level.flags & LEVEL_DOUBLESKY) + if (PolyRenderer::Instance()->Level->flags & LEVEL_DOUBLESKY) backskytex = GetSWTex(sky2tex); else backskytex = nullptr; skyflip = false; - frontdpos = sky1pos; - backdpos = sky2pos; + frontdpos = Level->sky1pos; + backdpos = Level->sky2pos; frontcyl = sky1cyl; backcyl = sky2cyl; } @@ -371,12 +372,12 @@ void PolySkySetup::Update() backskytex = nullptr; frontcyl = sky2cyl; skyflip = false; - frontdpos = sky2pos; + frontdpos = Level->sky2pos; } else { // MBF's linedef-controlled skies // Sky Linedef - const line_t *l = &level.lines[(sectorSky & ~PL_SKYFLAT) - 1]; + const line_t *l = &PolyRenderer::Instance()->Level->lines[(sectorSky & ~PL_SKYFLAT) - 1]; // Sky transferred from first sidedef const side_t *s = l->sidedef[0]; @@ -384,7 +385,7 @@ void PolySkySetup::Update() // Texture comes from upper texture of reference sidedef // [RH] If swapping skies, then use the lower sidedef - if (level.flags & LEVEL_SWAPSKIES && s->GetTexture(side_t::bottom).isValid()) + if (PolyRenderer::Instance()->Level->flags & LEVEL_SWAPSKIES && s->GetTexture(side_t::bottom).isValid()) { pos = side_t::bottom; } diff --git a/src/polyrenderer/scene/poly_sky.h b/src/rendering/polyrenderer/scene/poly_sky.h similarity index 100% rename from src/polyrenderer/scene/poly_sky.h rename to src/rendering/polyrenderer/scene/poly_sky.h diff --git a/src/polyrenderer/scene/poly_sprite.cpp b/src/rendering/polyrenderer/scene/poly_sprite.cpp similarity index 97% rename from src/polyrenderer/scene/poly_sprite.cpp rename to src/rendering/polyrenderer/scene/poly_sprite.cpp index b6487c231b..5428f8de63 100644 --- a/src/polyrenderer/scene/poly_sprite.cpp +++ b/src/rendering/polyrenderer/scene/poly_sprite.cpp @@ -158,8 +158,8 @@ void RenderPolySprite::Render(PolyRenderThread *thread, AActor *thing, subsector PolyDrawArgs args; SetDynlight(thing, args); - args.SetLight(GetColorTable(sub->sector->Colormap, sub->sector->SpecialColors[sector_t::sprites], true), lightlevel, PolyRenderer::Instance()->Light.SpriteGlobVis(foggy), fullbrightSprite); - args.SetStencilTestValue(stencilValue); + auto nc = !!(thing->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING); + args.SetLight(GetSpriteColorTable(sub->sector->Colormap, sub->sector->SpecialColors[sector_t::sprites], nc), lightlevel, PolyRenderer::Instance()->Light.SpriteGlobVis(foggy), fullbrightSprite); args.SetStencilTestValue(stencilValue); if ((thing->renderflags & RF_ZDOOMTRANS) && r_UseVanillaTransparency) args.SetStyle(LegacyRenderStyles[STYLE_Normal], 1.0f, thing->fillcolor, thing->Translation, tex, fullbrightSprite); else diff --git a/src/polyrenderer/scene/poly_sprite.h b/src/rendering/polyrenderer/scene/poly_sprite.h similarity index 100% rename from src/polyrenderer/scene/poly_sprite.h rename to src/rendering/polyrenderer/scene/poly_sprite.h diff --git a/src/polyrenderer/scene/poly_wall.cpp b/src/rendering/polyrenderer/scene/poly_wall.cpp similarity index 99% rename from src/polyrenderer/scene/poly_wall.cpp rename to src/rendering/polyrenderer/scene/poly_wall.cpp index 1d04348ea0..9d04b64a7d 100644 --- a/src/polyrenderer/scene/poly_wall.cpp +++ b/src/rendering/polyrenderer/scene/poly_wall.cpp @@ -637,7 +637,7 @@ PolyWallTextureCoordsU::PolyWallTextureCoordsU(FSoftwareTexture *tex, const seg_ PolyWallTextureCoordsV::PolyWallTextureCoordsV(FSoftwareTexture *tex, const line_t *line, const side_t *side, side_t::ETexpart wallpart, double topz, double bottomz, double unpeggedceil, double topTexZ, double bottomTexZ) { double yoffset = side->GetTextureYOffset(wallpart); - if (tex->useWorldPanning()) + if (tex->useWorldPanning(line->GetLevel())) yoffset *= side->GetTextureYScale(wallpart) * tex->GetScale().Y; switch (wallpart) diff --git a/src/polyrenderer/scene/poly_wall.h b/src/rendering/polyrenderer/scene/poly_wall.h similarity index 100% rename from src/polyrenderer/scene/poly_wall.h rename to src/rendering/polyrenderer/scene/poly_wall.h diff --git a/src/polyrenderer/scene/poly_wallsprite.cpp b/src/rendering/polyrenderer/scene/poly_wallsprite.cpp similarity index 93% rename from src/polyrenderer/scene/poly_wallsprite.cpp rename to src/rendering/polyrenderer/scene/poly_wallsprite.cpp index 4313b6863e..d826186dbe 100644 --- a/src/polyrenderer/scene/poly_wallsprite.cpp +++ b/src/rendering/polyrenderer/scene/poly_wallsprite.cpp @@ -101,8 +101,8 @@ void RenderPolyWallSprite::Render(PolyRenderThread *thread, AActor *thing, subse int lightlevel = fullbrightSprite ? 255 : thing->Sector->lightlevel + actualextralight; PolyDrawArgs args; - args.SetLight(GetColorTable(sub->sector->Colormap, sub->sector->SpecialColors[sector_t::sprites], true), lightlevel, PolyRenderer::Instance()->Light.WallGlobVis(foggy), fullbrightSprite); - args.SetStencilTestValue(stencilValue); + auto nc = !!(thing->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING); + args.SetLight(GetSpriteColorTable(sub->sector->Colormap, sub->sector->SpecialColors[sector_t::sprites], nc), lightlevel, PolyRenderer::Instance()->Light.WallGlobVis(foggy), fullbrightSprite); args.SetStencilTestValue(stencilValue); args.SetTexture(tex, thing->RenderStyle); args.SetDepthTest(true); args.SetWriteDepth(false); diff --git a/src/polyrenderer/scene/poly_wallsprite.h b/src/rendering/polyrenderer/scene/poly_wallsprite.h similarity index 100% rename from src/polyrenderer/scene/poly_wallsprite.h rename to src/rendering/polyrenderer/scene/poly_wallsprite.h diff --git a/src/swrenderer/drawers/r_draw.cpp b/src/rendering/swrenderer/drawers/r_draw.cpp similarity index 99% rename from src/swrenderer/drawers/r_draw.cpp rename to src/rendering/swrenderer/drawers/r_draw.cpp index 8dfddb8320..4d20ca6824 100644 --- a/src/swrenderer/drawers/r_draw.cpp +++ b/src/rendering/swrenderer/drawers/r_draw.cpp @@ -36,7 +36,7 @@ #include "templates.h" #include "doomdef.h" -#include "i_system.h" + #include "w_wad.h" #include "v_video.h" #include "doomstat.h" diff --git a/src/swrenderer/drawers/r_draw.h b/src/rendering/swrenderer/drawers/r_draw.h similarity index 100% rename from src/swrenderer/drawers/r_draw.h rename to src/rendering/swrenderer/drawers/r_draw.h diff --git a/src/swrenderer/drawers/r_draw_pal.cpp b/src/rendering/swrenderer/drawers/r_draw_pal.cpp similarity index 99% rename from src/swrenderer/drawers/r_draw_pal.cpp rename to src/rendering/swrenderer/drawers/r_draw_pal.cpp index 5be7ba5cc7..e6280e1973 100644 --- a/src/swrenderer/drawers/r_draw_pal.cpp +++ b/src/rendering/swrenderer/drawers/r_draw_pal.cpp @@ -69,7 +69,7 @@ EXTERN_CVAR(Int, gl_particles_style) table seemed to be quite ultimate. The computation of the RGB for each pixel is accelerated by using two - 1k tables for each translucency level. + 1k tables for each translucency level The xth element of one of these tables contains the r, g and b values for the colour x, weighted for the current translucency level (for example, the weighted rgb values for background colour at 75% translucency are 1/4 diff --git a/src/swrenderer/drawers/r_draw_pal.h b/src/rendering/swrenderer/drawers/r_draw_pal.h similarity index 100% rename from src/swrenderer/drawers/r_draw_pal.h rename to src/rendering/swrenderer/drawers/r_draw_pal.h diff --git a/src/swrenderer/drawers/r_draw_rgba.cpp b/src/rendering/swrenderer/drawers/r_draw_rgba.cpp similarity index 99% rename from src/swrenderer/drawers/r_draw_rgba.cpp rename to src/rendering/swrenderer/drawers/r_draw_rgba.cpp index f43831d655..9c3e328cd2 100644 --- a/src/swrenderer/drawers/r_draw_rgba.cpp +++ b/src/rendering/swrenderer/drawers/r_draw_rgba.cpp @@ -36,7 +36,7 @@ #include "templates.h" #include "doomdef.h" -#include "i_system.h" + #include "w_wad.h" #include "v_video.h" #include "doomstat.h" diff --git a/src/swrenderer/drawers/r_draw_rgba.h b/src/rendering/swrenderer/drawers/r_draw_rgba.h similarity index 100% rename from src/swrenderer/drawers/r_draw_rgba.h rename to src/rendering/swrenderer/drawers/r_draw_rgba.h diff --git a/src/swrenderer/drawers/r_draw_sky32.h b/src/rendering/swrenderer/drawers/r_draw_sky32.h similarity index 100% rename from src/swrenderer/drawers/r_draw_sky32.h rename to src/rendering/swrenderer/drawers/r_draw_sky32.h diff --git a/src/swrenderer/drawers/r_draw_sky32_sse2.h b/src/rendering/swrenderer/drawers/r_draw_sky32_sse2.h similarity index 100% rename from src/swrenderer/drawers/r_draw_sky32_sse2.h rename to src/rendering/swrenderer/drawers/r_draw_sky32_sse2.h diff --git a/src/swrenderer/drawers/r_draw_span32.h b/src/rendering/swrenderer/drawers/r_draw_span32.h similarity index 100% rename from src/swrenderer/drawers/r_draw_span32.h rename to src/rendering/swrenderer/drawers/r_draw_span32.h diff --git a/src/swrenderer/drawers/r_draw_span32_sse2.h b/src/rendering/swrenderer/drawers/r_draw_span32_sse2.h similarity index 100% rename from src/swrenderer/drawers/r_draw_span32_sse2.h rename to src/rendering/swrenderer/drawers/r_draw_span32_sse2.h diff --git a/src/swrenderer/drawers/r_draw_sprite32.h b/src/rendering/swrenderer/drawers/r_draw_sprite32.h similarity index 100% rename from src/swrenderer/drawers/r_draw_sprite32.h rename to src/rendering/swrenderer/drawers/r_draw_sprite32.h diff --git a/src/swrenderer/drawers/r_draw_sprite32_sse2.h b/src/rendering/swrenderer/drawers/r_draw_sprite32_sse2.h similarity index 100% rename from src/swrenderer/drawers/r_draw_sprite32_sse2.h rename to src/rendering/swrenderer/drawers/r_draw_sprite32_sse2.h diff --git a/src/swrenderer/drawers/r_draw_wall32.h b/src/rendering/swrenderer/drawers/r_draw_wall32.h similarity index 100% rename from src/swrenderer/drawers/r_draw_wall32.h rename to src/rendering/swrenderer/drawers/r_draw_wall32.h diff --git a/src/swrenderer/drawers/r_draw_wall32_sse2.h b/src/rendering/swrenderer/drawers/r_draw_wall32_sse2.h similarity index 100% rename from src/swrenderer/drawers/r_draw_wall32_sse2.h rename to src/rendering/swrenderer/drawers/r_draw_wall32_sse2.h diff --git a/src/swrenderer/drawers/r_thread.cpp b/src/rendering/swrenderer/drawers/r_thread.cpp similarity index 100% rename from src/swrenderer/drawers/r_thread.cpp rename to src/rendering/swrenderer/drawers/r_thread.cpp diff --git a/src/swrenderer/drawers/r_thread.h b/src/rendering/swrenderer/drawers/r_thread.h similarity index 100% rename from src/swrenderer/drawers/r_thread.h rename to src/rendering/swrenderer/drawers/r_thread.h diff --git a/src/swrenderer/line/r_farclip_line.cpp b/src/rendering/swrenderer/line/r_farclip_line.cpp similarity index 99% rename from src/swrenderer/line/r_farclip_line.cpp rename to src/rendering/swrenderer/line/r_farclip_line.cpp index 5b55e654f4..91f2774a2e 100644 --- a/src/swrenderer/line/r_farclip_line.cpp +++ b/src/rendering/swrenderer/line/r_farclip_line.cpp @@ -21,7 +21,7 @@ #include #include #include "templates.h" -#include "i_system.h" + #include "doomdef.h" #include "doomstat.h" #include "doomdata.h" diff --git a/src/swrenderer/line/r_farclip_line.h b/src/rendering/swrenderer/line/r_farclip_line.h similarity index 100% rename from src/swrenderer/line/r_farclip_line.h rename to src/rendering/swrenderer/line/r_farclip_line.h diff --git a/src/swrenderer/line/r_fogboundary.cpp b/src/rendering/swrenderer/line/r_fogboundary.cpp similarity index 99% rename from src/swrenderer/line/r_fogboundary.cpp rename to src/rendering/swrenderer/line/r_fogboundary.cpp index 8a20b9028b..8831e15c4d 100644 --- a/src/swrenderer/line/r_fogboundary.cpp +++ b/src/rendering/swrenderer/line/r_fogboundary.cpp @@ -23,7 +23,7 @@ #include #include #include "templates.h" -#include "i_system.h" + #include "w_wad.h" #include "doomdef.h" #include "doomstat.h" diff --git a/src/swrenderer/line/r_fogboundary.h b/src/rendering/swrenderer/line/r_fogboundary.h similarity index 100% rename from src/swrenderer/line/r_fogboundary.h rename to src/rendering/swrenderer/line/r_fogboundary.h diff --git a/src/swrenderer/line/r_line.cpp b/src/rendering/swrenderer/line/r_line.cpp similarity index 98% rename from src/swrenderer/line/r_line.cpp rename to src/rendering/swrenderer/line/r_line.cpp index 528da5d6ec..04d43b3bde 100644 --- a/src/swrenderer/line/r_line.cpp +++ b/src/rendering/swrenderer/line/r_line.cpp @@ -23,7 +23,7 @@ #include #include #include "templates.h" -#include "i_system.h" +#include "doomerrors.h" #include "doomdef.h" #include "doomstat.h" #include "doomdata.h" @@ -444,7 +444,7 @@ namespace swrenderer double yscale = (pic ? pic->GetScale().Y : 1.0) * sidedef->GetTextureYScale(side_t::mid); fixed_t xoffset = FLOAT2FIXED(sidedef->GetTextureXOffset(side_t::mid)); - if (pic && pic->useWorldPanning()) + if (pic && pic->useWorldPanning(sidedef->GetLevel())) { xoffset = xs_RoundToInt(xoffset * lwallscale); } @@ -591,7 +591,7 @@ namespace swrenderer if (mFrontSector->e && mFrontSector->e->XFloor.lightlist.Size()) return true; if (mBackSector->e && mBackSector->e->XFloor.lightlist.Size()) return true; - if (sidedef->GetTexture(side_t::mid).isValid() && ((ib_compatflags & BCOMPATF_CLIPMIDTEX) || (linedef->flags & (ML_CLIP_MIDTEX | ML_WRAP_MIDTEX)) || sidedef->Flags & (WALLF_CLIP_MIDTEX | WALLF_WRAP_MIDTEX))) return true; + if (sidedef->GetTexture(side_t::mid).isValid() && ((mFrontSector->Level->ib_compatflags & BCOMPATF_CLIPMIDTEX) || (linedef->flags & (ML_CLIP_MIDTEX | ML_WRAP_MIDTEX)) || sidedef->Flags & (WALLF_CLIP_MIDTEX | WALLF_WRAP_MIDTEX))) return true; return false; } @@ -653,7 +653,7 @@ namespace swrenderer if (sidedef->GetTexture(side_t::mid).isValid()) { - if (ib_compatflags & BCOMPATF_CLIPMIDTEX) return true; + if (mFrontSector->Level->ib_compatflags & BCOMPATF_CLIPMIDTEX) return true; if (linedef->flags & (ML_CLIP_MIDTEX | ML_WRAP_MIDTEX)) return true; if (sidedef->Flags & (WALLF_CLIP_MIDTEX | WALLF_WRAP_MIDTEX)) return true; } @@ -822,7 +822,7 @@ namespace swrenderer mTopPart.TextureMid = (mBackSector->GetPlaneTexZ(sector_t::ceiling) - Thread->Viewport->viewpoint.Pos.Z) * yrepeat; } } - if (mTopPart.Texture->useWorldPanning()) + if (mTopPart.Texture->useWorldPanning(mLineSegment->GetLevel())) { mTopPart.TextureMid += rowoffset * yrepeat; } @@ -880,7 +880,7 @@ namespace swrenderer mMiddlePart.TextureMid = (mFrontSector->GetPlaneTexZ(sector_t::ceiling) - Thread->Viewport->viewpoint.Pos.Z) * yrepeat + mMiddlePart.Texture->GetHeight(); } } - if (mMiddlePart.Texture->useWorldPanning()) + if (mMiddlePart.Texture->useWorldPanning(mLineSegment->GetLevel())) { mMiddlePart.TextureMid += rowoffset * yrepeat; } @@ -947,7 +947,7 @@ namespace swrenderer mBottomPart.TextureMid = (mBackSector->GetPlaneTexZ(sector_t::floor) - Thread->Viewport->viewpoint.Pos.Z) * yrepeat + mBottomPart.Texture->GetHeight(); } } - if (mBottomPart.Texture->useWorldPanning()) + if (mBottomPart.Texture->useWorldPanning(mLineSegment->GetLevel())) { mBottomPart.TextureMid += rowoffset * yrepeat; } @@ -1122,7 +1122,7 @@ namespace swrenderer lwallscale = xscale; } fixed_t offset; - if (mTopPart.Texture->useWorldPanning()) + if (mTopPart.Texture->useWorldPanning(mLineSegment->GetLevel())) { offset = xs_RoundToInt(mTopPart.TextureOffsetU * xscale); } @@ -1153,7 +1153,7 @@ namespace swrenderer lwallscale = xscale; } fixed_t offset; - if (mMiddlePart.Texture->useWorldPanning()) + if (mMiddlePart.Texture->useWorldPanning(mLineSegment->GetLevel())) { offset = xs_RoundToInt(mMiddlePart.TextureOffsetU * xscale); } @@ -1185,7 +1185,7 @@ namespace swrenderer lwallscale = xscale; } fixed_t offset; - if (mBottomPart.Texture->useWorldPanning()) + if (mBottomPart.Texture->useWorldPanning(mLineSegment->GetLevel())) { offset = xs_RoundToInt(mBottomPart.TextureOffsetU * xscale); } diff --git a/src/swrenderer/line/r_line.h b/src/rendering/swrenderer/line/r_line.h similarity index 100% rename from src/swrenderer/line/r_line.h rename to src/rendering/swrenderer/line/r_line.h diff --git a/src/swrenderer/line/r_renderdrawsegment.cpp b/src/rendering/swrenderer/line/r_renderdrawsegment.cpp similarity index 98% rename from src/swrenderer/line/r_renderdrawsegment.cpp rename to src/rendering/swrenderer/line/r_renderdrawsegment.cpp index 4f404dcb25..5758b08ee9 100644 --- a/src/swrenderer/line/r_renderdrawsegment.cpp +++ b/src/rendering/swrenderer/line/r_renderdrawsegment.cpp @@ -24,7 +24,7 @@ #include "templates.h" #include "doomdef.h" #include "m_bbox.h" -#include "i_system.h" + #include "p_lnspec.h" #include "p_setup.h" #include "a_sharedglobal.h" @@ -150,7 +150,7 @@ namespace swrenderer return false; FTexture *ttex = TexMan.GetPalettedTexture(curline->sidedef->GetTexture(side_t::mid), true); - if (i_compatflags & COMPATF_MASKEDMIDTEX) + if (curline->GetLevel()->i_compatflags & COMPATF_MASKEDMIDTEX) { ttex = ttex->GetRawTexture(); } @@ -197,7 +197,7 @@ namespace swrenderer MaskedScaleY = -MaskedScaleY; sprflipvert = true; } - if (tex->useWorldPanning()) + if (tex->useWorldPanning(curline->GetLevel())) { // rowoffset is added before the multiply so that the masked texture will // still be positioned in world units rather than texels. @@ -294,7 +294,7 @@ namespace swrenderer // this drawseg. if ((curline->linedef->flags & ML_CLIP_MIDTEX) || (curline->sidedef->Flags & WALLF_CLIP_MIDTEX) || - (ib_compatflags & BCOMPATF_CLIPMIDTEX)) + (curline->GetLevel()->ib_compatflags & BCOMPATF_CLIPMIDTEX)) { ClipMidtex(x1, x2); } @@ -332,7 +332,7 @@ namespace swrenderer } else { // Texture does wrap vertically. - if (tex->useWorldPanning()) + if (tex->useWorldPanning(curline->GetLevel())) { // rowoffset is added before the multiply so that the masked texture will // still be positioned in world units rather than texels. @@ -356,7 +356,7 @@ namespace swrenderer // this drawseg. if ((curline->linedef->flags & ML_CLIP_MIDTEX) || (curline->sidedef->Flags & WALLF_CLIP_MIDTEX) || - (ib_compatflags & BCOMPATF_CLIPMIDTEX)) + (curline->GetLevel()->ib_compatflags & BCOMPATF_CLIPMIDTEX)) { ClipMidtex(x1, x2); } @@ -447,7 +447,7 @@ namespace swrenderer rowoffset += rw_pic->GetHeight(); } double texturemid = (planez - Thread->Viewport->viewpoint.Pos.Z) * yscale; - if (rw_pic->useWorldPanning()) + if (rw_pic->useWorldPanning(curline->GetLevel())) { // rowoffset is added before the multiply so that the masked texture will // still be positioned in world units rather than texels. diff --git a/src/swrenderer/line/r_renderdrawsegment.h b/src/rendering/swrenderer/line/r_renderdrawsegment.h similarity index 100% rename from src/swrenderer/line/r_renderdrawsegment.h rename to src/rendering/swrenderer/line/r_renderdrawsegment.h diff --git a/src/swrenderer/line/r_walldraw.cpp b/src/rendering/swrenderer/line/r_walldraw.cpp similarity index 100% rename from src/swrenderer/line/r_walldraw.cpp rename to src/rendering/swrenderer/line/r_walldraw.cpp diff --git a/src/swrenderer/line/r_walldraw.h b/src/rendering/swrenderer/line/r_walldraw.h similarity index 100% rename from src/swrenderer/line/r_walldraw.h rename to src/rendering/swrenderer/line/r_walldraw.h diff --git a/src/swrenderer/line/r_wallsetup.cpp b/src/rendering/swrenderer/line/r_wallsetup.cpp similarity index 97% rename from src/swrenderer/line/r_wallsetup.cpp rename to src/rendering/swrenderer/line/r_wallsetup.cpp index 87c491b673..f1b2f2518a 100644 --- a/src/swrenderer/line/r_wallsetup.cpp +++ b/src/rendering/swrenderer/line/r_wallsetup.cpp @@ -23,7 +23,7 @@ #include #include #include "templates.h" -#include "i_system.h" + #include "doomdef.h" #include "doomstat.h" #include "doomdata.h" @@ -266,7 +266,7 @@ namespace swrenderer if (!lit) { basecolormap = GetColorTable(frontsector->Colormap, frontsector->SpecialColors[sector_t::walltop]); - foggy = level.fadeto || frontsector->Colormap.FadeColor || (level.flags & LEVEL_HASFADETABLE); + foggy = frontsector->Level->fadeto || frontsector->Colormap.FadeColor || (frontsector->Level->flags & LEVEL_HASFADETABLE); if (!(lineseg->sidedef->Flags & WALLF_POLYOBJ)) lightlevel = lineseg->sidedef->GetLightLevel(foggy, frontsector->lightlevel); @@ -276,7 +276,7 @@ namespace swrenderer else { basecolormap = GetColorTable(lit->extra_colormap, frontsector->SpecialColors[sector_t::walltop]); - foggy = level.fadeto || basecolormap->Fade || (level.flags & LEVEL_HASFADETABLE); + foggy = frontsector->Level->fadeto || basecolormap->Fade || (frontsector->Level->flags & LEVEL_HASFADETABLE); lightlevel = lineseg->sidedef->GetLightLevel(foggy, *lit->p_lightlevel, lit->lightsource != nullptr); } } diff --git a/src/swrenderer/line/r_wallsetup.h b/src/rendering/swrenderer/line/r_wallsetup.h similarity index 100% rename from src/swrenderer/line/r_wallsetup.h rename to src/rendering/swrenderer/line/r_wallsetup.h diff --git a/src/swrenderer/plane/r_flatplane.cpp b/src/rendering/swrenderer/plane/r_flatplane.cpp similarity index 98% rename from src/swrenderer/plane/r_flatplane.cpp rename to src/rendering/swrenderer/plane/r_flatplane.cpp index 11f8fef865..278fe3e148 100644 --- a/src/swrenderer/plane/r_flatplane.cpp +++ b/src/rendering/swrenderer/plane/r_flatplane.cpp @@ -23,7 +23,7 @@ #include #include #include "templates.h" -#include "i_system.h" +#include "doomerrors.h" #include "w_wad.h" #include "doomdef.h" #include "doomstat.h" @@ -135,7 +135,8 @@ namespace swrenderer planeheight = fabs(pl->height.Zat0() - Thread->Viewport->viewpoint.Pos.Z); // [RH] set foggy flag - foggy = (level.fadeto || colormap->Fade || (level.flags & LEVEL_HASFADETABLE)); + auto Level = Thread->Viewport->Level(); + foggy = (Level->fadeto || colormap->Fade || (Level->flags & LEVEL_HASFADETABLE)); lightlevel = pl->lightlevel; CameraLight *cameraLight = CameraLight::Instance(); diff --git a/src/swrenderer/plane/r_flatplane.h b/src/rendering/swrenderer/plane/r_flatplane.h similarity index 100% rename from src/swrenderer/plane/r_flatplane.h rename to src/rendering/swrenderer/plane/r_flatplane.h diff --git a/src/swrenderer/plane/r_planerenderer.cpp b/src/rendering/swrenderer/plane/r_planerenderer.cpp similarity index 99% rename from src/swrenderer/plane/r_planerenderer.cpp rename to src/rendering/swrenderer/plane/r_planerenderer.cpp index bc1eb22f91..5a07a319ad 100644 --- a/src/swrenderer/plane/r_planerenderer.cpp +++ b/src/rendering/swrenderer/plane/r_planerenderer.cpp @@ -24,7 +24,7 @@ #include #include "templates.h" -#include "i_system.h" + #include "w_wad.h" #include "doomdef.h" #include "doomstat.h" diff --git a/src/swrenderer/plane/r_planerenderer.h b/src/rendering/swrenderer/plane/r_planerenderer.h similarity index 100% rename from src/swrenderer/plane/r_planerenderer.h rename to src/rendering/swrenderer/plane/r_planerenderer.h diff --git a/src/swrenderer/plane/r_skyplane.cpp b/src/rendering/swrenderer/plane/r_skyplane.cpp similarity index 90% rename from src/swrenderer/plane/r_skyplane.cpp rename to src/rendering/swrenderer/plane/r_skyplane.cpp index 24653860d8..a3ddae79b1 100644 --- a/src/swrenderer/plane/r_skyplane.cpp +++ b/src/rendering/swrenderer/plane/r_skyplane.cpp @@ -23,7 +23,7 @@ #include #include #include "templates.h" -#include "i_system.h" + #include "w_wad.h" #include "doomdef.h" #include "doomstat.h" @@ -70,9 +70,10 @@ namespace swrenderer RenderSkyPlane::RenderSkyPlane(RenderThread *thread) { Thread = thread; + auto Level = Thread->Viewport->Level(); - auto skytex1 = TexMan.GetPalettedTexture(sky1texture, true); - auto skytex2 = TexMan.GetPalettedTexture(sky2texture, true); + auto skytex1 = TexMan.GetPalettedTexture(Level->skytexture1, true); + auto skytex2 = TexMan.GetPalettedTexture(Level->skytexture2, true); if (skytex1 == nullptr) return; @@ -87,7 +88,7 @@ namespace swrenderer } else if (skyheight > 200) { - skytexturemid = (200 - skyheight) * sskytex1->GetScale().Y + ((r_skymode == 2 && !(level.flags & LEVEL_FORCETILEDSKY)) ? skytex1->GetSkyOffset() : 0); + skytexturemid = (200 - skyheight) * sskytex1->GetScale().Y + ((r_skymode == 2 && !(Level->flags & LEVEL_FORCETILEDSKY)) ? skytex1->GetSkyOffset() : 0); } if (viewwidth != 0 && viewheight != 0) @@ -99,7 +100,7 @@ namespace swrenderer skyscale *= float(90. / r_viewpoint.FieldOfView.Degrees); } - if (skystretch) + if (Level->skystretch) { skyscale *= (double)SKYSTRETCH_HEIGHT / skyheight; skyiscale *= skyheight / (float)SKYSTRETCH_HEIGHT; @@ -118,16 +119,17 @@ namespace swrenderer { FTextureID sky1tex, sky2tex; double frontdpos = 0, backdpos = 0; + auto Level = Thread->Viewport->Level(); - if ((level.flags & LEVEL_SWAPSKIES) && !(level.flags & LEVEL_DOUBLESKY)) + if ((Level->flags & LEVEL_SWAPSKIES) && !(Level->flags & LEVEL_DOUBLESKY)) { - sky1tex = sky2texture; + sky1tex = Level->skytexture2; } else { - sky1tex = sky1texture; + sky1tex = Level->skytexture1; } - sky2tex = sky2texture; + sky2tex = Level->skytexture2; skymid = skytexturemid; skyangle = Thread->Viewport->viewpoint.Angles.Yaw.BAMs(); @@ -137,13 +139,13 @@ namespace swrenderer { // use sky1 sky1: frontskytex = GetSWTex(sky1tex); - if (level.flags & LEVEL_DOUBLESKY) + if (Level->flags & LEVEL_DOUBLESKY) backskytex = GetSWTex(sky2tex); else backskytex = NULL; skyflip = 0; - frontdpos = sky1pos; - backdpos = sky2pos; + frontdpos = Level->sky1pos; + backdpos = Level->sky2pos; frontcyl = sky1cyl; backcyl = sky2cyl; } @@ -153,12 +155,12 @@ namespace swrenderer backskytex = NULL; frontcyl = sky2cyl; skyflip = 0; - frontdpos = sky2pos; + frontdpos = Level->sky2pos; } else { // MBF's linedef-controlled skies // Sky Linedef - const line_t *l = &level.lines[(pl->sky & ~PL_SKYFLAT) - 1]; + const line_t *l = &Level->lines[(pl->sky & ~PL_SKYFLAT) - 1]; // Sky transferred from first sidedef const side_t *s = l->sidedef[0]; @@ -166,7 +168,7 @@ namespace swrenderer // Texture comes from upper texture of reference sidedef // [RH] If swapping skies, then use the lower sidedef - if (level.flags & LEVEL_SWAPSKIES && s->GetTexture(side_t::bottom).isValid()) + if (Level->flags & LEVEL_SWAPSKIES && s->GetTexture(side_t::bottom).isValid()) { pos = side_t::bottom; } @@ -200,7 +202,7 @@ namespace swrenderer int frontxscale = int(frontskytex->GetScale().X * 1024); frontcyl = MAX(frontskytex->GetWidth(), frontxscale); - if (skystretch) + if (Level->skystretch) { skymid = skymid * frontskytex->GetScaledHeightDouble() / SKYSTRETCH_HEIGHT; } @@ -224,6 +226,7 @@ namespace swrenderer { RenderPortal *renderportal = Thread->Portal.get(); auto viewport = Thread->Viewport.get(); + auto Level = viewport->Level(); double uv_stepd = skyiscale * yrepeat; double v = (texturemid + uv_stepd * (y1 - viewport->CenterY + 0.5)) / frontskytex->GetHeight(); @@ -256,7 +259,7 @@ namespace swrenderer drawerargs.SetTextureVPos(uv_pos); drawerargs.SetDest(viewport, start_x, y1); drawerargs.SetCount(y2 - y1); - drawerargs.SetFadeSky(r_skymode == 2 && !(level.flags & LEVEL_FORCETILEDSKY)); + drawerargs.SetFadeSky(r_skymode == 2 && !(Level->flags & LEVEL_FORCETILEDSKY)); drawerargs.SetSolidTop(frontskytex->GetSkyCapColor(false)); drawerargs.SetSolidBottom(frontskytex->GetSkyCapColor(true)); diff --git a/src/swrenderer/plane/r_skyplane.h b/src/rendering/swrenderer/plane/r_skyplane.h similarity index 100% rename from src/swrenderer/plane/r_skyplane.h rename to src/rendering/swrenderer/plane/r_skyplane.h diff --git a/src/swrenderer/plane/r_slopeplane.cpp b/src/rendering/swrenderer/plane/r_slopeplane.cpp similarity index 98% rename from src/swrenderer/plane/r_slopeplane.cpp rename to src/rendering/swrenderer/plane/r_slopeplane.cpp index 3c7dcb72d1..e2249a30f8 100644 --- a/src/swrenderer/plane/r_slopeplane.cpp +++ b/src/rendering/swrenderer/plane/r_slopeplane.cpp @@ -23,7 +23,7 @@ #include #include #include "templates.h" -#include "i_system.h" + #include "w_wad.h" #include "doomdef.h" #include "doomstat.h" @@ -174,7 +174,8 @@ namespace swrenderer // [RH] set foggy flag basecolormap = colormap; - foggy = level.fadeto || basecolormap->Fade || (level.flags & LEVEL_HASFADETABLE); + auto Level = viewport->Level(); + foggy = Level->fadeto || basecolormap->Fade || (Level->flags & LEVEL_HASFADETABLE); planelightfloat = (Thread->Light->SlopePlaneGlobVis(foggy) * lxscale * lyscale) / (fabs(pl->height.ZatPoint(Thread->Viewport->viewpoint.Pos) - Thread->Viewport->viewpoint.Pos.Z)) / 65536.f; diff --git a/src/swrenderer/plane/r_slopeplane.h b/src/rendering/swrenderer/plane/r_slopeplane.h similarity index 100% rename from src/swrenderer/plane/r_slopeplane.h rename to src/rendering/swrenderer/plane/r_slopeplane.h diff --git a/src/swrenderer/plane/r_visibleplane.cpp b/src/rendering/swrenderer/plane/r_visibleplane.cpp similarity index 99% rename from src/swrenderer/plane/r_visibleplane.cpp rename to src/rendering/swrenderer/plane/r_visibleplane.cpp index a61b6e84d0..2d5cf854d1 100644 --- a/src/swrenderer/plane/r_visibleplane.cpp +++ b/src/rendering/swrenderer/plane/r_visibleplane.cpp @@ -24,7 +24,7 @@ #include #include "templates.h" -#include "i_system.h" + #include "w_wad.h" #include "doomdef.h" #include "doomstat.h" diff --git a/src/swrenderer/plane/r_visibleplane.h b/src/rendering/swrenderer/plane/r_visibleplane.h similarity index 100% rename from src/swrenderer/plane/r_visibleplane.h rename to src/rendering/swrenderer/plane/r_visibleplane.h diff --git a/src/swrenderer/plane/r_visibleplanelist.cpp b/src/rendering/swrenderer/plane/r_visibleplanelist.cpp similarity index 99% rename from src/swrenderer/plane/r_visibleplanelist.cpp rename to src/rendering/swrenderer/plane/r_visibleplanelist.cpp index 3c65e63869..d157bc42a7 100644 --- a/src/swrenderer/plane/r_visibleplanelist.cpp +++ b/src/rendering/swrenderer/plane/r_visibleplanelist.cpp @@ -24,7 +24,7 @@ #include #include "templates.h" -#include "i_system.h" + #include "w_wad.h" #include "doomdef.h" #include "doomstat.h" diff --git a/src/swrenderer/plane/r_visibleplanelist.h b/src/rendering/swrenderer/plane/r_visibleplanelist.h similarity index 100% rename from src/swrenderer/plane/r_visibleplanelist.h rename to src/rendering/swrenderer/plane/r_visibleplanelist.h diff --git a/src/swrenderer/r_all.cpp b/src/rendering/swrenderer/r_all.cpp similarity index 100% rename from src/swrenderer/r_all.cpp rename to src/rendering/swrenderer/r_all.cpp diff --git a/src/swrenderer/r_memory.cpp b/src/rendering/swrenderer/r_memory.cpp similarity index 98% rename from src/swrenderer/r_memory.cpp rename to src/rendering/swrenderer/r_memory.cpp index 38fc7d8688..6e0556edba 100644 --- a/src/swrenderer/r_memory.cpp +++ b/src/rendering/swrenderer/r_memory.cpp @@ -22,7 +22,7 @@ #include "templates.h" #include "doomdef.h" #include "m_bbox.h" -#include "i_system.h" + #include "p_lnspec.h" #include "p_setup.h" #include "swrenderer/drawers/r_draw.h" diff --git a/src/swrenderer/r_memory.h b/src/rendering/swrenderer/r_memory.h similarity index 100% rename from src/swrenderer/r_memory.h rename to src/rendering/swrenderer/r_memory.h diff --git a/src/swrenderer/r_renderthread.cpp b/src/rendering/swrenderer/r_renderthread.cpp similarity index 99% rename from src/swrenderer/r_renderthread.cpp rename to src/rendering/swrenderer/r_renderthread.cpp index 86e7897210..036e297307 100644 --- a/src/swrenderer/r_renderthread.cpp +++ b/src/rendering/swrenderer/r_renderthread.cpp @@ -24,7 +24,7 @@ #include "templates.h" #include "doomdef.h" #include "m_bbox.h" -#include "i_system.h" + #include "p_lnspec.h" #include "p_setup.h" #include "a_sharedglobal.h" diff --git a/src/swrenderer/r_renderthread.h b/src/rendering/swrenderer/r_renderthread.h similarity index 100% rename from src/swrenderer/r_renderthread.h rename to src/rendering/swrenderer/r_renderthread.h diff --git a/src/swrenderer/r_swcolormaps.cpp b/src/rendering/swrenderer/r_swcolormaps.cpp similarity index 99% rename from src/swrenderer/r_swcolormaps.cpp rename to src/rendering/swrenderer/r_swcolormaps.cpp index d5b374ad18..712107be8b 100644 --- a/src/swrenderer/r_swcolormaps.cpp +++ b/src/rendering/swrenderer/r_swcolormaps.cpp @@ -524,7 +524,10 @@ CCMD (testfade) { color = V_GetColorFromString (NULL, argv[1]); } - level.fadeto = color; + for (auto Level : AllLevels()) + { + Level->fadeto = color; + } NormalLight.ChangeFade (color); } } diff --git a/src/swrenderer/r_swcolormaps.h b/src/rendering/swrenderer/r_swcolormaps.h similarity index 72% rename from src/swrenderer/r_swcolormaps.h rename to src/rendering/swrenderer/r_swcolormaps.h index 76d5faa537..b7d053d9b2 100644 --- a/src/swrenderer/r_swcolormaps.h +++ b/src/rendering/swrenderer/r_swcolormaps.h @@ -47,16 +47,9 @@ void SetDefaultColormap (const char *name); #endif // MSVC needs the forceinline here. -FORCEINLINE FDynamicColormap *GetColorTable(const FColormap &cm, PalEntry SpecialColor = 0xffffff, bool forsprites = false) +FORCEINLINE FDynamicColormap *GetColorTable(const FColormap &cm, PalEntry SpecialColor = 0xffffff) { - PalEntry c; - if (!forsprites || !(level.flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING)) c = SpecialColor.Modulate(cm.LightColor); - else - { - c = cm.LightColor; - c.Decolorize(); - c = SpecialColor.Modulate(c); - } + PalEntry c = SpecialColor.Modulate(cm.LightColor); // First colormap is the default Doom colormap. // testcolor and testfade CCMDs modifies the first colormap, so we have to do the check without looking at the actual values stored in NormalLight. @@ -65,3 +58,22 @@ FORCEINLINE FDynamicColormap *GetColorTable(const FColormap &cm, PalEntry Specia return GetSpecialLights(c, cm.FadeColor, cm.Desaturation); } + +FORCEINLINE FDynamicColormap *GetSpriteColorTable(const FColormap &cm, PalEntry SpecialColor, bool nocoloredspritelighting) +{ + PalEntry c; + if (!nocoloredspritelighting) c = SpecialColor.Modulate(cm.LightColor); + else + { + c = cm.LightColor; + c.Decolorize(); + c = SpecialColor.Modulate(c); + } + + // First colormap is the default Doom colormap. + // testcolor and testfade CCMDs modifies the first colormap, so we have to do the check without looking at the actual values stored in NormalLight. + if (c == PalEntry(255, 255, 255) && cm.FadeColor == 0 && cm.Desaturation == 0) + return &NormalLight; + + return GetSpecialLights(c, cm.FadeColor, cm.Desaturation); +} diff --git a/src/swrenderer/r_swrenderer.cpp b/src/rendering/swrenderer/r_swrenderer.cpp similarity index 97% rename from src/swrenderer/r_swrenderer.cpp rename to src/rendering/swrenderer/r_swrenderer.cpp index 3414265325..93802f4c81 100644 --- a/src/swrenderer/r_swrenderer.cpp +++ b/src/rendering/swrenderer/r_swrenderer.cpp @@ -202,7 +202,7 @@ void FSoftwareRenderer::RenderView(player_t *player, DCanvas *target, void *vide r_viewwindow = mScene.MainThread()->Viewport->viewwindow; } - level.canvasTextureInfo.UpdateAll([&](AActor *camera, FCanvasTexture *camtex, double fov) + r_viewpoint.ViewLevel->canvasTextureInfo.UpdateAll([&](AActor *camera, FCanvasTexture *camtex, double fov) { RenderTextureView(camtex, camera, fov); }); @@ -296,15 +296,15 @@ void FSoftwareRenderer::RenderTextureView (FCanvasTexture *camtex, AActor *viewp r_viewwindow = cameraViewwindow; } -void FSoftwareRenderer::SetColormap() +void FSoftwareRenderer::SetColormap(FLevelLocals *Level) { // This just sets the default colormap for the spftware renderer. NormalLight.Maps = realcolormaps.Maps; NormalLight.ChangeColor(PalEntry(255, 255, 255), 0); - NormalLight.ChangeFade(level.fadeto); - if (level.fadeto == 0) + NormalLight.ChangeFade(Level->fadeto); + if (Level->fadeto == 0) { - SetDefaultColormap(level.info->FadeTable); + SetDefaultColormap(Level->info->FadeTable); } } diff --git a/src/swrenderer/r_swrenderer.h b/src/rendering/swrenderer/r_swrenderer.h similarity index 95% rename from src/swrenderer/r_swrenderer.h rename to src/rendering/swrenderer/r_swrenderer.h index 61d0044ff5..84627f2cda 100644 --- a/src/swrenderer/r_swrenderer.h +++ b/src/rendering/swrenderer/r_swrenderer.h @@ -23,7 +23,7 @@ struct FSoftwareRenderer : public FRenderer void SetClearColor(int color) override; void RenderTextureView (FCanvasTexture *tex, AActor *viewpoint, double fov); - void SetColormap() override; + void SetColormap(FLevelLocals *Level) override; void Init() override; private: diff --git a/src/swrenderer/r_swscene.cpp b/src/rendering/swrenderer/r_swscene.cpp similarity index 99% rename from src/swrenderer/r_swscene.cpp rename to src/rendering/swrenderer/r_swscene.cpp index 013308bbf8..164ffd536c 100644 --- a/src/swrenderer/r_swscene.cpp +++ b/src/rendering/swrenderer/r_swscene.cpp @@ -34,6 +34,7 @@ #include "textures/bitmap.h" #include "swrenderer/scene/r_light.h" #include "image.h" +#include "doomerrors.h" // [RH] Base blending values (for e.g. underwater) int BaseBlendR, BaseBlendG, BaseBlendB; diff --git a/src/swrenderer/r_swscene.h b/src/rendering/swrenderer/r_swscene.h similarity index 100% rename from src/swrenderer/r_swscene.h rename to src/rendering/swrenderer/r_swscene.h diff --git a/src/swrenderer/scene/r_3dfloors.cpp b/src/rendering/swrenderer/scene/r_3dfloors.cpp similarity index 100% rename from src/swrenderer/scene/r_3dfloors.cpp rename to src/rendering/swrenderer/scene/r_3dfloors.cpp diff --git a/src/swrenderer/scene/r_3dfloors.h b/src/rendering/swrenderer/scene/r_3dfloors.h similarity index 100% rename from src/swrenderer/scene/r_3dfloors.h rename to src/rendering/swrenderer/scene/r_3dfloors.h diff --git a/src/swrenderer/scene/r_light.cpp b/src/rendering/swrenderer/scene/r_light.cpp similarity index 96% rename from src/swrenderer/scene/r_light.cpp rename to src/rendering/swrenderer/scene/r_light.cpp index 73a9e84d72..0af4723a1b 100644 --- a/src/swrenderer/scene/r_light.cpp +++ b/src/rendering/swrenderer/scene/r_light.cpp @@ -24,7 +24,7 @@ #include #include "templates.h" -#include "i_system.h" + #include "w_wad.h" #include "doomdef.h" #include "doomstat.h" @@ -39,6 +39,7 @@ #include "g_level.h" #include "r_utility.h" #include "d_player.h" +#include "g_levellocals.h" #include "swrenderer/scene/r_light.h" #include "swrenderer/viewport/r_viewport.h" @@ -139,12 +140,12 @@ namespace swrenderer TiltVisibility = float(vis * viewport->viewwindow.FocalTangent * (16.f * 320.f) / viewwidth); - NoLightFade = !!(level.flags3 & LEVEL3_NOLIGHTFADE); + NoLightFade = !!(viewport->Level()->flags3 & LEVEL3_NOLIGHTFADE); } - fixed_t LightVisibility::LightLevelToShadeImpl(int lightlevel, bool foggy) + fixed_t LightVisibility::LightLevelToShadeImpl(RenderViewport *viewport, int lightlevel, bool foggy) { - bool nolightfade = !foggy && ((level.flags3 & LEVEL3_NOLIGHTFADE)); + bool nolightfade = !foggy && ((viewport->Level()->flags3 & LEVEL3_NOLIGHTFADE)); if (nolightfade) { return (MAX(255 - lightlevel, 0) * NUMCOLORMAPS) << (FRACBITS - 8); diff --git a/src/swrenderer/scene/r_light.h b/src/rendering/swrenderer/scene/r_light.h similarity index 95% rename from src/swrenderer/scene/r_light.h rename to src/rendering/swrenderer/scene/r_light.h index 5c2938cecb..d2d2a383da 100644 --- a/src/swrenderer/scene/r_light.h +++ b/src/rendering/swrenderer/scene/r_light.h @@ -87,7 +87,7 @@ namespace swrenderer double SlopePlaneGlobVis(bool foggy) const { return (NoLightFade && !foggy) ? 0.0f : TiltVisibility; } - static fixed_t LightLevelToShade(int lightlevel, bool foggy, RenderViewport *viewport) { return LightLevelToShadeImpl(lightlevel + ActualExtraLight(foggy, viewport), foggy); } + static fixed_t LightLevelToShade(int lightlevel, bool foggy, RenderViewport *viewport) { return LightLevelToShadeImpl(viewport, lightlevel + ActualExtraLight(foggy, viewport), foggy); } static int ActualExtraLight(bool fog, RenderViewport *viewport) { return fog ? 0 : viewport->viewpoint.extralight << 4; } @@ -96,7 +96,7 @@ namespace swrenderer double SpriteGlobVis(bool foggy) const { return (NoLightFade && !foggy) ? 0.0f : WallVisibility; } double FlatPlaneGlobVis(bool foggy) const { return (NoLightFade && !foggy) ? 0.0f : FloorVisibility; } - static fixed_t LightLevelToShadeImpl(int lightlevel, bool foggy); + static fixed_t LightLevelToShadeImpl(RenderViewport *viewport, int lightlevel, bool foggy); double BaseVisibility = 0.0; double WallVisibility = 0.0; diff --git a/src/swrenderer/scene/r_opaque_pass.cpp b/src/rendering/swrenderer/scene/r_opaque_pass.cpp similarity index 96% rename from src/swrenderer/scene/r_opaque_pass.cpp rename to src/rendering/swrenderer/scene/r_opaque_pass.cpp index 115d37daf5..2674e782d7 100644 --- a/src/swrenderer/scene/r_opaque_pass.cpp +++ b/src/rendering/swrenderer/scene/r_opaque_pass.cpp @@ -34,7 +34,7 @@ #include "m_bbox.h" -#include "i_system.h" +#include "doomerrors.h" #include "p_lnspec.h" #include "p_setup.h" @@ -492,9 +492,10 @@ namespace swrenderer PvsSubsectors.push_back(sub->Index()); } + auto Level = sub->sector->Level; #ifdef RANGECHECK - if (outersubsector && (unsigned)sub->Index() >= level.subsectors.Size()) - I_Error("RenderSubsector: ss %i with numss = %u", sub->Index(), level.subsectors.Size()); + if (outersubsector && (unsigned)sub->Index() >= Level->subsectors.Size()) + I_Error("RenderSubsector: ss %i with numss = %u", sub->Index(), Level->subsectors.Size()); #endif if (sub->polys) @@ -515,7 +516,7 @@ namespace swrenderer sector_t *frontsector = FakeFlat(sub->sector, &tempsec, &floorlightlevel, &ceilinglightlevel, nullptr, 0, 0, 0, 0); // [RH] set foggy flag - bool foggy = level.fadeto || frontsector->Colormap.FadeColor || (level.flags & LEVEL_HASFADETABLE); + bool foggy = Level->fadeto || frontsector->Colormap.FadeColor || (Level->flags & LEVEL_HASFADETABLE); // kg3D - fake lights CameraLight *cameraLight = CameraLight::Instance(); @@ -608,15 +609,16 @@ namespace swrenderer // lightlevels on floor & ceiling lightlevels in the surrounding area. // [RH] Handle sprite lighting like Duke 3D: If the ceiling is a sky, sprites are lit by // it, otherwise they are lit by the floor. - AddSprites(sub->sector, frontsector->GetTexture(sector_t::ceiling) == skyflatnum ? ceilinglightlevel : floorlightlevel, FakeSide, foggy, GetColorTable(frontsector->Colormap, frontsector->SpecialColors[sector_t::sprites], true)); + auto nc = !!(frontsector->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING); + AddSprites(sub->sector, frontsector->GetTexture(sector_t::ceiling) == skyflatnum ? ceilinglightlevel : floorlightlevel, FakeSide, foggy, GetSpriteColorTable(frontsector->Colormap, frontsector->SpecialColors[sector_t::sprites], nc)); // [RH] Add particles - if ((unsigned int)(sub->Index()) < level.subsectors.Size()) + if ((unsigned int)(sub->Index()) < Level->subsectors.Size()) { // Only do it for the main BSP. int lightlevel = (floorlightlevel + ceilinglightlevel) / 2; - for (int i = ParticlesInSubsec[sub->Index()]; i != NO_PARTICLE; i = Particles[i].snext) + for (int i = frontsector->Level->ParticlesInSubsec[sub->Index()]; i != NO_PARTICLE; i = frontsector->Level->Particles[i].snext) { - RenderParticle::Project(Thread, &Particles[i], sub->sector, lightlevel, FakeSide, foggy); + RenderParticle::Project(Thread, &frontsector->Level->Particles[i], sub->sector, lightlevel, FakeSide, foggy); } } @@ -817,21 +819,21 @@ namespace swrenderer } } - void RenderOpaquePass::RenderScene() + void RenderOpaquePass::RenderScene(FLevelLocals *Level) { if (Thread->MainThread) WallCycles.Clock(); for (uint32_t sub : PvsSubsectors) SubsectorDepths[sub] = 0xffffffff; - SubsectorDepths.resize(level.subsectors.Size(), 0xffffffff); + SubsectorDepths.resize(Level->subsectors.Size(), 0xffffffff); PvsSubsectors.clear(); SeenSpriteSectors.clear(); SeenActors.clear(); InSubsector = nullptr; - RenderBSPNode(level.HeadNode()); // The head node is the last node output. + RenderBSPNode(Level->HeadNode()); // The head node is the last node output. if (Thread->MainThread) WallCycles.Unclock(); @@ -845,9 +847,9 @@ namespace swrenderer void RenderOpaquePass::RenderBSPNode(void *node) { - if (level.nodes.Size() == 0) + if (Thread->Viewport->Level()->nodes.Size() == 0) { - RenderSubsector(&level.subsectors[0]); + RenderSubsector(&Thread->Viewport->Level()->subsectors[0]); return; } while (!((size_t)node & 1)) // Keep going until found a subsector @@ -947,8 +949,8 @@ namespace swrenderer if (sec->sectornum != thing->Sector->sectornum) // compare sectornums to account for R_FakeFlat copies. { thinglightlevel = thing->Sector->GetTexture(sector_t::ceiling) == skyflatnum ? thing->Sector->GetCeilingLight() : thing->Sector->GetFloorLight(); - thingColormap = GetColorTable(thing->Sector->Colormap, thing->Sector->SpecialColors[sector_t::sprites], true); - } + auto nc = !!(thing->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING); + thingColormap = GetSpriteColorTable(thing->Sector->Colormap, thing->Sector->SpecialColors[sector_t::sprites], nc); } if ((sprite.renderflags & RF_SPRITETYPEMASK) == RF_WALLSPRITE) { diff --git a/src/swrenderer/scene/r_opaque_pass.h b/src/rendering/swrenderer/scene/r_opaque_pass.h similarity index 98% rename from src/swrenderer/scene/r_opaque_pass.h rename to src/rendering/swrenderer/scene/r_opaque_pass.h index a02b1d6ddb..4bd18bdd7e 100644 --- a/src/swrenderer/scene/r_opaque_pass.h +++ b/src/rendering/swrenderer/scene/r_opaque_pass.h @@ -64,7 +64,7 @@ namespace swrenderer RenderOpaquePass(RenderThread *thread); void ClearClip(); - void RenderScene(); + void RenderScene(FLevelLocals *Level); void ResetFakingUnderwater() { r_fakingunderwater = false; } sector_t *FakeFlat(sector_t *sec, sector_t *tempsec, int *floorlightlevel, int *ceilinglightlevel, seg_t *backline, int backx1, int backx2, double frontcz1, double frontcz2); diff --git a/src/swrenderer/scene/r_portal.cpp b/src/rendering/swrenderer/scene/r_portal.cpp similarity index 98% rename from src/swrenderer/scene/r_portal.cpp rename to src/rendering/swrenderer/scene/r_portal.cpp index 61fc4fc3a2..3077f3705e 100644 --- a/src/swrenderer/scene/r_portal.cpp +++ b/src/rendering/swrenderer/scene/r_portal.cpp @@ -38,7 +38,7 @@ #include "v_video.h" #include "stats.h" #include "i_video.h" -#include "i_system.h" + #include "a_sharedglobal.h" #include "r_data/r_translate.h" #include "p_3dmidtex.h" @@ -167,8 +167,10 @@ namespace swrenderer continue; } + auto Level = Thread->Viewport->Level(); + SetInSkyBox(port); - if (port->mPartner > 0) SetInSkyBox(&level.sectorPortals[port->mPartner]); + if (port->mPartner > 0) SetInSkyBox(&Level->sectorPortals[port->mPartner]); Thread->Viewport->viewpoint.camera = nullptr; Thread->Viewport->viewpoint.sector = port->mDestination; assert(Thread->Viewport->viewpoint.sector != nullptr); @@ -221,12 +223,12 @@ namespace swrenderer memcpy(draw_segment->sprtopclip, ceilingclip + pl->left, (pl->right - pl->left) * sizeof(short)); drawseglist->Push(draw_segment); - Thread->OpaquePass->RenderScene(); + Thread->OpaquePass->RenderScene(Thread->Viewport->Level()); Thread->Clip3D->ResetClip(); // reset clips (floor/ceiling) planes->Render(); ClearInSkyBox(port); - if (port->mPartner > 0) SetInSkyBox(&level.sectorPortals[port->mPartner]); + if (port->mPartner > 0) SetInSkyBox(&Level->sectorPortals[port->mPartner]); } // Draw all the masked textures in a second pass, in the reverse order they @@ -438,7 +440,7 @@ namespace swrenderer memcpy(ceilingclip + pds->x1, &pds->ceilingclip[0], pds->len * sizeof(*ceilingclip)); memcpy(floorclip + pds->x1, &pds->floorclip[0], pds->len * sizeof(*floorclip)); - Thread->OpaquePass->RenderScene(); + Thread->OpaquePass->RenderScene(Thread->Viewport->Level()); Thread->Clip3D->ResetClip(); // reset clips (floor/ceiling) if (!savedvisibility && viewpoint.camera) viewpoint.camera->renderflags &= ~RF_INVISIBLE; diff --git a/src/swrenderer/scene/r_portal.h b/src/rendering/swrenderer/scene/r_portal.h similarity index 100% rename from src/swrenderer/scene/r_portal.h rename to src/rendering/swrenderer/scene/r_portal.h diff --git a/src/swrenderer/scene/r_scene.cpp b/src/rendering/swrenderer/scene/r_scene.cpp similarity index 97% rename from src/swrenderer/scene/r_scene.cpp rename to src/rendering/swrenderer/scene/r_scene.cpp index 1666eb003d..fe00fc1b8e 100644 --- a/src/swrenderer/scene/r_scene.cpp +++ b/src/rendering/swrenderer/scene/r_scene.cpp @@ -23,7 +23,7 @@ #include #include "templates.h" -#include "i_system.h" + #include "w_wad.h" #include "doomdef.h" #include "doomstat.h" @@ -159,12 +159,6 @@ namespace swrenderer this->dontmaplines = dontmaplines; - // [RH] Setup particles for this frame - P_FindParticleSubsectors(); - - // Link the polyobjects right before drawing the scene to reduce the amounts of calls to this function - PO_LinkToSubsectors(); - R_UpdateFuzzPosFrameStart(); if (r_modelscene) @@ -189,7 +183,6 @@ namespace swrenderer RenderPSprites(); MainThread()->Viewport->viewpoint.camera->renderflags = savedflags; - interpolator.RestoreInterpolations(); } void RenderScene::RenderPSprites() @@ -292,7 +285,7 @@ namespace swrenderer if (thread->X2 < viewwidth) thread->ClipSegments->Clip(thread->X2, viewwidth, true, &visitor); - thread->OpaquePass->RenderScene(); + thread->OpaquePass->RenderScene(thread->Viewport->Level()); thread->Clip3D->ResetClip(); // reset clips (floor/ceiling) if (thread->MainThread) diff --git a/src/swrenderer/scene/r_scene.h b/src/rendering/swrenderer/scene/r_scene.h similarity index 100% rename from src/swrenderer/scene/r_scene.h rename to src/rendering/swrenderer/scene/r_scene.h diff --git a/src/swrenderer/scene/r_translucent_pass.cpp b/src/rendering/swrenderer/scene/r_translucent_pass.cpp similarity index 99% rename from src/swrenderer/scene/r_translucent_pass.cpp rename to src/rendering/swrenderer/scene/r_translucent_pass.cpp index ba077b9d4c..4738af57b2 100644 --- a/src/swrenderer/scene/r_translucent_pass.cpp +++ b/src/rendering/swrenderer/scene/r_translucent_pass.cpp @@ -26,7 +26,7 @@ #include "templates.h" #include "doomdef.h" #include "m_swap.h" -#include "i_system.h" + #include "w_wad.h" #include "g_levellocals.h" #include "p_maputl.h" diff --git a/src/swrenderer/scene/r_translucent_pass.h b/src/rendering/swrenderer/scene/r_translucent_pass.h similarity index 100% rename from src/swrenderer/scene/r_translucent_pass.h rename to src/rendering/swrenderer/scene/r_translucent_pass.h diff --git a/src/swrenderer/segments/r_clipsegment.cpp b/src/rendering/swrenderer/segments/r_clipsegment.cpp similarity index 99% rename from src/swrenderer/segments/r_clipsegment.cpp rename to src/rendering/swrenderer/segments/r_clipsegment.cpp index 5201bc38e7..3afb4bab39 100644 --- a/src/swrenderer/segments/r_clipsegment.cpp +++ b/src/rendering/swrenderer/segments/r_clipsegment.cpp @@ -23,7 +23,7 @@ #include "templates.h" #include "doomdef.h" #include "m_bbox.h" -#include "i_system.h" + #include "p_lnspec.h" #include "p_setup.h" #include "swrenderer/drawers/r_draw.h" diff --git a/src/swrenderer/segments/r_clipsegment.h b/src/rendering/swrenderer/segments/r_clipsegment.h similarity index 100% rename from src/swrenderer/segments/r_clipsegment.h rename to src/rendering/swrenderer/segments/r_clipsegment.h diff --git a/src/swrenderer/segments/r_drawsegment.cpp b/src/rendering/swrenderer/segments/r_drawsegment.cpp similarity index 99% rename from src/swrenderer/segments/r_drawsegment.cpp rename to src/rendering/swrenderer/segments/r_drawsegment.cpp index a613ce60fd..798ee7a3c8 100644 --- a/src/swrenderer/segments/r_drawsegment.cpp +++ b/src/rendering/swrenderer/segments/r_drawsegment.cpp @@ -23,7 +23,7 @@ #include "templates.h" #include "doomdef.h" #include "m_bbox.h" -#include "i_system.h" + #include "p_lnspec.h" #include "p_setup.h" #include "a_sharedglobal.h" diff --git a/src/swrenderer/segments/r_drawsegment.h b/src/rendering/swrenderer/segments/r_drawsegment.h similarity index 100% rename from src/swrenderer/segments/r_drawsegment.h rename to src/rendering/swrenderer/segments/r_drawsegment.h diff --git a/src/swrenderer/segments/r_portalsegment.cpp b/src/rendering/swrenderer/segments/r_portalsegment.cpp similarity index 99% rename from src/swrenderer/segments/r_portalsegment.cpp rename to src/rendering/swrenderer/segments/r_portalsegment.cpp index a5dcfe7c3e..34ed3677d8 100644 --- a/src/swrenderer/segments/r_portalsegment.cpp +++ b/src/rendering/swrenderer/segments/r_portalsegment.cpp @@ -23,7 +23,7 @@ #include "templates.h" #include "doomdef.h" #include "m_bbox.h" -#include "i_system.h" + #include "p_lnspec.h" #include "p_setup.h" #include "swrenderer/drawers/r_draw.h" diff --git a/src/swrenderer/segments/r_portalsegment.h b/src/rendering/swrenderer/segments/r_portalsegment.h similarity index 100% rename from src/swrenderer/segments/r_portalsegment.h rename to src/rendering/swrenderer/segments/r_portalsegment.h diff --git a/src/swrenderer/textures/r_swtexture.cpp b/src/rendering/swrenderer/textures/r_swtexture.cpp similarity index 100% rename from src/swrenderer/textures/r_swtexture.cpp rename to src/rendering/swrenderer/textures/r_swtexture.cpp diff --git a/src/swrenderer/textures/r_swtexture.h b/src/rendering/swrenderer/textures/r_swtexture.h similarity index 98% rename from src/swrenderer/textures/r_swtexture.h rename to src/rendering/swrenderer/textures/r_swtexture.h index 319144d904..2842bf129b 100644 --- a/src/swrenderer/textures/r_swtexture.h +++ b/src/rendering/swrenderer/textures/r_swtexture.h @@ -45,9 +45,9 @@ public: } // The feature from hell... :( - bool useWorldPanning() const + bool useWorldPanning(FLevelLocals *Level) const { - return mTexture->bWorldPanning || (level.flags3 & LEVEL3_FORCEWORLDPANNING); + return mTexture->bWorldPanning || (Level->flags3 & LEVEL3_FORCEWORLDPANNING); } bool isMasked() diff --git a/src/swrenderer/textures/swcanvastexture.cpp b/src/rendering/swrenderer/textures/swcanvastexture.cpp similarity index 100% rename from src/swrenderer/textures/swcanvastexture.cpp rename to src/rendering/swrenderer/textures/swcanvastexture.cpp diff --git a/src/swrenderer/textures/warpbuffer.h b/src/rendering/swrenderer/textures/warpbuffer.h similarity index 100% rename from src/swrenderer/textures/warpbuffer.h rename to src/rendering/swrenderer/textures/warpbuffer.h diff --git a/src/swrenderer/textures/warptexture.cpp b/src/rendering/swrenderer/textures/warptexture.cpp similarity index 100% rename from src/swrenderer/textures/warptexture.cpp rename to src/rendering/swrenderer/textures/warptexture.cpp diff --git a/src/swrenderer/things/r_decal.cpp b/src/rendering/swrenderer/things/r_decal.cpp similarity index 99% rename from src/swrenderer/things/r_decal.cpp rename to src/rendering/swrenderer/things/r_decal.cpp index 4340358ea4..af026276b4 100644 --- a/src/swrenderer/things/r_decal.cpp +++ b/src/rendering/swrenderer/things/r_decal.cpp @@ -22,7 +22,7 @@ #include #include #include "templates.h" -#include "i_system.h" + #include "doomdef.h" #include "doomstat.h" #include "doomdata.h" diff --git a/src/swrenderer/things/r_decal.h b/src/rendering/swrenderer/things/r_decal.h similarity index 100% rename from src/swrenderer/things/r_decal.h rename to src/rendering/swrenderer/things/r_decal.h diff --git a/src/swrenderer/things/r_model.cpp b/src/rendering/swrenderer/things/r_model.cpp similarity index 94% rename from src/swrenderer/things/r_model.cpp rename to src/rendering/swrenderer/things/r_model.cpp index c7cda60253..93901fbf11 100644 --- a/src/swrenderer/things/r_model.cpp +++ b/src/rendering/swrenderer/things/r_model.cpp @@ -163,7 +163,7 @@ namespace swrenderer float z = (float)actor->Center(); float radiusSquared = (float)(actor->renderradius * actor->renderradius); - BSPWalkCircle(x, y, radiusSquared, [&](subsector_t *subsector) // Iterate through all subsectors potentially touched by actor + BSPWalkCircle(actor->Level, x, y, radiusSquared, [&](subsector_t *subsector) // Iterate through all subsectors potentially touched by actor { FLightNode * node = subsector->section->lighthead; while (node) // check all lights touching a subsector @@ -273,10 +273,11 @@ namespace swrenderer { // Calculate the WorldToView matrix as it would have looked like without yshearing: const auto &Viewpoint = Thread->Viewport->viewpoint; + auto Level = Thread->Viewport->Level(); const auto &Viewwindow = Thread->Viewport->viewwindow; double radPitch = Viewpoint.Angles.Pitch.Normalized180().Radians(); double angx = cos(radPitch); - double angy = sin(radPitch) * level.info->pixelstretch; + double angy = sin(radPitch) * Level->info->pixelstretch; double alen = sqrt(angx*angx + angy*angy); float adjustedPitch = (float)asin(angy / alen); float adjustedViewAngle = (float)(Viewpoint.Angles.Yaw - 90).Radians(); @@ -286,7 +287,7 @@ namespace swrenderer Mat4f altWorldToView = Mat4f::Rotate(adjustedPitch, 1.0f, 0.0f, 0.0f) * Mat4f::Rotate(adjustedViewAngle, 0.0f, -1.0f, 0.0f) * - Mat4f::Scale(1.0f, level.info->pixelstretch, 1.0f) * + Mat4f::Scale(1.0f, Level->info->pixelstretch, 1.0f) * Mat4f::SwapYZ() * Mat4f::Translate((float)-Viewpoint.Pos.X, (float)-Viewpoint.Pos.Y, (float)-Viewpoint.Pos.Z); @@ -351,8 +352,8 @@ namespace swrenderer void SWModelRenderer::DrawArrays(int start, int count) { PolyDrawArgs args; - args.SetLight(GetColorTable(sector->Colormap, sector->SpecialColors[sector_t::sprites], true), lightlevel, visibility, fullbrightSprite); - args.SetLights(Lights, NumLights); + auto nc = !!(sector->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING); + args.SetLight(GetSpriteColorTable(sector->Colormap, sector->SpecialColors[sector_t::sprites], nc), lightlevel, visibility, fullbrightSprite); args.SetLights(Lights, NumLights); args.SetNormal(FVector3(0.0f, 0.0f, 0.0f)); args.SetStyle(RenderStyle, RenderAlpha, fillcolor, Translation, SkinTexture->GetSoftwareTexture(), fullbrightSprite); args.SetDepthTest(true); @@ -368,8 +369,8 @@ namespace swrenderer void SWModelRenderer::DrawElements(int numIndices, size_t offset) { PolyDrawArgs args; - args.SetLight(GetColorTable(sector->Colormap, sector->SpecialColors[sector_t::sprites], true), lightlevel, visibility, fullbrightSprite); - args.SetLights(Lights, NumLights); + auto nc = !!(sector->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING); + args.SetLight(GetSpriteColorTable(sector->Colormap, sector->SpecialColors[sector_t::sprites], nc), lightlevel, visibility, fullbrightSprite); args.SetLights(Lights, NumLights); args.SetNormal(FVector3(0.0f, 0.0f, 0.0f)); args.SetStyle(RenderStyle, RenderAlpha, fillcolor, Translation, SkinTexture->GetSoftwareTexture(), fullbrightSprite); args.SetDepthTest(true); diff --git a/src/swrenderer/things/r_model.h b/src/rendering/swrenderer/things/r_model.h similarity index 100% rename from src/swrenderer/things/r_model.h rename to src/rendering/swrenderer/things/r_model.h diff --git a/src/swrenderer/things/r_particle.cpp b/src/rendering/swrenderer/things/r_particle.cpp similarity index 95% rename from src/swrenderer/things/r_particle.cpp rename to src/rendering/swrenderer/things/r_particle.cpp index 07d460b425..220124ae45 100644 --- a/src/swrenderer/things/r_particle.cpp +++ b/src/rendering/swrenderer/things/r_particle.cpp @@ -26,7 +26,7 @@ #include "templates.h" #include "doomdef.h" #include "m_swap.h" -#include "i_system.h" + #include "w_wad.h" #include "c_console.h" #include "c_cvars.h" @@ -79,7 +79,7 @@ namespace swrenderer sector_t* heightsec = NULL; double timefrac = r_viewpoint.TicFrac; - if (paused || bglobal.freeze || (level.flags2 & LEVEL2_FROZEN)) + if (paused || r_viewpoint.ViewLevel->isFrozen()) timefrac = 0.; double ippx = particle->Pos.X + particle->Vel.X * timefrac; @@ -155,6 +155,8 @@ namespace swrenderer FTextureID toppic; FTextureID botpic; FDynamicColormap *map; + auto nc = !!(sector->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING); + if (heightsec) // only clip things which are in special sectors { @@ -164,7 +166,7 @@ namespace swrenderer botplane = &heightsec->ceilingplane; toppic = sector->GetTexture(sector_t::ceiling); botpic = heightsec->GetTexture(sector_t::ceiling); - map = GetColorTable(heightsec->Colormap, heightsec->SpecialColors[sector_t::sprites], true); + map = GetSpriteColorTable(heightsec->Colormap, heightsec->SpecialColors[sector_t::sprites], nc); } else if (fakeside == WaterFakeSide::BelowFloor) { @@ -172,7 +174,7 @@ namespace swrenderer botplane = §or->floorplane; toppic = heightsec->GetTexture(sector_t::floor); botpic = sector->GetTexture(sector_t::floor); - map = GetColorTable(heightsec->Colormap, heightsec->SpecialColors[sector_t::sprites], true); + map = GetSpriteColorTable(heightsec->Colormap, heightsec->SpecialColors[sector_t::sprites], nc); } else { @@ -180,7 +182,7 @@ namespace swrenderer botplane = &heightsec->floorplane; toppic = heightsec->GetTexture(sector_t::ceiling); botpic = heightsec->GetTexture(sector_t::floor); - map = GetColorTable(sector->Colormap, sector->SpecialColors[sector_t::sprites], true); + map = GetSpriteColorTable(sector->Colormap, sector->SpecialColors[sector_t::sprites], nc); } } else @@ -189,7 +191,7 @@ namespace swrenderer botplane = §or->floorplane; toppic = sector->GetTexture(sector_t::ceiling); botpic = sector->GetTexture(sector_t::floor); - map = GetColorTable(sector->Colormap, sector->SpecialColors[sector_t::sprites], true); + map = GetSpriteColorTable(sector->Colormap, sector->SpecialColors[sector_t::sprites], nc); } if (botpic != skyflatnum && ippz < botplane->ZatPoint(particle->Pos)) diff --git a/src/swrenderer/things/r_particle.h b/src/rendering/swrenderer/things/r_particle.h similarity index 100% rename from src/swrenderer/things/r_particle.h rename to src/rendering/swrenderer/things/r_particle.h diff --git a/src/swrenderer/things/r_playersprite.cpp b/src/rendering/swrenderer/things/r_playersprite.cpp similarity index 96% rename from src/swrenderer/things/r_playersprite.cpp rename to src/rendering/swrenderer/things/r_playersprite.cpp index fd1b8adf85..94e127ad1a 100644 --- a/src/swrenderer/things/r_playersprite.cpp +++ b/src/rendering/swrenderer/things/r_playersprite.cpp @@ -26,7 +26,7 @@ #include "templates.h" #include "doomdef.h" #include "m_swap.h" -#include "i_system.h" + #include "w_wad.h" #include "swrenderer/things/r_playersprite.h" #include "c_console.h" @@ -97,6 +97,8 @@ namespace swrenderer FDynamicColormap *basecolormap; CameraLight *cameraLight = CameraLight::Instance(); + auto nc = !!(Thread->Viewport->Level()->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING); + if (cameraLight->FixedLightLevel() < 0 && Thread->Viewport->viewpoint.sector->e && Thread->Viewport->viewpoint.sector->e->XFloor.lightlist.Size()) { for (i = Thread->Viewport->viewpoint.sector->e->XFloor.lightlist.Size() - 1; i >= 0; i--) @@ -110,9 +112,9 @@ namespace swrenderer break; sec = rover->model; if (rover->flags & FF_FADEWALLS) - basecolormap = GetColorTable(sec->Colormap, sec->SpecialColors[sector_t::sprites], true); + basecolormap = GetSpriteColorTable(sec->Colormap, sec->SpecialColors[sector_t::sprites], nc); else - basecolormap = GetColorTable(Thread->Viewport->viewpoint.sector->e->XFloor.lightlist[i].extra_colormap, sec->SpecialColors[sector_t::sprites], true); + basecolormap = GetSpriteColorTable(Thread->Viewport->viewpoint.sector->e->XFloor.lightlist[i].extra_colormap, sec->SpecialColors[sector_t::sprites], nc); } break; } @@ -120,7 +122,7 @@ namespace swrenderer if (!sec) { sec = Thread->Viewport->viewpoint.sector; - basecolormap = GetColorTable(sec->Colormap, sec->SpecialColors[sector_t::sprites], true); + basecolormap = GetSpriteColorTable(sec->Colormap, sec->SpecialColors[sector_t::sprites], nc); } floorlight = ceilinglight = sec->lightlevel; } @@ -130,11 +132,12 @@ namespace swrenderer sec = Thread->OpaquePass->FakeFlat(Thread->Viewport->viewpoint.sector, &tempsec, &floorlight, &ceilinglight, nullptr, 0, 0, 0, 0); // [RH] set basecolormap - basecolormap = GetColorTable(sec->Colormap, sec->SpecialColors[sector_t::sprites], true); + basecolormap = GetSpriteColorTable(sec->Colormap, sec->SpecialColors[sector_t::sprites], nc); } // [RH] set foggy flag - bool foggy = (level.fadeto || basecolormap->Fade || (level.flags & LEVEL_HASFADETABLE)); + auto Level = Thread->Viewport->Level(); + bool foggy = (Level->fadeto || basecolormap->Fade || (Level->flags & LEVEL_HASFADETABLE)); // get light level int lightlevel = (floorlight + ceilinglight) >> 1; diff --git a/src/swrenderer/things/r_playersprite.h b/src/rendering/swrenderer/things/r_playersprite.h similarity index 100% rename from src/swrenderer/things/r_playersprite.h rename to src/rendering/swrenderer/things/r_playersprite.h diff --git a/src/swrenderer/things/r_sprite.cpp b/src/rendering/swrenderer/things/r_sprite.cpp similarity index 99% rename from src/swrenderer/things/r_sprite.cpp rename to src/rendering/swrenderer/things/r_sprite.cpp index fa8ce436d2..5c00ed9fd1 100644 --- a/src/swrenderer/things/r_sprite.cpp +++ b/src/rendering/swrenderer/things/r_sprite.cpp @@ -26,7 +26,7 @@ #include "templates.h" #include "doomdef.h" #include "m_swap.h" -#include "i_system.h" + #include "w_wad.h" #include "swrenderer/things/r_wallsprite.h" #include "c_console.h" diff --git a/src/swrenderer/things/r_sprite.h b/src/rendering/swrenderer/things/r_sprite.h similarity index 100% rename from src/swrenderer/things/r_sprite.h rename to src/rendering/swrenderer/things/r_sprite.h diff --git a/src/swrenderer/things/r_visiblesprite.cpp b/src/rendering/swrenderer/things/r_visiblesprite.cpp similarity index 97% rename from src/swrenderer/things/r_visiblesprite.cpp rename to src/rendering/swrenderer/things/r_visiblesprite.cpp index adf0588754..a2dd22b13e 100644 --- a/src/swrenderer/things/r_visiblesprite.cpp +++ b/src/rendering/swrenderer/things/r_visiblesprite.cpp @@ -26,7 +26,7 @@ #include "templates.h" #include "doomdef.h" #include "m_swap.h" -#include "i_system.h" + #include "w_wad.h" #include "g_levellocals.h" #include "p_maputl.h" @@ -136,13 +136,15 @@ namespace swrenderer break; } sec = rover->model; + auto nc = !!(sec->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING); + if (rover->flags & FF_FADEWALLS) { - mybasecolormap = GetColorTable(sec->Colormap, spr->sector->SpecialColors[sector_t::sprites], true); + mybasecolormap = GetSpriteColorTable(sec->Colormap, spr->sector->SpecialColors[sector_t::sprites], nc); } else { - mybasecolormap = GetColorTable(spr->sector->e->XFloor.lightlist[i].extra_colormap, spr->sector->SpecialColors[sector_t::sprites], true); + mybasecolormap = GetSpriteColorTable(spr->sector->e->XFloor.lightlist[i].extra_colormap, spr->sector->SpecialColors[sector_t::sprites], nc); } } break; diff --git a/src/swrenderer/things/r_visiblesprite.h b/src/rendering/swrenderer/things/r_visiblesprite.h similarity index 100% rename from src/swrenderer/things/r_visiblesprite.h rename to src/rendering/swrenderer/things/r_visiblesprite.h diff --git a/src/swrenderer/things/r_visiblespritelist.cpp b/src/rendering/swrenderer/things/r_visiblespritelist.cpp similarity index 93% rename from src/swrenderer/things/r_visiblespritelist.cpp rename to src/rendering/swrenderer/things/r_visiblespritelist.cpp index f6181b506c..95a4dfaca9 100644 --- a/src/swrenderer/things/r_visiblespritelist.cpp +++ b/src/rendering/swrenderer/things/r_visiblespritelist.cpp @@ -26,7 +26,7 @@ #include "templates.h" #include "doomdef.h" #include "m_swap.h" -#include "i_system.h" + #include "w_wad.h" #include "g_levellocals.h" #include "p_maputl.h" @@ -69,7 +69,7 @@ namespace swrenderer if (count == 0) return; - if (!(i_compatflags & COMPATF_SPRITESORT)) + if (!(thread->Viewport->Level()->i_compatflags & COMPATF_SPRITESORT)) { for (unsigned int i = 0; i < count; i++) SortedSprites[i] = Sprites[first + i]; @@ -110,14 +110,15 @@ namespace swrenderer uint32_t VisibleSpriteList::FindSubsectorDepth(RenderThread *thread, const DVector2 &worldPos) { - if (level.nodes.Size() == 0) + auto Level = thread->Viewport->Level(); + if (Level->nodes.Size() == 0) { - subsector_t *sub = &level.subsectors[0]; + subsector_t *sub = &Level->subsectors[0]; return thread->OpaquePass->GetSubsectorDepth(sub->Index()); } else { - return FindSubsectorDepth(thread, worldPos, level.HeadNode()); + return FindSubsectorDepth(thread, worldPos, Level->HeadNode()); } } diff --git a/src/swrenderer/things/r_visiblespritelist.h b/src/rendering/swrenderer/things/r_visiblespritelist.h similarity index 100% rename from src/swrenderer/things/r_visiblespritelist.h rename to src/rendering/swrenderer/things/r_visiblespritelist.h diff --git a/src/swrenderer/things/r_voxel.cpp b/src/rendering/swrenderer/things/r_voxel.cpp similarity index 100% rename from src/swrenderer/things/r_voxel.cpp rename to src/rendering/swrenderer/things/r_voxel.cpp diff --git a/src/swrenderer/things/r_voxel.h b/src/rendering/swrenderer/things/r_voxel.h similarity index 100% rename from src/swrenderer/things/r_voxel.h rename to src/rendering/swrenderer/things/r_voxel.h diff --git a/src/swrenderer/things/r_wallsprite.cpp b/src/rendering/swrenderer/things/r_wallsprite.cpp similarity index 99% rename from src/swrenderer/things/r_wallsprite.cpp rename to src/rendering/swrenderer/things/r_wallsprite.cpp index 15d600b5f2..3a6e60a0f9 100644 --- a/src/swrenderer/things/r_wallsprite.cpp +++ b/src/rendering/swrenderer/things/r_wallsprite.cpp @@ -26,7 +26,7 @@ #include "templates.h" #include "doomdef.h" #include "m_swap.h" -#include "i_system.h" + #include "w_wad.h" #include "swrenderer/things/r_wallsprite.h" #include "c_console.h" diff --git a/src/swrenderer/things/r_wallsprite.h b/src/rendering/swrenderer/things/r_wallsprite.h similarity index 100% rename from src/swrenderer/things/r_wallsprite.h rename to src/rendering/swrenderer/things/r_wallsprite.h diff --git a/src/swrenderer/viewport/r_drawerargs.cpp b/src/rendering/swrenderer/viewport/r_drawerargs.cpp similarity index 100% rename from src/swrenderer/viewport/r_drawerargs.cpp rename to src/rendering/swrenderer/viewport/r_drawerargs.cpp diff --git a/src/swrenderer/viewport/r_drawerargs.h b/src/rendering/swrenderer/viewport/r_drawerargs.h similarity index 100% rename from src/swrenderer/viewport/r_drawerargs.h rename to src/rendering/swrenderer/viewport/r_drawerargs.h diff --git a/src/swrenderer/viewport/r_skydrawer.cpp b/src/rendering/swrenderer/viewport/r_skydrawer.cpp similarity index 100% rename from src/swrenderer/viewport/r_skydrawer.cpp rename to src/rendering/swrenderer/viewport/r_skydrawer.cpp diff --git a/src/swrenderer/viewport/r_skydrawer.h b/src/rendering/swrenderer/viewport/r_skydrawer.h similarity index 100% rename from src/swrenderer/viewport/r_skydrawer.h rename to src/rendering/swrenderer/viewport/r_skydrawer.h diff --git a/src/swrenderer/viewport/r_spandrawer.cpp b/src/rendering/swrenderer/viewport/r_spandrawer.cpp similarity index 100% rename from src/swrenderer/viewport/r_spandrawer.cpp rename to src/rendering/swrenderer/viewport/r_spandrawer.cpp diff --git a/src/swrenderer/viewport/r_spandrawer.h b/src/rendering/swrenderer/viewport/r_spandrawer.h similarity index 100% rename from src/swrenderer/viewport/r_spandrawer.h rename to src/rendering/swrenderer/viewport/r_spandrawer.h diff --git a/src/swrenderer/viewport/r_spritedrawer.cpp b/src/rendering/swrenderer/viewport/r_spritedrawer.cpp similarity index 100% rename from src/swrenderer/viewport/r_spritedrawer.cpp rename to src/rendering/swrenderer/viewport/r_spritedrawer.cpp diff --git a/src/swrenderer/viewport/r_spritedrawer.h b/src/rendering/swrenderer/viewport/r_spritedrawer.h similarity index 100% rename from src/swrenderer/viewport/r_spritedrawer.h rename to src/rendering/swrenderer/viewport/r_spritedrawer.h diff --git a/src/swrenderer/viewport/r_viewport.cpp b/src/rendering/swrenderer/viewport/r_viewport.cpp similarity index 98% rename from src/swrenderer/viewport/r_viewport.cpp rename to src/rendering/swrenderer/viewport/r_viewport.cpp index e3cfc15483..76a46bed35 100644 --- a/src/swrenderer/viewport/r_viewport.cpp +++ b/src/rendering/swrenderer/viewport/r_viewport.cpp @@ -23,7 +23,7 @@ #include #include "templates.h" -#include "i_system.h" + #include "w_wad.h" #include "doomdef.h" #include "doomstat.h" @@ -135,7 +135,7 @@ namespace swrenderer virtwidth = virtwidth * AspectMultiplier(viewwindow.WidescreenRatio) / 48; } - double ypixelstretch = (level.info) ? level.info->pixelstretch : 1.2; + double ypixelstretch = (Level()->info) ? Level()->info->pixelstretch : 1.2; BaseYaspectMul = 320.0 * virtheight2 / (r_Yaspect * virtwidth2); YaspectMul = 320.0 * virtheight / (r_Yaspect * virtwidth) * ypixelstretch / 1.2; diff --git a/src/swrenderer/viewport/r_viewport.h b/src/rendering/swrenderer/viewport/r_viewport.h similarity index 96% rename from src/swrenderer/viewport/r_viewport.h rename to src/rendering/swrenderer/viewport/r_viewport.h index 69adc5778d..93400f3e46 100644 --- a/src/swrenderer/viewport/r_viewport.h +++ b/src/rendering/swrenderer/viewport/r_viewport.h @@ -5,6 +5,7 @@ #include #include "v_video.h" #include "r_defs.h" +#include "actorinlines.h" #include "polyrenderer/math/gpu_types.h" #define MINZ double((2048*4) / double(1 << 20)) @@ -80,6 +81,11 @@ namespace swrenderer return (CenterY - screenY - 0.5) / FocalLengthY * viewZ; } + FLevelLocals *Level() + { + return viewpoint.ViewLevel; + } + private: void InitTextureMapping(); void SetupBuffer(); diff --git a/src/swrenderer/viewport/r_walldrawer.cpp b/src/rendering/swrenderer/viewport/r_walldrawer.cpp similarity index 100% rename from src/swrenderer/viewport/r_walldrawer.cpp rename to src/rendering/swrenderer/viewport/r_walldrawer.cpp diff --git a/src/swrenderer/viewport/r_walldrawer.h b/src/rendering/swrenderer/viewport/r_walldrawer.h similarity index 100% rename from src/swrenderer/viewport/r_walldrawer.h rename to src/rendering/swrenderer/viewport/r_walldrawer.h diff --git a/src/s_advsound.cpp b/src/s_advsound.cpp index 0f11c18b69..054edd6fb4 100644 --- a/src/s_advsound.cpp +++ b/src/s_advsound.cpp @@ -47,6 +47,7 @@ #include "g_levellocals.h" #include "r_data/sprites.h" #include "vm.h" +#include "i_system.h" // MACROS ------------------------------------------------------------------ diff --git a/src/s_sndseq.cpp b/src/s_sndseq.cpp index d08a26732d..3d5b347e1f 100644 --- a/src/s_sndseq.cpp +++ b/src/s_sndseq.cpp @@ -219,8 +219,6 @@ static bool TwiddleSeqNum (int &sequence, seqtype_t type); // PUBLIC DATA DEFINITIONS ------------------------------------------------- FSoundSequencePtrArray Sequences; -int ActiveSequences; -DSeqNode *DSeqNode::SequenceListHead; // PRIVATE DATA DEFINITIONS ------------------------------------------------ @@ -289,11 +287,6 @@ static FRandom pr_sndseq ("SndSeq"); // CODE -------------------------------------------------------------------- -void DSeqNode::SerializeSequences (FSerializer &arc) -{ - arc("sndseqlisthead", SequenceListHead); -} - IMPLEMENT_CLASS(DSeqNode, false, true) IMPLEMENT_POINTERS_START(DSeqNode) @@ -345,7 +338,8 @@ void DSeqNode::Serialize(FSerializer &arc) ("parentseqnode", m_ParentSeqNode) ("id", id) ("seqname", seqName) - ("numchoices", numchoices); + ("numchoices", numchoices) + ("level", Level); // The way this is saved makes it hard to encapsulate so just do it the hard way... if (arc.isWriting()) @@ -397,9 +391,9 @@ void DSeqNode::OnDestroy() m_ParentSeqNode->m_ChildSeqNode = nullptr; m_ParentSeqNode = nullptr; } - if (SequenceListHead == this) + if (Level->SequenceListHead == this) { - SequenceListHead = m_Next; + Level->SequenceListHead = m_Next; GC::WriteBarrier(m_Next); } if (m_Prev) @@ -412,7 +406,7 @@ void DSeqNode::OnDestroy() m_Next->m_Prev = m_Prev; GC::WriteBarrier(m_Next, m_Prev); } - ActiveSequences--; + Level->ActiveSequences--; Super::OnDestroy(); } @@ -803,21 +797,22 @@ static void AddSequence (int curseq, FName seqname, FName slot, int stopsound, c Sequences[curseq]->Script[ScriptTemp.Size()] = MakeCommand(SS_CMD_END, 0); } -DSeqNode::DSeqNode (int sequence, int modenum) +DSeqNode::DSeqNode (FLevelLocals *l, int sequence, int modenum) : m_ModeNum(modenum), m_SequenceChoices(0) { + Level = l; ActivateSequence (sequence); - if (!SequenceListHead) + if (!Level->SequenceListHead) { - SequenceListHead = this; - m_Next = m_Prev = NULL; + Level->SequenceListHead = this; + m_Next = m_Prev = nullptr; } else { - SequenceListHead->m_Prev = this; GC::WriteBarrier(SequenceListHead->m_Prev, this); - m_Next = SequenceListHead; GC::WriteBarrier(this, SequenceListHead); - SequenceListHead = this; - m_Prev = NULL; + Level->SequenceListHead->m_Prev = this; GC::WriteBarrier(Level->SequenceListHead->m_Prev, this); + m_Next = Level->SequenceListHead; GC::WriteBarrier(this, Level->SequenceListHead); + Level->SequenceListHead = this; + m_Prev = nullptr; } GC::WriteBarrier(this); m_ParentSeqNode = m_ChildSeqNode = nullptr; @@ -832,24 +827,23 @@ void DSeqNode::ActivateSequence (int sequence) m_CurrentSoundID = 0; m_Volume = 1; // Start at max volume... m_Atten = ATTN_IDLE; // ...and idle attenuation - - ActiveSequences++; + Level->ActiveSequences++; } DSeqActorNode::DSeqActorNode (AActor *actor, int sequence, int modenum) - : DSeqNode (sequence, modenum), + : DSeqNode (actor->Level, sequence, modenum), m_Actor (actor) { } DSeqPolyNode::DSeqPolyNode (FPolyObj *poly, int sequence, int modenum) - : DSeqNode (sequence, modenum), + : DSeqNode (poly->Level, sequence, modenum), m_Poly (poly) { } DSeqSectorNode::DSeqSectorNode (sector_t *sec, int chan, int sequence, int modenum) - : DSeqNode (sequence, modenum), + : DSeqNode (sec->Level, sequence, modenum), Channel (chan), m_Sector (sec) { @@ -1048,7 +1042,8 @@ static int FindSequence (FName seqname) DSeqNode *SN_CheckSequence(sector_t *sector, int chan) { - for (DSeqNode *node = DSeqNode::FirstSequence(); node; ) + auto Level = sector->Level; + for (DSeqNode *node = Level->SequenceListHead; node; ) { DSeqNode *next = node->NextSequence(); if (node->Source() == sector) @@ -1079,7 +1074,7 @@ DEFINE_ACTION_FUNCTION(_Sector, CheckSoundSequence) void SN_StopSequence (AActor *actor) { - SN_DoStop (actor); + SN_DoStop (actor->Level, actor); } DEFINE_ACTION_FUNCTION(AActor, StopSoundSequence) @@ -1109,14 +1104,14 @@ DEFINE_ACTION_FUNCTION(_Sector, StopSoundSequence) void SN_StopSequence (FPolyObj *poly) { - SN_DoStop (poly); + SN_DoStop (poly->Level, poly); } -void SN_DoStop (void *source) +void SN_DoStop (FLevelLocals *Level, void *source) { DSeqNode *node; - for (node = DSeqNode::FirstSequence(); node; ) + for (node = Level->SequenceListHead; node; ) { DSeqNode *next = node->NextSequence(); if (node->Source() == source) @@ -1164,7 +1159,7 @@ bool SN_IsMakingLoopingSound (sector_t *sector) { DSeqNode *node; - for (node = DSeqNode::FirstSequence (); node; ) + for (node = sector->Level->SequenceListHead; node; ) { DSeqNode *next = node->NextSequence(); if (node->Source() == (void *)sector) @@ -1328,7 +1323,7 @@ void DSeqNode::Tick () int seqnum = FindSequence (ENamedName(m_SequencePtr[i*2+1])); if (seqnum >= 0) { // Found a match, and it's a good one too. - ActiveSequences--; + Level->ActiveSequences--; ActivateSequence (seqnum); break; } @@ -1359,15 +1354,15 @@ void DSeqNode::Tick () } } -void SN_UpdateActiveSequences (void) +void SN_UpdateActiveSequences (FLevelLocals *Level) { DSeqNode *node; - if (!ActiveSequences || paused) + if (!Level->ActiveSequences || paused) { // No sequences currently playing/game is paused return; } - for (node = DSeqNode::FirstSequence(); node; node = node->NextSequence()) + for (node =Level->SequenceListHead; node; node = node->NextSequence()) { node->Tick (); } @@ -1379,11 +1374,11 @@ void SN_UpdateActiveSequences (void) // //========================================================================== -void SN_StopAllSequences (void) +void SN_StopAllSequences (FLevelLocals *Level) { DSeqNode *node; - for (node = DSeqNode::FirstSequence(); node; ) + for (node = Level->SequenceListHead; node; ) { DSeqNode *next = node->NextSequence(); node->m_StopSound = 0; // don't play any stop sounds @@ -1470,14 +1465,14 @@ DEFINE_ACTION_FUNCTION(DSeqNode, MarkPrecacheSounds) // nodeNum zero is the first node //========================================================================== -void SN_ChangeNodeData (int nodeNum, int seqOffset, int delayTics, float volume, +void SN_ChangeNodeData (FLevelLocals *Level, int nodeNum, int seqOffset, int delayTics, float volume, int currentSoundID) { int i; DSeqNode *node; i = 0; - node = DSeqNode::FirstSequence(); + node = Level->SequenceListHead; while (node && i < nodeNum) { node = node->NextSequence(); diff --git a/src/s_sndseq.h b/src/s_sndseq.h index 83b0475bef..17e4284d26 100644 --- a/src/s_sndseq.h +++ b/src/s_sndseq.h @@ -28,21 +28,18 @@ public: void AddChoice (int seqnum, seqtype_t type); int GetModeNum() const { return m_ModeNum; } FName GetSequenceName() const; - static void StaticMarkHead() { GC::Mark(SequenceListHead); } virtual void MakeSound (int loop, FSoundID id) {} virtual void *Source () { return NULL; } virtual bool IsPlaying () { return false; } virtual DSeqNode *SpawnChild (int seqnum) { return NULL; } - inline static DSeqNode *FirstSequence() { return SequenceListHead; } inline DSeqNode *NextSequence() const { return m_Next; } - static void SerializeSequences (FSerializer &arc); protected: DSeqNode (); - DSeqNode (int sequence, int modenum); + DSeqNode (FLevelLocals *l, int sequence, int modenum); int32_t *m_SequencePtr; int m_Sequence; @@ -54,20 +51,20 @@ protected: float m_Atten; int m_ModeNum; + FLevelLocals *Level; TArray m_SequenceChoices; TObjPtr m_ChildSeqNode; TObjPtr m_ParentSeqNode; private: - static DSeqNode *SequenceListHead; DSeqNode *m_Next, *m_Prev; void ActivateSequence (int sequence); - friend void SN_StopAllSequences (void); + friend void SN_StopAllSequences (FLevelLocals *Level); }; -void SN_StopAllSequences (void); +void SN_StopAllSequences (FLevelLocals *Level); struct FSoundSequence { @@ -92,11 +89,10 @@ void SN_StopSequence (sector_t *sector, int chan); void SN_StopSequence (FPolyObj *poly); bool SN_AreModesSame(int sequence, seqtype_t type, int mode1, int mode2); bool SN_AreModesSame(FName name, int mode1, int mode2); -void SN_UpdateActiveSequences (void); +void SN_UpdateActiveSequences (FLevelLocals *Level); ptrdiff_t SN_GetSequenceOffset (int sequence, int32_t *sequencePtr); -void SN_DoStop (void *); -void SN_ChangeNodeData (int nodeNum, int seqOffset, int delayTics, - float volume, int currentSoundID); +void SN_DoStop (FLevelLocals *Level, void *); +void SN_ChangeNodeData (FLevelLocals *Level, int nodeNum, int seqOffset, int delayTics, float volume, int currentSoundID); FName SN_GetSequenceSlot (int sequence, seqtype_t type); void SN_MarkPrecacheSounds (int sequence, seqtype_t type); bool SN_IsMakingLoopingSound (sector_t *sector); diff --git a/src/s_sound.cpp b/src/s_sound.cpp index 5359565832..ee40d6241f 100644 --- a/src/s_sound.cpp +++ b/src/s_sound.cpp @@ -82,6 +82,7 @@ #include "d_player.h" #include "g_levellocals.h" #include "vm.h" +#include "g_game.h" // MACROS ------------------------------------------------------------------ @@ -140,7 +141,7 @@ static bool MusicPaused; // whether music is paused MusPlayingInfo mus_playing; // music currently being played static FString LastSong; // last music that was played static FPlayList *PlayList; -static int RestartEvictionsAt; // do not restart evicted channels before this level.time +static int RestartEvictionsAt; // do not restart evicted channels before this time // PUBLIC DATA DEFINITIONS ------------------------------------------------- @@ -402,16 +403,16 @@ void S_Start () FString LocalSndSeq; // To be certain better check whether level is valid! - if (level.info) + if (primaryLevel->info) { - LocalSndInfo = level.info->SoundInfo; - LocalSndSeq = level.info->SndSeq; + LocalSndInfo = primaryLevel->info->SoundInfo; + LocalSndSeq = primaryLevel->info->SndSeq; } bool parse_ss = false; // This level uses a different local SNDINFO - if (LastLocalSndInfo.CompareNoCase(LocalSndInfo) != 0 || !level.info) + if (LastLocalSndInfo.CompareNoCase(LocalSndInfo) != 0 || !primaryLevel->info) { // First delete the old sound list for(unsigned i = 1; i < S_sfx.Size(); i++) @@ -456,10 +457,9 @@ void S_Start () // Don't start the music if loading a savegame, because the music is stored there. // Don't start the music if revisiting a level in a hub for the same reason. - if (!level.IsReentering()) + if (!primaryLevel->IsReentering()) { - if (level.cdtrack == 0 || !S_ChangeCDMusic (level.cdtrack, level.cdid)) - S_ChangeMusic (level.Music, level.musicorder); + primaryLevel->SetMusic(); } } @@ -471,11 +471,11 @@ void S_Start () // //========================================================================== -void S_PrecacheLevel () +void S_PrecacheLevel (FLevelLocals *Level) { unsigned int i; - if (GSnd) + if (GSnd && Level == primaryLevel) { for (i = 0; i < S_sfx.Size(); ++i) { @@ -483,7 +483,7 @@ void S_PrecacheLevel () } AActor *actor; - TThinkerIterator iterator; + auto iterator = Level->GetThinkerIterator(); // Precache all sounds known to be used by the currently spawned actors. while ( (actor = iterator.Next()) != NULL ) @@ -499,7 +499,7 @@ void S_PrecacheLevel () FSoundID(snd).MarkUsed(); } // Precache all extra sounds requested by this map. - for (auto snd : level.info->PrecacheSounds) + for (auto snd : primaryLevel->info->PrecacheSounds) { FSoundID(snd).MarkUsed(); } @@ -705,8 +705,8 @@ static void CalcPosVel(int type, const AActor *actor, const sector_t *sector, // on static analysis. if(type == SOURCE_Unattached) { - sector_t *sec = P_PointInSector(pt[0], pt[2]); - DVector2 disp = level.Displacements.getOffset(pgroup, sec->PortalGroup); + sector_t *sec = primaryLevel->PointInSector(pt[0], pt[2]); + DVector2 disp = primaryLevel->Displacements.getOffset(pgroup, sec->PortalGroup); pos->X = pt[0] - (float)disp.X; pos->Y = !(chanflags & CHAN_LISTENERZ) ? pt[1] : (float)listenpos.Z; pos->Z = pt[2] - (float)disp.Y; @@ -723,7 +723,7 @@ static void CalcPosVel(int type, const AActor *actor, const sector_t *sector, //assert(actor != NULL); if (actor != NULL) { - DVector2 disp = level.Displacements.getOffset(pgroup, actor->Sector->PortalGroup); + DVector2 disp = primaryLevel->Displacements.getOffset(pgroup, actor->Sector->PortalGroup); DVector3 posi = actor->Pos() - disp; *pos = { (float)posi.X, (float)posi.Z, (float)posi.Y }; } @@ -733,7 +733,7 @@ static void CalcPosVel(int type, const AActor *actor, const sector_t *sector, assert(sector != NULL); if (sector != NULL) { - DVector2 disp = level.Displacements.getOffset(pgroup, sector->PortalGroup); + DVector2 disp = primaryLevel->Displacements.getOffset(pgroup, sector->PortalGroup); if (chanflags & CHAN_AREA) { // listener must be reversely offset to calculate the proper sound origin. @@ -755,7 +755,7 @@ static void CalcPosVel(int type, const AActor *actor, const sector_t *sector, assert(poly != NULL); if (poly != NULL) { - DVector2 disp = level.Displacements.getOffset(pgroup, poly->CenterSubsector->sector->PortalGroup); + DVector2 disp = primaryLevel->Displacements.getOffset(pgroup, poly->CenterSubsector->sector->PortalGroup); CalcPolyobjSoundOrg(listenpos + disp, poly, *pos); pos->X -= (float)disp.X; pos->Z -= (float)disp.Y; @@ -849,10 +849,10 @@ static bool ValidatePosVel(const FSoundChan *const chan, const FVector3 &pos, co static void CalcSectorSoundOrg(const DVector3 &listenpos, const sector_t *sec, int channum, FVector3 &pos) { - if (!(i_compatflags & COMPATF_SECTORSOUNDS)) + if (!(sec->Level->i_compatflags & COMPATF_SECTORSOUNDS)) { // Are we inside the sector? If yes, the closest point is the one we're on. - if (P_PointInSector(listenpos.X, listenpos.Y) == sec) + if (primaryLevel->PointInSector(listenpos.X, listenpos.Y) == sec) { pos.X = (float)listenpos.X; pos.Z = (float)listenpos.Y; @@ -916,7 +916,7 @@ static void CalcPolyobjSoundOrg(const DVector3 &listenpos, const FPolyObj *poly, // // S_StartSound // -// 0 attenuation means full volume over whole level. +// 0 attenuation means full volume over whole primaryLevel-> // 0 < attenuation means to scale the distance by that amount when // calculating volume. // @@ -1337,9 +1337,9 @@ DEFINE_ACTION_FUNCTION(DObject, S_Sound) void S_Sound (AActor *ent, int channel, FSoundID sound_id, float volume, float attenuation) { - if (ent == NULL || ent->Sector->Flags & SECF_SILENT) + if (ent == nullptr || ent->Sector->Flags & SECF_SILENT || ent->Level != primaryLevel) return; - S_StartSound (ent, NULL, NULL, NULL, channel, sound_id, volume, attenuation); + S_StartSound (ent, nullptr, nullptr, nullptr, channel, sound_id, volume, attenuation); } //========================================================================== @@ -1352,7 +1352,7 @@ void S_Sound (AActor *ent, int channel, FSoundID sound_id, float volume, float a void S_SoundMinMaxDist(AActor *ent, int channel, FSoundID sound_id, float volume, float mindist, float maxdist) { - if (ent == NULL || ent->Sector->Flags & SECF_SILENT) + if (ent == nullptr || ent->Sector->Flags & SECF_SILENT || ent->Level != primaryLevel) return; FRolloffInfo rolloff; @@ -1360,7 +1360,7 @@ void S_SoundMinMaxDist(AActor *ent, int channel, FSoundID sound_id, float volume rolloff.RolloffType = ROLLOFF_Linear; rolloff.MinDistance = mindist; rolloff.MaxDistance = maxdist; - S_StartSound(ent, NULL, NULL, NULL, channel, sound_id, volume, 1, &rolloff); + S_StartSound(ent, nullptr, nullptr, nullptr, channel, sound_id, volume, 1, &rolloff); } //========================================================================== @@ -1371,7 +1371,8 @@ void S_SoundMinMaxDist(AActor *ent, int channel, FSoundID sound_id, float volume void S_Sound (const FPolyObj *poly, int channel, FSoundID sound_id, float volume, float attenuation) { - S_StartSound (NULL, NULL, poly, NULL, channel, sound_id, volume, attenuation); + if (poly->Level != primaryLevel) return; + S_StartSound (nullptr, nullptr, poly, nullptr, channel, sound_id, volume, attenuation); } //========================================================================== @@ -1380,11 +1381,12 @@ void S_Sound (const FPolyObj *poly, int channel, FSoundID sound_id, float volume // //========================================================================== -void S_Sound(const DVector3 &pos, int channel, FSoundID sound_id, float volume, float attenuation) +void S_Sound(FLevelLocals *Level, const DVector3 &pos, int channel, FSoundID sound_id, float volume, float attenuation) { + if (Level != primaryLevel) return; // The sound system switches Y and Z around. FVector3 p((float)pos.X, (float)pos.Z, (float)pos.Y); - S_StartSound (NULL, NULL, NULL, &p, channel, sound_id, volume, attenuation); + S_StartSound (nullptr, nullptr, nullptr, &p, channel, sound_id, volume, attenuation); } //========================================================================== @@ -1395,7 +1397,8 @@ void S_Sound(const DVector3 &pos, int channel, FSoundID sound_id, float volume, void S_Sound (const sector_t *sec, int channel, FSoundID sfxid, float volume, float attenuation) { - S_StartSound (NULL, sec, NULL, NULL, channel, sfxid, volume, attenuation); + if (sec->Level != primaryLevel) return; + S_StartSound (nullptr, sec, nullptr, nullptr, channel, sfxid, volume, attenuation); } //========================================================================== @@ -1408,7 +1411,7 @@ void S_Sound (const sector_t *sec, int channel, FSoundID sfxid, float volume, fl void S_PlaySound(AActor *a, int chan, FSoundID sid, float vol, float atten, bool local) { - if (a == nullptr) + if (a == nullptr || a->Sector->Flags & SECF_SILENT || a->Level != primaryLevel) return; if (!local) @@ -1417,7 +1420,7 @@ void S_PlaySound(AActor *a, int chan, FSoundID sid, float vol, float atten, bool } else { - if (a->CheckLocalView(consoleplayer)) + if (a->CheckLocalView()) { S_Sound(chan, sid, vol, ATTN_NONE); } @@ -1661,7 +1664,7 @@ void S_StopSound (int channel) { FSoundChan *next = chan->NextChan; if (chan->SourceType == SOURCE_None && - (chan->EntChannel == channel || (i_compatflags & COMPATF_MAGICSILENCE))) + (chan->EntChannel == channel || (compatflags & COMPATF_MAGICSILENCE))) { S_StopChannel(chan); } @@ -1685,7 +1688,7 @@ void S_StopSound (AActor *actor, int channel) FSoundChan *next = chan->NextChan; if (chan->SourceType == SOURCE_Actor && chan->Actor == actor && - (chan->EntChannel == channel || (i_compatflags & COMPATF_MAGICSILENCE))) + (chan->EntChannel == channel || (compatflags & COMPATF_MAGICSILENCE))) { S_StopChannel(chan); } @@ -1709,7 +1712,7 @@ void S_StopSound (const sector_t *sec, int channel) FSoundChan *next = chan->NextChan; if (chan->SourceType == SOURCE_Sector && chan->Sector == sec && - (chan->EntChannel == channel || (i_compatflags & COMPATF_MAGICSILENCE))) + (chan->EntChannel == channel || (compatflags & COMPATF_MAGICSILENCE))) { S_StopChannel(chan); } @@ -1733,7 +1736,7 @@ void S_StopSound (const FPolyObj *poly, int channel) FSoundChan *next = chan->NextChan; if (chan->SourceType == SOURCE_Polyobj && chan->Poly == poly && - (chan->EntChannel == channel || (i_compatflags & COMPATF_MAGICSILENCE))) + (chan->EntChannel == channel || (compatflags & COMPATF_MAGICSILENCE))) { S_StopChannel(chan); } @@ -1749,7 +1752,10 @@ void S_StopSound (const FPolyObj *poly, int channel) void S_StopAllChannels () { - SN_StopAllSequences(); + for (auto Level : AllLevels()) + { + SN_StopAllSequences(Level); + } FSoundChan *chan = Channels; while (chan != NULL) @@ -1822,7 +1828,7 @@ void S_ChangeSoundVolume(AActor *actor, int channel, double dvolume) { if (chan->SourceType == SOURCE_Actor && chan->Actor == actor && - (chan->EntChannel == channel || (i_compatflags & COMPATF_MAGICSILENCE))) + (chan->EntChannel == channel || (compatflags & COMPATF_MAGICSILENCE))) { GSnd->ChannelVolume(chan, volume); chan->Volume = volume; @@ -1928,7 +1934,7 @@ static bool S_IsChannelUsed(AActor *actor, int channel, int *seen) bool S_IsActorPlayingSomething (AActor *actor, int channel, int sound_id) { - if (i_compatflags & COMPATF_MAGICSILENCE) + if (compatflags & COMPATF_MAGICSILENCE) { channel = 0; } @@ -2176,13 +2182,15 @@ void S_UpdateSounds (AActor *listenactor) chan->ChanFlags &= ~CHAN_JUSTSTARTED; } - SN_UpdateActiveSequences(); - + for (auto Level : AllLevels()) + { + SN_UpdateActiveSequences(Level); + } GSnd->UpdateListener(&listener); GSnd->UpdateSounds(); - if (level.time >= RestartEvictionsAt) + if (primaryLevel->time >= RestartEvictionsAt) { RestartEvictionsAt = 0; S_RestoreEvictedChannels(); @@ -2208,8 +2216,8 @@ static void S_SetListener(SoundListener &listener, AActor *listenactor) listener.velocity.Zero(); listener.position = listenactor->SoundPos(); listener.underwater = listenactor->waterlevel == 3; - assert(level.Zones.Size() > listenactor->Sector->ZoneNumber); - listener.Environment = level.Zones[listenactor->Sector->ZoneNumber].Environment; + assert(primaryLevel->Zones.Size() > listenactor->Sector->ZoneNumber); + listener.Environment = primaryLevel->Zones[listenactor->Sector->ZoneNumber].Environment; listener.valid = true; } else @@ -2487,7 +2495,7 @@ void S_SerializeSounds(FSerializer &arc) // playing before the wipe, and depending on the synchronization // between the main thread and the mixer thread at the time, the // sounds might be heard briefly before pausing for the wipe. - RestartEvictionsAt = level.time + 2; + RestartEvictionsAt = primaryLevel->time + 2; } GSnd->Sync(false); GSnd->UpdateSounds(); @@ -2577,8 +2585,8 @@ bool S_ChangeMusic (const char *musicname, int order, bool looping, bool force) { if (gamestate == GS_LEVEL || gamestate == GS_TITLELEVEL) { - musicname = level.Music; - order = level.musicorder; + musicname = primaryLevel->Music; + order = primaryLevel->musicorder; } else { @@ -2858,7 +2866,7 @@ CCMD (loopsound) } else { - AActor *icon = Spawn("SpeakerIcon", players[consoleplayer].mo->PosPlusZ(32.), ALLOW_REPLACE); + AActor *icon = Spawn(primaryLevel, "SpeakerIcon", players[consoleplayer].mo->PosPlusZ(32.), ALLOW_REPLACE); if (icon != NULL) { S_Sound(icon, CHAN_BODY | CHAN_LOOP, id, 1.f, ATTN_IDLE); diff --git a/src/s_sound.h b/src/s_sound.h index 7b971c046d..4118967169 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -34,6 +34,7 @@ class AActor; class FScanner; class FSerializer; +struct FLevelLocals; // // SoundFX struct. @@ -217,7 +218,7 @@ void S_Shutdown (); void S_Start (); // Called after a level is loaded. Ensures that most sounds are loaded. -void S_PrecacheLevel (); +void S_PrecacheLevel (FLevelLocals *l); // Loads a sound, including any random sounds it might reference. void S_CacheSound (sfxinfo_t *sfx); @@ -228,7 +229,7 @@ void S_Sound (AActor *ent, int channel, FSoundID sfxid, float volume, float atte void S_SoundMinMaxDist (AActor *ent, int channel, FSoundID sfxid, float volume, float mindist, float maxdist); void S_Sound (const FPolyObj *poly, int channel, FSoundID sfxid, float volume, float attenuation); void S_Sound (const sector_t *sec, int channel, FSoundID sfxid, float volume, float attenuation); -void S_Sound(const DVector3 &pos, int channel, FSoundID sfxid, float volume, float attenuation); +void S_Sound(FLevelLocals *Level, const DVector3 &pos, int channel, FSoundID sfxid, float volume, float attenuation); // [Nash] Used by ACS and DECORATE void S_PlaySound(AActor *a, int chan, FSoundID sid, float vol, float atten, bool local); diff --git a/src/scripting/backend/codegen.cpp b/src/scripting/backend/codegen.cpp index cb007c2f41..878c7beeae 100644 --- a/src/scripting/backend/codegen.cpp +++ b/src/scripting/backend/codegen.cpp @@ -47,6 +47,8 @@ #include "v_text.h" #include "w_wad.h" #include "doomstat.h" +#include "g_levellocals.h" +#include "v_video.h" extern FRandom pr_exrandom; FMemArena FxAlloc(65536); @@ -5173,18 +5175,21 @@ static DObject *BuiltinNew(PClass *cls, int outerside, int backwardscompatible) ThrowAbortException(X_OTHER, "Cannot create actors with 'new'"); return nullptr; } - if (vm_warnthinkercreation && cls->IsDescendantOf(NAME_Thinker)) + if ((vm_warnthinkercreation || !backwardscompatible) && cls->IsDescendantOf(NAME_Thinker)) { // This must output a diagnostic warning - //ThrowAbortException(X_OTHER, "Cannot create actors with 'new'"); - //return nullptr; + Printf("Using 'new' to create thinkers is deprecated."); } // [ZZ] validate readonly and between scope construction if (outerside) FScopeBarrier::ValidateNew(cls, outerside - 1); - auto object = cls->CreateNew(); - if (backwardscompatible && object->IsKindOf(NAME_Thinker)) + DObject *object; + if (!cls->IsDescendantOf(NAME_Thinker)) { - // Todo: Link thinker to current primary level. + object = cls->CreateNew(); + } + else + { + object = currentVMLevel->CreateThinker(cls); } return object; } @@ -6128,9 +6133,21 @@ FxExpression *FxIdentifier::Resolve(FCompileContext& ctx) { if (sym->mVersion <= ctx.Version) { - ScriptPosition.Message(MSG_WARNING, "Accessing deprecated global variable %s - deprecated since %d.%d.%d", sym->SymbolName.GetChars(), vsym->mVersion.major, vsym->mVersion.minor, vsym->mVersion.revision); + if (!(ctx.Function->Variants[0].Flags & VARF_Deprecated) && Wads.GetLumpFile(ctx.Lump) == 0) + { + ScriptPosition.Message(MSG_WARNING, "Accessing deprecated global variable %s - deprecated since %d.%d.%d", sym->SymbolName.GetChars(), vsym->mVersion.major, vsym->mVersion.minor, vsym->mVersion.revision); + } + else + { + // Allow use of deprecated symbols in deprecated functions of the internal code. This is meant to allow deprecated code to remain as it was, + // even if it depends on some deprecated symbol. + // The main motivation here is to keep the deprecated static functions accessing the global level variable as they were. + // Print these only if debug output is active and at the highest verbosity level. + ScriptPosition.Message(MSG_DEBUGMSG, TEXTCOLOR_BLUE "Accessing deprecated global variable %s - deprecated since %d.%d.%d", sym->SymbolName.GetChars(), vsym->mVersion.major, vsym->mVersion.minor, vsym->mVersion.revision); + } } } + newex = new FxGlobalVariable(static_cast(sym), ScriptPosition); goto foundit; @@ -6842,9 +6859,7 @@ ExpEmit FxCVar::Emit(VMFunctionBuilder *build) int *pVal; auto cv = static_cast(CVar); auto vcv = &cv->ValueVar; - if (vcv == &compatflags) pVal = &i_compatflags; - else if (vcv == &compatflags2) pVal = &i_compatflags2; - else pVal = &vcv->Value; + pVal = &vcv->Value; build->Emit(OP_LKP, addr.RegNum, build->GetConstantAddress(pVal)); build->Emit(OP_LW, dest.RegNum, addr.RegNum, nul); build->Emit(OP_SRL_RI, dest.RegNum, dest.RegNum, cv->BitNum); @@ -8613,7 +8628,7 @@ FxExpression *FxActionSpecialCall::Resolve(FCompileContext& ctx) int BuiltinCallLineSpecial(int special, AActor *activator, int arg1, int arg2, int arg3, int arg4, int arg5) { - return P_ExecuteSpecial(special, nullptr, activator, 0, arg1, arg2, arg3, arg4, arg5); + return P_ExecuteSpecial(currentVMLevel , special, nullptr, activator, 0, arg1, arg2, arg3, arg4, arg5); } DEFINE_ACTION_FUNCTION_NATIVE(DObject, BuiltinCallLineSpecial, BuiltinCallLineSpecial) @@ -8627,7 +8642,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(DObject, BuiltinCallLineSpecial, BuiltinCallLineSp PARAM_INT(arg4); PARAM_INT(arg5); - ACTION_RETURN_INT(P_ExecuteSpecial(special, nullptr, activator, 0, arg1, arg2, arg3, arg4, arg5)); + ACTION_RETURN_INT(P_ExecuteSpecial(currentVMLevel, special, nullptr, activator, 0, arg1, arg2, arg3, arg4, arg5)); } ExpEmit FxActionSpecialCall::Emit(VMFunctionBuilder *build) diff --git a/src/scripting/decorate/thingdef_parse.cpp b/src/scripting/decorate/thingdef_parse.cpp index 24360b165c..6bc8074f32 100644 --- a/src/scripting/decorate/thingdef_parse.cpp +++ b/src/scripting/decorate/thingdef_parse.cpp @@ -47,6 +47,10 @@ #include "w_wad.h" #include "v_text.h" #include "m_argv.h" +#include "v_video.h" +#ifndef _MSC_VER +#include "i_system.h" // for strlwr() +#endif // !_MSC_VER void ParseOldDecoration(FScanner &sc, EDefinitionType def, PNamespace *ns); EXTERN_CVAR(Bool, strictdecorate); diff --git a/src/scripting/decorate/thingdef_states.cpp b/src/scripting/decorate/thingdef_states.cpp index d03069775c..cede46bdde 100644 --- a/src/scripting/decorate/thingdef_states.cpp +++ b/src/scripting/decorate/thingdef_states.cpp @@ -44,6 +44,9 @@ #include "p_local.h" #include "thingdef.h" #include "backend/codegen.h" +#ifndef _MSC_VER +#include "i_system.h" // for strlwr() +#endif // !_MSC_VER //========================================================================== //*** diff --git a/src/scripting/thingdef_properties.cpp b/src/scripting/thingdef_properties.cpp index d494ff8350..8f9916818d 100644 --- a/src/scripting/thingdef_properties.cpp +++ b/src/scripting/thingdef_properties.cpp @@ -54,6 +54,8 @@ #include "a_keys.h" #include "g_levellocals.h" #include "types.h" +#include "a_dynlight.h" +#include "v_video.h" //========================================================================== // @@ -148,6 +150,7 @@ bool ModActorFlag(AActor *actor, const FString &flagname, bool set, bool printer if (actor != NULL) { + auto Level = actor->Level; const char *dot = strchr(flagname, '.'); FFlagDef *fd; PClassActor *cls = actor->GetClass(); @@ -166,9 +169,9 @@ bool ModActorFlag(AActor *actor, const FString &flagname, bool set, bool printer { found = true; - if (actor->CountsAsKill() && actor->health > 0) --level.total_monsters; - if (actor->flags & MF_COUNTITEM) --level.total_items; - if (actor->flags5 & MF5_COUNTSECRET) --level.total_secrets; + if (actor->CountsAsKill() && actor->health > 0) --Level->total_monsters; + if (actor->flags & MF_COUNTITEM) --Level->total_items; + if (actor->flags5 & MF5_COUNTSECRET) --Level->total_secrets; if (fd->structoffset == -1) { @@ -187,9 +190,9 @@ bool ModActorFlag(AActor *actor, const FString &flagname, bool set, bool printer if (linkchange) actor->LinkToWorld(&ctx); } - if (actor->CountsAsKill() && actor->health > 0) ++level.total_monsters; - if (actor->flags & MF_COUNTITEM) ++level.total_items; - if (actor->flags5 & MF5_COUNTSECRET) ++level.total_secrets; + if (actor->CountsAsKill() && actor->health > 0) ++Level->total_monsters; + if (actor->flags & MF_COUNTITEM) ++Level->total_items; + if (actor->flags5 & MF5_COUNTSECRET) ++Level->total_secrets; } else if (printerror) { @@ -1788,3 +1791,21 @@ DEFINE_CLASS_PROPERTY(unmorphflash, S, PowerMorph) defaults->PointerVar(NAME_UnMorphFlash) = FindClassTentative(str, RUNTIME_CLASS(AActor), bag.fromDecorate); } +//========================================================================== +// +//========================================================================== +DEFINE_CLASS_PROPERTY(type, S, DynamicLight) +{ + PROP_STRING_PARM(str, 0); + static const char * ltype_names[]={ + "Point","Pulse","Flicker","Sector","RandomFlicker", "ColorPulse", "ColorFlicker", "RandomColorFlicker", nullptr}; + + static const int ltype_values[]={ + PointLight, PulseLight, FlickerLight, SectorLight, RandomFlickerLight, ColorPulseLight, ColorFlickerLight, RandomColorFlickerLight }; + + int style = MatchString(str, ltype_names); + if (style < 0) I_Error("Unknown light type '%s'", str); + defaults->IntVar(NAME_lighttype) = ltype_values[style]; +} + + diff --git a/src/scripting/vm/jit_runtime.cpp b/src/scripting/vm/jit_runtime.cpp index 5ef0760d6c..f724024042 100644 --- a/src/scripting/vm/jit_runtime.cpp +++ b/src/scripting/vm/jit_runtime.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #endif struct JitFuncInfo diff --git a/src/scripting/vm/jitintern.h b/src/scripting/vm/jitintern.h index 67659e6e07..aa6dbfc094 100644 --- a/src/scripting/vm/jitintern.h +++ b/src/scripting/vm/jitintern.h @@ -1,6 +1,6 @@ #include "jit.h" -#include "i_system.h" + #include "types.h" #include "stats.h" diff --git a/src/scripting/vmiterators.cpp b/src/scripting/vmiterators.cpp index 65d359c32a..9c7844129c 100644 --- a/src/scripting/vmiterators.cpp +++ b/src/scripting/vmiterators.cpp @@ -41,8 +41,8 @@ class DThinkerIterator : public DObject, public FThinkerIterator DECLARE_ABSTRACT_CLASS(DThinkerIterator, DObject) public: - DThinkerIterator(PClass *cls, int statnum = MAX_STATNUM + 1) - : FThinkerIterator(cls, statnum) + DThinkerIterator(FLevelLocals *Level, PClass *cls, int statnum = MAX_STATNUM + 1) + : FThinkerIterator(Level, cls, statnum) { } }; @@ -51,7 +51,7 @@ IMPLEMENT_CLASS(DThinkerIterator, true, false); static DThinkerIterator *CreateThinkerIterator(PClass *type, int statnum) { - return Create(type, statnum); + return Create(currentVMLevel, type, statnum); } DEFINE_ACTION_FUNCTION_NATIVE(DThinkerIterator, Create, CreateThinkerIterator) @@ -59,7 +59,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(DThinkerIterator, Create, CreateThinkerIterator) PARAM_PROLOGUE; PARAM_CLASS(type, DThinker); PARAM_INT(statnum); - ACTION_RETURN_OBJECT(Create(type, statnum)); + ACTION_RETURN_OBJECT(CreateThinkerIterator(type, statnum)); } static DThinker *NextThinker(DThinkerIterator *self, bool exact) @@ -109,7 +109,7 @@ public: } DBlockLinesIterator(double x, double y, double z, double height, double radius, sector_t *sec) - :FMultiBlockLinesIterator(check, x, y, z, height, radius, sec) + :FMultiBlockLinesIterator(check, currentVMLevel, x, y, z, height, radius, sec) { cres.line = nullptr; cres.Position.Zero(); @@ -183,7 +183,7 @@ public: } DBlockThingsIterator(double checkx, double checky, double checkz, double checkh, double checkradius, bool ignorerestricted, sector_t *newsec) - : iterator(check, checkx, checky, checkz, checkh, checkradius, ignorerestricted, newsec) + : iterator(check, currentVMLevel, checkx, checky, checkz, checkh, checkradius, ignorerestricted, newsec) { cres.thing = nullptr; cres.Position.Zero(); @@ -243,7 +243,7 @@ class DSectorTagIterator : public DObject, public FSectorTagIterator { DECLARE_ABSTRACT_CLASS(DSectorTagIterator, DObject); public: - DSectorTagIterator(int tag, line_t *line) + DSectorTagIterator(FTagManager &tm, int tag, line_t *line) : FSectorTagIterator(tm) { if (line == nullptr) Init(tag); else Init(tag, line); @@ -252,17 +252,17 @@ public: IMPLEMENT_CLASS(DSectorTagIterator, true, false); -static DSectorTagIterator *CreateSTI(int tag, line_t *line) +static DSectorTagIterator *CreateSTI(FLevelLocals *Level, int tag, line_t *line) { - return Create(tag, line); + return Create(Level->tagManager, tag, line); } -DEFINE_ACTION_FUNCTION_NATIVE(DSectorTagIterator, Create, CreateSTI) +DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, CreateSectorTagIterator, CreateSTI) { - PARAM_PROLOGUE; + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_INT(tag); PARAM_POINTER(line, line_t); - ACTION_RETURN_POINTER(Create(tag, line)); + ACTION_RETURN_POINTER(CreateSTI(self, tag, line)); } int NextSTI(DSectorTagIterator *self) @@ -299,8 +299,8 @@ class DLineIdIterator : public DObject, public FLineIdIterator { DECLARE_ABSTRACT_CLASS(DLineIdIterator, DObject); public: - DLineIdIterator(int tag) - : FLineIdIterator(tag) + DLineIdIterator(FTagManager &tm, int tag) + : FLineIdIterator(tm, tag) { } }; @@ -308,16 +308,16 @@ public: IMPLEMENT_CLASS(DLineIdIterator, true, false); -static DLineIdIterator *CreateLTI(int tag) +static DLineIdIterator *CreateLTI(FLevelLocals *Level, int tag) { - return Create(tag); + return Create(Level->tagManager, tag); } -DEFINE_ACTION_FUNCTION_NATIVE(DLineIdIterator, Create, CreateLTI) +DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, CreateLineIDIterator, CreateLTI) { - PARAM_PROLOGUE; + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_INT(tag); - ACTION_RETURN_POINTER(Create(tag)); + ACTION_RETURN_POINTER(CreateLTI(self, tag)); } int NextLTI(DLineIdIterator *self) @@ -342,25 +342,25 @@ class DActorIterator : public DObject, public NActorIterator DECLARE_ABSTRACT_CLASS(DActorIterator, DObject) public: - DActorIterator(PClassActor *cls = nullptr, int tid = 0) - : NActorIterator(cls, tid) + DActorIterator(AActor **hash, PClassActor *cls = nullptr, int tid = 0) + : NActorIterator(hash, cls, tid) { } }; IMPLEMENT_CLASS(DActorIterator, true, false); -static DActorIterator *CreateActI(int tid, PClassActor *type) +static DActorIterator *CreateActI(FLevelLocals *Level, int tid, PClassActor *type) { - return Create(type, tid); + return Create(Level->TIDHash, type, tid); } -DEFINE_ACTION_FUNCTION_NATIVE(DActorIterator, Create, CreateActI) +DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, CreateActorIterator, CreateActI) { - PARAM_PROLOGUE; + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_INT(tid); PARAM_CLASS(type, AActor); - ACTION_RETURN_OBJECT(Create(type, tid)); + ACTION_RETURN_OBJECT(CreateActI(self, tid, type)); } static AActor *NextActI(DActorIterator *self) diff --git a/src/scripting/vmthunks.cpp b/src/scripting/vmthunks.cpp index 9ed1f32864..653bc2d98e 100644 --- a/src/scripting/vmthunks.cpp +++ b/src/scripting/vmthunks.cpp @@ -28,6 +28,7 @@ // //----------------------------------------------------------------------------- +#include #include "vm.h" #include "r_defs.h" #include "g_levellocals.h" @@ -46,6 +47,8 @@ #include "d_player.h" #include "p_setup.h" #include "i_music.h" +#include "am_map.h" +#include "v_video.h" DVector2 AM_GetPosition(); int Net_GetLatency(int *ld, int *ad); @@ -656,22 +659,27 @@ DEFINE_ACTION_FUNCTION_NATIVE(_Sector, RemoveForceField, RemoveForceField) return 0; } - DEFINE_ACTION_FUNCTION_NATIVE(_Sector, PointInSector, P_PointInSectorXY) - { - PARAM_PROLOGUE; - PARAM_FLOAT(x); - PARAM_FLOAT(y); - ACTION_RETURN_POINTER(P_PointInSector(x, y)); - } +static sector_t *PointInSectorXY(FLevelLocals *self, double x, double y) +{ + return self->PointInSector(x ,y); +} - static void SetXOffset(sector_t *self, int pos, double o) - { - self->SetXOffset(pos, o); - } +DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, PointInSector, PointInSectorXY) +{ + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); + PARAM_FLOAT(x); + PARAM_FLOAT(y); + ACTION_RETURN_POINTER(PointInSectorXY(self, x, y)); +} - DEFINE_ACTION_FUNCTION_NATIVE(_Sector, SetXOffset, SetXOffset) - { - PARAM_SELF_STRUCT_PROLOGUE(sector_t); +static void SetXOffset(sector_t *self, int pos, double o) +{ + self->SetXOffset(pos, o); +} + +DEFINE_ACTION_FUNCTION_NATIVE(_Sector, SetXOffset, SetXOffset) +{ + PARAM_SELF_STRUCT_PROLOGUE(sector_t); PARAM_INT(pos); PARAM_FLOAT(o); self->SetXOffset(pos, o); @@ -1165,7 +1173,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_Sector, RemoveForceField, RemoveForceField) static void SetEnvironmentID(sector_t *self, int envnum) { - level.Zones[self->ZoneNumber].Environment = S_FindEnvironment(envnum); + self->Level->Zones[self->ZoneNumber].Environment = S_FindEnvironment(envnum); } DEFINE_ACTION_FUNCTION_NATIVE(_Sector, SetEnvironmentID, SetEnvironmentID) @@ -1178,7 +1186,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_Sector, RemoveForceField, RemoveForceField) static void SetEnvironment(sector_t *self, const FString &env) { - level.Zones[self->ZoneNumber].Environment = S_FindEnvironment(env); + self->Level->Zones[self->ZoneNumber].Environment = S_FindEnvironment(env); } DEFINE_ACTION_FUNCTION_NATIVE(_Sector, SetEnvironment, SetEnvironment) @@ -1620,18 +1628,18 @@ DEFINE_ACTION_FUNCTION_NATIVE(_Sector, RemoveForceField, RemoveForceField) //===================================================================================== // This is needed to convert the strings to char pointers. - static void ReplaceTextures(const FString &from, const FString &to, int flags) + static void ReplaceTextures(FLevelLocals *self, const FString &from, const FString &to, int flags) { - P_ReplaceTextures(from, to, flags); + self->ReplaceTextures(from, to, flags); } -DEFINE_ACTION_FUNCTION_NATIVE(_TexMan, ReplaceTextures, ReplaceTextures) +DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, ReplaceTextures, ReplaceTextures) { - PARAM_PROLOGUE; + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_STRING(from); PARAM_STRING(to); PARAM_INT(flags); - P_ReplaceTextures(from, to, flags); + self->ReplaceTextures(from, to, flags); return 0; } @@ -2351,19 +2359,21 @@ DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, SetClipRect, SBar_SetClipRect) static void GetGlobalACSString(int index, FString *result) { - *result = level.Behaviors.LookupString(ACS_GlobalVars[index]); + *result = primaryLevel->Behaviors.LookupString(ACS_GlobalVars[index]); } DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, GetGlobalACSString, GetGlobalACSString) { PARAM_PROLOGUE; PARAM_INT(index); - ACTION_RETURN_STRING(level.Behaviors.LookupString(ACS_GlobalVars[index])); + FString res; + GetGlobalACSString(index, &res); + ACTION_RETURN_STRING(res); } static void GetGlobalACSArrayString(int arrayno, int index, FString *result) { - *result = level.Behaviors.LookupString(ACS_GlobalVars[index]); + *result = primaryLevel->Behaviors.LookupString(ACS_GlobalVars[index]); } DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, GetGlobalACSArrayString, GetGlobalACSArrayString) @@ -2371,7 +2381,9 @@ DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, GetGlobalACSArrayString, GetGlobal PARAM_PROLOGUE; PARAM_INT(arrayno); PARAM_INT(index); - ACTION_RETURN_STRING(level.Behaviors.LookupString(ACS_GlobalArrays[arrayno][index])); + FString res; + GetGlobalACSArrayString(arrayno, index, &res); + ACTION_RETURN_STRING(res); } static int GetGlobalACSValue(int index) @@ -2496,10 +2508,28 @@ DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, GetSpotState, GetSpotState) ACTION_RETURN_POINTER(GetSpotState(self, create)); } + +//--------------------------------------------------------------------------- +// +// Format the map name, include the map label if wanted +// +//--------------------------------------------------------------------------- + +EXTERN_CVAR(Int, am_showmaplabel) + static void FormatMapName(FLevelLocals *self, int cr, FString *result) { char mapnamecolor[3] = { '\34', char(cr + 'A'), 0 }; - ST_FormatMapName(*result, mapnamecolor); + + cluster_info_t *cluster = FindClusterInfo(self->cluster); + bool ishub = (cluster != nullptr && (cluster->flags & CLUSTER_HUB)); + + *result = ""; + if (am_showmaplabel == 1 || (am_showmaplabel == 2 && !ishub)) + { + *result << self->MapName << ": "; + } + *result << mapnamecolor << self->LevelName; } DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, FormatMapName, FormatMapName) @@ -2511,20 +2541,22 @@ DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, FormatMapName, FormatMapName) ACTION_RETURN_STRING(rets); } -static void GetAutomapPosition(DVector2 *pos) +static void GetAutomapPosition(FLevelLocals *self, DVector2 *pos) { - *pos = AM_GetPosition(); + *pos = self->automap->GetPosition(); } DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, GetAutomapPosition, GetAutomapPosition) { - PARAM_PROLOGUE; - ACTION_RETURN_VEC2(AM_GetPosition()); + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); + DVector2 result; + GetAutomapPosition(self, &result); + ACTION_RETURN_VEC2(result); } static int ZGetUDMFInt(FLevelLocals *self, int type, int index, int key) { - return GetUDMFInt(type, index, ENamedName(key)); + return GetUDMFInt(self,type, index, ENamedName(key)); } DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, GetUDMFInt, ZGetUDMFInt) @@ -2533,12 +2565,12 @@ DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, GetUDMFInt, ZGetUDMFInt) PARAM_INT(type); PARAM_INT(index); PARAM_NAME(key); - ACTION_RETURN_INT(GetUDMFInt(type, index, key)); + ACTION_RETURN_INT(GetUDMFInt(self, type, index, key)); } static double ZGetUDMFFloat(FLevelLocals *self, int type, int index, int key) { - return GetUDMFFloat(type, index, ENamedName(key)); + return GetUDMFFloat(self, type, index, ENamedName(key)); } DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, GetUDMFFloat, ZGetUDMFFloat) @@ -2547,12 +2579,12 @@ DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, GetUDMFFloat, ZGetUDMFFloat) PARAM_INT(type); PARAM_INT(index); PARAM_NAME(key); - ACTION_RETURN_FLOAT(GetUDMFFloat(type, index, key)); + ACTION_RETURN_FLOAT(GetUDMFFloat(self, type, index, key)); } static void ZGetUDMFString(FLevelLocals *self, int type, int index, int key, FString *result) { - *result = GetUDMFString(type, index, ENamedName(key)); + *result = GetUDMFString(self, type, index, ENamedName(key)); } DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, GetUDMFString, ZGetUDMFString) @@ -2561,7 +2593,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, GetUDMFString, ZGetUDMFString) PARAM_INT(type); PARAM_INT(index); PARAM_NAME(key); - ACTION_RETURN_STRING(GetUDMFString(type, index, key)); + ACTION_RETURN_STRING(GetUDMFString(self, type, index, key)); } DEFINE_ACTION_FUNCTION(FLevelLocals, GetChecksum) @@ -2571,13 +2603,13 @@ DEFINE_ACTION_FUNCTION(FLevelLocals, GetChecksum) for (int j = 0; j < 16; ++j) { - sprintf(md5string + j * 2, "%02x", level.md5[j]); + sprintf(md5string + j * 2, "%02x", self->md5[j]); } ACTION_RETURN_STRING((const char*)md5string); } -static void Vec2Offset(double x, double y, double dx, double dy, bool absolute, DVector2 *result) +static void Vec2Offset(FLevelLocals *Level, double x, double y, double dx, double dy, bool absolute, DVector2 *result) { if (absolute) { @@ -2585,24 +2617,24 @@ static void Vec2Offset(double x, double y, double dx, double dy, bool absolute, } else { - *result = P_GetOffsetPosition(x, y, dx, dy); + *result = Level->GetPortalOffsetPosition(x, y, dx, dy); } } DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, Vec2Offset, Vec2Offset) { - PARAM_PROLOGUE; + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_FLOAT(x); PARAM_FLOAT(y); PARAM_FLOAT(dx); PARAM_FLOAT(dy); PARAM_BOOL(absolute); DVector2 result; - Vec2Offset(x, y, dx, dy, absolute, &result); + Vec2Offset(self, x, y, dx, dy, absolute, &result); ACTION_RETURN_VEC2(result); } -static void Vec2OffsetZ(double x, double y, double dx, double dy, double atz, bool absolute, DVector3 *result) +static void Vec2OffsetZ(FLevelLocals *Level, double x, double y, double dx, double dy, double atz, bool absolute, DVector3 *result) { if (absolute) { @@ -2610,14 +2642,14 @@ static void Vec2OffsetZ(double x, double y, double dx, double dy, double atz, bo } else { - DVector2 v = P_GetOffsetPosition(x, y, dx, dy); + DVector2 v = Level->GetPortalOffsetPosition(x, y, dx, dy); *result = (DVector3(v, atz)); } } DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, Vec2OffsetZ, Vec2OffsetZ) { - PARAM_PROLOGUE; + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_FLOAT(x); PARAM_FLOAT(y); PARAM_FLOAT(dx); @@ -2625,11 +2657,11 @@ DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, Vec2OffsetZ, Vec2OffsetZ) PARAM_FLOAT(atz); PARAM_BOOL(absolute); DVector3 result; - Vec2OffsetZ(x, y, dx, dy, atz, absolute, &result); + Vec2OffsetZ(self, x, y, dx, dy, atz, absolute, &result); ACTION_RETURN_VEC3(result); } -static void Vec3Offset(double x, double y, double z, double dx, double dy, double dz, bool absolute, DVector3 *result) +static void Vec3Offset(FLevelLocals *Level, double x, double y, double z, double dx, double dy, double dz, bool absolute, DVector3 *result) { if (absolute) { @@ -2637,14 +2669,14 @@ static void Vec3Offset(double x, double y, double z, double dx, double dy, doubl } else { - DVector2 v = P_GetOffsetPosition(x, y, dx, dy); + DVector2 v = Level->GetPortalOffsetPosition(x, y, dx, dy); *result = (DVector3(v, z + dz)); } } DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, Vec3Offset, Vec3Offset) { - PARAM_PROLOGUE; + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_FLOAT(x); PARAM_FLOAT(y); PARAM_FLOAT(z); @@ -2653,11 +2685,130 @@ DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, Vec3Offset, Vec3Offset) PARAM_FLOAT(dz); PARAM_BOOL(absolute); DVector3 result; - Vec3Offset(x, y, z, dx, dy, dz, absolute, &result); + Vec3Offset(self, x, y, z, dx, dy, dz, absolute, &result); + ACTION_RETURN_VEC3(result); +} + +int IsPointInMap(FLevelLocals *Level, double x, double y, double z); + +DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, IsPointInLevel, IsPointInMap) +{ + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); + PARAM_FLOAT(x); + PARAM_FLOAT(y); + PARAM_FLOAT(z); + ACTION_RETURN_BOOL(IsPointInMap(self, x, y, z)); +} + +template +inline T VecDiff(FLevelLocals *Level, const T& v1, const T& v2) +{ + T result = v2 - v1; + + if (Level->subsectors.Size() > 0) + { + const sector_t * sec1 = Level->PointInSector(v1); + const sector_t * sec2 = Level->PointInSector(v2); + + if (nullptr != sec1 && nullptr != sec2) + { + result += Level->Displacements.getOffset(sec2->PortalGroup, sec1->PortalGroup); + } + } + + return result; +} + +void Vec2Diff(FLevelLocals *Level, double x1, double y1, double x2, double y2, DVector2 *result) +{ + *result = VecDiff(Level, DVector2(x1, y1), DVector2(x2, y2)); +} + +DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, Vec2Diff, Vec2Diff) +{ + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); + PARAM_FLOAT(x1); + PARAM_FLOAT(y1); + PARAM_FLOAT(x2); + PARAM_FLOAT(y2); + ACTION_RETURN_VEC2(VecDiff(self, DVector2(x1, y1), DVector2(x2, y2))); +} + +void Vec3Diff(FLevelLocals *Level, double x1, double y1, double z1, double x2, double y2, double z2, DVector3 *result) +{ + *result = VecDiff(Level, DVector3(x1, y1, z1), DVector3(x2, y2, z2)); +} + +DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, Vec3Diff, Vec3Diff) +{ + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); + PARAM_FLOAT(x1); + PARAM_FLOAT(y1); + PARAM_FLOAT(z1); + PARAM_FLOAT(x2); + PARAM_FLOAT(y2); + PARAM_FLOAT(z2); + ACTION_RETURN_VEC3(VecDiff(self, DVector3(x1, y1, z1), DVector3(x2, y2, z2))); +} + +void SphericalCoords(FLevelLocals *self, double vpX, double vpY, double vpZ, double tX, double tY, double tZ, double viewYaw, double viewPitch, int absolute, DVector3 *result) +{ + + DVector3 viewpoint(vpX, vpY, vpZ); + DVector3 target(tX, tY, tZ); + auto vecTo = absolute ? target - viewpoint : VecDiff(self, viewpoint, target); + + *result = (DVector3( + deltaangle(vecTo.Angle(), viewYaw).Degrees, + deltaangle(vecTo.Pitch(), viewPitch).Degrees, + vecTo.Length() + )); + +} +DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, SphericalCoords, SphericalCoords) +{ + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); + PARAM_FLOAT(viewpointX); + PARAM_FLOAT(viewpointY); + PARAM_FLOAT(viewpointZ); + PARAM_FLOAT(targetX); + PARAM_FLOAT(targetY); + PARAM_FLOAT(targetZ); + PARAM_FLOAT(viewYaw); + PARAM_FLOAT(viewPitch); + PARAM_BOOL(absolute); + DVector3 result; + SphericalCoords(self, viewpointX, viewpointY, viewpointZ, targetX, targetY, targetZ, viewYaw, viewpointZ, absolute, &result); ACTION_RETURN_VEC3(result); } +static int isFrozen(FLevelLocals *self) +{ + return self->isFrozen(); +} + +DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, isFrozen, isFrozen) +{ + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); + return isFrozen(self); +} + +void setFrozen(FLevelLocals *self, int on) +{ + self->frozenstate = (self->frozenstate & ~1) | !!on; + // For compatibility. The engine itself never checks this. + if (on) self->flags2 |= LEVEL2_FROZEN; + else self->flags2 &= ~LEVEL2_FROZEN; +} + +DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, setFrozen, setFrozen) +{ + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); + PARAM_BOOL(on); + setFrozen(self, on); + return 0; +} //===================================================================================== // @@ -2695,7 +2846,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_AltHUD, GetLatency, Net_GetLatency) // // //========================================================================== -DEFINE_GLOBAL(level); +DEFINE_GLOBAL_NAMED(currentVMLevel, level) DEFINE_FIELD(FLevelLocals, sectors) DEFINE_FIELD(FLevelLocals, lines) DEFINE_FIELD(FLevelLocals, sides) @@ -2738,6 +2889,7 @@ DEFINE_FIELD(FLevelLocals, outsidefogdensity) DEFINE_FIELD(FLevelLocals, skyfog) DEFINE_FIELD(FLevelLocals, pixelstretch) DEFINE_FIELD(FLevelLocals, deathsequence) + DEFINE_FIELD_BIT(FLevelLocals, flags, noinventorybar, LEVEL_NOINVENTORYBAR) DEFINE_FIELD_BIT(FLevelLocals, flags, monsterstelefrag, LEVEL_MONSTERSTELEFRAG) DEFINE_FIELD_BIT(FLevelLocals, flags, actownspecial, LEVEL_ACTOWNSPECIAL) @@ -2775,6 +2927,7 @@ DEFINE_FIELD_X(Sector, sector_t, terrainnum) DEFINE_FIELD_X(Sector, sector_t, floordata) DEFINE_FIELD_X(Sector, sector_t, ceilingdata) DEFINE_FIELD_X(Sector, sector_t, lightingdata) +DEFINE_FIELD_X(Sector, sector_t, Level) DEFINE_FIELD_X(Sector, sector_t, interpolations) DEFINE_FIELD_X(Sector, sector_t, soundtraversed) DEFINE_FIELD_X(Sector, sector_t, stairlock) diff --git a/src/scripting/vmthunks_actors.cpp b/src/scripting/vmthunks_actors.cpp index 73b737fcfc..e55a252005 100644 --- a/src/scripting/vmthunks_actors.cpp +++ b/src/scripting/vmthunks_actors.cpp @@ -566,7 +566,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, RestoreDamage, RestoreDamage) static int PlayerNumber(AActor *self) { - return self->player ? int(self->player - players) : 0; + return self->player ? self->Level->PlayerNum(self->player) : 0; } DEFINE_ACTION_FUNCTION_NATIVE(AActor, PlayerNumber, PlayerNumber) @@ -893,12 +893,17 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, GetFloorTerrain, GetFloorTerrain) ACTION_RETURN_POINTER(GetFloorTerrain(self)); } -DEFINE_ACTION_FUNCTION_NATIVE(AActor, FindUniqueTid, P_FindUniqueTID) +static int P_FindUniqueTID(FLevelLocals *Level, int start, int limit) { - PARAM_PROLOGUE; + return Level->FindUniqueTID(start, limit); +} + +DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, FindUniqueTid, P_FindUniqueTID) +{ + PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals); PARAM_INT(start); PARAM_INT(limit); - ACTION_RETURN_INT(P_FindUniqueTID(start, limit)); + ACTION_RETURN_INT(P_FindUniqueTID(self, start, limit)); } static void RemoveFromHash(AActor *self) @@ -1227,31 +1232,31 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, GetSpriteIndex, ZS_GetSpriteIndex) static PClassActor *ZS_GetReplacement(PClassActor *c) { - return c->GetReplacement(); + return c->GetReplacement(currentVMLevel); } DEFINE_ACTION_FUNCTION_NATIVE(AActor, GetReplacement, ZS_GetReplacement) { PARAM_PROLOGUE; PARAM_POINTER(c, PClassActor); - ACTION_RETURN_POINTER(c->GetReplacement()); + ACTION_RETURN_POINTER(ZS_GetReplacement(c)); } static PClassActor *ZS_GetReplacee(PClassActor *c) { - return c->GetReplacee(); + return c->GetReplacee(currentVMLevel); } DEFINE_ACTION_FUNCTION_NATIVE(AActor, GetReplacee, ZS_GetReplacee) { PARAM_PROLOGUE; PARAM_POINTER(c, PClassActor); - ACTION_RETURN_POINTER(c->GetReplacee()); + ACTION_RETURN_POINTER(ZS_GetReplacee(c)); } static void DrawSplash(AActor *self, int count, double angle, int kind) { - P_DrawSplash(count, self->Pos(), angle, kind); + P_DrawSplash(self->Level, count, self->Pos(), angle, kind); } DEFINE_ACTION_FUNCTION_NATIVE(AActor, DrawSplash, DrawSplash) @@ -1260,7 +1265,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, DrawSplash, DrawSplash) PARAM_INT(count); PARAM_FLOAT(angle); PARAM_INT(kind); - P_DrawSplash(count, self->Pos(), angle, kind); + P_DrawSplash(self->Level, count, self->Pos(), angle, kind); return 0; } @@ -1325,7 +1330,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, CheckSight, P_CheckSight) static void GiveSecret(AActor *self, bool printmessage, bool playsound) { - P_GiveSecret(self, printmessage, playsound, -1); + P_GiveSecret(self->Level, self, printmessage, playsound, -1); } DEFINE_ACTION_FUNCTION_NATIVE(AActor, GiveSecret, GiveSecret) @@ -1333,7 +1338,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, GiveSecret, GiveSecret) PARAM_SELF_PROLOGUE(AActor); PARAM_BOOL(printmessage); PARAM_BOOL(playsound); - P_GiveSecret(self, printmessage, playsound, -1); + GiveSecret(self, printmessage, playsound); return 0; } @@ -1649,6 +1654,46 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, CheckFor3DCeilingHit, CheckFor3DCeilingHit +static int isFrozen(AActor *self) +{ + return self->isFrozen(); +} + +DEFINE_ACTION_FUNCTION_NATIVE(AActor, isFrozen, isFrozen) +{ + PARAM_SELF_PROLOGUE(AActor); + ACTION_RETURN_BOOL(isFrozen(self)); +} + + +//===================================================================================== +// +// compat flags. These two are the only ones that get checked in script code +// so anything more complex isn't really needed. +// +//===================================================================================== +static int compat_limitpain_(AActor *self) +{ + return self->Level->i_compatflags & COMPATF_LIMITPAIN; +} + +static int compat_mushroom_(AActor *self) +{ + return self->Level->i_compatflags & COMPATF_MUSHROOM; +} + +DEFINE_ACTION_FUNCTION_NATIVE(AActor, compat_limitpain, compat_limitpain_) +{ + PARAM_SELF_PROLOGUE(AActor); + ACTION_RETURN_INT(compat_limitpain_(self)); +} + +DEFINE_ACTION_FUNCTION_NATIVE(AActor, compat_mushroom, compat_mushroom_) +{ + PARAM_SELF_PROLOGUE(AActor); + ACTION_RETURN_INT(compat_mushroom_(self)); +} + //=========================================================================== // // PlayerPawn functions @@ -1676,6 +1721,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(APlayerPawn, GetPrintableDisplayName, GetPrintable +DEFINE_FIELD(DThinker, Level) DEFINE_FIELD(AActor, snext) DEFINE_FIELD(AActor, player) DEFINE_FIELD_NAMED(AActor, __Pos, pos) diff --git a/src/scripting/zscript/zcc_compile.cpp b/src/scripting/zscript/zcc_compile.cpp index b43057f165..b7998f4110 100644 --- a/src/scripting/zscript/zcc_compile.cpp +++ b/src/scripting/zscript/zcc_compile.cpp @@ -41,6 +41,7 @@ #include "zcc_compile.h" #include "v_text.h" #include "p_lnspec.h" +#include "v_video.h" FSharedStringArena VMStringConstants; bool isActor(PContainerType *type); @@ -1369,11 +1370,15 @@ bool ZCCCompiler::CompileFields(PContainerType *type, TArrayName).GetChars(), type->TypeName.GetChars(), type->TypeName.GetChars()); } - else + else if (type != nullptr) { auto f = type->AddField(name->Name, thisfieldtype, varflags); if (field->Flags & (ZCC_Version | ZCC_Deprecated)) f->mVersion = field->Version; } + else + { + Error(field, "Cannot declare non-native global variables. Tried to declare %s", FName(name->Name).GetChars()); + } } name = static_cast(name->SiblingNext); } while (name != field->Names); @@ -3298,12 +3303,10 @@ static FxExpression *ModifyAssign(FxBinary *operation, FxExpression *left) // //========================================================================== -FxExpression *ZCCCompiler::ConvertNode(ZCC_TreeNode *ast) +FxExpression *ZCCCompiler::ConvertNode(ZCC_TreeNode *ast, bool substitute) { if (ast == nullptr) return nullptr; - // Note: Do not call 'Simplify' here because that function tends to destroy identifiers due to lack of context in which to resolve them. - // The Fx nodes created here will be better suited for that. switch (ast->NodeType) { case AST_ExprFuncCall: @@ -3325,7 +3328,7 @@ FxExpression *ZCCCompiler::ConvertNode(ZCC_TreeNode *ast) case AST_ExprMemberAccess: { auto ema = static_cast(fcall->Function); - return new FxMemberFunctionCall(ConvertNode(ema->Left), ema->Right, ConvertNodeList(args, fcall->Parameters), *ast); + return new FxMemberFunctionCall(ConvertNode(ema->Left, true), ema->Right, ConvertNodeList(args, fcall->Parameters), *ast); } case AST_ExprBinary: @@ -3390,8 +3393,9 @@ FxExpression *ZCCCompiler::ConvertNode(ZCC_TreeNode *ast) case AST_ExprID: { - auto id = static_cast(ast); - return new FxIdentifier(id->Identifier, *ast); + auto id = static_cast(ast)->Identifier; + if (id == NAME_LevelLocals && substitute) id = NAME_Level; // All static methods of FLevelLocals are now non-static so remap the name right here before passing it to the backend. + return new FxIdentifier(id, *ast); } case AST_ExprConstant: diff --git a/src/scripting/zscript/zcc_compile.h b/src/scripting/zscript/zcc_compile.h index 3a107ecfd1..15497f7f62 100644 --- a/src/scripting/zscript/zcc_compile.h +++ b/src/scripting/zscript/zcc_compile.h @@ -146,7 +146,7 @@ private: void MessageV(ZCC_TreeNode *node, const char *txtcolor, const char *msg, va_list argptr); FxExpression *ConvertAST(PContainerType *cclass, ZCC_TreeNode *ast); - FxExpression *ConvertNode(ZCC_TreeNode *node); + FxExpression *ConvertNode(ZCC_TreeNode *node, bool substitute= false); FxExpression *ConvertImplicitScopeNode(ZCC_TreeNode *node, ZCC_Statement *nested); FArgumentList &ConvertNodeList(FArgumentList &, ZCC_TreeNode *head); diff --git a/src/scriptutil.cpp b/src/scriptutil.cpp index b47eaee4bd..5dfbea03c7 100644 --- a/src/scriptutil.cpp +++ b/src/scriptutil.cpp @@ -23,7 +23,7 @@ // //----------------------------------------------------------------------------- -#include "i_system.h" + #include "tarray.h" #include "dobject.h" #include "vm.h" diff --git a/src/serializer.cpp b/src/serializer.cpp index 73e8e8eb41..7fccd74752 100644 --- a/src/serializer.cpp +++ b/src/serializer.cpp @@ -987,7 +987,6 @@ void FSerializer::ReadObjects(bool hubtravel) // Do not link any thinker that's being created here. This will be done by deserializing the thinker list later. try { - DThinker::bSerialOverride = true; r->mDObjects.Resize(ArraySize()); for (auto &p : r->mDObjects) { @@ -1052,7 +1051,6 @@ void FSerializer::ReadObjects(bool hubtravel) } EndArray(); - DThinker::bSerialOverride = false; assert(!founderrors); if (founderrors) { @@ -1070,7 +1068,6 @@ void FSerializer::ReadObjects(bool hubtravel) r->mDObjects.Clear(); // make sure this flag gets unset, even if something in here throws an error. - DThinker::bSerialOverride = false; throw; } } @@ -1450,27 +1447,32 @@ FSerializer &SerializePointer(FSerializer &arc, const char *key, T *&value, T ** template<> FSerializer &Serialize(FSerializer &arc, const char *key, FPolyObj *&value, FPolyObj **defval) { - return SerializePointer(arc, key, value, defval, level.Polyobjects.Data()); + if (arc.Level == nullptr) I_Error("Trying to serialize polyobject without a valid level"); + return SerializePointer(arc, key, value, defval, arc.Level->Polyobjects.Data()); } template<> FSerializer &Serialize(FSerializer &arc, const char *key, const FPolyObj *&value, const FPolyObj **defval) { - return SerializePointer(arc, key, value, defval, level.Polyobjects.Data()); + if (arc.Level == nullptr) I_Error("Trying to serialize polyobject without a valid level"); + return SerializePointer(arc, key, value, defval, arc.Level->Polyobjects.Data()); } template<> FSerializer &Serialize(FSerializer &arc, const char *key, side_t *&value, side_t **defval) { - return SerializePointer(arc, key, value, defval, &level.sides[0]); + if (arc.Level == nullptr) I_Error("Trying to serialize SIDEDEF without a valid level"); + return SerializePointer(arc, key, value, defval, &arc.Level->sides[0]); } template<> FSerializer &Serialize(FSerializer &arc, const char *key, sector_t *&value, sector_t **defval) { - return SerializePointer(arc, key, value, defval, &level.sectors[0]); + if (arc.Level == nullptr) I_Error("Trying to serialize sector without a valid level"); + return SerializePointer(arc, key, value, defval, &arc.Level->sectors[0]); } template<> FSerializer &Serialize(FSerializer &arc, const char *key, const sector_t *&value, const sector_t **defval) { - return SerializePointer(arc, key, value, defval, &level.sectors[0]); + if (arc.Level == nullptr) I_Error("Trying to serialize sector without a valid level"); + return SerializePointer(arc, key, value, defval, &arc.Level->sectors[0]); } template<> FSerializer &Serialize(FSerializer &arc, const char *key, player_t *&value, player_t **defval) @@ -1480,12 +1482,14 @@ template<> FSerializer &Serialize(FSerializer &arc, const char *key, player_t *& template<> FSerializer &Serialize(FSerializer &arc, const char *key, line_t *&value, line_t **defval) { - return SerializePointer(arc, key, value, defval, &level.lines[0]); + if (arc.Level == nullptr) I_Error("Trying to serialize linedef without a valid level"); + return SerializePointer(arc, key, value, defval, &arc.Level->lines[0]); } template<> FSerializer &Serialize(FSerializer &arc, const char *key, vertex_t *&value, vertex_t **defval) { - return SerializePointer(arc, key, value, defval, &level.vertexes[0]); + if (arc.Level == nullptr) I_Error("Trying to serialize verte without a valid level"); + return SerializePointer(arc, key, value, defval, &arc.Level->vertexes[0]); } //========================================================================== @@ -1968,13 +1972,13 @@ template<> FSerializer &Serialize(FSerializer &arc, const char *key, FStrifeDial } else if (val->IsUint()) { - if (val->GetUint() >= StrifeDialogues.Size()) + if (val->GetUint() >= arc.Level->StrifeDialogues.Size()) { node = nullptr; } else { - node = StrifeDialogues[val->GetUint()]; + node = arc.Level->StrifeDialogues[val->GetUint()]; } } else @@ -2128,6 +2132,65 @@ template<> FSerializer &Serialize(FSerializer &arc, const char *key, char *&pstr return arc; } +//========================================================================== +// +// This is a bit of a cheat because it never actually writes out the pointer. +// The rules for levels are that they must be self-contained. +// No level and no pbject that is part of a level may reference a different one. +// +// When writing, this merely checks if the rules are obeyed and if not errors out. +// When reading, it assumes that the object was properly written and restores +// the reference from the owning level +// +// The only exception are null pointers which are allowed +// +//========================================================================== + +template<> FSerializer &Serialize(FSerializer &arc, const char *key, FLevelLocals *&lev, FLevelLocals **def) +{ + if (arc.isWriting()) + { + if (!arc.w->inObject() || lev == nullptr) + { + arc.WriteKey(key); + if (lev == nullptr) + { + arc.w->Null(); + } + else + { + // This MUST be the currently serialized level, anything else will error out here as a sanity check. + if (arc.Level == nullptr || lev != arc.Level) + { + I_Error("Attempt to serialize invalid level reference"); + } + if (!arc.w->inObject()) + { + arc.w->Bool(true); // In the unlikely case this is used in an array, write a filler. + } + } + } + } + else + { + auto val = arc.r->FindKey(key); + if (val != nullptr) + { + assert(val->IsNull() || val->IsBool()); + if (val->IsNull()) + { + lev = nullptr; + } + else + { + lev = arc.Level; + } + } + else lev = arc.Level; + } + return arc; +} + //========================================================================== // // diff --git a/src/serializer.h b/src/serializer.h index 7f8af9b8b4..2957dbdc75 100644 --- a/src/serializer.h +++ b/src/serializer.h @@ -24,6 +24,7 @@ struct FDoorAnimation; class FSoundID; struct FPolyObj; union FRenderStyle; +struct FInterpolator; inline bool nullcmp(const void *buffer, size_t length) { @@ -65,6 +66,7 @@ class FSerializer public: FWriter *w = nullptr; FReader *r = nullptr; + FLevelLocals *Level; unsigned ArraySize(); void WriteKey(const char *key); @@ -72,6 +74,9 @@ public: public: + FSerializer(FLevelLocals *l) : Level(l) + {} + ~FSerializer() { mErrors = 0; // The destructor may not throw an exception so silence the error checker. @@ -198,6 +203,7 @@ FSerializer &Serialize(FSerializer &arc, const char *key, FString &sid, FString FSerializer &Serialize(FSerializer &arc, const char *key, NumericValue &sid, NumericValue *def); FSerializer &Serialize(FSerializer &arc, const char *key, ticcmd_t &sid, ticcmd_t *def); FSerializer &Serialize(FSerializer &arc, const char *key, usercmd_t &cmd, usercmd_t *def); +FSerializer &Serialize(FSerializer &arc, const char *key, FInterpolator &rs, FInterpolator *def); template FSerializer &Serialize(FSerializer &arc, const char *key, T *&value, T **) @@ -262,6 +268,7 @@ template<> FSerializer &Serialize(FSerializer &arc, const char *key, FString *&p template<> FSerializer &Serialize(FSerializer &arc, const char *key, FDoorAnimation *&pstr, FDoorAnimation **def); template<> FSerializer &Serialize(FSerializer &arc, const char *key, char *&pstr, char **def); template<> FSerializer &Serialize(FSerializer &arc, const char *key, FFont *&font, FFont **def); +template<> FSerializer &Serialize(FSerializer &arc, const char *key, FLevelLocals *&font, FLevelLocals **def); FSerializer &Serialize(FSerializer &arc, const char *key, FState *&state, FState **def, bool *retcode); template<> inline FSerializer &Serialize(FSerializer &arc, const char *key, FState *&state, FState **def) diff --git a/src/skins.h b/src/skins.h deleted file mode 100644 index 8ce1f99cb5..0000000000 --- a/src/skins.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef __SKINS_H__ -#define __SKINS_H__ - -#endif //__SKINS_H__ diff --git a/src/sound/i_music.cpp b/src/sound/i_music.cpp index f69116a15f..877c03e395 100644 --- a/src/sound/i_music.cpp +++ b/src/sound/i_music.cpp @@ -35,7 +35,6 @@ #ifndef _WIN32 #include #include -#include "mus2midi.h" #endif #include diff --git a/src/sound/i_sound.cpp b/src/sound/i_sound.cpp index a3587e3a57..de9c9a6a97 100644 --- a/src/sound/i_sound.cpp +++ b/src/sound/i_sound.cpp @@ -46,6 +46,8 @@ #include "i_music.h" #include "m_argv.h" #include "v_text.h" +#include "c_cvars.h" +#include "stats.h" EXTERN_CVAR (Float, snd_sfxvolume) CVAR (Int, snd_samplerate, 0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) diff --git a/src/sound/mididevices/music_fluidsynth_mididevice.cpp b/src/sound/mididevices/music_fluidsynth_mididevice.cpp index 9112e527ab..8314107df3 100644 --- a/src/sound/mididevices/music_fluidsynth_mididevice.cpp +++ b/src/sound/mididevices/music_fluidsynth_mididevice.cpp @@ -39,6 +39,7 @@ #include "v_text.h" #include "cmdlib.h" #include "i_soundfont.h" +#include "doomerrors.h" // MACROS ------------------------------------------------------------------ diff --git a/src/sound/mididevices/music_opl_mididevice.cpp b/src/sound/mididevices/music_opl_mididevice.cpp index f5a45ab233..a740548b37 100644 --- a/src/sound/mididevices/music_opl_mididevice.cpp +++ b/src/sound/mididevices/music_opl_mididevice.cpp @@ -38,12 +38,13 @@ #include "i_musicinterns.h" #include "w_wad.h" #include "v_text.h" -#include "i_system.h" +#include "doomerrors.h" #include "opl.h" // MACROS ------------------------------------------------------------------ #if defined(_DEBUG) && defined(_WIN32) && defined(_MSC_VER) +void I_DebugPrint(const char *cp); #define DEBUGOUT(m,c,s,t) \ { char foo[128]; mysnprintf(foo, countof(foo), m, c, s, t); I_DebugPrint(foo); } #else diff --git a/src/sound/mididevices/music_opnmidi_mididevice.cpp b/src/sound/mididevices/music_opnmidi_mididevice.cpp index d9f5d6124c..60a9e61675 100644 --- a/src/sound/mididevices/music_opnmidi_mididevice.cpp +++ b/src/sound/mididevices/music_opnmidi_mididevice.cpp @@ -36,7 +36,7 @@ #include "i_musicinterns.h" #include "w_wad.h" -#include "i_system.h" +#include "doomerrors.h" #include "opnmidi/opnmidi.h" #include "i_soundfont.h" diff --git a/src/sound/mididevices/music_timiditypp_mididevice.cpp b/src/sound/mididevices/music_timiditypp_mididevice.cpp index d7025dbcf2..381551d3a7 100644 --- a/src/sound/mididevices/music_timiditypp_mididevice.cpp +++ b/src/sound/mididevices/music_timiditypp_mididevice.cpp @@ -36,7 +36,7 @@ #include "i_musicinterns.h" #include "v_text.h" -#include "i_system.h" +#include "doomerrors.h" #include "timiditypp/timidity.h" #include "timiditypp/instrum.h" diff --git a/src/sound/mididevices/music_wildmidi_mididevice.cpp b/src/sound/mididevices/music_wildmidi_mididevice.cpp index ccb63ebf3f..2351100440 100644 --- a/src/sound/mididevices/music_wildmidi_mididevice.cpp +++ b/src/sound/mididevices/music_wildmidi_mididevice.cpp @@ -35,7 +35,7 @@ // HEADER FILES ------------------------------------------------------------ #include "i_musicinterns.h" -#include "i_system.h" +#include "doomerrors.h" // MACROS ------------------------------------------------------------------ diff --git a/src/sound/mididevices/music_win_mididevice.cpp b/src/sound/mididevices/music_win_mididevice.cpp index b6ddd46a27..e2605297d3 100644 --- a/src/sound/mididevices/music_win_mididevice.cpp +++ b/src/sound/mididevices/music_win_mididevice.cpp @@ -42,7 +42,7 @@ #include "templates.h" #include "doomdef.h" #include "m_swap.h" -#include "i_system.h" +#include "doomerrors.h" #ifndef __GNUC__ #include diff --git a/src/mus2midi.h b/src/sound/mus2midi.h similarity index 100% rename from src/mus2midi.h rename to src/sound/mus2midi.h diff --git a/src/sound/musicformats/music_dumb.cpp b/src/sound/musicformats/music_dumb.cpp index 94c7199c64..5ff82f0de8 100644 --- a/src/sound/musicformats/music_dumb.cpp +++ b/src/sound/musicformats/music_dumb.cpp @@ -37,7 +37,7 @@ #include #include "i_musicinterns.h" -#include "i_system.h" + #undef CDECL // w32api's windef.h defines this #include "../dumb/include/dumb.h" diff --git a/src/sound/oalsound.cpp b/src/sound/oalsound.cpp index f72f1c750c..2d23facebd 100644 --- a/src/sound/oalsound.cpp +++ b/src/sound/oalsound.cpp @@ -44,6 +44,7 @@ #include "i_music.h" #include "i_musicinterns.h" #include "cmdlib.h" +#include "menu/menu.h" FModule OpenALModule{"OpenAL"}; diff --git a/src/sound/oalsound.h b/src/sound/oalsound.h index a2a7869cea..0cf72a1339 100644 --- a/src/sound/oalsound.h +++ b/src/sound/oalsound.h @@ -9,7 +9,6 @@ #include "i_sound.h" #include "s_sound.h" -#include "menu/menu.h" #ifndef NO_OPENAL diff --git a/src/sound/timidity/common.cpp b/src/sound/timidity/common.cpp index 02d10c7e8a..448075f391 100644 --- a/src/sound/timidity/common.cpp +++ b/src/sound/timidity/common.cpp @@ -24,7 +24,7 @@ #include #include #include "timidity.h" -#include "i_system.h" +#include "doomerrors.h" namespace Timidity { diff --git a/src/sound/timidity/timidity.cpp b/src/sound/timidity/timidity.cpp index e657466c03..b100a1e5d0 100644 --- a/src/sound/timidity/timidity.cpp +++ b/src/sound/timidity/timidity.cpp @@ -28,6 +28,7 @@ #include "cmdlib.h" #include "c_cvars.h" #include "c_dispatch.h" +#include "doomerrors.h" #include "i_system.h" #include "files.h" #include "w_wad.h" diff --git a/src/st_stuff.cpp b/src/st_stuff.cpp index fe96d62655..ffa79fe01b 100644 --- a/src/st_stuff.cpp +++ b/src/st_stuff.cpp @@ -489,7 +489,7 @@ static bool Cht_ChangeStartSpot (cheatseq_t *cheat) { char cmd[64]; - mysnprintf (cmd, countof(cmd), "changemap %s %c", level.MapName.GetChars(), cheat->Args[0]); + mysnprintf (cmd, countof(cmd), "changemap %s %c", primaryLevel->MapName.GetChars(), cheat->Args[0]); C_DoCommand (cmd); return true; } diff --git a/src/statistics.cpp b/src/statistics.cpp index 477ba72ad1..db17201302 100644 --- a/src/statistics.cpp +++ b/src/statistics.cpp @@ -413,7 +413,7 @@ static void StoreLevelStats(FLevelLocals *Level) // Check for living monsters. On some maps it can happen // that the counter misses some. - TThinkerIterator it; + auto it = Level->GetThinkerIterator(); AActor *ac; int mc = 0; @@ -577,7 +577,7 @@ FString GetStatString() CCMD(printstats) { - StoreLevelStats(&level); // Refresh the current level's results. + StoreLevelStats(primaryLevel); // Refresh the current level's results. Printf("%s", GetStatString().GetChars()); } @@ -596,6 +596,6 @@ CCMD(finishgame) ADD_STAT(statistics) { - StoreLevelStats(&level); // Refresh the current level's results. + StoreLevelStats(primaryLevel); // Refresh the current level's results. return GetStatString(); } diff --git a/src/tagitem.h b/src/tagitem.h deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/cmdlib.cpp b/src/utility/cmdlib.cpp similarity index 99% rename from src/cmdlib.cpp rename to src/utility/cmdlib.cpp index b313f56914..2ed0eefe93 100644 --- a/src/cmdlib.cpp +++ b/src/utility/cmdlib.cpp @@ -26,6 +26,7 @@ #include #include #else +#include #include #include #include @@ -35,7 +36,7 @@ #endif #include "doomtype.h" #include "cmdlib.h" -#include "i_system.h" +#include "doomerrors.h" #include "v_text.h" #include "sc_man.h" diff --git a/src/cmdlib.h b/src/utility/cmdlib.h similarity index 100% rename from src/cmdlib.h rename to src/utility/cmdlib.h diff --git a/src/colormatcher.cpp b/src/utility/colormatcher.cpp similarity index 100% rename from src/colormatcher.cpp rename to src/utility/colormatcher.cpp diff --git a/src/colormatcher.h b/src/utility/colormatcher.h similarity index 100% rename from src/colormatcher.h rename to src/utility/colormatcher.h diff --git a/src/configfile.cpp b/src/utility/configfile.cpp similarity index 100% rename from src/configfile.cpp rename to src/utility/configfile.cpp diff --git a/src/configfile.h b/src/utility/configfile.h similarity index 100% rename from src/configfile.h rename to src/utility/configfile.h diff --git a/src/ctpl.h b/src/utility/ctpl.h similarity index 100% rename from src/ctpl.h rename to src/utility/ctpl.h diff --git a/src/earcut.hpp b/src/utility/earcut.hpp similarity index 100% rename from src/earcut.hpp rename to src/utility/earcut.hpp diff --git a/src/files.cpp b/src/utility/files.cpp similarity index 100% rename from src/files.cpp rename to src/utility/files.cpp diff --git a/src/files.h b/src/utility/files.h similarity index 100% rename from src/files.h rename to src/utility/files.h diff --git a/src/files_decompress.cpp b/src/utility/files_decompress.cpp similarity index 99% rename from src/files_decompress.cpp rename to src/utility/files_decompress.cpp index b6ba8fbcb3..4ff30f7915 100644 --- a/src/files_decompress.cpp +++ b/src/utility/files_decompress.cpp @@ -39,7 +39,7 @@ #include #include "files.h" -#include "i_system.h" +#include "doomerrors.h" #include "templates.h" #include "m_misc.h" diff --git a/src/i_module.cpp b/src/utility/i_module.cpp similarity index 100% rename from src/i_module.cpp rename to src/utility/i_module.cpp diff --git a/src/i_module.h b/src/utility/i_module.h similarity index 100% rename from src/i_module.h rename to src/utility/i_module.h diff --git a/src/i_time.cpp b/src/utility/i_time.cpp similarity index 100% rename from src/i_time.cpp rename to src/utility/i_time.cpp diff --git a/src/i_time.h b/src/utility/i_time.h similarity index 100% rename from src/i_time.h rename to src/utility/i_time.h diff --git a/src/lists.h b/src/utility/lists.h similarity index 100% rename from src/lists.h rename to src/utility/lists.h diff --git a/src/m_alloc.cpp b/src/utility/m_alloc.cpp similarity index 99% rename from src/m_alloc.cpp rename to src/utility/m_alloc.cpp index d08913b85b..99f1b0657f 100644 --- a/src/m_alloc.cpp +++ b/src/utility/m_alloc.cpp @@ -44,7 +44,7 @@ #include #endif -#include "i_system.h" +#include "doomerrors.h" #include "dobject.h" #ifndef _MSC_VER diff --git a/src/m_alloc.h b/src/utility/m_alloc.h similarity index 100% rename from src/m_alloc.h rename to src/utility/m_alloc.h diff --git a/src/m_argv.cpp b/src/utility/m_argv.cpp similarity index 99% rename from src/m_argv.cpp rename to src/utility/m_argv.cpp index 0a2744e5d2..ed2b08f1ca 100644 --- a/src/m_argv.cpp +++ b/src/utility/m_argv.cpp @@ -34,6 +34,7 @@ #include #include "m_argv.h" +#include "i_system.h" //=========================================================================== // diff --git a/src/m_argv.h b/src/utility/m_argv.h similarity index 100% rename from src/m_argv.h rename to src/utility/m_argv.h diff --git a/src/m_bbox.cpp b/src/utility/m_bbox.cpp similarity index 100% rename from src/m_bbox.cpp rename to src/utility/m_bbox.cpp diff --git a/src/m_bbox.h b/src/utility/m_bbox.h similarity index 100% rename from src/m_bbox.h rename to src/utility/m_bbox.h diff --git a/src/m_crc32.h b/src/utility/m_crc32.h similarity index 100% rename from src/m_crc32.h rename to src/utility/m_crc32.h diff --git a/src/m_fixed.h b/src/utility/m_fixed.h similarity index 100% rename from src/m_fixed.h rename to src/utility/m_fixed.h diff --git a/src/m_png.cpp b/src/utility/m_png.cpp similarity index 99% rename from src/m_png.cpp rename to src/utility/m_png.cpp index 06cf4ce2e7..df2ec58601 100644 --- a/src/m_png.cpp +++ b/src/utility/m_png.cpp @@ -44,7 +44,6 @@ #include "m_swap.h" #include "c_cvars.h" #include "r_defs.h" -#include "v_video.h" #include "m_png.h" // MACROS ------------------------------------------------------------------ diff --git a/src/m_png.h b/src/utility/m_png.h similarity index 100% rename from src/m_png.h rename to src/utility/m_png.h diff --git a/src/m_random.cpp b/src/utility/m_random.cpp similarity index 99% rename from src/m_random.cpp rename to src/utility/m_random.cpp index 5b77bccaf3..9a765b8515 100644 --- a/src/m_random.cpp +++ b/src/utility/m_random.cpp @@ -62,7 +62,6 @@ #include "doomstat.h" #include "m_random.h" #include "serializer.h" -#include "b_bot.h" #include "m_crc32.h" #include "c_dispatch.h" diff --git a/src/m_random.h b/src/utility/m_random.h similarity index 100% rename from src/m_random.h rename to src/utility/m_random.h diff --git a/src/m_swap.h b/src/utility/m_swap.h similarity index 100% rename from src/m_swap.h rename to src/utility/m_swap.h diff --git a/src/math/asin.c b/src/utility/math/asin.c similarity index 100% rename from src/math/asin.c rename to src/utility/math/asin.c diff --git a/src/math/atan.c b/src/utility/math/atan.c similarity index 100% rename from src/math/atan.c rename to src/utility/math/atan.c diff --git a/src/math/cmath.h b/src/utility/math/cmath.h similarity index 100% rename from src/math/cmath.h rename to src/utility/math/cmath.h diff --git a/src/math/const.c b/src/utility/math/const.c similarity index 100% rename from src/math/const.c rename to src/utility/math/const.c diff --git a/src/math/cosh.c b/src/utility/math/cosh.c similarity index 100% rename from src/math/cosh.c rename to src/utility/math/cosh.c diff --git a/src/math/exp.c b/src/utility/math/exp.c similarity index 100% rename from src/math/exp.c rename to src/utility/math/exp.c diff --git a/src/math/fastsin.cpp b/src/utility/math/fastsin.cpp similarity index 100% rename from src/math/fastsin.cpp rename to src/utility/math/fastsin.cpp diff --git a/src/math/isnan.c b/src/utility/math/isnan.c similarity index 100% rename from src/math/isnan.c rename to src/utility/math/isnan.c diff --git a/src/math/log.c b/src/utility/math/log.c similarity index 100% rename from src/math/log.c rename to src/utility/math/log.c diff --git a/src/math/log10.c b/src/utility/math/log10.c similarity index 100% rename from src/math/log10.c rename to src/utility/math/log10.c diff --git a/src/math/mconf.h b/src/utility/math/mconf.h similarity index 100% rename from src/math/mconf.h rename to src/utility/math/mconf.h diff --git a/src/math/mtherr.c b/src/utility/math/mtherr.c similarity index 100% rename from src/math/mtherr.c rename to src/utility/math/mtherr.c diff --git a/src/math/polevl.c b/src/utility/math/polevl.c similarity index 100% rename from src/math/polevl.c rename to src/utility/math/polevl.c diff --git a/src/math/pow.c b/src/utility/math/pow.c similarity index 100% rename from src/math/pow.c rename to src/utility/math/pow.c diff --git a/src/math/powi.c b/src/utility/math/powi.c similarity index 100% rename from src/math/powi.c rename to src/utility/math/powi.c diff --git a/src/math/readme.txt b/src/utility/math/readme.txt similarity index 100% rename from src/math/readme.txt rename to src/utility/math/readme.txt diff --git a/src/math/sin.c b/src/utility/math/sin.c similarity index 100% rename from src/math/sin.c rename to src/utility/math/sin.c diff --git a/src/math/sinh.c b/src/utility/math/sinh.c similarity index 100% rename from src/math/sinh.c rename to src/utility/math/sinh.c diff --git a/src/math/sqrt.c b/src/utility/math/sqrt.c similarity index 100% rename from src/math/sqrt.c rename to src/utility/math/sqrt.c diff --git a/src/math/tan.c b/src/utility/math/tan.c similarity index 100% rename from src/math/tan.c rename to src/utility/math/tan.c diff --git a/src/math/tanh.c b/src/utility/math/tanh.c similarity index 100% rename from src/math/tanh.c rename to src/utility/math/tanh.c diff --git a/src/md5.cpp b/src/utility/md5.cpp similarity index 100% rename from src/md5.cpp rename to src/utility/md5.cpp diff --git a/src/md5.h b/src/utility/md5.h similarity index 100% rename from src/md5.h rename to src/utility/md5.h diff --git a/src/memarena.cpp b/src/utility/memarena.cpp similarity index 100% rename from src/memarena.cpp rename to src/utility/memarena.cpp diff --git a/src/memarena.h b/src/utility/memarena.h similarity index 100% rename from src/memarena.h rename to src/utility/memarena.h diff --git a/src/name.cpp b/src/utility/name.cpp similarity index 100% rename from src/name.cpp rename to src/utility/name.cpp diff --git a/src/name.h b/src/utility/name.h similarity index 100% rename from src/name.h rename to src/utility/name.h diff --git a/src/namedef.h b/src/utility/namedef.h similarity index 99% rename from src/namedef.h rename to src/utility/namedef.h index 6d85e82294..f47720066c 100644 --- a/src/namedef.h +++ b/src/utility/namedef.h @@ -86,6 +86,8 @@ xx(PointPuller) xx(UpperStackLookOnly) xx(LowerStackLookOnly) +xx(StackPoint) +xx(SkyCamCompat) xx(BasicArmorBonus) xx(BasicArmorPickup) @@ -1073,3 +1075,7 @@ xx(lightflags) xx(lighttype) xx(InternalDynamicLight) xx(_a_chase_default) +xx(MapMarker) +xx(Spawn2) +xx(LevelLocals) +xx(Level) diff --git a/src/nodebuild.cpp b/src/utility/nodebuilder/nodebuild.cpp similarity index 96% rename from src/nodebuild.cpp rename to src/utility/nodebuilder/nodebuild.cpp index a352a8f0ab..8955060ff4 100644 --- a/src/nodebuild.cpp +++ b/src/utility/nodebuilder/nodebuild.cpp @@ -54,17 +54,17 @@ const int AAPreference = 16; #define D(x) do{}while(0) #endif -FNodeBuilder::FNodeBuilder(FLevel &level) -: Level(level), GLNodes(false), SegsStuffed(0) +FNodeBuilder::FNodeBuilder(FLevel &lev) +: Level(lev), GLNodes(false), SegsStuffed(0) { VertexMap = NULL; OldVertexTable = NULL; } -FNodeBuilder::FNodeBuilder (FLevel &level, +FNodeBuilder::FNodeBuilder (FLevel &lev, TArray &polyspots, TArray &anchors, bool makeGLNodes) - : Level(level), GLNodes(makeGLNodes), SegsStuffed(0) + : Level(lev), GLNodes(makeGLNodes), SegsStuffed(0) { VertexMap = new FVertexMap (*this, Level.MinX, Level.MinY, Level.MaxX, Level.MaxY); FindUsedVertices (Level.Vertices, Level.NumVertices); @@ -117,8 +117,8 @@ void FNodeBuilder::BuildTree () { fixed_t bbox[4]; - HackSeg = DWORD_MAX; - HackMate = DWORD_MAX; + HackSeg = UINT_MAX; + HackMate = UINT_MAX; CreateNode (0, Segs.Size(), bbox); CreateSubsectorsForReal (); } @@ -171,7 +171,7 @@ int FNodeBuilder::CreateSubsector (uint32_t set, fixed_t bbox[4]) D(Printf (PRINT_LOG, "Subsector from set %d\n", set)); - assert (set != DWORD_MAX); + assert (set != UINT_MAX); // We cannot actually create the subsector now because the node building // process might split a seg in this subsector (because all partner segs @@ -181,7 +181,7 @@ int FNodeBuilder::CreateSubsector (uint32_t set, fixed_t bbox[4]) ssnum = (int)SubsectorSets.Push (set); count = 0; - while (set != DWORD_MAX) + while (set != UINT_MAX) { AddSegToBBox (bbox, &Segs[set]); set = Segs[set].next; @@ -211,7 +211,7 @@ void FNodeBuilder::CreateSubsectorsForReal () uint32_t set = SubsectorSets[i]; uint32_t firstline = (uint32_t)SegList.Size(); - while (set != DWORD_MAX) + while (set != UINT_MAX) { USegPtr ptr; @@ -349,9 +349,9 @@ bool FNodeBuilder::CheckSubsector (uint32_t set, node_t &node, uint32_t &splitse } } seg = Segs[seg].next; - } while (seg != DWORD_MAX); + } while (seg != UINT_MAX); - if (seg == DWORD_MAX) + if (seg == UINT_MAX) { // It's a valid non-GL subsector, and probably a valid GL subsector too. if (GLNodes) { @@ -361,13 +361,13 @@ bool FNodeBuilder::CheckSubsector (uint32_t set, node_t &node, uint32_t &splitse } D(Printf(PRINT_LOG, "Need to synthesize a splitter for set %d on seg %d\n", set, seg)); - splitseg = DWORD_MAX; + splitseg = UINT_MAX; // This is a very simple and cheap "fix" for subsectors with segs // from multiple sectors, and it seems ZenNode does something // similar. It is the only technique I could find that makes the // "transparent water" in nb_bmtrk.wad work properly. - return ShoveSegBehind (set, node, seg, DWORD_MAX); + return ShoveSegBehind (set, node, seg, UINT_MAX); } // When creating GL nodes, we need to check for segs with the same start and @@ -378,7 +378,7 @@ bool FNodeBuilder::CheckSubsectorOverlappingSegs (uint32_t set, node_t &node, ui int v1, v2; uint32_t seg1, seg2; - for (seg1 = set; seg1 != DWORD_MAX; seg1 = Segs[seg1].next) + for (seg1 = set; seg1 != UINT_MAX; seg1 = Segs[seg1].next) { if (Segs[seg1].linedef == -1) { // Do not check minisegs. @@ -386,7 +386,7 @@ bool FNodeBuilder::CheckSubsectorOverlappingSegs (uint32_t set, node_t &node, ui } v1 = Segs[seg1].v1; v2 = Segs[seg1].v2; - for (seg2 = Segs[seg1].next; seg2 != DWORD_MAX; seg2 = Segs[seg2].next) + for (seg2 = Segs[seg1].next; seg2 != UINT_MAX; seg2 = Segs[seg2].next) { if (Segs[seg2].v1 == v1 && Segs[seg2].v2 == v2) { @@ -395,7 +395,7 @@ bool FNodeBuilder::CheckSubsectorOverlappingSegs (uint32_t set, node_t &node, ui swapvalues (seg1, seg2); } D(Printf(PRINT_LOG, "Need to synthesize a splitter for set %d on seg %d (ov)\n", set, seg2)); - splitseg = DWORD_MAX; + splitseg = UINT_MAX; return ShoveSegBehind (set, node, seg2, seg1); } @@ -410,7 +410,7 @@ bool FNodeBuilder::CheckSubsectorOverlappingSegs (uint32_t set, node_t &node, ui // set, all the other segs will be in front of the splitter. Since // the splitter is formed from this seg, the back of the splitter // will have a one-dimensional subsector. SplitSegs() will add one -// or two new minisegs to close it: If mate is DWORD_MAX, then a +// or two new minisegs to close it: If mate is UINT_MAX, then a // new seg is created to replace this one on the front of the // splitter. Otherwise, mate takes its place. In either case, the // seg in front of the splitter is partnered with a new miniseg on @@ -447,7 +447,7 @@ int FNodeBuilder::SelectSplitter (uint32_t set, node_t &node, uint32_t &splitseg bool nosplitters = false; bestvalue = 0; - bestseg = DWORD_MAX; + bestseg = UINT_MAX; seg = set; stepleft = 0; @@ -456,7 +456,7 @@ int FNodeBuilder::SelectSplitter (uint32_t set, node_t &node, uint32_t &splitseg D(Printf (PRINT_LOG, "Processing set %d\n", set)); - while (seg != DWORD_MAX) + while (seg != UINT_MAX) { FPrivSeg *pseg = &Segs[seg]; @@ -495,7 +495,7 @@ int FNodeBuilder::SelectSplitter (uint32_t set, node_t &node, uint32_t &splitseg seg = pseg->next; } - if (bestseg == DWORD_MAX) + if (bestseg == UINT_MAX) { // No lines split any others into two sets, so this is a convex region. D(Printf (PRINT_LOG, "set %d, step %d, nosplit %d has no good splitter (%d)\n", set, step, nosplit, nosplitters)); return nosplitters ? -1 : 0; @@ -532,7 +532,7 @@ int FNodeBuilder::Heuristic (node_t &node, uint32_t set, bool honorNoSplit) Touched.Clear (); Colinear.Clear (); - while (i != DWORD_MAX) + while (i != UINT_MAX) { const FPrivSeg *test = &Segs[i]; @@ -756,13 +756,13 @@ void FNodeBuilder::SplitSegs (uint32_t set, node_t &node, uint32_t splitseg, uin { unsigned int _count0 = 0; unsigned int _count1 = 0; - outset0 = DWORD_MAX; - outset1 = DWORD_MAX; + outset0 = UINT_MAX; + outset1 = UINT_MAX; Events.DeleteAll (); SplitSharers.Clear (); - while (set != DWORD_MAX) + while (set != UINT_MAX) { bool hack; FPrivSeg *seg = &Segs[set]; @@ -772,7 +772,7 @@ void FNodeBuilder::SplitSegs (uint32_t set, node_t &node, uint32_t splitseg, uin if (HackSeg == set) { - HackSeg = DWORD_MAX; + HackSeg = UINT_MAX; side = 1; sidev[0] = sidev[1] = 0; hack = true; @@ -822,7 +822,7 @@ void FNodeBuilder::SplitSegs (uint32_t set, node_t &node, uint32_t splitseg, uin _count1++; // Also split the seg on the back side - if (Segs[set].partner != DWORD_MAX) + if (Segs[set].partner != UINT_MAX) { int partner1 = Segs[set].partner; int partner2 = SplitSeg(partner1, vertnum, sidev[1]); @@ -884,8 +884,8 @@ void FNodeBuilder::SplitSegs (uint32_t set, node_t &node, uint32_t splitseg, uin { uint32_t newback, newfront; - newback = AddMiniseg (seg->v2, seg->v1, DWORD_MAX, set, splitseg); - if (HackMate == DWORD_MAX) + newback = AddMiniseg (seg->v2, seg->v1, UINT_MAX, set, splitseg); + if (HackMate == UINT_MAX) { newfront = AddMiniseg (Segs[set].v1, Segs[set].v2, newback, set, splitseg); Segs[newfront].next = outset0; @@ -996,7 +996,7 @@ void FNodeBuilder::RemoveSegFromVert1 (uint32_t segnum, int vertnum) uint32_t prev, curr; prev = 0; curr = v->segs; - while (curr != DWORD_MAX && curr != segnum) + while (curr != UINT_MAX && curr != segnum) { prev = curr; curr = Segs[curr].nextforvert; @@ -1021,7 +1021,7 @@ void FNodeBuilder::RemoveSegFromVert2 (uint32_t segnum, int vertnum) uint32_t prev, curr; prev = 0; curr = v->segs2; - while (curr != DWORD_MAX && curr != segnum) + while (curr != UINT_MAX && curr != segnum) { prev = curr; curr = Segs[curr].nextforvert2; @@ -1059,7 +1059,7 @@ double FNodeBuilder::InterceptVector (const node_t &splitter, const FPrivSeg &se void FNodeBuilder::PrintSet (int l, uint32_t set) { Printf (PRINT_LOG, "set %d:\n", l); - for (; set != DWORD_MAX; set = Segs[set].next) + for (; set != UINT_MAX; set = Segs[set].next) { Printf (PRINT_LOG, "\t%u(%d)%c%d(%d,%d)-%d(%d,%d)\n", set, Segs[set].frontsector->sectornum, Segs[set].linedef == -1 ? '+' : ':', diff --git a/src/nodebuild.h b/src/utility/nodebuilder/nodebuild.h similarity index 99% rename from src/nodebuild.h rename to src/utility/nodebuilder/nodebuild.h index 8a8f133e04..0618f72477 100644 --- a/src/nodebuild.h +++ b/src/utility/nodebuilder/nodebuild.h @@ -228,13 +228,13 @@ public: fixed_t x, y; }; - FNodeBuilder (FLevel &level); - FNodeBuilder (FLevel &level, + FNodeBuilder (FLevel &lev); + FNodeBuilder (FLevel &lev, TArray &polyspots, TArray &anchors, bool makeGLNodes); ~FNodeBuilder (); - void Extract(FLevelLocals &level); + void Extract(FLevelLocals &lev); const int *GetOldVertexTable(); // These are used for building sub-BSP trees for polyobjects. diff --git a/src/nodebuild_classify_nosse2.cpp b/src/utility/nodebuilder/nodebuild_classify_nosse2.cpp similarity index 100% rename from src/nodebuild_classify_nosse2.cpp rename to src/utility/nodebuilder/nodebuild_classify_nosse2.cpp diff --git a/src/nodebuild_events.cpp b/src/utility/nodebuilder/nodebuild_events.cpp similarity index 100% rename from src/nodebuild_events.cpp rename to src/utility/nodebuilder/nodebuild_events.cpp diff --git a/src/nodebuild_extract.cpp b/src/utility/nodebuilder/nodebuild_extract.cpp similarity index 97% rename from src/nodebuild_extract.cpp rename to src/utility/nodebuilder/nodebuild_extract.cpp index 4d7aaf586e..9714a52c64 100644 --- a/src/nodebuild_extract.cpp +++ b/src/utility/nodebuilder/nodebuild_extract.cpp @@ -52,11 +52,11 @@ #undef DD #endif -void FNodeBuilder::Extract (FLevelLocals &level) +void FNodeBuilder::Extract (FLevelLocals &theLevel) { int i; - auto &outVerts = level.vertexes; + auto &outVerts = theLevel.vertexes; int vertCount = Vertices.Size (); outVerts.Alloc(vertCount); @@ -65,12 +65,12 @@ void FNodeBuilder::Extract (FLevelLocals &level) outVerts[i].set(Vertices[i].x, Vertices[i].y); } - auto &outSubs = level.subsectors; + auto &outSubs = theLevel.subsectors; auto subCount = Subsectors.Size(); outSubs.Alloc(subCount); memset(&outSubs[0], 0, subCount * sizeof(subsector_t)); - auto &outNodes = level.nodes; + auto &outNodes = theLevel.nodes; auto nodeCount = Nodes.Size (); outNodes.Alloc(nodeCount); @@ -103,7 +103,7 @@ void FNodeBuilder::Extract (FLevelLocals &level) } } - auto &outSegs = level.segs; + auto &outSegs = theLevel.segs; if (GLNodes) { TArray segs (Segs.Size()*5/4); @@ -122,10 +122,10 @@ void FNodeBuilder::Extract (FLevelLocals &level) { outSegs[i] = *(seg_t *)&segs[i]; - if (segs[i].Partner != DWORD_MAX) + if (segs[i].Partner != UINT_MAX) { const uint32_t storedseg = Segs[segs[i].Partner].storedseg; - outSegs[i].PartnerSeg = DWORD_MAX == storedseg ? nullptr : &outSegs[storedseg]; + outSegs[i].PartnerSeg = UINT_MAX == storedseg ? nullptr : &outSegs[storedseg]; } else { @@ -330,7 +330,7 @@ int FNodeBuilder::CloseSubsector (TArray &segs, int subsector, vertex_t { angle_t bestdiff = ANGLE_MAX; FPrivSeg *bestseg = NULL; - uint32_t bestj = DWORD_MAX; + uint32_t bestj = UINT_MAX; j = first; do { @@ -526,6 +526,6 @@ void FNodeBuilder::PushConnectingGLSeg (int subsector, TArray &segs, ve newseg.frontsector = NULL; newseg.linedef = NULL; newseg.sidedef = NULL; - newseg.Partner = DWORD_MAX; + newseg.Partner = UINT_MAX; segs.Push (newseg); } diff --git a/src/nodebuild_gl.cpp b/src/utility/nodebuilder/nodebuild_gl.cpp similarity index 93% rename from src/nodebuild_gl.cpp rename to src/utility/nodebuilder/nodebuild_gl.cpp index db9d716ac0..d2b987e048 100644 --- a/src/nodebuild_gl.cpp +++ b/src/utility/nodebuilder/nodebuild_gl.cpp @@ -56,7 +56,7 @@ double FNodeBuilder::AddIntersection (const node_t &node, int vertex) { static const FEventInfo defaultInfo = { - -1, DWORD_MAX + -1, UINT_MAX }; // Calculate signed distance of intersection vertex from start of splitter. @@ -142,7 +142,7 @@ void FNodeBuilder::FixSplitSharers (const node_t &node) Segs[seg].next = newseg; uint32_t partner = Segs[seg].partner; - if (partner != DWORD_MAX) + if (partner != UINT_MAX) { int endpartner = SplitSeg (partner, event->Info.Vertex, 1); @@ -184,13 +184,13 @@ void FNodeBuilder::AddMinisegs (const node_t &node, uint32_t splitseg, uint32_t // are unclosed, but at least we won't be needlessly creating subsectors in void space. // Unclosed subsectors can be closed trivially once the BSP tree is complete. - if ((fseg1 = CheckLoopStart (node.dx, node.dy, prev->Info.Vertex, event->Info.Vertex)) != DWORD_MAX && - (bseg1 = CheckLoopStart (-node.dx, -node.dy, event->Info.Vertex, prev->Info.Vertex)) != DWORD_MAX && - (fseg2 = CheckLoopEnd (node.dx, node.dy, event->Info.Vertex)) != DWORD_MAX && - (bseg2 = CheckLoopEnd (-node.dx, -node.dy, prev->Info.Vertex)) != DWORD_MAX) + if ((fseg1 = CheckLoopStart (node.dx, node.dy, prev->Info.Vertex, event->Info.Vertex)) != UINT_MAX && + (bseg1 = CheckLoopStart (-node.dx, -node.dy, event->Info.Vertex, prev->Info.Vertex)) != UINT_MAX && + (fseg2 = CheckLoopEnd (node.dx, node.dy, event->Info.Vertex)) != UINT_MAX && + (bseg2 = CheckLoopEnd (-node.dx, -node.dy, prev->Info.Vertex)) != UINT_MAX) { // Add miniseg on the front side - fnseg = AddMiniseg (prev->Info.Vertex, event->Info.Vertex, DWORD_MAX, fseg1, splitseg); + fnseg = AddMiniseg (prev->Info.Vertex, event->Info.Vertex, UINT_MAX, fseg1, splitseg); Segs[fnseg].next = fset; fset = fnseg; @@ -243,14 +243,14 @@ uint32_t FNodeBuilder::AddMiniseg (int v1, int v2, uint32_t partner, uint32_t se newseg.sidedef = NO_SIDE; newseg.linedef = -1; newseg.loopnum = 0; - newseg.next = DWORD_MAX; + newseg.next = UINT_MAX; newseg.planefront = true; newseg.hashnext = NULL; - newseg.storedseg = DWORD_MAX; + newseg.storedseg = UINT_MAX; newseg.frontsector = NULL; newseg.backsector = NULL; - if (splitseg != DWORD_MAX) + if (splitseg != UINT_MAX) { newseg.planenum = Segs[splitseg].planenum; } @@ -264,16 +264,16 @@ uint32_t FNodeBuilder::AddMiniseg (int v1, int v2, uint32_t partner, uint32_t se newseg.nextforvert = Vertices[v1].segs; newseg.nextforvert2 = Vertices[v2].segs2; newseg.next = seg->next; - if (partner != DWORD_MAX) + if (partner != UINT_MAX) { newseg.partner = partner; } else { - newseg.partner = DWORD_MAX; + newseg.partner = UINT_MAX; } nseg = Segs.Push (newseg); - if (newseg.partner != DWORD_MAX) + if (newseg.partner != UINT_MAX) { Segs[partner].partner = nseg; } @@ -295,8 +295,8 @@ uint32_t FNodeBuilder::CheckLoopStart (fixed_t dx, fixed_t dy, int vertex, int v // to the splitter. segnum = v->segs2; bestang = ANGLE_MAX; - bestseg = DWORD_MAX; - while (segnum != DWORD_MAX) + bestseg = UINT_MAX; + while (segnum != UINT_MAX) { FPrivSeg *seg = &Segs[segnum]; angle_t segAngle = PointToAngle (Vertices[seg->v1].x - v->x, Vertices[seg->v1].y - v->y); @@ -317,25 +317,25 @@ uint32_t FNodeBuilder::CheckLoopStart (fixed_t dx, fixed_t dy, int vertex, int v } segnum = seg->nextforvert2; } - if (bestseg == DWORD_MAX) + if (bestseg == UINT_MAX) { - return DWORD_MAX; + return UINT_MAX; } // Now make sure there are no segs starting at this vertex that form // an even smaller angle to the splitter. segnum = v->segs; - while (segnum != DWORD_MAX) + while (segnum != UINT_MAX) { FPrivSeg *seg = &Segs[segnum]; if (seg->v2 == vertex2) { - return DWORD_MAX; + return UINT_MAX; } angle_t segAngle = PointToAngle (Vertices[seg->v2].x - v->x, Vertices[seg->v2].y - v->y); angle_t diff = splitAngle - segAngle; if (diff < bestang && seg->partner != bestseg) { - return DWORD_MAX; + return UINT_MAX; } segnum = seg->nextforvert; } @@ -354,8 +354,8 @@ uint32_t FNodeBuilder::CheckLoopEnd (fixed_t dx, fixed_t dy, int vertex) // to the splitter. segnum = v->segs; bestang = ANGLE_MAX; - bestseg = DWORD_MAX; - while (segnum != DWORD_MAX) + bestseg = UINT_MAX; + while (segnum != UINT_MAX) { FPrivSeg *seg = &Segs[segnum]; angle_t segAngle = PointToAngle (Vertices[seg->v2].x - v->x, Vertices[seg->v2].y - v->y); @@ -376,21 +376,21 @@ uint32_t FNodeBuilder::CheckLoopEnd (fixed_t dx, fixed_t dy, int vertex) } segnum = seg->nextforvert; } - if (bestseg == DWORD_MAX) + if (bestseg == UINT_MAX) { - return DWORD_MAX; + return UINT_MAX; } // Now make sure there are no segs ending at this vertex that form // an even smaller angle to the splitter. segnum = v->segs2; - while (segnum != DWORD_MAX) + while (segnum != UINT_MAX) { FPrivSeg *seg = &Segs[segnum]; angle_t segAngle = PointToAngle (Vertices[seg->v1].x - v->x, Vertices[seg->v1].y - v->y); angle_t diff = segAngle - splitAngle; if (diff < bestang && seg->partner != bestseg) { - return DWORD_MAX; + return UINT_MAX; } segnum = seg->nextforvert2; } diff --git a/src/nodebuild_utility.cpp b/src/utility/nodebuilder/nodebuild_utility.cpp similarity index 96% rename from src/nodebuild_utility.cpp rename to src/utility/nodebuilder/nodebuild_utility.cpp index a6e724ed46..ffd5f61e8c 100644 --- a/src/nodebuild_utility.cpp +++ b/src/utility/nodebuilder/nodebuild_utility.cpp @@ -44,7 +44,7 @@ #include #include "nodebuild.h" -#include "i_system.h" + #include "po_man.h" #include "g_levellocals.h" @@ -152,13 +152,13 @@ int FNodeBuilder::CreateSeg (int linenum, int sidenum) FPrivSeg seg; int segnum; - seg.next = DWORD_MAX; + seg.next = UINT_MAX; seg.loopnum = 0; - seg.partner = DWORD_MAX; + seg.partner = UINT_MAX; seg.hashnext = NULL; seg.planefront = false; - seg.planenum = DWORD_MAX; - seg.storedseg = DWORD_MAX; + seg.planenum = UINT_MAX; + seg.storedseg = UINT_MAX; if (sidenum == 0) { // front @@ -202,13 +202,13 @@ void FNodeBuilder::AddSegs(seg_t *segs, int numsegs) FPrivVert vert; int segnum; - seg.next = DWORD_MAX; + seg.next = UINT_MAX; seg.loopnum = 0; - seg.partner = DWORD_MAX; + seg.partner = UINT_MAX; seg.hashnext = NULL; seg.planefront = false; - seg.planenum = DWORD_MAX; - seg.storedseg = DWORD_MAX; + seg.planenum = UINT_MAX; + seg.storedseg = UINT_MAX; seg.frontsector = segs[i].frontsector; seg.backsector = segs[i].backsector; @@ -239,13 +239,13 @@ void FNodeBuilder::AddPolySegs(FPolySeg *segs, int numsegs) FPrivVert vert; int segnum; - seg.next = DWORD_MAX; + seg.next = UINT_MAX; seg.loopnum = 0; - seg.partner = DWORD_MAX; + seg.partner = UINT_MAX; seg.hashnext = NULL; seg.planefront = false; - seg.planenum = DWORD_MAX; - seg.storedseg = DWORD_MAX; + seg.planenum = UINT_MAX; + seg.storedseg = UINT_MAX; side_t *side = segs[i].wall; assert(side != NULL); @@ -286,7 +286,7 @@ void FNodeBuilder::GroupSegPlanes () seg->hashnext = NULL; } - Segs[Segs.Size()-1].next = DWORD_MAX; + Segs[Segs.Size()-1].next = UINT_MAX; for (i = planenum = 0; i < (int)Segs.Size(); ++i) { @@ -379,7 +379,7 @@ void FNodeBuilder::GroupSegPlanesSimple() pline->dx = Vertices[seg->v2].x - Vertices[seg->v1].x; pline->dy = Vertices[seg->v2].y - Vertices[seg->v1].y; } - Segs.Last().next = DWORD_MAX; + Segs.Last().next = UINT_MAX; PlaneChecked.Reserve((Segs.Size() + 7) / 8); } @@ -497,13 +497,13 @@ int FNodeBuilder::MarkLoop (uint32_t firstseg, int loopnum) Vertices[s1->v1].x>>16, Vertices[s1->v1].y>>16, Vertices[s1->v2].x>>16, Vertices[s1->v2].y>>16)); - uint32_t bestseg = DWORD_MAX; + uint32_t bestseg = UINT_MAX; uint32_t tryseg = Vertices[s1->v2].segs; angle_t bestang = ANGLE_MAX; angle_t ang1 = PointToAngle (Vertices[s1->v2].x - Vertices[s1->v1].x, Vertices[s1->v2].y - Vertices[s1->v1].y); - while (tryseg != DWORD_MAX) + while (tryseg != UINT_MAX) { FPrivSeg *s2 = &Segs[tryseg]; @@ -523,7 +523,7 @@ int FNodeBuilder::MarkLoop (uint32_t firstseg, int loopnum) } seg = bestseg; - } while (seg != DWORD_MAX && Segs[seg].loopnum == 0); + } while (seg != UINT_MAX && Segs[seg].loopnum == 0); return loopnum + 1; } @@ -563,7 +563,7 @@ bool FNodeBuilder::GetPolyExtents (int polynum, fixed_t bbox[4]) vert = Segs[i].v2; i = Vertices[vert].segs; count++; // to prevent endless loops. Stop when this reaches the number of segs. - } while (i != DWORD_MAX && (Vertices[vert].x != start.fixX() || Vertices[vert].y != start.fixY()) && count < Segs.Size()); + } while (i != UINT_MAX && (Vertices[vert].x != start.fixX() || Vertices[vert].y != start.fixY()) && count < Segs.Size()); return true; } @@ -691,8 +691,8 @@ int FNodeBuilder::FVertexMap::InsertVertex (FNodeBuilder::FPrivVert &vert) { int vertnum; - vert.segs = DWORD_MAX; - vert.segs2 = DWORD_MAX; + vert.segs = UINT_MAX; + vert.segs2 = UINT_MAX; vertnum = (int)MyBuilder.Vertices.Push (vert); // If a vertex is near a block boundary, then it will be inserted on @@ -772,7 +772,7 @@ int FNodeBuilder::FVertexMapSimple::SelectVertexClose(FNodeBuilder::FPrivVert &v int FNodeBuilder::FVertexMapSimple::InsertVertex (FNodeBuilder::FPrivVert &vert) { - vert.segs = DWORD_MAX; - vert.segs2 = DWORD_MAX; + vert.segs = UINT_MAX; + vert.segs2 = UINT_MAX; return (int)MyBuilder.Vertices.Push (vert); } diff --git a/src/parallel_for.h b/src/utility/parallel_for.h similarity index 100% rename from src/parallel_for.h rename to src/utility/parallel_for.h diff --git a/src/rapidjson/allocators.h b/src/utility/rapidjson/allocators.h similarity index 100% rename from src/rapidjson/allocators.h rename to src/utility/rapidjson/allocators.h diff --git a/src/rapidjson/document.h b/src/utility/rapidjson/document.h similarity index 100% rename from src/rapidjson/document.h rename to src/utility/rapidjson/document.h diff --git a/src/rapidjson/encodedstream.h b/src/utility/rapidjson/encodedstream.h similarity index 100% rename from src/rapidjson/encodedstream.h rename to src/utility/rapidjson/encodedstream.h diff --git a/src/rapidjson/encodings.h b/src/utility/rapidjson/encodings.h similarity index 100% rename from src/rapidjson/encodings.h rename to src/utility/rapidjson/encodings.h diff --git a/src/rapidjson/error/en.h b/src/utility/rapidjson/error/en.h similarity index 100% rename from src/rapidjson/error/en.h rename to src/utility/rapidjson/error/en.h diff --git a/src/rapidjson/error/error.h b/src/utility/rapidjson/error/error.h similarity index 100% rename from src/rapidjson/error/error.h rename to src/utility/rapidjson/error/error.h diff --git a/src/rapidjson/filereadstream.h b/src/utility/rapidjson/filereadstream.h similarity index 100% rename from src/rapidjson/filereadstream.h rename to src/utility/rapidjson/filereadstream.h diff --git a/src/rapidjson/filewritestream.h b/src/utility/rapidjson/filewritestream.h similarity index 100% rename from src/rapidjson/filewritestream.h rename to src/utility/rapidjson/filewritestream.h diff --git a/src/rapidjson/fwd.h b/src/utility/rapidjson/fwd.h similarity index 100% rename from src/rapidjson/fwd.h rename to src/utility/rapidjson/fwd.h diff --git a/src/rapidjson/internal/biginteger.h b/src/utility/rapidjson/internal/biginteger.h similarity index 100% rename from src/rapidjson/internal/biginteger.h rename to src/utility/rapidjson/internal/biginteger.h diff --git a/src/rapidjson/internal/diyfp.h b/src/utility/rapidjson/internal/diyfp.h similarity index 100% rename from src/rapidjson/internal/diyfp.h rename to src/utility/rapidjson/internal/diyfp.h diff --git a/src/rapidjson/internal/dtoa.h b/src/utility/rapidjson/internal/dtoa.h similarity index 100% rename from src/rapidjson/internal/dtoa.h rename to src/utility/rapidjson/internal/dtoa.h diff --git a/src/rapidjson/internal/ieee754.h b/src/utility/rapidjson/internal/ieee754.h similarity index 100% rename from src/rapidjson/internal/ieee754.h rename to src/utility/rapidjson/internal/ieee754.h diff --git a/src/rapidjson/internal/itoa.h b/src/utility/rapidjson/internal/itoa.h similarity index 100% rename from src/rapidjson/internal/itoa.h rename to src/utility/rapidjson/internal/itoa.h diff --git a/src/rapidjson/internal/meta.h b/src/utility/rapidjson/internal/meta.h similarity index 100% rename from src/rapidjson/internal/meta.h rename to src/utility/rapidjson/internal/meta.h diff --git a/src/rapidjson/internal/pow10.h b/src/utility/rapidjson/internal/pow10.h similarity index 100% rename from src/rapidjson/internal/pow10.h rename to src/utility/rapidjson/internal/pow10.h diff --git a/src/rapidjson/internal/regex.h b/src/utility/rapidjson/internal/regex.h similarity index 100% rename from src/rapidjson/internal/regex.h rename to src/utility/rapidjson/internal/regex.h diff --git a/src/rapidjson/internal/stack.h b/src/utility/rapidjson/internal/stack.h similarity index 100% rename from src/rapidjson/internal/stack.h rename to src/utility/rapidjson/internal/stack.h diff --git a/src/rapidjson/internal/strfunc.h b/src/utility/rapidjson/internal/strfunc.h similarity index 100% rename from src/rapidjson/internal/strfunc.h rename to src/utility/rapidjson/internal/strfunc.h diff --git a/src/rapidjson/internal/strtod.h b/src/utility/rapidjson/internal/strtod.h similarity index 100% rename from src/rapidjson/internal/strtod.h rename to src/utility/rapidjson/internal/strtod.h diff --git a/src/rapidjson/internal/swap.h b/src/utility/rapidjson/internal/swap.h similarity index 100% rename from src/rapidjson/internal/swap.h rename to src/utility/rapidjson/internal/swap.h diff --git a/src/rapidjson/istreamwrapper.h b/src/utility/rapidjson/istreamwrapper.h similarity index 100% rename from src/rapidjson/istreamwrapper.h rename to src/utility/rapidjson/istreamwrapper.h diff --git a/src/rapidjson/memorybuffer.h b/src/utility/rapidjson/memorybuffer.h similarity index 100% rename from src/rapidjson/memorybuffer.h rename to src/utility/rapidjson/memorybuffer.h diff --git a/src/rapidjson/memorystream.h b/src/utility/rapidjson/memorystream.h similarity index 100% rename from src/rapidjson/memorystream.h rename to src/utility/rapidjson/memorystream.h diff --git a/src/rapidjson/msinttypes/inttypes.h b/src/utility/rapidjson/msinttypes/inttypes.h similarity index 100% rename from src/rapidjson/msinttypes/inttypes.h rename to src/utility/rapidjson/msinttypes/inttypes.h diff --git a/src/rapidjson/msinttypes/stdint.h b/src/utility/rapidjson/msinttypes/stdint.h similarity index 100% rename from src/rapidjson/msinttypes/stdint.h rename to src/utility/rapidjson/msinttypes/stdint.h diff --git a/src/rapidjson/ostreamwrapper.h b/src/utility/rapidjson/ostreamwrapper.h similarity index 100% rename from src/rapidjson/ostreamwrapper.h rename to src/utility/rapidjson/ostreamwrapper.h diff --git a/src/rapidjson/pointer.h b/src/utility/rapidjson/pointer.h similarity index 100% rename from src/rapidjson/pointer.h rename to src/utility/rapidjson/pointer.h diff --git a/src/rapidjson/prettywriter.h b/src/utility/rapidjson/prettywriter.h similarity index 100% rename from src/rapidjson/prettywriter.h rename to src/utility/rapidjson/prettywriter.h diff --git a/src/rapidjson/rapidjson.h b/src/utility/rapidjson/rapidjson.h similarity index 100% rename from src/rapidjson/rapidjson.h rename to src/utility/rapidjson/rapidjson.h diff --git a/src/rapidjson/reader.h b/src/utility/rapidjson/reader.h similarity index 100% rename from src/rapidjson/reader.h rename to src/utility/rapidjson/reader.h diff --git a/src/rapidjson/schema.h b/src/utility/rapidjson/schema.h similarity index 100% rename from src/rapidjson/schema.h rename to src/utility/rapidjson/schema.h diff --git a/src/rapidjson/stream.h b/src/utility/rapidjson/stream.h similarity index 100% rename from src/rapidjson/stream.h rename to src/utility/rapidjson/stream.h diff --git a/src/rapidjson/stringbuffer.h b/src/utility/rapidjson/stringbuffer.h similarity index 100% rename from src/rapidjson/stringbuffer.h rename to src/utility/rapidjson/stringbuffer.h diff --git a/src/rapidjson/writer.h b/src/utility/rapidjson/writer.h similarity index 100% rename from src/rapidjson/writer.h rename to src/utility/rapidjson/writer.h diff --git a/src/s_playlist.cpp b/src/utility/s_playlist.cpp similarity index 100% rename from src/s_playlist.cpp rename to src/utility/s_playlist.cpp diff --git a/src/s_playlist.h b/src/utility/s_playlist.h similarity index 100% rename from src/s_playlist.h rename to src/utility/s_playlist.h diff --git a/src/sc_man.cpp b/src/utility/sc_man.cpp similarity index 99% rename from src/sc_man.cpp rename to src/utility/sc_man.cpp index f1b9b9267f..7c2aa460ad 100644 --- a/src/sc_man.cpp +++ b/src/utility/sc_man.cpp @@ -61,7 +61,7 @@ #include #include #include "doomtype.h" -#include "i_system.h" +#include "doomerrors.h" #include "sc_man.h" #include "w_wad.h" #include "cmdlib.h" diff --git a/src/sc_man.h b/src/utility/sc_man.h similarity index 100% rename from src/sc_man.h rename to src/utility/sc_man.h diff --git a/src/sc_man_scanner.re b/src/utility/sc_man_scanner.re similarity index 100% rename from src/sc_man_scanner.re rename to src/utility/sc_man_scanner.re diff --git a/src/sc_man_tokens.h b/src/utility/sc_man_tokens.h similarity index 100% rename from src/sc_man_tokens.h rename to src/utility/sc_man_tokens.h diff --git a/src/sfmt/LICENSE.txt b/src/utility/sfmt/LICENSE.txt similarity index 100% rename from src/sfmt/LICENSE.txt rename to src/utility/sfmt/LICENSE.txt diff --git a/src/sfmt/SFMT-alti.h b/src/utility/sfmt/SFMT-alti.h similarity index 100% rename from src/sfmt/SFMT-alti.h rename to src/utility/sfmt/SFMT-alti.h diff --git a/src/sfmt/SFMT-params.h b/src/utility/sfmt/SFMT-params.h similarity index 100% rename from src/sfmt/SFMT-params.h rename to src/utility/sfmt/SFMT-params.h diff --git a/src/sfmt/SFMT-params11213.h b/src/utility/sfmt/SFMT-params11213.h similarity index 100% rename from src/sfmt/SFMT-params11213.h rename to src/utility/sfmt/SFMT-params11213.h diff --git a/src/sfmt/SFMT-params1279.h b/src/utility/sfmt/SFMT-params1279.h similarity index 100% rename from src/sfmt/SFMT-params1279.h rename to src/utility/sfmt/SFMT-params1279.h diff --git a/src/sfmt/SFMT-params132049.h b/src/utility/sfmt/SFMT-params132049.h similarity index 100% rename from src/sfmt/SFMT-params132049.h rename to src/utility/sfmt/SFMT-params132049.h diff --git a/src/sfmt/SFMT-params19937.h b/src/utility/sfmt/SFMT-params19937.h similarity index 100% rename from src/sfmt/SFMT-params19937.h rename to src/utility/sfmt/SFMT-params19937.h diff --git a/src/sfmt/SFMT-params216091.h b/src/utility/sfmt/SFMT-params216091.h similarity index 100% rename from src/sfmt/SFMT-params216091.h rename to src/utility/sfmt/SFMT-params216091.h diff --git a/src/sfmt/SFMT-params2281.h b/src/utility/sfmt/SFMT-params2281.h similarity index 100% rename from src/sfmt/SFMT-params2281.h rename to src/utility/sfmt/SFMT-params2281.h diff --git a/src/sfmt/SFMT-params4253.h b/src/utility/sfmt/SFMT-params4253.h similarity index 100% rename from src/sfmt/SFMT-params4253.h rename to src/utility/sfmt/SFMT-params4253.h diff --git a/src/sfmt/SFMT-params44497.h b/src/utility/sfmt/SFMT-params44497.h similarity index 100% rename from src/sfmt/SFMT-params44497.h rename to src/utility/sfmt/SFMT-params44497.h diff --git a/src/sfmt/SFMT-params607.h b/src/utility/sfmt/SFMT-params607.h similarity index 100% rename from src/sfmt/SFMT-params607.h rename to src/utility/sfmt/SFMT-params607.h diff --git a/src/sfmt/SFMT-params86243.h b/src/utility/sfmt/SFMT-params86243.h similarity index 100% rename from src/sfmt/SFMT-params86243.h rename to src/utility/sfmt/SFMT-params86243.h diff --git a/src/sfmt/SFMT-sse2.h b/src/utility/sfmt/SFMT-sse2.h similarity index 100% rename from src/sfmt/SFMT-sse2.h rename to src/utility/sfmt/SFMT-sse2.h diff --git a/src/sfmt/SFMT.cpp b/src/utility/sfmt/SFMT.cpp similarity index 100% rename from src/sfmt/SFMT.cpp rename to src/utility/sfmt/SFMT.cpp diff --git a/src/sfmt/SFMT.h b/src/utility/sfmt/SFMT.h similarity index 100% rename from src/sfmt/SFMT.h rename to src/utility/sfmt/SFMT.h diff --git a/src/strnatcmp.c b/src/utility/strnatcmp.c similarity index 100% rename from src/strnatcmp.c rename to src/utility/strnatcmp.c diff --git a/src/strnatcmp.h b/src/utility/strnatcmp.h similarity index 100% rename from src/strnatcmp.h rename to src/utility/strnatcmp.h diff --git a/src/tarray.h b/src/utility/tarray.h similarity index 100% rename from src/tarray.h rename to src/utility/tarray.h diff --git a/src/tflags.h b/src/utility/tflags.h similarity index 100% rename from src/tflags.h rename to src/utility/tflags.h diff --git a/src/v_collection.cpp b/src/utility/v_collection.cpp similarity index 100% rename from src/v_collection.cpp rename to src/utility/v_collection.cpp diff --git a/src/v_collection.h b/src/utility/v_collection.h similarity index 100% rename from src/v_collection.h rename to src/utility/v_collection.h diff --git a/src/vectors.h b/src/utility/vectors.h similarity index 100% rename from src/vectors.h rename to src/utility/vectors.h diff --git a/src/weightedlist.h b/src/utility/weightedlist.h similarity index 100% rename from src/weightedlist.h rename to src/utility/weightedlist.h diff --git a/src/x86.cpp b/src/utility/x86.cpp similarity index 100% rename from src/x86.cpp rename to src/utility/x86.cpp diff --git a/src/x86.h b/src/utility/x86.h similarity index 100% rename from src/x86.h rename to src/utility/x86.h diff --git a/src/xs_Float.h b/src/utility/xs_Float.h similarity index 100% rename from src/xs_Float.h rename to src/utility/xs_Float.h diff --git a/src/zstrformat.cpp b/src/utility/zstrformat.cpp similarity index 100% rename from src/zstrformat.cpp rename to src/utility/zstrformat.cpp diff --git a/src/zstring.cpp b/src/utility/zstring.cpp similarity index 100% rename from src/zstring.cpp rename to src/utility/zstring.cpp diff --git a/src/zstring.h b/src/utility/zstring.h similarity index 100% rename from src/zstring.h rename to src/utility/zstring.h diff --git a/src/v_2ddrawer.cpp b/src/v_2ddrawer.cpp index cfff94b322..ca0cec6b4f 100644 --- a/src/v_2ddrawer.cpp +++ b/src/v_2ddrawer.cpp @@ -428,7 +428,7 @@ void F2DDrawer::AddPoly(FTexture *texture, FVector2 *points, int npoints, // is necessary in order to best reproduce Doom's original lighting. double fadelevel; - if (vid_rendermode != 4 || level.lightMode == ELightMode::Doom || level.lightMode == ELightMode::ZDoomSoftware || level.lightMode == ELightMode::DoomSoftware) + if (vid_rendermode != 4 || primaryLevel->lightMode == ELightMode::Doom || primaryLevel->lightMode == ELightMode::ZDoomSoftware || primaryLevel->lightMode == ELightMode::DoomSoftware) { double map = (NUMCOLORMAPS * 2.) - ((lightlevel + 12) * (NUMCOLORMAPS / 128.)); fadelevel = clamp((map - 12) / NUMCOLORMAPS, 0.0, 1.0); diff --git a/src/v_blend.cpp b/src/v_blend.cpp index 94a40b8321..6e6f31c90c 100644 --- a/src/v_blend.cpp +++ b/src/v_blend.cpp @@ -93,6 +93,7 @@ void V_AddBlend (float r, float g, float b, float a, float v_blend[4]) void V_AddPlayerBlend (player_t *CPlayer, float blend[4], float maxinvalpha, int maxpainblend) { int cnt; + auto Level = CPlayer->mo->Level; // [RH] All powerups can affect the screen blending now for (AActor *item = CPlayer->mo->Inventory; item != NULL; item = item->Inventory) @@ -175,18 +176,18 @@ void V_AddPlayerBlend (player_t *CPlayer, float blend[4], float maxinvalpha, int { if (CPlayer->hazardcount > 16*TICRATE || (CPlayer->hazardcount & 8)) { - float r = ((level.hazardflash & 0xff0000) >> 16) / 255.f; - float g = ((level.hazardflash & 0xff00) >> 8) / 255.f; - float b = ((level.hazardflash & 0xff)) / 255.f; + float r = ((Level->hazardflash & 0xff0000) >> 16) / 255.f; + float g = ((Level->hazardflash & 0xff00) >> 8) / 255.f; + float b = ((Level->hazardflash & 0xff)) / 255.f; V_AddBlend (r, g, b, 0.125f, blend); } } else { cnt= MIN(CPlayer->hazardcount/8, 64); - float r = ((level.hazardcolor & 0xff0000) >> 16) / 255.f; - float g = ((level.hazardcolor & 0xff00) >> 8) / 255.f; - float b = ((level.hazardcolor & 0xff)) / 255.f; + float r = ((Level->hazardcolor & 0xff0000) >> 16) / 255.f; + float g = ((Level->hazardcolor & 0xff00) >> 8) / 255.f; + float b = ((Level->hazardcolor & 0xff)) / 255.f; V_AddBlend (r, g, b, cnt/93.2571428571f, blend); } } diff --git a/src/v_framebuffer.cpp b/src/v_framebuffer.cpp index 722596c35a..26a86623ae 100644 --- a/src/v_framebuffer.cpp +++ b/src/v_framebuffer.cpp @@ -34,7 +34,7 @@ #include -#include "i_system.h" + #include "x86.h" #include "actor.h" diff --git a/src/v_palette.cpp b/src/v_palette.cpp index 814d7e7fa9..e598fa290b 100644 --- a/src/v_palette.cpp +++ b/src/v_palette.cpp @@ -79,8 +79,7 @@ CUSTOM_CVAR (Float, Gamma, 1.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) CCMD (bumpgamma) { - // [RH] Gamma correction tables are now generated - // on the fly for *any* gamma level. + // [RH] Gamma correction tables are now generated on the fly for *any* gamma level // Q: What are reasonable limits to use here? float newgamma = Gamma + 0.1f; diff --git a/src/v_pfx.cpp b/src/v_pfx.cpp index 884a9c7a41..14a50c7c97 100644 --- a/src/v_pfx.cpp +++ b/src/v_pfx.cpp @@ -33,7 +33,7 @@ */ #include "doomtype.h" -#include "i_system.h" +#include "doomerrors.h" #include "v_pfx.h" PfxUnion GPfxPal; diff --git a/src/v_text.cpp b/src/v_text.cpp index a6d57399b9..345f4b7311 100644 --- a/src/v_text.cpp +++ b/src/v_text.cpp @@ -39,7 +39,7 @@ #include "v_text.h" -#include "i_system.h" + #include "v_video.h" #include "w_wad.h" diff --git a/src/v_video.cpp b/src/v_video.cpp index 61e79b5852..b971a9eb32 100644 --- a/src/v_video.cpp +++ b/src/v_video.cpp @@ -36,6 +36,7 @@ #include #include "i_system.h" +#include "c_cvars.h" #include "x86.h" #include "i_video.h" #include "r_state.h" @@ -66,6 +67,8 @@ #include "r_videoscale.h" #include "i_time.h" #include "version.h" +#include "g_levellocals.h" +#include "am_map.h" EXTERN_CVAR(Bool, cl_capfps) EXTERN_CVAR(Int, menu_resolution_custom_width) @@ -592,7 +595,8 @@ void V_OutputResized (int width, int height) C_NewModeAdjust(); // Reload crosshair if transitioned to a different size ST_LoadCrosshair(true); - AM_NewResolution(); + if (primaryLevel && primaryLevel->automap) + primaryLevel->automap->NewResolution(); } void V_CalcCleanFacs (int designwidth, int designheight, int realwidth, int realheight, int *cleanx, int *cleany, int *_cx1, int *_cx2) diff --git a/src/v_video.h b/src/v_video.h index 2fd3f7e13c..1b3131f835 100644 --- a/src/v_video.h +++ b/src/v_video.h @@ -399,9 +399,6 @@ public: // Mark the palette as changed. It will be updated on the next Update(). virtual void UpdatePalette() {} - // Sets the gamma level. Returns false if the hardware does not support - // gamma changing. (Always true for now, since palettes can always be - // gamma adjusted.) virtual void SetGamma() {} // Sets a color flash. RGB is the color, and amount is 0-256, with 256 diff --git a/src/version.h b/src/version.h index 3387ae54ae..1336b47c60 100644 --- a/src/version.h +++ b/src/version.h @@ -87,11 +87,11 @@ const char *GetVersionString(); #define SAVEGAME_EXT "zds" // MINSAVEVER is the minimum level snapshot version that can be loaded. -#define MINSAVEVER 4555 +#define MINSAVEVER 4556 // Use 4500 as the base git save version, since it's higher than the // SVN revision ever got. -#define SAVEVER 4555 +#define SAVEVER 4556 // This is so that derivates can use the same savegame versions without worrying about engine compatibility #define GAMESIG "GZDOOM" diff --git a/src/wi_stuff.cpp b/src/wi_stuff.cpp index 9fc258ee45..e5da625532 100644 --- a/src/wi_stuff.cpp +++ b/src/wi_stuff.cpp @@ -37,7 +37,7 @@ #include "m_random.h" #include "m_swap.h" -#include "i_system.h" + #include "w_wad.h" #include "g_level.h" #include "s_sound.h" @@ -769,7 +769,10 @@ void WI_Start(wbstartstruct_t *wbstartstruct) else wbstartstruct->nextname = info->LookupLevelName(); V_SetBlend(0, 0, 0, 0); S_StopAllChannels(); - SN_StopAllSequences(); + for (auto Level : AllLevels()) + { + SN_StopAllSequences(Level); + } WI_Screen = cls->CreateNew(); IFVIRTUALPTRNAME(WI_Screen, "StatusScreen", Start) { diff --git a/src/win32/hardware.cpp b/src/win32/hardware.cpp index aa5671f284..29ee60aa75 100644 --- a/src/win32/hardware.cpp +++ b/src/win32/hardware.cpp @@ -44,6 +44,8 @@ #include "m_argv.h" #include "version.h" #include "win32glvideo.h" +#include "doomerrors.h" +#include "i_system.h" #include "swrenderer/r_swrenderer.h" EXTERN_CVAR(Int, vid_maxfps) diff --git a/src/win32/i_cd.cpp b/src/win32/i_cd.cpp index f6139e96f1..c8dcc3d62a 100644 --- a/src/win32/i_cd.cpp +++ b/src/win32/i_cd.cpp @@ -42,6 +42,7 @@ #include "c_cvars.h" #include "m_argv.h" #include "version.h" +#include "i_system.h" #include "i_cd.h" #include "helperthread.h" diff --git a/src/win32/i_input.cpp b/src/win32/i_input.cpp index 85bc3abef5..990ab416e5 100644 --- a/src/win32/i_input.cpp +++ b/src/win32/i_input.cpp @@ -89,6 +89,9 @@ #include "v_text.h" #include "version.h" #include "events.h" +#include "doomerrors.h" +#include "i_system.h" +#include "g_levellocals.h" // Prototypes and declarations. #include "rawinput.h" @@ -148,6 +151,9 @@ extern bool AppActive; int SessionState = 0; int BlockMouseMove; +static bool EventHandlerResultForNativeMouse; + + CVAR (Bool, i_soundinbackground, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) CVAR (Bool, k_allowfullscreentoggle, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) @@ -172,7 +178,7 @@ static void I_CheckGUICapture () } // [ZZ] check active event handlers that want the UI processing - if (!wantCapt && E_CheckUiProcessors()) + if (!wantCapt && primaryLevel->localEventManager->CheckUiProcessors()) wantCapt = true; if (wantCapt != GUICapture) @@ -455,11 +461,11 @@ LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) return 0; case WM_KILLFOCUS: - I_CheckNativeMouse (true); // Make sure mouse gets released right away + I_CheckNativeMouse (true, false); // Make sure mouse gets released right away break; case WM_SETFOCUS: - I_CheckNativeMouse (false); + I_CheckNativeMouse (false, EventHandlerResultForNativeMouse); // This cannot call the event handler. Doing it from here is unsafe. break; case WM_SETCURSOR: @@ -776,7 +782,8 @@ void I_StartTic () BlockMouseMove--; ResetButtonTriggers (); I_CheckGUICapture (); - I_CheckNativeMouse (false); + EventHandlerResultForNativeMouse = primaryLevel->localEventManager->CheckRequireMouse(); + I_CheckNativeMouse (false, EventHandlerResultForNativeMouse); I_GetEvent (); } diff --git a/src/win32/i_input.h b/src/win32/i_input.h index 529ea83f54..00f853e9b3 100644 --- a/src/win32/i_input.h +++ b/src/win32/i_input.h @@ -129,7 +129,7 @@ public: extern FJoystickCollection *JoyDevices[NUM_JOYDEVICES]; void I_StartupMouse(); -void I_CheckNativeMouse(bool prefer_native); +void I_CheckNativeMouse(bool prefer_native, bool eh); void I_StartupKeyboard(); void I_StartupXInput(); void I_StartupDirectInputJoystick(); diff --git a/src/win32/i_keyboard.cpp b/src/win32/i_keyboard.cpp index 840313cead..69571cbfd1 100644 --- a/src/win32/i_keyboard.cpp +++ b/src/win32/i_keyboard.cpp @@ -345,7 +345,7 @@ ufailit: Device = NULL; return false; } - // Set cooperative level. + hr = Device->SetCooperativeLevel(Window, DISCL_NONEXCLUSIVE | DISCL_BACKGROUND); if (FAILED(hr)) { diff --git a/src/win32/i_main.cpp b/src/win32/i_main.cpp index 809deb43cb..4ca5bdce4d 100644 --- a/src/win32/i_main.cpp +++ b/src/win32/i_main.cpp @@ -67,11 +67,12 @@ #include "i_input.h" #include "w_wad.h" #include "cmdlib.h" -#include "doomstat.h" +#include "g_game.h" #include "r_utility.h" #include "g_levellocals.h" #include "s_sound.h" #include "vm.h" +#include "i_system.h" #include "stats.h" #include "st_start.h" @@ -1104,7 +1105,7 @@ void DoomSpecificInfo (char *buffer, size_t bufflen) } else { - buffer += mysnprintf (buffer, buffend - buffer, "\r\n\r\nCurrent map: %s", level.MapName.GetChars()); + buffer += mysnprintf (buffer, buffend - buffer, "\r\n\r\nCurrent map: %s", primaryLevel->MapName.GetChars()); if (!viewactive) { diff --git a/src/win32/i_mouse.cpp b/src/win32/i_mouse.cpp index df81332e81..9915479b70 100644 --- a/src/win32/i_mouse.cpp +++ b/src/win32/i_mouse.cpp @@ -42,7 +42,7 @@ #include "i_input.h" #include "d_event.h" #include "d_gui.h" -#include "doomstat.h" +#include "g_game.h" #include "hardware.h" #include "rawinput.h" #include "menu/menu.h" @@ -284,7 +284,7 @@ static bool CaptureMode_InGame() // //========================================================================== -void I_CheckNativeMouse(bool preferNative) +void I_CheckNativeMouse(bool preferNative, bool eventhandlerresult) { bool windowed = (screen == NULL) || !screen->IsFullscreen(); bool want_native; @@ -311,7 +311,7 @@ void I_CheckNativeMouse(bool preferNative) } } - if (!want_native && E_CheckRequireMouse()) + if (!want_native && eventhandlerresult) want_native = true; //Printf ("%d %d %d\n", wantNative, preferNative, NativeMouse); @@ -781,7 +781,7 @@ ufailit: Device = NULL; return false; } - // Set cooperative level. + hr = Device->SetCooperativeLevel(Window, DISCL_EXCLUSIVE | DISCL_FOREGROUND); if (FAILED(hr)) { diff --git a/src/win32/i_system.cpp b/src/win32/i_system.cpp index 45bb50b4d2..bc0fb865bc 100644 --- a/src/win32/i_system.cpp +++ b/src/win32/i_system.cpp @@ -80,6 +80,7 @@ #include "v_font.h" #include "g_level.h" #include "doomstat.h" +#include "i_system.h" #include "textures/bitmap.h" #include "optwin32.h" diff --git a/src/win32/i_system.h b/src/win32/i_system.h index 903203daf3..59551a865c 100644 --- a/src/win32/i_system.h +++ b/src/win32/i_system.h @@ -91,9 +91,6 @@ void I_Quit (void); void I_Tactile (int on, int off, int total); -void I_Error (const char *error, ...) GCCPRINTF(1,2); -void I_FatalError (const char *error, ...) GCCPRINTF(1,2); - void atterm (void (*func)(void)); void popterm (); diff --git a/src/win32/st_start.cpp b/src/win32/st_start.cpp index 549ccad1ce..c2a0d59414 100644 --- a/src/win32/st_start.cpp +++ b/src/win32/st_start.cpp @@ -50,6 +50,7 @@ #include "s_sound.h" #include "m_argv.h" #include "d_main.h" +#include "doomerrors.h" // MACROS ------------------------------------------------------------------ diff --git a/wadsrc/static/zscript/actor.txt b/wadsrc/static/zscript/actor.txt index b113d12776..b47d599a71 100644 --- a/wadsrc/static/zscript/actor.txt +++ b/wadsrc/static/zscript/actor.txt @@ -448,6 +448,7 @@ class Actor : Thinker native return sin(fb * (180./32)) * 8; } + native bool isFrozen(); virtual native void BeginPlay(); virtual native void Activate(Actor activator); virtual native void Deactivate(Actor activator); @@ -584,7 +585,10 @@ class Actor : Thinker native native static int ApplyDamageFactors(class itemcls, Name damagetype, int damage, int defdamage); native void RemoveFromHash(); native void ChangeTid(int newtid); - native static int FindUniqueTid(int start = 0, int limit = 0); + deprecated("3.8") static int FindUniqueTid(int start = 0, int limit = 0) + { + return level.FindUniqueTid(start, limit); + } native void SetShade(color col); native clearscope int GetRenderStyle() const; native clearscope bool CheckKeys(int locknum, bool remote, bool quiet = false); @@ -603,7 +607,7 @@ class Actor : Thinker native native void SoundAlert(Actor target, bool splash = false, double maxdist = 0); native void ClearBounce(); native TerrainDef GetFloorTerrain(); - native bool CheckLocalView(int consoleplayer); + native bool CheckLocalView(int consoleplayer = -1 /* parameter is not used anymore but needed for backward compatibilityö. */); native bool CheckNoDelay(); native bool UpdateWaterLevel (bool splash = true); native bool IsZeroDamage(); diff --git a/wadsrc/static/zscript/base.txt b/wadsrc/static/zscript/base.txt index 584863e580..2a81b410e9 100644 --- a/wadsrc/static/zscript/base.txt +++ b/wadsrc/static/zscript/base.txt @@ -1,3 +1,4 @@ + struct _ native // These are the global variables, the struct is only here to avoid extending the parser for this. { native readonly Array AllClasses; @@ -7,21 +8,16 @@ struct _ native // These are the global variables, the struct is only here to av native readonly Array<@Team> Teams; native int validcount; native readonly bool multiplayer; - native play @LevelLocals level; native @KeyBindings Bindings; native @KeyBindings AutomapBindings; native play @DehInfo deh; native readonly @GameInfoStruct gameinfo; - native play @PlayerInfo players[MAXPLAYERS]; - native readonly bool playeringame[MAXPLAYERS]; native readonly ui bool netgame; native readonly bool automapactive; native play uint gameaction; native readonly int gamestate; native readonly TextureID skyflatnum; - native readonly uint8 globalfreeze; - native readonly int consoleplayer; native readonly Font smallfont; native readonly Font smallfont2; native readonly Font bigfont; @@ -44,8 +40,16 @@ struct _ native // These are the global variables, the struct is only here to av native readonly int Net_Arbitrator; native ui BaseStatusBar StatusBar; native readonly Weapon WP_NOCHANGE; + deprecated("3.8") native readonly bool globalfreeze; native int LocalViewPitch; - + +// sandbox state in multi-level setups: + + native play @PlayerInfo players[MAXPLAYERS]; + native readonly bool playeringame[MAXPLAYERS]; + native readonly int consoleplayer; + native play LevelLocals Level; + } struct TexMan @@ -91,7 +95,10 @@ struct TexMan }; native static TextureID CheckForTexture(String name, int usetype, int flags = TryAny); - native static void ReplaceTextures(String from, String to, int flags); + deprecated("3.8") static void ReplaceTextures(String from, String to, int flags) + { + level.ReplaceTextures(from, to, flags); + } native static String GetName(TextureID tex); native static int, int GetSize(TextureID tex); native static Vector2 GetScaledSize(TextureID tex); @@ -396,8 +403,14 @@ class Object native native static String G_SkillName(); native static int G_SkillPropertyInt(int p); native static double G_SkillPropertyFloat(int p); - native static vector3, int G_PickDeathmatchStart(); - native static vector3, int G_PickPlayerStart(int pnum, int flags = 0); + deprecated("3.8") static vector3, int G_PickDeathmatchStart() + { + return level.PickDeathmatchStart(); + } + deprecated("3.8") static vector3, int G_PickPlayerStart(int pnum, int flags = 0) + { + return level.PickPlayerStart(pnum, flags); + } native static void S_Sound (Sound sound_id, int channel, float volume = 1, float attenuation = ATTN_NORM); native static void S_PauseSound (bool notmusic, bool notsfx); native static void S_ResumeSound (bool notsfx); @@ -460,6 +473,8 @@ class Thinker : Object native play } const TICRATE = 35; + + native LevelLocals Level; virtual native void Tick(); virtual native void PostBeginPlay(); @@ -480,8 +495,11 @@ class ThinkerIterator : Object native } class ActorIterator : Object native -{ - native static ActorIterator Create(int tid, class type = "Actor"); +{ + deprecated("3.8") static ActorIterator Create(int tid, class type = "Actor") + { + return level.CreateActorIterator(tid, type); + } native Actor Next(); native void Reinit(); } @@ -633,7 +651,7 @@ struct LevelLocals native native readonly String MapName; native String NextMap; native String NextSecretMap; - native String F1Pic; + native readonly String F1Pic; native readonly int maptype; native readonly String Music; native readonly int musicorder; @@ -663,7 +681,7 @@ struct LevelLocals native native readonly bool polygrind; native readonly bool nomonsters; native readonly bool allowrespawn; - native bool frozen; + deprecated("3.8") native bool frozen; native readonly bool infinite_flight; native readonly bool no_dlg_freeze; native readonly bool keepfullinventory; @@ -678,39 +696,61 @@ struct LevelLocals native native String GetUDMFString(int type, int index, Name key); native int GetUDMFInt(int type, int index, Name key); native double GetUDMFFloat(int type, int index, Name key); - native int ExecuteSpecial(int special, Actor activator, line linedef, bool lineside, int arg1 = 0, int arg2 = 0, int arg3 = 0, int arg4 = 0, int arg5 = 0); - native static void GiveSecret(Actor activator, bool printmsg = true, bool playsound = true); - native static void StartSlideshow(Name whichone = 'none'); - native static void WorldDone(); - native static void RemoveAllBots(bool fromlist); - native static Vector2 GetAutomapPosition(); + native play int ExecuteSpecial(int special, Actor activator, line linedef, bool lineside, int arg1 = 0, int arg2 = 0, int arg3 = 0, int arg4 = 0, int arg5 = 0); + native void GiveSecret(Actor activator, bool printmsg = true, bool playsound = true); + native void StartSlideshow(Name whichone = 'none'); + native void WorldDone(); + deprecated("3.8") static void RemoveAllBots(bool fromlist) { /* intentionally left as no-op. */ } + native ui Vector2 GetAutomapPosition(); native void SetInterMusic(String nextmap); native String FormatMapName(int mapnamecolor); native bool IsJumpingAllowed() const; native bool IsCrouchingAllowed() const; native bool IsFreelookAllowed() const; native void StartIntermission(Name type, int state) const; - native SpotState GetSpotState(bool create = true); + native play SpotState GetSpotState(bool create = true); + native int FindUniqueTid(int start = 0, int limit = 0); + native uint GetSkyboxPortal(Actor actor); + native void ReplaceTextures(String from, String to, int flags); + clearscope native HealthGroup FindHealthGroup(int id); + native vector3, int PickDeathmatchStart(); + native vector3, int PickPlayerStart(int pnum, int flags = 0); + native int isFrozen() const; + native void setFrozen(bool on); - native static clearscope bool IsPointInMap(vector3 p); + native clearscope Sector PointInSector(Vector2 pt) const; - native static clearscope vector2 Vec2Diff(vector2 v1, vector2 v2); - native static clearscope vector3 Vec3Diff(vector3 v1, vector3 v2); - native static clearscope vector3 SphericalCoords(vector3 viewpoint, vector3 targetPos, vector2 viewAngles = (0, 0), bool absolute = false); + native clearscope bool IsPointInLevel(vector3 p) const; + deprecated("3.8") clearscope static bool IsPointInMap(vector3 p) + { + return level.IsPointInLevel(p); + } + + native clearscope vector2 Vec2Diff(vector2 v1, vector2 v2) const; + native clearscope vector3 Vec3Diff(vector3 v1, vector3 v2) const; + native clearscope vector3 SphericalCoords(vector3 viewpoint, vector3 targetPos, vector2 viewAngles = (0, 0), bool absolute = false) const; - native static clearscope vector2 Vec2Offset(vector2 pos, vector2 dir, bool absolute = false); - native static clearscope vector3 Vec2OffsetZ(vector2 pos, vector2 dir, double atz, bool absolute = false); - native static clearscope vector3 Vec3Offset(vector3 pos, vector3 dir, bool absolute = false); + native clearscope vector2 Vec2Offset(vector2 pos, vector2 dir, bool absolute = false) const; + native clearscope vector3 Vec2OffsetZ(vector2 pos, vector2 dir, double atz, bool absolute = false) const; + native clearscope vector3 Vec3Offset(vector3 pos, vector3 dir, bool absolute = false) const; native String GetChecksum() const; - native void ChangeSky( TextureID sky1, TextureID sky2 ); + native void ChangeSky(TextureID sky1, TextureID sky2 ); + + native SectorTagIterator CreateSectorTagIterator(int tag, line defline = null); + native LineIdIterator CreateLineIdIterator(int tag); + native ActorIterator CreateActorIterator(int tid, class type = "Actor"); String TimeFormatted(bool totals = false) { int sec = Thinker.Tics2Seconds(totals? totaltime : time); return String.Format("%02d:%02d:%02d", sec / 3600, (sec % 3600) / 60, sec % 60); } + + native play bool CreateCeiling(sector sec, int type, line ln, double speed, double speed2, double height = 0, int crush = -1, int silent = 0, int change = 0, int crushmode = 0 /*Floor.crushDoom*/); + native play bool CreateFloor(sector sec, int floortype, line ln, double speed, double height = 0, int crush = -1, int change = 0, bool crushmode = false, bool hereticlower = false); + } struct StringTable native @@ -912,7 +952,10 @@ class Floor : MovingFloor native genFloorChg }; - native static bool CreateFloor(sector sec, EFloor floortype, line ln, double speed, double height = 0, int crush = -1, int change = 0, bool crushmode = false, bool hereticlower = false); + deprecated("3.8") static bool CreateFloor(sector sec, int floortype, line ln, double speed, double height = 0, int crush = -1, int change = 0, bool crushmode = false, bool hereticlower = false) + { + return level.CreateFloor(sec, floortype, ln, speed, height, crush, change, crushmode, hereticlower); + } } class Ceiling : MovingCeiling native @@ -955,7 +998,10 @@ class Ceiling : MovingCeiling native crushSlowdown = 2 } - native static bool CreateCeiling(sector sec, int type, line ln, double speed, double speed2, double height = 0, int crush = -1, int silent = 0, int change = 0, int crushmode = crushDoom); + deprecated("3.8") static bool CreateCeiling(sector sec, int type, line ln, double speed, double speed2, double height = 0, int crush = -1, int silent = 0, int change = 0, int crushmode = crushDoom) + { + return level.CreateCeiling(sec, type, ln, speed, speed2, height, crush, silent, change, crushmode); + } } diff --git a/wadsrc/static/zscript/destructible.txt b/wadsrc/static/zscript/destructible.txt index 3ea0b4f2b4..c44a1ef307 100755 --- a/wadsrc/static/zscript/destructible.txt +++ b/wadsrc/static/zscript/destructible.txt @@ -1,6 +1,9 @@ struct HealthGroup native play { - static clearscope native HealthGroup Find(int id); + deprecated("3.8") static clearscope HealthGroup Find(int id) + { + return level.FindHealthGroup(id); + } readonly int id; readonly int health; diff --git a/wadsrc/static/zscript/doom/fatso.txt b/wadsrc/static/zscript/doom/fatso.txt index f24b0d2e70..cbf820398a 100644 --- a/wadsrc/static/zscript/doom/fatso.txt +++ b/wadsrc/static/zscript/doom/fatso.txt @@ -105,6 +105,7 @@ extend class Actor { const FATSPREAD = 90./8; + private native bool compat_mushroom(); void A_FatRaise() { @@ -195,7 +196,7 @@ extend class Actor aimtarget.Height = Height; bool shootmode = ((flags & MSF_Classic) || // Flag explicitly set, or no flags and compat options - (flags == 0 && CurState.bDehacked && compat_mushroom)); + (flags == 0 && CurState.bDehacked && compat_mushroom())); for (i = -numspawns; i <= numspawns; i += 8) { diff --git a/wadsrc/static/zscript/doom/painelemental.txt b/wadsrc/static/zscript/doom/painelemental.txt index f953e47efb..7995eae1be 100644 --- a/wadsrc/static/zscript/doom/painelemental.txt +++ b/wadsrc/static/zscript/doom/painelemental.txt @@ -62,6 +62,8 @@ class PainElemental : Actor extend class Actor { + private native bool compat_limitpain(); + // // A_PainShootSkull // Spawn a lost soul and launch it at the target @@ -86,7 +88,7 @@ extend class Actor } // [RH] make this optional - if (limit < 0 && compat_limitpain) + if (limit < 0 && compat_limitpain()) limit = 21; if (limit > 0) diff --git a/wadsrc/static/zscript/doom/revenant.txt b/wadsrc/static/zscript/doom/revenant.txt index 91363edb84..6fddcdb164 100644 --- a/wadsrc/static/zscript/doom/revenant.txt +++ b/wadsrc/static/zscript/doom/revenant.txt @@ -225,13 +225,8 @@ extend class Actor // killough 1/18/98: this is why some missiles do not have smoke // and some do. Also, internal demos start at random gametics, thus // the bug in which revenants cause internal demos to go out of sync. - // - // killough 3/6/98: fix revenant internal demo bug by subtracting - // levelstarttic from gametic: - // - // [RH] level.time is always 0-based, so nothing special to do here. - if (level.time & 3) return; + if (level.maptime & 3) return; // spawn a puff of smoke behind the rocket SpawnPuff ("BulletPuff", pos, angle, angle, 3); diff --git a/wadsrc/static/zscript/heretic/ironlich.txt b/wadsrc/static/zscript/heretic/ironlich.txt index 052e9119ed..a27facce83 100644 --- a/wadsrc/static/zscript/heretic/ironlich.txt +++ b/wadsrc/static/zscript/heretic/ironlich.txt @@ -310,7 +310,7 @@ class Whirlwind : Actor target.Vel.Y += Random2[WhirlwindDamage]() / 64.; } - if ((level.time & 16) && !target.bBoss && !target.bDontThrust) + if ((Level.maptime & 16) && !target.bBoss && !target.bDontThrust) { randVal = min(160, random[WhirlwindSeek]()); target.Vel.Z += randVal / 32.; @@ -319,7 +319,7 @@ class Whirlwind : Actor target.Vel.Z = 12; } } - if (!(level.time & 7)) + if (!(Level.maptime & 7)) { target.DamageMobj (null, target, 3, 'Melee'); } diff --git a/wadsrc/static/zscript/hexen/clericholy.txt b/wadsrc/static/zscript/hexen/clericholy.txt index f58194ab97..b6561795d8 100644 --- a/wadsrc/static/zscript/hexen/clericholy.txt +++ b/wadsrc/static/zscript/hexen/clericholy.txt @@ -461,7 +461,7 @@ class HolySpirit : Actor } VelFromAngle(); - if (!(level.time&15) + if (!(Level.maptime&15) || pos.z > target.pos.z + target.height || pos.z + height < target.pos.z) { @@ -503,7 +503,7 @@ class HolySpirit : Actor if (tracer) { CHolySeekerMissile (args[0], args[0]*2.); - if (!((level.time+7)&15)) + if (!((Level.maptime+7)&15)) { args[0] = 5+(random[HolySeeker]()/20); } diff --git a/wadsrc/static/zscript/hexen/dragon.txt b/wadsrc/static/zscript/hexen/dragon.txt index bf5d91b169..164d76deee 100644 --- a/wadsrc/static/zscript/hexen/dragon.txt +++ b/wadsrc/static/zscript/hexen/dragon.txt @@ -135,7 +135,7 @@ class Dragon : Actor { continue; } - ActorIterator iter = ActorIterator.Create(targ.args[i]); + ActorIterator iter = Level.CreateActorIterator(targ.args[i]); mo = iter.Next (); if (mo == null) { @@ -171,7 +171,7 @@ class Dragon : Actor { i = (random[DragonSeek]() >> 2) % 5; } while(!targ.args[i]); - ActorIterator iter = ActorIterator.Create(targ.args[i]); + ActorIterator iter = Level.CreateActorIterator(targ.args[i]); tracer = iter.Next (); } } @@ -186,7 +186,7 @@ class Dragon : Actor void A_DragonInitFlight() { - ActorIterator iter = ActorIterator.Create(tid); + ActorIterator iter = Level.CreateActorIterator(tid); do { // find the first tid identical to the dragon's tid diff --git a/wadsrc/static/zscript/hexen/korax.txt b/wadsrc/static/zscript/hexen/korax.txt index 8c711ad8ff..e19ff04570 100644 --- a/wadsrc/static/zscript/hexen/korax.txt +++ b/wadsrc/static/zscript/hexen/korax.txt @@ -129,7 +129,7 @@ class Korax : Actor { if ((!special2) && (health <= (SpawnHealth()/2))) { - ActorIterator it = ActorIterator.Create(KORAX_FIRST_TELEPORT_TID); + ActorIterator it = Level.CreateActorIterator(KORAX_FIRST_TELEPORT_TID); Actor spot = it.Next (); if (spot != null) { @@ -158,7 +158,7 @@ class Korax : Actor { if (random[KoraxChase]() < 10) { - ActorIterator it = ActorIterator.Create(KORAX_TELEPORT_TID); + ActorIterator it = Level.CreateActorIterator(KORAX_TELEPORT_TID); Actor spot; if (tracer != null) @@ -430,7 +430,7 @@ class KoraxSpirit : Actor } VelFromAngle(); - if (!(level.time&15) + if (!(Level.maptime&15) || pos.z > target.pos.z + target.Default.Height || pos.z + height < target.pos.z) { diff --git a/wadsrc/static/zscript/hexen/magelightning.txt b/wadsrc/static/zscript/hexen/magelightning.txt index a4b23706be..5ece4fd80f 100644 --- a/wadsrc/static/zscript/hexen/magelightning.txt +++ b/wadsrc/static/zscript/hexen/magelightning.txt @@ -121,7 +121,7 @@ class Lightning : Actor thing.Vel.X += Vel.X / 16; thing.Vel.Y += Vel.Y / 16; } - if ((!thing.player && !thing.bBoss) || !(level.time&1)) + if ((!thing.player && !thing.bBoss) || !(Level.maptime & 1)) { thing.DamageMobj(self, target, 3, 'Electric'); A_PlaySound(AttackSound, CHAN_WEAPON|CHAN_NOSTOP, 1, false); @@ -411,7 +411,7 @@ class LightningZap : Actor { lmo.tracer = thing; } - if (!(level.time&3)) + if (!(Level.maptime&3)) { lmo.health--; } diff --git a/wadsrc/static/zscript/hexen/teleportother.txt b/wadsrc/static/zscript/hexen/teleportother.txt index f7be0ebff7..93608470ed 100644 --- a/wadsrc/static/zscript/hexen/teleportother.txt +++ b/wadsrc/static/zscript/hexen/teleportother.txt @@ -157,12 +157,12 @@ class TelOtherFX1 : Actor // //=========================================================================== - private static void P_TeleportToPlayerStarts (Actor victim) + private void P_TeleportToPlayerStarts (Actor victim) { Vector3 dest; double destAngle; - [dest, destAngle] = G_PickPlayerStart(0, PPS_FORCERANDOM | PPS_NOBLOCKINGCHECK); + [dest, destAngle] = level.PickPlayerStart(0, PPS_FORCERANDOM | PPS_NOBLOCKINGCHECK); dest.Z = ONFLOORZ; victim.Teleport ((dest.xy, ONFLOORZ), destangle, TELF_SOURCEFOG | TELF_DESTFOG); } @@ -178,7 +178,7 @@ class TelOtherFX1 : Actor Vector3 dest; double destAngle; - [dest, destAngle] = G_PickDeathmatchStart(); + [dest, destAngle] = level.PickDeathmatchStart(); if (destAngle < 65536) victim.Teleport((dest.xy, ONFLOORZ), destangle, TELF_SOURCEFOG | TELF_DESTFOG); else P_TeleportToPlayerStarts(victim); } diff --git a/wadsrc/static/zscript/inventory/inv_misc.txt b/wadsrc/static/zscript/inventory/inv_misc.txt index 7aa60227dd..f401a3e2db 100644 --- a/wadsrc/static/zscript/inventory/inv_misc.txt +++ b/wadsrc/static/zscript/inventory/inv_misc.txt @@ -125,7 +125,7 @@ class PuzzleItem : Inventory } // [RH] Always play the sound if the use fails. Owner.A_PlaySound ("*puzzfail", CHAN_VOICE); - if (Owner.CheckLocalView (consoleplayer)) + if (Owner.CheckLocalView()) { Console.MidPrint ("SmallFont", PuzzFailMessage, true); } diff --git a/wadsrc/static/zscript/inventory/inventory.txt b/wadsrc/static/zscript/inventory/inventory.txt index 9c977d36b1..2460c0639a 100644 --- a/wadsrc/static/zscript/inventory/inventory.txt +++ b/wadsrc/static/zscript/inventory/inventory.txt @@ -766,7 +766,7 @@ class Inventory : Actor toucher = player.mo; } - bool localview = toucher.CheckLocalView(consoleplayer); + bool localview = toucher.CheckLocalView(); bool res; [res, toucher] = CallTryPickup(toucher); @@ -1050,7 +1050,7 @@ class Inventory : Actor } /* else if ((ItemFlags & IF_FANCYPICKUPSOUND) && - (toucher == NULL || toucher->CheckLocalView(consoleplayer))) + (toucher == NULL || toucher->CheckLocalView())) { atten = ATTN_NONE; } @@ -1060,7 +1060,7 @@ class Inventory : Actor atten = ATTN_NORM; } - if (toucher != NULL && toucher.CheckLocalView(consoleplayer)) + if (toucher != NULL && toucher.CheckLocalView()) { chan = CHAN_PICKUP|CHAN_NOPAUSE; } diff --git a/wadsrc/static/zscript/inventory/powerups.txt b/wadsrc/static/zscript/inventory/powerups.txt index ab256380e1..8cebd0ae09 100644 --- a/wadsrc/static/zscript/inventory/powerups.txt +++ b/wadsrc/static/zscript/inventory/powerups.txt @@ -364,7 +364,7 @@ class PowerInvulnerable : Powerup // Don't mess with the translucency settings if an // invisibility powerup is active. let alpha = Owner.Alpha; - if (!(level.time & 7) && alpha > 0 && alpha < 1) + if (!(Level.maptime & 7) && alpha > 0 && alpha < 1) { if (alpha == HX_SHADOW) { @@ -376,7 +376,7 @@ class PowerInvulnerable : Powerup Owner.bNonShootable = true; } } - if (!(level.time & 31)) + if (!(Level.maptime & 31)) { if (alpha == 0) { @@ -806,7 +806,7 @@ class PowerMask : PowerIronFeet override void DoEffect () { Super.DoEffect (); - if (!(level.time & 0x3f)) + if (!(Level.maptime & 0x3f)) { Owner.A_PlaySound ("misc/mask", CHAN_AUTO); } @@ -894,7 +894,7 @@ class PowerTorch : PowerLightAmp { Powerup.DoEffect (); - if (!(level.time & 16) && Owner.player != NULL) + if (!(Level.maptime & 16) && Owner.player != NULL) { if (NewTorch != 0) { @@ -1014,7 +1014,7 @@ class PowerFlight : Powerup } TextureID picnum = TexMan.CheckForTexture ("SPFLY0", TexMan.Type_MiscPatch); - int frame = (level.time/3) & 15; + int frame = (Level.maptime/3) & 15; if (!picnum.isValid()) { @@ -1191,7 +1191,7 @@ class PowerSpeed : Powerup if (NoTrail) return; - if (level.time & 1) + if (Level.maptime & 1) return; // Check if another speed item is present to avoid multiple drawing of the speed trail. @@ -1529,9 +1529,9 @@ class PowerTimeFreezer : Powerup EffectTics++; } // Make sure the effect starts and ends on an even tic. - if ((level.time & 1) == 0) + if ((Level.maptime & 1) == 0) { - level.frozen = true;; + Level.SetFrozen(true); } else { @@ -1553,14 +1553,14 @@ class PowerTimeFreezer : Powerup // [RH] Do not change LEVEL_FROZEN on odd tics, or the Revenant's tracer // will get thrown off. // [ED850] Don't change it if the player is predicted either. - if (level.time & 1 || (Owner != null && Owner.player != null && Owner.player.cheats & CF_PREDICTING)) + if (Level.maptime & 1 || (Owner != null && Owner.player != null && Owner.player.cheats & CF_PREDICTING)) { return; } // [RH] The "blinking" can't check against EffectTics exactly or it will // never happen, because InitEffect ensures that EffectTics will always - // be odd when level.time is even. - level.frozen = ( EffectTics > 4*32 + // be odd when Level.maptime is even. + Level.SetFrozen ( EffectTics > 4*32 || (( EffectTics > 3*32 && EffectTics <= 4*32 ) && ((EffectTics + 1) & 15) != 0 ) || (( EffectTics > 2*32 && EffectTics <= 3*32 ) && ((EffectTics + 1) & 7) != 0 ) || (( EffectTics > 32 && EffectTics <= 2*32 ) && ((EffectTics + 1) & 3) != 0 ) @@ -1598,7 +1598,7 @@ class PowerTimeFreezer : Powerup } // No, so allow other actors to move about freely once again. - level.frozen = false; + Level.SetFrozen(false); // Also, turn the music back on. S_ResumeSound(false); @@ -1791,7 +1791,7 @@ class PowerRegeneration : Powerup override void DoEffect() { Super.DoEffect(); - if (Owner != null && Owner.health > 0 && (level.time & 31) == 0) + if (Owner != null && Owner.health > 0 && (Level.maptime & 31) == 0) { if (Owner.GiveBody(int(Strength))) { diff --git a/wadsrc/static/zscript/inventory/stateprovider.txt b/wadsrc/static/zscript/inventory/stateprovider.txt index bed30ffd5e..5cfbadc76b 100644 --- a/wadsrc/static/zscript/inventory/stateprovider.txt +++ b/wadsrc/static/zscript/inventory/stateprovider.txt @@ -248,7 +248,7 @@ class StateProvider : Inventory // //========================================================================== - action void A_CustomPunch(int damage, bool norandom = false, int flags = CPF_USEAMMO, class pufftype = "BulletPuff", double range = 0, double lifesteal = 0, int lifestealmax = 0, class armorbonustype = "ArmorBonus", sound MeleeSound = 0, sound MissSound = "") + action void A_CustomPunch(int damage, bool norandom = false, int flags = CPF_USEAMMO, class pufftype = "BulletPuff", double range = 0, double lifesteal = 0, int lifestealmax = 0, class armorbonustype = "ArmorBonus", sound MeleeSound = 0, sound MissSound = "") { let player = self.player; if (!player) return; diff --git a/wadsrc/static/zscript/mapdata.txt b/wadsrc/static/zscript/mapdata.txt index 53a6b4bad7..4a1154febf 100644 --- a/wadsrc/static/zscript/mapdata.txt +++ b/wadsrc/static/zscript/mapdata.txt @@ -25,9 +25,7 @@ struct SectorPortal native play native Sector mDestination; native Vector2 mDisplacement; native double mPlaneZ; - native Actor mSkybox; - - native static uint GetSkyboxPortal(Actor actor); + native Actor mSkybox; }; @@ -370,7 +368,10 @@ struct Sector native play native double, Sector, F3DFloor NextLowestFloorAt(double x, double y, double z, int flags = 0, double steph = 0); native void RemoveForceField(); - native static clearscope Sector PointInSector(Vector2 pt); + deprecated("3.8") static clearscope Sector PointInSector(Vector2 pt) + { + return level.PointInSector(pt); + } native bool PlaneMoving(int pos); native int GetFloorLight(); @@ -531,13 +532,19 @@ struct Sector native play class SectorTagIterator : Object native { - native static SectorTagIterator Create(int tag, line defline = null); + deprecated("3.8") static SectorTagIterator Create(int tag, line defline = null) + { + return level.CreateSectorTagIterator(tag, defline); + } native int Next(); native int NextCompat(bool compat, int secnum); } class LineIdIterator : Object native { - native static LineIdIterator Create(int tag); + deprecated("3.8") static LineIdIterator Create(int tag) + { + return level.CreateLineIdIterator(tag); + } native int Next(); } diff --git a/wadsrc/static/zscript/menu/conversationmenu.txt b/wadsrc/static/zscript/menu/conversationmenu.txt index 3474753e8f..02201a0ddf 100644 --- a/wadsrc/static/zscript/menu/conversationmenu.txt +++ b/wadsrc/static/zscript/menu/conversationmenu.txt @@ -509,7 +509,7 @@ class ConversationMenu : Menu override void Ticker() { // [CW] Freeze the game depending on MAPINFO options. - if (ConversationPauseTic < gametic && !multiplayer && !level.no_dlg_freeze) + if (ConversationPauseTic < gametic && !multiplayer && !Level.no_dlg_freeze) { menuactive = Menu.On; } diff --git a/wadsrc/static/zscript/menu/readthis.txt b/wadsrc/static/zscript/menu/readthis.txt index 604fb489e0..58904b0f4e 100644 --- a/wadsrc/static/zscript/menu/readthis.txt +++ b/wadsrc/static/zscript/menu/readthis.txt @@ -57,9 +57,9 @@ class ReadThisMenu : GenericMenu TextureID tex, prevpic; // Did the mapper choose a custom help page via MAPINFO? - if (level.F1Pic.Length() != 0) + if (Level.F1Pic.Length() != 0) { - tex = TexMan.CheckForTexture(level.F1Pic, TexMan.Type_MiscPatch); + tex = TexMan.CheckForTexture(Level.F1Pic, TexMan.Type_MiscPatch); mScreen = 1; } @@ -98,7 +98,7 @@ class ReadThisMenu : GenericMenu MenuSound("menu/choose"); mScreen++; mInfoTic = gametic; - if (level.F1Pic.Length() != 0 || mScreen > gameinfo.infoPages.Size()) + if (Level.F1Pic.Length() != 0 || mScreen > gameinfo.infoPages.Size()) { Close(); } diff --git a/wadsrc/static/zscript/raven/artitele.txt b/wadsrc/static/zscript/raven/artitele.txt index 0e65fe051f..0400193fe7 100644 --- a/wadsrc/static/zscript/raven/artitele.txt +++ b/wadsrc/static/zscript/raven/artitele.txt @@ -30,11 +30,11 @@ class ArtiTeleport : Inventory if (deathmatch) { - [dest, destAngle] = G_PickDeathmatchStart(); + [dest, destAngle] = level.PickDeathmatchStart(); } else { - [dest, destAngle] = G_PickPlayerStart(Owner.PlayerNumber()); + [dest, destAngle] = level.PickPlayerStart(Owner.PlayerNumber()); } dest.Z = ONFLOORZ; Owner.Teleport (dest, destAngle, TELF_SOURCEFOG | TELF_DESTFOG); diff --git a/wadsrc/static/zscript/scriptutil/scriptutil.txt b/wadsrc/static/zscript/scriptutil/scriptutil.txt index b7fae43520..26f1a2b9de 100644 --- a/wadsrc/static/zscript/scriptutil/scriptutil.txt +++ b/wadsrc/static/zscript/scriptutil/scriptutil.txt @@ -151,11 +151,11 @@ class ScriptUtil play // //========================================================================== - static void SetMarineWeapon(Actor activator, int tid, int marineweapontype) + static void SetMarineWeapon(LevelLocals Level, Actor activator, int tid, int marineweapontype) { if (tid != 0) { - let it = ActorIterator.Create(tid, 'ScriptedMarine'); + let it = Level.CreateActorIterator(tid, 'ScriptedMarine'); ScriptedMarine marine; while ((marine = ScriptedMarine(it.Next())) != NULL) @@ -179,13 +179,13 @@ class ScriptUtil play // //========================================================================== - static void SetMarineSprite(Actor activator, int tid, class type) + static void SetMarineSprite(LevelLocals Level, Actor activator, int tid, class type) { if (type != NULL) { if (tid != 0) { - let it = ActorIterator.Create(tid, 'ScriptedMarine'); + let it = Level.CreateActorIterator(tid, 'ScriptedMarine'); ScriptedMarine marine; while ((marine = ScriptedMarine(it.Next())) != NULL) diff --git a/wadsrc/static/zscript/shared/camera.txt b/wadsrc/static/zscript/shared/camera.txt index f19d90d253..91923b1335 100644 --- a/wadsrc/static/zscript/shared/camera.txt +++ b/wadsrc/static/zscript/shared/camera.txt @@ -66,7 +66,7 @@ class AimingCamera : SecurityCamera MaxPitchChange = double(changepitch / TICRATE); Range /= TICRATE; - ActorIterator it = ActorIterator.Create(args[3]); + ActorIterator it = Level.CreateActorIterator(args[3]); tracer = it.Next (); if (tracer == NULL) { @@ -82,7 +82,7 @@ class AimingCamera : SecurityCamera { if (tracer == NULL && args[3] != 0) { // Recheck, in case something with this TID was created since the last time. - ActorIterator it = ActorIterator.Create(args[3]); + ActorIterator it = Level.CreateActorIterator(args[3]); tracer = it.Next (); } if (tracer != NULL) diff --git a/wadsrc/static/zscript/shared/fastprojectile.txt b/wadsrc/static/zscript/shared/fastprojectile.txt index 9a3a18ad00..da0c003e1e 100644 --- a/wadsrc/static/zscript/shared/fastprojectile.txt +++ b/wadsrc/static/zscript/shared/fastprojectile.txt @@ -50,14 +50,8 @@ class FastProjectile : Actor ClearInterpolation(); double oldz = pos.Z; - if (!bNoTimeFreeze) - { - //Added by MC: Freeze mode. - if (globalfreeze || level.Frozen) - { - return; - } - } + if (isFrozen()) + return; // [RH] Ripping is a little different than it was in Hexen FCheckPosition tm; diff --git a/wadsrc/static/zscript/shared/movingcamera.txt b/wadsrc/static/zscript/shared/movingcamera.txt index 59a2ee728f..3a254a6152 100644 --- a/wadsrc/static/zscript/shared/movingcamera.txt +++ b/wadsrc/static/zscript/shared/movingcamera.txt @@ -74,7 +74,7 @@ class InterpolationPoint : Actor me.bVisited = true; - let iterator = ActorIterator.Create(me.args[3] + 256 * me.args[4], "InterpolationPoint"); + let iterator = Level.CreateActorIterator(me.args[3] + 256 * me.args[4], "InterpolationPoint"); me.Next = InterpolationPoint(iterator.Next ()); if (me.Next == me) // Don't link to self @@ -186,7 +186,7 @@ class PathFollower : Actor override void PostBeginPlay () { // Find first node of path - let iterator = ActorIterator.Create(args[0] + 256 * args[1], "InterpolationPoint"); + let iterator = Level.CreateActorIterator(args[0] + 256 * args[1], "InterpolationPoint"); let node = InterpolationPoint(iterator.Next ()); InterpolationPoint prevnode; @@ -267,12 +267,12 @@ class PathFollower : Actor bJustStepped = false; if (CurrNode.args[2]) { - HoldTime = level.time + CurrNode.args[2] * TICRATE / 8; + HoldTime = Level.maptime + CurrNode.args[2] * TICRATE / 8; SetXYZ(CurrNode.Pos); } } - if (HoldTime > level.time) + if (HoldTime > Level.maptime) return; // Splines must have a previous node. @@ -310,7 +310,7 @@ class PathFollower : Actor void NewNode () { - let iterator = ActorIterator.Create(CurrNode.tid, "InterpolationSpecial"); + let iterator = Level.CreateActorIterator(CurrNode.tid, "InterpolationSpecial"); InterpolationSpecial spec; while ( (spec = InterpolationSpecial(iterator.Next ())) ) @@ -440,7 +440,7 @@ class ActorMover : PathFollower { Super.PostBeginPlay (); - let iterator = ActorIterator.Create(args[3]); + let iterator = Level.CreateActorIterator(args[3]); tracer = iterator.Next (); if (tracer == null) @@ -552,7 +552,7 @@ class MovingCamera : PathFollower Activator = null; if (args[3] != 0) { - let iterator = ActorIterator.Create(args[3]); + let iterator = Level.CreateActorIterator(args[3]); tracer = iterator.Next (); if (tracer == null) { diff --git a/wadsrc/static/zscript/shared/player.txt b/wadsrc/static/zscript/shared/player.txt index 5bc9d38185..9cf20b4f37 100644 --- a/wadsrc/static/zscript/shared/player.txt +++ b/wadsrc/static/zscript/shared/player.txt @@ -334,13 +334,6 @@ class PlayerPawn : Actor { let player = self.player; - // [SO] 9/2/02: People were able to do an awful lot of damage - // when they were observers... - if (player.Bot == null && bot_observer) - { - return; - } - let weapn = player.ReadyWeapon; if (weapn == null || !weapn.CheckAmmo (Weapon.PrimaryFire, true)) { @@ -369,13 +362,6 @@ class PlayerPawn : Actor virtual void FireWeaponAlt (State stat) { - // [SO] 9/2/02: People were able to do an awful lot of damage - // when they were observers... - if (player.Bot == null && bot_observer) - { - return; - } - let weapn = player.ReadyWeapon; if (weapn == null || weapn.FindState('AltFire') == null || !weapn.CheckAmmo (Weapon.AltFire, true)) { @@ -585,7 +571,7 @@ class PlayerPawn : Actor { if (player.health > 0) { - angle = level.time / (120 * TICRATE / 35.) * 360.; + angle = Level.maptime / (120 * TICRATE / 35.) * 360.; bob = player.GetStillBob() * sin(angle); } else @@ -595,7 +581,7 @@ class PlayerPawn : Actor } else { - angle = level.time / (20 * TICRATE / 35.) * 360.; + angle = Level.maptime / (20 * TICRATE / 35.) * 360.; bob = player.bob * sin(angle) * (waterlevel > 1 ? 0.25f : 0.5f); } @@ -734,7 +720,7 @@ class PlayerPawn : Actor if ((player.cmd.buttons & BT_USE || ((multiplayer || alwaysapplydmflags) && sv_forcerespawn)) && !sv_norespawn) { - if (level.time >= player.respawn_time || ((player.cmd.buttons & BT_USE) && player.Bot == NULL)) + if (Level.maptime >= player.respawn_time || ((player.cmd.buttons & BT_USE) && player.Bot == NULL)) { player.cls = NULL; // Force a new class if the player is using a random class player.playerstate = (multiplayer || level.AllowRespawn || sv_singleplayerrespawn || G_SkillPropertyInt(SKILLP_PlayerRespawn)) ? PST_REBORN : PST_ENTER; @@ -1518,7 +1504,7 @@ class PlayerPawn : Actor virtual void CheckPoison() { let player = self.player; - if (player.poisoncount && !(level.time & 15)) + if (player.poisoncount && !(Level.maptime & 15)) { player.poisoncount -= 5; if (player.poisoncount < 0) @@ -1542,7 +1528,7 @@ class PlayerPawn : Actor { let player = self.player; int maxhealth = GetMaxHealth(true); - if ((level.time % TICRATE) == 0 && player.health > maxhealth) + if ((Level.maptime % TICRATE) == 0 && player.health > maxhealth) { if (player.health - 5 < maxhealth) player.health = maxhealth; @@ -1570,9 +1556,9 @@ class PlayerPawn : Actor { ResetAirSupply(); } - else if (player.air_finished <= level.time && !(level.time & 31)) + else if (player.air_finished <= Level.maptime && !(Level.maptime & 31)) { - DamageMobj(NULL, NULL, 2 + ((level.time - player.air_finished) / TICRATE), 'Drowning'); + DamageMobj(NULL, NULL, 2 + ((Level.maptime - player.air_finished) / TICRATE), 'Drowning'); } } } @@ -1648,7 +1634,7 @@ class PlayerPawn : Actor if (player.hazardcount) { player.hazardcount--; - if (!(level.time % player.hazardinterval) && player.hazardcount > 16*TICRATE) + if (!(Level.maptime % player.hazardinterval) && player.hazardcount > 16*TICRATE) player.mo.DamageMobj (NULL, NULL, 5, player.hazardtype); } player.mo.CheckPoison(); @@ -1899,7 +1885,7 @@ class PlayerPawn : Actor // This problem is only detectable when it's too late to do something about it... ThrowAbortException("Cannot give morph item '%s' when starting a game!", di.Name); } - } + } let weap = Weapon(item); if (weap != NULL && weap.CheckAmmo(Weapon.EitherFire, false)) { @@ -2335,7 +2321,7 @@ class PlayerPawn : Actor for (int i = 0; i < 2; i++) { // Bob the weapon based on movement speed. ([SP] And user's bob speed setting) - double angle = (BobSpeed * player.GetWBobSpeed() * 35 / TICRATE*(level.time - 1 + i)) * (360. / 8192.); + double angle = (BobSpeed * player.GetWBobSpeed() * 35 / TICRATE*(Level.maptime - 1 + i)) * (360. / 8192.); // [RH] Smooth transitions between bobbing and not-bobbing frames. // This also fixes the bug where you can "stick" a weapon off-center by @@ -2433,13 +2419,13 @@ class PlayerPawn : Actor virtual bool ResetAirSupply (bool playgasp = true) { let player = self.player; - bool wasdrowning = (player.air_finished < level.time); + bool wasdrowning = (player.air_finished < Level.maptime); if (playgasp && wasdrowning) { A_PlaySound("*gasp", CHAN_VOICE); } - if (level.airsupply > 0 && AirCapacity > 0) player.air_finished = level.time + int(level.airsupply * AirCapacity); + if (Level.airsupply > 0 && AirCapacity > 0) player.air_finished = Level.maptime + int(Level.airsupply * AirCapacity); else player.air_finished = int.max; return wasdrowning; } @@ -2766,7 +2752,7 @@ struct PlayerInfo native play // self is what internally is known as player_t return gamestate == GS_TITLELEVEL || (cheats & CF_TOTALLYFROZEN) || - (level.frozen && timefreezer == 0); + mo.isFrozen(); } void Uncrouch() diff --git a/wadsrc/static/zscript/shared/player_inventory.txt b/wadsrc/static/zscript/shared/player_inventory.txt index bd01a59a81..ca622707c9 100644 --- a/wadsrc/static/zscript/shared/player_inventory.txt +++ b/wadsrc/static/zscript/shared/player_inventory.txt @@ -210,7 +210,7 @@ extend class PlayerPawn { // You can't use items if you're totally frozen return false; } - if ((level.FROZEN) && (player == NULL || player.timefreezer == 0)) + if (isFrozen()) { // Time frozen return false; diff --git a/wadsrc/static/zscript/shared/skies.txt b/wadsrc/static/zscript/shared/skies.txt index 0bb0a78ef2..f80ed8304e 100644 --- a/wadsrc/static/zscript/shared/skies.txt +++ b/wadsrc/static/zscript/shared/skies.txt @@ -109,7 +109,7 @@ class SkyPicker : Actor } else { - let it = ActorIterator.Create(args[0], "SkyViewpoint"); + let it = Level.CreateActorIterator(args[0], "SkyViewpoint"); box = it.Next (); } @@ -119,7 +119,7 @@ class SkyPicker : Actor } else { - int boxindex = SectorPortal.GetSkyboxPortal(box); + int boxindex = level.GetSkyboxPortal(box); // Do not override special portal types, only regular skies. if (0 == (args[1] & 2)) { diff --git a/wadsrc/static/zscript/shared/specialspot.txt b/wadsrc/static/zscript/shared/specialspot.txt index fdf357b2a8..fd6192d877 100644 --- a/wadsrc/static/zscript/shared/specialspot.txt +++ b/wadsrc/static/zscript/shared/specialspot.txt @@ -1,4 +1,4 @@ -class SpotState : Object native +class SpotState : Object native play { deprecated ("3.8") static SpotState GetSpotState(bool create = true) { diff --git a/wadsrc/static/zscript/statscreen/statscreen.txt b/wadsrc/static/zscript/statscreen/statscreen.txt index 5679d8e858..7edde60c42 100644 --- a/wadsrc/static/zscript/statscreen/statscreen.txt +++ b/wadsrc/static/zscript/statscreen/statscreen.txt @@ -403,12 +403,6 @@ class StatusScreen abstract play version("2.5") virtual void End () { CurState = LeavingIntermission; - - //Added by mc - if (deathmatch) - { - level.RemoveAllBots (consoleplayer != Net_Arbitrator); - } } //==================================================================== @@ -467,7 +461,7 @@ class StatusScreen abstract play version("2.5") if (cnt == 0) { End(); - level.WorldDone(); + Level.WorldDone(); } } @@ -483,7 +477,7 @@ class StatusScreen abstract play version("2.5") { // Last map in episode - there is no next location! End(); - level.WorldDone(); + Level.WorldDone(); return; } @@ -614,7 +608,7 @@ class StatusScreen abstract play version("2.5") virtual void StartMusic() { - level.SetInterMusic(wbs.next); + Level.SetInterMusic(wbs.next); } //==================================================================== @@ -712,7 +706,7 @@ class StatusScreen abstract play version("2.5") Par = TexMan.CheckForTexture("WIPAR", TexMan.Type_MiscPatch); // "par" // Use the local level structure which can be overridden by hubs - lnametexts[0] = level.LevelName; + lnametexts[0] = Level.LevelName; lnametexts[1] = wbstartstruct.nextname; bg = InterBackground.Create(wbs); diff --git a/wadsrc/static/zscript/statusbar/alt_hud.txt b/wadsrc/static/zscript/statusbar/alt_hud.txt index ccc9b568d5..f8befa09f3 100644 --- a/wadsrc/static/zscript/statusbar/alt_hud.txt +++ b/wadsrc/static/zscript/statusbar/alt_hud.txt @@ -31,11 +31,6 @@ ** */ -/* - -DVector2 AM_GetPosition(); -*/ - class AltHud ui { TextureID tnt1a0; @@ -205,17 +200,17 @@ class AltHud ui // work in cooperative hub games if (hud_showsecrets) { - DrawStatLine(x, y, "S:", String.Format("%i/%i ", multiplayer? CPlayer.secretcount : level.found_secrets, level.total_secrets)); + DrawStatLine(x, y, "S:", String.Format("%i/%i ", multiplayer? CPlayer.secretcount : Level.found_secrets, Level.total_secrets)); } if (hud_showitems) { - DrawStatLine(x, y, "I:", String.Format("%i/%i ", multiplayer? CPlayer.itemcount : level.found_items, level.total_items)); + DrawStatLine(x, y, "I:", String.Format("%i/%i ", multiplayer? CPlayer.itemcount : Level.found_items, Level.total_items)); } if (hud_showmonsters) { - DrawStatLine(x, y, "K:", String.Format("%i/%i ", multiplayer? CPlayer.killcount : level.killed_monsters, level.total_monsters)); + DrawStatLine(x, y, "K:", String.Format("%i/%i ", multiplayer? CPlayer.killcount : Level.killed_monsters, Level.total_monsters)); } } } @@ -740,17 +735,17 @@ class AltHud ui else { pos.xy = Level.GetAutomapPosition(); - pos.z = Sector.PointInSector(pos.xy).floorplane.ZatPoint(pos.xy); + pos.z = Level.PointInSector(pos.xy).floorplane.ZatPoint(pos.xy); } int xpos = hudwidth - SmallFont.StringWidth("X: -00000")-6; int ypos = 18; - screen.DrawText(SmallFont, hudcolor_titl, hudwidth - 6 - SmallFont.StringWidth(level.MapName), ypos, level.MapName, + screen.DrawText(SmallFont, hudcolor_titl, hudwidth - 6 - SmallFont.StringWidth(Level.MapName), ypos, Level.MapName, DTA_KeepRatio, true, DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight); - screen.DrawText(SmallFont, hudcolor_titl, hudwidth - 6 - SmallFont.StringWidth(level.LevelName), ypos + h, level.LevelName, + screen.DrawText(SmallFont, hudcolor_titl, hudwidth - 6 - SmallFont.StringWidth(Level.LevelName), ypos + h, Level.LevelName, DTA_KeepRatio, true, DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight); @@ -793,10 +788,10 @@ class AltHud ui { int timeTicks = hud_showtime < 4 - ? level.maptime + ? Level.maptime : (hud_showtime < 6 - ? level.time - : level.totaltime); + ? Level.time + : Level.totaltime); timeSeconds = Thinker.Tics2Seconds(timeTicks); } else @@ -815,7 +810,7 @@ class AltHud ui if (showMillis) { - int millis = (level.time % Thinker.TICRATE) * (1000 / Thinker.TICRATE); + int millis = (Level.time % Thinker.TICRATE) * (1000 / Thinker.TICRATE); timeString = String.Format("%02i:%02i:%02i.%03i", hours, minutes, seconds, millis); } else if (showSeconds) @@ -946,23 +941,23 @@ class AltHud ui if (am_showtotaltime) { - DrawTimeString(SmallFont, hudcolor_ttim, level.totaltime, hudwidth-2, bottom, 1); + DrawTimeString(SmallFont, hudcolor_ttim, Level.totaltime, hudwidth-2, bottom, 1); bottom -= fonth; } if (am_showtime) { - if (level.clusterflags & level.CLUSTER_HUB) + if (Level.clusterflags & Level.CLUSTER_HUB) { - DrawTimeString(SmallFont, hudcolor_time, level.time, hudwidth-2, bottom, 1); + DrawTimeString(SmallFont, hudcolor_time, Level.time, hudwidth-2, bottom, 1); bottom -= fonth; } // Single level time for hubs - DrawTimeString(SmallFont, hudcolor_ltim, level.maptime, hudwidth-2, bottom, 1); + DrawTimeString(SmallFont, hudcolor_ltim, Level.maptime, hudwidth-2, bottom, 1); } - screen.DrawText(SmallFont, 0, 1, hudheight - fonth - 1, level.FormatMapName(hudcolor_titl), + screen.DrawText(SmallFont, 0, 1, hudheight - fonth - 1, Level.FormatMapName(hudcolor_titl), DTA_KeepRatio, true, DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight); diff --git a/wadsrc/static/zscript/statusbar/doom_sbar.txt b/wadsrc/static/zscript/statusbar/doom_sbar.txt index 7eddf319ee..bd2681a053 100644 --- a/wadsrc/static/zscript/statusbar/doom_sbar.txt +++ b/wadsrc/static/zscript/statusbar/doom_sbar.txt @@ -105,7 +105,7 @@ class DoomStatusBar : BaseStatusBar DrawImage("STFBANY", (143, 168), DI_ITEM_OFFSETS|DI_TRANSLATABLE); } - if (CPlayer.mo.InvSel != null && !level.NoInventoryBar) + if (CPlayer.mo.InvSel != null && !Level.NoInventoryBar) { DrawInventoryIcon(CPlayer.mo.InvSel, (160, 198)); if (CPlayer.mo.InvSel.Amount > 1) @@ -153,7 +153,7 @@ class DoomStatusBar : BaseStatusBar DrawString(mHUDFont, FormatNumber(ammotype2.Amount, 3), (-30, invY), DI_TEXT_ALIGN_RIGHT); invY -= 20; } - if (!isInventoryBarVisible() && !level.NoInventoryBar && CPlayer.mo.InvSel != null) + if (!isInventoryBarVisible() && !Level.NoInventoryBar && CPlayer.mo.InvSel != null) { DrawInventoryIcon(CPlayer.mo.InvSel, (-14, invY + 17)); DrawString(mHUDFont, FormatNumber(CPlayer.mo.InvSel.Amount, 3), (-30, invY), DI_TEXT_ALIGN_RIGHT); diff --git a/wadsrc/static/zscript/statusbar/harm_sbar.txt b/wadsrc/static/zscript/statusbar/harm_sbar.txt index ebed03f929..f640bd993c 100644 --- a/wadsrc/static/zscript/statusbar/harm_sbar.txt +++ b/wadsrc/static/zscript/statusbar/harm_sbar.txt @@ -60,7 +60,7 @@ class HarmonyStatusBar : DoomStatusBar DrawString(mHUDFont, FormatNumber(ammotype2.Amount, 3), (-30, invY), DI_TEXT_ALIGN_RIGHT); invY -= 20; } - if (!isInventoryBarVisible() && !level.NoInventoryBar && CPlayer.mo.InvSel != null) + if (!isInventoryBarVisible() && !Level.NoInventoryBar && CPlayer.mo.InvSel != null) { DrawInventoryIcon(CPlayer.mo.InvSel, (-14, invY + 17)); DrawString(mHUDFont, FormatNumber(CPlayer.mo.InvSel.Amount, 3), (-30, invY), DI_TEXT_ALIGN_RIGHT); diff --git a/wadsrc/static/zscript/statusbar/heretic_sbar.txt b/wadsrc/static/zscript/statusbar/heretic_sbar.txt index 8d490444e2..38569ac936 100644 --- a/wadsrc/static/zscript/statusbar/heretic_sbar.txt +++ b/wadsrc/static/zscript/statusbar/heretic_sbar.txt @@ -43,7 +43,7 @@ class HereticStatusBar : BaseStatusBar mHealthInterpolator.Update(CPlayer.health); // wiggle the chain if it moves - if (level.time & 1) + if (Level.time & 1) { wiggle = (mHealthInterpolator.GetValue() != CPlayer.health) && Random[ChainWiggle](0, 1); } @@ -200,7 +200,7 @@ class HereticStatusBar : BaseStatusBar y -= 40; } - if (!isInventoryBarVisible() && !level.NoInventoryBar && CPlayer.mo.InvSel != null) + if (!isInventoryBarVisible() && !Level.NoInventoryBar && CPlayer.mo.InvSel != null) { // This code was changed to always fit the item into the box, regardless of alignment or sprite size. // Heretic's ARTIBOX is 30x30 pixels. diff --git a/wadsrc/static/zscript/statusbar/hexen_sbar.txt b/wadsrc/static/zscript/statusbar/hexen_sbar.txt index 35475a2582..a39244a498 100644 --- a/wadsrc/static/zscript/statusbar/hexen_sbar.txt +++ b/wadsrc/static/zscript/statusbar/hexen_sbar.txt @@ -74,7 +74,7 @@ class HexenStatusBar : BaseStatusBar DrawString(mHUDFont, FormatNumber(CPlayer.FragCount, 3), (70, -16)); } - if (!isInventoryBarVisible() && !level.NoInventoryBar && CPlayer.mo.InvSel != null) + if (!isInventoryBarVisible() && !Level.NoInventoryBar && CPlayer.mo.InvSel != null) { // This code was changed to always fit the item into the box, regardless of alignment or sprite size. // Heretic's ARTIBOX is 30x30 pixels. diff --git a/wadsrc/static/zscript/statusbar/statusbar.txt b/wadsrc/static/zscript/statusbar/statusbar.txt index a55af690e4..170e26a8d0 100644 --- a/wadsrc/static/zscript/statusbar/statusbar.txt +++ b/wadsrc/static/zscript/statusbar/statusbar.txt @@ -597,9 +597,9 @@ class BaseStatusBar native ui int GetAirTime() { if(CPlayer.mo.waterlevel < 3) - return level.airsupply; + return Level.airsupply; else - return max(CPlayer.air_finished - level.time, 0); + return max(CPlayer.air_finished - Level.time, 0); } int GetSelectedInventoryAmount() @@ -654,7 +654,7 @@ class BaseStatusBar native ui bool isInventoryBarVisible() { if (CPlayer == null) return false; - return (CPlayer.inventorytics > 0 && !level.NoInventoryBar); + return (CPlayer.inventorytics > 0 && !Level.NoInventoryBar); } //============================================================================ @@ -850,13 +850,13 @@ class BaseStatusBar native ui let width = SmallFont.StringWidth("00:00:00"); if (am_showtime) { - printtext = level.TimeFormatted(); - DrawString(mSmallFont, level.TimeFormatted(), (-textdist-width, y), 0, crdefault); + printtext = Level.TimeFormatted(); + DrawString(mSmallFont, Level.TimeFormatted(), (-textdist-width, y), 0, crdefault); y += height; } if (am_showtotaltime) { - DrawString(mSmallFont, level.TimeFormatted(true), (-textdist-width, y), 0, crdefault); + DrawString(mSmallFont, Level.TimeFormatted(true), (-textdist-width, y), 0, crdefault); } if (!deathmatch) @@ -866,25 +866,25 @@ class BaseStatusBar native ui // Draw monster count if (am_showmonsters) { - DrawString(mSmallFont, String.Format("%s\34%c %d/%d", Stringtable.Localize("$AM_MONSTERS"), crdefault+65, level.killed_monsters, level.total_monsters), (textdist, y), 0, highlight); + DrawString(mSmallFont, String.Format("%s\34%c %d/%d", Stringtable.Localize("$AM_MONSTERS"), crdefault+65, Level.killed_monsters, Level.total_monsters), (textdist, y), 0, highlight); y += height; } // Draw secret count if (am_showsecrets) { - DrawString(mSmallFont, String.Format("%s\34%c %d/%d", Stringtable.Localize("$AM_SECRETS"), crdefault+65, level.found_secrets, level.total_secrets), (textdist, y), 0, highlight); + DrawString(mSmallFont, String.Format("%s\34%c %d/%d", Stringtable.Localize("$AM_SECRETS"), crdefault+65, Level.found_secrets, Level.total_secrets), (textdist, y), 0, highlight); y += height; } // Draw item count if (am_showitems) { - DrawString(mSmallFont, String.Format("%s\34%c %d/%d", Stringtable.Localize("$AM_ITEMS"), crdefault+65, level.found_items, level.total_items), (textdist, y), 0, highlight); + DrawString(mSmallFont, String.Format("%s\34%c %d/%d", Stringtable.Localize("$AM_ITEMS"), crdefault+65, Level.found_items, Level.total_items), (textdist, y), 0, highlight); } } - String mapname = level.FormatMapName(crdefault); + String mapname = Level.FormatMapName(crdefault); BrokenLines lines = SmallFont.BreakLines(mapname, int(SCREENWIDTH / scale.X)); int numlines = lines.Count(); int finalwidth = int(SmallFont.StringWidth(lines.StringAt(numlines-1)) * scale.X); diff --git a/wadsrc/static/zscript/strife/strifefunctions.txt b/wadsrc/static/zscript/strife/strifefunctions.txt index 0757cd16de..d22b506c2b 100644 --- a/wadsrc/static/zscript/strife/strifefunctions.txt +++ b/wadsrc/static/zscript/strife/strifefunctions.txt @@ -7,7 +7,7 @@ extend class Actor void A_FLoopActiveSound() { - if (ActiveSound != 0 && !(level.time & 7)) + if (ActiveSound != 0 && !(Level.maptime & 7)) { A_PlaySound (ActiveSound, CHAN_VOICE); } diff --git a/wadsrc/static/zscript/strife/strifeitems.txt b/wadsrc/static/zscript/strife/strifeitems.txt index 65ccb7ccb7..9b6935566c 100644 --- a/wadsrc/static/zscript/strife/strifeitems.txt +++ b/wadsrc/static/zscript/strife/strifeitems.txt @@ -529,7 +529,7 @@ class Scanner : PowerupGiver { if (!level.AllMap) { - if (Owner.CheckLocalView (consoleplayer)) + if (Owner.CheckLocalView()) { Console.MidPrint("SmallFont", "$TXT_NEEDMAP"); } @@ -630,7 +630,7 @@ class RaiseAlarm : DummyStrifeItem if (dropper.target != null) { dropper.target.SoundAlert(dropper.target); - if (dropper.target.CheckLocalView(consoleplayer)) + if (dropper.target.CheckLocalView()) { Console.MidPrint(SmallFont, "$TXT_YOUFOOL"); } @@ -670,7 +670,7 @@ class CloseDoor222 : DummyStrifeItem Door_Close(222, 16); if (dropper.target != null) { - if (dropper.target.CheckLocalView(consoleplayer)) + if (dropper.target.CheckLocalView()) { Console.MidPrint(SmallFont, "$TXT_YOUREDEAD"); } diff --git a/wadsrc/static/zscript/strife/thingstoblowup.txt b/wadsrc/static/zscript/strife/thingstoblowup.txt index 8c17f88026..b3c6d636c7 100644 --- a/wadsrc/static/zscript/strife/thingstoblowup.txt +++ b/wadsrc/static/zscript/strife/thingstoblowup.txt @@ -213,7 +213,7 @@ class PowerCrystal : Actor sec.Flags |= Sector.SECF_SILENTMOVE; sec.lightlevel = 0; // Do this right with proper checks instead of just hacking the floor height. - Floor.CreateFloor(sec, Floor.floorLowerToLowest, null, 65536.); + level.CreateFloor(sec, Floor.floorLowerToLowest, null, 65536.); for (int i = 0; i < 8; ++i) diff --git a/wadsrc/static/zscript/strife/weapongrenade.txt b/wadsrc/static/zscript/strife/weapongrenade.txt index dc0958a643..9b0db47dad 100644 --- a/wadsrc/static/zscript/strife/weapongrenade.txt +++ b/wadsrc/static/zscript/strife/weapongrenade.txt @@ -296,7 +296,7 @@ class PhosphorousFire : Actor Vector2 newpos = Vec2Offset(xofs, yofs); - Sector sec = Sector.PointInSector(newpos); + Sector sec = Level.PointInSector(newpos); // Consider portals and 3D floors instead of just using the current sector's z. double floorh = sec.NextLowestFloorAt(newpos.x, newpos.y, pos.z+4, 0, MaxStepHeight); diff --git a/wadsrc_extra/static/language.enu b/wadsrc_extra/static/language.enu new file mode 100644 index 0000000000..a5780be758 --- /dev/null +++ b/wadsrc_extra/static/language.enu @@ -0,0 +1,1127 @@ +[enu default] + +// Strings from Hexen's IWAD scripts. Technically they are not needed here for English, they are mainly meant to be documentation for translating. + +TXT_ACS_map01_5_THEDO = "THE DOOR IS LOCKED"; +TXT_ACS_map02_9_GREET = "GREETINGS, MORTAL"; +TXT_ACS_map02_11_AREYO = "ARE YOU READY TO DIE?"; +TXT_ACS_map02_20_ADOOR = "A DOOR OPENED ON THE GUARDIAN OF ICE"; +TXT_ACS_map03_12_THISP = "THIS PATH IS BARRED"; +TXT_ACS_map04_9_ONEHA = "ONE HALF OF THE PUZZLE HAS BEEN SOLVED"; +TXT_ACS_map04_10_ONTHE = "ON THE SEVEN PORTALS"; +TXT_ACS_map04_11_ONETH = "ONE THIRD OF THE PUZZLE HAS BEEN SOLVED"; +TXT_ACS_map04_12_STAIR = "STAIRS HAVE RISEN ON THE SEVEN PORTALS"; +TXT_ACS_map05_6_ONETH = "ONE THIRD OF THE PUZZLE HAS BEEN SOLVED"; +TXT_ACS_map05_7_ONTHE = "ON THE SEVEN PORTALS"; +TXT_ACS_map05_8_STAIR = "STAIRS HAVE RISEN ON THE SEVEN PORTALS"; +TXT_ACS_map05_9_YOUHA = "YOU HAVE TO FIND ANOTHER SWITCH..."; +TXT_ACS_map05_10_STONE = "STONES GRIND ON THE SEVEN PORTALS"; +TXT_ACS_map08_6_ONESI = "ONE SIXTH OF THE PUZZLE HAS BEEN SOLVED"; +TXT_ACS_map08_7_ONTHE = "ON THE SHADOW WOOD"; +TXT_ACS_map08_10_THEDO = "THE DOOR IS BARRED FROM THE INSIDE"; +TXT_ACS_map08_11_YOUHE = "YOU HEAR A DOOR OPEN IN THE DISTANCE"; +TXT_ACS_map09_6_ONESI = "ONE SIXTH OF THE PUZZLE HAS BEEN SOLVED"; +TXT_ACS_map09_7_ONTHE = "ON THE SHADOW WOOD"; +TXT_ACS_map10_6_ONESI = "ONE SIXTH OF THE PUZZLE HAS BEEN SOLVED"; +TXT_ACS_map10_7_ONTHE = "ON THE SHADOW WOOD"; +TXT_ACS_map11_0_ETTIN = " ETTINS LEFT"; +TXT_ACS_map11_1_YOUWA = "YOU WAITED TOO LONG, NOW YOU DIE!"; +TXT_ACS_map11_7_ADOOR = "A DOOR OPENED ON THE FORSAKEN OUTPOST"; +TXT_ACS_map12_9_THISD = "THIS DOOR WON'T OPEN YET"; +TXT_ACS_map13_11_MYSER = "MY SERVANTS CAN SMELL YOUR BLOOD, HUMAN"; +TXT_ACS_map21_0_ADOOR = "A DOOR OPENED IN THE GIBBET"; +TXT_ACS_map21_2_THEDO = "THE DOOR IS BARRED FROM THE INSIDE"; +TXT_ACS_map22_3_APLAT = "A PLATFORM HAS LOWERED IN THE TOWER"; +TXT_ACS_map22_27_YOUHA = "YOU HAVE PLAYED THIS GAME TOO LONG, MORTAL..."; +TXT_ACS_map22_29_ITHIN = "I THINK I SHALL REMOVE YOU FROM THE BOARD"; +TXT_ACS_map23_10_YOUHE = "YOU HEAR A DOOR OPEN UPSTAIRS"; +TXT_ACS_map27_8_WORSH = "WORSHIP ME, AND I MAY YET BE MERCIFUL"; +TXT_ACS_map27_10_THENA = "THEN AGAIN, MAYBE NOT"; +TXT_ACS_map28_6_ONENI = "ONE NINTH OF THE PUZZLE HAS BEEN SOLVED"; +TXT_ACS_map28_7_ONTHE = "ON THE MONASTERY"; +TXT_ACS_map30_6_ONENI = "ONE NINTH OF THE PUZZLE HAS BEEN SOLVED"; +TXT_ACS_map30_7_ONTHE = "ON THE MONASTERY"; +TXT_ACS_map34_1_ONENI = "ONE NINTH OF THE PUZZLE HAS BEEN SOLVED"; +TXT_ACS_map34_2_ONTHE = "ON THE MONASTERY"; +TXT_ACS_map35_0_THEPO = "THE PORTAL HAS BEEN SEALED"; +TXT_ACS_map35_1_CHOOS = "CHOOSE YOUR FATE"; +TXT_ACS_map35_3_THEDO = "THE DOOR IS BARRED FROM THE INSIDE"; +TXT_ACS_map35_12_AREYO = "ARE YOU STRONG ENOUGH"; +TXT_ACS_map35_14_TOFAC = "TO FACE YOUR OWN MASTERS?"; + +// Deathkings texts + +TXT_ACS_map33_6_YOUDA = "YOU DARE BATTLE IN THE READY ROOM?"; +TXT_ACS_map33_7_FORTH = "FOR THAT, YOU SHALL DIE!"; +TXT_ACS_map41_6_THEWA = "THE WATERFALL IS OPEN"; +TXT_ACS_map41_7_THEWA = "THE WATERFALL IS BLOCKED"; +TXT_ACS_map41_8_ADOOR = "A DOOR HAS OPENED IN THE CHAPEL"; +TXT_ACS_map42_4_NOWTH = "NOW THAT'S ODD..."; +TXT_ACS_map44_1_THREE = "THREE MORE PARTS OF THE PUZZLE REMAIN"; +TXT_ACS_map44_2_TWOMO = "TWO MORE PARTS OF THE PUZZLE REMAIN"; +TXT_ACS_map44_3_ONEMO = "ONE MORE PART OF THE PUZZLE REMAINS"; +TXT_ACS_map44_4_THEPU = "THE PUZZLE IS COMPLETE"; +TXT_ACS_map44_6_YOUHA = "YOU HAVE NOT COMPLETED THE PUZZLE"; +TXT_ACS_map44_8_THEFL = "THE FLOOR IS NOT SAFE!"; +TXT_ACS_map44_10_ONETH = "ONE THIRD OF THE PUZZLE IS SOLVED"; +TXT_ACS_map44_11_TWOTH = "TWO THIRDS OF THE PUZZLE IS SOLVED"; +TXT_ACS_map45_1_YOUHE = "YOU HEAR A PLATFORM MOVING IN THE DISTANCE"; +TXT_ACS_map46_0_ITISD = "IT IS DONE..."; +TXT_ACS_map46_1_YOUHA = "YOU HAVE NOT COMPLETED THE PUZZLE"; +TXT_ACS_map46_2_I'MWA = "I'M WARNING YOU..."; +TXT_ACS_map46_3_STUBB = "STUBBORN, AREN'T YOU?"; +TXT_ACS_map46_4_ANDST = "AND STUPID, TOO"; +TXT_ACS_map46_8_ONEFO = "ONE FOURTH OF THIS PUZZLE IS COMPLETE"; +TXT_ACS_map46_9_BADCH = "BAD CHOICE..."; +TXT_ACS_map47_2_THESY = "THE SYMBOLS ARE NOT ALIGNED"; +TXT_ACS_map48_2_THEDO = "THE DOOR WON'T OPEN FROM THIS SIDE"; +TXT_ACS_map50_1_THEDO = "THE DOOR IS BARRED FROM THE OUTSIDE"; +TXT_ACS_map51_5_SACRI = "SACRILEGE !"; +TXT_ACS_map51_6_YOUHA = "YOU HAVE DEFILED ERIC'S TOMB !!"; +TXT_ACS_map51_7_ANDNO = "AND NOW YOU DIE !!!"; +TXT_ACS_map51_8_ONETH = "ONE THIRD OF THE PUZZLE IS SOLVED"; +TXT_ACS_map51_9_TWOTH = "TWO THIRDS OF THE PUZZLE IS SOLVED"; +TXT_ACS_map51_10_THECR = "THE CRYPT IS OPEN"; +TXT_ACS_map51_11_BEWAR = "BEWARE THE SPIDER'S TOMB"; +TXT_ACS_map51_13_YOUHE = "YOU HEAR A PLATFORM RISE OUTSIDE"; +TXT_ACS_map51_14_DOYOU = "DO YOU FEEL LUCKY?"; +TXT_ACS_map51_15_YOUGU = "YOU GUESSED WRONG!"; +TXT_ACS_map51_16_GOODG = "GOOD GUESS"; +TXT_ACS_map51_17_CANYO = "CAN YOU DO ALL THE SCRIPTING FOR MY LEVEL?"; +TXT_ACS_map51_18_DON'T = "DON'T TOUCH MY GLOPPY"; +TXT_ACS_map51_19_VORPA = "VORPAL ?!?!?!"; +TXT_ACS_map51_20_GIMME = "GIMME SOME SUGAR, BABY"; +TXT_ACS_map51_21_DUHUH = "DUH-UHHH..."; +TXT_ACS_map51_22_FILMI = "FILM IN AN HOUR?"; +TXT_ACS_map51_23_IDON' = "I DON'T EVEN GET MY OWN TOMBSTONE - CF"; +TXT_ACS_map51_24_LETNO = "LET NO BLOOD BE SPILT"; +TXT_ACS_map51_25_LETNO = "LET NO HAND BE RAISED IN ANGER"; +TXT_ACS_map52_9_WHODA = "WHO DARES DISTURB OUR SLUMBER?"; +TXT_ACS_map52_10_THEWA = "THE WAY IS OPEN"; +TXT_ACS_map53_2_YOUHA = "YOU HAVE "; +TXT_ACS_map53_3_SWITC = " SWITCHES LEFT"; +TXT_ACS_map53_4_YOUHA = "YOU HAVE ONLY "; +TXT_ACS_map53_5_SWITC = " SWITCH LEFT"; +TXT_ACS_map53_6_THEEX = "THE EXIT IS OPEN"; +TXT_ACS_map54_1_THEDO = "THE DOORS WON'T OPEN FROM THIS SIDE"; +TXT_ACS_map54_4_THEDO = "THE DOORS ARE OPEN..."; +TXT_ACS_map54_5_IFYOU = "...IF YOU ARE READY"; +TXT_ACS_map54_9_ADOOR = "A DOOR HAS OPENED"; +TXT_ACS_map54_10_ONTHE = "ON THE CHANTRY"; +TXT_ACS_map54_11_ABRID = "A BRIDGE HAS BEEN BUILT"; +TXT_ACS_map54_12_ONTHE = "ON THE ABATTOIR"; +TXT_ACS_map54_13_ASTAI = "A STAIR HAS BEEN BUILT"; +TXT_ACS_map54_14_ONTHE = "ON THE DARK WATCH"; +TXT_ACS_map54_15_ONEGE = "ONE GEAR HAS BEEN PLACED"; +TXT_ACS_map54_16_GEARS = " GEARS HAVE BEEN PLACED"; +TXT_ACS_map54_17_ABARR = "A BARRICADE HAS OPENED"; +TXT_ACS_map54_18_ONTHE = "ON THE CLOACA"; +TXT_ACS_map54_20_THEWA = "THE WAY BACK IS OPEN"; +TXT_ACS_map55_9_THEDO = "THE DOOR IS BARRED FROM THE INSIDE"; +TXT_ACS_map56_0_YOUDA = "YOU DARE PLUNDER THE TOMB"; +TXT_ACS_map56_1_OFTHE = "OF THE EXECUTIONER?"; +TXT_ACS_map56_2_PREPA = "PREPARE TO DIE"; +TXT_ACS_map59_1_YOUHA = "YOU HAVE "; +TXT_ACS_map59_2_MORES = " MORE SWITCHES TO FIND"; +TXT_ACS_map59_3_YOUHA = "YOU HAVE ONLY "; +TXT_ACS_map59_4_SWITC = " SWITCH LEFT"; +TXT_ACS_map59_5_THEWA = "THE WAY TO THE TOWER IS OPEN"; +TXT_ACS_map60_3_THEWA = "THE WAY IS OPEN"; + +// All content from Strife's IWAD dialogues + +TXT_DLG_SCRIPT01_d0_IDONT = "I DON'T WANT ANY TROUBLE, STAY AWAY FROM ME. I'VE HAD ENOUGH TROUBLE WITH WHAT THAT BASTARD HARRIS DID TO ME. HE PROMISED ME MONEY, INSTEAD I GET TO LOOK FORWARD TO BEING "QUESTIONED" BY THE PROGRAMMER."; + +TXT_DLG_SCRIPT02_d0_ILLHE = "I'LL HELP YOU IF YOU HELP ME. FIVE PIECES OF GOLD AND I'LL TELL ALL I KNOW."; +TXT_RPLY0_SCRIPT02_d0_HERES = "HERE'S THE GOLD."; +TXT_RYES0_SCRIPT02_d0_BESTE = "BE STEALTHY WHEN YOU KILL, YOU WON'T SET OFF ALARMS."; +TXT_RNO0_SCRIPT02_d0_WELLI = "WELL, I WON'T BE TELLING YOU ANYTHING FOR FREE!"; +TXT_DLG_SCRIPT02_d1516_HAVEY = "HAVE YOU BY ANY CHANCE GOT ANOTHER 5 GOLD ON YOU?"; +TXT_RPLY0_SCRIPT02_d1516_5GOLD = "5 GOLD."; +TXT_RYES0_SCRIPT02_d1516_WELLP = "WELL, POISON BOLTS CAN KILL THE GUARDS INSTANTLY AND WON'T SET OFF THE ALARMS."; +TXT_RNO0_SCRIPT02_d1516_NOSIR = "NO SIR, I WON'T BE TELLING YOU ANYTHING FOR FREE!"; +TXT_DLG_SCRIPT02_d3032_YOUVE = "YOU'VE WRUNG THE LAST BIT OF GOSSIP OUT OF ME ALREADY!"; +TXT_DLG_SCRIPT02_d4548_WHATC = "WHAT CAN I GET FOR YOU?"; +TXT_RPLY0_SCRIPT02_d4548_ASSAU = "ASSAULT GUN"; +TXT_RYES0_SCRIPT02_d4548_HEREY = "HERE YOU GO."; +TXT_RNO0_SCRIPT02_d4548_YOUCA = "YOU CAN'T AFFORD THAT RIGHT NOW."; +TXT_RPLY1_SCRIPT02_d4548_CLIPO = "CLIP OF BULLETS"; +TXT_RYES1_SCRIPT02_d4548_THANK = "THANKS."; +TXT_RNO1_SCRIPT02_d4548_COMEO = "COME ON, 10 GOLD."; +TXT_RPLY2_SCRIPT02_d4548_AMMOB = "AMMO BOX"; +TXT_RYES2_SCRIPT02_d4548_HERES = "HERE'S YOUR AMMO."; +TXT_RNO2_SCRIPT02_d4548_MAYBE = "MAYBE SOME OTHER TIME."; +TXT_DLG_SCRIPT02_d6064_GOODN = "GOOD NEWS FROM THE FRONT FOR A CHANGE. MACIL SENT YOU FOR A REWARD AND TRAINING. HE'S INSTRUCTED ME TO GIVE THEM TO YOU."; +TXT_RPLY0_SCRIPT02_d6064_THANK = "THANKS."; +TXT_RYES0_SCRIPT02_d6064_GLADT = "GLAD TO BE OF SERVICE."; +TXT_DLG_SCRIPT02_d7580_ALLRI = "ALL RIGHT, HERE'S A FEW POINTERS ON WHAT TO DO: DON'T GET IN THE WAY OF CRUSADERS: FIRING SHORT BURSTS FROM YOUR ASSAULT GUN KEEPS IT ON TARGET."; +TXT_RPLY0_SCRIPT02_d7580_ISTHA = "IS THAT IT?"; +TXT_RYES0_SCRIPT02_d7580_LOOKY = "LOOK, YOU'LL LEARN MORE LATER."; +TXT_DLG_SCRIPT02_d9096_ITHIN = "I THINK I CAN CONVERT A FLAMETHROWER FROM ONE OF THE CRUSADERS FOR USE BY A HUMAN. OH, ANYTHING ELSE I CAN GET YOU?"; +TXT_RPLY0_SCRIPT02_d9096_FLAME = "FLAMETHROWER."; +TXT_RYES0_SCRIPT02_d9096_IKNEW = "I KNEW THAT'D WORK! HERE YOU GO, TAKE HER FOR A SPIN!"; +TXT_RNO0_SCRIPT02_d9096_LISTE = "LISTEN, I CAN'T MAKE ANYTHING WITHOUT THE RIGHT PARTS!"; +TXT_RPLY1_SCRIPT02_d9096_ASSAU = "ASSAULT GUN"; +TXT_RYES1_SCRIPT02_d9096_WELLH = "WELL, HERE YOU GO SIR!"; +TXT_RNO1_SCRIPT02_d9096_OBVIO = "OBVIOUSLY, YOU CAN'T AFFORD THAT RIGHT NOW."; +TXT_RPLY2_SCRIPT02_d9096_CLIPO = "CLIP OF BULLETS"; +TXT_RYES2_SCRIPT02_d9096_THANK = "THANKS."; +TXT_RNO2_SCRIPT02_d9096_COMEO = "COME ON, 10 GOLD."; +TXT_RPLY3_SCRIPT02_d9096_AMMOB = "AMMO BOX"; +TXT_RYES3_SCRIPT02_d9096_HERES = "HERE'S YOUR AMMO."; +TXT_RNO3_SCRIPT02_d9096_MAYBE = "MAYBE SOME OTHER TIME. GOODBYE!"; +TXT_DLG_SCRIPT02_d10612_NOWTH = "NOW THAT YOU HAVE THE FLAMETHROWER, IS THERE ANYTHING ELSE I CAN GET YOU?"; +TXT_RPLY0_SCRIPT02_d10612_ASSAU = "ASSAULT GUN"; +TXT_RYES0_SCRIPT02_d10612_HEREY = "HERE YOU GO."; +TXT_RNO0_SCRIPT02_d10612_YOUCA = "YOU CAN'T AFFORD THAT RIGHT NOW."; +TXT_RPLY1_SCRIPT02_d10612_CLIPO = "CLIP OF BULLETS"; +TXT_RYES1_SCRIPT02_d10612_THANK = "THANKS."; +TXT_RNO1_SCRIPT02_d10612_COMEO = "COME ON, 10 GOLD."; +TXT_RPLY2_SCRIPT02_d10612_AMMOB = "AMMO BOX"; +TXT_RYES2_SCRIPT02_d10612_HERES = "HERE'S YOUR AMMO."; +TXT_RNO2_SCRIPT02_d10612_MAYBE = "MAYBE SOME OTHER TIME."; +TXT_DLG_SCRIPT02_d12128_NOWTH = "NOW THAT YOU HAVE THE FLAMETHROWER, IS THERE ANYTHING ELSE I CAN GET YOU?"; +TXT_RPLY0_SCRIPT02_d12128_CLIPO = "CLIP OF BULLETS"; +TXT_RYES0_SCRIPT02_d12128_THANK = "THANKS."; +TXT_RNO0_SCRIPT02_d12128_COMEO = "COME ON, 10 GOLD."; +TXT_RPLY1_SCRIPT02_d12128_AMMOB = "AMMO BOX"; +TXT_RYES1_SCRIPT02_d12128_HERES = "HERE'S YOUR AMMO."; +TXT_RNO1_SCRIPT02_d12128_MAYBE = "MAYBE SOME OTHER TIME."; +TXT_RPLY2_SCRIPT02_d12128_PHOSP = "PHOSPHOR GRENADES"; +TXT_RYES2_SCRIPT02_d12128_THANK = "THANKS."; +TXT_RNO2_SCRIPT02_d12128_YOUDO = "YOU DON'T HAVE ENOUGH"; +TXT_RPLY3_SCRIPT02_d12128_POISO = "POISON BOLTS"; +TXT_RYES3_SCRIPT02_d12128_WORTH = "WORTH EVERY GOLD!"; +TXT_RNO3_SCRIPT02_d12128_COMEO = "COME ON, 200 GOLD!"; +TXT_DLG_SCRIPT02_d13644_ICANT = "I CAN'T BELIEVE THAT I GOT STUCK WITH THIS DUTY. THEY SAY THAT SOMETHING EVIL CAME UP OUT OF THIS SEWER GATE... NOW I GET TO STAND HERE UNTIL IT COMES UP AGAIN!"; +TXT_RPLY0_SCRIPT02_d13644_WHATG = "WHAT GATE?"; +TXT_RYES0_SCRIPT02_d13644_THESE = "THE SEWER OVERFLOW GATE."; +TXT_DLG_SCRIPT02_d15160_HELLO = "HELLO FRIEND. WHAT CAN I GET FOR YOU?"; +TXT_RPLY0_SCRIPT02_d15160_ELECT = "ELECTRIC BOLTS"; +TXT_RYES0_SCRIPT02_d15160_YOUGO = "you got the ELECTRIC BOLTS."; +TXT_RPLY1_SCRIPT02_d15160_AMMOS = "AMMO SATCHEL"; +TXT_RYES1_SCRIPT02_d15160_THANK = "THANK YOU. ANYTHING ELSE?"; +TXT_RNO1_SCRIPT02_d15160_YOUCA = "YOU CAN'T AFFORD THAT, GOOD DAY."; +TXT_DLG_SCRIPT02_d16676_WHATC = "WHAT CAN I GET FOR YOU?"; +TXT_RPLY0_SCRIPT02_d16676_ELECT = "ELECTRIC BOLTS"; +TXT_RYES0_SCRIPT02_d16676_YOUGO = "you got the ELECTRIC BOLTS."; +TXT_RPLY1_SCRIPT02_d16676_AMMOS = "AMMO SATCHEL"; +TXT_RYES1_SCRIPT02_d16676_THANK = "THANK YOU, ANYTHING ELSE?"; +TXT_RNO1_SCRIPT02_d16676_YOUCA = "YOU CAN'T AFFORD THAT, GOOD DAY TO YOU!"; +TXT_DLG_SCRIPT02_d18192_WELCO = "WELCOME. WHAT MAY I SHOW YOU?"; +TXT_RPLY0_SCRIPT02_d18192_ENVIR = "ENVIRONMENTAL SUIT"; +TXT_RYES0_SCRIPT02_d18192_WELLH = "WELL, HERE YOU ARE."; +TXT_RNO0_SCRIPT02_d18192_IMSOR = "I'M SORRY BUT YOU DON'T HAVE ENOUGH MONEY FOR THAT."; +TXT_RPLY1_SCRIPT02_d18192_LEATH = "LEATHER ARMOR"; +TXT_RYES1_SCRIPT02_d18192_HEREY = "HERE YOU ARE."; +TXT_RNO1_SCRIPT02_d18192_PERHA = "PERHAPS SOME OTHER TIME?"; +TXT_RPLY2_SCRIPT02_d18192_METAL = "METAL ARMOR"; +TXT_RYES2_SCRIPT02_d18192_WEARI = "WEAR IT IN GOOD HEALTH."; +TXT_RNO2_SCRIPT02_d18192_COMEB = "COME BACK WHEN YOU CAN AFFORD TO BUY SOMETHING YOU LOUT!"; +TXT_DLG_SCRIPT02_d19708_WELCO = "WELCOME. WHAT MAY I SHOW YOU?"; +TXT_RPLY0_SCRIPT02_d19708_ENVIR = "ENVIRONMENTAL SUIT"; +TXT_RYES0_SCRIPT02_d19708_WELLH = "WELL, HERE YOU ARE."; +TXT_RNO0_SCRIPT02_d19708_IMSOR = "I'M SORRY BUT YOU DON'T HAVE ENOUGH MONEY FOR THAT."; +TXT_RPLY1_SCRIPT02_d19708_LEATH = "LEATHER ARMOR"; +TXT_RYES1_SCRIPT02_d19708_HEREY = "HERE YOU ARE."; +TXT_RNO1_SCRIPT02_d19708_PERHA = "PERHAPS SOME OTHER TIME?"; +TXT_RPLY2_SCRIPT02_d19708_METAL = "METAL ARMOR"; +TXT_RYES2_SCRIPT02_d19708_WEARI = "WEAR IT IN GOOD HEALTH."; +TXT_RNO2_SCRIPT02_d19708_COMEB = "COME BACK WHEN YOU CAN AFFORD TO BUY SOMETHING YOU LOUT!"; +TXT_DLG_SCRIPT02_d21224_HOWMA = "HOW MAY I ASSIST YOU?"; +TXT_RPLY0_SCRIPT02_d21224_MEDPA = "MED PATCH"; +TXT_RYES0_SCRIPT02_d21224_HERES = "HERE'S YOUR PATCH."; +TXT_RNO0_SCRIPT02_d21224_YOUNE = "YOU NEED 10 GOLD FOR THAT."; +TXT_RPLY1_SCRIPT02_d21224_MEDIC = "MEDICAL KIT"; +TXT_RYES1_SCRIPT02_d21224_THANK = "THANK YOU."; +TXT_RNO1_SCRIPT02_d21224_IWISH = "I WISH I COULD GIVE THEM AWAY, BUT THEY COST 25 GOLD."; +TXT_RPLY2_SCRIPT02_d21224_FIELD = "FIELD SURGERY KIT"; +TXT_RYES2_SCRIPT02_d21224_THERE = "THERE YOU GO. TAKE CARE NOW."; +TXT_RNO2_SCRIPT02_d21224_WELLM = "WELL, MAYBE YOU CAN AFFORD SOME MED PATCHES?"; +TXT_DLG_SCRIPT02_d22740_IHOPE = "I HOPE MACIL KNOWS WHAT HE'S DOING. IF THE ORDER FINDS OUT I'M HELPING THE FRONT I'M AS GOOD AS DEAD... NOT THAT THIS MATTERS TO YOU ANY. THE FRONT'S MEDIC GAVE ME AN UPGRADE CHIP FOR YOU, ARE YOU READY? "; +TXT_RPLY0_SCRIPT02_d22740_YESIM = "YES, I'M READY."; +TXT_RYES0_SCRIPT02_d22740_WELLT = "WELL THEN, THIS WON'T TAKE BUT A SECOND. THERE, DONE ALREADY."; +TXT_DLG_SCRIPT02_d24256_HOWMA = "HOW MAY I ASSIST YOU?"; +TXT_RPLY0_SCRIPT02_d24256_MEDPA = "MED PATCH"; +TXT_RYES0_SCRIPT02_d24256_HERES = "HERE'S YOUR PATCH."; +TXT_RNO0_SCRIPT02_d24256_YOUNE = "YOU NEED 10 GOLD FOR THAT."; +TXT_RPLY1_SCRIPT02_d24256_MEDIC = "MEDICAL KIT"; +TXT_RYES1_SCRIPT02_d24256_THANK = "THANK YOU."; +TXT_RNO1_SCRIPT02_d24256_IWISH = "I WISH I COULD GIVE THEM AWAY, BUT THEY COST 25 GOLD."; +TXT_RPLY2_SCRIPT02_d24256_FIELD = "FIELD SURGERY KIT"; +TXT_RYES2_SCRIPT02_d24256_THERE = "THERE YOU GO. TAKE CARE NOW."; +TXT_RNO2_SCRIPT02_d24256_WELLM = "WELL, MAYBE YOU CAN AFFORD SOME MED PATCHES?"; +TXT_DLG_SCRIPT02_d25772_HELLO = "HELLO STRANGER, I HAVEN'T SEEN YOU AROUND HERE BEFORE. LET ME GIVE YOU A PIECE OF FREE ADVICE. I'D BE CAREFUL IF I WERE YOU. THE ORDER DOES NOT TOLERATE FREE WILL, AND THEIR JUSTICE IS SWIFT."; +TXT_RPLY0_SCRIPT02_d25772_WHATS = "WHAT'S THE WORD?"; +TXT_RYES0_SCRIPT02_d25772_THEWO = "THE WORD IS... THE SEWERS HOLD MORE THAN JUST RATS AND ROBOTS."; +TXT_DLG_SCRIPT02_d27288_WHATC = "WHAT CAN I DO FOR YOU NOW?"; +TXT_RPLY0_SCRIPT02_d27288_MOREI = "MORE INFO."; +TXT_RYES0_SCRIPT02_d27288_THEGO = "THE GOVERNOR IS A SIMPLE REMINDER TO US THAT WE AREN'T FREE PEOPLE ANYMORE."; +TXT_RNO0_SCRIPT02_d27288_COMEB = "COME BACK WHEN YOU GET SOME GOLD."; +TXT_DLG_SCRIPT02_d28804_WELLY = "WELL, YOU'RE ASKING A LOT OF QUESTIONS FOR SOMEONE WHO'S NOT TRYING TO DIE. MAKE SURE YOU DON'T GO AND GET YOURSELF KILLED, OR WORSE."; +TXT_RPLY0_SCRIPT02_d28804_MOREI = "MORE INFO."; +TXT_RYES0_SCRIPT02_d28804_THERE = "THERE'S MORE TO THE ORDER THAN MEETS THE EYE."; +TXT_RNO0_SCRIPT02_d28804_WELLT = "WE'LL TALK WHEN YOU GET GOLD!"; +TXT_DLG_SCRIPT02_d30320_THATS = "THAT'S IT FRIEND, THE WELL OF KNOWLEDGE HAS RUN DRY. I'VE TOLD YOU MORE THAN I SHOULD HAVE ANYWAY. GOOD LUCK... AND DON'T COME BACK."; +TXT_DLG_SCRIPT02_d31836_HEYIM = "HEY, I'M ONLY HERE IN CASE OF AN EMERGENCY. IF THE CORE BREACHES, THEN I MAKE SURE NO ONE GETS IN... OR OUT."; +TXT_DLG_SCRIPT02_d33352_WATCH = "WATCH YOUR STEP, PEASANT!"; +TXT_DLG_SCRIPT02_d34868_WEREG = "WE'RE GOING TO KILL YOU! "; +TXT_DLG_SCRIPT02_d36384_WHOIN = "WHO IN THE BLAZES ARE YOU? NO ONE'S SUPPOSED TO BE LOITERING ABOUT IN THIS AREA!"; +TXT_DLG_SCRIPT02_d37900_YOUTH = "YOU THERE, NOBODY'S ALLOWED IN HERE. MOVE ALONG!"; +TXT_DLG_SCRIPT02_d39416_IRALE = "IRALE WILL SET YOU RIGHT UP!"; +TXT_DLG_SCRIPT02_d40932_IMKIN = "I'M KINDA A TALENT BROKER FOR THE REBELS. A GUY WHO'S AS GOOD AS YOU COULD MAKE A LOT OF GOLD... IF YOU HOOKED UP WITH THE RIGHT PEOPLE."; +TXT_RPLY0_SCRIPT02_d40932_IMINT = "I'M INTERESTED."; +TXT_RPLY1_SCRIPT02_d40932_SCREW = "SCREW THE REBELS!"; +TXT_DLG_SCRIPT02_d42448_NONOS = "NO, NO SECOND CHANCE. OH GUARDS, KILL HIM."; +TXT_DLG_SCRIPT02_d43964_GOODC = "GOOD CHOICE. THE ORDER'S SANCTUARY BY THE RIVER IS THEIR UNOFFICIAL TORTURE CHAMBER. HIDDEN INSIDE THERE'S A GOLDEN CHALICE. YOU SWIPE IT AND REAP YOUR REWARD."; +TXT_RPLY0_SCRIPT02_d43964_HOWAM = "HOW AM I SUPPOSED TO DO THAT?"; +TXT_DLG_SCRIPT02_d45480_HERES = "HERE'S A CROSSBOW, JUST AIM STRAIGHT AND --SPLAT--. REMEMBER, GRAB THE FANCY CUP AND GET TO THE TAVERN."; +TXT_RPLY0_SCRIPT02_d45480_COOLI = "COOL. I'll get it."; +TXT_DLG_SCRIPT02_d46996_WHATA = "WHAT ARE YOU WAITING FOR? BRING ME THAT CHALICE."; +TXT_DLG_SCRIPT02_d48512_HEYIK = "HEY, I KNOW, KINDA LOOKS LIKE A SET-UP. I WOULD NEVER DO THAT TO SUCH A GREAT KILLING MACHINE. GOT THE ITEM? GREAT! NOW GET READY, GOLD AND GLORY JUST LIKE I PROMISED. TAKE THIS KEY AND THE GOVERNOR WILL REWARD YOU."; +TXT_RPLY0_SCRIPT02_d48512_HEDBE = "HE'D BETTER. FOR YOUR SAKE!"; +TXT_RPLY1_SCRIPT02_d48512_WHATW = "WHAT! WHERE'S MY MONEY?"; +TXT_DLG_SCRIPT02_d50028_GETLO = "GET LOST KID, YOU BOTHER ME."; +TXT_DLG_SCRIPT02_d51544_NOSEC = "NO SECOND CHANCE. OH GUARDS, KILL HIM."; +TXT_DLG_SCRIPT02_d53060_FIRST = "FIRST THEY SLAUGHTER THOUSANDS, NOW THEY WANT ALL ABLE-BODIED PEASANTS FOR UNSPECIFIED "TESTS". HOW DOES THE ORDER EXPECT ME TO KEEP THE PEACE? WHAT THE HELL DO YOU WANT?"; +TXT_RPLY0_SCRIPT02_d53060_APRIS = "A PRISON PASS, LET'S DEAL."; +TXT_DLG_SCRIPT02_d54576_ILIKE = "I LIKE YOU ALREADY. I HAVE TWO CHORES THAT I DON'T WANT TO DO MYSELF. ONE IS MESSY, THE OTHER BLOODY."; +TXT_RPLY0_SCRIPT02_d54576_CALLM = "CALL ME THE CLEANER"; +TXT_RPLY1_SCRIPT02_d54576_IMNOT = "I'M NOT SQUEAMISH"; +TXT_DLG_SCRIPT02_d56092_ONEOF = "ONE OF MY MINIONS IS STEALING POWER WITH A TAP ON THE MAINS SOMEWHERE. FIND IT AND TRUNCATE HIS SUPPLY AND I'LL PROVIDE YOU WITH WHAT YOU WANT. BRING ME SOMETHING AS A TOKEN."; +TXT_RPLY0_SCRIPT02_d56092_WHERE = "WHERE DO I FIND THIS TAP?"; +TXT_DLG_SCRIPT02_d57608_IFIKN = "IF I KNEW, IT WOULDN'T BE A CHORE NOW WOULD IT? USE YOUR CHARM, BUT SHUT OFF HIS SUPPLY."; +TXT_DLG_SCRIPT02_d59124_TELLY = "TELL YOU WHAT, THERE'S A LYING SACK NAMED DERWIN WHO HAS BEEN SELLING CHILDREN TO THE ORDER. I WON'T TOLERATE THAT KIND OF DEPRAVITY. NOT WITHOUT MY CUT. DERWIN WORKS IN THE WAREHOUSE. KILL HIM AND BRING ME HIS, EAR, AND I'LL SEE WHAT I CAN DO."; +TXT_RPLY0_SCRIPT02_d59124_HOWDO = "HOW DO I GET IN?"; +TXT_DLG_SCRIPT02_d60640_THISK = "THIS KEY WILL GET YOU INTO THE POWER STATION. ON SECOND THOUGHT, CUT OFF THE EAR AND THEN KILL HIM. MUCH BETTER."; +TXT_DLG_SCRIPT02_d62156_OHIJU = "OH, I JUST LOVE SOUVENIRS. HERE, THIS WILL GET YOU INTO THE PRISON. TALK TO WARDEN MONTAG. WHATEVER YOU DO AFTER THAT, I DON'T WANT TO KNOW."; +TXT_RPLY0_SCRIPT02_d62156_THANK = "THANKS."; +TXT_DLG_SCRIPT02_d63672_GIVEY = "GIVE YOU A HINT. WHEN I STOP TALKING TO YOU, YOU LEAVE."; +TXT_DLG_SCRIPT02_d65188_DOYOU = "DO YOU HAVE GOOD NEWS FOR ME? I'M ALL EARS."; +TXT_RPLY0_SCRIPT02_d65188_THEDE = "THE DEED IS DONE!"; +TXT_DLG_SCRIPT02_d66704_OHIJU = "OH, I JUST LOVE SOUVENIRS. HERE, THIS WILL GET YOU INTO THE PRISON. TALK TO WARDEN MONTAG. WHATEVER YOU DO AFTER THAT, I DON'T WANT TO KNOW."; +TXT_RPLY0_SCRIPT02_d66704_FINEB = "FINE BY ME."; +TXT_DLG_SCRIPT02_d68220_SOYOU = "SO YOU'RE THE FOOL WHO STOLE THE CHALICE? I'M GOING TO HAVE YOU ARRESTED AS A REBEL THIEF... THEREBY ENHANCING MY POSITION WITH THE ORDER. HOW DOES IT FEEL TO BE AN UNWITTING PAWN? I'LL GIVE YOU A HINT, IT'S GONNA' HURT. "; +TXT_RPLY0_SCRIPT02_d68220_ITSUC = "IT SUCKS!"; +TXT_RYES0_SCRIPT02_d68220_FORYO = "FOR YOU IT DOES."; +TXT_RPLY1_SCRIPT02_d68220_HARRI = "HARRIS PROMISED ME MONEY!"; +TXT_RYES1_SCRIPT02_d68220_TOOBA = "TOO BAD. THE ONLY THING YOU'RE GETTING IS DEAD!"; +TXT_DLG_SCRIPT02_d69736_INASM = "IN A SMALL WORLD, WORD TRAVELS FAST. I HEAR YOU JUST REMOVED SOME OBSTACLES FROM YOUR PATH. NICE WORK. ARE YOU INTERESTED IN SOME MORE LUCRATIVE PROJECTS?"; +TXT_RPLY0_SCRIPT02_d69736_SUREW = "SURE, WHY NOT."; +TXT_RPLY1_SCRIPT02_d69736_NOTHA = "NO THANKS."; +TXT_RYES1_SCRIPT02_d69736_THENG = "THEN GET LOST!"; +TXT_DLG_SCRIPT02_d71252_FOOLG = "FOOL! GUARDS, RID ME OF THIS MEDDLESOME PEON."; +TXT_DLG_SCRIPT02_d72768_GOODS = "GOOD. SOME UH, FRIENDS OF MINE NEED SOMEONE SILENCED. BELDIN IS BEING HELD BY THE ORDER IN THEIR SANCTUARY. THERE'S A RARELY USED ENTRANCE BY A SMALL PIER OFF THE RIVER WHICH IS UNGUARDED. GET IN, SHUT HIM UP, AND BRING HIS RING BACK TO ME AS PROOF."; +TXT_RPLY0_SCRIPT02_d72768_WILLI = "WILL IT BE WORTH THE EFFORT?"; +TXT_DLG_SCRIPT02_d74284_ILLGU = "I'LL GUARANTEE 50 GOLD AND IF YOU RETURN WITHOUT SETTING OFF EVERY ALARM IN TOWN, THERE'S THE CHANCE TO EARN MUCH, MUCH MORE, AND HERE'S A LITTLE HELPER THAT SHOULD GIVE YOU AN EDGE."; +TXT_RPLY0_SCRIPT02_d74284_THANK = "THANKS, I'll Need it."; +TXT_DLG_SCRIPT02_d75800_GOODR = "GOOD. REMEMBER, HIS SILENCE IS GOLDEN."; +TXT_RPLY0_SCRIPT02_d75800_ILLGE = "I'LL GET HIM."; +TXT_DLG_SCRIPT02_d77316_MISSI = "MISSION ACCOMPLISHED? YOU HAVE THE RING OF THE TRAITOR?"; +TXT_RPLY0_SCRIPT02_d77316_HESDE = "HE'S DEAD, WHERE'S MY MONEY?"; +TXT_RNO0_SCRIPT02_d77316_LIARG = "LIAR! Go get the ring!"; +TXT_DLG_SCRIPT02_d78832_HEREY = "HERE, YOU EARNED IT. THE TRAITOR YOU KILLED WAS ABOUT TO REVEAL THE LOCATION OF THE FRONT. YOU SAVED LIVES. HOW WOULD YOU LIKE TO EARN MORE GOLD, AND A FUTURE FREE FROM TYRANNY?"; +TXT_RPLY0_SCRIPT02_d78832_TELLM = "TELL ME MORE."; +TXT_RPLY1_SCRIPT02_d78832_NOTMY = "NOT MY STYLE."; +TXT_DLG_SCRIPT02_d80348_IHAVE = "I HAVE A BUSINESS RELATIONSHIP WITH THE FRONT'S LEADER, MACIL. I KNOW HE NEEDS AN INCISIVE FELLOW LIKE YOURSELF, AND HE PAYS WELL. TAKE THIS RECOVERED COM UNIT AND YOU'LL BE LED TO, SHALL WE SAY, OPPORTUNITIES."; +TXT_RPLY0_SCRIPT02_d80348_THANK = "THANKS."; +TXT_DLG_SCRIPT02_d81864_GETGO = "GET GOING. IF YOU HANG AROUND HERE, WE'RE BOTH DEAD."; +TXT_DLG_SCRIPT02_d83380_APITY = "A PITY, BUT NOW THAT YOU KNOW ABOUT MY FRIENDS, I MUST KILL YOU. GUARDS, TAKE OUT THIS TRASH!"; +TXT_DLG_SCRIPT02_d84896_FOOLG = "FOOL. GUARDS! RID ME OF MEDDLESOME PEON."; +TXT_DLG_SCRIPT02_d86412_WALKA = "WALK AWAY, BOY, JUST WALK AWAY."; +TXT_DLG_SCRIPT02_d87928_WHATA = "WHAT ARE YOU DOING HERE?"; +TXT_RPLY0_SCRIPT02_d87928_HEYIN = "HEY, I NEED GOLD!"; +TXT_DLG_SCRIPT02_d89444_BLACK = "BLACKBIRD TOLD YOU THE CODE, HUH? LET ME SHUT OFF THE ALARM. MACIL IS ONE FLIGHT DOWN."; +TXT_RPLY0_SCRIPT02_d89444_THANK = "THANKS."; +TXT_DLG_SCRIPT02_d90960_WALKA = "WALK AWAY, BOY, JUST WALK AWAY."; +TXT_DLG_SCRIPT02_d92476_DOYOU = "DO YOU HAVE AN APPOINTMENT WITH THE GOVERNOR? "; +TXT_RPLY0_SCRIPT02_d92476_OFCOU = "OF COURSE!"; +TXT_RPLY1_SCRIPT02_d92476_NOAND = "NO, AND I DON'T NEED ONE!"; +TXT_DLG_SCRIPT02_d93992_SORRY = "SORRY! I DIDN'T MEAN... PLEASE GO RIGHT UP."; +TXT_RPLY0_SCRIPT02_d93992_IKNEW = "I KNEW YOU'D SAY THAT."; +TXT_DLG_SCRIPT02_d95508_IFYOU = "IF YOU'RE IN SUCH A HURRY, DON'T WASTE YOUR TIME WITH ME."; +TXT_DLG_SCRIPT02_d97024_RELEA = "RELEASE ME, LEAVE AN OLD MAN ALONE."; +TXT_DLG_SCRIPT02_d98540_YOUSE = "YOU SEEK WISDOM, MY SON? THE ORDER HAS SEEN TO IT THAT WE ONLY ASK ONE QUESTION, "WHY?""; +TXT_RPLY0_SCRIPT02_d98540_WHERE = "WHERE'S THE POWER COUPLING?"; +TXT_RPLY1_SCRIPT02_d98540_WHERE = "WHERE'S THE ORDER'S MAIN?"; +TXT_RPLY2_SCRIPT02_d98540_WHERE = "WHERE'S THE ILLEGAL TAP?"; +TXT_DLG_SCRIPT02_d100056_ILLTE = "I'LL TELL YOU WHERE IT IS, BUT I DON'T KNOW WHOSE COUPLING YOU'LL BE TAMPERING WITH. IT'S RIGHT HERE IN THE SEWAGE PLANT."; +TXT_RPLY0_SCRIPT02_d100056_THANK = "THANKS"; +TXT_DLG_SCRIPT02_d101572_THATS = "THAT'S RIGHT HERE IN THE SEWAGE PLANT. BUT IT'S THE FRONT'S COUPLING. WHOEVER TOLD YOU THAT IT WAS THE ORDER'S WAS WRONG."; +TXT_RPLY0_SCRIPT02_d101572_THANK = "THANKS"; +TXT_DLG_SCRIPT02_d103088_IFYOU = "IF YOU SAY IT'S ILLEGAL I WANT NOTHING TO DO WITH YOU. I HAVE ENOUGH TROUBLE AS IT IS."; +TXT_RPLY0_SCRIPT02_d103088_THANK = "THANKS"; +TXT_DLG_SCRIPT02_d104604_RELEA = "RELEASE ME, LEAVE AN OLD MAN ALONE."; + +TXT_DLG_SCRIPT03_d0_WELCO = "WELCOME TO THE LAST FLICKER OF HOPE. ONLY WE HAVE THE FREE WILL TO OPPOSE THE ORDER. WE HAVE THE SHARPEST SCIENTIFIC MINDS, AND MANY ABLE BODIES, BUT WE LACK THAT ONE REAL, UH... "PROBLEM SOLVER", WHO WILL GIVE US THE EDGE WE NEED. HELP US."; +TXT_RPLY0_SCRIPT03_d0_ALLRI = "ALL RIGHT, I ACCEPT."; +TXT_RPLY1_SCRIPT03_d0_NOTHA = "NO THANKS!"; +TXT_DLG_SCRIPT03_d1516_YOUMI = "YOU MIGHT WANT TO RECONSIDER, SEEING THAT YOU'RE SURROUNDED BY HEAVILY ARMED ANGRY REBELS."; +TXT_RPLY0_SCRIPT03_d1516_ALLRI = "ALL RIGHT, I'M IN!"; +TXT_RPLY1_SCRIPT03_d1516_NOTHA = "NO THANKS."; +TXT_DLG_SCRIPT03_d3032_THEND = "THEN DIE IN SHAME AND DISHONOR."; +TXT_DLG_SCRIPT03_d4548_GOODB = "GOOD, BLACKBIRD WILL CONTINUE TO BE YOUR GUIDE. SHE'S TAKEN QUITE A SHINE TO YOU. TOGETHER YOU'VE GOT TO UNLOCK THE SECRETS OF THE ORDER AND THEIR INHUMAN SERVANTS. GET INSIDE AND TAKE THEM DOWN."; +TXT_RPLY0_SCRIPT03_d4548_WHERE = "WHERE DO I START?"; +TXT_DLG_SCRIPT03_d6064_FRANK = "FRANKLY THE SITUATION IS A MESS. YOU MUST ACCOMPLISH SEVERAL MISSIONS TO PREPARE THE WAY FOR MORE ATTACKS ON THE ORDER. OUR LAST RAID WAS A DISASTER AND MOST OF OUR TROOPS WERE CAPTURED. I NEED YOU TO FREE THESE PRISONERS."; +TXT_RPLY0_SCRIPT03_d6064_ITHIN = "I THINK I CAN HANDLE IT."; +TXT_DLG_SCRIPT03_d7580_TAKET = "TAKE THIS MONEY AND VISIT IRALE WHO SUPPLIES OUR WEAPONS. THEN, THIS KEY WILL GET YOU IN TO SEE THE GOVERNOR. HE'S A CORRUPT PUPPET OF THE ORDER, BUT HE LOVES TO MAKE DEALS. DO WHATEVER YOU NEED TO FREE OUR BROTHERS IN ARMS."; +TXT_RPLY0_SCRIPT03_d7580_ILLSE = "I'LL SEE TO IT."; +TXT_DLG_SCRIPT03_d9096_FIGHT = "FIGHT FOR THE FRONT AND FREEDOM. MOVE OUT."; +TXT_DLG_SCRIPT03_d10612_THEPR = "THE PRISONERS HAVE BEEN WELCOMED BACK, THANKS TO YOU. HERE'S SOME GOLD, GO VISIT THE MEDIC AND THE WEAPONS TRAINER AND THEN, I HAVE HIGHER GOALS FOR YOU."; +TXT_RPLY0_SCRIPT03_d10612_IWILL = "I WILL. WHAT'S NEXT?"; +TXT_DLG_SCRIPT03_d12128_ASING = "A SINGLE CRYSTAL RUNS THE POWER GRID WHICH DRIVES THE ORDER'S SHIELDS. DESTROY THAT CRYSTAL AND YOU WILL PUNCH HUGE HOLES IN THE ORDER'S DEFENSES. BLACKBIRD WILL LEAD YOU TO A SPY WHO HAS A WAY IN, GOOD LUCK."; +TXT_RPLY0_SCRIPT03_d12128_WELLG = "WE'LL GET IT."; +TXT_DLG_SCRIPT03_d13644_FIGHT = "FIGHT FOR THE FRONT AND FREEDOM. MOVE OUT."; +TXT_DLG_SCRIPT03_d15160_YOUVE = "YOU'VE EXCEEDED ALL OF OUR EXPECTATIONS. BECAUSE OF YOUR DARING OUR TROOPS ARE ON THE MOVE. I WANT YOU TWO TO JOIN THE ASSAULT, WITH A SPECIFIC TARGET. TAKE OUT THE PROGRAMMER. IT'S TIME TO REVEAL WHAT WE'VE FOUND OUT ABOUT THIS LAYER OF THE ORDER."; +TXT_RPLY0_SCRIPT03_d15160_TELLM = "TELL ME WHAT WE KNOW."; +TXT_DLG_SCRIPT03_d16676_THEPR = "THE PROGRAMMER'S LAIR IS IN THE CASTLE. NOW, SEE THE MEDIC, GRAB SOME AMMO AND GO GET HIM."; +TXT_RPLY0_SCRIPT03_d16676_LETME = "LET ME AT 'EM!"; +TXT_DLG_SCRIPT03_d18192_FIGHT = "FIGHT FOR THE FRONT AND FREEDOM. MOVE OUT."; +TXT_DLG_SCRIPT03_d19708_REMEM = "REMEMBER WHAT THE TOWN HALL LOOKED LIKE? THAT'S A GENTLE REMINDER OF WHAT THEY'RE WILLING TO DO TO GET AT US. BE CAREFUL."; +TXT_DLG_SCRIPT03_d21224_TALKT = "TALK TO MACIL. HE'LL BE ABLE TO HELP YOU."; +TXT_DLG_SCRIPT03_d22740_IVEHE = "I'VE HEARD THAT MACIL'S GOT A PLAN TO SUBVERT THE ORDER. IT HAD BETTER BE GOOD. ONE MORE FAILURE AND WE'RE ALL JUST DEAD MEAT."; +TXT_DLG_SCRIPT03_d24256_AFEWO = "A FEW OF THESE BARRELS DUMPED INTO THEIR WATER SUPPLY SHOULD EVEN THE ODDS A LITTLE."; +TXT_DLG_SCRIPT03_d25772_SOYOU = "SO YOU'RE THE NEW OPERATIVE? THANKS, WITHOUT YOU, WE'D ALL BE DEAD RIGHT NOW."; +TXT_DLG_SCRIPT03_d27288_IMWOR = "I'M WORKING ON SOMETHING THAT WILL GIVE US AN EDGE. IT WILL INCREASE YOUR STAMINA AND COMPLETELY JACK YOU UP. I'VE ALMOST GOT ALL THE BUGS WORKED OUT. CAN I DO SOMETHING FOR YOU?"; +TXT_RPLY0_SCRIPT03_d27288_PATCH = "PATCH ME UP."; +TXT_RYES0_SCRIPT03_d27288_BOYYO = "BOY, YOU'RE A REAL MESS. I'LL SEE WHAT I CAN DO."; +TXT_RPLY1_SCRIPT03_d27288_STAMI = "STAMINA IMPLANT?"; +TXT_RYES1_SCRIPT03_d27288_ALLRI = "ALL RIGHT, THIS WON'T TAKE BUT A MOMENT."; +TXT_RNO1_SCRIPT03_d27288_ITSNO = "IT'S NOT DONE YET."; +TXT_DLG_SCRIPT03_d28804_HEYIM = "HEY, I'M WORKING ON AN UPDATED VERSION OF YOUR IMPLANT. IS THERE ANYTHING ELSE I CAN DO?"; +TXT_RPLY0_SCRIPT03_d28804_PATCH = "PATCH ME UP."; +TXT_RYES0_SCRIPT03_d28804_WELLA = "WELL AT LEAST YOUR SEEING ACTION."; +TXT_RPLY1_SCRIPT03_d28804_IMPLA = "IMPLANT UPGRADE?"; +TXT_RYES1_SCRIPT03_d28804_GOODT = "GOOD THING, NEVER CAN BE TOO SAFE."; +TXT_RNO1_SCRIPT03_d28804_IMALM = "I'M ALMOST FINISHED, BUT NOT QUITE."; +TXT_DLG_SCRIPT03_d30320_ALLRI = "ALL RIGHT, I'VE ALMOST GOT EVERYTHING WORKING PERFECTLY. THERE WERE A FEW PROBLEMS LEFT TO GET RID OF. DO YOU NEED ANYTHING ELSE? "; +TXT_RPLY0_SCRIPT03_d30320_PATCH = "PATCH ME UP."; +TXT_RYES0_SCRIPT03_d30320_WHATH = "WHAT HAVE YOU BEEN TRYING TO DO? GO HEAD TO HEAD WITH A CRUSADER?"; +TXT_RPLY1_SCRIPT03_d30320_IMPLA = "IMPLANT UPGRADE?."; +TXT_RYES1_SCRIPT03_d30320_THATS = "THAT SHOULD DO IT FOR YOU."; +TXT_RNO1_SCRIPT03_d30320_LETME = "LET ME RUN SOME MORE TESTS FIRST."; +TXT_DLG_SCRIPT03_d31836_THATS = "THAT'S ALL I CAN DO ON THE IMPLANT RIGHT NOW. MAYBE SOME HEALING?"; +TXT_RPLY0_SCRIPT03_d31836_YEAH = "YEAH."; +TXT_RYES0_SCRIPT03_d31836_BOYYO = "BOY, YOU'RE A REAL MESS. I'LL SEE WHAT I CAN DO."; +TXT_DLG_SCRIPT03_d33352_WHATC = "WHAT CAN I DO FOR YOU?"; +TXT_RPLY0_SCRIPT03_d33352_IMOUT = "I'M OUT OF BULLETS."; +TXT_RYES0_SCRIPT03_d33352_HERES = "HERE'S SOME AMMO FOR YOU. DON'T WASTE IT."; +TXT_RPLY1_SCRIPT03_d33352_TEACH = "TEACH ME."; +TXT_RYES1_SCRIPT03_d33352_ALLRI = "ALL RIGHT, I'LL JUST SHOW YOU A FEW LITTLE POINTERS."; +TXT_RNO1_SCRIPT03_d33352_YOURE = "YOU'RE NOT READY YET."; +TXT_DLG_SCRIPT03_d34868_BACKA = "BACK AGAIN? WHAT DO YOU NEED?"; +TXT_RPLY0_SCRIPT03_d34868_IMOUT = "I'M OUT OF BULLETS."; +TXT_RYES0_SCRIPT03_d34868_HERES = "HERE'S SOME AMMO FOR YOU. DON'T WASTE IT."; +TXT_RNO0_SCRIPT03_d34868_YOUVE = "YOU'VE GOT ENOUGH AMMO."; +TXT_RPLY1_SCRIPT03_d34868_TEACH = "TEACH ME."; +TXT_RYES1_SCRIPT03_d34868_ALLRI = "ALL RIGHT, THIS SHOULD KEEP YOU GOING FOR A WHILE."; +TXT_RNO1_SCRIPT03_d34868_SORRY = "SORRY, CAN'T. I'M JUST FOLLOWING MACIL'S ORDERS."; +TXT_DLG_SCRIPT03_d36384_WELLW = "WELL WHICH IS IT, BULLETS OR TRAINING? I CAN'T WAIT TO GET MY HANDS ON THOSE NEW WEAPONS WE CAPTURED. A LITTLE BIT OF TRAINING AND THEN A LOT OF REVENGE."; +TXT_RPLY0_SCRIPT03_d36384_IMOUT = "I'M OUT OF AMMO."; +TXT_RYES0_SCRIPT03_d36384_HERES = "HERE'S SOME AMMO FOR YOU. DON'T WASTE IT."; +TXT_RNO0_SCRIPT03_d36384_YOUVE = "YOU'VE GOT ENOUGH AMMO."; +TXT_RPLY1_SCRIPT03_d36384_TEACH = "TEACH ME."; +TXT_RYES1_SCRIPT03_d36384_OKTAK = "O.K. TAKE WHAT YOU'VE LEARNED HERE AND SHOW THOSE ORDER CLODS THE WAY TO HELL."; +TXT_RNO1_SCRIPT03_d36384_COMEB = "COME BACK LATER, WHEN MACIL SAYS IT'S TIME."; +TXT_DLG_SCRIPT03_d37900_IVETA = "I'VE TAUGHT YOU EVERYTHING I CAN RIGHT NOW. GIVE ME SOME TIME TO PUT THE NEW WEAPONS THROUGH THEIR PACES. THAT IS UNLESS YOU'RE OUT OF BULLETS."; +TXT_RPLY0_SCRIPT03_d37900_YESIA = "YES I AM."; +TXT_RYES0_SCRIPT03_d37900_HEREY = "HERE YOU GO."; +TXT_DLG_SCRIPT03_d39416_DONTG = "DON'T GET TRIGGER HAPPY IN THE TOWN. YOU'LL SET OFF THE ALARM AND THEY'LL START SENDING IN GUARDS FROM THE CASTLE. "; +TXT_DLG_SCRIPT03_d40932_WELCO = "WELCOME, WE CAN ALWAYS USE MORE HELP."; +TXT_DLG_SCRIPT03_d42448_WHENI = "WHEN I WAS STILL IN ACTION WE HAD THE CHANCE TO EXAMINE AN ACOLYTE BEFORE THE REINFORCEMENTS ARRIVED. LISTEN, THEY'RE NOT HUMAN."; +TXT_DLG_SCRIPT03_d43964_WERET = "WE'RE TRYING TO FIND WHERE THE CASTLE GATE MECHANISMS ARE, BUT SO FAR WE'VE HAD NO LUCK."; +TXT_DLG_SCRIPT03_d45480_DONTG = "DON'T GET CAUGHT. I'VE HEARD HORROR STORIES ABOUT WHAT THEY DO TO OUR PEOPLE AFTER THEY'RE IMPRISONED. THEY JUST DISAPPEAR... WITHOUT A TRACE."; +TXT_DLG_SCRIPT03_d46996_HERES = "HERE'S SOME ADVICE, IF YOU EVER SEE ANY OF THE ORDER'S "TIN SOLDIERS" GO IN THE OTHER DIRECTION. THEY'RE FAST AND BRUTAL."; +TXT_DLG_SCRIPT03_d48512_LEAVE = "LEAVE ME BE. I'M DOING SOMETHING FOR MACIL."; + +TXT_DLG_SCRIPT04_d0_SORRY = "SORRY, NO. YOU DO NOT HAVE CLEARANCE."; +TXT_DLG_SCRIPT04_d1516_STOPS = "STOP! SHOW ME YOUR ID BADGE."; +TXT_RPLY0_SCRIPT04_d1516_HERES = "HERE'S MY I.D."; +TXT_DLG_SCRIPT04_d3032_OHOKS = "OH, OK. SURE GO AHEAD. HAVE A NICE DAY."; +TXT_DLG_SCRIPT04_d4548_DERWI = "DERWIN? YEAH, HE'S DOWN IN THE WAREHOUSE, BUT YOU'RE NOT GETTING IN UNLESS YOU'RE CLEARED."; +TXT_RPLY0_SCRIPT04_d4548_IVEGO = "I'VE GOT CLEARANCE."; +TXT_DLG_SCRIPT04_d6064_GOON = "GO ON."; +TXT_RPLY0_SCRIPT04_d6064_DOYOU = "DO YOU KNOW WHERE HE IS?"; +TXT_DLG_SCRIPT04_d7580_IDONT = "I DON'T KNOW WHERE ANYBODY IS. I JUST KEEP THE LID ON THE RAT TRAP."; +TXT_DLG_SCRIPT04_d9096_YOUAR = "YOU ARE AN UNPLEASANT DISTRACTION."; +TXT_DLG_SCRIPT04_d10612_MOVEA = "MOVE ALONG OR TASTE METAL."; +TXT_DLG_SCRIPT04_d12128_PASSY = "PASS YOUR ID THROUGH HERE FOR ACCESS."; +TXT_DLG_SCRIPT04_d13644_GETBA = "GET BACK TO WORK, NOW!"; +TXT_DLG_SCRIPT04_d15160_GETBA = "GET BACK TO WORK, NOW!"; +TXT_DLG_SCRIPT04_d16676_WEVEB = "WE'VE BEEN RUNNING AROUND THE CLOCK FOR WEEKS WITH NO DOWN TIME. I'D SAY THAT THE ORDER IS PLANNING A SUPPRESSION RAID ON THE FRONT."; +TXT_DLG_SCRIPT04_d18192_OHDAM = "OH, DAMN. THE GOVERNOR SENT YOU. I WAS GOING TO GIVE HIM HIS CUT, REALLY I WAS. OK, LISTEN. I'VE GOT A BUNDLE STASHED. IT'S YOURS IF YOU LOOK THE OTHER WAY."; +TXT_RPLY0_SCRIPT04_d18192_ALLRI = "ALL RIGHT, I'LL LET YOU GO."; +TXT_RPLY1_SCRIPT04_d18192_SORRY = "SORRY, NOTHING PERSONAL."; +TXT_DLG_SCRIPT04_d19708_NUTSI = "NUTS, IF I'M GOING DOWN, THEN SO ARE YOU. GUARDS!!"; +TXT_DLG_SCRIPT04_d21224_BUSIN = "BUSINESS MY ASS. HELP, GUARDS, I'VE GOT A LIVE ONE."; +TXT_DLG_SCRIPT04_d22740_AHIGO = "AH, I GOT WORD FROM MACIL THAT YOU'D BE COMING. I HAVE A WAY TO GET YOU INSIDE THE POWER STATION, BUT IT'S ON THE RISKY SIDE."; +TXT_RPLY0_SCRIPT04_d22740_ILLTA = "I'LL TAKE MY CHANCES."; +TXT_DLG_SCRIPT04_d24256_ALLRI = "ALL RIGHT, I STOLE AN I.D. FROM THE CORPSE OF SOME FOOL WHO FELL INTO THE REACTOR'S COOLANT PIT. --BLAT-- INSTANT DEEP FRY."; +TXT_RPLY0_SCRIPT04_d24256_WHATS = "WHAT SHOULD I DO ONCE I'M IN?"; +TXT_DLG_SCRIPT04_d25772_TELLW = "TELL WHOEVER ASKS THAT YOU'RE THE REPLACEMENT WORKER FOR MR. CRISPY. IT'S JUST DUMB ENOUGH TO WORK. OH, AND YOU MIGHT WANT TO CHECK OUT THE STOREROOM THAT'S RIGHT ABOVE US."; +TXT_RPLY0_SCRIPT04_d25772_BOYIH = "BOY I HOPE THIS I.D. WORKS."; +TXT_DLG_SCRIPT04_d27288_GETOU = "GET OUT OF HERE, UNLESS YOU WANT TO END UP MR. DEAD."; +TXT_DLG_SCRIPT04_d28804_HEYLE = "HEY, LEAVE ME ALONE. IF THEY CATCH US WASTING TIME WE GET DEAD, OR EXTRA WORK."; +TXT_DLG_SCRIPT04_d30320_SUCHP = "SUCH PRESSURE, AT THIS RATE WE'LL BE BACK TO NORMAL SHIFTS SOON. WE'RE PUMPING TONS OF POWER TO THE CASTLE AND I'M ALMOST FINISHED LOGGING THOSE NEW WEAPONS."; +TXT_RPLY0_SCRIPT04_d30320_WEAPO = "WEAPONS?"; +TXT_DLG_SCRIPT04_d31836_WHATD = "WHAT DO YOU THINK, WE'RE BACKED UP ON SOCKS?"; +TXT_RPLY0_SCRIPT04_d31836_WHATK = "WHAT KIND OF WEAPONS?"; +TXT_DLG_SCRIPT04_d33352_AREYO = "ARE YOU DEAF? I JUST TOLD YOU HOW BUSY I AM. GET BACK TO WORK."; +TXT_DLG_SCRIPT04_d34868_WHOAR = "WHO ARE YOU? ONLY CLEARANCE LEVEL TWO PERSONNEL ARE PERMITTED IN THIS AREA."; +TXT_RPLY0_SCRIPT04_d34868_IMTHE = "I'M THE REPLACEMENT WORKER."; +TXT_DLG_SCRIPT04_d36384_ABOUT = "ABOUT TIME YOU SHOWED UP. GO TALK WITH KETRICK IN THE CORE. OH, AND TAKE THIS KEY CARD. DON'T WANT YOU GETTING SHOT ON YOUR FIRST DAY, HUH?"; +TXT_RPLY0_SCRIPT04_d36384_WHERE = "WHERE'S THE POWER CRYSTAL?"; +TXT_DLG_SCRIPT04_d37900_IFYOU = "IF YOU DON'T GET TO WORK, YOU'LL GET SHOT ANYWAY. MOVE YOUR TUNIC."; +TXT_DLG_SCRIPT04_d39416_IDONT = "I DON'T MEAN TO SOUND ALARMIST, BUT IF THEY KEEP PUSHING THE POWER CRYSTAL THIS HARD IT'S GONNA FLAW, AND THEN SHATTER, AND THEN *BOOM*! ...JUST A THOUGHT."; +TXT_DLG_SCRIPT04_d40932_LETME = "LET ME BE QUITE CLEAR. IF THIS TERMINAL LOCKS UP AGAIN, THE COOLANT LEVEL WILL DROP AND WE'LL ALL HAVE TO ANSWER TO THE PROGRAMMER. IF WE SURVIVE."; +TXT_DLG_SCRIPT04_d42448_YOUYE = "YOU! YEAH, YOU. YOU AREN'T CLEARED FOR THIS AREA. LET ME HAVE YOUR KEY CARD, FAST. I'M IN SUCH A BAD MOOD!"; +TXT_RPLY0_SCRIPT04_d42448_HEREH = "HERE, HERE'S MY CARD."; +TXT_DLG_SCRIPT04_d43964_THISI = "THIS IS GARBAGE! WAIT HERE. OH SCREW IT. GUARDS KILL THIS INTRUDER!"; +TXT_DLG_SCRIPT04_d45480_WORKS = "WORK, SLEEP, GET TORTURED, WHAT A LIFE. SAY, YOU THE REPLACEMENT FOR THE CARELESS PIT DIVER?"; +TXT_RPLY0_SCRIPT04_d45480_YEAHC = "YEAH, CAN'T WAIT TO START."; +TXT_DLG_SCRIPT04_d46996_YEAHR = "YEAH, RIGHT. OK, GET YOUR ASS TO WORK."; +TXT_RPLY0_SCRIPT04_d46996_WHERE = "WHERE'S THE CRYSTAL?"; +TXT_DLG_SCRIPT04_d48512_GOTAL = "GO TALK TO KETRICK. BRING THE WALKWAY UP USING THE SWITCHES, THEN USE THIS I.D. FOR THE ELEVATOR."; +TXT_RPLY0_SCRIPT04_d48512_WHERE = "WHERE'S THE CRYSTAL AGAIN?"; +TXT_DLG_SCRIPT04_d50028_NONEO = "NONE OF YOUR BUSINESS, GO TALK TO KETRICK."; +TXT_RPLY0_SCRIPT04_d50028_OK = "OK."; +TXT_DLG_SCRIPT04_d51544_IFITS = "IF IT'S BUSY WORK YOU WANT, GO STARE AT THAT SCREEN FOR A WHILE, IT'LL BORE YOU TO TEARS."; +TXT_DLG_SCRIPT04_d53060_THEAL = "THE ALMIGHTY PROGRAMMER IS SO PARANOID OF INFILTRATION THAT HE'S LOCKED UP THE COMPUTER CORE. HOW AM I SUPPOSED TO GET MY WORK DONE? THE ONLY WAY IN IS THE SUICIDE RUN."; +TXT_RPLY0_SCRIPT04_d53060_SUICI = "SUICIDE RUN? WHAT'S THAT?"; +TXT_DLG_SCRIPT04_d54576_ITSAS = "IT'S A SURE-FIRE WAY TO GET KILLED, BUT THAT'S NOT IMPORTANT RIGHT NOW. GO DOWN THE LIFT IF YOU'RE SO INCLINED."; + +TXT_DLG_SCRIPT05_d0_HALTN = "HALT. NO ONE GETS THROUGH HERE WITHOUT AUTHORIZATION FROM THE WARDEN OR THE GOVERNOR."; +TXT_RPLY0_SCRIPT05_d0_HERES = "HERE'S MY PASS, LET ME IN."; +TXT_DLG_SCRIPT05_d1516_OKBUT = "OK, BUT TALK ONLY TO THE WARDEN."; +TXT_DLG_SCRIPT05_d3032_DOILO = "DO I LOOK LIKE THE WARDEN TO YOU? KEEP MOVING, THIS AREA'S OFF LIMITS."; +TXT_DLG_SCRIPT05_d4548_THEOR = "THE ORDER'S WRATH WILL RAIN DOWN ON THESE SERVANTS UNTIL THEY BEG FOR DEATH."; +TXT_DLG_SCRIPT05_d6064_IDONT = "I DON'T CARE IF MOUREL GAVE YOU A PASS. THIS IS MY PRISON. MY KEY IS THE ONLY WAY IN OR OUT, AND I'M NOT TAKING ANY CHANCES. THE ORDER DOES NOT TOLERATE MISTAKES."; +TXT_RPLY0_SCRIPT05_d6064_GIVEM = "GIVE ME THE DAMN KEY!"; +TXT_DLG_SCRIPT05_d7580_OVERM = "OVER MY DEAD BODY!"; +TXT_RPLY0_SCRIPT05_d7580_GREAT = "GREAT IDEA!"; +TXT_DLG_SCRIPT05_d9096_SHACK = "SHACKLES OR CHAINS, I WANT YOU TO HANG AROUND."; +TXT_DLG_SCRIPT05_d10612_IDONT = "I DON'T KNOW HOW YOU MANAGED TO GET PAST THE GUARDS AND THE WARDEN, BUT I HOPE YOU LIKE THE DECOR, BECAUSE YOU JUST MOVED IN."; +TXT_RPLY0_SCRIPT05_d10612_FREEM = "FREE MY COMRADES OR DIE!"; +TXT_DLG_SCRIPT05_d12128_KILLM = "KILL ME AND YOU'LL NEVER SET ANYONE FREE. I POSSESS THE ONLY PATTERN KEY THAT WILL UNLOCK THE CELLS."; +TXT_RPLY0_SCRIPT05_d12128_CANYO = "CAN YOU LEND ME A HAND THEN?"; +TXT_DLG_SCRIPT05_d13644_MOVEA = "MOVE ALONG OR JOIN YOUR FRIENDS."; +TXT_DLG_SCRIPT05_d15160_DONTJ = "DON'T JUST STAND THERE, GET US OUT OF HERE!"; +TXT_DLG_SCRIPT05_d16676_THESK = "THE SKY, I WANT TO SEE THE SKY."; +TXT_DLG_SCRIPT05_d18192_FIVEF = "FIVE FEET BY FOUR FEET, FIVE FEET BY FOUR FEET, FIVE FEET BY FOUR FEET."; +TXT_DLG_SCRIPT05_d19708_DONTR = "DON'T RELEASE ME IF THE ORDER'S STILL IN CHARGE. I CAN'T STAND THE TERROR."; +TXT_DLG_SCRIPT05_d21224_IDONT = "I DON'T WANT TO BITCH, BUT IT'S ABOUT TIME MACIL SENT SOMEONE TO GET US OUT."; +TXT_DLG_SCRIPT05_d22740_IDGIV = "I'D GIVE ANYTHING FOR JUST A CRUST OF BREAD. I'M SO HUNGRY."; + +TXT_DLG_SCRIPT06_d0_AHASU = "AH, A SURFACER IN NEED OF A FAVOR. DOWN HERE YOU DO A FAVOR TO GET A FAVOR AND I NEED THE TOWN ENTRANCE THAT IS OUR PATH TO FOOD OPENED. THE ORDER HAS IT SEALED AND GUARDED."; +TXT_RPLY0_SCRIPT06_d0_WHERE = "WHERE IS THE GATE MECHANISM?"; +TXT_DLG_SCRIPT06_d1516_DOMYF = "DO MY FAVOR FIRST, OR YOU'LL GET SQUAT FROM ME."; +TXT_RPLY0_SCRIPT06_d1516_HOWWI = "HOW WILL YOU KNOW IT'S OPEN?"; +TXT_DLG_SCRIPT06_d3032_BRING = "BRING ME BACK THE GUARD'S UNIFORM. THAT WAY ONE OF MY RATFELLOWS CAN WEAR IT AND NO ONE WILL TRY TO SHUT THE DOOR AGAIN."; +TXT_RPLY0_SCRIPT06_d3032_YOUWA = "YOU WANT HIS UNIFORM?"; +TXT_DLG_SCRIPT06_d4548_OPENT = "OPEN THE DOOR, BRING ME THE UNIFORM AND WE TRADE. OTHERWISE, PISS OFF."; +TXT_DLG_SCRIPT06_d6064_HAVEY = "HAVE YOU BROUGHT ME WHAT I WANT?"; +TXT_RPLY0_SCRIPT06_d6064_HOWAB = "HOW ABOUT THIS UNIFORM?"; +TXT_RNO0_SCRIPT06_d6064_BRING = "BRING ME THE UNIFORM."; +TXT_DLG_SCRIPT06_d7580_GOODH = "GOOD. HERE'S SOMETHING EXTRA. MY FELLOWS TORE THIS OFF OF A FALLEN CRUSADER, IT'S THE PARTS THAT MAKE UP A FLAMETHROWER. NOW IRALE CAN MAKE ONE FOR YOU. YOU CAN HAVE SUCH FUN."; +TXT_RPLY0_SCRIPT06_d7580_WHERE = "WHERE'S THE GATE MECHANISM?"; +TXT_DLG_SCRIPT06_d9096_YOUHA = "YOU HAVE TO ENTER ANOTHER PART OF THE SEWERS. TO GET THERE YOU MUST ENTER THE CASTLE FROM A SEWER MAINTENANCE DOOR AND DRAIN THE FLUID RECLAMATION TANK. AT THE BOTTOM IS THE HIDDEN ENTRANCE TO SEWERS, AND RIGHT BEYOND THAT IS THE MANUAL GATE CONTROL."; +TXT_RPLY0_SCRIPT06_d9096_ANYTH = "ANYTHING ELSE YOU CAN DO?"; +TXT_DLG_SCRIPT06_d10612_GOODL = "GOOD LUCK. I'VE OPENED SEVERAL OF OUR TUNNELS FOR YOU. IT SHOULD MAKE YOUR TASK EASIER. OH, SIZE TEN, PERFECT! ...BUT DREADFUL COLORS."; +TXT_RPLY0_SCRIPT06_d10612_THANK = "THANKS FOR YOUR HELP."; +TXT_DLG_SCRIPT06_d12128_YOUGI = "YOU GIVE ME NOTHING, YOU GET NOTHING."; +TXT_DLG_SCRIPT06_d13644_WERAN = "WERAN WILL SAVE US. HE'S NEVER FAILED US YET."; +TXT_DLG_SCRIPT06_d15160_IFYOU = "IF YOU SEEK AN ANSWER TO YOUR PROBLEM, FIND WERAN. "; +TXT_DLG_SCRIPT06_d16676_LONGL = "LONG LIVE THE FRONT? THAT'S ALL CRAP. WE'RE ALL JUST WAITING TO DIE. "; +TXT_DLG_SCRIPT06_d18192_WITHO = "WITH OUR PASSAGE TO THE SURFACE SEALED, WE CAN'T EVEN FEED OURSELVES."; +TXT_DLG_SCRIPT06_d19708_FOODD = "FOOD, DO YOU HAVE ANY FOOD? PLEASE HELP US."; +TXT_DLG_SCRIPT06_d21224_THISI = "THIS IS MY REWARD FOR LETTING PRISONERS ESCAPE, GUARDING THE SEWERS. IF I EVER FIND THE GUY WHO BROKE THEM OUT, I'LL SLAUGHTER HIM."; +TXT_DLG_SCRIPT06_d22740_WEVEG = "WE'VE GOT THOSE LITTLE BEGGARS JUST WHERE WE WANT THEM. FEW MORE DAYS OF THIS, AND THEY'LL HAVE STARVED THEMSELVES INTO OBLIVION."; +TXT_DLG_SCRIPT06_d24256_WHATS = "WHAT'S YOUR CLEARANCE? THERE'S NO UNAUTHORIZED PERSONNEL ALLOWED UP HERE."; + +TXT_DLG_SCRIPT07_d0_WHATT = "WHAT THE HELL? WHO OPENED THE GATES? SOUND THE ALARM!!!"; +TXT_DLG_SCRIPT07_d1516_THERE = "THERE'S ANOTHER WAY INTO THE SEWERS, THROW THAT SWITCH AND THEN GO UP AND PURGE THE RECLAMATION TANK."; +TXT_DLG_SCRIPT07_d3032_WHATT = "WHAT THE HELL'S YOUR PROBLEM. IF THE PROGRAMMER COMES UP FROM HIS AUDIENCE CHAMBER, YOU'RE DEAD."; +TXT_DLG_SCRIPT07_d4548_HEYYO = "HEY, YOU'RE NOT CLEARED TO GO DOWN THERE."; +TXT_DLG_SCRIPT07_d6064_PROGR = "PROGRAMMER? WHO TOLD YOU THAT? THERE IS NO PROGRAMMER. THAT STORY WAS SPREAD AGES AGO. DON'T TELL ME THE FRONT ACTUALLY BELIEVED THAT CRAP. IDIOTS."; +TXT_RPLY0_SCRIPT07_d6064_WELLW = "WELL, WHAT'S THE TRUTH THEN?"; +TXT_DLG_SCRIPT07_d7580_ITOLD = "I TOLD YOU ALL I KNOW. YOU ARE WASTING YOUR TIME."; +TXT_DLG_SCRIPT07_d9096_FIGHT = "FIGHT ON, WE WILL TRIUMPH. THIS DAY WILL BELONG TO US!"; +TXT_DLG_SCRIPT07_d10612_FIGHT = "FIGHT ON, WE WILL TRIUMPH. THIS DAY WILL BELONG TO US!"; +TXT_DLG_SCRIPT07_d12128_FIGHT = "FIGHT ON, WE WILL TRIUMPH. THIS DAY WILL BELONG TO US!"; +TXT_DLG_SCRIPT07_d13644_FIGHT = "FIGHT ON, WE WILL TRIUMPH. THIS DAY WILL BELONG TO US!"; +TXT_DLG_SCRIPT07_d15160_FIGHT = "FIGHT ON, WE WILL TRIUMPH. THIS DAY WILL BELONG TO US!"; +TXT_DLG_SCRIPT07_d16676_FIGHT = "FIGHT ON, WE WILL TRIUMPH. THIS DAY WILL BELONG TO US!"; + +TXT_DLG_SCRIPT08_d0_YOUKI = "YOU KILLED ALL THE GUARDS. DON'T HURT ME. I TOLD HIM THIS WAS A DUMB IDEA. THE REAL PROGRAMMER'S IN THE KEEP. HERE, TAKE THIS KEY."; +TXT_RPLY0_SCRIPT08_d0_YOURE = "YOU'RE THE PROGRAMMER!"; +TXT_DLG_SCRIPT08_d1516_DOILO = "DO I LOOK LIKE I WIELD ULTIMATE POWER? THE ORDER USES US ALL. NOW GO, I'M DEAD ALREADY."; +TXT_DLG_SCRIPT08_d3032_POWER = "POWER IS THE KEY!"; + +TXT_DLG_SCRIPT10_d0_GOODY = "GOOD, YOU'RE CONSCIOUS AGAIN. WHEN YOU GRABBED THAT ITEM THE PROGRAMMER DROPPED YOU LET LOOSE SOME TERRIBLE SECRETS."; +TXT_RPLY0_SCRIPT10_d0_WHATK = "WHAT KIND OF SECRETS. "; +TXT_DLG_SCRIPT10_d1516_WEHAV = "WE HAVE NO IDEA WHERE THIS WEAPON CAME FROM, BUT WE MUST FIND OUT. YOU HAVE WRESTED ONE FROM THE ORDER, BUT WE MUST HAVE ALL FIVE. WE HAVE REACHED THE LIMITS OF MY KNOWLEDGE. SEEK OUT THE ORACLE AND ASK IT FOR HELP."; +TXT_RPLY0_SCRIPT10_d1516_IMGON = "I'M GONNA NEED MORE SUPPLIES."; +TXT_DLG_SCRIPT10_d3032_HERES = "HERE'S SOME GOLD. GO VISIT THE MEDIC AND THE WEAPONS TRAINER AND THEN, MOVE OUT!"; +TXT_RPLY0_SCRIPT10_d3032_RIGHT = "RIGHT!"; +TXT_DLG_SCRIPT10_d4548_FIGHT = "FIGHT FOR THE FRONT AND FREEDOM. MOVE OUT."; +TXT_DLG_SCRIPT10_d6064_WHATP = "What prompts your return? Are you hurt? There's no time to lose, continue with your mission. Complete the SIGIL."; +TXT_RPLY0_SCRIPT10_d6064_THEOR = "The Oracle says YOU must die!"; +TXT_DLG_SCRIPT10_d7580_IHAVE = "I have sworn myself to freedom. It is the Oracle who holds the third piece. There's your traitor."; +TXT_RPLY0_SCRIPT10_d7580_THEOR = "THE ORACLE WILL DIE THEN!"; +TXT_RPLY1_SCRIPT10_d7580_ITHIN = "I THINK YOU'RE THE TRAITOR!"; +TXT_DLG_SCRIPT10_d9096_SPIRI = "Spirit of the one god avenge me and turn this world into dust."; +TXT_DLG_SCRIPT10_d10612_YOUHA = "You have made the right decision. Its clear that the ORACLE is controlled by whatever evil is driving The ORDER. Return to it and claim the third piece of the SIGIL."; +TXT_DLG_SCRIPT10_d12128_THERE = "There seems no end to the horror we face. We have found out that The Order is NOT killing our people. it is transforming them, into bio-mechanical soldiers. Find the facility where this is being done and CLOSE IT, permanently."; +TXT_RPLY0_SCRIPT10_d12128_WHERE = "WHERE IS THIS LOCATED?"; +TXT_DLG_SCRIPT10_d13644_ONEOF = "One of our captains, RICHTER, is waiting for you by the waterfall in the commons. He has seen the facility and can guide you inside. Stop this atrocity, now."; +TXT_RPLY0_SCRIPT10_d13644_THEYL = "THEY'LL PAY FOR THIS!"; +TXT_DLG_SCRIPT10_d15160_FIGHT = "FIGHT FOR THE FRONT AND FREEDOM. MOVE OUT."; +TXT_DLG_SCRIPT10_d16676_IAMTH = "I am the one God... I need his spirit to be free so that I can leave my body, and join him in flight. You have no idea what you possess... and what terror you face... the one God must be free... and he will reward me... I will be ONE..."; +TXT_RPLY0_SCRIPT10_d16676_IWILL = "I WILL DESTROY YOU!"; +TXT_DLG_SCRIPT10_d18192_GLADT = "GLAD TO SEE YOU MADE IT. WHAT DO YOU NEED? "; +TXT_RPLY0_SCRIPT10_d18192_HEALM = "HEAL ME."; +TXT_RYES0_SCRIPT10_d18192_WELLL = "WELL, LETS GET YOU FIXED UP."; +TXT_RNO0_SCRIPT10_d18192_YOURE = "YOU'RE FINE."; +TXT_RPLY1_SCRIPT10_d18192_ANYTH = "ANYTHING NEW?"; +TXT_RYES1_SCRIPT10_d18192_YESIV = "YES, I'VE GOT SOME NEW HARDWARE FOR YOU."; +TXT_RNO1_SCRIPT10_d18192_NOPEI = "NOPE, I'M WORKING ON IT THOUGH."; +TXT_DLG_SCRIPT10_d19708_WHATC = "WHAT CAN I DO FOR YOU NOW? FERIS IS DECRYPTING SOME REALLY COMPLEX FILES, BUT IT'S ALL WORTH IT. THERE'S ALREADY SOME INFORMATION THAT I'LL BE ABLE TO APPLY TO THE NEXT VERSION OF THE STAMINA IMPLANT."; +TXT_RPLY0_SCRIPT10_d19708_HEALM = "HEAL ME."; +TXT_RYES0_SCRIPT10_d19708_YOUSH = "YOU SHOULD LEARN TO BE A LITTLE MORE CAREFUL."; +TXT_RPLY1_SCRIPT10_d19708_WHENW = "WHEN WILL THAT BE READY?"; +TXT_RYES1_SCRIPT10_d19708_ITSRE = "IT'S READY NOW. THIS WON'T TAKE BUT A MOMENT."; +TXT_RNO1_SCRIPT10_d19708_SOON = "SOON."; +TXT_DLG_SCRIPT10_d21224_ITHIN = "I THINK I FOUND A GLITCH IN YOUR IMPLANT HARDWARE. FERIS IS HELPING ME DESIGN A RETROFIT THAT WILL TAKE CARE OF IT AND BOOST THE SPEED OF YOUR HARDWARE A LITTLE. IS THERE SOMETHING I CAN DO FOR YOU?"; +TXT_RPLY0_SCRIPT10_d21224_PATCH = "PATCH ME UP."; +TXT_RYES0_SCRIPT10_d21224_THERE = "THERE, AS GOOD AS NEW I GUESS."; +TXT_RPLY1_SCRIPT10_d21224_RETRO = "RETROFIT?"; +TXT_RYES1_SCRIPT10_d21224_AHNOW = "AH, NOW WE'RE COOKING."; +TXT_RNO1_SCRIPT10_d21224_ILLHA = "I'LL HAVE IT AS SOON AS FERIS FINISHES IT."; +TXT_DLG_SCRIPT10_d22740_HOWSI = "HOW'S IT GOING? MAN, SOME OF THIS NEW TECHNOLOGY IS SIMPLY AMAZING. THIS SHOULD ALSO HELP WITH YOUR IMPLANT. I'VE GOT A COUPLE IDEAS THAT I'M SKETCHING OUT AND I'LL HAVE THEM READY SOON. WHAT CAN I DO FOR YOU, MAYBE SOME HEALING?"; +TXT_RPLY0_SCRIPT10_d22740_YESHE = "YES, HEAL ME."; +TXT_RYES0_SCRIPT10_d22740_ALLRI = "ALL RIGHT, HERE YOU GO."; +TXT_RPLY1_SCRIPT10_d22740_HOWAB = "HOW ABOUT THAT NEW TECH?"; +TXT_RYES1_SCRIPT10_d22740_LETME = "LET ME KNOW HOW THIS WORKS."; +TXT_RNO1_SCRIPT10_d22740_IMNOT = "I'M NOT DONE DESIGNING IT YET."; +TXT_DLG_SCRIPT10_d24256_BACKA = "BACK AGAIN, DON'T YOU EVER TIRE OF THIS? I'VE GOT SOME GOOD NEWS, FERIS FOUND A WAY TO INCREASE THE OUTPUT OF YOUR IMPLANT. HE GAVE THE SPECS TO ME AND I'M TRYING TO GET IT TO BLEND WITH YOUR PHYSIOLOGY. I'M FORCE GROWING SOME TISSUE, TOTALLY NEW STUFF HERE, I HOPE IT TAKES. DO YOU NEED HEALING?"; +TXT_RPLY0_SCRIPT10_d24256_YESHE = "YES, HEAL ME."; +TXT_RYES0_SCRIPT10_d24256_DONEN = "DONE, NOW TAKE CARE OF YOURSELF."; +TXT_RPLY1_SCRIPT10_d24256_WHENW = "WHEN WILL YOU BE DONE?"; +TXT_RYES1_SCRIPT10_d24256_NOWHE = "NOW. HEY GREAT, IT WORKED!"; +TXT_RNO1_SCRIPT10_d24256_IMWAI = "I'M WAITING ON THE TISSUE TO FINISH ITS GROWTH CYCLE."; +TXT_DLG_SCRIPT10_d25772_WELLI = "WELL, I'M BACK UP TO MY OLD TRICKS AGAIN, I'M STILL WORKING ON YOUR IMPLANTS. DID YOU KNOW THAT MACIL HAS NOW AUTHORIZED THEM FOR EVERYONE? NO, HUH? IT'S BECAUSE YOU TURNED OUT SO WELL. ANYTHING I CAN DO FOR YOU?"; +TXT_RPLY0_SCRIPT10_d25772_HELPM = "HELP ME OUT HERE."; +TXT_RYES0_SCRIPT10_d25772_THATS = "THAT'S ALL I CAN DO."; +TXT_RPLY1_SCRIPT10_d25772_NEWIM = "NEW IMPLANT?"; +TXT_RYES1_SCRIPT10_d25772_YEPMY = "YEP, MY BEST ONE YET."; +TXT_RNO1_SCRIPT10_d25772_SORRY = "SORRY, BUT YOU JUST HAVE TO WAIT."; +TXT_DLG_SCRIPT10_d27288_THISI = "THIS IS IT, FERIS HAS MANAGED TO DRAIN EVERYTHING HE COULD OUT OF ALL THE DATA WE HAVE, THIS WILL THE BEST, AND LAST IMPLANT UPGRADE. IT WILL BE SORT OF DEPRESSING, SEEING MY BEST CREATION REACH ITS PEAK. WELL, AT LEAST THE REST OF THIS CREW WILL KEEP ME OCCUPIED."; +TXT_RPLY0_SCRIPT10_d27288_COULD = "COULD YOU HEAL ME?"; +TXT_RYES0_SCRIPT10_d27288_THERE = "THERE, YOU'RE ALL SET NOW."; +TXT_DLG_SCRIPT10_d28804_ITSTH = "IT'S THE HERO. GREAT JOB! WHAT CAN I GET FOR YOU? WE'VE GOT A LITTLE LARGER SELECTION NOW THAT WE HAVE ALL THE ORDINANCE FROM THE CASTLE. IF YOU NEED TO BUY SOME AMMO TALK TO JUSTIN. HE'LL TAKE CARE OF YOU. "; +TXT_RPLY0_SCRIPT10_d28804_IMOUT = "I'M OUT OF BULLETS."; +TXT_RYES0_SCRIPT10_d28804_HERES = "HERE'S SOME AMMO FOR YOU. DON'T WASTE IT."; +TXT_RPLY1_SCRIPT10_d28804_TEACH = "TEACH ME."; +TXT_RYES1_SCRIPT10_d28804_NOWAF = "NOW, A FEW TIPS ON THE BIG GUNS."; +TXT_RNO1_SCRIPT10_d28804_YOURE = "YOU'RE NOT READY YET."; +TXT_DLG_SCRIPT10_d30320_HOWST = "HOW'S THE WAR EFFORT? NEVERMIND, IF WE'RE STILL HERE, IT MUST BE GOING FINE. WHAT CAN I DO FOR YOU?"; +TXT_RPLY0_SCRIPT10_d30320_IRANO = "I RAN OUT OF BULLETS."; +TXT_RYES0_SCRIPT10_d30320_THATS = "THAT SHOULD HELP."; +TXT_RNO0_SCRIPT10_d30320_YOUVE = "YOU'VE GOT ENOUGH AMMO."; +TXT_RPLY1_SCRIPT10_d30320_TEACH = "TEACH ME."; +TXT_RYES1_SCRIPT10_d30320_HEREI = "HERE, I'LL SHOW YOU A FEW TRICKS OF THE TRADE."; +TXT_RNO1_SCRIPT10_d30320_YOURE = "YOU'RE NOT READY YET."; +TXT_DLG_SCRIPT10_d31836_WELLH = "WELL HAVE YOU COME FOR TUTELAGE OR IS IT SOME AMMO YOU'RE LOOKING FOR? DON'T THINK THAT I'M DONE WITH YOU YET. I'VE STILL GOT A FEW TRICKS UP MY SLEEVE."; +TXT_RPLY0_SCRIPT10_d31836_ITSAM = "IT'S AMMO FOR NOW."; +TXT_RYES0_SCRIPT10_d31836_HERES = "HERE'S SOME AMMO FOR YOU. DON'T WASTE IT."; +TXT_RNO0_SCRIPT10_d31836_YOUVE = "YOU'VE GOT ENOUGH AMMO."; +TXT_RPLY1_SCRIPT10_d31836_TEACH = "TEACH ME."; +TXT_RYES1_SCRIPT10_d31836_TIMEF = "TIME FOR THE ADVANCED LESSONS."; +TXT_RNO1_SCRIPT10_d31836_YOURE = "YOU'RE NOT READY YET."; +TXT_DLG_SCRIPT10_d33352_WELLW = "WELL, WHAT IS IT NOW? DON'T YOU EVER TAKE A BREAK? I'M GLAD THAT YOU'RE STILL BREATHING. I'D HATE FOR MY FAVORITE STUDENT TO COME BACK LOOKING OUT FROM THE INSIDE OF A BODY BAG."; +TXT_RPLY0_SCRIPT10_d33352_INEED = "I NEED SOME MORE BULLETS."; +TXT_RYES0_SCRIPT10_d33352_THERE = "THERE, DON'T WASTE IT."; +TXT_RNO0_SCRIPT10_d33352_YOUHA = "YOU HAVE ENOUGH."; +TXT_RPLY1_SCRIPT10_d33352_WHATC = "WHAT CAN YOU TEACH ME?"; +TXT_RYES1_SCRIPT10_d33352_DONTG = "DON'T GET SNIPPY, YOU'VE STILL SOME ROOM TO GROW."; +TXT_RNO1_SCRIPT10_d33352_NOTHI = "NOTHING UNTIL YOU'RE READY."; +TXT_DLG_SCRIPT10_d34868_LOOKW = "LOOK WHO'S BACK, WHAT'S ON YOUR MIND? I KNOW IT'S BEEN HARD, BUT ALL OF US APPRECIATE YOUR EFFORTS, BELIEVE ME."; +TXT_RPLY0_SCRIPT10_d34868_IVERU = "I'VE RUN OUT OF BULLETS."; +TXT_RYES0_SCRIPT10_d34868_WHATE = "WHAT ELSE IS NEW, HERE YOU GO."; +TXT_RNO0_SCRIPT10_d34868_YOUHA = "YOU HAVE MORE THAN I CAN GIVE YOU."; +TXT_RPLY1_SCRIPT10_d34868_TEACH = "TEACH ME WHAT YOU CAN."; +TXT_RYES1_SCRIPT10_d34868_ALLRI = "ALL RIGHT, HERE'S SOME POINTERS."; +TXT_RNO1_SCRIPT10_d34868_NOTRI = "NOT RIGHT NOW."; +TXT_DLG_SCRIPT10_d36384_WHATI = "WHAT IS IT YOU NEED? I HOPE THAT YOU'RE GIVING THE ORDER A TASTE OF THE KIND OF PAIN THAT WE HAVE BEEN FEELING FOR YEARS."; +TXT_RPLY0_SCRIPT10_d36384_SOMEA = "SOME AMMO."; +TXT_RYES0_SCRIPT10_d36384_THERE = "THERE YOU GO, DON'T WASTE IT."; +TXT_RNO0_SCRIPT10_d36384_YOUVE = "YOU'VE GOT ENOUGH AMMO."; +TXT_RPLY1_SCRIPT10_d36384_TEACH = "TEACH ME."; +TXT_RYES1_SCRIPT10_d36384_AFEWM = "A FEW MORE LESSONS AND YOU'LL KNOW ALL THAT I CAN TEACH."; +TXT_RNO1_SCRIPT10_d36384_YOURE = "YOU'RE NOT READY YET."; +TXT_DLG_SCRIPT10_d37900_ICANT = "I CAN'T BELIEVE THAT WE'RE STILL AROUND, YOU AND I. THERE'S JUST TOO MANY OF US THAT HAVE PASSED SINCE THE BEGINNING. WHAT CAN I DO FOR YOU FRIEND?"; +TXT_RPLY0_SCRIPT10_d37900_IMOUT = "I'M OUT OF BULLETS."; +TXT_RYES0_SCRIPT10_d37900_HEREU = "HERE, USE THEM TO KEEP YOU IN GOOD HEALTH."; +TXT_RNO0_SCRIPT10_d37900_YOUHA = "YOU HAVE ENOUGH."; +TXT_RPLY1_SCRIPT10_d37900_TEACH = "TEACH ME."; +TXT_RYES1_SCRIPT10_d37900_WELLT = "WELL, THAT'S IT, YOU'RE DONE. I CAN TEACH NO MORE."; +TXT_RNO1_SCRIPT10_d37900_RETUR = "RETURN AFTER MACIL TELLS YOU IT'S TIME."; +TXT_DLG_SCRIPT10_d39416_IVETA = "I'VE TAUGHT YOU EVERYTHING I CAN RIGHT NOW. I'VE GIVEN YOU ALL THAT YOU SHOULD EVER NEED, UNLESS YOU'RE OUT OF BULLETS. THOSE I CAN STILL HELP YOU WITH."; +TXT_RPLY0_SCRIPT10_d39416_YESIA = "YES I AM."; +TXT_RYES0_SCRIPT10_d39416_HEREY = "HERE YOU GO. "; +TXT_DLG_SCRIPT10_d40932_CHECK = "CHECK OUT WHAT'S NEW, THE TELEPORTER BEACON. WHEN YOU USE THE BEACON, WE'LL TRACK THE SIGNAL AND SEND HELP. IS THERE SOMETHING I CAN GET YOU?"; +TXT_RPLY0_SCRIPT10_d40932_BOXOF = "BOX OF ROCKETS"; +TXT_RYES0_SCRIPT10_d40932_THERE = "THERE YOU GO."; +TXT_RNO0_SCRIPT10_d40932_YOUCA = "YOU CAN'T AFFORD THAT!"; +TXT_RPLY1_SCRIPT10_d40932_HEGRE = "H-E GRENADES."; +TXT_RYES1_SCRIPT10_d40932_HEREY = "HERE YOU GO."; +TXT_RNO1_SCRIPT10_d40932_COMEB = "COME BACK WHEN YOU HAVE ENOUGH MONEY."; +TXT_RPLY2_SCRIPT10_d40932_ENERG = "ENERGY POD"; +TXT_RYES2_SCRIPT10_d40932_HERES = "HERE'S YOUR ENERGY POD"; +TXT_RNO2_SCRIPT10_d40932_YOUDO = "YOU DON'T HAVE ENOUGH FOR THAT."; +TXT_RPLY3_SCRIPT10_d40932_TELEP = "TELEPORTER BEACON"; +TXT_RYES3_SCRIPT10_d40932_HELPW = "HELP, WHEN AND WHERE YOU NEED IT."; +TXT_RNO3_SCRIPT10_d40932_SORRY = "SORRY, NO CHARITY."; +TXT_DLG_SCRIPT10_d42448_NOWTH = "NOW THAT WE ACTUALLY HAVE THE CASTLE UNDER CONTROL, WE HAVE TO BE EXTRA VIGILANT TO KEEP IT. THE ORDER'S PROBABLY GETTING READY TO STRIKE BACK RIGHT NOW."; +TXT_DLG_SCRIPT10_d43964_BECAR = "BE CAREFUL OUT THERE."; +TXT_DLG_SCRIPT10_d45480_KEEPU = "KEEP UP THE GREAT WORK, WE COULDN'T HAVE DONE IT WITHOUT YOU."; +TXT_DLG_SCRIPT10_d46996_WHATI = "WHAT IS THE WISDOM YOU SEEK?"; +TXT_RPLY0_SCRIPT10_d46996_THESI = "THE SIGIL OF THE ONE GOD."; +TXT_RYES0_SCRIPT10_d46996_THERE = "THE REMAINING PIECES LIE WRAPPED IN THE ARMS IN DARKNESS."; +TXT_DLG_SCRIPT10_d48512_THESE = "THE SECOND PIECE OF THE SIGIL LIES AT THE HEART OF THE CRIMSON AND OBSIDIAN TOWER. BE WARNED, THERE THE DRAGON AWAITS YOU. THE TIME OF YOUR COMING HAS BEEN FORETOLD. SEEK THE TOWER, YOUR PRIZE LIES WITHIN."; +TXT_RPLY0_SCRIPT10_d48512_WHATA = "WHAT ABOUT THE OTHER PIECES?"; +TXT_RYES0_SCRIPT10_d48512_RETUR = "RETURN AFTER YOU HAVE BESTED THE DRAGON."; +TXT_DLG_SCRIPT10_d50028_HEY = "HEY."; +TXT_RPLY0_SCRIPT10_d50028_STUFF = "STUFF"; +TXT_RYES0_SCRIPT10_d50028_HEREY = "HERE YOU GO."; +TXT_DLG_SCRIPT10_d51544_HEY = "HEY."; + +TXT_DLG_SCRIPT11_d0_IMTHE = "I'm the keymaster."; +TXT_DLG_SCRIPT11_d1516_ALOTO = "A LOT OF PEOPLE WOULD SAY THIS IS A THANKLESS AND INSIGNIFICANT JOB. BUT IT'S NOT, IN FACT..."; +TXT_RPLY0_SCRIPT11_d1516_GIVEM = "GIVE ME THE KEY!"; +TXT_DLG_SCRIPT11_d3032_OKBUT = "OK, BUT REMEMBER, I'M THE KEYMASTER."; +TXT_RPLY0_SCRIPT11_d3032_OKPAL = "OK PAL, WHATEVER."; +TXT_DLG_SCRIPT11_d4548_IMTHE = "I'm the keymaster."; +TXT_DLG_SCRIPT11_d6064_DIETR = "DIE TRAITOR!"; +TXT_DLG_SCRIPT11_d7580_DIETR = "DIE TRAITOR!"; +TXT_DLG_SCRIPT11_d9096_HAVEY = "HAVE YOU COME TO GLOAT? EVEN THOUGH WE'RE BEHIND THESE BARS, AS LONG AS WE HOLD ON, YOU STILL LOSE."; +TXT_DLG_SCRIPT11_d10612_LETUS = "LET US OUT OF HERE!"; +TXT_DLG_SCRIPT11_d12128_LEAVE = "LEAVE ME ALONE!"; + +TXT_DLG_SCRIPT12_d0_WHATI = "WHAT IS THE WISDOM YOU SEEK, SIMPLE ONE?"; +TXT_RPLY0_SCRIPT12_d0_THESI = "THE SIGIL OF THE ONE GOD."; +TXT_DLG_SCRIPT12_d1516_IFEEL = "I FEEL ONE FRAGMENT RESONATE WITHIN YOU. THE SECOND LIES AT THE HEART OF THE CRIMSON AND OBSIDIAN TOWER. THERE YOU MUST COMBAT THE BISHOP, WHO IS AWARE, AND AWAITS YOU. YOU WILL FIND HIM BY FOLLOWING HIS SYMBOL OF POWER. TAKE THIS TOKEN TO THE KEYMASTER. RETURN TO ME AFTER YOU HAVE SLAIN THE BEAST."; +TXT_RPLY0_SCRIPT12_d1516_ILLBE = "I'LL BE BACK."; +TXT_DLG_SCRIPT12_d3032_ALTHO = "ALTHOUGH THE BISHOP IS FORMIDABLE, THIS QUEST IS SLIGHT. RETURN TO ME WHEN YOU POSSESS THE NEXT FRAGMENT."; +TXT_DLG_SCRIPT12_d4548_YOURN = "Your next challenge will test your spirit. The third piece is held by your own leader. He is the same as that which he sends you to kill."; +TXT_RPLY0_SCRIPT12_d4548_MACIL = "MACIL? A TRAITOR?"; +TXT_DLG_SCRIPT12_d6064_YOURB = "Your blind faith has allowed him to advance to his goals with each piece you gain. Confront him and resolve your fate."; +TXT_RPLY0_SCRIPT12_d6064_ALLRI = "ALL RIGHT, IT IS MACIL."; +TXT_RPLY1_SCRIPT12_d6064_ITSYO = "IT'S YOU I DON'T TRUST."; +TXT_DLG_SCRIPT12_d7580_WHATE = "Whatever choice you make your kind shall perish under the will of the one god."; +TXT_RPLY0_SCRIPT12_d7580_ILLBE = "I'LL BE BACK WHEN MACIL'S DEAD."; +TXT_RPLY1_SCRIPT12_d7580_ICANT = "I CAN'T LET THAT HAPPEN."; +TXT_DLG_SCRIPT12_d9096_THERI = "THE RIVER OF TIME MOVES FOREVER ONWARD, WHILE YOU STAND STILL."; +TXT_DLG_SCRIPT12_d10612_YOUHA = "You have cut the cancer from your body, but your heart still beats. Next you must find the surgeon who butchers and controls your people, The LoreMaster. Stop him, and the next piece will be yours."; +TXT_RPLY0_SCRIPT12_d10612_WHERE = "WHERE DO I FIND HIM?"; +TXT_DLG_SCRIPT12_d12128_USETH = "Use the Teleporter behind the door I just opened to reach The LoreMaster. When he is dead, use the same device to return to me."; +TXT_RPLY0_SCRIPT12_d12128_ILLBE = "I'LL BE BACK, WITH HIS PIECE!"; +TXT_DLG_SCRIPT12_d13644_THERI = "THE RIVER OF TIME MOVES FOREVER ONWARD, WHILE YOU STAND STILL."; +TXT_DLG_SCRIPT12_d15160_PITIF = "Pitiful man, you have done what thousands have failed to do... you bring me the power of the SIGIL, the voice of the one God."; +TXT_RPLY0_SCRIPT12_d15160_IDONT = "I DON'T UNDERSTAND."; +TXT_DLG_SCRIPT12_d16676_THESI = "The SIGIL will open the door and free the spirit which will cleanse this planet and let me live forever. I will strip this world of its energies and find new worlds to conquer."; +TXT_RPLY0_SCRIPT12_d16676_ICANT = "I CAN'T LET YOU DO THAT."; +TXT_DLG_SCRIPT12_d18192_YOUCA = "YOU CAN IF YOU'RE DEAD."; +TXT_DLG_SCRIPT12_d19708_THESE = "THE SECOND PIECE OF THE SIGIL LIES AT THE HEART OF THE CRIMSON AND OBSIDIAN TOWER. BE WARNED, THERE THE DRAGON AWAITS YOU. THE TIME OF YOUR COMING HAS BEEN FORETOLD. SEEK THE TOWER, YOUR PRIZE LIES WITHIN."; +TXT_RPLY0_SCRIPT12_d19708_WHATA = "WHAT ABOUT THE OTHER PIECES?"; +TXT_RYES0_SCRIPT12_d19708_RETUR = "RETURN AFTER YOU HAVE BESTED THE DRAGON."; +TXT_DLG_SCRIPT12_d21224_HAVEY = "HAVE YOU BRAVED THE FURY OF THE DRAGON?"; +TXT_RPLY0_SCRIPT12_d21224_YES = "YES."; +TXT_RYES0_SCRIPT12_d21224_THENE = "THE NEXT CHALLENGE MAY PROVE YOUR GREATEST."; +TXT_RNO0_SCRIPT12_d21224_DONOT = "DO NOT RETURN UNTIL YOUR TASK IS FINISHED."; +TXT_RPLY1_SCRIPT12_d21224_NOIHA = "NO, I HAVEN'T"; +TXT_RYES1_SCRIPT12_d21224_SEEKT = "SEEK THE CRIMSON AND OBSIDIAN TOWER."; +TXT_DLG_SCRIPT12_d22740_THETH = "THE THIRD PIECE LIES AT THE HEART OF YOUR OWN. THE UNKNOWING BETRAYAL OF YOUR PEOPLE SHOULD CEASE BEFORE YOUR ACTIONS DESTROY THEM."; +TXT_RPLY0_SCRIPT12_d22740_WHATA = "WHAT ARE YOU TALKING ABOUT?"; +TXT_RYES0_SCRIPT12_d22740_YOUAR = "YOU ARE A SIMPLE PAWN IN THIS GAME."; +TXT_DLG_SCRIPT12_d24256_THETH = "THE THIRD PIECE IS HELD BY YOUR OWN LEADER, MACIL. HE IS THE SAME AS THAT WHICH HE SENDS YOU TO KILL. YOUR UNWAVERING FAITH HAS ALLOWED HIM TO STEP CLOSER TO COMPLETING HIS GOALS WITH EACH PIECE YOU WIN. HE MUST BE DESTROYED BEFORE HE IS ABLE TO OBTAIN ALL THE PIECES."; +TXT_RPLY0_SCRIPT12_d24256_WHATI = "WHAT IF HE GETS THEM ALL?"; +TXT_RYES0_SCRIPT12_d24256_THENH = "THEN HE WILL SHED HIS CLOAK OF LIES AND REVEAL HIS TRUE FACE."; +TXT_DLG_SCRIPT12_d25772_HEAND = "HE AND I, LIKE THE OTHERS, ARE THE LAST OF A RACE THAT USED TO RULE THIS WORLD. THEY CHOOSE TO USE THEIR POWER AGAINST HUMANS, I USE MINE TO HELP THEM. WITHOUT YOUR PEOPLE WE COULD NOT SURVIVE."; +TXT_RPLY0_SCRIPT12_d25772_WHYSH = "WHY SHOULD I TRUST YOU?"; +TXT_RYES0_SCRIPT12_d25772_BECAU = "BECAUSE I AM SPEAKING THE TRUTH."; +TXT_DLG_SCRIPT12_d27288_WREST = "WREST FROM MACIL, HIS SIGIL PIECE. RETURN WITH IT HERE AND I WILL GRANT YOU THE SAME REWARD AS HE. YOU MAY KEEP BOTH THE SIGIL PIECES AND THE KNOWLEDGE THAT YOU ARE HELPING YOUR PEOPLE INSTEAD OF WORKING TO DESTROY THEM. YOU MUST CHOOSE, I CANNOT LET YOU DEPART IF YOU STILL BELONG TO HIM."; +TXT_RPLY0_SCRIPT12_d27288_ALLRI = "ALL RIGHT, I'M IN."; +TXT_RYES0_SCRIPT12_d27288_RETUR = "RETURN HERE WHEN HE'S DEAD."; +TXT_RPLY1_SCRIPT12_d27288_IDONT = "I DON'T BELIEVE YOU."; +TXT_RYES1_SCRIPT12_d27288_THENY = "THEN YOU MUST DIE!"; +TXT_DLG_SCRIPT12_d28804_HAVEY = "HAVE YOU DESTROYED THE BETRAYER?"; +TXT_RPLY0_SCRIPT12_d28804_YESMA = "YES, MACIL IS GONE."; +TXT_RYES0_SCRIPT12_d28804_HERES = "HERE'S YOUR REWARD."; +TXT_RNO0_SCRIPT12_d28804_YOUMU = "YOU MUST FIRST ELIMINATE MACIL."; +TXT_DLG_SCRIPT12_d30320_NOWTH = "NOW THAT YOU HAVE CLEANSED THE POISON FROM YOUR PEOPLE, YOUR JOURNEY ON THE PATH TO FREEDOM CAN CONTINUE UNBURDENED. HERE ARE YOUR REWARDS, AS PROMISED TO YOU. RETURN TO YOUR FRIENDS TO REDEEM THEM. THE FUTURE HOLDS GREATER DANGER, BUT ALSO GREATER REWARDS."; +TXT_RPLY0_SCRIPT12_d30320_WHATS = "WHAT SORT OF REWARDS."; +TXT_RYES0_SCRIPT12_d30320_FREED = "FREEDOM AND PEACE."; +TXT_DLG_SCRIPT12_d31836_REWAR = "REWARDS THAT DWARF ALL THOSE THAT HAVE COME BEFORE. WITH NO LEADER, YOUR MOVEMENT MAY FLOUNDER. THE FAITH OF YOUR PEOPLE, WHICH YOU ONCE STRODE UPON TO VICTORY, HAS BEEN AS BADLY BATTERED AS THEIR PHYSICAL FORMS. THEY NEED YOUR REASSURANCE AND SUPPORT."; +TXT_RPLY0_SCRIPT12_d31836_HOWDO = "HOW DO YOU FIGURE THAT?"; +TXT_RYES0_SCRIPT12_d31836_YOUAR = "YOU ARE THE ONE WHO EXPOSED THE FRAUD AND WHO HOLDS THE SIGIL PIECES."; +TXT_DLG_SCRIPT12_d33352_THERE = "THE RESTORATION OF FAITH SHOULD BEGIN WITH THE RETRIEVAL OF THE THIRD PIECE. THE DARKEST HEART OF MY PEOPLE CLINGS TO THIS PIECE, ONE WHO REVELS IN SUBVERTING YOUR RACE AND REJOICES IN THE DEGRADATION OF THOSE WHO REFUSE TO JOIN HIM."; +TXT_RPLY0_SCRIPT12_d33352_WHERE = "WHERE CAN I FIND HIM?"; +TXT_RYES0_SCRIPT12_d33352_HENEV = "HE NEVER LEAVES HIS LABORATORIES ON THE OTHER SIDE OF THE FACTORY."; +TXT_DLG_SCRIPT12_d34868_THEUN = "THE UNFORTUNATE TRUTH IS WHAT LIES BETWEEN HE AND YOU. THE ORDER'S GREATEST CONCENTRATION OF FORCES INCLUDING, WHERE THEY ARE BUILT, BRED, AND WORSHIP. YOU MUST FIND YOUR WAY THROUGH THIS MAZE, FIND AND DESTROY THE LORE MASTER. BRING HIS PIECE BACK TO ME AND I WILL REWARD YOU."; +TXT_RPLY0_SCRIPT12_d34868_HOWAB = "HOW ABOUT SOME HELP?"; +TXT_RYES0_SCRIPT12_d34868_IWILL = "I WILL BE WITH YOU."; +TXT_DLG_SCRIPT12_d36384_THERE = "THERE ARE WAYS FOR ME TO COMMUNICATE WITH YOU, THERE ARE THOSE WITH MINDS WEAKER THAN MOST, I WILL SPEAK TO YOU THROUGH THEM. LOOK FOR THE FIRST OF THESE IN THE ORDER'S TOWN. THAT IS ALL I MAY DO RIGHT NOW."; +TXT_RPLY0_SCRIPT12_d36384_HOWWI = "HOW WILL I KNOW WHERE TO LOOK?"; +TXT_RYES0_SCRIPT12_d36384_NEART = "NEAR THE WATER FALL."; +TXT_DLG_SCRIPT12_d37900_HAVEY = "HAVE YOU DESTROYED THE LORE MASTER?"; +TXT_RPLY0_SCRIPT12_d37900_YESHE = "YES, HE'S GONE."; +TXT_RYES0_SCRIPT12_d37900_YOURR = "YOUR REWARDS CANNOT DO JUSTICE FOR THIS ACCOMPLISHMENT."; +TXT_RNO0_SCRIPT12_d37900_YOUMU = "YOU MUST FINISH HIM FIRST."; +TXT_RPLY1_SCRIPT12_d37900_NOIHA = "NO I HAVEN'T KILLED HIM, YET."; +TXT_RYES1_SCRIPT12_d37900_THEND = "THEN DO NOT RETURN UNTIL THAT IS DONE."; +TXT_DLG_SCRIPT12_d39416_ICANN = "I CANNOT THANK YOU ENOUGH, NOW I SHALL WIELD ALL THE POWER OF THE ONE GOD AND USE IT TO CRUSH YOU AND YOUR ENTIRE RACE."; +TXT_RPLY0_SCRIPT12_d39416_WHATA = "WHAT ABOUT PEACE AND goodwill?"; +TXT_RYES0_SCRIPT12_d39416_IDIOT = "IDIOT, THERE CAN BE NO PEACE AS LONG AS THE ONE GOD EXISTS!"; +TXT_DLG_SCRIPT12_d40932_ITCRE = "IT CREATED US TO HELP REAP THIS PLANETS ENERGIES AND FREE IT AND OURSELVES FROM THIS MISERABLE PIT. IT EXISTS, AND NOW I SHALL TAKE ITS PLACE AND RULE THIS WORLD! THE SIGIL WILL OPEN THE DOOR, AND WHEN I FINISH, I WILL HAVE EARNED MY OWN FREEDOM!"; +TXT_RPLY0_SCRIPT12_d40932_ICANT = "I CAN'T LET YOU DO THIS."; +TXT_RYES0_SCRIPT12_d40932_TRYAN = "TRY AND STOP ME PITIFUL MEAT BEING!"; + +TXT_DLG_SCRIPT14_d0_AREYO = "ARE YOU HERE TO FREE US? BECAUSE I'VE BEEN GOOD, THEY TOOK MY IMPLANT OUT. I STILL HAVE TO STAY DOWN HERE AND WIPE UP THE DROOL THOUGH."; +TXT_RPLY0_SCRIPT14_d0_YESIM = "YES, I'M HERE TO FREE YOU."; +TXT_RYES0_SCRIPT14_d0_YOUME = "YOU MEAN IT?"; +TXT_DLG_SCRIPT14_d1516_ICANT = "I CAN'T HELP NOBODY ELSE. NOT UNTIL YOU BLOW UP THE TRANSMITTER. THAT'S WHAT'S BEHIND THE FORCEFIELD UPSTAIRS. MY JOB IS TO CHECK ON THE CONVEYORS TO MAKE SURE THEY AREN'T JAMMED. NOT ANYMORE!"; +TXT_RPLY0_SCRIPT14_d1516_THATS = "THAT'S RIGHT, YOU'RE SAVED!"; +TXT_RYES0_SCRIPT14_d1516_OHTHA = "OH, THANK YOU!"; +TXT_DLG_SCRIPT14_d3032_WEREF = "WE'RE FREE!! WE'RE FREE!! WE'RE FREE!!"; +TXT_DLG_SCRIPT14_d4548_MUSTM = "MUST MINE MORE ORE!"; +TXT_DLG_SCRIPT14_d6064_WEREF = "WE'RE FREE!! WE'RE FREE!! WE'RE FREE!!"; +TXT_DLG_SCRIPT14_d7580_MUSTM = "MUST MINE MORE ORE!"; +TXT_DLG_SCRIPT14_d9096_WEREF = "WE'RE FREE!! WE'RE FREE!! WE'RE FREE!!"; +TXT_DLG_SCRIPT14_d10612_MUSTM = "MUST MINE MORE ORE!"; +TXT_DLG_SCRIPT14_d12128_WEREF = "WE'RE FREE!! WE'RE FREE!! WE'RE FREE!!"; + +TXT_DLG_SCRIPT15_d0_WHATA = "WHAT ARE YOU DOING HERE?"; +TXT_RPLY0_SCRIPT15_d0_ROUTI = "ROUTINE INSPECTION."; +TXT_RYES0_SCRIPT15_d0_ALLRI = "ALL RIGHT, CARRY ON."; +TXT_DLG_SCRIPT15_d1516_NOTHI = "NOTHING TO REPORT HERE. EVERYTHING IS WORKING FINE. IF ANYTHING GOES WRONG, I'LL BE SURE TO REPORT IT."; +TXT_DLG_SCRIPT15_d3032_SIRTH = "SIR, THERE WAS A PROBLEM EARLIER, BUT IT WAS TAKEN CARE OF."; + +TXT_DLG_SCRIPT17_d0_MOVEA = "Move along or taste metal."; +TXT_DLG_SCRIPT17_d1516_IDCHE = "I.D. check."; +TXT_RPLY0_SCRIPT17_d1516_HEREI = "HERE, I'M IN A HURRY."; +TXT_DLG_SCRIPT17_d3032_STOPW = "Stop waving your ID in my face and go in."; +TXT_DLG_SCRIPT17_d4548_NOTHI = "NOTHING TO SEE HERE. MOVE ALONG."; +TXT_DLG_SCRIPT17_d6064_WHATA = "What a healthy specimen. You don't need my help, do you?"; +TXT_RPLY0_SCRIPT17_d6064_WELLY = "WELL, YES. MACIL SENT ME."; +TXT_DLG_SCRIPT17_d7580_SHHHH = "Shhhh... keep it quiet, unless you want us both killed. Now, what can I do for you?"; +TXT_RPLY0_SCRIPT17_d7580_TELLM = "Tell me how to find The Bishop."; +TXT_DLG_SCRIPT17_d9096_OHHHI = "Ohhh, I knew you would ask me for that. Look behind you. That's the entrance to The Bishop's Citadel. It's guarded by a force field that is only shut off for official visitors, Not you."; +TXT_RPLY0_SCRIPT17_d9096_IMUST = "I must kill The Bishop."; +TXT_DLG_SCRIPT17_d10612_OHSUR = "OH, Sure YOU DO. First, fight your way into the Security Complex and use the Teleporter. And this might be more to your liking, destroy the computer in Central Administration. No computer, no force field."; +TXT_RPLY0_SCRIPT17_d10612_GREAT = "GREAT, THAT SOUNDS EASY."; +TXT_DLG_SCRIPT17_d12128_THERE = "There's an advantage to destroying the Computer, that's where the plans to the Tower are kept. Can you say, Five Finger Discount? HEH HEH!"; +TXT_RPLY0_SCRIPT17_d12128_ANYTH = "ANYTHING ELSE?"; +TXT_DLG_SCRIPT17_d13644_OHWEL = "OH WELL, Word has it that the Bailey's warehouse received a shipment of Maulers, that's the weapon that VAPORIZES."; +TXT_RPLY0_SCRIPT17_d13644_ISTHA = "IS THAT IT, NOW?"; +TXT_DLG_SCRIPT17_d15160_DONTY = "Don't you know the meaning of the words "get lost"?"; +TXT_DLG_SCRIPT17_d16676_TALKT = "TALK TO QUINCY FIRST. I'M NOT ALLOWED TO HELP ANYONE UNLESS HE SAYS IT'S OK."; +TXT_DLG_SCRIPT17_d18192_HOWHO = "HOW HOW CAN I HELP YOU TODAY?"; +TXT_RPLY0_SCRIPT17_d18192_MEDPA = "MED PATCH"; +TXT_RYES0_SCRIPT17_d18192_HERES = "HERE'S YOUR PATCH."; +TXT_RNO0_SCRIPT17_d18192_THATI = "THAT IS 15 GOLD MY FRIEND."; +TXT_RPLY1_SCRIPT17_d18192_MEDIC = "MEDICAL KIT"; +TXT_RYES1_SCRIPT17_d18192_HERES = "HERE'S YOUR MEDICAL KIT."; +TXT_RNO1_SCRIPT17_d18192_YOURE = "YOU'RE A BIT LOW ON FUNDS FOR THAT."; +TXT_RPLY2_SCRIPT17_d18192_FIELD = "FIELD SURGERY KIT"; +TXT_RYES2_SCRIPT17_d18192_ONEFI = "ONE FIELD SURGERY KIT, DONE."; +TXT_RNO2_SCRIPT17_d18192_COMEB = "COME BACK WHEN YOU HAVE MONEY!"; + +TXT_DLG_SCRIPT18_d0_WHATI = "WHAT IS IT?"; +TXT_RPLY0_SCRIPT18_d0_JUSTL = "JUST LOOKING AROUND."; +TXT_RYES0_SCRIPT18_d0_JUSTK = "JUST KEEP OUT OF THE WAY."; +TXT_DLG_SCRIPT18_d1516_THETE = "THE TEMPLARS WILL BE HERE SOON TO PICK UP THEIR NEW MAULERS. IF YOU GET IN THEIR WAY YOU'RE A DEAD MAN."; +TXT_RPLY0_SCRIPT18_d1516_MAULE = "MAULERS?"; +TXT_RYES0_SCRIPT18_d1516_THETE = "THE TEMPLAR'S FAVORITE WEAPON."; +TXT_DLG_SCRIPT18_d3032_THEYC = "THEY CAME IN EARLIER. THAT'S WHAT ALL THE SECURITY'S ABOUT. I GOT A CHANCE TO LOOK AT THEM WHEN I LOCKED UP. NOBODY'S SUPPOSED TO GO IN OR OUT OF THERE UNTIL THE REST OF THE PLATOON COMES TO CLAIM THEIR WEAPONS."; + +TXT_DLG_SCRIPT19_d0_THISI = "THIS IS WHERE YOU GET THE PLANS FOR THE CENTRAL ADMINISTRATION."; + +// MAP22 only has scripts in SVE +TXT_DLG_SCRIPT22_d0_IRUNT = "I RUN THIS PLACE. MY JOB IS TO BUILD THE RAW PARTS NEEDED FOR THE LOREMASTER'S ROBOT DESIGNS. IF YOU'RE NOT HERE ON OFFICIAL BUSINESS, THEN I'M AFRAID I DON'T HAVE TIME TO TALK."; +TXT_RPLY0_SCRIPT22_d0_IAMON = "I AM ON OFFICIAL BUSINESS."; +TXT_DLG_SCRIPT22_d1516_SOYOU = "SO YOU'VE SPOKEN WITH TIMOTHY, I SEE. HE AND I HAVE WORKED TOGETHER TO TRY TO UNRAVEL THE MYSTERIES OF THE ORDER, BEFORE IT'S TOO LATE FOR US ALL. MAYBE YOU CAN HELP US. I'VE OPENED THE DOOR TO THE PRODUCTION SECTOR."; +TXT_RPLY0_SCRIPT22_d1516_DOYOU = "DO YOU KNOW WHAT'S INSIDE?"; +TXT_DLG_SCRIPT22_d3032_ITSAT = "IT'S A TOP SECRET AREA. NOT ONLY IS THE ORDER BREEDING SOME KIND OF... CREATURE IN THERE, I'VE SEEN WITH MY OWN EYES A STRANGE ARTIFACT CALLED A "TALISMAN." NOBODY'S ALLOWED NEAR IT. RUMOR IS THAT IT HOLDS GREAT POWER IF UNITED WITH TWO OTHERS OF ITS KIND."; +TXT_RPLY0_SCRIPT22_d3032_ISUPP = "I SUPPOSE YOU WANT THIS THING?"; +TXT_DLG_SCRIPT22_d4548_NOIFY = "NO! IF YOU CAN FIND IT, IT'S YOURS TO KEEP. MAYBE YOU CAN USE IT TO HELP FREE US FROM OUR OPPRESSION. I'D WISH YOU LUCK, BUT YOU'RE GOING TO NEED A LOT MORE THAN THAT IF YOU GO IN THERE..."; +TXT_RPLY0_SCRIPT22_d4548_WHATS = "WHAT'S ALL THIS ABOUT THE PAST?"; +TXT_DLG_SCRIPT22_d6064_YOUVE = "YOU'VE SURELY SEEN THE OTHER RUINS NEARBY. IT SEEMS THAT THE "COMET" WHICH CRASHED ON OUR PLANET IS ACTUALLY A SPACE SHIP, AND BELIEVE IT OR NOT, IT ORIGINATED ON THIS VERY WORLD A LONG TIME AGO."; +TXT_RPLY0_SCRIPT22_d6064_SOTHE = "SO THE SPECTRES, THE ONE GOD..."; +TXT_DLG_SCRIPT22_d7580_THEYA = "THEY ARE CREATURES WHO ONCE RULED THIS WORLD AND ARE BENT ON CONSUMING ITS LIFE. THE ANCIENTS MANAGED TO SEAL THEM AWAY, BUT GAVE THEIR LIVES IN THE PROCESS. I'M AFRAID THAT'S ALL I KNOW."; +TXT_RPLY0_SCRIPT22_d7580_THANK = "THANKS... I'LL DO WHAT I CAN."; +TXT_DLG_SCRIPT22_d9096_GODSP = "GODSPEED, FRIEND."; +TXT_DLG_SCRIPT22_d10612_TALKT = "TALK TO THE MASTER SMITHY IF YOU HAVE QUESTIONS. ALL I DO IS PUT LABELS ON THE CRATES."; + +TXT_DLG_SCRIPT23_d0_WHATC = "WHAT CAN I GET YOU, CITIZEN?"; +TXT_RPLY0_SCRIPT23_d0_AMMOB = "AMMO BOX"; +TXT_RYES0_SCRIPT23_d0_HERES = "HERE'S YOUR AMMO."; +TXT_RNO0_SCRIPT23_d0_YOUDO = "YOU DON'T HAVE ENOUGH FOR THAT!"; +TXT_RPLY1_SCRIPT23_d0_CRATE = "CRATE OF MISSILES"; +TXT_RYES1_SCRIPT23_d0_HEREC = "HERE, CITIZEN."; +TXT_RNO1_SCRIPT23_d0_ITS85 = "IT'S 85 GOLD, CITIZEN!"; +TXT_RPLY2_SCRIPT23_d0_HEGRE = "H-E GRENADES"; +TXT_RYES2_SCRIPT23_d0_HEREA = "HERE ARE YOUR GRENADES."; +TXT_RNO2_SCRIPT23_d0_THEYA = "THEY ARE 100 GOLD, FRIEND."; +TXT_RPLY3_SCRIPT23_d0_ENERG = "ENERGY POD"; +TXT_RYES3_SCRIPT23_d0_HEREY = "HERE YOU ARE."; +TXT_RNO3_SCRIPT23_d0_THATS = "THAT'S 135 GOLD, SORRY."; +TXT_DLG_SCRIPT23_d1516_WHATC = "WHAT CAN I ASSIST YOU WITH?"; +TXT_RPLY0_SCRIPT23_d1516_LEATH = "LEATHER ARMOR"; +TXT_RYES0_SCRIPT23_d1516_HEREI = "HERE IT IS CITIZEN."; +TXT_RNO0_SCRIPT23_d1516_THERE = "THERE'S NO CHARITY GIVEN HERE!"; +TXT_RPLY1_SCRIPT23_d1516_METAL = "METAL ARMOR"; +TXT_RYES1_SCRIPT23_d1516_ANEXC = "AN EXCELLENT CHOICE CITIZEN."; +TXT_RNO1_SCRIPT23_d1516_YOUDO = "YOU DON'T HAVE ENOUGH FOR THIS!"; +TXT_RPLY2_SCRIPT23_d1516_ENVIR = "ENVIRONMENTAL SUIT"; +TXT_RYES2_SCRIPT23_d1516_HEREY = "HERE YOU ARE."; +TXT_RNO2_SCRIPT23_d1516_NOMON = "NO MONEY, NO SUIT."; +TXT_RPLY3_SCRIPT23_d1516_SOMET = "SOMETHING DIFFERENT?"; +TXT_RYES3_SCRIPT23_d1516_GOTHR = "GO THROUGH THE DOOR DOWN THE HALL."; +TXT_RNO3_SCRIPT23_d1516_YOUMU = "YOU MUST PAY IF YOU WANT TO PLAY."; +TXT_DLG_SCRIPT23_d3032_WHATC = "WHAT CAN I GET YOU?"; +TXT_RPLY0_SCRIPT23_d3032_LEATH = "LEATHER ARMOR"; +TXT_RYES0_SCRIPT23_d3032_HEREI = "HERE IT IS CITIZEN."; +TXT_RNO0_SCRIPT23_d3032_THERE = "THERE'S NO CHARITY GIVEN HERE!"; +TXT_RPLY1_SCRIPT23_d3032_METAL = "METAL ARMOR"; +TXT_RYES1_SCRIPT23_d3032_ANEXC = "AN EXCELLENT CHOICE CITIZEN."; +TXT_RNO1_SCRIPT23_d3032_YOUDO = "YOU DON'T HAVE ENOUGH FOR THIS!"; +TXT_RPLY2_SCRIPT23_d3032_ENVIR = "ENVIRONMENTAL SUIT"; +TXT_RYES2_SCRIPT23_d3032_HEREY = "HERE YOU ARE."; +TXT_RNO2_SCRIPT23_d3032_NOMON = "NO MONEY, NO SUIT."; +TXT_DLG_SCRIPT23_d4548_HOWCA = "HOW CAN I HELP YOU TODAY?"; +TXT_RPLY0_SCRIPT23_d4548_MEDPA = "MED PATCH"; +TXT_RYES0_SCRIPT23_d4548_HERES = "HERE'S YOUR PATCH."; +TXT_RNO0_SCRIPT23_d4548_THATI = "THAT IS 15 GOLD MY FRIEND."; +TXT_RPLY1_SCRIPT23_d4548_MEDIC = "MEDICAL KIT"; +TXT_RYES1_SCRIPT23_d4548_HERES = "HERE'S YOUR MEDICAL KIT."; +TXT_RNO1_SCRIPT23_d4548_YOURA = "YOUR A BIT LOW ON FUNDS FOR THAT."; +TXT_RPLY2_SCRIPT23_d4548_FIELD = "FIELD SURGERY KIT"; +TXT_RYES2_SCRIPT23_d4548_ONEFI = "ONE FIELD SURGERY KIT."; +TXT_RNO2_SCRIPT23_d4548_COMEB = "COME BACK WHEN YOU HAVE MONEY!"; +TXT_DLG_SCRIPT23_d6064_HELLO = "HELLO FRIEND, WHAT CAN I GET YOU?"; +TXT_RPLY0_SCRIPT23_d6064_INFOR = "INFORMATION"; +TXT_RYES0_SCRIPT23_d6064_IVENE = "I'VE NEVER SEEN ANYONE GO IN OR OUT OF THE FACTORY, THE FORCEFIELD'S ALWAYS UP."; +TXT_RNO0_SCRIPT23_d6064_NOMON = "NO MONEY, NO INFO."; +TXT_DLG_SCRIPT23_d7580_YESWH = "YES, WHAT WOULD YOU LIKE?"; +TXT_RPLY0_SCRIPT23_d7580_MOREI = "MORE INFO."; +TXT_RYES0_SCRIPT23_d7580_THEFA = "THE FACTORY'S BUILT ON THE COMET'S IMPACT SITE. I DON'T THINK IT'S BY CHANCE."; +TXT_RNO0_SCRIPT23_d7580_COMEO = "COME ON, IT'S A MEASLY 5 GOLD."; +TXT_DLG_SCRIPT23_d9096_HELLO = "HELLO AGAIN, WHAT'LL IT BE?"; +TXT_RPLY0_SCRIPT23_d9096_MOREI = "MORE INFO."; +TXT_RYES0_SCRIPT23_d9096_THEFA = "THE FACTORY CLOSED WHEN THE ORDER UNVEILED IT'S NEW HORROR: THE INQUISITOR."; +TXT_RNO0_SCRIPT23_d9096_5GOLD = "5 GOLD PLEASE."; +TXT_DLG_SCRIPT23_d10612_THATS = "THAT'S ALL I KNOW. EVEN BARTENDERS RUN OUT OF STUFF TO SAY, SORRY."; +TXT_DLG_SCRIPT23_d12128_HELLO = "HELLO."; +TXT_RPLY0_SCRIPT23_d12128_WHATA = "WHAT ARE YOU DOING?"; +TXT_RYES0_SCRIPT23_d12128_IMDOI = "I'M DOING STUFF, GO AWAY!"; +TXT_DLG_SCRIPT23_d13644_NOWWH = "NOW, WHAT CAN I HELP YOU WITH?"; +TXT_RPLY0_SCRIPT23_d13644_SHADO = "SHADOW ARMOR?"; +TXT_RYES0_SCRIPT23_d13644_AHHTO = "AHH, TO BE HEARD, BUT NOT SEEN!"; +TXT_RNO0_SCRIPT23_d13644_GETOU = "GET OUT OF HERE, COME BACK WHEN YOU HAVE SOME CASH."; +TXT_DLG_SCRIPT23_d15160_THANK = "Thank deus you got here. To enter the Factory you need a Key. We stole it but our agent is missing in the web of catacombs under the Order's stronghold. I have sent ten good men into those tunnels to find him, and none have returned. SOMETHING is down there!"; +TXT_RPLY0_SCRIPT23_d15160_WHATI = "What is it? Human or... ?"; +TXT_DLG_SCRIPT23_d16676_NOTDE = "NOT. Definitely NOT. Whatever it is, YOU must fight it to retrieve the key. I'll open the catacombs' entrance. When you've got it, the Factory is next to the mines. Hurry, each second counts."; +TXT_RPLY0_SCRIPT23_d16676_SOMET = "SOMETHING INHUMAN, EH?, GREAT."; +TXT_DLG_SCRIPT23_d18192_YOURE = "You're wasting time AND lives! Move!"; + +// New/moved content from SVE: +TXT_DLG_SCRIPT23_d10612_CANIB = "CAN I BE OF MORE HELP?"; +TXT_RPLY0_SCRIPT23_d10612_MOREI = "MORE INFO."; +TXT_RYES0_SCRIPT23_d10612_LOOKF = "LOOK FOR TIMOTHY. I'VE HEARD HE KNOWS SOME OF THE ORDER'S SECRETS."; +TXT_RNO0_SCRIPT23_d10612_JUSTA = "JUST ANOTHER 5 GOLD."; +TXT_DLG_SCRIPT23_d12128_THATS = "THAT'S ALL I KNOW. EVEN BARTENDERS RUN OUT OF STUFF TO SAY, SORRY."; +TXT_DLG_SCRIPT23_d13644_HELLO = "HELLO."; +TXT_RPLY0_SCRIPT23_d13644_WHATA = "WHAT ARE YOU DOING?"; +TXT_RYES0_SCRIPT23_d13644_IMDOI = "I'M DOING STUFF, GO AWAY!"; +TXT_DLG_SCRIPT23_d15160_IFYOU = "IF YOU HAVE THIS MUCH TIME TO WASTE, SEE IF YOU CAN FIND THE BLUE CHALICE. MY STUDIES ON THE ORDER SUGGEST THEY HAVE HIDDEN IT SOMEWHERE IN THE MANUFACTURING SECTOR OF THE FACTORY. THIS ARTIFACT WOULD BE OF GREAT VALUE TO ME, SO, BRING IT TO ME, AND I'LL HELP YOU OUT."; +TXT_DLG_SCRIPT23_d16676_YOUFO = "YOU FOUND THE BLUE CHALICE! OK, GIVE IT TO ME FIRST, AND WE'LL TRADE."; +TXT_RPLY0_SCRIPT23_d16676_TAKEI = "TAKE IT, IT'S BAD LUCK ANYWAY."; +TXT_RPLY1_SCRIPT23_d16676_SCREW = "SCREW YOU, I'M KEEPING IT."; +TXT_RYES1_SCRIPT23_d16676_THENI = "THEN I'M NOT GIVING YOU ANYTHING. GET LOST!"; +TXT_DLG_SCRIPT23_d18192_LOCAT = "LOCATE THE FORGE. THE INFORMATION I JUST GAVE YOU SHOULD HELP YOU ENTER A SECRETIVE SECTOR OF THE FACTORY. ONE OF THE FORGE WORKERS CAN OPEN THE DOOR."; +TXT_RPLY0_SCRIPT23_d18192_WHATC = "WHAT CAN I FIND THERE?"; +TXT_DLG_SCRIPT23_d19708_MYRES = "MY RESEARCH SUGGESTS THAT SOME DARK POWER FROM THE ANCIENT PAST IS HIDDEN THERE. BE CAREFUL!"; +TXT_DLG_SCRIPT23_d21224_THATB = "THAT BLUE CHALICE, HOW'D YOU COME BY IT? I'VE BEEN RESEARCHING THE ORDER AND THEIR LINKS TO THE DISTANT PAST, AND THAT ARTIFACT WOULD HELP ME. LET'S MAKE A DEAL. GIVE ME THE CHALICE, AND I'LL GIVE YOU SOME INFO."; +TXT_RPLY0_SCRIPT23_d21224_TAKEI = "TAKE IT, IT'S BAD LUCK ANYWAY."; +TXT_RPLY1_SCRIPT23_d21224_SCREW = "SCREW YOU, I'M KEEPING IT."; +TXT_RYES1_SCRIPT23_d21224_THENI = "THEN I'M NOT GIVING YOU ANYTHING. GET LOST!"; +TXT_DLG_SCRIPT23_d22740_NOWWH = "NOW, WHAT CAN I HELP YOU WITH?"; +TXT_RPLY0_SCRIPT23_d22740_SHADO = "SHADOW ARMOR?"; +TXT_RYES0_SCRIPT23_d22740_AHHTO = "AHH, TO BE HEARD, BUT NOT SEEN!"; +TXT_RNO0_SCRIPT23_d22740_GETOU = "GET OUT OF HERE, COME BACK WHEN YOU HAVE SOME CASH."; +TXT_DLG_SCRIPT23_d24256_THANK = "Thank deus you got here. To enter the Factory you need a Key. We stole it but our agent is missing in the web of catacombs under the Order's stronghold. I have sent ten good men into those tunnels to find him, and none have returned. SOMETHING is down there!"; +TXT_RPLY0_SCRIPT23_d24256_WHATI = "What is it? Human or... ?"; +TXT_DLG_SCRIPT23_d25772_NOTDE = "NOT. Definitely NOT. Whatever it is, YOU must fight it to retrieve the key. I'll open the catacombs' entrance. When you've got it, the Factory is next to the mines. Hurry, each second counts."; +TXT_RPLY0_SCRIPT23_d25772_SOMET = "SOMETHING INHUMAN, EH?, GREAT."; +TXT_DLG_SCRIPT23_d27288_YOURE = "You're wasting time AND lives! Move!"; + +TXT_DLG_SCRIPT27_d0_THEMA = "THE MASTER DOESN'T LIKE VISITORS. HE LIKES ALL OF HIS WORK TO REMAIN UNDISTURBED. I'VE GOT TO GO GET FRESH PARTS FROM THE STORAGE ROOM. I THINK HE SAID A LEG AND AN ARM. OH, WELL NO TIME TO TALK ANYMORE. I'D LEAVE BEFORE HE FINDS YOU."; +TXT_RPLY0_SCRIPT27_d0_WHYST = "WHY'S THAT."; +TXT_RYES0_SCRIPT27_d0_BECAU = "BECAUSE, I TOLD YOU HE DOESN'T LIKE VISITORS!"; +TXT_DLG_SCRIPT27_d1516_YOUKN = "YOU KNOW, YOU'RE ABOUT THE RIGHT SIZE FOR ONE OF THE ACOLYTE'S UNIFORMS."; + +TXT_DLG_SCRIPT31_d0_OHNOI = "OH NO, I'M NOT THE REAL PROGRAMMER, HE'S HIDING. CONTINUE PAST THE GUARD TRAINING AREA, VERY TOUGH. IF YOU SURVIVE, YOU MIGHT BE ABLE TO TALK TO HIM. OR KILL HIM."; +TXT_RPLY0_SCRIPT31_d0_WHOAR = "WHO ARE YOU?"; +TXT_DLG_SCRIPT31_d1516_YOULL = "YOU'LL NEVER FIND ANYTHING IF YOU HANG AROUND HERE."; + +TXT_DLG_SCRIPT32_d0_PISSO = "PISS OFF PEASANT!"; +TXT_DLG_SCRIPT32_d1516_DIELI = "DIE LITTLE MAN!"; +TXT_DLG_SCRIPT32_d3032_FINAL = "FINALLY I CAN GET OUT OF THIS CELL."; +TXT_RPLY0_SCRIPT32_d3032_WHYAR = "WHY ARE YOU IN HERE?"; +TXT_RYES0_SCRIPT32_d3032_IWASF = "I WAS FRAMED."; +TXT_DLG_SCRIPT32_d4548_HARRI = "HARRIS SAID THAT I WAS PLOTTING TO KILL THE GOVERNOR. I WOULD NEVER HARM A SOUL."; + +TXT_DLG_SCRIPT33_d0_BECAR = "BE CAREFUL OUT THERE."; +TXT_DLG_SCRIPT33_d1516_SAYFR = "SAY FRIEND, I'LL HELP YOU, IF YOU HELP ME. GIVE ME 5 GOLD AND I'LL TELL YOU WHAT I KNOW."; +TXT_RPLY0_SCRIPT33_d1516_HERES = "HERE'S THE GOLD."; +TXT_RYES0_SCRIPT33_d1516_IFYOU = "IF YOU PUNCH SOMEONE, YOU WON'T SET OFF THE ALARMS."; +TXT_RNO0_SCRIPT33_d1516_IWONT = "I WON'T TELL YOU ANYTHING FOR FREE!"; +TXT_DLG_SCRIPT33_d3032_IVEAL = "I'VE ALREADY TOLD YOU WHAT I KNOW."; +TXT_DLG_SCRIPT33_d4548_HELLO = "HELLO FRIEND. WHAT CAN I GET FOR YOU?"; +TXT_RPLY0_SCRIPT33_d4548_ELECT = "ELECTRIC BOLTS"; +TXT_RYES0_SCRIPT33_d4548_ONEQU = "ONE QUARREL IT IS."; +TXT_RNO0_SCRIPT33_d4548_YOURE = "YOU'RE BROKE!"; +TXT_RPLY1_SCRIPT33_d4548_10ROU = "10 ROUND CLIP"; +TXT_RYES1_SCRIPT33_d4548_HERES = "HERE'S YOUR AMMO"; +TXT_RNO1_SCRIPT33_d4548_SORRY = "SORRY, NO MONEY, NO BULLETS."; +TXT_RPLY2_SCRIPT33_d4548_50ROU = "50 ROUND BOX"; +TXT_RYES2_SCRIPT33_d4548_HEREY = "HERE YOU GO"; +TXT_RNO2_SCRIPT33_d4548_YOUDO = "YOU DON'T HAVE ENOUGH GOLD!"; +TXT_RPLY3_SCRIPT33_d4548_AMMOS = "AMMO SATCHEL"; +TXT_RYES3_SCRIPT33_d4548_THANK = "THANK YOU, ANYTHING ELSE?"; +TXT_RNO3_SCRIPT33_d4548_YOUCA = "YOU CAN'T AFFORD THAT, GOOD DAY."; +TXT_DLG_SCRIPT33_d6064_WELCO = "WELCOME. WHAT MAY I SHOW YOU?"; +TXT_RPLY0_SCRIPT33_d6064_ENVIR = "ENVIRONMENTAL SUIT"; +TXT_RYES0_SCRIPT33_d6064_HEREY = "HERE YOU ARE."; +TXT_RNO0_SCRIPT33_d6064_YOUDO = "YOU DON'T HAVE ENOUGH MONEY FOR THAT."; +TXT_RPLY1_SCRIPT33_d6064_LEATH = "LEATHER ARMOR."; +TXT_RYES1_SCRIPT33_d6064_HEREY = "HERE YOU ARE."; +TXT_RNO1_SCRIPT33_d6064_PERHA = "PERHAPS SOME OTHER TIME?"; +TXT_RPLY2_SCRIPT33_d6064_METAL = "METAL ARMOR"; +TXT_RYES2_SCRIPT33_d6064_WEARI = "WEAR IT IN GOOD HEALTH."; +TXT_RNO2_SCRIPT33_d6064_COMEB = "COME BACK WHEN YOU CAN AFFORD IT."; +TXT_DLG_SCRIPT33_d7580_HOWMA = "HOW MAY I ASSIST YOU?"; +TXT_RPLY0_SCRIPT33_d7580_MEDPA = "MED PATCH"; +TXT_RYES0_SCRIPT33_d7580_HERES = "HERE'S YOUR PATCH KIT."; +TXT_RNO0_SCRIPT33_d7580_YOUNE = "YOU NEED 10 GOLD FOR THAT."; +TXT_RPLY1_SCRIPT33_d7580_FIELD = "FIELD SURGERY KIT"; +TXT_RYES1_SCRIPT33_d7580_THANK = "THANK YOU."; +TXT_RNO1_SCRIPT33_d7580_IWISH = "I WISH I COULD GIVE THEM AWAY, BUT THEY COST 25 GOLD."; +TXT_RPLY2_SCRIPT33_d7580_HEALI = "HEALING"; +TXT_RYES2_SCRIPT33_d7580_THERE = "THERE YOU GO. TAKE CARE NOW."; +TXT_RNO2_SCRIPT33_d7580_WELLM = "WELL, MAYBE YOU CAN AFFORD SOME MED PATCHES?"; +TXT_DLG_SCRIPT33_d9096_HELLO = "HELLO FRIEND, I HAVEN'T SEEN YOU AROUND HERE BEFORE. ALL I CAN SAY IS THAT I'D BE CAREFUL IF I WERE YOU, THERE'S A LOT GOING ON AND IT'S BETTER IF YOU DON'T GET IN THE WAY."; +TXT_RPLY0_SCRIPT33_d9096_INFOR = "INFORMATION"; +TXT_RYES0_SCRIPT33_d9096_THESE = "THE SEWERS HOLD MORE THAN JUST RATS AND ROBOTS."; +TXT_RNO0_SCRIPT33_d9096_HEYAG = "HEY A GUY'S GOT TO MAKE SOME MONEY. YOU THINK THESE JOKERS TIP WELL?"; +TXT_DLG_SCRIPT33_d10612_BACKA = "BACK AGAIN HUH? WELL, AT LEAST YOU KNOW ENOUGH TO KEEP YOUR OWN SKIN INTACT. WHAT CAN I DO FOR YOU NOW?"; +TXT_RPLY0_SCRIPT33_d10612_MOREI = "MORE INFO"; +TXT_RYES0_SCRIPT33_d10612_THEGO = "THE GOVERNOR IS A SIMPLE REMINDER OF THE ORDER'S INFLUENCE."; +TXT_RNO0_SCRIPT33_d10612_COMEB = "COME BACK IF YOU CHANGE YOUR MIND."; +TXT_DLG_SCRIPT33_d12128_WELLY = "WELL, YOU'RE SURE ASKING A LOT OF QUESTIONS FOR SOMEONE WHO'S LIVED THIS LONG. THAT'S OK THOUGH, I'D RATHER TALK TO SOMEONE LIKE YOU THAN MOST OF THIS LOT."; +TXT_RPLY0_SCRIPT33_d12128_MOREI = "MORE INFO."; +TXT_RYES0_SCRIPT33_d12128_THERE = "THERE'S MORE TO THE ORDER THAN WHAT GOES ON AROUND HERE."; +TXT_RNO0_SCRIPT33_d12128_COMEB = "COME BACK IF YOU CHANGE YOUR MIND."; +TXT_DLG_SCRIPT33_d13644_THATS = "THAT'S IT FRIEND, THE WELL OF KNOWLEDGE HAS BEEN TAPPED. I'VE TOLD YOU MORE THAN I SHOULD HAVE ANYWAY."; +TXT_DLG_SCRIPT33_d15160_HARDT = "HARD TO SHOP FOR NEW TOYS... WHEN YOU'RE BROKE. RUN A LITTLE ERRAND FOR ME AND YOU'LL GET MORE THAN YOU COULD EVER SPEND. I'LL MAKE YOU A RICH MAN."; +TXT_RPLY0_SCRIPT33_d15160_IGOTN = "I GOT NOTHING BETTER TO DO."; +TXT_RPLY1_SCRIPT33_d15160_NOTHA = "NO THANKS."; +TXT_RYES1_SCRIPT33_d15160_NOBOD = "NOBODY WALKS AWAY FROM ME!"; +TXT_DLG_SCRIPT33_d16676_GOODC = "GOOD CHOICE. THE ORDER'S SANCTUARY BY THE RIVER IS THEIR UNOFFICIAL TORTURE CHAMBER. HIDDEN INSIDE THERE'S A GOLDEN CHALICE. YOU SWIPE IT, YOU MEET ME AT THE TAVERN, AND REAP YOUR REWARD."; +TXT_RPLY0_SCRIPT33_d16676_HOWAM = "HOW AM I SUPPOSED TO DO THAT?"; +TXT_RPLY1_SCRIPT33_d16676_LETME = "LET ME THINK ABOUT IT."; +TXT_RYES1_SCRIPT33_d16676_SORRY = "SORRY, NO SECOND CHANCES. OH, GUARDS, KILL HIM!"; +TXT_DLG_SCRIPT33_d18192_HERES = "HERE'S A CROSSBOW, JUST AIM STRAIGHT AND -- SPLAT!--. REMEMBER, GRAB THE FANCY CUP AND MEET ME AT THE TAVERN."; +TXT_RPLY0_SCRIPT33_d18192_ILLSE = "I'LL SEE YOU THERE."; +TXT_DLG_SCRIPT33_d19708_WHATA = "WHAT ARE YOU WAITING FOR? DON'T WORRY, I'LL CLEAN UP THE BODIES, JUST BRING ME THAT CHALICE!"; +TXT_DLG_SCRIPT33_d21224_GUARD = "GUARDS! KILL THE TRAITOR!"; +TXT_DLG_SCRIPT33_d22740_HEYIK = "HEY, I KNOW WHAT YOU'RE THINKING, KINDA LOOKS LIKE A SETUP, I WOULD NEVER DO THAT TO SUCH A KILLING MACHINE, I MEAN IT. WHEW, ALL THIS FUSS OVER A CUP, WEIRD. NOW GET READY, GOLD AND GLORY, LIKE I PROMISED. TAKE THIS KEY AND THE GOVERNOR HIMSELF WILL REWARD YOU."; +TXT_RPLY0_SCRIPT33_d22740_GREAT = "GREAT, I CAN'T WAIT!"; +TXT_RNO0_SCRIPT33_d22740_NOCHA = "NO CHALICE, NO MONEY!"; +TXT_RPLY1_SCRIPT33_d22740_ILLKE = "I'LL KEEP THE CHALICE, THANKS."; +TXT_RYES1_SCRIPT33_d22740_KEEPI = "KEEP IT? I THINK NOT!"; +TXT_DLG_SCRIPT33_d24256_WHATA = "WHAT ARE YOU WAITING FOR? THE GOVERNOR HIMSELF WILL REWARD YOU."; +TXT_DLG_SCRIPT33_d25772_DIETR = "DIE TRAITOR! "; +TXT_DLG_SCRIPT33_d27288_SOYOU = "SO YOU'RE THE FOOL WHO STOLE THE CHALICE? I'M GOING TO HAVE YOU ARRESTED AS A REBEL THIEF... THEREBY ENHANCING MY POSITION WITH THE ORDER. HOW DOES IT FEEL TO BE AN UNWITTING PAWN? "; +TXT_RPLY0_SCRIPT33_d27288_ITSUC = "IT SUCKS!"; +TXT_RYES0_SCRIPT33_d27288_FORYO = "FOR YOU IT DOES."; +TXT_RPLY1_SCRIPT33_d27288_HARRI = "HARRIS PROMISED ME MONEY!"; +TXT_RYES1_SCRIPT33_d27288_TOOBA = "TOO BAD. THE ONLY THING YOU'RE GETTING IS DEATH!"; +TXT_DLG_SCRIPT33_d28804_WEREG = "WE'RE GOING TO KILL YOU!"; +TXT_DLG_SCRIPT33_d30320_GETOU = "GET OUT OF HERE!"; +TXT_DLG_SCRIPT33_d31836_WEREG = "WE'RE GOING TO KILL YOU!"; +TXT_DLG_SCRIPT33_d33352_GETOU = "GET OUT OF HERE!"; + +TXT_DLG_SCRIPT34_d0_WHATA = "WHAT A PERFECT PLACE FOR US, UNDER THE OLD TOWN HALL. THE ORDER THINKS THEY'VE WIPED US OUT, BUT ALL IT WAS IS A REMINDER TO US OF WHAT CAN HAPPEN WHEN YOU BECOME CARELESS. "; +TXT_DLG_SCRIPT34_d1516_TALKT = "TALK TO MACIL, HE'LL BE ABLE TO HELP YOU."; +TXT_DLG_SCRIPT34_d3032_IVEHE = "I'VE HEARD THAT MACIL'S GOING TO START SOMETHING AGAIN SOON. WE NEED A BIG HIT AFTER THE LAST FIASCO. ONE MORE LIKE THAT AND WE'LL BE TOO WEAK TO CONTINUE."; +TXT_DLG_SCRIPT34_d4548_AFEWO = "A FEW OF THESE BARRELS DUMPED INTO THEIR WATER SUPPLY SHOULD EVEN THE ODDS A LITTLE. "; +TXT_DLG_SCRIPT34_d6064_IMWOR = "I'M WORKING ON SOMETHING THAT WILL GIVE US AN EDGE. IT WILL INCREASE YOUR STAMINA AND COMPLETELY JACK YOU UP. I'VE ALMOST GOT ALL THE BUGS WORKED OUT. CAN I DO SOMETHING FOR YOU? "; +TXT_RPLY0_SCRIPT34_d6064_PATCH = "PATCH ME UP."; +TXT_RYES0_SCRIPT34_d6064_BOYYO = "BOY, YOU'RE A REAL MESS. I'LL SEE WHAT I CAN DO."; +TXT_RPLY1_SCRIPT34_d6064_STAMI = "STAMINA IMPLANT?"; +TXT_RYES1_SCRIPT34_d6064_ALLRI = "ALL RIGHT THIS WON'T TAKE BUT A MOMENT."; +TXT_RNO1_SCRIPT34_d6064_ITSNO = "IT'S NOT DONE YET."; +TXT_DLG_SCRIPT34_d7580_HEYIM = "HEY, I'M WORKING ON AN UPDATED VERSION OF YOUR IMPLANT. IS THERE ANYTHING ELSE I CAN DO?"; +TXT_RPLY0_SCRIPT34_d7580_PATCH = "PATCH ME UP."; +TXT_RYES0_SCRIPT34_d7580_WELLA = "WELL AT LEAST YOU'RE SEEING ACTION."; +TXT_RPLY1_SCRIPT34_d7580_IMPLA = "IMPLANT UPGRADE?"; +TXT_RYES1_SCRIPT34_d7580_GOODT = "GOOD THING, NEVER CAN BE TOO SAFE."; +TXT_RNO1_SCRIPT34_d7580_IMALM = "I'M ALMOST FINISHED, BUT NOT QUITE."; +TXT_DLG_SCRIPT34_d9096_ALLRI = "ALL RIGHT, THIS IS IT. I'VE ALMOST GOT EVERYTHING WORKING PERFECTLY. THERE WERE A FEW PROBLEMS LEFT TO FIX, DO YOU NEED ANYTHING ELSE? "; +TXT_RPLY0_SCRIPT34_d9096_PATCH = "PATCH ME UP."; +TXT_RYES0_SCRIPT34_d9096_WHATH = "WHAT HAVE YOU BEEN TRYING TO DO? GO HEAD TO HEAD WITH A CRUSADER?"; +TXT_RPLY1_SCRIPT34_d9096_IMPLA = "IMPLANT UPGRADE?."; +TXT_RYES1_SCRIPT34_d9096_THATS = "THAT SHOULD DO IT FOR YOU."; +TXT_RNO1_SCRIPT34_d9096_LETME = "LET ME RUN SOME MORE TESTS FIRST."; +TXT_DLG_SCRIPT34_d10612_THATS = "THAT'S ALL I CAN DO ON THE IMPLANT RIGHT NOW. MAYBE SOME HEALING?"; +TXT_RPLY0_SCRIPT34_d10612_YEAH = "YEAH."; +TXT_RYES0_SCRIPT34_d10612_BOYYO = "BOY, YOU'RE A REAL MESS. I'LL SEE WHAT I CAN DO."; +TXT_DLG_SCRIPT34_d12128_WHATC = "WHAT CAN I DO FOR YOU?"; +TXT_RPLY0_SCRIPT34_d12128_IMOUT = "I'M OUT OF BULLETS."; +TXT_RYES0_SCRIPT34_d12128_HERES = "HERE'S SOME AMMO FOR YOU. DON'T WASTE IT."; +TXT_RPLY1_SCRIPT34_d12128_TEACH = "TEACH ME."; +TXT_RYES1_SCRIPT34_d12128_ALLRI = "ALL RIGHT, I'LL JUST SHOW YOU A FEW LITTLE POINTERS."; +TXT_RNO1_SCRIPT34_d12128_YOURE = "YOU'RE NOT READY YET."; +TXT_DLG_SCRIPT34_d13644_BACKA = "BACK AGAIN? WHAT DO YOU NEED?"; +TXT_RPLY0_SCRIPT34_d13644_IMOUT = "I'M OUT OF BULLETS."; +TXT_RYES0_SCRIPT34_d13644_HERES = "HERE'S SOME AMMO FOR YOU. DON'T WASTE IT."; +TXT_RNO0_SCRIPT34_d13644_YOUVE = "YOU'VE GOT ENOUGH AMMO."; +TXT_RPLY1_SCRIPT34_d13644_TEACH = "TEACH ME."; +TXT_RYES1_SCRIPT34_d13644_ALLRI = "ALL RIGHT, THIS SHOULD KEEP YOU GOING FOR A WHILE."; +TXT_RNO1_SCRIPT34_d13644_SORRY = "SORRY, CAN'T. I'M JUST FOLLOWING MACIL'S ORDERS."; +TXT_DLG_SCRIPT34_d15160_WELLW = "WELL WHICH IS IT, BULLETS OR TRAINING? I CAN'T WAIT TO GET MY HANDS ON THOSE NEW WEAPONS WE CAPTURED. ONCE I GET DONE WITH THEM, I'LL BE ABLE TO BEGIN TRAINING EVERYONE ELSE."; +TXT_RPLY0_SCRIPT34_d15160_IMOUT = "I'M OUT OF AMMO."; +TXT_RYES0_SCRIPT34_d15160_HERES = "HERE'S SOME AMMO FOR YOU. DON'T WASTE IT."; +TXT_RNO0_SCRIPT34_d15160_YOUVE = "YOU'VE GOT ENOUGH AMMO."; +TXT_RPLY1_SCRIPT34_d15160_TEACH = "TEACH ME."; +TXT_RYES1_SCRIPT34_d15160_OKTAK = "O.K. TAKE WHAT YOU'VE LEARNED AND SHOW THOSE ORDER BASTARDS THE WAY TO HELL."; +TXT_RNO1_SCRIPT34_d15160_COMEB = "COME BACK LATER, WHEN MACIL SAYS IT'S TIME."; +TXT_DLG_SCRIPT34_d16676_IVETA = "I'VE TAUGHT YOU EVERYTHING I CAN RIGHT NOW. GIVE ME SOME TIME TO PUT THE NEW WEAPONS THROUGH THEIR PACES. THAT IS UNLESS YOU'RE OUT OF BULLETS."; +TXT_RPLY0_SCRIPT34_d16676_YESIA = "YES I AM."; +TXT_RYES0_SCRIPT34_d16676_HEREY = "HERE YOU GO."; +TXT_DLG_SCRIPT34_d18192_DONTG = "DON'T GET TRIGGER HAPPY IN THE TOWN, YOU'LL SET OFF THE ALARM AND THEY WILL START SENDING IN GUARDS FROM THE CASTLE."; +TXT_DLG_SCRIPT34_d19708_WELCO = "WELCOME, WE CAN ALWAYS USE MORE HELP."; +TXT_DLG_SCRIPT34_d21224_WHENI = "WHEN I WAS STILL IN ACTION WE HAD THE CHANCE TO EXAMINE AN ACOLYTE BEFORE THE REINFORCEMENTS ARRIVED, THEY'RE NOT HUMAN I TELL YOU."; +TXT_DLG_SCRIPT34_d22740_WERET = "WE'RE TRYING TO FIND WHERE THE CASTLE GATE MECHANISMS ARE, BUT SO FAR WE'VE HAD NO LUCK."; +TXT_DLG_SCRIPT34_d24256_DONTG = "DON'T GET CAUGHT. I'VE HEARD HORROR STORIES ABOUT WHAT THEY DO TO OUR PEOPLE AFTER THEY'RE IMPRISONED. THEY JUST DISAPPEAR, NO TRACES, NOTHING. "; +TXT_DLG_SCRIPT34_d25772_HERES = "HERE'S SOME ADVICE, IF YOU EVER SEE ANY OF THE ORDER'S TIN SOLDIERS, RUN THE OTHER WAY. I ESPECIALLY DON'T LIKE THE REAVERS, THOSE THINGS ARE JUST DAMNED FAST!"; +TXT_DLG_SCRIPT34_d27288_WELCO = "WELCOME TO THE LAST FLICKER OF HOPE. ONLY WE HAVE THE FREE WILL TO OPPOSE THE ORDER. WE HAVE THE SHARPEST SCIENTIFIC MINDS, AND MANY ABLE BODIES. BUT WE LACK THAT ONE REAL PROBLEM SOLVER, WHO WILL GIVE US THE EDGE WE NEED."; +TXT_RPLY0_SCRIPT34_d27288_WHATW = "WHAT WILL I NEED TO DO? "; +TXT_DLG_SCRIPT34_d28804_HELPU = "HELP US. HELP US STEAL THEIR TECHNOLOGY. FREE OUR COMRADES. FIGHT THESE TWISTED PSYCHOPATHS TO THE DEATH. I'M ASKING YOU TO RISK YOUR LIFE FOR THE TRUTH."; +TXT_RPLY0_SCRIPT34_d28804_IMWIT = "I'M WITH YOU!"; +TXT_DLG_SCRIPT34_d30320_GOODB = "GOOD. BLACKBIRD WILL CONTINUE TO BE YOUR GUIDE. SHE'S TAKEN QUITE A SHINE TO YOU. TOGETHER, YOU'VE GOT TO UNLOCK THE SECRETS OF THE ORDER AND THEIR INHUMAN SERVANTS. THERE'S A PRESENCE THAT LURKS JUST OUTSIDE OUR UNDERSTANDING WHICH GUIDES THEIR TERROR. GET INSIDE AND TAKE THEM DOWN. "; +TXT_RPLY0_SCRIPT34_d30320_LETME = "LET ME AT 'EM!"; +TXT_RYES0_SCRIPT34_d30320_THATS = "THAT'S THE SPIRIT."; +TXT_DLG_SCRIPT34_d31836_WELCO = "WELCOME FRIEND!";