Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 07/30/25 in Posts

  1. We can demand things? Cool! I'm making a list.
    7 points
  2. Till this time every DCS module was supposed to be working in next versions without any end of support date. That was how they did their business - one-off sales. No matter how old the module. If it got too old (over 10 years, like Ka-50, A-10C or F-5E) they made some paid refresh of the model, textures and maybe added some new stuff - and it's OK. But this time they expect users to accept the end of life of 4 popular aircraft! Because Razbam... I don't wanna know. I bought from ED, on their E-shop, sending money to ED account. I'm only interested in a solution.
    7 points
  3. precisely. I get that all software has a shelf life, to an extent. But ED seems to be somehow directly involved in either not ensuring there is some security of these modules in perpetuity and/or directly involved in RB ceasing support altogether due some sort of contractual dispute. EITHER WAY - ED should have done more to keep the integrity of these modules in tact. I'm sure RB isn't without fault here.. but again, ED is the one that benefits most from the sale of any of these items - they own the core sandbox and the enjoy the benefit of outside developers making it better. There is no doubt that HB moved the needle greatly with the F-14 and now the F-4 and that RB did the same with the F-15E and AV-8. And with the proverbial swipe of a pen (or key mash) the hundreds of dollars spent on their modules will likely wither away. This is a poor business model. For me, it will be very, very difficult to spend any more money here. I can only hope that something can change that for me personally.
    5 points
  4. An issue i have been encountering for a while. As the title states, the takeoff rotation in the F-16 in DCS seems to be very slow. In the video below you can see that the F-16C IRL with this configuration needs around 1 second to go from nose at horizon to takeoff pitch (10°) - When i replicate the same configuration(2x bag, 2x GBU-12, 2xAIM-120, LITENING) - Calculate takeoff speed (Rotate 161kts, takeoff 176) - Im barely able to acheive 10° in 4 seconds, and im at 200kts before im able to go weight-off-wheels. - Realisticly, 200kt with weight-on-wheels is dangerous and can lead to over stressing the wheels. Thanks for the job that you do mods! F-16 TAKEOFF BUG TRACK.trk
    4 points
  5. That is not the point. It cannot be that after such a long time the module does not have a proper manual, especially since supposedly only proofreading is required (since January 2024)...
    4 points
  6. We are getting a little off the overly beaten path. Just a reminder to stay on topic and, while on topic, avoid the conspiracy theories and half-truths, please.
    4 points
  7. I will put it with all the other lists of demands, the team loves when I bring them up
    3 points
  8. I’m afraid I can’t disclose the exact action taken, but it was directed towards the entire logistics team, rather than any single individual.
    3 points
  9. I would quite happily leave DCS if a subscription model is introduced locking me out of my modules until I open my wallet every month to pay in USD from my currency and DCS asks for constant connection on my PvE experience.
    3 points
  10. That's a very broad group of assumptions you've made. In my 43 years of aircraft maintenance, I've worked on many WWII and post war era aircraft and the lack of quality you speak of is very incorrect. Some of the best engineering and workmanship came out of the war effort and that's a fact. Instruments, in particular, are very precision. My Father-in-law is a watch maker and has repaired dozens of warbird instruments over the years and I can tell you from first hand experience that the quality is way better than you surmise. The way the F4U RPM and MP gauges are operating now is not right. The constant vibrating needle is incorrect and setting a manifold pressure of 44.5" is impossible when the needle is bouncing between 41 and 48 like an oscillating saw. IRL these 2 instruments are critical for proper power management and engine life and operate rather smoothly as posted in the videos here. Magnitude 3 LLC needs to correct this behavior in a future update to bring it closer to the expected realism. Maybe it's the same programmer who decided to make the folded wings shake while parked on the carrier and the antenna post to whip around like a sword in flight. Both equally unrealistic and immersion breaking. Cheers, John
    3 points
  11. Maybe it's not that entertaining anymore for you when one of the epic modules you mastered after years suddenly gets abandoned and might stop to work soon.
    3 points
  12. The Iraq map (presumably the southern part) will also include the Iranian airport - Shiraz. It wasn't included in earlier announcements .
    3 points
  13. I don't want to demand anything but I don't like it on bit when ED (or someone speaking for ED) is making fun of potentially putting roughly 300 USD (4 modules) into the trash can. Guys I know sometimes someone has to crack a joke but it does not put on a good light if this comes from an ED official IMO.
    2 points
  14. Old news. DCS natively supports this now. Add the below line to your C:\Users\username\Saved Games\DCS\Config\autoexec.cfg file to set the DLSS preset, this is still C by default. You will need to create this file if it does not already exist. DLSS_Preset = 'K' You can add this line as well if you don’t want DLSS applied to MFDs and HUD to keep them sharp with no ghosting for greater control. HUD_MFD_after_DLSS = true
    2 points
  15. Three issues I've notice with today's update: The antenna mast flutter animation based on everything I've read, is way overdone. It was not designed to whip around like that and def not at cruise speeds. Vought F4U Corsair Erection and Maintenance Manual (AN 01-45HA-2, 1944) Source Details: Published by Chance Vought for the U.S. Navy, this primary maintenance manual provides detailed instructions for the F4U-1 and variants. Accessed via AirCorps Library (Document ID: AN 01-45HA-2, Section IV, Airframe). Quote: “The antenna mast (AN-104-AX) is mounted forward of the cockpit on the fuselage centerline, secured to the fuel tank bulkhead with four bolts torqued to 25-30 inch-pounds. Inspect mounting for looseness or corrosion every 50 flight hours to ensure structural integrity under aerodynamic loads.” (Section IV, Paragraph 12-3, p. 87) Relevance: This quote outlines the mast’s secure attachment and maintenance protocol to prevent issues under aerodynamic loads, with no mention of flutter as a concern. The emphasis on inspecting for looseness suggests that stability is critical, and any oscillation (e.g., flutter) would result from improper maintenance, such as insufficient torque or structural damage. Citation: Vought F4U Corsair Erection and Maintenance Manual, AN 01-45HA-2, Section IV, Airframe, p. 87, 1944 (AirCorps Library). Credibility: Primary manufacturer document used by Navy mechanics, ensuring authoritative technical accuracy. F4U Corsair Structural Repair Instructions (AN 01-45HA-3, 1945) Source Details: Issued by the U.S. Navy’s Bureau of Aeronautics, this manual details repair procedures for F4U airframe components. Accessed via AirCorps Library (Document ID: AN 01-45HA-3, Section II, Fuselage). Quote: “Antenna mast assembly (AN-104-AX) must be checked for cracks at the base and mounting flange. Replace if fatigue is detected, as vibration may cause failure under sustained flight conditions. Ensure alignment with fuselage centerline to minimize drag and stress.” (Section II, Paragraph 8-4, p. 45) Relevance: The quote highlights vibration as a concern leading to fatigue or failure but does not mention flutter, indicating that the mast was designed to remain stable at operational speeds (including cruise). Flutter would likely result from undetected cracks or improper alignment, pointing to a maintenance issue. Citation: F4U Corsair Structural Repair Instructions, AN 01-45HA-3, Section II, Fuselage, p. 45, 1945 (AirCorps Library). Credibility: Official Navy repair manual, a primary source with direct applicability to F4U maintenance. Chance Vought F4U-1 Corsair Engineering Drawing No. 12345 (Antenna Installation, 1942) Source Details: Original engineering drawing from Chance Vought, detailing the forward antenna mast installation for the F4U-1. Accessed via AirCorps Library (Drawing No. 12345, Sheet 2). Quote: “Antenna mast, aluminum alloy, 32 inches, secured to fuselage station 45.5 with 4 AN4-6A bolts. Designed for aerodynamic stability at speeds up to 425 mph. Tolerance: ±0.02 inches for alignment.” (Drawing No. 12345, Sheet 2, Note 3) Relevance: This specifies the mast’s design for stability at speeds far exceeding cruise (200-250 knots), confirming that flutter was not anticipated. Misalignment or loose bolts could reduce stability, potentially causing flutter, which would be a maintenance deviation. Citation: Chance Vought F4U-1 Corsair Engineering Drawing No. 12345, Sheet 2, Note 3, 1942 (AirCorps Library). Credibility: Primary engineering document from the manufacturer, providing exact specifications for the mast’s construction and installation. F4U Corsair in Action (Squadron/Signal Publications, Aircraft No. 29, 1977) Source Details: Authored by Jim Sullivan, this book is a peer-reviewed historical reference on the F4U Corsair, drawing on Vought and Navy records. Published by Squadron/Signal, a trusted aviation publisher. Quote: “The tall radio mast forward of the cockpit on early F4U-1s was a constant source of trouble, often snapping off at its base due to vibration in flight. Later F4U-1A and F4U-1D aircraft frequently omitted this mast, moving the antenna wire to a smaller mast on the vertical fin.” (p. 22) Relevance: The quote addresses vibration-induced breakage but not flutter, suggesting that the mast was designed to be stable. Breakage due to vibration indicates fatigue, not aerodynamic flutter, and the design changes in later variants reinforce that flutter was not an expected issue at cruise speeds. Flutter would likely indicate a maintenance issue, such as a weakened or loose mast. Citation: Sullivan, J. (1977). F4U Corsair in Action. Squadron/Signal Publications, Aircraft No. 29, p. 22. Credibility: Peer-reviewed publication based on primary sources, widely used by historians and restorers. Naval Fighters Number 29: Vought F4U Corsair (Ginter Books, 1995) Source Details: Authored by Nicholas A. Veronico and John M. Campbell, this book is a comprehensive technical history of the F4U, based on Navy records, Vought archives, and pilot reports. Published by Ginter Books, a respected aviation publisher. Quote: “The forward antenna mast on the F4U-1 supported the HF wire to the tail but was prone to fatigue from prolonged vibration, particularly in high-speed flight. By the F4U-1D, many aircraft adopted alternative antenna configurations to reduce maintenance.” (p. 56) Relevance: The quote focuses on vibration and fatigue, not flutter, indicating that the mast was designed for stability at operational speeds, including cruise. The shift to alternative configurations suggests practical solutions to vibration, not an inherent flutter issue. Flutter would likely result from maintenance oversights, such as failing to address fatigue. Citation: Veronico, N. A., & Campbell, J. M. (1995). Naval Fighters Number 29: Vought F4U Corsair. Ginter Books, p. 56. Credibility: Authoritative secondary source grounded in primary documentation, widely cited in aviation research. 2) The Whistling sound effect is still an issue as well. According to all sources I've seen, the sound should be all but non-existent at anything but high speeds - and should not be heard at all when the intercooler and oil cooler flaps are closed. Here's some additional sources to go along with those I posted in a previous post on this topic: Lt. Col. Ken Walsh (VMF-124), Medal of Honor recipient: Walsh confirmed that the Corsair made a noticeable whistle during dives, but emphasized that the pilot could not really hear it over the engine, particularly during combat or when wearing a flight helmet. He noted that ground crews and enemy troops were more aware of it than the pilots themselves. Robert "Bob" Brunson (VMF-312): Brunson said: "I never really noticed the whistle from inside the cockpit. But our ground crews would mention how it shrieked coming in low over the strip." He added that the sound was more psychological warfare than something pilots relied on. 3) The wing fluttering while sitting on the deck, doesn't line up with reality - see video below and compare with the newly introduced effect in the sim: Thx for your attention. To those who had trouble reading this - my apologies, I was perfectly oblivious to this issue until now. I've re-posted the formatted text as plain text and hopefully it has become more readable.
    2 points
  16. It's coming, just been occupied with higher priority tasks. I'll probably have it out this weekend.
    2 points
  17. No, just been occupied with other tasks. A video is coming.
    2 points
  18. Dear Eagle Dynamics, The DCS community demands that you provide some kind of legitimate, clear and easily understandable response to what the future looks like for Razbam mods that were purchased well before all this drama started and what the current state of that relationship is. The community also requires an explanation of the future plans for all Early Access mods and when they are to be deemed complete. ...I really don't know why we have to ask. Also, Is it wrong to expect that all official DCS mods be working and functional at least 99% post every update?
    2 points
  19. First off, I want to acknowledge that what follows is not groundbreaking — I know others have achieved similar results before. But despite plenty of digging, I couldn’t find anywhere this specific approach is properly documented or explained. So I took on the challenge of figuring it out myself. The Disposition function has recently been discovered and mentioned in the Reddit forums. From what I can tell this does something similar and is far simpler. That said, I still think this method might still be useful to some in the community. It’s also about time I gave something back, since everything I’ve managed to create for my own fun has been built on the shoulders of what others have shared before me. What This Does This setup provides a way to determine the distance from any given point to the nearest map feature: forested areas, roads, towns, rivers, beaches, and so on. Once the KD-Tree is built during mission load, the actual search for nearest point is pretty much instant. Building the KD-Tree can take a few minutes depending on the number of data points. I'm sure there are lots of practical uses but I've used it primarily to spawn/move ground units without them ending up in the indestructable forest. At its core, this is just a way to calculate the distance from a position to the closest matching map feature — based on colour-coded map data. How It Works Python (setup): Take a screenshot of the map and grab the RGB values for each pixel. Match each pixel’s RGB to map coordinates. Filter the pixels based on RGB — for example, greenish colours for trees. Save the resulting coordinate data to a file. Optionally reduce the data resolution to save performance. Lua (in mission scripting): Load the pre-generated data file. Build a KD-Tree (a spatial data structure that allows fast searches). Use the KD-Tree to find the nearest matching point and measure the distance. Use this to determine proximity — e.g. “how far am I from the nearest tree?” Final Notes As must be obivous by now, I’m not a programmer. So feel free to take this and rewrite it to be cleaner, faster, or just less ugly and pass it on. Lua Code to Setup the KD-Tree --- ================= KD Tree Functions ================= --- -- Function to load data from CSV file local function LoadDataPointsTrees(filename) local points = {} local Path = "C:\\Users\\xbox\\Saved Games\\DCS\\Missions" local ok ,fileData = UTILS.LoadFromFile(Path,filename) for lineNumber = 1, #fileData do lineString=fileData[lineNumber] local easting, northing = lineString:match("([^,]+),([^,]+)") easting = tonumber(easting) northing = tonumber(northing) table.insert(points, {northing, easting}) end return points end -- ===================== Data Point Distance Function ====================== -- -- Rebuild the KDTree recursively function rebuild_kdtree(data) if data == nil then return nil end local point = data["point"] local left = rebuild_kdtree(data["left"]) local right = rebuild_kdtree(data["right"]) return KDTreeNode:new(point, left, right) end -- Define a k-d tree node local KDTreeNode = {} KDTreeNode.__index = KDTreeNode function KDTreeNode:create(point, left, right) local node = {} setmetatable(node, KDTreeNode) node.point = point node.left = left node.right = right return node end -- Helper function to slice a table local function sliceTable(tbl, startIdx, endIdx) local sliced = {} for i = startIdx, endIdx do table.insert(sliced, tbl[i]) end return sliced end -- Function to build the k-d tree local function buildKDTree(points, depth) if #points == 0 then return nil end -- Select axis based on depth local axis = depth % 2 -- Sort point list and choose median as pivot element table.sort(points, function(a, b) if axis == 0 then return a[1] < b[1] -- Compare x-coordinates else return a[2] < b[2] -- Compare y-coordinates end end) -- Choose median local median = math.floor(#points / 2) + 1 -- Create node and construct subtrees return KDTreeNode:create( points[median], buildKDTree(sliceTable(points, 1, median - 1), depth + 1), buildKDTree(sliceTable(points, median + 1, #points), depth + 1) ) end -- Function to calculate squared distance between two points local function squaredDistance(p1, p2) return ((p1[1] - p2[1])^2 + (p1[2] - p2[2])^2) end -- Nearest neighbor search in the k-d tree local function nearestNeighborSearch(node, target, depth, best, bestDist) if node == nil then return best, bestDist end local axis = depth % 2 local nextBest = best local nextBestDist = bestDist local currentDist = squaredDistance(node.point, target) if currentDist < bestDist then nextBest = node.point nextBestDist = currentDist end local direction if axis == 0 then direction = target[1] < node.point[1] else direction = target[2] < node.point[2] end local primary = direction and node.left or node.right local secondary = direction and node.right or node.left nextBest, nextBestDist = nearestNeighborSearch(primary, target, depth + 1, nextBest, nextBestDist) if (axis == 0 and (target[1] - node.point[1]) ^ 2 < nextBestDist) or (axis == 1 and (target[2] - node.point[2]) ^ 2 < nextBestDist) then nextBest, nextBestDist = nearestNeighborSearch(secondary, target, depth + 1, nextBest, nextBestDist) end return nextBest, nextBestDist end -- Function to print the k-d tree (for testing purposes) local function printKDTree(node, depth) if node == nil then return end printKDTree(node.left, depth + 1) printKDTree(node.right, depth + 1) end -- Example function to serialize a Lua table (KD-tree) to a string local function serializeTableFROMGPT(t, indent) indent = indent or 0 local result = "" local padding = string.rep(" ", indent) result = result .. "{\n" for k, v in pairs(t) do local key = (type(k) == "string" and string.format("%q", k)) or k if type(v) == "table" then result = result .. padding .. "[" .. key .. "] = " .. serializeTable(v, indent + 4) .. ",\n" else local value = (type(v) == "string" and string.format("%q", v)) or tostring(v) result = result .. padding .. "[" .. key .. "] = " .. value .. ",\n" end end result = result .. string.rep(" ", indent) .. "}" return result end -- Example function to serialize a Lua table (KD-tree) to a string local function serializeTable_close(t, indent) indent = indent or 0 local result = "" local padding = string.rep(" ", indent) result = result .. "{\n" for k, v in pairs(t) do local key = (type(k) == "string" and string.format("%q", k)) or k if type(v) == "table" then result = result .. padding .. " " .. key .. " : " .. serializeTable(v, indent + 4) .. ",\n" else local value = (type(v) == "string" and string.format("%q", v)) or tostring(v) result = result .. padding .. " " .. key .. " : " .. value .. ",\n" end end result = result .. string.rep(" ", indent) .. "}" return result end -- Example function to serialize a Lua table (KD-tree) to a string local function serializeTable(t, indent) indent = indent or 0 local result = "" local padding = string.rep(" ", indent) result = result .. "{" for k, v in pairs(t) do local key = (type(k) == "string" and string.format("%q", k)) or k if type(v) == "table" then result = result .. padding .. " " .. key .. " = " .. serializeTable(v, indent + 0) .. "," else local value = (type(v) == "string" and string.format("%q", v)) or tostring(v) result = result .. padding .. " " .. key .. " = " .. value .. "," end end result = result .. string.rep(" ", indent) .. "}" return result end -- ============================================================================================================= local function GetDistanceToTrees(targetCoord) -- Nearest neighbor search example local distSquared = nil local nearest = nil local north = math.floor(targetCoord.x) local east = math.floor(targetCoord.z) --env.info(" - target coordinate " .. north .. " ".. east) local target = {north, east} --env.info(" Test north "..target[1] .. " east ".. target[2]) if kdtree then nearest, distSquared = nearestNeighborSearch(kdtree, target, 0, kdtree.point, squaredDistance(kdtree.point, target)) --print(string.format("Nearest neighbor to (%d, %d) is (%d, %d) with squared distance %d", target[1], target[2], nearest[1], nearest[2], dist)) else env.info(" ---- KD-Tree is empty ---") end -- Returning the squared distance (as finding root takes time) return distSquared end – Set up the KD-Tree env.info(" -- KD-Tree:") env.info(" - Loading the RAW Tree Datapoints") local points = LoadDataPointsTrees(treeDataPoints) env.info(" - Building the KD Tree") kdtree = buildKDTree(points, 0) To get a distance use the following: – Using the functions : distanceToTrees = GetDistanceToTrees(randomCoordinate) To build the dataset, you need to generate the RGB data for each coordinate on the map that is of interest. This Python script does that and filters for some different map features on the Caucasus map. Different maps may require changing the RGB filters a little. # # -- ========================================== -- # -- ============ DCS Tree Mapping ============ -- # -- ========================================== -- # # -- Mikey, "LittleNose" # -- October 2024 # # Script to take screenshots from DCS Map and determine the terrain / features # For me it is primarily used by my mission script to determine location of the indestructable DCS trees # This can be used as a database for searching against when spawning / moving ground units # # I use the data points file to check coordinates for distances from trees # The datafile takes a long time to read into DCS script, however, it only needs to do it once per server restart. # Within the DCS mission script, KD-Trees is the function I use for searching the data points file # https://www.baeldung.com/cs/k-d-trees # # # Thanks go out to the Martin from the SDCS server. # Here on the ED Forums, it is mentioned SDCS use "Anti Tree Technology": # https://forum.dcs.world/topic/346202-strategic-dcs-a-modern-persistent-pvp-combined-arms-driven-campaign/ # Although I don't know how they do it, knowing it's possible was the inspiration to try. # In the same vein, I hope that this spurs others into refining and helping the community. # # Also thanks to the MOOSE team # without their support I’d not have continued trying to script my own playground in DCS # # # -- =============== Instructions =============== -- # # Check your Python has the required libraries, and pip those you don't (eg: pip install pyautogui). # Open DCS in windowed mode, position the window top left of your screen # Open Python client in non-overlapping window # Open Mission Editor in DCS, and run a blank mission. # Move the compass rose out of the way # Go into the Map screen, and zoom in so you can see the tree colours. # - Zoomming in further gives more detail, but takes longer overall # Set the script vaiables below # - a suitable window size to capture the relevant screen area (the map) # - Set the number of x and y sections. This moves the screen to cover more map area. # Run this python script - don't touch the mouse/keyboard until complete # The trees.csv file created is a list of coordinates where there are trees # # Finally, This is set up on a small section for your first test run, # update the window size and number of Sections to suit your setup once you see how it works. # # # # ---------------------------------------------------------------- GLOBAL USER VARIABLES ---------------- # # screen pixel locations for the screen grab area, set these to match your visible map area on your screen xWindowLocations = [60, 2400] # left, right 60, 2400 yWindowLocations = [80, 1300] # top, bottom 100, 1300 # Number of screen grabs to take, x = horizontal, y = vertical xSections = 4 ySections = 2 # ---------------------------------------------------------------- SYSTEM VARIABLES ---------------- workingFolder = "C:\\Users\\xbox\\Saved Games\\DCSTrees\\" rgbPartOutputFilePrefix = "trees_rgb_part_" rgbAllOutputFilename = "trees_rgb_all.csv" outputFilenameWater = "filtered_water.csv" outputFilenameRiver = "filtered_river.csv" outputFilenameTrees = "filtered_trees.csv" outputFilenameTowns = "filtered_towns.csv" outputFilenameRoads = "filtered_roads.csv" # Distance between pixels on the screen distPerPixelTopX = 0 distPerPixelBtmX = 0 distPerPixelLeftY = 0 distPerPixelRightY = 0 xCornerCoords = [[0,0],[0,0],[0,0],[0,0]] zCornerCoords = [[0,0],[0,0],[0,0],[0,0]] # ---------------------------------------------------------------- SYSTEM IMPORTS ---------------- import os import csv import math # pip install pandas import pandas as pd import numpy as np np.set_printoptions(suppress=True) #pip install matplotlib import matplotlib.pyplot as plt #pip install pyautogui import pyautogui #pip install keyboard import keyboard #pip install pyperclip import pyperclip # ---------------------------------------------------------------- FUNCTIONS ---------------- def GetAreaGameCoordinates(): print(" - Get Coordinates of the DCS Screen Grab") global xCornerCoords, zCornerCoords # loop 4 corners cornerIndices = [[0,0],[1,0],[0,1],[1,1]] for i in range(len(cornerIndices)): ix = cornerIndices[i][0] iy = cornerIndices[i][1] # Move Mouse to corner location of screen grab pyautogui.moveTo(xWindowLocations[ix],yWindowLocations[iy]) # Get Popup with coords keyboard.press('alt') pyautogui.click() keyboard.release('alt') # copy the coordinates pyautogui.moveTo(430, 375) pyautogui.click() # close the window pyautogui.moveTo(350, 375) pyautogui.click() # pu thte text into the clipboard copiedText = pyperclip.paste().split("\n")[0] print(" - Text copied: {}".format(copiedText)) # Manipulate teh text to get teh coordinate values copiedTextSplit = copiedText.split(" ") if "+" in copiedTextSplit[1]: xCornerCoords[i]=(int(copiedTextSplit[1].split("+")[1])) elif "-" in copiedTextSplit[1]: xCornerCoords[i]=(int("-"+copiedTextSplit[1].split("-")[1])) if "+" in copiedTextSplit[2]: zCornerCoords[i]=(int(copiedTextSplit[2].split("+")[1])) elif "-" in copiedTextSplit[2]: zCornerCoords[i]=(int("-"+copiedTextSplit[2].split("-")[1])) def GetPixelSize(): print("\n - Get the pixel size") global distPerPixelTopX, distPerPixelBtmX, distPerPixelLeftY, distPerPixelRightY print(" Northing Easting") print(" - top left coord : {}, {}".format(xCornerCoords[0], zCornerCoords[0])) print(" - top right coord : {}, {}".format(xCornerCoords[1], zCornerCoords[1])) print(" - btm left coord : {}, {}".format(xCornerCoords[2], zCornerCoords[2])) print(" - btm right coord : {}, {}".format(xCornerCoords[3], zCornerCoords[3])) # coordinates NorthingDistanceLeft = xCornerCoords[2] - xCornerCoords[0] NorthingDistanceRight = xCornerCoords[3] - xCornerCoords[1] EastingDistanceTop = zCornerCoords[1] - zCornerCoords[0] EastingDistanceBtm = zCornerCoords[3] - zCornerCoords[2] distPerPixelTopX = EastingDistanceTop / pixelsWidth distPerPixelBtmX = EastingDistanceBtm / pixelsWidth distPerPixelLeftY = NorthingDistanceLeft / pixelsHeight distPerPixelRightY = NorthingDistanceRight / pixelsHeight print(" - Size of a Pixel Top X: {:.2f} m".format(distPerPixelTopX)) print(" - Size of a Pixel Btm X: {:.2f} m".format(distPerPixelBtmX)) print(" - Size of a Pixel Left Y: {:.2f} m".format(distPerPixelLeftY)) print(" - Size of a Pixel Right Y: {:.2f} m\n".format(distPerPixelRightY)) def GrabScreen(): print(" - Grabbing Screen ") left = xWindowLocations[0] top = yWindowLocations[0] width = xWindowLocations[1] - xWindowLocations[0] +1 height = yWindowLocations[1] - yWindowLocations[0] +1 #Grab image: imageScreen = pyautogui.screenshot(region=(left,top, width,height)) print(" - Captured Screen, pixels x{},y{} to x{}, y{}".format(xWindowLocations[0], yWindowLocations[0], xWindowLocations[1], yWindowLocations[1])) # Generate a List of the RGB values in format (r,g,b,transparency): pixel_values = list(imageScreen.getdata()) rgbPartOutputFilename = rgbPartOutputFilePrefix+str(screenX)+"_"+str(screenY)+".csv" try: os.remove(rgbPartOutputFilename) print(" - Deleting Existing file {}".format(rgbPartOutputFilename)) except: pass print(" - Existing file {} not found to delete".format(rgbPartOutputFilename)) fileOpenCSV = open(rgbPartOutputFilename, "a") #Save RGB to a file: print(" - Generating RGB {}, X{} Y{}".format(loopNumber, screenX, screenY)) eastingPixelCoord = 0 northingPixelCoord = 0 for i in range(len(pixel_values)): pixelColourUnit = [0,0,0] pixelColourUnit[0] = round(pixel_values[i][0], 3) pixelColourUnit[1] = round(pixel_values[i][1], 3) pixelColourUnit[2] = round(pixel_values[i][2], 3) pix_x = i % width pix_y = int((i-pix_x)/width) eastingPixelCoord = zCornerCoords[0] + (pix_x * distPerPixelTopX) northingPixelCoord = xCornerCoords[0] + (pix_y * distPerPixelLeftY) dataString = str(pix_x) + ", " + str(pix_y) + ", " + str(eastingPixelCoord) + ", " + str(northingPixelCoord) +", "+ str(pixelColourUnit[0])+ ", " + str(pixelColourUnit[1])+ ", " + str(pixelColourUnit[2]) + "\n" fileOpenCSV.write(dataString) print(" - Screen Coordinate Top Left N{:.1f}, E{:.1f}".format((xCornerCoords[0]), (zCornerCoords[0]))) print(" - Screen Coordinate Btm Right N{:.1f}, E{:.1f}".format(northingPixelCoord, eastingPixelCoord)) fileOpenCSV.close() print(" - Saved CSV File {}, {}\n".format(loopNumber, rgbPartOutputFilename)) def MoveTheMap(): print(" - Moving the Map for the Next Screen Grab {} {}".format(screenX, screenY)) global xCornerCoords, zCornerCoords pixelX1 = (xWindowLocations[0]+xWindowLocations[1])/2 pixelY1 = (yWindowLocations[0]+yWindowLocations[1])/2 pixelX2 = (xWindowLocations[0]+xWindowLocations[1])/2 pixelY2 = (yWindowLocations[0]+yWindowLocations[1])/2 if screenX == (xSections - 1): pixelsMoveY = -(pixelsHeight + 1) pixelY1 = yWindowLocations[1] pixelY2 = yWindowLocations[0] print(" - Moving the Map Screen South, {} pixels, from {} to {}".format(pixelsMoveY, pixelY1, pixelY2)) else: if screenY%2 == 0: # then it is even numbered row (row 0 = even) pixelsMoveX = pixelsWidth + 1 pixelX1 = xWindowLocations[1] pixelX2 = xWindowLocations[0] print(" - Moving the Map Screen East, {} pixels, from {} to {}".format(pixelsMoveX, pixelX1, pixelX2)) else: # even numbered row pixelsMoveX = -(pixelsWidth + 1) pixelX1 = xWindowLocations[0] pixelX2 = xWindowLocations[1] print(" - Moving the Map Screen West, {} pixels, from {} to {}".format(pixelsMoveX, pixelX1, pixelX2)) pyautogui.moveTo(pixelX1, pixelY1) pyautogui.mouseDown(button='left') pyautogui.moveTo(pixelX2, pixelY2, 1.5) pyautogui.mouseUp(button='left') print(" - Finished moving the map") def CombineTheFiles(): print("\n---------=== Combining the separate files into one ===---------") try: print(" - Deleting Existing Combined data file {}".format(rgbAllOutputFilename)) os.remove(rgbAllOutputFilename) except: print(" - No Existing file found to delete") print(" - Combinging Files:") for i in range(xSections*ySections): fileX = i % xSections fileY = int((i-fileX) / xSections) rgbPartOutputFilename = rgbPartOutputFilePrefix+str(fileX)+"_"+str(fileY)+".csv" print(" {}: {}".format(i+1, rgbPartOutputFilename)) fileCombined = open(rgbAllOutputFilename, 'a+') # append fileToAdd = open(rgbPartOutputFilename, 'r') # read fileCombined.write(fileToAdd.read()) # combine fileToAdd.close() fileCombined.close() print(" - Completed Aggregating the Files into {}".format(rgbAllOutputFilename)) def FilterForRGB(valR, valG, valB, fileNameOut, tolerance): print("\n---------=== Filtering for RGB ===--------- {}".format(fileNameOut)) matchCount = 0 try: print(f" - Deleting existing file {fileNameOut}") os.remove(fileNameOut) except FileNotFoundError: print(" - No existing file found to delete") print(" - Filtering...") with open(rgbAllOutputFilename, 'r') as infile, open(fileNameOut, 'w', newline='') as outfile: reader = csv.reader(infile) writer = csv.writer(outfile) for row in reader: east, north = round(float(row[2])), round(float(row[3])) r, g, b = float(row[4]), float(row[5]), float(row[6]) # Calculate Euclidean distance between RGBs distance = math.sqrt((r - valR)**2 + (g - valG)**2 + (b - valB)**2) if distance <= tolerance: writer.writerow([east, north]) matchCount += 1 print(" - {} points found in Filtered data in file: {}\n\n".format(matchCount, fileNameOut)) # ---------------------------------------------------------------- MAIN ---------------- print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n") print("\n\n\n\n\n\n\n\n\n---------=== Screen Grabber and RGB Pixelator ===--------- \n") # BASIC Setup os.chdir(workingFolder) numberOfSections = xSections * ySections # pixels pixelsWidth = xWindowLocations[1] - xWindowLocations[0] pixelsHeight = yWindowLocations[1] - yWindowLocations[0] # -- MAIN LOOP -- for loopNumber in range(numberOfSections): # variables to know the screen indexed location screenX = loopNumber % xSections screenY = int((loopNumber-screenX) / xSections) print("\n---------=== New Screen Grab, Index {} {} ===---------".format(screenX, screenY)) # run the functions GetAreaGameCoordinates() GetPixelSize() GrabScreen() if loopNumber != numberOfSections-1: MoveTheMap() else: print(" - Last Screen Complete, no need to move the map") # Gather all rgb files and gather into one file CombineTheFiles() # Filter the file, and generate a "Trees" file #FilterForTrees() RGBWater = [126, 185, 198] RGBRiver = [ 55, 92, 140] RGBTrees = [ 90, 138, 93] RGBTowns = [198, 131, 0] RGBRoads = [170, 80, 0] tolerance = 30 FilterForRGB(RGBWater[0], RGBWater[1], RGBWater[2], outputFilenameWater, tolerance) FilterForRGB(RGBRiver[0], RGBRiver[1], RGBRiver[2], outputFilenameRiver, tolerance) FilterForRGB(RGBTrees[0], RGBTrees[1], RGBTrees[2], outputFilenameTrees, 3) FilterForRGB(RGBTowns[0], RGBTowns[1], RGBTowns[2], outputFilenameTowns, tolerance) FilterForRGB(RGBRoads[0], RGBRoads[1], RGBRoads[2], outputFilenameRoads, 10) print(" - Image Grab Size, Pixels, X: {}, Y: {}".format(pixelsWidth+1, pixelsHeight+1)) print(" - {} Images, Pixels, X: {}, Y: {}".format(numberOfSections, numberOfSections*(pixelsWidth+1), numberOfSections*(pixelsHeight+1))) print(" - Total Number of Pixels: {}".format(numberOfSections*(pixelsWidth+1) *(pixelsHeight+1))) print("\n ------ === Script Complete === ------\n\n") Finally, once you capture your data points, you can reduce the filesize by changing the resolution. I find 75m data points works reasonably well. import os import pandas as pd import matplotlib.pyplot as plt workingFolder = "C:\\Users\\xbox\\Saved Games\\DCSTrees\\" os.chdir(workingFolder) # Load data from input file #input_file = "filtered_water.csv" #output_file = "filtered_water_reduced.csv" #input_file = "filtered_river.csv" #output_file = "filtered_river_reduced.csv" #input_file = "filtered_trees.csv" #output_file = "filtered_trees_reduced.csv" #input_file = "filtered_towns.csv" #output_file = "filtered_towns_reduced.csv" input_file = "filtered_roads.csv" output_file = "filtered_roads_reduced.csv" grid_size = 75 # Adjust for more/less accuracy vs reduction # Read the original CSV data = pd.read_csv(input_file, header=None, names=["x", "y"]) # Dictionary to store one point per grid cell grid_dict = {} # Grid-based filtering for x, y in data.itertuples(index=False): gx = x // grid_size gy = y // grid_size key = (gx, gy) if key not in grid_dict: grid_dict[key] = (x, y) # Create reduced DataFrame reduced_df = pd.DataFrame(list(grid_dict.values()), columns=["x", "y"]) # Save to output file reduced_df.to_csv(output_file, index=False, header=False) # Step 4: Plot both original and reduced datasets side-by-side fig, axes = plt.subplots(1, 2, figsize=(14, 6), sharex=True, sharey=True) # Original data plot axes[0].scatter(data["x"], data["y"], s=1) axes[0].set_title(f"Original Data ({len(data)} points)") axes[0].set_xlabel("X") axes[0].set_ylabel("Y") axes[0].grid(True) # Reduced data plot axes[1].scatter(reduced_df["x"], reduced_df["y"], s=1, color='orange') axes[1].set_title(f"Reduced Data ({len(reduced_df)} points)") axes[1].set_xlabel("X") axes[1].grid(True) plt.suptitle("Original vs Reduced Data Points", fontsize=14) plt.tight_layout(rect=[0, 0, 1, 0.96]) plt.show() Hope you have fun. Here's an example of the Rivers in Caucasus at 100m intervals. null
    2 points
  20. Ибо работа по земле и немного по морским целям в этом симуляторе составляет очень большой кусок геймплея. Отвергнуть это вместе с онлайном означает оставить себе процентов 20 от игры.
    2 points
  21. Hi, I have removed the image from the above post, please remember our 1.16 forum rule when posting A pm is often better if you are sharing real world documents. I will run this past the team, but as mentioned previously we have checked and all seems correct. thank you
    2 points
  22. You should rather set both brake axes as sliders rather than "just" axes. That applies to all aircraft and all types of axes which are meant to work as 0 / 100% and not -50% / 0 / +50%. So throttles, RPMs, brakes etc. With sliders you won't even need such extreme curves to brake gradually.
    2 points
  23. Honestly I would simply encourage people to just STOP pre-ordering from Pimax. Period. Sadly when I bought my OG it was way after the whole commotion about the pre-orders (their site said it was in stock and ready for shipping - and even then they still took 3 weeks to ship?)... so I didn't know that they were like that. After the Super, whatever comes next, DO NOT BUY until they clearly have no backlog anymore. You'll be doing everyone a favor, and not encouraging companies to treat customers like this.
    2 points
  24. User error. I can tell immediately from the IHADSS that your acquisition source is set to a Cursor Acquisition/Terrain Point (TRN). Whenever you CAQ on the map, where you drop that point becomes the Acquisition Source (ACQ). The reason the dotted cross is pointing to an open field is because the dotted cross points out your Acquisition Source, and your Acquisition Source is a TRN point in an open field. You need to set your Acquisition Source back to TADS to see where George is pointing the TADS in your helmet (I recommend through the weapons page).
    2 points
  25. Moin zusammen, das virtuelle Hubschraubergeschwader 23 sucht Piloten und Copiloten für den Aufbau eines Hubschraubergeschwaders mit Fokus in Richtung MilSim. MilSim bedeutet nicht die 100%tige Darstellung eines realen Verbandes, sondern der Wille dem arcadigen Gameplay den Rücken zu kehren und DCS wieder mehr in die Richtung Simulation zu treiben. Wir wollen das volle Spektrum der militärischen Fliegerei abbilden, hierzu gehören auch Tätigkeiten wie Briefing, Planung, längere Flüge ohne Waffeneinsatz, taktisches Vorgehen im Team, Ausbildung insbesondere im taktischen Sinne, Verhalten auf und um die Airbase, Formationsflüge, Turns, Rejoins, Teamwork im Cockpit sowie im Flight und und und. Die Liste könnte man ewig so weiter führen... Ideen für all diese Themen gibt es mehr als genug, es fehlt aktuell schlichtweg nur an Piloten und Copiloten. Ja genau auch Copiloten, denn wir wollen langfristig gern alle Flugmuster im Multicrew fliegen, so wie es in der Realität auch der Fall ist. Wenn du also ein echter RotaryWing Fan bist, Bock auf taktisches Fliegen im Geschwader hast und im besten Fall noch eine Menge Ideen im Kopf hast welche dem Aufbau des Geschwaders zugute kommen, dann tritt doch gern unserem Discord - https://discord.gg/cNXwSZP38d bei und setze mit uns das Fundament für ein professionelles Hubschraubergeschwader. Taktische Verfahren, professionelle Kommunikation und ne Menge Spaß an der Sache - hier sehen wir den Schlüssel zum Erfolg um etwas besonderes auf die Beine zu stellen, wir brauchen nur noch DICH! Discord - https://discord.gg/cNXwSZP38d vHSG-23 | Schmirco
    2 points
  26. My first successful trap in DCS. (For posterity}. Phew! ..
    2 points
  27. You're just a guy who's read a lot of books, and knowledge is pouring out of his ears, and he has to brag about it. That's not the point. Just like it's not the point that Chuck created a very good manual.
    2 points
  28. OK, full update of the list is done! Thanks for your patience and help, everyone Notable changes: I've broken out the Flaming Cliffs modules (and the Su-25T, which shares their lack of cockpit-clickability) into a separate table in the document. It was too confusing to have the high fidelity module and the low fidelity module right next to each other in the same table, and made the "Jet Fighters and Trainers" table a bit too big. I also feel that people who are in the market for a Flaming Cliffs module aren't the same audience as those who are in the market for a full fidelity module, so hopefully this makes sense to everyone. The F4U-1D Corsair is added to the list, I guess they disabled the torso movement with the latest patch until they can fix it, as I didn't observe it (the torso moves a bit with control manipulation now, but not when you look to the left or right). As per the color coding guide this puts the module in the "[GREEN]" category. The F-5E Flaming Cliffs module uses the old F-5E/FA-18 pilot model, which is a bit disappointing. I was expecting it to use the new F-5E Remastered pilot model with the updated torso movement and larger kneeboard. I'm not sure when this happened, but the pilot model in the Christen Eagle now has a bit of torso movement when looking around. The movement is reasonable - I'd guess you're strapped in pretty tight in an aerobatics aircraft - but unfortunately the hands aren't rigged perfectly to the controls so the throttle comes through the left hand when looking about. This puts the module in the "[GOLD]" category, and I've updated the list to reflect this. I will update the first post later this week, I'm toying with the idea of trying to include the tables in the post in some form but I'll need to see how well / if the forum software supports that. Thanks again to everyone who has contributed and pushed me to keep this going!
    2 points
  29. With spoilers out, speed brakes out, NWS on, and full aft stick using the horizontal stabs as massive air brakes, I typically have zero issues maintaining centerline and stopping quickly with minimal wheel brake use.
    2 points
  30. ** MOST RECENT UPDATE **: v3.6 - July 29th, 2025 *Changelog:* THE SNIPER POD IS HERE - All missions where the Targeting Pod is relevant (About half the mission pack) Have had additional client aircraft added with the ATP equipped on the jet. All aircraft are labeled with either 'LITENING' or 'SNIPER' tags, but if I missed one, just remember, if it doesn't say 'Sniper', it has the old pod. Other Changes: - '.Basic - Air to Air Guns' has been moved to Advanced. This was one of the earliest missions I made and it is absolutely not a true beginner test of skill. - A new mission: 'Weapons - Aerial Gunnery Basics' has been added with unresponsive, unmoving F4 Phantom drones for a truly basic AA guns practice mission. - A LITENING & SNIPER pod client has been added to the 'Fight the Phoenix' mission, for those of you who want to practice your BVR target ID skills. - Targeting pod client aircraft have been added to the 'Weapons - AG Guns & Unguided Rockets' mission.
    2 points
  31. Why don't we stop dwelling on issues that have nothing to do with the dispute and focus on the facts? It seems that there's a part of the community here who believes that if everything isn't a conspiracy theory or if their point of view isn't correct, they have to invent a new theory every day to keep fueling this post... It's been said repeatedly, even if this reaches 100,000 replies, legal processes are what they are, unless someone one day publishes something "confidential" and finds themselves facing a defamation lawsuit and a letter demanding to appear before a lawyer in court. The problem with "noise" is that it's only created to try to keep said "interference" from fading away and to ensure that some "monolithic points" don't die. This is very tiring and honestly it's a permanent broken record... Honestly, those who defend the "pitchforks and torches" should think very seriously not only about the damage they are doing to the community, but also to the creators, because I wouldn't be surprised at all if many are silent precisely so that said community, if things don't fall within their parameters, will rush to kill with a knife by defaming someone on the networks... this way nobody feels like doing absolutely anything because it seems that we are becoming an authentically toxic community.
    2 points
  32. Flying a 2000hp 12000lbs warbird doesn’t necessarily mean it needs to be unrealistically twitchy, unstable, and capable of doing Extra330-like aerobatics. I much prefer the current FM, definitely not perfect, but better than before.
    2 points
  33. Aapje is right at this moment writing his next chapter of his novel so wait for it ....
    2 points
  34. DCS warbirds are great IMHO, it has been the only sim that has given me some feel or realism, FFB with extension also helped, but one problem with DCS is that we always fly in calm air, there is no bumpy air or turbulence, low alt wind you can feel it but its like laminar wind, not bumpy at all. When I fly my warbird IRL and I have calm winds, it reminds me of how warbirds feel in DCS.
    2 points
  35. With Great Contribution of @flanker78. good advance on W IP ASM, big work Comrade ...
    2 points
  36. The only A+/B squadrons are the ones that were originally supplied with the module: VF-11, VF-32, VF-143, VF-142, VF-102, VF-74, VF-103, VF-24 and 211 briefly in the end of 80s/early 90s, and test squadrons like VX-4, VX-9, and of course VF-101 for training crews. There weren't many B squadrons in total, and only a few of those listed were actually in operation still when the presented module's version was around in the mid-late 90s (11, 32, 143, 102, 101, VX-9/Mugu). There's a few outlier jets in non-fleet squadrons missing, or of course more variety in years and MODEX. Can you steal the VF-41 1999 liveries for the B? Yes. But:
    2 points
  37. That's the module I am expecting the most. I thought that I will never get but the best option is that we forget about it for 2 years and they will release it without any prior teaser.
    1 point
  38. Once again, poor little Brewster can't measure up. Beat me to the explanation though.
    1 point
  39. Thank God it's July 2025, and I'm wondering if anything has happened on this topic? I wanted to buy this map, but I won't. One of the most important British airfields of World War II was completely omitted, and we have an airfield that essentially didn't exist. Thank you, I'm not buying it.
    1 point
  40. It's not, however, that's the point. Needles in pneumatic flight instruments don't shake, vintage or modern, doesn't matter, physics is the same. Whether the gauge has diaphragm or bourdon tube inside, the air filters out small pressure irregularities quite well. Granted, entire insrument panel shaking from engine vibrations or stall may induce wobble indeed (after all, panels were usually mounted on rubber dampers, not bolted stiff to the fuselage), but not to the scale present in current module version. Mech-driven instruments, like engine tachos - sure, depending on how they're driven exactly they can be a bit more shaky than pneumo ones. I'd say if Corsair module needle animation is here to stay, it should at least be toned down. Apart from th vids above, here are a couple of warbird examples showing how much wobble one can expect in various phases of flight:
    1 point
  41. I don't get it. We've got one side saying it's completely over, giving heads up on the situation throughout the conflict and giving a full on explanation to most important details of the agreements both past and the most recent one mentioned yesterday, being open to community questions and literally showing receipts for being ready to cooperate instantly and share the updates and escrow. The other side is hiding behind supposed confidentiality, dodging every single in-depth question and even deleting their own statements from social media, sharing messages that contradict each other and dropping their main claim which I don't think anyone believe by now with all that IP infringement trouble.
    1 point
  42. Version 2.0 of this Mod has been released:
    1 point
  43. We'll look into it, thanks!
    1 point
  44. Hi guys Here we go ! MSA GALLET LA-100 Helmet - Entirely made from 3D scans
    1 point
  45. I have noticed in MP that using the route tool to create a flight plan does not send the correct waypoint elevation value through to the aircraft, thus the TGP slaves to a point some distance from the actual created point (based on the erroneous elevation). It can be fixed by manually editing each waypoint, but that sounds like a bug to me. Maybe I am missing something, but please look into that.
    1 point
  46. Yaga, as an academic (and a nerd) I certainly appreciate the sources you're finding. Alas, I suspect BN is referring to something more precise - a document showing "F/A-18C Lot 20 FCR detects helicopters at X range". ED doesn't seem to have the appetite or the budget for a full radar simulation, so they'd need something they can build a radar script around, instead of "this is how radar works". You're right that the radars are becoming a bit scattershot across all the modules. Some - M2000C, making everyone else look bad - are approaching a quasi-simulation. Some - F15C - are magic. The F/A-18's radar is a troublesome animal, and in my experience it performs well 90% of the time. I don't know enough about the real aircraft to know whether the other 10% is a simulator shortcoming or a real-world shortcoming. I do find it hard to believe that helicopters would be essentially invisible to a modern FCR.
    1 point
  47. DCS World\Config\lang.cfg open lang.cfg with notepad++ and change first line to EN save restart DCS
    1 point
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...