From 92a94d0ad6068d9c9c6a9dfe9b29dadc0946b26b Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 16 Jul 2026 11:00:35 -0500 Subject: [PATCH 1/5] Added tmdfs mode 4 for 2x 640x480 monitors --- .vscode/settings.json | 13 ++ .../CoreTech/Libraries/GameOS/VideoCard.cpp | 16 +++ .../CoreTech/Libraries/GameOS/WinMain.cpp | 22 +++ .../code/CoreTech/Libraries/GameOS/render.cpp | 128 +++++++++++++++++- .../code/CoreTech/Libraries/GameOS/render.hpp | 15 ++ Gameleap/code/mw4/Code/MW4/MW4Shell.cpp | 4 + .../Code/MW4Application/MW4Application.cpp | 2 +- 7 files changed, 194 insertions(+), 6 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..da1e4ab5 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,13 @@ +{ + // Legacy source files use CP949 (Korean Windows encoding, superset of EUC-KR). + // VS Code defaults to UTF-8, which silently corrupts the Korean comment bytes + // on save. Setting encoding to cp949 here preserves them exactly. + "files.encoding": "cp949", + + // Let VS Code try to detect encoding per-file, falling back to cp949 above. + "files.autoGuessEncoding": true, + + // Preserve the original Windows CRLF line endings (Git's * -text in + // .gitattributes also prevents conversion, but this keeps VS Code consistent). + "files.eol": "\r\n" +} diff --git a/Gameleap/code/CoreTech/Libraries/GameOS/VideoCard.cpp b/Gameleap/code/CoreTech/Libraries/GameOS/VideoCard.cpp index 76750d3b..170e144d 100644 --- a/Gameleap/code/CoreTech/Libraries/GameOS/VideoCard.cpp +++ b/Gameleap/code/CoreTech/Libraries/GameOS/VideoCard.cpp @@ -46,6 +46,8 @@ videoDevices BufferedDevices[8]; int g_nDualHead = -1; // jcem int g_nDualHead2 = -1; // jcem int g_nNonDualHead = -1; // jcem +int g_nMFD1 = -1; // mode 4: left 640x480 MFD monitor +int g_nMFD2 = -1; // mode 4: right 640x480 MFD monitor // MSL 5.03 Mechview int g_nMechViewType; // jcem : 0 - no mechview, 1 - on radar screen, 2 - on main screen @@ -380,6 +382,20 @@ void FindVideoCards() } } } + // Mode 4 (split dual 640x480): find two extra D3D devices beyond + // FullScreenDevice and g_nNonDualHead. These need no special resolution. + { + int found = 0; + for (int t0 = 0; t0 < NumDevices && found < 2; t0++) { + if (t0 == Environment.FullScreenDevice) continue; + if (t0 == g_nNonDualHead) continue; + if (DeviceArray[t0].D3DCaps.dwDevCaps & D3DDEVCAPS_HWRASTERIZATION) { + if (found == 0) g_nMFD1 = t0; + else g_nMFD2 = t0; + found++; + } + } + } // jcem // // Check any known video cards have up to date drivers (Only on Windows9x) diff --git a/Gameleap/code/CoreTech/Libraries/GameOS/WinMain.cpp b/Gameleap/code/CoreTech/Libraries/GameOS/WinMain.cpp index a3b6bb44..e710d2ac 100644 --- a/Gameleap/code/CoreTech/Libraries/GameOS/WinMain.cpp +++ b/Gameleap/code/CoreTech/Libraries/GameOS/WinMain.cpp @@ -940,6 +940,13 @@ void gos_UpdateDisplay( bool Everything ) radar_device.BeginScene(); } break; + case 4: + // Same 7-step cadence as mode 1: clear both MFD devices at step 0. + if(sh_step==0){ + radar_device.BeginScene(); + mfd_device.BeginScene(); // also clears mfd_device_right internally + } + break; } }else if(hsh_mrdev_initialized){ mr_device.BeginScene(); @@ -1106,6 +1113,21 @@ void gos_UpdateDisplay( bool Everything ) break; case 3: break; + case 4: + // Same 7-step cadence as mode 1. Flip all three: radar, left MFD, + // right MFD. mfd_device_right.pDDSFront is NULL if not initialised + // (e.g. g_nMFD2 = -1), so guard the flip. + sh_step++; + sh_step%=7; + if(sh_step==0) { + radar_device.EndScene(); + radar_device.pDDSFront->Flip(0,DDFLIP_DONOTWAIT|DDFLIP_NOVSYNC); + mfd_device.EndScene(); + mfd_device.pDDSFront->Flip(0,DDFLIP_DONOTWAIT|DDFLIP_NOVSYNC); + if (mfd_device_right.pDDSFront) + mfd_device_right.pDDSFront->Flip(0,DDFLIP_DONOTWAIT|DDFLIP_NOVSYNC); + } + break; } }else if(hsh_mrdev_initialized){ mr_device.EndScene(); diff --git a/Gameleap/code/CoreTech/Libraries/GameOS/render.cpp b/Gameleap/code/CoreTech/Libraries/GameOS/render.cpp index 9d1dd36f..5da8a4f7 100644 --- a/Gameleap/code/CoreTech/Libraries/GameOS/render.cpp +++ b/Gameleap/code/CoreTech/Libraries/GameOS/render.cpp @@ -945,6 +945,8 @@ void CHSH_Device::DrawTexture(float pt[4][2],DWORD dwColor,float tx1,float ty1,f extern int g_nDualHead; extern int g_nNonDualHead; +extern int g_nMFD1; // mode 4: left 640x480 MFD monitor +extern int g_nMFD2; // mode 4: right 640x480 MFD monitor // MSL 5.03 Mechview extern int g_nMechViewType; // jcem : 0 - no mechview, 1 - on radar screen, 2 - on main screen @@ -1066,6 +1068,23 @@ bool CMR_Device::LoadMRTargetTexture(const char *mechtexturename) CMR_Device mr_device; +// Mode 4: the right-hand 640x480 MFD device. Shares VRAM with mfd_device +// (same GPU), so mfd_device's pDDSTarget texture can be passed to this +// device's pD3DDevice->SetTexture without a copy. +CMFDRight_Device mfd_device_right; + +bool CMFDRight_Device::InitFirst() +{ + // Take over g_nMFD2 monitor at 640x480 fullscreen. + return CHSH_Device::InitFirst(g_nMFD2, 640, 480); +} + +bool CMFDRight_Device::InitSecond() +{ + // Create flip chain, D3D device and a render-target slot (1024x512). + return CHSH_Device::InitSecond(1024, 512); +} + /////////////////////////////////// CRadar_Device /////////////////////////////////// const char g_szRadarShutdown[] = "SHUT\nDOWN"; const char g_szRadarStartup[] = "START\nUP"; @@ -1349,7 +1368,7 @@ static DWORD channel_color[6]={ CMFD_Device::CMFD_Device() - : ch((DWORD)-1) + : ch((DWORD)-1), m_pRightDevice(NULL) { } @@ -1359,6 +1378,15 @@ CMFD_Device::~CMFD_Device() bool CMFD_Device::InitFirst() { + // Mode 4: use g_nMFD1 (640x480) for left panel; also start up the right + // device here so both displays are ready before InitSecond runs. + if (g_nTypeOfMFDs == 4) { + m_pRightDevice = &mfd_device_right; + CHSH_Device::InitFirst(g_nMFD1, 640, 480); // left device + mfd_device_right.InitFirst(); // right device display mode + return true; + } + m_pRightDevice = NULL; return CHSH_Device::InitFirst(g_nDualHead,1280,480); } @@ -1409,6 +1437,11 @@ bool CMFD_Device::InitSecond() pD3DDevice->SetMaterial( &mtrl ); pD3DDevice->SetRenderState( D3DRENDERSTATE_AMBIENT, 0xffffffff ); + // Mode 4: create flip chain + D3D device for the right 640x480 monitor. + if (g_nTypeOfMFDs == 4 && m_pRightDevice) { + mfd_device_right.InitSecond(); + } + return true; } @@ -1450,6 +1483,11 @@ bool CMFD_Device::BeginChannel(DWORD channel) return false; } break; + case 4: + // Same 7-step timing as mode 1: channels 0-4 map to sh_step 2-6. + if (sh_step != (int)(channel + 2)) + return false; + break; } ch=channel; @@ -1475,8 +1513,42 @@ bool CMFD_Device::EndChannel() gCaptureScreen = 0; } - SetRenderTargetBackbuffer(); - pD3DDevice->BeginScene(); + // Mode 4: route this channel's blit to the correct physical monitor. + // Handled here, before the modes 1-3 SetRenderTargetBackbuffer/BeginScene + // block, so each path has exactly one matched Begin/EndScene pair. + // Channels 0-2 go to the LEFT device (this, g_nMFD1). + // Channels 3-4 go to the RIGHT device (m_pRightDevice, g_nMFD2). + // pDDSTarget was created by this device's pDD; both devices are on the + // same GPU so VRAM textures are mutually accessible. + if (g_nTypeOfMFDs == 4 && m_pRightDevice) { + CHSH_Device* target = (ch >= 3) ? m_pRightDevice : static_cast(this); + target->SetRenderTargetBackbuffer(); + target->pD3DDevice->BeginScene(); + + target->pD3DDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE,TRUE); + target->pD3DDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND,D3DBLEND_ONE); + target->pD3DDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND,D3DBLEND_ONE); + + target->pD3DDevice->SetTexture(0, pDDSTarget); + + DWORD color4 = channel_color[ch]; + float w4 = (float)target->size_back.cx; // 640 + float h4 = (float)target->size_back.cy; // 480 + float w2_4 = (float)size_target.cx; // 1024 + float h2_4 = (float)size_target.cy; // 512 + D3DTLVERTEX V4[4]; + V4[0]=D3DTLVERTEX(D3DVECTOR( -0.5f,h4-0.5f,0.9f),1.0f,color4,0, 0/w2_4,h4/h2_4); + V4[1]=D3DTLVERTEX(D3DVECTOR( -0.5f, -0.5f,0.9f),1.0f,color4,0, 0/w2_4, 0/h2_4); + V4[2]=D3DTLVERTEX(D3DVECTOR(w4-0.5f,h4-0.5f,0.9f),1.0f,color4,0,w4/w2_4,h4/h2_4); + V4[3]=D3DTLVERTEX(D3DVECTOR(w4-0.5f, -0.5f,0.9f),1.0f,color4,0,w4/w2_4, 0/h2_4); + target->pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,D3DFVF_TLVERTEX,V4,4,NULL); + + target->pD3DDevice->EndScene(); + ch = (DWORD)-1; + } else { + // Modes 1-3: blit to half of the single 1280-wide (or 640-wide) backbuffer. + SetRenderTargetBackbuffer(); + pD3DDevice->BeginScene(); pD3DDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE,TRUE); pD3DDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND,D3DBLEND_ONE); @@ -1504,8 +1576,9 @@ bool CMFD_Device::EndChannel() pD3DDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, D3DFVF_TLVERTEX , Vertices, 4, NULL ); - pD3DDevice->EndScene(); - ch = (DWORD)-1; + pD3DDevice->EndScene(); + ch = (DWORD)-1; + } } return true; } @@ -1533,6 +1606,25 @@ bool CMFD_Device::BeginScene() pD3DDevice->Clear(1,&s_rc2,D3DCLEAR_TARGET ,0,1.0f,0); //pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET ,0,1.0f,0); }break; + case 4: + // Clear and draw background grid on the LEFT device. + SetRenderTargetBackbuffer(); + pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,0,1.0f,0); + pD3DDevice->BeginScene(); + if(sh_game_started) DrawMFDBackGrid(); + pD3DDevice->EndScene(); + // Clear and draw background grid on the RIGHT device. + if (m_pRightDevice) { + m_pRightDevice->SetRenderTargetBackbuffer(); + m_pRightDevice->pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,0,1.0f,0); + m_pRightDevice->pD3DDevice->BeginScene(); + if(sh_game_started) { + m_pRightDevice->pD3DDevice->SetTexture(0,0); + m_pRightDevice->DrawQuadList(8,rcs640_solo,0xFFFFFFFF); + } + m_pRightDevice->pD3DDevice->EndScene(); + } + return true; // skip the common BeginScene/DrawGrid/EndScene below } pD3DDevice->BeginScene(); if(sh_game_started) { @@ -1559,6 +1651,11 @@ bool CMFD_Device::Release() SAFE_RELEASE(pDDSDamageTexture); // MSL 5.03 Target Damage Display SAFE_RELEASE(pDDSTargetTexture); + // Mode 4: release the right device before releasing this (left) device. + if (g_nTypeOfMFDs == 4 && m_pRightDevice) { + m_pRightDevice->Release(); + m_pRightDevice = NULL; + } CHSH_Device::Release(); } return true; @@ -1700,6 +1797,19 @@ static RECT rcs640[8]={ {1120-1,440,1120+1,480}, }; +// Mode 4: same grid pattern as rcs640 but offset to x=0 for a standalone +// 640x480 surface (left half of rcs1280). +static RECT rcs640_solo[8]={ + {0,40,640,42}, + { 160-1,0, 160+1,40}, + { 320-1,0, 320+1,40}, + { 480-1,0, 480+1,40}, + {0,480-42,640,480-40}, + { 160-1,440, 160+1,480}, + { 320-1,440, 320+1,480}, + { 480-1,440, 480+1,480}, +}; + bool CMFD_Device::DrawMFDBackGrid() { pD3DDevice->SetTexture(0,0); @@ -1714,6 +1824,11 @@ bool CMFD_Device::DrawMFDBackGrid() case 2: DrawQuadList(8,rcs640,0xFFFFFFFF); break; + case 4: + // Left device uses the left-half grid (0..640). + // Right device grid is drawn separately in BeginScene. + DrawQuadList(8,rcs640_solo,0xFFFFFFFF); + break; } return true; @@ -2489,6 +2604,9 @@ bool IsMultimonitorAvaliable() if ((*g_pfnCTCL_GetType)()==_ECTCL_CameraShip) return false; } + // Mode 4 uses its own device slots ? g_nDualHead is not required. + if (g_nTypeOfMFDs == 4) + return (g_nMFD1 != -1 && g_nMFD2 != -1); if (g_nDualHead != -1) { // 0 - no MFDs, 1 - orginal(5+1=dual & single), 2 - B&W(3 + 1=1 dual), 3 - color(3 + 1=2 dual) switch(g_nTypeOfMFDs) diff --git a/Gameleap/code/CoreTech/Libraries/GameOS/render.hpp b/Gameleap/code/CoreTech/Libraries/GameOS/render.hpp index c54db34a..cd07b11d 100644 --- a/Gameleap/code/CoreTech/Libraries/GameOS/render.hpp +++ b/Gameleap/code/CoreTech/Libraries/GameOS/render.hpp @@ -169,6 +169,7 @@ public: LPDIRECTDRAWSURFACE7 pDDSTargetTexture;//¸ÞÅ© µ¥¹ÌÁö ÅØ½ºÃÄ.. DWORD ch; //current channel.... + CHSH_Device* m_pRightDevice; // mode 4: pointer to right 640x480 device (NULL in modes 1-3) public: CMFD_Device(); ~CMFD_Device(); @@ -189,6 +190,19 @@ public: bool DrawMFDDefaultBackAux1(int state); }; +// Mode 4 (split dual 640x480): right-side MFD device on its own 640x480 monitor. +// Same GPU as the left device (mfd_device), so VRAM textures are shared. +class CMFDRight_Device : public CHSH_Device +{ +public: + CMFDRight_Device() {} + bool InitFirst(); + bool InitSecond(); + virtual bool BeginScene() { return true; } + virtual bool EndScene() { return true; } + virtual bool Release() { return CHSH_Device::Release(); } +}; + class CMR_Device:public CHSH_Device { public: @@ -212,6 +226,7 @@ void HSH_DirectDrawRelease2(); extern CRadar_Device radar_device; extern CMFD_Device mfd_device; +extern CMFDRight_Device mfd_device_right; extern CMR_Device mr_device; extern bool use_shgui; extern int sh_step; diff --git a/Gameleap/code/mw4/Code/MW4/MW4Shell.cpp b/Gameleap/code/mw4/Code/MW4/MW4Shell.cpp index 620ddc41..ade612da 100644 --- a/Gameleap/code/mw4/Code/MW4/MW4Shell.cpp +++ b/Gameleap/code/mw4/Code/MW4/MW4Shell.cpp @@ -14820,6 +14820,10 @@ void __stdcall CTCL_UpdateMechView() mfd_device.BeginScene(); sh_step = 4; break; + case 4: + // Same 7-step cadence as mode 1. + sh_step = 6; + break; } } else diff --git a/Gameleap/code/mw4/Code/MW4Application/MW4Application.cpp b/Gameleap/code/mw4/Code/MW4Application/MW4Application.cpp index 8a19a1ec..c236875d 100644 --- a/Gameleap/code/mw4/Code/MW4Application/MW4Application.cpp +++ b/Gameleap/code/mw4/Code/MW4Application/MW4Application.cpp @@ -1440,7 +1440,7 @@ int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int n if (token && token[7]) { int n = atoi(&token[7]); - if ((0 <= n) && (n <= 3)) // 0 - no MFDs, 1 - orginal(5+1=dual & single), 2 - B&W(3 + 1=1 dual), 3 - color(3 + 1=2 dual) + if ((0 <= n) && (n <= 4)) // 0 - no MFDs, 1 - orginal(5+1=dual & single), 2 - B&W(3 + 1=1 dual), 3 - color(3 + 1=2 dual), 4 - split dual 640x480 g_nTypeOfMFDs = n; } token = strstr(all_lower, "-trio "); From 5b7cd34058808d725fbe8778fce1081c60782600 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 16 Jul 2026 15:47:32 -0500 Subject: [PATCH 2/5] added ability to use dgvoodoo ddraw for VM resource builds. --- build-env/build-resources.ps1 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build-env/build-resources.ps1 b/build-env/build-resources.ps1 index 263751e5..ceb04e36 100644 --- a/build-env/build-resources.ps1 +++ b/build-env/build-resources.ps1 @@ -78,7 +78,9 @@ Write-Host "[pack 2/3] running resource compiler fullscreen (this can take a whi # Error -> the builder hangs on a modal dialog). Move it aside so the builder uses native DirectDraw; # the finally restores it for the editor regardless of how the build ends. $ddraw = Join-Path $Runtime "ddraw.dll"; $ddrawBak = "$ddraw.buildaside"; $ddrawMoved = $false -if (Test-Path $ddraw) { Move-Item $ddraw $ddrawBak -Force; $ddrawMoved = $true; Write-Host " (moved DDrawCompat ddraw.dll aside for the build)" } +$isDDrawCompat = (Test-Path $ddraw) -and -not (Test-Path (Join-Path $Runtime "dgVoodoo.conf")) +if ($isDDrawCompat) { Move-Item $ddraw $ddrawBak -Force; $ddrawMoved = $true; Write-Host " (moved DDrawCompat ddraw.dll aside for the build)" } +elseif (Test-Path $ddraw) { Write-Host " (dgVoodoo2 ddraw.dll detected - keeping in place for build)" } $code = $null try { $argList = "/gosnodialogs -armorlevel 3 -build -norun -nosound -nocd -noeula" From 7e65822b03bed5069d520827cb8ae7a789cd0405 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 16 Jul 2026 16:48:18 -0500 Subject: [PATCH 3/5] dgvoodoo support files for building MW4 with dgvoodoo2 instead of DDrawCompat. This is a workaround for the fact that DDrawCompat is not compatible with Windows 11, and dgvoodoo2 is a more modern alternative. --- Gameleap/mw4/D3D8.dll | 3 + Gameleap/mw4/D3D9.dll | 3 + Gameleap/mw4/D3DImm.dll | 3 + Gameleap/mw4/dgVoodoo.conf | 363 +++++++++++++++++++++++++++++++++++ Gameleap/mw4/dgVoodooCpl.exe | 3 + 5 files changed, 375 insertions(+) create mode 100644 Gameleap/mw4/D3D8.dll create mode 100644 Gameleap/mw4/D3D9.dll create mode 100644 Gameleap/mw4/D3DImm.dll create mode 100644 Gameleap/mw4/dgVoodoo.conf create mode 100644 Gameleap/mw4/dgVoodooCpl.exe diff --git a/Gameleap/mw4/D3D8.dll b/Gameleap/mw4/D3D8.dll new file mode 100644 index 00000000..c4b00b6d --- /dev/null +++ b/Gameleap/mw4/D3D8.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fe0314195d0caf2c72c5496352c4235858b0f104a3a2b0d88832f15f76faf57 +size 418304 diff --git a/Gameleap/mw4/D3D9.dll b/Gameleap/mw4/D3D9.dll new file mode 100644 index 00000000..6a1ba878 --- /dev/null +++ b/Gameleap/mw4/D3D9.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c13e3c0969d2c70a1a63cf96b83c7cd3bc47f925f28ec92c07d5b72d6df4c240 +size 485888 diff --git a/Gameleap/mw4/D3DImm.dll b/Gameleap/mw4/D3DImm.dll new file mode 100644 index 00000000..26aed359 --- /dev/null +++ b/Gameleap/mw4/D3DImm.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8339438c623662415851062723a4e5141717ff7aa54ab41eb0774c7431db68ad +size 210944 diff --git a/Gameleap/mw4/dgVoodoo.conf b/Gameleap/mw4/dgVoodoo.conf new file mode 100644 index 00000000..5a06e471 --- /dev/null +++ b/Gameleap/mw4/dgVoodoo.conf @@ -0,0 +1,363 @@ +;========================================================================== +; === Text based config file for dgVoodoo2 +; === Use this file if you are a game modder/hacker or an experted user and +; want to modify some advanced properties not available via the CPL. +;========================================================================== + +Version = 0x287 + +;-------------------------------------------------------------------------- + +[General] + +; OutputAPI: "d3d11warp", "d3d11_fl10_0", "d3d11_fl10_1", "d3d11_fl11_0", +; "d3d12_fl11_0", "d3d12_fl12_0", "bestavailable" +; Adapters: "all", or the ordinal of the adapter (1, ...) +;FullScreenOutput: "default", or the ordinal of the output on the adapter (1, ...) +; ScalingMode: "unspecified", "centered", "stretched", "centered_ar", "stretched_ar", "stretched_ar_crt", +; "stretched_4_3", "stretched_4_3_crt", "stretched_4_3_c64" +; +;InheritColorProfileInFullScreenMode: +; Enabled by default and can only be disabled only when a D3D11 output API +; is explicitly selected. Disabled case is intended for avoiding extra +; rendering resources on old hardware for better performance, if required. + +; DisableScreenSaver: If true then screen saver and monitor sleep mode are disabled while rendering through dgVoodoo is active + +OutputAPI = bestavailable +Adapters = all +FullScreenOutput = default +FullScreenMode = false +ScalingMode = unspecified +ProgressiveScanlineOrder = false +EnumerateRefreshRates = false + +Brightness = 100 +Color = 100 +Contrast = 100 +InheritColorProfileInFullScreenMode = true + +KeepWindowAspectRatio = true +CaptureMouse = true +CenterAppWindow = false +DisableScreenSaver = false + +;-------------------------------------------------------------------------- + +[GeneralExt] + +; DesktopResolution: Desktop (native) resolution can be forced for dgVoodoo's internal calculations. +; Useful for rare applications that pre-set the desktop to other than the native +; resolution before dgVoodoo gets in action. Only the compact format can be used here, +; and applies to all outputs of the desktop. +; DesktopBitDepth: You can define what screen bit depth should be reported through dgVoodoo +; (8, 16, 32) +; DeframerSize: When resolution is forced to other than the app default then +; a black frame is drawn around the output image coming from a wrapped API +; to remove scaling artifacts - +; frame thickness can be defined in pixels (max 16, 0 = disable) +; ImageScaleFactor: Integer factor for scaling the output image coming from a wrapped API +; Always done by nearest point filtering, independent on scaling mode +; (0 = max available) +; Separate factors can be defined for horizontal and vertical scaling +; by subproperties, e.g. +; ImageScaleFactor = x:3, y:2 +; CursorScaleFactor: Integer factor for scaling the emulated hardware mouse (max 16) +; (0 = automatic, 1 = no scale, 2 = double scale, ...) +; DisplayROI: Display region of interest +; If scaling is done by the dgVoodoo then you can define a subrect of the +; output image, coming from a wrapped API, to be displayed. The defined subrect +; is mapped to the display output according to the current scaling mode +; It can be useful for applications rendering a widescreen subimage into a 4:3 +; resolution; in this case you can scale up that subimage to (nearly) fill the +; whole screen on a widescreen monitor. +; DisplayROI empty value means the whole image. +; DisplayROI value can be a proportion in form of %d_%d or a pixel size (%d|%d) +; Pos subproperty is not mandatory and can be 'centered' or a pixel position (%d|%d) +; Examples: DisplayROI = 16_9, pos:centered +; DisplayROI = (320|200), pos:(10|10) +; Resampling: When scaling is done by the dgVoodoo for the given scaling mode, +; you can choose which filter is to be used for resampling the output image +; Available filters are: "pointsampled", "bilinear", "bicubic", "lanczos-2", "lanczos-3" +; PresentationModel: Low-level swapchain swap effect: if you know what you are doing then it can be +; overridden here. Flip models are better suited for modern OS features like auto HDR, +; while plain legacy models provide the best presentation performance under ideal conditions +; Not all model + output API + OS version combinations are supported. +; "auto", "discard", "seq", "flip_discard", "flip_seq" +; ColorSpace: Color space of the swap chain: +; "appdriven" - an application can choose argb2101010 through D3D9, but it means +; the legacy argb8888_srgb in any other case +; "argb8888_srgb" - Legacy 32 bit output for SDR displays +; "argb2101010_sdr" - 32 bit extended precision for SDR displays +; "argb2101010_sdr_wcg" - Wide Color Gamut format for SDR displays (available from Windows 11 22H2) +; "argb16161616_hdr" - Float16 HDR output (available from Windows 10 1709) +;WatermarkDisplayDuration: Display duration in secs for the watermark(s) if they are enabled (per swapchain) +; 0 or undefined means infinite time +; FreeMouse: If true then physical mouse is free to move inside the game window +; when using emulated scaling and/or application and forced resolution +; differs; can be useful when a game relies on the physical window size +; WindowedAttributes: You can define attributes for forced windowed appearance (separated by commas): +; "borderless" - forces the app window not have any border +; "alwaysontop" - forces the app window into the top-most band +; "fullscreensize" - forces the app window to be full screen size with image scaling inside +; FullscreenAttributes: You can define attributes for fullscreen appearance (separated by commas): +; "fake" - forces fake fullscreen mode with a screen-size window +; FPSLimit: An integer or rational (fractional) value, 0 = unlimited +; Environment: Software environment in which dgVoodoo is running: can be left unspecified (native) +; or can be set to 'DosBox' or 'QEmu'. +; SystemHookFlags: You can define which part of the system should be hooked (x86-DX only): +; "gdi" - for showing graphical contents rendered through GDI +; (like movie playback through the ancient Windows Multimedia AVI player library) +; "cursor" - for suppressing double-cursor symptoms when the cursor is emulated + +DesktopResolution = +DesktopBitDepth = +DeframerSize = 1 +ImageScaleFactor = 1 +CursorScaleFactor = 0 +DisplayROI = +Resampling = bilinear +PresentationModel = auto +ColorSpace = appdriven +WatermarkDisplayDuration = 0 +FreeMouse = false +WindowedAttributes = +FullscreenAttributes = +FPSLimit = 0 +Environment = +SystemHookFlags = + +;-------------------------------------------------------------------------- + +[Glide] + +; VideoCard: "voodoo_graphics", "voodoo_rush", "voodoo_2", "voodoo_banshee", "other_greater" +; OnboardRAM: in MBs +; MemorySizeOfTMU: in kBs +; TMUFiltering: "appdriven", "pointsampled", "bilinear" +; +; Resolution: either "unforced", "max", "max_isf", "max_fhd", "max_fhd_isf", "max_qhd", "max_qhd_isf", "desktop", "%dx", +; "max_%dx", "max_isf_%dx", "max_fhd_%dx", "max_fhd_isf_%d"x, "max_qhd_%dx", "max_qhd_isf_%dx", "desktop_%dx" +; or subproperties: h: horizontal, v: vertical +; + optional subproperty refrate: refresh rate in Hz +; e.g. Resolution = max, refrate:60 +; Resolution = 2x, refrate:59 +; Resolution = h:1280, v:1024, refrate:75 +; Resolution = max_2x +; or just use the compact form like "1024x768@60" or "512x384" +; +;Antialiasing: "off", "appdriven", "2x", "4x", "8x", "16x" (your GPU must support the chosen one) + +VideoCard = voodoo_2 +OnboardRAM = 8 +MemorySizeOfTMU = 4096 +NumberOfTMUs = 2 +TMUFiltering = appdriven +DisableMipmapping = false +Resolution = unforced +Antialiasing = appdriven + +EnableGlideGammaRamp = true +ForceVerticalSync = true +ForceEmulatingTruePCIAccess = false +16BitDepthBuffer = false +3DfxWatermark = true +3DfxSplashScreen = false +PointcastPalette = false +EnableInactiveAppState = false + + +;-------------------------------------------------------------------------- + +[GlideExt] + +; DitheringEffect: "pure32bit", "dither2x2", "dither4x4" +; Dithering: "disabled", "appdriven", "forcealways" +; DitherOrderedMatrixSizeScale: integer scale value for dither matrix size +; 1 = normal, 2 = double size, etc. +; 0 = automatic (the aim is to have some retro feel&look) + +DitheringEffect = pure32bit +Dithering = forcealways +DitherOrderedMatrixSizeScale = 0 + +;-------------------------------------------------------------------------- + +[DirectX] + +; VideoCard: "svga", "internal3D", "geforce_ti_4800", "ati_radeon_8500", +; "matrox_parhelia-512", "geforce_fx_5700_ultra", "geforce_9800_gt" +; VRAM: in MBs (default) or in GBs (e.g. VRAM = 2GB) +; Filtering: "appdriven", "pointsampled", "bilinear", "pointmip", "linearmip", "trilinear" +; or the integer value of an anisotropic filtering level (1-16) +; Mipmapping: "appdriven", "disabled", "autogen_point", "autogen_bilinear" +; KeepFilterIfPointSampled: if enabled then forced filtering affects only non-point sampled textures +; Bilinear2DOperations: if enabled then DirectDraw Blit and CPU-written data is transferred with bilinear scaling +; DisableD3DTnLDevice: if disabled then D3D TnL device is not enumerated and hardware Transform&Light vertex processing +; is not available + +DisableAndPassThru = false + +VideoCard = internal3D +VRAM = 256 +Filtering = appdriven +Mipmapping = appdriven +KeepFilterIfPointSampled = false +Resolution = unforced +Antialiasing = appdriven + +AppControlledScreenMode = true +DisableAltEnterToToggleScreenMode = true + +Bilinear2DOperations = false +PhongShadingWhenPossible = false +ForceVerticalSync = false +dgVoodooWatermark = true +FastVideoMemoryAccess = false +DisableD3DTnLDevice = false + +;-------------------------------------------------------------------------- + +[DirectXExt] + +; AdapterIDType: "nvidia", "amd", "intel" or leave it undefined +; You can define what type of driver version and vendor id's the wrapper should report to +; the application; Some games rely on that information so it can be useful for them +; Can be defined only for SVGA and Internal3D card types; the others have their own wired +; information + +; VendorID, DeviceID, SubsystemID, RevisionID: +; Can be defined only for SVGA and Internal3D card types +; You can overwrite these properties even if a non-default AdapterIDType is defined; +; say, you defined an nvidia id type but would like to refine the vendor id + +; DefaultEnumeratedResolutions: you can define what resolutions should be enumerated to the application by default +; "all", "classics", "none" + +; ExtraEnumeratedResolutions: you can add extra resolutions (separated by commas, max 16) that will get +; enumerated to the application as display adapter supported ones - +; can be useful if an app supports rendering at arbitrary resolutions +; and you have a particular favorite resolution that are not +; enumerated to the application by default +; you can either use the compact resolution format here, or +; "max", "max@refrate" meaning your desktop resolution with a potential refresh rate, or +; "max_4_3", "max_4_3@refrate", "max_16_9", "max_16_9@refrate" +; meaning the maximum resolution with the given aspect ratio calculated from +; the desktop resolution with the given refresh rate, e.g. "max_4_3@60", "max_16_9" + +; EnumeratedResolutionBitdepths: you can filter what bitdepths are included in the resolution enumeration +; any subset of {"8", "16", "32"}, or "all" + +; DitheringEffect: "high_quality", "ordered2x2", "ordered4x4" +; Dithering: "disabled", "appdriven", "forceon16bit", "forcealways" +; DitherOrderedMatrixSizeScale: integer scale value for dither matrix size +; 1 = normal, 2 = double size, etc. +; 0 = automatic +; DepthBuffersBitDepth: internal bit depth of depth/stencil buffers for 3D rendering (32 bit is not recommended) +; "appdriven", "forcemin24bit", "force32bit" +; Default3DRenderFormat: default format of 3D rendering +; "auto", "argb8888", "argb2101010", "argb16161616" +; auto corresponds to the selected color space +; argb2101010 has the benefit that it is still 32 bit but it can corrupt the rendering +; because of the lowered alpha bits, not recommended + +; MaxVSConstRegisters: Max number of vertex shader constant registers (DX8/9 only) +; Can be defined only for SVGA and Internal3D card types +; Valid values are 256 (default), 512 or 1024 +; D3D12BoundsChecking: If enabled then the D3D12 backend does bound checking on vs const register file accesses (D3D8/9 only) +; It should always be enabled to be fully compatible with the D3D8/9 specs but unfortunately that can cause +; performance loss while the vast majority of games do not need it; try to enable it if you experience a +; GPU crash with a D3D8/9 game + +; NPatchTesselationLevel: Force N-Patch tesselation level (D3D8/9) +; 0 = app driven +; 1 = disable +; 2 to 8 = a forced tesselation level +; Altough tesselation works with all vertex shader versions, you can force level higher than 1 +; only for the fixed function or vs.1.x vertex pipeline because of performance and practical reasons +; (forced tesselation also disables adaptive mode (D3D9), but forcing is not recommended at all, anyway) + +; DisplayOutputEnableMask: Each bit in this 32 bit value corresponds to a display output. Display outputs of the adapters are numbered +; sequentially. If Adapter0 has n display outputs and Adapter1 has m display outputs attached then the lowest +; n bits match Adapter0 display outputs, the next m bits match Adapter1 outputs, and so on. The lowest bit +; in a group corresponds to Output0. If a bit value is 0 then the display output is disabled for the device +; enumeration, in other words, it is invisible to the application. It can be useful for D3D9 multihead- +; or very special applications where you want to enable only individual displays on your monitor wall. + +; MSD3DDeviceNames: if true then original Microsoft D3D device names are exposed +; (some applications check for them and they fail) + +; RTTexturesForceScaleAndMSAA: if true then forced resolution scaling and MSAA is +; applied also to rendertarget textures +; Set it to false for games requiring pixel-precise rendering +; but be careful it can EASILY break certain things, not recommended + +; SmoothedDepthSampling: if true then extra smoothing is added to depth textures +; when they are sampled + +; DeferredScreenModeSwitch: If true the switching to full screen is deferred after the application initialized +; the DirectX device; can be useful for games that don't expect rendering window changes +; during initialization and crash + +; PrimarySurfaceBatchedUpdate: If true then direct changes of the primary surface are batched together for presenting them +; If false then each change is instantly presented (debug-like mode) + +; SuppressAMDBlacklist: Some AMD GPU models are blacklisted to workaround the solid-color-textures driver issue +; You can suppress it to check out if the problem is fixed in your current driver + +AdapterIDType = +VendorID = +DeviceID = +SubsystemID = +RevisionID = + +DefaultEnumeratedResolutions = all +ExtraEnumeratedResolutions = +EnumeratedResolutionBitdepths = all + +DitheringEffect = high_quality +Dithering = forcealways +DitherOrderedMatrixSizeScale = 0 +DepthBuffersBitDepth = appdriven +Default3DRenderFormat = auto + +MaxVSConstRegisters = 256 +D3D12BoundsChecking = false + +NPatchTesselationLevel = 0 + +DisplayOutputEnableMask = 0xffffffff + +MSD3DDeviceNames = false +RTTexturesForceScaleAndMSAA = true +SmoothedDepthSampling = true +DeferredScreenModeSwitch = false +PrimarySurfaceBatchedUpdate = false +SuppressAMDBlacklist = false + +;-------------------------------------------------------------------------- + +[Debug] + +; This section affects only debug/spec release builds +; +; Info, Warning, Error +; "Disable" - disables all messages and debugger break +; "Enable" - enables messages and disables debugger break +; "EnableBreak" - enables both messages and breaking into debugger +; +; MaxTraceLevel: Maximum level of tracing API calls +; 0 - Disable +; 1 - API Functions and methods +; 2 - Additional trace info for internals +; +; LogToFile: if false or debugger is detected then output goes to the debug output +; if true and no debugger detected then output goes to 'dgVoodoo.log' +; (not implemented yet, always the default debug output is used) + +Info = enable +Warning = enable +Error = enable +MaxTraceLevel = 0 + +;LogToFile = false \ No newline at end of file diff --git a/Gameleap/mw4/dgVoodooCpl.exe b/Gameleap/mw4/dgVoodooCpl.exe new file mode 100644 index 00000000..19a5792d --- /dev/null +++ b/Gameleap/mw4/dgVoodooCpl.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebecc6dc72f9a43146ec5954564a47ac68f9da51fa692cfc64fce553dd1e9a6d +size 449536 From f249c352c12fd71287480d020c1cd14f7b3cfeaf Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 16 Jul 2026 19:14:17 -0500 Subject: [PATCH 4/5] fix errors --- .../code/CoreTech/Libraries/GameOS/render.cpp | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Gameleap/code/CoreTech/Libraries/GameOS/render.cpp b/Gameleap/code/CoreTech/Libraries/GameOS/render.cpp index 5da8a4f7..d87ee41c 100644 --- a/Gameleap/code/CoreTech/Libraries/GameOS/render.cpp +++ b/Gameleap/code/CoreTech/Libraries/GameOS/render.cpp @@ -1584,6 +1584,19 @@ bool CMFD_Device::EndChannel() } +// Mode 4: same grid pattern as rcs640 but offset to x=0 for a standalone +// 640x480 surface (left half of rcs1280). +static RECT rcs640_solo[8]={ + {0,40,640,42}, + { 160-1,0, 160+1,40}, + { 320-1,0, 320+1,40}, + { 480-1,0, 480+1,40}, + {0,480-42,640,480-40}, + { 160-1,440, 160+1,480}, + { 320-1,440, 320+1,480}, + { 480-1,440, 480+1,480}, +}; + bool CMFD_Device::BeginScene() { /* @@ -1797,19 +1810,6 @@ static RECT rcs640[8]={ {1120-1,440,1120+1,480}, }; -// Mode 4: same grid pattern as rcs640 but offset to x=0 for a standalone -// 640x480 surface (left half of rcs1280). -static RECT rcs640_solo[8]={ - {0,40,640,42}, - { 160-1,0, 160+1,40}, - { 320-1,0, 320+1,40}, - { 480-1,0, 480+1,40}, - {0,480-42,640,480-40}, - { 160-1,440, 160+1,480}, - { 320-1,440, 320+1,480}, - { 480-1,440, 480+1,480}, -}; - bool CMFD_Device::DrawMFDBackGrid() { pD3DDevice->SetTexture(0,0); From ace883bf70462e08cebd2bdb2c8fbe55d0d1ada1 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 17 Jul 2026 10:43:22 -0500 Subject: [PATCH 5/5] remove dgvoodoo2 dlls from the deploy script. --- BTFrstrm/mech_loadouts.csv | 88 ++++++++++++++++++++++++++++++++++++++ build-env/deploy-mw4.ps1 | 3 +- 2 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 BTFrstrm/mech_loadouts.csv diff --git a/BTFrstrm/mech_loadouts.csv b/BTFrstrm/mech_loadouts.csv new file mode 100644 index 00000000..16a1fee0 --- /dev/null +++ b/BTFrstrm/mech_loadouts.csv @@ -0,0 +1,88 @@ +Mech,Tech,Chassis_Tonnage,Max_Loadout_Tonnage,Armor_Type,Internal_Type,Heatsinks,Heatsink_Type,JumpJets_Installed,CanLoad_JJ,CanLoad_ECM,CanLoad_BAP,CanLoad_AMS,OmniSlots,Equipment,Armor_LeftArm,Armor_RightArm,Armor_LeftLeg,Armor_RightLeg,Armor_LeftFrontTorso,Armor_RightFrontTorso,Armor_CenterFrontTorso,Armor_CenterRearTorso,Armor_Head,Total_Armor_Multiplier,Weapon_Count,Weapons_Summary,Weapons_With_Locations +Annihilator,IS,23.000000,100.000000,Reflective,EndoSteel,17,Single,0,No,Yes,Yes,Yes,,,1.8,1.8,1.8,1.8,1.85,1.85,2.0,0.8,0.3,14.0,10,"4x ClanERSmallLaser, 2x ClanMachineGun, 4x ClanUltraAC5",ClanERSmallLaser@LeftTorso G1 | ClanERSmallLaser@CenterTorso G1 | ClanERSmallLaser@CenterTorso G1 | ClanERSmallLaser@RightTorso G1 | ClanMachineGun@LeftTorso G1 | ClanMachineGun@RightTorso G1 | ClanUltraAC5@LeftArm G1 | ClanUltraAC5@LeftArm G1 | ClanUltraAC5@RightArm G1 | ClanUltraAC5@RightArm G1 +Archer,IS,17.000000,70.000000,Standard,Standard,20,Single,1,Yes,Yes,Yes,Yes,,,1.1,1.1,1.2,1.2,1.4,1.4,1.5,0.5,0.3,9.7,9,"2x LRM15, 4x MediumPulseLaser, NarcBeacon, 2x SSRM2",MediumPulseLaser@LeftArm G1 | MediumPulseLaser@CenterTorso G1 | MediumPulseLaser@CenterTorso G1 | MediumPulseLaser@RightArm G1 | SSRM2@LeftArm G2 | SSRM2@RightArm G2 | LRM15@LeftTorso G2 | LRM15@RightTorso G2 | NarcBeacon@LeftTorso G3 +ArcticWolf,Clan,9.5,40.0,FerroFiberus,EndoSteel,8,Single,1,Yes,Yes,Yes,Yes,,,0.7,0.7,0.95,0.95,0.85,0.85,1.0,0.2,0.3,6.5,6,"4x ClanSSRM4, 2x ClanSmallPulseLaser",ClanSmallPulseLaser@RightTorso G1 | ClanSmallPulseLaser@RightTorso G1 | ClanSSRM4@leftarm G2 | ClanSSRM4@special1 G2 | ClanSSRM4@special2 G2 | ClanSSRM4@rightarm G2 +Ares,Clan,15.500000,60.000000,FerroFiberus,Standard,15,Single,0,Yes,Yes,Yes,Yes,,,0.9,0.9,1.15,1.15,1.1,1.1,1.45,0.9,0.25,8.9,9,"ClanERLargeLaser, 3x ClanERMediumLaser, 2x ClanERSmallLaser, 3x ClanLRM10",ClanERSmallLaser@Special1 G1 | ClanERSmallLaser@Special1 G1 | ClanERMediumLaser@LeftArm G1 | ClanERMediumLaser@RightArm G1 | ClanERMediumLaser@RightArm G1 | ClanERLargeLaser@LeftArm G1 | ClanLRM10@Special2 G2 | ClanLRM10@Special2 G2 | ClanLRM10@Special2 G2 +Argus,IS,14.5,60.0,Standard,Standard,13,Single,0,No,Yes,Yes,Yes,,,0.7,0.7,1.15,1.15,0.85,0.85,1.45,0.9,0.3,8.05,9,"LRM10, 4x MachineGun, 3x MediumLaser, PPC",MediumLaser@Lefttorso G1 | MediumLaser@Righttorso G1 | MediumLaser@RightArm G1 | PPC@RightArm G1 | MachineGun@LeftTorso G1 | MachineGun@CenterTorso G1 | MachineGun@CenterTorso G1 | MachineGun@RightTorso G1 | LRM10@LeftArm G2 +Assassin2,IS,12.000000,45.000000,FerroFiberus,EndoSteel,6,Single,0,Yes,Yes,Yes,Yes,,,0.85,0.85,0.85,0.85,0.9,0.9,1.05,0.45,0.25,6.95,7,"LRM5, 2x MediumLaser, 2x SRM4, 2x SmallLaser",SmallLaser@LeftArm G1 | SmallLaser@RightArm G1 | MediumLaser@LeftArm G1 | MediumLaser@RightArm G1 | SRM4@LeftTorso G2 | SRM4@RightTorso G2 | LRM5@Special1 G2 +Atlas,IS,28.0,100.0,Standard,Standard,17,Single,0,No,Yes,Yes,Yes,,,1.95,1.95,2.15,2.15,2.45,2.45,2.2,1.1,0.3,16.7,9,"AC20, LRM20, 4x MediumLaser, SRM6, 2x SSRM2",MediumLaser@LeftArm G1 | MediumLaser@Head G1 | MediumLaser@CenterTorso G1 | MediumLaser@RightArm G1 | AC20@Special1 G1 | SSRM2@LeftTorso G2 | SSRM2@RightTorso G2 | SRM6@Special2 G2 | LRM20@LeftTorso G2 +Avatar,IS,17.000000,70.000000,Reactive,EndoSteel,12,Single,0,Yes,Yes,Yes,Yes,,,1.3,1.3,1.5,1.5,1.6,1.6,1.75,0.5,0.3,11.35,10,"2x LRM10, 2x LRM5, 2x LargeLaser, 4x MachineGun",MachineGun@LeftArm G1 | MachineGun@Special1 G1 | MachineGun@Special1 G1 | MachineGun@RightArm G1 | LargeLaser@LeftArm G1 | LargeLaser@RightArm G1 | LRM5@LeftTorso G2 | LRM5@RightTorso G2 | LRM10@LeftTorso G2 | LRM10@RightTorso G2 +Awesome,IS,23.0,80.0,Standard,Standard,28,Single,0,No,Yes,Yes,Yes,,AMS,1.45,1.45,1.55,1.55,1.65,1.65,1.75,1.25,0.3,12.6,6,"3x ERPPC, LRM5, SmallPulseLaser, UltraAC5",SmallPulseLaser@Head G1 | ERPPC@Lefttorso G1 | ERPPC@righttorso G1 | ERPPC@RightArm G1 | UltraAC5@LeftArm G1 | LRM5@CenterTorso G2 +Battlemaster,IS,20.500000,85.000000,Standard,EndoSteel,25,Single,0,No,Yes,Yes,Yes,,,1.45,1.45,1.6,1.6,1.8,1.8,2.05,0.95,0.3,13.0,1,MediumPulseLaser,MediumPulseLaser@LeftArm G1 +Battlemaster2c,Clan,15.500000,85.000000,Standard,EndoSteel,25,Single,0,No,Yes,Yes,Yes,,,1.45,1.45,1.6,1.6,1.8,1.8,2.05,0.95,0.3,13.0,1,ClanMediumPulseLaser,ClanMediumPulseLaser@LeftArm G1 +Behemoth,Clan,22.000000,100.000000,Standard,Standard,21,Single,1,Yes,Yes,Yes,Yes,,,1.95,1.95,2.15,2.15,2.45,2.45,2.2,1.1,0.3,16.7,7,"2x ClanGaussRifle, 4x ClanLargePulseLaser, LargeLaser",ClanLargePulseLaser@LeftTorso G1 | ClanLargePulseLaser@LeftTorso G1 | ClanLargePulseLaser@RightTorso G1 | ClanLargePulseLaser@RightTorso G1 | ClanGaussRifle@LeftArm G3 | ClanGaussRifle@RightArm G3 | LargeLaser@Special1 G3 +Behemoth2,Clan,22.000000,100.000000,Standard,Standard,21,Single,1,Yes,Yes,Yes,Yes,,,1.95,1.95,2.15,2.15,2.45,2.45,2.2,1.1,0.3,16.7,7,"2x ClanGaussRifle, 4x ClanLargePulseLaser, LargeLaser",ClanLargePulseLaser@LeftTorso G1 | ClanLargePulseLaser@LeftTorso G1 | ClanLargePulseLaser@RightTorso G1 | ClanLargePulseLaser@RightTorso G1 | ClanGaussRifle@LeftArm G3 | ClanGaussRifle@RightArm G3 | LargeLaser@Special1 G3 +Blackhawk,Clan,10.000000,50.000000,FerroFiberus,EndoSteel,12,Single,0,Yes,Yes,Yes,Yes,,,0.9,0.9,0.95,0.95,1.05,1.05,1.2,0.55,0.25,7.8,4,"2x ClanERPPC, 2x ClanMediumPulseLaser",ClanMediumPulseLaser@LeftTorso G1 | ClanMediumPulseLaser@RightTorso G1 | ClanERPPC@LeftArm G1 | ClanERPPC@RightArm G1 +Blackheart,Clan,14.000000,70.000000,FerroFiberus,Standard,0,Single,0,No,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +Blacklanner,Clan,12.500000,55.000000,FerroFiberus,EndoSteel,10,Single,0,No,Yes,Yes,Yes,,ECM,0.9,0.9,1.0,1.0,1.05,1.05,1.15,0.75,0.25,8.05,5,"ClanERLargeLaser, 2x ClanERMediumLaser, ClanLRM10, ClanSRM6",ClanERMediumLaser@LeftArm G1 | ClanERMediumLaser@LeftArm G1 | ClanERLargeLaser@RightArm G1 | ClanSRM6@Special2 G2 | ClanLRM10@Special1 G2 +Blacknight,IS,16.0,75.0,Standard,Standard,22,Single,0,Yes,Yes,Yes,Yes,,,1.2,1.2,1.4,1.4,1.55,1.55,1.8,0.8,0.3,11.2,8,"2x LargeLaser, 4x MediumLaser, PPC, SmallLaser",SmallLaser@Head G1 | MediumLaser@LeftArm G1 | MediumLaser@LeftTorso G1 | MediumLaser@RightTorso G1 | MediumLaser@RightArm G1 | LargeLaser@LeftTorso G1 | LargeLaser@RightTorso G1 | PPC@RightArm G1 +Bowman,Clan,16.000000,70.000000,FerroFiberus,Standard,0,Single,0,No,Yes,Yes,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +Brigand,IS,7.000000,25.000000,FerroFiberus,Standard,10,Single,0,Yes,Yes,Yes,Yes,,,0.45,0.45,0.45,0.45,0.55,0.55,0.55,0.4,0.25,4.1,4,"2x MediumLaser, 2x MediumPulseLaser",MediumPulseLaser@LeftArm G1 | MediumPulseLaser@RightArm G1 | MediumLaser@Special2 G1 | MediumLaser@Special1 G1 +Bushwacker,IS,15.5,55.0,FerroFiberus,Standard,11,Single,0,No,Yes,Yes,Yes,,,0.9,0.9,1.1,1.1,1.15,1.15,1.35,0.5,0.25,8.4,8,"AC10, ERLargeLaser, 2x LRM5, 2x MachineGun, 2x MediumLaser",MediumLaser@CenterTorso G1 | MediumLaser@CenterTorso G1 | ERLargeLaser@RightArm G1 | MachineGun@LeftTorso G1 | MachineGun@RightTorso G1 | AC10@LeftArm G1 | LRM5@Special1 G2 | LRM5@Special1 G2 +Canis,Clan,15.000000,80.000000,FerroFiberus,EndoSteel,0,Single,0,Yes,No,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +Catapult,IS,15.0,65.0,Reactive,Standard,10,Single,1,Yes,Yes,Yes,Yes,,,1.45,1.45,1.35,1.35,1.45,1.45,1.5,0.65,0.3,10.95,4,"2x LRM20, 2x LargeLaser",LargeLaser@LeftTorso G1 | LargeLaser@RightTorso G1 | LRM20@LeftArm G2 | LRM20@RightArm G2 +CauldronBorn,Clan,13.5,65.0,FerroFiberus,EndoSteel,13,Single,0,Yes,Yes,Yes,Yes,,,0.85,0.85,0.95,0.95,1.15,1.15,1.55,0.85,0.25,8.55,6,"ClanERMediumLaser, ClanGaussRifle, 2x ClanLRM10, ClanSSRM2, ClanUltraAC5",ClanERMediumLaser@LeftTorso G1 | ClanUltraAC5@LeftArm G1 | ClanGaussRifle@RightArm G1 | ClanSSRM2@RightTorso G2 | ClanLRM10@Special1 G2 | ClanLRM10@Special2 G2 +Chimera,IS,9.5,40.0,Standard,EndoSteel,14,Single,1,Yes,Yes,Yes,Yes,,,0.95,0.95,1.0,1.0,1.0,1.0,1.1,0.5,0.3,7.8,7,"ERLargeLaser, 4x LRM5, 2x MediumPulseLaser",MediumPulseLaser@LeftArm G1 | MediumPulseLaser@LeftArm G1 | ERLargeLaser@RightArm G1 | LRM5@RightTorso G2 | LRM5@RightTorso G2 | LRM5@RightTorso G2 | LRM5@RightTorso G2 +Commando,IS,7.000000,25.000000,Standard,Standard,8,Single,0,Yes,Yes,Yes,Yes,,,0.6,0.6,0.8,0.8,0.75,0.75,0.8,0.45,0.3,5.85,3,"2x MediumLaser, SRM6",MediumLaser@LeftArm G1 | MediumLaser@RightArm G1 | SRM6@CenterTorso G2 +Cougar,Clan,8.5,35.0,FerroFiberus,EndoSteel,10,Single,1,Yes,Yes,Yes,Yes,,,0.7,0.7,0.7,0.7,0.75,0.75,0.8,0.45,0.25,5.8,5,"2x ClanLRM10, ClanMachineGun, 2x ClanMediumPulseLaser",ClanMediumPulseLaser@LeftArm G1 | ClanMediumPulseLaser@RightArm G1 | ClanMachineGun@RightTorso G1 | ClanLRM10@LeftTorso G2 | ClanLRM10@RightTorso G2 +Crab,IS,10.500000,50.000000,FerroFiberus,Standard,0,Single,0,No,No,Yes,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +Cyclops,IS,19.000000,90.000000,FerroFiberus,Standard,16,Single,0,No,Yes,Yes,Yes,,,1.4,1.4,1.4,1.4,1.55,1.55,1.45,0.8,0.25,11.2,8,"GaussRifle, LRM10, 2x MediumLaser, 3x MediumPulseLaser, SRM4",MediumPulseLaser@LeftArm G1 | MediumPulseLaser@Special1 G1 | MediumPulseLaser@RightArm G1 | MediumLaser@LeftArm G1 | MediumLaser@RightArm G1 | GaussRifle@RightTorso G1 | SRM4@CenterTorso G2 | LRM10@LeftTorso G2 +Daishi,Clan,25.0,100.0,Standard,Standard,21,Single,0,No,Yes,Yes,Yes,,AMS,1.75,1.75,1.9,1.9,2.0,2.0,2.2,1.5,0.3,15.3,6,"ClanGaussRifle, 3x ClanLargePulseLaser, 2x ClanSSRM6",ClanLargePulseLaser@RightArm G1 | ClanLargePulseLaser@RightArm G1 | ClanLargePulseLaser@RightArm G1 | ClanGaussRifle@LeftArm G1 | ClanSSRM6@special1 G2 | ClanSSRM6@special1 G2 +Deimos,Clan,18.0,85.0,Reactive,EndoSteel,17,Single,0,No,Yes,Yes,Yes,,AMS,1.55,1.55,1.65,1.65,1.75,1.75,2.05,0.7,0.3,12.95,10,"2x ClanERMediumLaser, 2x ClanLRM15, 6x ClanUltraAC2",ClanERMediumLaser@LeftTorso G1 | ClanERMediumLaser@RightTorso G1 | ClanUltraAC2@LeftArm G1 | ClanUltraAC2@LeftArm G1 | ClanUltraAC2@LeftArm G1 | ClanUltraAC2@RightArm G1 | ClanUltraAC2@RightArm G1 | ClanUltraAC2@RightArm G1 | ClanLRM15@Special1 G2 | ClanLRM15@Special2 G2 +Dragon,Clan,17.0,60.0,Standard,Standard,13,Single,0,Yes,Yes,Yes,Yes,,,1.15,1.15,1.4,1.4,1.25,1.25,1.55,0.9,0.3,10.35,5,"ERPPC, LRM10, 3x MediumLaser",MediumLaser@LeftArm G1 | MediumLaser@LeftTorso G1 | MediumLaser@RightTorso G1 | ERPPC@RightArm G1 | LRM10@CenterTorso G2 +Duangung,IS,7.000000,25.000000,FerroFiberus,Standard,0,Single,0,Yes,No,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +Fafnir,IS,21.0,100.0,FerroFiberus,Standard,7,Single,0,No,Yes,No,No,,,1.8,1.8,1.9,1.9,2.0,2.0,2.2,1.0,0.3,14.9,7,"2x ClanGaussRifle, 2x LargeLaser, 3x MediumLaser",ClanGaussRifle@RightTorso G1 | ClanGaussRifle@LeftTorso G1 | LargeLaser@RightArm G1 | LargeLaser@LeftArm G1 | MediumLaser@RightTorso G1 | MediumLaser@CenterTorso G1 | MediumLaser@LeftTorso G1 +Flea,IS,7.00,20.0,Standard,Standard,2,Single,0,No,Yes,Yes,Yes,,,0.4,0.4,0.4,0.4,0.5,0.5,0.65,0.3,0.3,3.85,6,"2x MachineGun, 2x MediumLaser, 2x SmallLaser",SmallLaser@LeftTorso G1 | SmallLaser@RightTorso G1 | MediumLaser@LeftArm G1 | MediumLaser@RightArm G1 | MachineGun@LeftArm G1 | MachineGun@RightArm G1 +Gargoyle,Clan,15.000000,80.000000,FerroFiberus,EndoSteel,0,Single,0,No,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +Gesu,Clan,9.750000,45.000000,FerroFiberus,EndoSteel,0,Single,0,No,No,Yes,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +Gladiator,Clan,24.0,95.0,FerroFiberus,Standard,19,Single,1,Yes,Yes,Yes,Yes,,,1.4,1.4,1.65,1.65,1.75,1.75,2.0,0.95,0.25,12.8,12,"ClanERSmallLaser, ClanLargePulseLaser, 3x ClanMediumPulseLaser, 5x ClanSmallPulseLaser, 2x SRM6",ClanSmallPulseLaser@RightTorso G1 | ClanSmallPulseLaser@RightTorso G1 | ClanSmallPulseLaser@RightArm G1 | ClanSmallPulseLaser@RightArm G1 | ClanSmallPulseLaser@RightArm G1 | ClanERSmallLaser@LeftTorso G1 | ClanMediumPulseLaser@RightArm G1 | ClanMediumPulseLaser@RightArm G1 | ClanMediumPulseLaser@RightArm G1 | ClanLargePulseLaser@LeftArm G1 | SRM6@LeftArm G2 | SRM6@LeftArm G2 +Grizzly,Clan,16.000000,70.000000,FerroFiberus,Standard,11,Single,1,Yes,Yes,Yes,Yes,,,1.2,1.2,1.1,1.1,1.4,1.4,1.5,0.5,0.25,9.65,6,"CLANLRM10, ClanGaussRifle, ClanLargePulseLaser, ClanMediumPulseLaser, 2x ClanSmallPulseLaser",ClanSmallPulseLaser@LeftArm G1 | ClanSmallPulseLaser@LeftArm G1 | ClanMediumPulseLaser@RightTorso G1 | ClanLargePulseLaser@LeftArm G1 | ClanGaussRifle@RightArm G1 | CLANLRM10@LeftTorso G2 +Hauptmann,Clan,21.0,95.0,Standard,Standard,20,Single,0,Yes,Yes,Yes,Yes,,ECM,1.7,1.7,1.8,1.8,1.9,1.9,2.1,1.1,0.3,14.3,8,"ClanERSmallLaser, 2x ClanLargePulseLaser, 2x ClanMediumPulseLaser, 2x ClanSSRM2, ClanUltraAC20",ClanERSmallLaser@Head G1 | ClanMediumPulseLaser@LeftArm G1 | ClanMediumPulseLaser@RightArm G1 | ClanLargePulseLaser@LeftArm G1 | ClanLargePulseLaser@RightArm G1 | ClanUltraAC20@Special1 G1 | ClanSSRM2@LeftTorso G2 | ClanSSRM2@RightTorso G2 +Hellhound,Clan,10.5,50.0,FerroFiberus,EndoSteel,12,Single,1,Yes,Yes,Yes,Yes,,,0.9,0.9,0.95,0.95,1.05,1.05,1.2,0.55,0.25,7.8,6,"ClanLRM10, 3x ClanMediumPulseLaser, ClanUltraAC2, ClanUltraAC5",ClanMediumPulseLaser@LeftArm G1 | ClanMediumPulseLaser@LeftArm G1 | ClanMediumPulseLaser@RightArm G1 | ClanUltraAC2@RightTorso G1 | ClanUltraAC5@RightTorso G1 | ClanLRM10@LeftTorso G2 +Hellspawn,IS,10.0,45.0,Standard,Standard,9,Single,1,Yes,Yes,Yes,Yes,,ECM,0.5,0.5,0.8,0.8,0.85,0.85,1.15,0.5,0.3,6.25,6,"LRM10, LargePulseLaser, 2x MediumPulseLaser, 2x SSRM2",MediumPulseLaser@LeftArm G1 | MediumPulseLaser@LeftArm G1 | LargePulseLaser@LeftArm G1 | SSRM2@RightArm G2 | SSRM2@Special1 G2 | LRM10@LeftTorso G2 +Highlander,IS,21.5,90.0,Standard,Standard,17,Single,1,Yes,Yes,Yes,Yes,,AMS,1.75,1.45,1.7,1.7,1.8,1.8,2.0,0.85,0.3,13.35,7,"GaussRifle, 4x MediumPulseLaser, 2x SRM6",MediumPulseLaser@RightTorso G1 | MediumPulseLaser@RightTorso G1 | MediumPulseLaser@RightArm G1 | MediumPulseLaser@RightArm G1 | GaussRifle@LeftArm G1 | SRM6@LeftTorso G2 | SRM6@LeftTorso G2 +Hollander,IS,10.000000,45.000000,FerroFiberus,EndoSteel,12,Single,0,No,Yes,Yes,Yes,,,0.85,0.85,0.85,0.85,0.9,0.9,1.05,0.45,0.25,6.95,6,"GaussRifle, 3x MediumPulseLaser, 2x SmallPulseLaser",SmallPulseLaser@Special2 G1 | SmallPulseLaser@Special2 G1 | MediumPulseLaser@LeftArm G1 | MediumPulseLaser@LeftTorso G1 | MediumPulseLaser@RightArm G1 | GaussRifle@Special1 G1 +Hunchback,IS,13.5,50.0,Standard,Standard,10,Single,0,Yes,Yes,Yes,Yes,,ECM,1.0,1.0,1.1,1.1,1.2,1.2,1.5,0.5,0.3,8.9,6,"AC10, 4x MediumLaser, SmallLaser",SmallLaser@Head G1 | MediumLaser@LeftArm G1 | MediumLaser@LeftArm G1 | MediumLaser@RightArm G1 | MediumLaser@RightArm G1 | AC10@Special1 G1 +Kodiak,IS,22.0,100.0,Standard,EndoSteel,20,Single,1,Yes,Yes,Yes,Yes,,,1.5,1.5,1.9,1.9,1.5,1.5,2,1.1,0.3,13.2,7,"4x ClanERMediumLaser, 2x ClanSSRM6, ClanUltraAC20",ClanERMediumLaser@leftArm G1 | ClanERMediumLaser@leftArm G1 | ClanERMediumLaser@rightarm G1 | ClanERMediumLaser@rightarm G1 | ClanUltraAC20@RightTorso G1 | ClanSSRM6@LeftTorso G2 | ClanSSRM6@LeftTorso G2 +Loki,Clan,17.5,65.0,Standard,Standard,13,Single,0,No,Yes,Yes,Yes,,ECM,1.3,1.3,1.4,1.4,1.5,1.5,1.55,0.6,0.3,10.85,7,"2x ClanERMediumLaser, 2x ClanMachineGun, ClanSSRM6, 2x ClanUltraAC5",ClanERMediumLaser@LeftArm G1 | ClanERMediumLaser@RightArm G1 | ClanMachineGun@LeftTorso G1 | ClanMachineGun@RightTorso G1 | ClanUltraAC5@LeftArm G1 | ClanUltraAC5@RightArm G1 | ClanSSRM6@Special1 G2 +Longbow,IS,20.5,85.0,Standard,Standard,11,Single,0,No,Yes,Yes,Yes,,,1.6,1.6,1.65,1.65,1.2,1.2,1.85,1.0,0.3,12.05,6,"2x LRM20, 2x LRM5, 2x MediumLaser",MediumLaser@LeftTorso G1 | MediumLaser@RightTorso G1 | LRM5@LeftTorso G2 | LRM5@RightTorso G2 | LRM20@LeftArm G2 | LRM20@RightArm G2 +MadCat_MkII,Clan,18.5,90.0,Reflective,EndoSteel,17,Single,1,Yes,Yes,Yes,Yes,,,1.8,1.8,1.8,1.8,1.85,1.85,2.0,0.8,0.3,14.0,12,"4x ClanERSmallLaser, 2x ClanLRM15, 2x ClanMachineGun, 4x ClanUltraAC5",ClanERSmallLaser@LeftTorso G1 | ClanERSmallLaser@CenterTorso G1 | ClanERSmallLaser@CenterTorso G1 | ClanERSmallLaser@RightTorso G1 | ClanMachineGun@LeftTorso G1 | ClanMachineGun@RightTorso G1 | ClanUltraAC5@LeftArm G1 | ClanUltraAC5@LeftArm G1 | ClanUltraAC5@RightArm G1 | ClanUltraAC5@RightArm G1 | ClanLRM15@Special2 G2 | ClanLRM15@Special1 G2 +Madcat,Clan,16.5,75.0,FerroFiberus,EndoSteel,17,Single,0,Yes,Yes,Yes,Yes,,,1.1,1.1,1.2,1.2,1.4,1.4,1.5,0.5,0.25,9.65,8,"2x ClanERLargeLaser, 2x ClanLRM10, 2x ClanMachineGun, 2x ClanMediumPulseLaser",ClanMediumPulseLaser@LeftArm G1 | ClanMediumPulseLaser@RightArm G1 | ClanERLargeLaser@LeftArm G1 | ClanERLargeLaser@RightArm G1 | ClanMachineGun@LeftTorso G1 | ClanMachineGun@RightTorso G1 | ClanLRM10@Special1 G2 | ClanLRM10@Special2 G2 +Masakari,Clan,18.0,85.0,FerroFiberus,Standard,15,Single,0,Yes,Yes,Yes,Yes,,,1.25,1.25,1.4,1.4,1.45,1.45,1.8,0.85,0.25,11.1,7,"2x ClanERMediumLaser, ClanGaussRifle, 2x ClanLRM10, 2x ClanUltraAC2",ClanERMediumLaser@RightTorso G1 | ClanERMediumLaser@RightTorso G1 | ClanUltraAC2@RightArm G1 | ClanUltraAC2@RightArm G1 | ClanGaussRifle@LeftArm G1 | ClanLRM10@LeftTorso G2 | ClanLRM10@LeftTorso G2 +Mauler,IS,26.0,90.0,FerroFiberus,Standard,11,Single,0,No,Yes,Yes,Yes,,,1.4,1.4,1.4,1.4,1.55,1.55,1.45,0.8,0.25,11.2,10,"2x GaussRifle, 6x LRM5, 2x SSRM4",GaussRifle@LeftArm G1 | GaussRifle@RightArm G1 | SSRM4@LeftTorso G2 | SSRM4@RightTorso G2 | LRM5@LeftTorso G2 | LRM5@LeftTorso G2 | LRM5@LeftTorso G2 | LRM5@RightTorso G2 | LRM5@RightTorso G2 | LRM5@RightTorso G2 +Novacat,Clan,16.0,70.0,Reactive,EndoSteel,17,Single,1,Yes,Yes,Yes,Yes,,ECM,1.55,1.55,1.45,1.45,1.5,1.5,1.7,0.75,0.3,11.75,7,"2x ClanERLargeLaser, 5x ClanMediumPulseLaser",ClanMediumPulseLaser@LeftArm G1 | ClanMediumPulseLaser@LeftArm G1 | ClanMediumPulseLaser@LeftArm G1 | ClanMediumPulseLaser@LeftTorso G1 | ClanMediumPulseLaser@RightTorso G1 | ClanERLargeLaser@RightArm G1 | ClanERLargeLaser@RightArm G1 +Osiris,IS,9.5,30.0,FerroFiberus,EndoSteel,11,Single,1,yes,Yes,Yes,Yes,,AMS,0.6,0.6,0.6,0.6,0.65,0.65,0.75,0.3,0.25,5.0,5,"2x MediumPulseLaser, NarcBeacon, SSRM2, SmallPulseLaser",SmallPulseLaser@special2 G1 | MediumPulseLaser@special1 G1 | MediumPulseLaser@RightArm G1 | SSRM2@LeftArm G2 | NarcBeacon@LeftArm G3 +Owens,IS,9.75,35.0,Standard,Standard,5,Single,0,No,Yes,Yes,Yes,,ECM,0.9,0.9,0.8,0.8,0.8,0.8,1.05,0.35,0.3,6.7,5,"MediumLaser, 2x SRM6, 2x SmallLaser",SmallLaser@CenterTorso G1 | SmallLaser@CenterTorso G1 | MediumLaser@Head G1 | SRM6@LeftArm G2 | SRM6@RightArm G2 +Puma,Clan,7.5,35.0,FerroFiberus,EndoSteel,10,Single,1,Yes,Yes,Yes,Yes,,,0.8,0.8,0.6,0.6,0.6,0.6,0.85,0.45,0.25,5.55,4,"2x ClanLRM20, 2x ClanSmallPulseLaser",ClanSmallPulseLaser@LeftTorso G1 | ClanSmallPulseLaser@RightTorso G1 | ClanLRM20@LeftArm G2 | ClanLRM20@RightArm G2 +Raven,IS,10.25,35.0,FerroFiberus,Standard,7,Single,0,No,Yes,Yes,Yes,,"ECM, AMS",0.6,0.65,0.65,0.65,0.7,0.7,0.75,0.25,0.25,5.2,5,"LRM5, 2x MediumLaser, NarcBeacon, SRM6",MediumLaser@RightArm G1 | MediumLaser@RightArm G1 | SRM6@RightTorso G2 | LRM5@RightTorso G2 | NarcBeacon@LeftArm G3 +Rifleman,IS,12.500000,60.000000,FerroFiberus,EndoSteel,17,Single,0,Yes,Yes,Yes,Yes,,,0.9,0.9,1.0,1.0,1.5,1.5,1.3,0.7,0.25,9.05,6,"2x LargeLaser, 2x MediumLaser, 2x PPC",MediumLaser@Special1 G1 | MediumLaser@Special1 G1 | LargeLaser@LeftArm G1 | LargeLaser@RightArm G1 | PPC@LeftArm G1 | PPC@RightArm G1 +Ryoken,IS,12.5,55.0,FerroFiberus,EndoSteel,10,Single,1,Yes,Yes,Yes,Yes,,ECM,0.9,0.9,1.0,1.0,1.05,1.05,1.15,0.75,0.25,8.05,6,"4x ClanMediumPulseLaser, 2x ClanSSRM6",ClanMediumPulseLaser@LeftArm G1 | ClanMediumPulseLaser@LeftArm G1 | ClanMediumPulseLaser@RightArm G1 | ClanMediumPulseLaser@RightArm G1 | ClanSSRM6@LeftTorso G2 | ClanSSRM6@RightTorso G2 +Shadowcat,Clan,9.75,45.0,FerroFiberus,EndoSteel,10,Single,1,Yes,Yes,Yes,Yes,,,0.85,0.85,0.85,0.85,0.9,0.9,1.05,0.45,0.25,6.95,5,"ClanGaussRifle, 2x ClanMediumPulseLaser, 2x ClanSSRM4",ClanMediumPulseLaser@RightTorso G1 | ClanMediumPulseLaser@RightArm G1 | ClanGaussRifle@LeftArm G1 | ClanSSRM4@LeftTorso G2 | ClanSSRM4@RightTorso G2 +Solitaire,Clan,7.000000,25.000000,FerroFiberus,EndoSteel,10,Single,0,Yes,Yes,Yes,Yes,,,0.6,0.6,0.6,0.6,0.55,0.55,0.8,0.4,0.25,4.95,4,"ClanERLargeLaser, 2x ClanERMediumLaser, ClanERSmallLaser",ClanERSmallLaser@LeftTorso G1 | ClanERMediumLaser@LeftTorso G1 | ClanERMediumLaser@CenterTorso G1 | ClanERLargeLaser@Special1 G1 +Sunder,IS,17.5,90.0,Standard,Standard,17,Single,0,Yes,Yes,Yes,Yes,,,1.35,1.35,1.55,1.55,1.65,1.65,2.0,1.0,0.3,12.4,10,"2x MachineGun, 6x MediumLaser, PPC, SRM6",MediumLaser@LeftTorso G1 | MediumLaser@LeftTorso G1 | MediumLaser@LeftTorso G1 | MediumLaser@RightTorso G1 | MediumLaser@RightTorso G1 | MediumLaser@RightTorso G1 | PPC@LeftArm G1 | MachineGun@RightArm G1 | MachineGun@RightArm G1 | SRM6@CenterTorso G2 +Templar,IS,20.5,85.0,Standard,EndoSteel,25,Single,1,Yes,Yes,Yes,Yes,,AMS,1.45,1.45,1.6,1.6,1.8,1.8,2.05,0.95,0.3,13.0,11,"AC20, 2x MachineGun, 6x MediumPulseLaser, PPC, SRM4",MediumPulseLaser@LeftArm G1 | MediumPulseLaser@LeftTorso G1 | MediumPulseLaser@RightTorso G1 | MediumPulseLaser@RightArm G1 | MediumPulseLaser@LeftTorso G1 | MediumPulseLaser@RightTorso G1 | PPC@LeftArm G1 | MachineGun@LeftTorso G1 | MachineGun@RightTorso G1 | AC20@RightArm G1 | SRM4@RightTorso G2 +Thanatos,IS,18.0,75.0,FerroFiberus,EndoSteel,20,Single,1,Yes,Yes,Yes,Yes,,,0.9,0.9,1.3,1.3,1.2,1.2,1.6,0.85,0.25,9.5,7,"2x LRM10, 2x LargePulseLaser, 2x MediumLaser, MediumPulseLaser",MediumPulseLaser@LeftTorso G1 | MediumLaser@LeftArm G1 | MediumLaser@RightTorso G1 | LargePulseLaser@LeftArm G1 | LargePulseLaser@RightTorso G1 | LRM10@RightArm G2 | LRM10@RightArm G2 +Thor,Clan,19.0,70.0,FerroFiberus,Standard,20,Single,1,Yes,Yes,Yes,Yes,,,1.1,1.1,1.2,1.2,1.4,1.4,1.5,0.5,0.25,9.65,7,"CLANLRM10, ClanERPPC, 2x ClanMachineGun, 2x ClanMediumPulseLaser, ClanUltraAC10",ClanMediumPulseLaser@LeftTorso G1 | ClanMediumPulseLaser@RightTorso G1 | ClanERPPC@RightArm G1 | ClanMachineGun@LeftTorso G1 | ClanMachineGun@RightTorso G1 | ClanUltraAC10@LeftArm G1 | CLANLRM10@Special1 G2 +Uller,Clan,8.00,30.0,FerroFiberus,EndoSteel,8,Single,0,Yes,Yes,Yes,Yes,,"ECM, AMS",0.45,0.45,0.5,0.5,0.6,0.6,0.65,0.45,0.25,4.45,4,"ClanERMediumLaser, ClanERSmallLaser, ClanSRM6, ClanUltraAC5",ClanERSmallLaser@LeftArm G1 | ClanERMediumLaser@RightArm G1 | ClanUltraAC5@RightArm G1 | ClanSRM6@LeftArm G2 +Uziel,IS,11.5,50.0,Standard,EndoSteel,10,Single,1,Yes,Yes,Yes,Yes,,,1.2,1.2,1.05,1.05,1.15,1.15,1.0,0.45,0.3,8.55,7,"LRM10, 2x MachineGun, PPC, 2x SmallPulseLaser, UltraAC5",SmallPulseLaser@LeftTorso G1 | SmallPulseLaser@RightTorso G1 | PPC@LeftArm G1 | MachineGun@LeftTorso G1 | MachineGun@RightTorso G1 | UltraAC5@RightArm G1 | LRM10@Special1 G2 +Victor,IS,17.0,80.0,Standard,EndoSteel,10,Single,1,Yes,Yes,Yes,Yes,,ECM,1.3,1.3,1.3,1.3,1.25,1.25,1.65,1.1,0.3,10.75,7,"AC20, 2x MachineGun, 2x MediumLaser, 2x SRM4",MediumLaser@LeftArm G1 | MediumLaser@LeftArm G1 | MachineGun@LeftTorso G1 | MachineGun@RightTorso G1 | AC20@RightArm G1 | SRM4@LeftTorso G2 | SRM4@RightTorso G2 +Vulture,Clan,16.0,60.0,Reactive,EndoSteel,12,Single,0,No,Yes,Yes,Yes,,,1.3,1.3,1.5,1.5,1.6,1.6,1.75,0.5,0.3,11.35,10,"2x ClanLRM10, 2x ClanLRM5, 2x ClanLargePulseLaser, 4x ClanMachineGun",ClanMachineGun@LeftArm G1 | ClanMachineGun@Special1 G1 | ClanMachineGun@Special1 G1 | ClanMachineGun@RightArm G1 | ClanLargePulseLaser@LeftArm G1 | ClanLargePulseLaser@RightArm G1 | ClanLRM5@LeftTorso G2 | ClanLRM5@RightTorso G2 | ClanLRM10@LeftTorso G2 | ClanLRM10@RightTorso G2 +Warhammer,IS,15.000000,70.000000,Standard,Standard,17,Single,0,Yes,Yes,Yes,Yes,,AMS,1.55,1.55,1.45,1.45,1.5,1.5,1.7,0.75,0.3,11.75,5,"2x ERPPC, 2x MediumLaser, SRM6",MediumLaser@RightTorso G1 | MediumLaser@LeftTorso G1 | ERPPC@RightArm G1 | ERPPC@LeftArm G1 | SRM6@special2 G2 +Wolfhound,Clan,10.25,35.0,FerroFiberus,EndoSteel,14,Single,0,Yes,Yes,Yes,Yes,,"ECM, AMS",0.5,0.5,0.7,0.7,0.75,0.75,0.95,0.5,0.25,5.6,5,"ClanERLargeLaser, ClanERMediumLaser, 3x ClanMediumPulseLaser",ClanMediumPulseLaser@LeftTorso G1 | ClanMediumPulseLaser@CenterTorso G1 | ClanMediumPulseLaser@RightTorso G1 | ClanERMediumLaser@CenterTorso G1 | ClanERLargeLaser@RightArm G1 +Zeus,IS,22.0,80.0,FerroFiberus,Standard,22,Single,0,Yes,Yes,Yes,Yes,,,1.1,1.1,1.25,1.25,1.45,1.45,1.55,0.8,0.25,10.2,7,"ERLargeLaser, ERPPC, LRM15, 4x MediumPulseLaser",MediumPulseLaser@LeftTorso G1 | MediumPulseLaser@RightTorso G1 | MediumPulseLaser@RightArm G1 | MediumPulseLaser@RightTorso G1 | ERLargeLaser@CenterTorso G1 | ERPPC@LeftArm G1 | LRM15@RightArm G2 +jenner2c,Clan,10.000000,35.000000,FerroFiberus,Standard,0,Single,0,Yes,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +koto,IS,7.000000,25.000000,FerroFiberus,EndoSteel,0,Single,0,No,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +locust2c,Clan,7.000000,25.000000,FerroFiberus,EndoSteel,0,Single,0,No,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +marauder2,IS,22.000000,100.000000,FerroFiberus,EndoSteel,0,Single,0,Yes,No,Yes,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +pitbull,Clan,15.000000,70.000000,FerroFiberus,EndoSteel,0,Single,0,Yes,No,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +privateer,IS,12.500000,55.000000,FerroFiberus,Standard,0,Single,0,No,No,Yes,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +razorback,IS,9.000000,30.000000,FerroFiberus,EndoSteel,0,Single,0,No,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +reaper,Clan,16.500000,75.000000,FerroFiberus,EndoSteel,0,Single,0,Yes,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +reaver,Clan,10.000000,40.000000,FerroFiberus,EndoSteel,0,Single,0,Yes,No,Yes,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +shadowhawk,IS,12.500000,55.000000,FerroFiberus,Standard,0,Single,0,Yes,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +strider,IS,11.000000,40.000000,FerroFiberus,Standard,0,Single,0,No,No,Yes,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +urbanmech,IS,5.000000,30.000000,Standard,Standard,8,Single,0,Yes,Yes,No,No,,,0.45,0.45,0.5,0.5,0.6,0.6,0.65,0.45,0.25,4.45,2,"AC20, SmallLaser",SmallLaser@LeftArm G1 | AC20@RightArm G1 +urbanmech_iic,Clan,5.000000,30.000000,FerroFiberus,Standard,0,Single,0,Yes,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +ursus,Clan,10.500000,50.000000,FerroFiberus,Standard,0,Single,0,No,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +vulture2,Clan,16.500000,75.000000,FerroFiberus,EndoSteel,0,Single,0,No,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, +vulturec,Clan,14.000000,60.000000,FerroFiberus,Standard,0,Single,0,No,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,, diff --git a/build-env/deploy-mw4.ps1 b/build-env/deploy-mw4.ps1 index e7cf9ca8..cda5125a 100644 --- a/build-env/deploy-mw4.ps1 +++ b/build-env/deploy-mw4.ps1 @@ -169,7 +169,8 @@ $keepExt = ".dll",".ini",".options",".txt",".rtf",".ico",".m4c",".sem",".016",". # the rest are tool/optional dlls the runtime game (per known-good) does not use. # ddraw.dll is DDrawCompat -- the editor installs it into the shared data tree for its windowed # viewport, but the fullscreen game must keep native DirectDraw, so never ship it here. -$skipDll = "dbghelp.dll","imagehlp.dll","ijl10.dll","ctcl.dll","Language.oeg.dll","Resources.dll","ddraw.dll" +$skipDll = "dbghelp.dll","imagehlp.dll","ijl10.dll","ctcl.dll","Language.oeg.dll","Resources.dll","ddraw.dll", + "D3DImm.dll","D3D8.dll","D3D9.dll" # dgVoodoo2 -- game uses AppCompat shim, not dgVoodoo $skipName = "edeula.rtf","mech4.ico","debuglog.txt","erfviewer.txt","servercyclex.txt","tctd.ini", "options-ext.ini","options-cam-var.ini","options-game-var.ini","options-mr-var.ini", "ctcl-camera-test.ini","ctcl-game-test.ini","ctcl-mr-test.ini"