Jump to content

Toumal

Members
  • Posts

    143
  • Joined

  • Last visited

Everything posted by Toumal

  1. Yeah I am running with 5GB pagefile which is not on C, and I upgraded to 64GB of RAM. Unfortunately I had to install build tools for microsoft hololens and that's sucked up a lot of space on C, which is why this problem appeared only recently. I thought 32GB would've been enough since I didn't see DCS using all that much, but my mistake with that assumption was that I looked at task manager, which isn't the best tool to judge memory situations unfortunately. So yeah, while DCS eventually uses up all available VRAM, it does seem to evict unused textures etc. as needed. My crash went away once I freed up a bit of space on C and moved the pagefile. I added RAM because I don't want my OS to have to rely on a pagefile in the first place.
  2. Doh! Yeah that would do it. I can't free up much atm due to work stuff that unfortunately has to live on C (thanks MS...) but I doubled up the RAM and disabled the pagefile on C, and so far, no more crashes! Thanks!
  3. Update, I managed to get a full crash dump! dcs.log-20230924-150318.zip
  4. Specs: RTX4090 with 24GB VRAM, texture settings high. These settings worked fine for many months without any crashes. Now, VRAM usage climbs to the limit when getting into an aircraft and then the game dies. Tried repair (removed any changed files too) and also updated GPU drivers to latest. No zip file and no dmp file was generated. However I do have the crash and log files. Sometimes when this happens, I get a dialog box like the one included, but it does not always happen. Something changed with the way VRAM is allocated. It now always grows and is never freed. Even on lower settings you eventually crash if you hop into different types of aircraft. dcs.log dcs.20230924-145213.crash
  5. Since the last patch I have extremely high VRAM usage. I'm running a 4090 with 24GB VRAM in VR with a Varjo Aero using the MT binary. I never had any situation where I ran out of GPU memory. But now, I end up crashing to desktop with a dialog box that says that I am "out of video memory trying to allocate a texture". I tried lowering the textures and visible range, but that did not help. Anyone else experience this?
  6. That's great news! We'll make sure to test it then! Also, yes we were in the L, and yes I have a few winwing devices.
  7. I got two for you from yesterday with Lawrence. I'll poke him to upload his as well. To add a bit of context, both crashes were in the Gazelle, both as I was getting close to attacking enemies but I was not attempting to fire yet. I get these crashes both with the HOT-3 and the Mistral loadouts, and it doesn't matter if I'm in the pilot or gunner seat. dcs.log-20230610-152455.zipdcs.log-20230610-145855.zip
  8. I crashed at exactly the same time as Lawrence playing as his gunner. I also have the CTDs in the Gazelle after a few minutes.
  9. Heya! Could this perhaps be added at some point? This would be a big help in training sessions where the trainer currently has to ask the student to look down at a screen to see what's going on. Having a set of fixed external MFDs for a VR player would be a really neat thing to have.
  10. I actually just tried again and the wrapper worked this time... Not really sure why I got CTD before but anyway, I'll take it
  11. The VR changes broke the game for me completely. I use a Varjo headset and I have to run in OpenXR, I cannot use OpenVR because motion compensation simply does not work correctly. In OpenXR everything worked fine. Now the menu works fine in OpenXR but loading into a mission doesn't complete, ever. My logfile is getting filled with the following errors: 2023-01-28 16:29:21.082 ERROR VISUALIZER (Main): xrEndFrame failed with error: XR_ERROR_SWAPCHAIN_RECT_INVALID 2023-01-28 16:29:21.093 ERROR VISUALIZER (Main): xrEndFrame failed with error: XR_ERROR_HANDLE_INVALID 2023-01-28 16:29:21.715 WARNING LOG (8548): 55 duplicate message(s) skipped. I tried running without any parameter, I tried to force OpenXR, and I tried the Varjo mode. EDIT: Oh and the replacement DLL doesn't work for me anymore either, the game won't even start up. EDIT2: Wrapper DLL worked on second attempt. No idea why but there we go. Any ideas?
  12. Is the performance worse in general or just when enabling the new mption smoothing? In other words, should I hold off from updating?
  13. *sad trombone noises* Is there any word from ED about this possibly being supported in the future? Also, just got my Aero going and wow... the image clarity is truly something else
  14. Is there any way to get eyetracking foveated rendering going with OpenXR Toolkit + OpenComposite? The option for this is not available, which as I understand happens because OpenXR is not able to detect the order of frames being rendered by DCS. Is there a setting to override this?
  15. Same, I tried a dozen different weather systems and the result is always clear sky with varying amounts of wind.
  16. Heya! If I may make a recommendation: You might want to consider always creating the dialog when calling updateDiag.show if it doesn't exist yet, and also always calling updateDisplay as part of show() since there's probably no use case where you want to see non-current information.
  17. Yep. You can uncomment the print() line in comms.lua and it will show that avDev_on_ground() returns true in those cases. I checked where that function is defined but it's within their DLL it seems.
  18. I did some debugging and the problem appears to be that avINT:avDev_on_ground() reports false even though you are on the ground. This appears to be depending on the wind and other factors. A quick workaround is to comment out the check like so: updateDiag.perform = function(self, parameters) local avINT = data.base.GetDevice(dev_radio_int_id) if avINT then -- print("is on ground: "..tostring(avINT:avDev_on_ground())) -- if avINT:avDev_on_ground() then if not window_ then updateDiag.create() end updateDiag.updateDisplay() updateDiag.show(true) -- else -- updateDiag.show(false) -- end else updateDiag.show(false) end end This fixed it for me. No idea what the side effects would be though, since that code looks weird. Why do they only CREATE the dialog if you are on the ground, but always attempt to show it? This is just asking for trouble. EDIT: This only fixes the dialog. However since the same check is used elsewhere for other things, you're stuck with the dialog functionality not working.
  19. Just checked, I get the same error, both in VR and in 2D
  20. Sure! function blastWave(_point, _radius, weapon, power, launchingUnit, launchingCoalition, launchingPlayer) local foundUnits = {} local volS = { id = world.VolumeType.SPHERE, params = { point = _point, radius = _radius } } local ifFound = function(foundObject, val) if foundObject:getDesc().category == Unit.Category.GROUND_UNIT and foundObject:getCategory() == Object.Category.UNIT then foundUnits[#foundUnits + 1] = foundObject end if foundObject:getDesc().category == Unit.Category.GROUND_UNIT then --if ground unit if splash_damage_options.blast_stun == true then --suppressUnit(foundObject, 2, weapon) end end if splash_damage_options.wave_explosions == true then local obj = foundObject local obj_location = obj:getPoint() local distance = getDistance(_point, obj_location) local timing = distance/500 if obj:isExist() then if tableHasKey(obj:getDesc(), "box") then local length = (obj:getDesc().box.max.x + math.abs(obj:getDesc().box.min.x)) local height = (obj:getDesc().box.max.y + math.abs(obj:getDesc().box.min.y)) local depth = (obj:getDesc().box.max.z + math.abs(obj:getDesc().box.min.z)) local _length = length local _depth = depth if depth > length then _length = depth _depth = length end local surface_distance = distance - _depth/2 local scaled_power_factor = 0.006 * power + 1 --this could be reduced into the calc on the next line local intensity = (power * scaled_power_factor) / (4 * 3.14 * surface_distance * surface_distance ) local surface_area = _length * height --Ideally we should roughly calculate the surface area facing the blast point, but we'll just find the largest side of the object for now local damage_for_surface = intensity * surface_area --debugMsg(obj:getTypeName().." sa:"..surface_area.." distance:"..surface_distance.." dfs:"..damage_for_surface) if damage_for_surface > splash_damage_options.cascade_damage_threshold then local explosion_size = damage_for_surface if obj:getDesc().category == Unit.Category.STRUCTURE then explosion_size = intensity * splash_damage_options.static_damage_boost --apply an extra damage boost for static objects. should we factor in surface_area? --debugMsg("static obj :"..obj:getTypeName()) end if explosion_size > power then explosion_size = power end --secondary explosions should not be larger than the explosion that created it local id = timer.scheduleFunction(explodeObject, {obj_location, distance, explosion_size, obj, launchingUnit, launchingCoalition, launchingPlayer}, timer.getTime() + timing) --create the explosion on the object location end else --debugMsg(obj:getTypeName().." object does not have box property") end end end return true end You will also want the explodeObject function here: function explodeObject(table) local point = table[1] local distance = table[2] local power = table[3] local unit = table[4] local launchingUnit = table[5] local coalition = table[6] local player = table[7] trigger.action.explosion(point, power) if (player ~= nil) then MyScoringInstance:DamageUnitFromSplashdamage(player, launchingUnit, coalition, unit) end end Finally in MOOSE I added this, which allows proper scoring of units destroyed by the blast wave: function SCORING:DamageUnitFromSplashdamage(InitPlayerName, InitUnit, InitUnitCoalition, TargetUnit) if InitPlayerName ~= nil then -- It is a player that is hitting something -- trigger.action.outText("InitPlayerName: "..InitPlayerName, 30) -- trigger.action.outText("InitUnit: "..InitUnit:getName(), 30) -- trigger.action.outText("InitUnitCoalition: "..InitUnitCoalition, 30) -- trigger.action.outText("TargetUnit: "..TargetUnit:getName(), 30) local initUNIT = UNIT:FindByName(InitUnit:getName()) if (initUNIT == nil) then trigger.action.outText("InitUNIT was nil", 30) end self:_AddPlayerFromUnit( InitUNIT ) if self.Players[InitPlayerName] then -- This should normally not happen, but i'll test it anyway. -- A target got hit, score it. -- Player contains the score data from self.Players[InitPlayerName] local Player = self.Players[InitPlayerName] local TargetCategory = TargetUnit:getDesc().category local TargetUnitName = TargetUnit:getName() local TargetType = TargetUnit:getTypeName() local TargetUnitCategory = _SCORINGCategory[TargetCategory] local TargetCoalition = TargetUnit:getCoalition() local TargetUnitCoalition = _SCORINGCoalition[TargetCoalition] local TargetUnitType = TargetUnit:getTypeName() local TargetPlayerName = "" local InitCoalition = InitUnitCoalition local InitUnitName = "Splash Damage" local InitUnitCategory = "Splash Damage" local InitUnitType = "Splash Damage" -- Ensure there is a hit table per TargetCategory and TargetUnitName. Player.Hit[TargetCategory] = Player.Hit[TargetCategory] or {} Player.Hit[TargetCategory][TargetUnitName] = Player.Hit[TargetCategory][TargetUnitName] or {} -- PlayerHit contains the score counters and data per unit that was hit. local PlayerHit = Player.Hit[TargetCategory][TargetUnitName] PlayerHit.Score = PlayerHit.Score or 0 PlayerHit.Penalty = PlayerHit.Penalty or 0 PlayerHit.ScoreHit = PlayerHit.ScoreHit or 0 PlayerHit.PenaltyHit = PlayerHit.PenaltyHit or 0 PlayerHit.TimeStamp = PlayerHit.TimeStamp or 0 PlayerHit.UNIT = PlayerHit.UNIT or TargetUNIT PlayerHit.ThreatLevel, PlayerHit.ThreatType = PlayerHit.UNIT:GetThreatLevel() -- Only grant hit scores if there was more than one second between the last hit. if timer.getTime() - PlayerHit.TimeStamp > 1 then PlayerHit.TimeStamp = timer.getTime() local Score = 0 if InitCoalition then -- A coalition object was hit. if InitCoalition == TargetCoalition then Player.Penalty = Player.Penalty + 10 PlayerHit.Penalty = PlayerHit.Penalty + 10 PlayerHit.PenaltyHit = PlayerHit.PenaltyHit + 1 -- MESSAGE -- :NewType( self.DisplayMessagePrefix .. "Player '" .. InitPlayerName .. "' hit friendly target " .. -- TargetUnitCategory .. " ( " .. TargetType .. " ) " .. PlayerHit.PenaltyHit .. " times. " .. -- "Penalty: -" .. PlayerHit.Penalty .. ". Score Total:" .. Player.Score - Player.Penalty, -- MESSAGE.Type.Update -- ) -- :ToAllIf( self:IfMessage<profanity>() and self:IfMessagesToAll() ) -- :ToCoalitionIf( InitCoalition, self:IfMessage<profanity>() and self:IfMessagesToCoalition() ) self:ScoreCSV( InitPlayerName, TargetPlayerName, "HIT_PENALTY", 1, -10, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) else Player.Score = Player.Score + 1 PlayerHit.Score = PlayerHit.Score + 1 PlayerHit.ScoreHit = PlayerHit.ScoreHit + 1 -- MESSAGE -- :NewType( self.DisplayMessagePrefix .. "Player '" .. InitPlayerName .. "' hit enemy target " .. -- TargetUnitCategory .. " ( " .. TargetType .. " ) " .. PlayerHit.ScoreHit .. " times. " .. -- "Score: " .. PlayerHit.Score .. ". Score Total:" .. Player.Score - Player.Penalty, -- MESSAGE.Type.Update -- ) -- :ToAllIf( self:IfMessage<profanity>() and self:IfMessagesToAll() ) -- :ToCoalitionIf( InitCoalition, self:IfMessage<profanity>() and self:IfMessagesToCoalition() ) self:ScoreCSV( InitPlayerName, TargetPlayerName, "HIT_SCORE", 1, 1, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) end end end end end end Messages were commented out to reduce the message spam. EDIT: If you want the whole thing, look up and download my mission "Caucasus Dynamic Conflict" on the DCS website.
  21. Hi, I'm trying to get information about the damage state of the player's aircraft from within Export.lua, and can't seem to get this to work. In essence, I want to know if the player's aircraft has sustained *any* damage, or if it's undamaged. local playerPlaneId = LoGetPlayerPlaneId() local playerUnit = LoGetObjectById(playerPlaneId) if (playerUnit == false) then return end if (playerUnit:getLife() < playerUnit:getLife0()) then return end This doesn't work because playerUnit doesn't have a function called getLife. This is probably the completely wrong way to try, I'd appreciate any help!
  22. This. I'm going to look into options for that in the future, once the YawVR2 is here. And I'm going to do exactly what you proposed once the dampener is installed: More or less completely unscrew the clutch, because then it's not needed anymore.
  23. Search amazon for "adhesive steel wheel weights". You need about 450-500 grams. I think for the ultimate realism you need to do both - the dampener alone won't stop the collective from drooping I flew with the counterweights yesterday and, yeah, I am not going back. Much better fine-grained control, you end up using the collective a lot more actively.
×
×
  • Create New...