#dev_rc_branch

1 messages · Page 10 of 1

harsh orbit
#

does anyone else get "semi-freezes" when the game is booting up for the first time, since Dedmen did the multithreading startup thing?
I have 24 threads, and I think all of them are just waiting on my SSD to fetch stuff (I don't have the fastest SSD) and it's really annoying, especially if you load the game with many heavy mods/CDLCs which even takes much longer and you can't even do anything (because your PC is semi frozen).

btw I usually do Alt+Tab while the game is booting because I don't always immediately go into the game

keen sundial
#

on perf branch with an extremly large modpack, yes

#

but gen4 nvme

harsh orbit
#

mine is gen4 too yeah, but not the best

harsh orbit
halcyon moth
#

Hmm. It's fine here on a fairly trashy SATA SSD, but then I only have cpuCount 4.

harsh orbit
#

well yeah it's using all my CPUs and they're all clearly spinning 🥲

#

also it's ok the second time I launch the game. only the first time is bad because of the disk load

halcyon moth
#

Windows caching is legit.

#

Should be spare CPU time available if you have HT enabled though? Not sure if you're seeing a disk jam or a CPU jam.

harsh orbit
#

actually I forgot I disabled HT 😅 it's only 16 threads (and cores)
anyway tho, I think it's logical to not use all the CPUs at once, even if the user doesn't touch CPU count

#

so maybe only run CpuCount-2 parallel threads to avoid this

halcyon moth
#

Yeah, if you have HT enabled then it naturally leaves a bit of free CPU time, but otherwise the default is brutal.

#

(all cores - 2) min (non-HT cores) seems like a sensible default.

#

maybe floor (0.75 * allCores) because there are still some 4-core non-HT i5s out there.

light lintel
#

For me with 8 cores and 16 threads it auto detects 8 cores and it's been fine 🤔

halcyon moth
#

yeah the trouble is if you don't have HT.

full sonnet
full sonnet
full sonnet
#

But it shouldn't be spinning waiting for disk. It should block on the reads

ruby edge
light lintel
#

Interesting

harsh orbit
harsh orbit
full sonnet
#

I blame microsoft for their scheduler not being able to prioritize anymore.
It used to be fine on windows 7

harsh orbit
#

do you really need 16 threads for launch tho? how much faster is it than say 2 or 4?

full sonnet
#

I don't have the option to choose how many threads are used here

#

And in most cases we want to use all the power we can get, so implementing that is also not worth it

harsh orbit
full sonnet
#

We can set the thread count once, before starting up the job system

harsh orbit
#

oh meowsweats

#

how about an option to launch it single threaded then?

#

actually maybe I'll just use cpuCount=12 or something meowsweats

full sonnet
#

Arma does not support single-threaded anymore 😄

#

I could turn off specifically the multithreading of the animation loading

#

but the real fix is that it should suspend the thread if its waiting for I/O

harsh orbit
#

I just tried cpuCount=12 and it seems it's even faster than the default (and no mouse lagging ofc)

#

so I have 2 bats:
first one has -nofreezecheck -noSplash -hugePages -limitFPS=144 -world=VR and a bunch of light mods (just CBA and my own mods)
second one has-cpuCount=12 -nofreezecheck -noSplash -hugePages -world=VR " and CUP and RHS mods + above mods
the first one (with default cpuCount) takes 29 seconds to launch
second one (with cpuCount=12) takes 8 seconds meowsweats
(I alternate between the two to make sure it's rebuilding the anim cache)

#

btw I'm counting after the initial loading bar is gone and the game window appears

mortal swallow
#

-limitFPS is that new startup command?

harsh orbit
#

13700, win 10

frozen pumice
#

for me reducing cpuCount make my fps more unstable

winter crescent
harsh orbit
viscid onyx
#

Added: Option to the disableChannels mission and server parameter to disable map drawing and map marker placement from the UI per chat channel
awesome

harsh orbit
harsh orbit
tough sand
#

so your auto detect cpu count is 16 on rpt log?

harsh orbit
#

I put it manually now

#

but yeah in rpt it was 16

tough sand
#

ok...

tough sand
full sonnet
#

But somewhat makes sense, the OS will probably keep interrupting us if we don't leave any threads free

harsh orbit
#

maybe do it like:
if no affinity requested and cpuCount > 4 then cpuCount - 2 else cpuCount - 1 😅

#

or maybe if the user didn't force cpuCount thonk

near carbon
mortal swallow
#

I didnt notice anything 12 threads, cpu count = 11 for me its the same

#

but am not on the rc branch so nvm

full sonnet
#

@harsh orbit to clarify your issues are on dev/profiling, not on RC. Because that startup improvement is not on RC

harsh orbit
#

yeah dev (probably profiling too)

light lintel
#

Auto-detect should be 8 not 16 without HT in your case

tough sand
#

ah I forgot off that

lament crow
#

Dev is showing errors in virtual arsenal right?

carmine juniper
#

Nobody can confirm as long as you tell nothing

vivid bane
full sonnet
#

I get crash, not freeze

#

There is diag rendering in the multi-threaded particle simulation 🤣

full sonnet
light lintel
#

maximum threads

#

The engine has truly been unlimited

tall pumice
#

that slack notification confused the hell out of me

frozen pumice
broken fern
#

Does the RC build have anything the Dev build doesn't? I want to export a config for a mod.

light lintel
#

Probably many things

#

RC is what will get released next

#

Hence the name

harsh orbit
languid ice
#

With perf branch, or RC branch i can't close this error message (in main menu right after starting Arma):
(i can't post pictures so text will have to do)

No entry
'bin\config.bin/CfgWeapons/ltemlnfo.scope'

The close button of the popup is just white like its selected and the "close" text is missing.
On regular Arma branch i can just close it and ignore the error.

The error comes from: https://steamcommunity.com/sharedfiles/filedetails/?id=2549054099 (in case you need to recreate the issue).
But i think it also happens with similar popups from other mods config mistakes.

long turtle
lucid totem
tall pumice
#

i'm using RC branch for about a week now, but i dont have that error message

#

oh wait, comes from a mod?

#

then isn't it more likely an issue with that mod and not a3?

#

from my own config shenanigans i had a couple of pops as well, but i could always close them

halcyon moth
#

They're normal (because even if it's your mod, the RPT doesn't give you enough info to trace) but usually you can close the box and it goes away until the next session. Arma normally ignores those errors after the first one.

#

And yeah, would be nice to have some stack tracing on those in -debug.

full sonnet
#

Its literally a typo (the mod error), should be easy to find and fix 😄

#

Cannot reproduce.
Start RC with ACE, CBA and that mod.
I get "ItemInfo.scope" error, not "ltemlnfo"
And the close button works just fine

full sonnet
#

There is the bug, there is a ItemInfo in CfgWeapons.
But its supposed to be in root.

But its weird.. The error happens when it initializes ItemMap.
And it considers the maps "ItemInfo" to be a sub item inside it 🤔

There is some engine bug here. It shouldn't be trying to create it as a sub-item.
But usually, it will just fail to find it, because "ItemInfo" doesn't exist in CfgWeapons, and then it exits silently

#

The context that it was loaded through ItemMap, would be useless to you because the mod didn't even touch that, and its also not the source of the info.

It would be nice to log who created that ItemInfo class in the wrong place.
But, because no-one "created" it, it was just forward declared.. It did not store the mod that declared it as having "modified" that class.
So it doesn't know any sourceMods/addons to log.

#

Should probably log an error if a mod forward declared a class, but it isn't found during merge..
I think I can do that

#
11:18:01 Warning Message: No entry 'bin\config.bin/CfgWeapons/ItemInfo.scope'
11:18:01  ➥ Context: bin\config.bin/CfgWeapons/ItemInfo.ItemInfo
<- bin\config.bin/CfgWeapons/ItemMap.ItemMap
->Last modified by: A3_Weapons_F
<- bin\config.bin/CfgVehicles/SoldierWB.SoldierWB
->Last modified by: A3_Characters_F

I added that ItemMap step. The SoldierWB log was already there.
But very much not helpful

lucid totem
#

➥?

full sonnet
#

mojibake

#

Would you look at that.
A log message when a class was declared but not found, and the game generates a empty class instead... Already exists.
But its a internal-only message thats only printed to debug output, and not to RPT.

But.. vanilla isn't doing too good with it either..

full sonnet
#

Todays Arma moment.

Vehicle in multiplayer is moving mega laggy, teleporting point-to-point instead of rolling normally and interpolating its position.
The cause?
The vehicle has no fuel tank.

Wat?
Yeah.. If a Tank does not have the capacity to contain fuel. Its position will not interpolate if you like addForce shoot it somewhere.
Its fine if it has no fuel, but it needs to have the ability to have fuel

dark hemlock
#

load-bearing fuel tank

viscid onyx
gray quarry
#

yeeee, dedmen is the raymond chen equivalent of arma 3 development

umbral orchid
#

is it just tanks or all vehicles no fuel = no interpolation?

full sonnet
#

just tanks

#

Well I only checked tank and car. And car doesn't have it

halcyon moth
#

Hmm. Tanks also have that thing in MP where they sometimes flip between two different orientations once you mobility-kill them.

viscid onyx
#

It seems like type Tank has a lot of weird quirks. Forced GPS crosshairs, analogue driver controls not working properly, the thing John just mentioned, and now this with the fuel tank...

keen sundial
#

Turrets turning relative to the terrain and not the vehicle…

languid ice
light lintel
#

We need Tank DLC 2 which overhauls fuel tanks in Tanks

broken fern
light lintel
#

Read Dedmen's messages above (but I was just making a joke)

tall pumice
#

or just add fuel capacity of at least 1 to your tankx vehicles that dont have a fuel tank

full sonnet
#

They set wrong requiredAddons.
Overwrite all these vanilla UI components (most of which they aren't even using!), with WRONG contents and invalid base class.

Nothing I can do about that. They need to fix their mod

#

I told them that in the comments of their mod two months ago

tall pumice
#

what do you mean, the release is working perfect 😄

umbral orchid
#

like one of the warhammer mods completely breaks RscPicture, either by deleting it or replacing it

pallid cliff
#

They should be readOnly

umbral orchid
#

that'd be nice

#

I doubt there's ever a reason to mess with it - it seems to only be 'changed' by accident

frozen atlas
# pallid cliff They should be readOnly

Some bad mods will always break things. Doesn't mean everything has to become readonly. Not a reasonable suggestion for highly modded platform with backwards compatibility

pallid cliff
#

Yeah because I said everything should be read only blobdoggoshruggoogly

carmine juniper
#

Arma 3 Unmoddable Edition 🤯

broken fern
scarlet root
#

access parameter should exist for this purpose. no idea if it works "everywhere" (it should in cfgAmmo/Magazines/Weapons/Vehicles)

full sonnet
#

Yes we can do that.
It shouldn't even break mods actually.
They still will have their class to inherit, but any changes they try to make won't be applied to the base classes.
And I can't even think of changes that one would do to these, that wouldn't inherently break tons of other UIs

But going to the effort to do the config edits for it.. eh

scarlet root
#

it might also just work in dta\bin/config.cpp

umbral orchid
grim lion
#

What would that due to those who made a custom main menu?

umbral orchid
#

nothing

#

the proposed is the base UI classes, like RscText, RscPicture, nobody should be changing these as they only exist to inherit from

#

in fact the only time I've seen someone change it it's by accident

#

or more often, completely breaking it

pallid cliff
grim lion
#

Ok, thanks for the info I just wanted to make sure

tall verge
pallid cliff
#

Does this even mess with the base classes.

tall verge
#

I thought it did last I looked at it, I will double check rq

#

It looks like it modifies RscMsgBox and deletes some of the subclasses of the subclasses, i.e. removing button1,button2,button3 from subclass Bottom of RscMsgBox. But it also runs some script that looks for predefined message text in the error box so its more complicated than I thought

mortal swallow
#

Is there an ETA for the 2.20

feral tangle
#

Likely by the end of the month given how long it's been in RC.

tall pumice
#

warning suppressor addon is such a terrible idea

#

and then people blame BI again for crap performance etc

dark hemlock
#

For some reason it went around that you would get better performance running -noLogs which is absolutely infuriating when I'm trying to track down an issue in unit

tall pumice
#

no log, no bug

tall verge
#

Terrible idea AND also mah freedoms 🇺🇸 🦅 to run it

light lintel
#

Hopefully also BI's freedom to tell people running it to f off when they blame BI 😄

full sonnet
#

Also as I'm playing around with that stuff.
Reminder that Extension UI's are also a feature of 2.22
If you don't like the API and limitations of the WebBrowser control, you can somewhat easily make your own by integrating something like Ultralight (https://ultralig.ht/) into an extension, and making that render into the game.
Though the main benefit is probably just performance (no copying pixels from steam's process over steam's rpc and then copying them to GPU.. Ultralight could render directly into the GPU) and alot better javascript interaction, and of course the ability to browse internet sites.
Maybe I'll even make the mod to add that, but I have too much other stuff to do...

That thing actually has alot of the API's I wish I had for the WebBrowser control. But using it isn't an option.
And alternatives like Chromium are way too large to pack into the game

grim lion
#

Does the WebBrowser control have a mechanism for synchronous request-response communication with the engine through alerts? This would allow sending an alert and receiving structured data back in one operation, which seems like it would improve the control's functionality.

full sonnet
#

Our's does not.
Because it does everything through Steam RPC communication, which is Async in this case.
You can send a request and receive data back in "one operation" though, with await 😄 Its just slow (one frame delay, generally).

A custom Extension control using a better webbrowser library can do that though, for example ultralight can do it very easily 😄
But ultralight is quite annoying because you need to ship 4 extra DLL's, and BattlEye struggles of course

harsh orbit
full sonnet
#

You can send paa textures to the browser

harsh orbit
#

how?

full sonnet
#

Well the native CT_WebBrowser has API for it, to request a texture and get it back in webp I think.
The engine will load it and convert it

#

I also implemented the same in TacControl, it opens pbo, grabs paa, decodes it and converts it to png I think

harsh orbit
#

oh you mean the deflate stuff?

full sonnet
#

The Javascript API has a RequestTexture function. For the sandboxed CWebBrowser

#

If you make one in extension UI, that is not easily accessible though.
But I could make an export for it that you can call.

Or you could hack it by using a Invisible CWebBrowser, that only grabs the image, and then forwards it to your extension browser, but thats a bit nasty.

harsh orbit
#

well if you can make it return the texture as a base64 encoded string it'll work for custom browsers

full sonnet
harsh orbit
#

btw those API functions like RequestFile won't allow ripping stuff from ebos (like models) right?

full sonnet
#

requestFile is loadFile, which only does text.
requestTexture does textures

#

Now is a bit late to ask those questions

ocean sail
#

Please set for this new object a metal surface (so that metal object hit effects were metal not dirt)
\A3\Air_F_Beta\Heli_Transport_01\pylonPod_fuel.p3d

waxen vigil
#

what even is that?

#

ah fuel pod

tall pumice
#

is a sand bag

waxen vigil
#

filling the fuel pod with sand

tall pumice
#

is just like in mad max

lucid totem
#

isn't it coarse and gets everywhere?

ocean sail
# lucid totem isn't it coarse and gets everywhere?

This object fine quality (if I understood correctly what you mean), physx works, can carry supply fuel to refuel, destroyable
I made it as two assets for my mod, but maybe reyhard want add them to vanilla props: a full fuel version and an empty version frogthinking

winter crescent
rustic plaza
winter crescent
tall pumice
#

\o/ Deprecated: 32-Bit support (not yet removed, but a future update may do so)*

carmine juniper
#

Sorry for actually late feedback for DOF: the effect gets removed permanently when sampling is changed in Video Options

bleak canopy
#

Added: Animal config property canFitUnderADoor (when true will stop given animal from opening a door when entering into a house)
meowawww

mortal swallow
#

Tweaked: AI no longer calculates light influence on targets during daytime frogthinking

lament crow
#

With the release of 2.20, what is the difference in DEV compared to 2.20?

full sonnet
#

what do you mean?
dev is older

lament crow
# full sonnet what do you mean? dev is older

Exactly that, I guess that we can move from DEV to 2.20 and experience basically the same performance.
PS: Congrats on such awesome release. As a 30 years old gamer I had never read such extensive and game changing changelog (pardon the redundancy btw)

full sonnet
unreal arrow
#

@trim crane What is the purpose of 3 call freezeme; in the re ticket

trim crane
waxen vigil
#

cant wait for 2.22

slender axle
#

Has anyone here used CT_WEBBROWSER and seen how it performs? I'm thinking of using it to offload map and gps icon draws.

full sonnet
slender axle
full sonnet
#

60 is not enough? With how bad map drawing perf already is?

slender axle
#

Maybe it's not the browser framerate? It was lagging significantly, maybe just my conversion code was taking a while. I was creating/deleting image textures rapidly so that might be it.

#

Guess I can try reusing instead of redrawing. I'm just trying it out to see its feasibility.

full sonnet
#

Got one report of lagging browser, if the game is running high fps. I have not investigated that yet.

leaden heron
#

Yea that's a thing

#

When you tab out the frame loads tho

slender axle
#

Hm ok, might be feasible if I can figure out the offset issues. Think most of the lag issues are solvable.

pallid cliff
#

Looks like a neat parallax feature😅

slender axle
# pallid cliff Looks like a neat parallax feature😅

Aha yeah. The problem is I think the main map is not the full screen resolution because of the bar on top, so when I convert the position from the ctrlMapWorldToScreen command [0,1], I can't simply multiply by what I get in getResolution.

carmine juniper
#

DOF with Sampling 50% vs 100% vs 150%

#

Changing sampling disables these all three effects, too

full sonnet
# slender axle Aha yeah. The problem is I think the main map is not the full screen resolution ...

I recently touched that for a hackfix. "useRealViewport" fixes maps inside controls groups.
Usually a controls group is like world versus model-space coordinates. Inside a controls group should have its own 0-1 space.
But that didn't apply to maps, maps always used global space anyway and thus broke when expecting them to work in controls groups.

if useRealViewport is on, it will walk up the chain of control groups, until it gets to the top level display.
Maybe you need to do something similar, but I think the main map is not inside a controls group?

full sonnet
full sonnet
carmine juniper
carmine juniper
slender axle
# full sonnet I recently touched that for a hackfix. "useRealViewport" fixes maps inside contr...

I think so. Right now I'm less concerned about that than just trying to figure out if this is worth it performance-wise. It seems like the connector (where I execJS) is the performance bottleneck, but chromium might just not like having to render 800 images that are moving around and getting repainted every frame. From the profiling it seems like half the time is compiling/executing script, half the time rendering/paint. I'm going to try working this into a canvas and see if that helps or if it's just the execution that's getting slowed down. I might also be able to lighten the exec if I find some lighter way to pass data in.

Is there a way to grab data from the browser back into the sqf? (Other than the alerts.)

full sonnet
#

No, the alerts are the way to get data back

leaden heron
#

Since the lag issue still exist I don't think limiting the browser to 60fps is necessary

full sonnet
#

I'd have no other ideas on how to fix it

slender axle
gray quarry
#

can it run webgl?

full sonnet
#

It can run what steam can run
Open a webgl page in steam overlay and see

gray quarry
#

fun minigame: play actual chess while arma'ing 😄

waxen knot
#

Was there a reason behind the design change for DAGRs being removed from the loadout of the baseline non-Stub Wings Blackfoot and swapped with DARs? I ask because in 3DEN, the Default loadout preset for the baseline Blackfoot was not updated to reflect this change, so equipping the Default loadout still gives them DAGRs instead of DARs (DARs should only be for the CAS loadout).

Furthermore, this change to its loadout actually affects two official missions: Combined Arms (both SP and MP coop) and Preventive Diplomacy (The East Wind). The close air support gunships in both missions (Whiskey-6 for CA, Lima 1-1 for PD) cannot destroy their intended targets anymore because they lack the ability to do so, which was not the case pre-2.20.

In Combined Arms, Whiskey-6 wastes its 20 mm shells trying to gun down the infantry at the CSAT outpost instead of flying towards and blowing up the APC with DAGRs as it was originally meant to. This almost always ends up getting Whiskey-6 shot down because the AI just hovers in place instead of strafing the outpost.
In Preventive Diplomacy, Lima 1-1 cannot do anything to the Kuma MBT or the Mora IFV and just wastes time trying to blow up the Strider HMG with rockets + gun down the infantry. This of course, almost always ends up getting the gunship shot down since it can't do anything to the MBT and IFV.

Add: Technically it doesn't affect the showcase directly, but the enemy Blackfoot in the Gunships showcase has a similar problem. The Blackfoot is no longer a threat to the CSAT defenders in Pyrgos. If you don't get into a fight with the Blackfoot, it won't be able to destroy the defending tanks and can only fight the Ifrit MRAPs + infantry defenders.

Only the enemy Blackfoot in Terminal Defiance (Altis Requiem) is not affected since its loadout is specifically customised for the mission to use only 1x DAGR pod. So whatever changes that are made to the baseline Blackfoot get overridden anyway.

calm wasp
unreal arrow
rustic plaza
gray quarry
full sonnet
#

Found the resetting polpox.
Turns out pp effects need to be registered in like 5 or so places.
If you forget one, it will mostly work, but then break on something like this.
Maybe someday I'll rebuilt this all, probably not..

SSAO and Resolution and Sharpness were missing there too.
Plus the new ones

carmine juniper
#

I am resetting

tall pumice
#

hm. now i wonder if that particle effects bug after reloading is gone with 2.20

#

havent tried yet

ocean sonnet
#

Is this using the new scripted depth of field?

#

I ask because I can't get anything close to the player unit to be blurred, only things that are more distant that the focus are blurred.

unreal arrow
jovial kelp
gray quarry
ocean sonnet
pallid cliff
#

Has there been any change to how URLs get whitelisted? With 2.20 none of my links to Steam or GitHub work anymore. I had to specifically whitelist them in CfgCommands.

full sonnet
pallid cliff
#

With 2.20 I have to specifically do

class CfgCommands
{
    allowedHTMLLoadURIs[] +=
    {
        "https://github.com/R3voA3/3den-Enhanced/*",
        "https://steamcommunity.com/sharedfiles/*"
    };
};
full sonnet
#

if we are a dedicated server, then server.cfg allowedHTMLLoadURIs specifies it, if it is set.
If we are a client, then we retrieve the server.cfg allowedHTMLLoadURIs, if it is set.

If server does not set it, then we get them from, CfgCommands
Description.ext first, then campaign config, the n mod config

pallid cliff
#

I had never done that before and these links just worked

full sonnet
#

You were always supposed to have to whitelist your URLs

#

If it worked without being whitelisted, then that was a bug

pallid cliff
#

Yeah, it's not an issue, just cought me by surprise that they suddenly stopped working.

Maybe something for others to check too in their mods.

tall pumice
#

how does that work

full sonnet
#

Also I hope you're using multithreaded line intersects

teal elk
# tall pumice how does that work

On eachfeame it rayast with line intersect and where it hits saves the point.

This is sent to a webbrowser with and made the cloud of points with tree.js

tall pumice
#

nice

#

does it have a noticeable effect on performance?

#

or can you just run over altis like this and all is fine?

green summit
#

Couldnt you just fake the point by getting all of the lights positions and just make like a falloff points from that position and draw those points on the screen like dots so you dont have to raycast each frame ? Its not gonna be as precises but i imagine it would be much more performant ?

#

I guess that woudnt work for the moving lights.

teal elk
#

The idea was to imitate the one done in garrys mod, having a “gun” that raycasts laser points arround

teal elk
#

With webbrowser, you lose frames, mostly from the line intersects

#

But in the image you can see I have 60fps and arround 100/200k points

#

I still having issues with the js part ( basically I vibe code it)

#

But I’ll read the docs today and try to make it better

pallid cliff
#

Draw3D seems slow. Iirc the hit comes from looping over every point on each frame to draw it.

#

DrawPolygon was way faster, likely because you just need one command call to draw multiple points.

#

But of course these commands have a different purpose

teal elk
#

Ded there is a chance to be able to load a js cript from the directory of the mission? I had to paste the entire code of tree.js in the html

I assume is for safety reasons, still you can inject malicious code…

teal elk
full sonnet
mental fulcrum
#

damn I need some pet project to play with this,
-# and put it on a pile of abandoned projects after a while.

teal elk
full sonnet
#

Instead of abandoning it. Open source it and ask others to contribute (but no-one ever will)

tepid dock
#

Remember that you don't have to waste your time to add any documentation or hints on how to set up the dev env. People will figure it out by themselves.

ebon quail
teal elk
#

Yea.. you are right, I didn’t open sourced the code just bc lazyness of creating the docs

#

But I just noticed i never read the docs lol

ebon quail
#

Same with writing commits, "stuff" is a lot faster than summing up your 1000 changed lines in a few words and finding the link to your ticket/issue

full sonnet
#

Reminder to put "Stuff" into the next changelog just because it would be funny

mental fulcrum
grim lion
#

You could just get ai to create the documentation for you, lol

#

You can also convert PNG/jpg images, music and videos to base64 string, then use request file to load the base64 string file and with some JavaScript magic you have yourself working music/videos that can be played as well as images that don't need to be in .paa format

#

I think I did that two with markdown file, all of this is in the os that I've been working on.

full sonnet
#

Using it for video might be nice, vs the integrated play video that sometimes has AV sync issues

grim lion
#

I was able to take a minute long MP4 video and covert it to base64 text file then loaded it up and played it without any issues, same with a 3 min long mp3

bleak canopy
#

Can this be reversed to export MFD video/images/info to 2nd-screen app?

teal elk
full sonnet
#

no

teal elk
tall pumice
#

can you make a video of it? 😄

nimble bane
#

Nice! Guess it's time to get my js hat back out of the closet
Given up on so many UI gimmick projects due draw time issues

teal elk
#

Mi biggest issue is that only show the points when you are looking at one direction, and I don’t know why 😩

#

+- 20 deg

tepid dock
#

Funny stuff. Can't wait for tutorials on how to use LIDAR in Arma to do photogrammetry and to map 3D objects 😆

teal elk
#

or something like that lol

full sonnet
ebon quail
full sonnet
#

oh no, I'm blinded by the darkmode

teal elk
lucid totem
#

is the raycasting multithreaded tho

winter crescent
chrome veldt
full sonnet
#

Both

chrome veldt
grave viper
#

what build correct now? steamcmd still give me 939

feral tangle
#

152984 is latest stable.

full sonnet
#

Uh semi transparent, nice

ebon quail
mental fulcrum
#

doable

teal elk
#

i need help with tree.js lol

mental fulcrum
#

🌳 isn't it three.js? :D

teal elk
#

if i left the lookAt to the [0,0,0] , it works, if i try to move it... the points disapear

teal elk
#

can i change the repo name? lol

tepid dock
#

Hey! Who gave me a ❤️ reaction _and then unclicked it?_🔪

#

Anyway, if that doesn't end up in a community sitrep when it's released, I'm going to be disappointed 😄

#

Because it looks damn cool!

bleak canopy
#

lidar for ai driving, right? =p

teal elk
bleak canopy
#

expanding usermfdvalues are working fine. RPT is however complaining about anything > 49.

Error in expression <user50>
  Error position: <user50>
  Error Undefined variable in expression: user50

Should I provide pbo again?

near carbon
#

avg flyingtarta moment

#

fr

carmine juniper
#

I wish I am good at js...

near carbon
#

im good at google sheets JS and i hate it

#

😭

teal elk
#

its a good oportunity to learn 😄
i started programing thanks to arma 🙂
also chatgpt is quite decent at js

mortal swallow
#

in video settings i think there is a typo, after the hotfix in the particles category am having low, very high, ultra, very high. can anyone confirm ? caused by broken mod

full sonnet
#

I don't see where the problem would come from, I can see it generating the variable names correctly

You are trying to use them in MFD's class Draw right?

full sonnet
#

Calling an Extension that does nothing (just return 0) with 32 string arguments.

_args = [];
_args resize 32;
_args = _args apply {'Hello my name is "Patrick"'};

diag_codePerformance [{"RVExtensionTest" callExtension ["func", _this]}, _args, 100000, true];

[0.00224172,100000]

2.2 microseconds per call. For doing nothing at all. Unacceptable.

What makes it slow?
Well Extensions can only pass arguments as string, so it needs to convert them all.
But, it even converts strings.
It allocates a temporary buffer, that is twice as large as the string.
For that it needs to measure the length of the string, we don't store that, so it needs to iterate over every character and find the null char at the end.
Then it iterates character by character searching for " so it can double quote them, and copies each character into the temporary buffer.
Once done, it allocates a new string, and copies the temporary buffer into it, and then deletes the buffer.

What makes it even worse in my example. We have just ONE string in SQF, all the array elements are referring to the same string instance.
But the Extension code doesn't know that, it creates 32 copies, it encodes the same string 32 times, even though just once would suffice. But I don't think anyone would be doing that in real code so no sense in optimizing towards that.

All that trouble, just so the extension can then deal with having to un-quote the double-quoted string again.

And after we are done, we also need to spend time to deallocate all those temporary double-quoted strings we created.

This is how a call extension looks like.
The first block is deallocating all the temporary strings.
The second big block is creating the double-quoted strings.
And inbetween them we have actually finding the extension to call, checking whether its loaded, and actually doing the call.

teal elk
#

ded in this case, i should use that str on the format?

`private _js = format [
        "updateLidar(%1,%2,%3);",
        str _relPos,
        str _dir, 
        str _dots 
    ];
    _ctrl ctrlWebBrowserAction [ "execJS", _js];   
mortal swallow
full sonnet
# full sonnet Calling an Extension that does nothing (just return 0) with 32 string arguments....

What if we just.. don't do all that mess and pass strings directly.
We don't need to double-quote them, and the extension doesn't need to un-double-quote them again.

[0.000443197,100000]
from 2.2 microseconds per call, to 0.44 microseconds per call.
And we additionally save time of the extension having to unquote things.

And i found another problem.
calling an extension has a safety check that must be done before loading it.
But the safety check is done on every call, instead of only when loading a new extension. Just need to move that code a couple lines further down...

[0.00042146,100000]
0.42 microseconds
almost 10x

Now the slowest part is checking if the string arguments, are actually string's (if not they need to be converted) and the hashmap lookup whether the extension is already loaded.

Maybe I can tune that type check a bit..
[0.000386389,100000]
yeaaaa... getting closer to the 10x..

callExtension actually times how long the call took.
If I remove that..
[0.000371086,100000]
Yeah not worth it. Lets turn it back on..

Theoretically, if I could improve the hashmap that extensions are looked up in..
[0.000339835,100000]
Ahjo, that would be nice, but still not getting me to 10x 😄

There is one other memory allocation I can get rid off
[0.00033141,100000]
What a pain, I wanted my 10x improvement...

pallid cliff
#

What about that lag that happens when you use callExtension for the first time? Is that improveable?

full sonnet
#

loading an extension and all its dependencies is not improvable.
The main improvements there would be done by the extension itself, not by us

lucid totem
#

add that to a 2.20 hotfix 🤣

full sonnet
# full sonnet What if we just.. don't do all that mess and pass strings directly. We don't nee...

Its also noticeable when pushing large strings, like database interactions might be.

One single argument

_args = [toJson allAddonsInfo];
diag_codePerformance [{"RVExtensionTest" callExtension ["func", _this]}, _args, 100000, true];

Before: [0.0395852,100000] 39 microseconds.
After: [0.000328572,100000] 0.32 microseconds. Hey! There's my 10x 😄 Oh no wait.. thats 100x. 100x faster passing string to extension.

I just wanted to have the extensions not un-double-quote the strings, especially annoying when passing JSON.
But making calls in general also faster is nice.

full sonnet
#

callExtension non-args didn't have this problem, because it would pass a string directly and not double-quote it.

Passing the same data to callExtension without Args

_args = toJson allAddonsInfo;
diag_codePerformance [{"RVExtensionTest" callExtension _this}, _args, 100000, true];

[0.000144364,100000] 0.14 microseconds. Neat.

Some of the extra cost in callExtensionArgs is also that the command returns an array.
Meaning it needs to allocate that array, allocate the values to put into it, not nice, but I can't fix that.
If I were to remove that Array, the one large argument would be
[0.0002658,100000] 0.26 microseconds
Mh, its the price of checking if the argument is a string or not, and reserving space to store strings if its not a string and we need to convert it.

So if you want utmost speed in callExtension, use the non-args one.
(But then you have to potentially combine strings, and parse them back apart in the extension)

Even passing zero args to to callExtensionArgs, is not good
[0.000258577,100000]

Oh right.. DUH. I forgot that I'm creating an array!

#
_args = [toJson allAddonsInfo];
diag_codePerformance [{"RVExtensionTest" callExtension ["func", _this]}, _args, 100000, true];
``` `[0.0003402020,100000]` 0.34us

array created outside of benchmark
```sqf
_args = ["func", [toJson allAddonsInfo]];
diag_codePerformance [{"RVExtensionTest" callExtension _this}, _args, 100000, true];
``` `[0.0002651410,100000]` 0.26us

zero args only function
```sqf
_args = [toJson allAddonsInfo, []];
diag_codePerformance [{"RVExtensionTest" callExtension _this}, _args, 100000, true];
``` `[0.0002478780,100000]` 0.24us

callExtension no-args
```sqf
_args = toJson allAddonsInfo;
diag_codePerformance [{"RVExtensionTest" callExtension _this}, _args, 100000, true];
``` `[0.0001558560,100000]` 0.155us
full sonnet
#

Available in 2.22 and next prof with RVFeature_ArgumentNoEscapeString feature flag.

_args = ["func", [toJson allAddonsInfo]];
diag_codePerformance [{"RVExtensionTest" callExtension _this}, _args, 100000, true];
``` `[0.0316288,100000]` 31us

```sqf
_args = ["func", [toJson allAddonsInfo]];
diag_codePerformance [{"RVExtensionTestNoEscapeString" callExtension _this}, _args, 100000, true];
``` `[0.000256263,100000]` 0.25us

100x faster, just by setting a flag
lucid totem
#

GG!!

bleak canopy
full sonnet
#

Also callExtensionArgs gets new error codes for extension not found or failed to load.
Previously if it was not able to be loaded, it would give error code 0. Which wiki says 0 means no errors.
Which was quite wrong in that case

teal elk
#

one thing i noticed yesterday

fnc_blabla = { 
   params[["_noparam", nil]];
   systemchat str _noparam; 
}; 
[{call fnc_blabla}, 0] call CBA_fnc_addPerFrameHandler;

_noparam will return something, i dont recall the fist param PFH , but the parameterers was pased to the function.

im not sure if is a cba thing i didnt noticed in the past, but call function is no the same as _this call function isnt it?

not sure if is a bug or a feature

mental fulcrum
#

unary call inherits _this of the parent scope

#

_this inside CBA PFH is [<your args>, <pfh handle>] you've not passed any args so it has default value of []

trim crane
#

Enemy diver detector

green summit
viscid onyx
#

I could see a cool mission where you have to locate a shipwreck using this mechanic and recover some macguffin from it while being pursued. With the EF or SOGPF gunboats you could have a nice defensive action trying to protect the search boat from enemy air and boats.

tall pumice
#

old man mission where you have to find the crashed plane

teal elk
#

I still need to see how to deal with the ui, i ill look some real equiment to see how it works

#

but for misions finding a wreck under watater it looks promising

full sonnet
#

I just did such a mission recently.
Find uboat, place charges, bomb it so it comes up, then infiltrate it

viscid onyx
#

Searching for F/A-181s that fell off the USS Freedom 🤔

solid crown
lucid totem
#

(forgot <html></html>?)

teal elk
#

not solved lol

ive managed to load it with
await ArmaImport("arma://mission/lib/tree.js")

but i need to execute it in some way?

bc i get an error like TREE is not a constructor i guess is when its called from new THREE.scene()

ive pasted this on the head :https://github.com/dedmen/ACE3/blob/MessagingApp/dev/lit-element-starter-js-main/dev/index.html#L24-L88

GitHub

Open-source realism mod for Arma 3. Contribute to dedmen/ACE3 development by creating an account on GitHub.

full sonnet
#

I assume you want something like

window.THREE = await ArmaImport("arma://mission/lib/tree.js")
new THREE.scene()
?

tall pumice
#

better contrast

teal elk
#

yea, ill do a ui next, so you can change some parameters, and one will be the color pallete

leaden heron
#

Looks dope

prime marsh
#

Tweaked: Separated DAGR variant for MH-80 Ghost Hawk stub wing pylons (and removed auto-seek from default DAGR again)------------Could that be the reason why DAGR (standard variant) is shooting from the middle of the vehicle after rearming it through addMagazineTurret instead of out of the pylon-turrrets?

mild helm
#

maybe recheck the turret index

prime marsh
#

It is working with every other vehicle, aswell the ah-99 stub wing.. i found another type/variant of DAGR for mh-80 stub wing in editor - that's why i think standard ammo could be wrong. I double checked with magazinesAllTurrets cursortarget - giving back flares and 4x ["PylonRack_12Rnd_PGM_missiles",[-1],12,1e+07,0]

green summit
#

Do you have open repository of this or something similar so i can take and learn from it how it was done ?

grim lion
#

@green summit Here's what Dedmen sent a while back for the source code. The OS I'm working on isn't released to the public yet

green summit
grim lion
#

It's been a real game changer, finally able to do some proper UI work at least for myself, lol

green summit
viscid onyx
#

Using a web browser for UI reminds me of the original Planetside 2 UI being written in Flash

nova wigeon
tall pumice
#

skyrim interface is in flash

#

flash was everywhere back then

#

hell, even i made a website in flash

green summit
#

RIP FLASH December 31, 2020

nova wigeon
#

i mean web is just the next logical thing.

#

what is flash if not Javascript 2.0 😛

#

i mean Actionscript was just ECMAScript 4 Proposal.

slender axle
#

I created a CT_WEBBROWSER display with multiple overflowing elements (which creates scrollable areas). Now there's a problem with scrolling. The first element I scroll on works (it scrolls correctly), but if I move my cursor to another element and try to scroll on there, it doesn't scroll.
Also tried unsuccessfully: clicking on the other element, or even using javascript to force focus.
Anyone seen this problem before?

teal elk
slender axle
# slender axle This is my html.

Couldn't figure out the scrolling issue, but I managed to do a hacky workaround with js that seemed to work fine:

document.addEventListener('wheel', function(e) {
    const el = document.elementFromPoint(e.clientX, e.clientY);
    if (el && el.closest('.panel')) {
        el.closest('.panel').scrollTop += e.deltaY;
        e.preventDefault();
    }
}, { passive: false });
full sonnet
full sonnet
leaden heron
grim lion
teal elk
slender axle
#

The web browser is really flexible and nice. Not sure I see the real time performance benefit yet; the lidar examples are cool but for us transferring large amounts of real time data to it doesn't seem to be worth it yet (the calculations to convert stuff to string and pipe them in via script...etc cost quite a bit).
But it's just much easier to make menus with it, a lot more types of controls are possible, and I bet it'll solve some of our rendering performance issues. I'm probably going to start moving our entire mission's menus to it.
Fingers crossed that there aren't going to be any breaking changes to the way it works on the horizon?

unreal arrow
verbal venture
#

you also da phone screen record masta

unreal arrow
#

yeah, takes 0.000025ms

tall pumice
#

whats this for? helicopter downwash?

tall pumice
#

oh nice. inb4 smoke (away) blower

tall pumice
#

finally it will be possible to make particle ghosts and build a ghostbusters trap machine thingy

#

wait, that would require sucking and not pushing

#

never mind then

unreal arrow
lucid totem
#

« the beast is crawling through the woods, hide! »

peak bane
viscid onyx
# peak bane How on earth is this made, is it a real picture in picture of what is down there...

As I understand it, it works a lot like real LIDAR/imaging sonar. It sends out a bunch of ray traces (lineIntersects...) from the "sensor" position and records where they stop. Those endpoints are then transferred to a piece of JavaScript(?) running in a web browser UI control, which renders them out into a nice picture.
The raycasting is fairly simple, just some maths. The secret sauce is the web browser control allowing it to be rendered out and displayed efficiently, rather than trying to use Arma's own UI systems which aren't well-suited to it.

peak bane
peak bane
viscid onyx
teal elk
slender axle
full sonnet
#

Interesting, ctrlMapCursor actually doesn't do its stuff on the map, it does it on the controls container.
But its a bit cheaty, it just disables your real mouse cursor, and draws a fake one.
Mh I need to try that out, Feedback tracker ticket please

teal elk
#

Probably I’m saying something dumb, but there is a chance to have a multithread command?

Something like a foreach that runs multithread the code inside?

full sonnet
#

no

#

Well.. I guess technically. If you could guarantee you only do safe things.
But you won't, so probably not.

ebon quail
#

I promise 🥺

teal elk
#

Make it a secret command, don’t put it in the wiki lol

#

Or just in the dev and see what happens? 👉👈

tepid dock
lucid totem
halcyon moth
#

struggling to think of anything you could do in SQF that would be thread-safe :P

#

actually applyMultithreaded would work better, handles the output problem.

#

just need to make a list of read-only commands

vernal ravine
scarlet root
#

is this really all post 2.20?

#

or rather since last dev branch (2.19.x)

feral tangle
#

Pretty sure dev has been behind since the RC came out?

viscid onyx
#

Dev branch didn't get a lot of the changes from RC branch or the hotfix

feral tangle
#

So likely dev catching up.

broken fern
#

Yeah, I don't remember seeing the OM flashlight errors in stable 2.20.

ebon quail
#

correct, has all the 2.20 changes too, it was still behind

scarlet root
#

anyone fancy to filter out the 2.20 changes, so only 2.21 remains 🙏

full sonnet
full sonnet
#

We had a PoC to again double the count of dynamic lights. Been laying a round uncommitted for years now 😄
Downside is performance (not measured) and memory usage

lament crow
#

Are lights and shadows multithreaded and can those be moved to GPU only? Since CPU is the bottleneck that would release some burden from the CPU

full sonnet
#

I need a "nonsense" emoji to put under peoples messages

severe kernel
#

what about 💩

tall verge
#

🤡 exists

broken fern
#

Or just a regular facepalm.

lucid totem
#

I got carried away

floral arrow
#

Apparently dev branch not just reset all my settings, it makes my dedicated server (stable) load the mod I used in devbranch 😄 😄

#

Anyone knows how to disable those?

floral arrow
#

Solved it 😄

balmy timber
#

Damn , that Webbrower should be in Normal Game D:

#

But how can i delete "Cookies" / "Informations" , something Like Forums , if i logging in on a Website then i am still logged in After Restart , so Cookies and that Stuff are cached , and in Wiki is no "Delete" Function Visible

compact salmon
#

@floral arrow Well, do tell: How? 😃

teal elk
#

wdm? webbrowser is already in relese version

#

will be nice to have the cookies stuff, but its kinda out of the scope, the idea is you can use web in arma, no access to other sites from the game

#

still, you can save that info in profileNamespace

floral arrow
#

All I did is to run Arma without launcher and disable the mod ingame 😄

balmy timber
#

in the Dev Branch you can access a Browser with Clicking in it

teal elk
balmy timber
#

on normal it doenst worked xD

And the Wiki says Dev Branch too

This is an experimental feature currently available for testing on Development Branch. Please provide Feedback on the Arma Discord's #dev_rc_branch channel.
teal elk
balmy timber
#

you mean the internal HTML ?

full sonnet
balmy timber
#

0.o Weard on normal Version it didnt worked , only in Dev Version, need to retry it 😅

carmine juniper
#

We call it "wiki is outdated"

balmy timber
#

😅

slender axle
#

A3API.RequestTexture for CT_WEBBROWSER appears to be some kind of blocking operation despite it ostensibly being a Promise. When I make a couple hundred calls to it, the first one doesn't finish until the last one does (and then they all finish at once). It also blocks SendAlert.
I've managed to get around it by caching the textures passing them back and forth between the browser and the game, but the first start still takes a while. Any way around this?

ocean sonnet
#

Do you know if this ever got sorted for the depth of field?

carmine juniper
#

Never heard of

full sonnet
verbal venture
#

Me avoiding JavaScript: PU_PeepoFatRun
Dedmen: PU_PepeNarutoRun
(Promises mentioned)

ebon quail
full sonnet
#

Futures/Promises.
Mainly, spawned scripts can now return results, and you can get them later.
You can also create empty handles that don't actually run a script, but who's result can be set later.

I need some feedback about this

_heavyScript = [] spawn {Sleep 2; "I'm done now!"}; 
 
[_heavyScript] spawn { 
  params ["_heavyScript"]; 
 
  _result = waitUntil _heavyScript;  
  hint _result; 
};
fnc_startProcess = {
  _handle = spawn "HandleName"; // Naming to be decided
  // Start process that takes a while
  [_handle] spawn {
    params ["_handle"];
    systemChat "startWork";
    sleep 2; // Do work
    systemChat "terminating";
    _handle terminate "I am done now"; // Notify everyone waiting on the handle and give them the result
  };
  _handle; // Everyone else can wait on the handle
};

_handle = call fnc_startProcess;
hint name _handle;
addMissionEventHandler ["EachFrame", {
  _thisArgs params ["_handle"];
  // Check if the handle is completed, by using a timeout of 0. Equivalent to _result = if ( scriptDone _handle) then {waitUntil _handle} else {nil};
  systemChat name _handle;
  _result = waitUntil [_handle, 0];
  if (!isNil "_result") then {
    hint format ["%1 has returned %2", name _handle, _result];
    removeMissionEventHandler ["EachFrame", _thisEventHandler];
  };
}, [_handle]];
#

I could do
_handle continueWith {code};
Once handle is completed (by the spawned script ending, or by calling terminate) it will run code.
Essentially

[] spawn {
  Do stuff;
  isNil{
      {call _x} forEach _continuations
  };
}

Not sure how to handle whether to scheduled or unscheduled the continuations.
I want to have this usable in both scheduled and unscheduled scripts alike.
Mh.. I could make it dependant on who ended the script.

If its a scheduled script, it'll be scheduled, otherwise it'll be whatever the caller of terminate was 🤔

halcyon moth
#

What happens if the spawned script crashes out?

full sonnet
#

its result is nil, and it finishes

halcyon moth
#

It does actually get there though? Because that's slightly useful.

#

Main reason I do waitUntil on spawns is failure protection.

full sonnet
#
_result = waitUntil ([] spawn {sleep 1; [] select (random 5); "result"});
// _result is "result" or nil
signal edge
#

i love the idea of getting the thread specific result passed by the spawned script. it needs another option just in case of thread deadlock. if the subscript were to fail, then the parent script would deadlock and one would not be able to continue. consider this example:

_tasks=[...]; // task list of things to execute
_handles=[]; // empty array to store all my handles to check in parallel
{ // start scheduler
_handles pushback [_x,_foreachindex] spawn { params ["_code","_index"]; // my schedule subscript that has its specific index for tracking later
};
_completes=[]; // for comparing later once all subscripts complete
waituntil{
{
if(scriptDone _x)then{_completes pushback scriptResult _x}; // considering alternative names are fine
} foreach _handles;
(count _handles)==(count _completes);
};
// continue on with other things
};

the example given on the scriptDone biki would be better suited to thead locking the parent when the coder needs it to wait then a command like scriptResult (or whatever you decide is best) could give instant results or nil as default if the script is still not done allowing one to continue to do other things in the meantime.

full sonnet
#

Your example is so hard to read. I don't get what you're trying to show with it.

Instead of waitUntil, scriptDone can still be used, and waitUntil also gets a timeout so you only wait a limited time

signal edge
#

...what if the subscript runs forever? then the parent script is locked out until the subscript finishes (i am assuming the waituntil on a handle does not release until the handle is done)

full sonnet
#

its the same as waitUntil {scriptDone _handle;}

#

If you don't want to wait forever, you probably shouldn't wait forever

#
_emptyHandle = spawn "HandleName"; // Doesn't contain an actual script, its only a holder for name+value
_normalHandle = 0 spawn {scriptName "HandleName";} // Contains an actual scheduled script that will execute
_handleName = name _handle;
_emptyHandle terminate "result"; // Set result, trigger continuations and waitUntil's. Result can only be set once
_normalHandle terminate "result"; // Error, cannot terminate a scheduled script with a result value, can only do it on empty handles
waitUntil _emptyHandle; // In scheduled will suspend until handle is done, in unscheduled will return nil if handle is not complete. If completed it returns result
waitUntil [_emptyHandle, timeoutInSeconds]; // Continue if either handle is done, or sleep timeoutInSeconds has completed
_emptyHandle continueWith {}; // Code executed once the handle is completed, essentially a eventhandler, code runs unscheduled. If the handle is already completed, code is executed immediately. _this receives the result of the handle. Code executes in missionNamespace

That is the API so far

earnest mural
#

_emptyHandle == _normalHandle ?🤔

full sonnet
earnest mural
#

are both handles the same?

full sonnet
#

I still don't understand the question.
I think the answer is no?
I create two handles, so they really shouldn't be the same

#

You mean because they have the same name? No

earnest mural
full sonnet
#

Name behaves like scriptName

earnest mural
#

ok thx, still trying to figure this new system out

full sonnet
#

The most annoying thing with new features like this is savegames.

_x = [1];
_handle = _x spawn {
  sleep 5;
  _this set [0,2];
};
waitUntil {scriptDone _handle};
// x == ?

What value does x contain, after you run a script that puts 2 into it?

Well you put two in it, so its 2. Unless.. you save and load during the sleep, then its 1.

Now get into this mess when you're trying to wait on a handle.. and you're fonked

tall pumice
#

is the sleep script still running after loading?

full sonnet
#

yes

#

the set is executed

tall pumice
#

can we detect if a savegame was loaded? maybe a short delay in the waitUntil after loading could solve this?

#

manually placed by the scripter, not engine driven

full sonnet
#

There is an eventhandler for savegame load.
No any delay or waiting will not solve this

#

_this in the spawn, is a reference to the same array as in _x. Editing one edits both.
After the load, they are separate array instances, editing one doesn't edit the other.

The same happens with hashmaps. References become copies at save/load

tall pumice
#

hm. in this specific situation, i would put an additional variable at the end of the sleep script (spawn) and then check for that variable inside the waitUntil, and not wait for the actual script.

#

very situational, but not unsolvable, i guess

full sonnet
#

That is not feasible in the long term

tall pumice
#

probably, yeah

full sonnet
#
_x = [1];
[_x, 2] call fnc_appendToArray;
// _x == [1, 2]

But if scheduled script was suspended inside the append function, and then the game was saved. Then _x == [1]

Thats just a totally nuts thing that you'd never expect to be possible.

full sonnet
#

diag_activeScripts returns the number of spawned vs execVM'ed scripts.
Until you save/load, then every script is execVM'ed even if it was spawned

#

If you terminate a scheduled script immediately before saving the game.
When loading the savegame, the terminated script might come back from the dead

mental fulcrum
#

scheduled == trash comfy
-# 🏃‍♂️

#

FSMs shouldn't be affected by these kind of issues right? As their "code blocks" are executed unscheduled.

grim lion
#

Scheduled has its purposes, it also helps prevent race conditions if done correctly.

full sonnet
mental fulcrum
full sonnet
#

oh no

#

For real. Saving is the ultimatest pain.

_handle = [] spawn {scriptName "testName"; sleep 20;};

addMissionEventHandler ["EachFrame", {
  _thisArgs params ["_arg"];
  systemChat str ["Argument is: ", _arg];
}, [_handle]];

Before save/load: ["Argument is: ",testName]
After: ["Argument is: ",<NULL-script>]

addMissionEventHandler ["EachFrame", {
  _thisArgs params ["_arg"];
  systemChat str ["Argument is: ", _arg];
}, [player]];

Before save/load: ["Argument is: ",dedmen]
After: ["Argument is: ",<NULL-object>]

We load savegames in two passes.
On second pass, we load things that require first pass information.
Like first pass loads scheduled scripts and objects, second pass loads script handles/script object variables that need to look up the data created in first pass.

Mission EH's arguments storage had a tiny oversight, that made it skip second pass.

Here I am trying to debug why my handles don't work in EachFrame handler, thinking I'm doing something wrong. No, Mission EH arguments were broken since they were added.

tall pumice
#

yeah, half of the issues in our missions were from loading savegames

#

always has been. i cant remember when we didnt had to use the load EH to fix some stuff after loading 😄

full sonnet
#

Fixed.

Before save/load: ["Argument is: ",testName]
After: ["Argument is: ",<spawn>scriptName "testName"; sleep 20;]

UGH

pallid cliff
full sonnet
#

Question.

Call without arguments
call {} does not set _this at all, and thus the parent scope _this is readable

Spawn without arguments
spawn {} would set _this = nil? Right?
Only alternative I can think of is implictly passing _this of the parent scope but if I actually think about it that just sounds bad.

I'll just make spawn {} == nil spawn {}

frozen pumice
pallid cliff
#

The example looks good to me.

full sonnet
#

Not sure if the waitUntil with timeout syntax is really needed.
But I've seen a couple times of people manually implementing waitUntil with a time check inside as timeout. Maybe it makes sense to add waitUntil [code, timeout] too?

Now that we have the array syntax we can stuff more things into it

halcyon moth
#

Yeah, waitUntil with timeout would be great.

full sonnet
#

Maybe I'll think of it next week. Have to finish this stuff off first 😄

#

Might need to keep bothering me about it

#

also ui time timeout? ugh

tall pumice
#

i usually slap a sleep into waitUntils because almost always they don't need to run constantly

#

or rather, whatever code is about to continue, isn't that crucial to run instantly

harsh orbit
#

oh nvm it's waiting on handle, not calling a code 😅

#

or is it actually waitUntil code?

full sonnet
#

Its engine side checks no code

harsh orbit
#

yeah I thought you meant waitUntil [{}, time]

full sonnet
#

Ah that. Mh, possible.
But with how easy that is to implement, just adding a sleep, probably less inclined

harsh orbit
#

yeah no need

#

btw the timeout is in mission time right? not ui time?

full sonnet
#

Yes

#

Don't know what syntax to use to set uiTime, add a bool? Ugly

harsh orbit
#

negative time = uiTime hmmyes

full sonnet
#

:pog:

#

+time == uiTime 💀
Introduce some new weird concept that is only used in one command /s

mental fulcrum
#

[uiTime, code]
[code, time]
Kappa

slender axle
teal elk
#

If there is a cba function to it, is bc is usefull 😬

full sonnet
slender axle
#

Fair enough.

teal elk
#

made it multithread too /s

balmy timber
#

An Advanced "terminate" function would be nice

If i spawn the same script over and over that i can terminate all other versions without making a direct variable .

Or that i could kill a "manuel" created spawn in an other script🤔

full sonnet
#

And how would that terminate function know which scripts to terminate.
It just being the same function? I don't think so

balmy timber
#

(time) and then select all exept the last to terminate 🤔 or am i thinking wrong

#

Because mostly you only want the last started same script

full sonnet
#

You can just add to the top of your script
if (!isNil "G_ScriptInstanceThing") then {terminate G_ScriptInstanceThing;} G_ScriptInstanceThing = _thisscript;
And tadaa, theres only ever one instance alive, and it kills the previous if a new starts.
And thats such a niche usecase, thats solved so easily, not worth any engine support.

balmy timber
#

Hmm thats possible

#

But dedmen , i hope you can help , is there any way to check , or make an "custom" sleep to the lenght of an sound over the server , because i used say3d remoteexec and the server needs to execute again when its finished

full sonnet
#

You mean you want to find the length of a sound, if its not written in config then no

mental fulcrum
#

can't you wait on isNull _soundSource, which is returned by say3d?
I don't remember if say3d makes a sound source on dedicated server. IIRC it should everywhere

balmy timber
#

Damn , because we have sounds that we often replace and then there overlapping. Because i cant see the exect seconds and milliseconds :/

#

And soundonvehicle checks bit complicated for server

#

Say3d is distance limited so i think if the distance is higher you cant hear it?

mental fulcrum
#

It is, this channel is not really for scrpting help though.

balmy timber
#

Yea , okay . Because the forum is down i indirect wanted to ask if there is Something planned to "return" the sound lenght

mental fulcrum
#
[] spawn {
  private _sound = say3D [...];
  waitUntil {isNull _sound};
};
balmy timber
#

But ita remoteexec

teal elk
#

Remote exec a function instead a command, but use the correct channel #arma3_scripting

slate orchid
#

Any opinion for unarmed ghosthawk model?

broken fern
bleak canopy
#

The stub wing can be hidden by script

teal elk
#

General - Use select -1 (#1748) PabstMirror

how the hell i missed that, thank you ded ❤️

full sonnet
#

Twas Killzone Kid not me

teal elk
#

Thank KK then ❤️

unreal arrow
#

my pleasure

prime marsh
broken fern
prime marsh
#

Yes, i doublechecked and that's right.. i rearm ah99 with the gunner and it works, i rearm mh80 with pilot and it works too, but the rearmed missiles are shooting out of the fuselage instead of the pylons after rearming

broken fern
# prime marsh Yes, i doublechecked and that's right.. i rearm ah99 with the gunner and it work...

I'm 90% sure it has to do with how the AH-99 didn't used to have dynamic loadout for it's pylons, but the MH-80 always did. If you do it with a stub winged AH-99 with all the pylons being Skalpels except the wing ones being DAGRs, then after you did the replacement it will fire the DAGRs from the bays (where there are no DAGRs).
Why are you using addMagazineTurret instead of something better suited to the job?

prime marsh
#

Thank you - I am the owner of an Arma3 Epoch server and it's because this is, what Epoch mod is using in its internal rearm script.

rustic plaza
#

as Sticky Joe mentioned, addMagazineTurret works on AH99 due to legacy setup

#

UH-80 is new asset so its no longer offering that obsolete way of configuring ammo

feral tangle
#

Dev branch updates back on being every two weeks again? (Subject to pipeline issues)

copper dawn
#

Hi, can someone tell me where to contact about Arma 3 bugs? They are not significant, but it would be cool if they were corrected (mostly duplicate translations)

14:49:43  ➥ Context: a3\language_f_enoch\stringtable.xml
14:49:43 Item str_a3_c_cfgweapons_h_helmethbk_f0 listed twice
14:49:43  ➥ Context: a3\language_f_enoch\stringtable.xml
14:49:44 Item str_a3_combat_fatigues listed twice
14:49:44  ➥ Context: a3\language_f\stringtable.xml
14:49:44 Item str_a3_combat_fatigues_tee listed twice
14:49:44  ➥ Context: a3\language_f\stringtable.xml
14:49:44 Item Str_A3_cfgVehicles_boat_armed_01_HMG0 listed twice
14:49:44  ➥ Context: a3\language_f\stringtable.xml
14:49:44 Item Str_A3_cfgVehicles_boat_armed_01_minigun0 listed twice
14:49:44  ➥ Context: a3\language_f\stringtable.xml
14:49:44 Item str_a3_cfgvehicles_land_highvoltagetower_f0 listed twice
14:49:44  ➥ Context: a3\language_f\stringtable.xml
14:49:44 Item str_a3_combat_fatigues_haf1 listed twice
14:49:44  ➥ Context: a3\language_f_beta\stringtable.xml
14:49:44 Item str_a3_combat_fatigues_haf_tee listed twice
14:49:44  ➥ Context: a3\language_f_beta\stringtable.xml
14:49:44 Item str_a3_h_cap_oli_hs0 listed twice
14:49:44  ➥ Context: a3\language_f_epb\stringtable.xml
14:49:44 Item str_a3_h_booniehat_khk_hs0 listed twice
14:49:44  ➥ Context: a3\language_f_epb\stringtable.xml
14:49:44 Item str_a3_h_bandanna_khk_hs0 listed twice
14:49:44  ➥ Context: a3\language_f_epb\stringtable.xml
14:49:44 Item STR_A3_uniform_stavrou0 listed twice
14:49:44  ➥ Context: a3\language_f_epb\stringtable.xml
14:49:44 Item str_a3_cfgvehicles_land_airport_terminal_2_f0 listed twice
14:49:44  ➥ Context: a3\language_f_gamma\stringtable.xml
14:49:44 Item str_a3_cfgvehicles_land_airport_terminal_1_f0 listed twice
14:49:44  ➥ Context: a3\language_f_gamma\stringtable.xml
14:49:44 Item str_a3_cfgvehicles_land_highvoltagecolumn_f0 listed twice
14:49:44  ➥ Context: a3\language_f_gamma\stringtable.xml
14:49:44 Item str_a3_cfgvehicles_land_highvoltagetower_dam_f0 listed twice
14:49:44  ➥ Context: a3\language_f_gamma\stringtable.xml
14:49:44 Item str_a3_cfgvehicles_land_highvoltagetower_large_f0 listed twice
14:49:44  ➥ Context: a3\language_f_gamma\stringtable.xml
14:49:44 Item str_a3_cfgvehicles_land_highvoltagetower_largecorner_f0 listed twice
14:49:44  ➥ Context: a3\language_f_gamma\stringtable.xml
full sonnet
ocean sail
copper dawn
# full sonnet That is tested without any mods loaded?

Sorry, looks like I've misinformed you a bit and it was some kind of extra mod. Here are the errors that appear in profiled Arma 3 with some vanilla Arma 3 addons

15:42:22 Warning: looped for animation: a3\anims_f_epa\data\anim\sdr\cts\hubcleaned\briefing\hubbriefing_loop.rtm differs (looped now 0)! MoveName: hubbriefing_ext
15:42:22 Warning: looped for animation: a3\anims_f_epa\data\anim\sdr\cts\hubcleaned\spectator\hubspectator_stand.rtm differs (looped now 1)! MoveName: hubspectator_stand_contact
15:42:23 MovesType CfgMovesMaleSdr load time 4038.0 ms

15:42:24  Mission file: introExp
15:42:24  Mission world: Stratis
15:42:24  Mission directory: a3\map_stratis_scenes_f\scenes\introExp.Stratis\
15:42:24 No more slot to add connection at 033057 (3386.8,5735.4)
15:42:30 Strange convex component145 in a3\plants_f\tree\t_pinuss2s_b_f.p3d:geometryView
15:42:30 Strange convex component149 in a3\plants_f\tree\t_pinuss2s_b_f.p3d:geometryView
copper dawn
urban briar
#

Not sure.

winter crescent
feral tangle
#

Gotcha.

slender axle
#

Got a report of a CT_WEBBROWSER menu running at sub-5 fps, regardless of complexity of the page. Tried enable/disable GPU accelerated steam overlay setting. Machine is a gaming laptop with decent specs.
How would I try to get more information here to debug?

full sonnet
#

try same page in steam overlay browser, also slow?

slender axle
#

Only the menus were lagging. But these menus are about as simple as three buttons in a div. No calls to images.

#

I suppose I can expose the chrome dev tools and have them try to profile it, but I can't imagine that'd really help; other than that, just wanted to see if this has been seen before.

full sonnet
#

yes there were reports of browser being laggy befoer

slender axle
#

Oh well, I just put a fps counter for now and hope that we can figure it out later.

#

"It's lagging" is not so easy to debug.

halcyon moth
#

Wasn't there an issue if the frame rate was too high?

#

200fps or something.

slender axle
slender axle
#

Interesting. In what cases would not using this flag cause low fps? Because most people seem to get 60fps flat fine. Is this some issue with shared laptop GPUs? Was that the case with FiveM, that only some people had the issue?

ebon quail
#

I doubt we get enough control to set that flag

slender axle
#

Well, another thing is maybe it's already enabled.

ebon quail
#

Looks like only the user agent and some css param is available

gray quarry
#

@fickle abyss steam web helper != shipping cef
arma 3 browser feature relies on steam, not on a included chromium like other games, it does not compare

#

shipping cef would introduce a waste of builder storage in the monstrous src of chromium and ship ~250mb of blobs

#

bi does not want that at all

#

there's no control over the webhelper afaik

#

its of no use but thanks

#

i doubt dedmen is interested in investigating how to hijack the web helper launch arguments

full sonnet
#

You can watch 4k YouTube in steam overlay browser, that wouldn't work without GPU.
And also considering that, I don't think the actual browser itself is the issue.
Its probably something in steam, maybe when it's too busy it cannot pass the frames over fast enough

leaden heron
full sonnet
#

Oh right! I can see you down there

leaden heron
#

That's actually impressive

slender axle
glossy zodiac
teal elk
#

i wont be surprised if Ded move out to a farm with out internet in the future lol

full sonnet
#

If America weren't America I could move to Green Bank

teal elk
#

Came to argentina lol, its like america with out the shootings thing

scenic trail
#

-# There's this beautiful agricultural plot that needs some love (Barn is quite rusty but still serviceable) 50.716, 14.092

tepid dock
# lucid totem _wat_

Enter the coordinates in Google maps and then switch to Street View and you'll get it 😉

lucid totem
#

nevah !

tall pumice
#

profiling branch almost feels like the new dev branch. is there any major difference between those, except that dev branch gets updated slower?

#

or rather, why not make both one

formal cipher
#

Profiling branch doesn't go through smoke tests, while dev branch does. And profiling is always compatible with the default branch, which means it can't have data changes while dev can.

tall pumice
#

ok, i see. bit sad. i wouldnt mind daily updates in general, even if that means potential issues along the lines.

#

just right now dev branch has stuff that profiling doesnt and profiling has stuff that dev branch doesnt have

lament crow
#

- Changed: Updated to XAudio 2.9
Wandering what are the gooddies coming with that update

full sonnet
#

less crashing

#

maybe also no more crashing when unplugging audio device

lament crow
#

Sweet

gray quarry
#

for some strange reason the linked dll is named XAudio2_8.dll instead of using xaudio2_9redist.dll

winter crescent
#

A next Dev update is going to see a massive data change, nothing of which you should notice meowsweats
We're testing new future-proof data pipelines, so we'll be repacking all data in the game. So far the delta diff is looking to be about 2-3 GB.

arctic fern
past moon
#

i was wondering if there is any chance to improve the multiplayer syncing of cloud layer in Arma 3, there seems to be drift (related to the way how weatherchange drifts), some claim it's totally not synced not even on JIP only from mission start

past moon
past moon
pallid cliff
feral tangle
#

Glitch out on higher display settings too. I enjoy occasionally seeing weird wavy verticle line clouds. 😄

full sonnet
#

HTTP Mission downloads are such a genius feature.
I just saw a 2MB mission download finish instantly, I didn't even see any progress, it was just a blip. Amazing

past moon
teal elk
tepid dock
# teal elk How is the easyiest way to set it up in an vps?

You're asking about the config part or the http server part?
If the latter, then I'm guessing setting up nginx in docker could be the correct way to go, but if you're 1000% lazy, just do python -m http.server 8000 in the missions directory 😂 (available in the stock python installation, and you'll have python already installed on your vps anyway)

teal elk
#

Server part 😬

teal elk
tepid dock
#

(however, I should note that if Arma requires the connection to be HTTPS then it probably won't work 😓 )

verbal venture
#

I got a website running, so I just made a /missions folder (that we have anyway so people can download mission) and pointed the server ot that

full sonnet
lucid totem
#

"just add a library" no? 😄

full sonnet
#

We have audio output device selection already in.
Do we need input device selection too?

BUT, considering that switching the windows default input, will automatically seemlessly switch over inside Arma too (No more game restart).
Is it then worth the effort to add a in-game toggle too?

Would anyone really use a non-default input?
For outputs I see the use case, but I don't see why you'd want Arma to have a differnt input than your other software that uses microphone, its not like you'd have multiple microphones?

dark hemlock
#

some people use soundboards I guess? bit of a niche case

lucid totem
#

please allow for output selection still, sometimes default is headset but one wants to play on speakers
is that a pain to setup/maintain?

full sonnet
#

I'm only talking about input, I won't touch the output selection.
The question is whether we need to implement it for inputs

lucid totem
#

that will teach me to read and understand what I read

Would anyone really use a non-default input?
way more rarely than output IMO, buuut :)

calm wasp
#

win can default to headset/in-ear mic, but you have a dedicated one or you have a dedicated one, but went pooping with your in-ear, so can use the built in in-ear mic, via bluetooth, to continue talking, while away from pc

full sonnet
#

While the engine side is easy now, the UI and data and localization changes needed would be a absolute pain

viscid onyx
#

We've got on without it OK for the most part. I don't think there's a strong need if there's better handling of the Windows default.
It would probably be a nice-to-have for certain use cases because if you do need to switch for any reason, you wouldn't have to leave the game window to do it - just more convenient rather than an essential. It does also provide better compatibility with anything else that's hardcoded to only use the Windows default.
example multi-mic cases (not a judgement on how common they are): headset mic for gaming, area-type mic for work / VR headset mic / switching devices because one failed / virtual audio devices for streaming etc / Windows just likes to change the selected mic for no fuckin reason sometimes

calm wasp
scenic trail
#

It's a very common option now yes? Lots of people have multiple devices for many reasons like Nikko listed (DAC/Audio interfaces becoming very common as well) and it's very nice QOL for the same reasons as selecting output devices is

wispy saddle
#

whats coming to 2.22

#

or future of a3 in general

viscid onyx
#

You can also keep an eye on #arma3_branch_changelog to see any changes that don't directly produce a new script command.

full sonnet
#

We don't make big plans. Things that happen, happen

near carbon
#

thats the best part about A3 Dev rn things just happen :D

leaden heron
#

dynamic shadows 🤞

lament crow
tall pumice
#

you can already do that

lament crow
#

Seems like a massive undertaking for a modder but they always surprise so there is hope

nimble bane
#

Is ACE not modding?

lament crow
#

ACE is not bad but it is a whole different solution compared to how it works in Reforger, where everything is done with F and no performance degradation when holding down the button

tall pumice
#

off to a good start 😄

arctic fern
#

So, wondering again, is the new pipeline for the repacking of data advancing towards the ARMA 3 LDPs? Would there be any current estimation of timelines for the binarized releases?

#

In addition, since model geometries are being touched, would there be any chance of a fix for this ticket I submitted on the A3 fences being glitched visually: https://feedback.bistudio.com/T189824

tall pumice
#

ok, just to be saved i verified my files, but the error about a3data is still popping up. same as the missing env_co

viscid onyx
arctic fern
ebon quail
# tall pumice off to a good start 😄

Uhhhhhhhhhhhhhhhh, welll you see there was this 1 pbo that didn't seem to be used anywhere and I couldn't find any references to the few env .paa files in there meowsweats

tall pumice
#

it's really old stuff

ebon quail
#

Is it only when loading with WS?

tall pumice
#

yes

#

ws is also using some really old stuff, which explains those issues. i can ez fix it ofc, but dunno when we can release a hotfix

#

but i wonder how many mods this breaks 😄

ebon quail
#

Could you explain/show its usage/what its used for when you have some time? I'd rather not include a pbo we haven't packed in almost a decade (for as far as i can tell) but if mods/cdlc rely on it then I'll be forced to 😂

tall pumice
#

interesting difference

#

well, it's just old a2 legacy stuff i guess

#

since ws is using a couple models from a2 but polished up, those remnants were kept

viscid onyx
tall pumice
#

global ops terrain Farabad gives me this 😄

#

other cup buildings seem fine

ebon quail
#

CUP vehicles sadcat

tall pumice
#

on their plus side, this is easy and quick to fix, but my stuff needs to pass QA first 🥲

ebon quail
#

Probably not worth the headaches we will cause, might just include the legacy file and never look at it again 😂

arctic fern
ebon quail
#

data_f is fine

arctic fern
#

Ah, my bad

ebon quail
#

Its only these legacy files that are affected, but with the amount of a2 stuff ported into a3 thats gonna be quite a few mods affected (if they kept the a2 path)

arctic fern
ebon quail
#

wouldn't be surprised if it straight up just the a2 pbo lol

viscid onyx
ebon quail
#

maybe if this path is requested we can just use the correct one in... yeah might be possible.

#

hotel one is missing at least, but we could include the missing ones

#

looks like no, will prob include legacy file sadcat

arctic fern
#

Given it never gets touched and is tiny, is it really that important to remove?

full sonnet
arctic fern
#

Because 3 > 2 😉

ebon quail
#

its a stripped down ca.pbo from A2 from the looks of it

arctic fern
#

Interestingly the ARMA 2 Land_HouseB_Tenement does not have the hotel env co in its rvmats...

ebon quail
arctic fern
#

CUP Terrains hotel also doesn't have the International Hotel one in its rvmats either

#

But it does use the data one

feral tangle
#

Oooo fixes for building service lods.

#

There are a few of the Enoch ruins that are missing damage = no property on them. So they can be destroyed. Wonder if there was a ticket made for that. 🤔 Was an issue for us when making SPE.

arctic fern
#

CUP Terrains also uses the lake one in a3/data for ponds

#

And the A3 ones are honestly crap. Left is ARMA 2, right is ARMA 3, can we update it with the originals @ebon quail ?

ocean sail
#

'ffaa_casas_af' requires addon 'A3Data'
'ffaa_nh90' requires addon 'A3Data'

arctic fern
#

LOL, the A2 International Hotel one vs A3's 🤦

#

Though that one at least seems unused

dark hemlock
#

what is that for, scope reflections?

ocean sail
#

game crash when load missions with this objects, and seems there will more
Cannot open object a3\structures_f_enoch\furniture\cases\dhangar_borwnskrin\dhangar_brownskrin.p3d
Cannot open object a3\structures_f_enoch\furniture\cases\dhangar_borwnskrin\dhangar_brownskrin_open.p3d
Cannot open object a3\structures_f_enoch\furniture\beds\postel_panelak1.p3d

arctic fern
ebon quail
#

for the other missing p3d's in enoch structures we'll probably have to include them again. they were deleted a long time ago but still included due to caching, unlucky but not an issue

arctic fern
ebon quail
#

they were deleted a long time ago but still included due to caching, unlucky but not an issue
yes

past moon
#

isn't that form of size shrink , like for server ? seems certainly like texture 'processed' that way

arctic fern
#

Dunno. Vanilla A3 ones are 512x512, vanilla A2 ones are 256x256, the ported A2 ones in A3 are 16x16 🤷

#

Just do wonder whether tht has negative visual effects or whether it matters? Mattered enough to someone in the early days of ARMA 3 to increase the resolution from that used in ARMA 2 for the new vanilla textures based on Altis/Stratis

arctic fern
#

And what is this used for. Takistan used the og A2 one, but in A3 Tanoa had a new one but it still looks like Altis so it would be good to really know how they are used...

#

Looks like, but obviously has been changed

#

Different sky, terrain and lighting

#

All Enoch stuff uses the initial vanilla texture

#

So would be really nice if someone actually does know what they are used for and how to make them for a specific map (if needed, if not then knowing that would be cool)...

#

Okay, it seems to be the Environmental map for super shader to do something to lighting... which seems like higher res might be better

#

So the question is, is this just based on the lighting setup in CfgWorlds, or the general lighting system in ARMA post Apex? If the latter, why do original structures still use the pre-Apex environment texture?

#

And digging deeper, Tanoa structures do not use the environment texture in the DLC lol... But, someone thought it should have a new one...

tall pumice
#

env maps are used for reflections on surfaces

#

look at the little bird glass, it has the highest reflection value of any glass surface in the game, as far as i can remember

#

you can clearly see the used env map in it

#

depending on material values, it can have a big influence on object colors

#

however in almost all cases (nowadays?), the env map for objects is set to be overwritten by the terrain env map via useWorldEnvMap="true";

#

that's probably not a thing on old models, though. but what do i know 😄

feral tangle
#

The puddle decals in the dry dock at the blue pearl shipping place on Tanoa also are a good example of that I think.

#

Try to use those puddles on a modded map and you get a reflection of the dry dock in them. 😄

arctic fern
arctic fern
#

And why does this have someone holding a rifle?

#

I honestly have no idea how these files are really used, but I would like to know... googled stuff but there is little out there

tall pumice
#

because it can be very jarring to fly with the little bird and seeing a reflection of an environment that is clearly not where you are

gray quarry
#

weird, maybe some intentional downgrading of assets? and it really begs the question why those exist in first place, i assume they're used as env maps in various places?

sonic ibex
#

first ones look like reflection images for optics’s

wise skiff
full sonnet
#

oh yeah

full sonnet
#

How big is the need of looking up a player object (the unit they control) by a players dpid/creatorId ?
Is there already some simple way I'm missing on how to do that, besides just doing a findIf over all players.
Is that even at all possible currently on client-side? Server side can use owner or getUserInfo command to go from object to id or from id to object.

But clients really don't have a way?
I just found out all clients know every other players camera position and controlled object, and I think that info isn't available to scripts 🤔

allPlayers command scans that info to collect the players objects.
VoN direct speech uses the same for positioning of other players.

#

Also just learned, VoN direct speech actually calculates the velocity of the speaker, for doppler effect and such. But, we don't actually pass the speed along so its always zero 😄
Not that it'd matter much anyway

ruby edge
#

I remember needing it once, but it's been ages, not 100% sure for what anymore.
I think it was for the stray entity cleanup script i made back when canAdd still caused them.

full sonnet
#

Another dev story

Problem: Game crashes with out of memory when loading a specific mission. Even though there are still 10+gb of RAM free.

I try to reproduce it, but can't, it takes very long to load, but loads fine.
Mh why does it take so long to load. Profile the mission loading.
Mh it spends most of the time loading models from disk, because it recalculates the bounding sphere of objects.
That loading from disk, all goes into file cache, which could be causing the running out of memory.

Why is it recalculating the bounding spheres? All models have their bounding sphere in the p3d headers, it shouldn't need to load the actual model data itself and actually calculate it?

All Car and Tank types, have a hotfix bugfix in them.
When loaded, they enlarge the bounding sphere to 150%, to account for trailers with animated ramps, who's ramps don't themselves increase the bounding sphere (We don't have any of these in vanilla Arma 3, nor Arma 2 afaik, this might be a leftover from VBS? Also modern vehicles would use a animated bounding sphere, so the animation takes care of this).

Instead of just taking the bounding sphere it already knows from the p3d headers,
(We already pre-calculate that when the model is binarized, because its so expensive to do)
it instead loads all LOD's, and iterates over all vertices to find out which one is furthest from center.

That takes time to load the files from disk, uses up memory for caching (we only have 3gb max) and wastes quite a bit of CPU time (main thread churning through model vertices to calculate the sphere).

3 lines of code, to just multiply the bounding sphere we already have, instead of completely re-calculating it.

mission load time went from 30s to 21s and file cache churn is drastically reduced..

#

That should also reduce lag spikes in general playing.

When the model is first loaded, this would trigger and load all LODs.
So when a car is very far away, and the lowest LOD just about renders and the model is loaded.
This would trigger it to load all LOD's and recalculate the bounding sphere. And it freezes the game while it does that.

feral tangle
#

Just another day at the office. 😄

full sonnet
#

Another problem is the allocations for file cache, the thing that caused the out of memory crash.

It use some old system from 1998 (it was literally first pushed in revision 2), that was further developed in 2003 and 2008 for the Xbox and Xbox 360.

Instead of grabbing pages using the normal memory allocator, it instead has its own heap implementation.
Its old, so it uses 32bit numbers and has a artificial limit of 2gb to prevent overflow (before 2020 it was even limited to 512MB), and the game crashes when it actually needs more than that.

It allocates in blocks of 16MiB, and then gives out the 4KiB pages from that. And has its own complex handling to prevent memory fragmentation. This whole thing is built to handle allocations of any size, but we only ever use it to grab whole pages.

Everything that uses pages is affected, but that's really just the filecache, and our old pool allocators (before I wrote new ones) that are mostly used for script values.

Just give that work to the main allocator, it already does that and its much better at it. I'll try that in next prof.

tall pumice
#

from 30 to 21s is big

harsh orbit
full sonnet
#

I don't remember, its been a while, and I don't know where that was to look for it

full sonnet
#

Huh, VoN has a voice-distortion filter.
Like applying pitch and making your voice sound robotic. But its unused since it was implemented in 2003.
CfgVoiceMask is in config, but there is no way to enable it.
Looks to have been a feature for the original Xbox.
Yeah looks like "Xbox Voice Mask" was a thing

The voice masking feature, which could hide your real voice so you sounded like a robot, a small child or other characters, quickly became one of the most hated features of the service.

I remember those early days. They were horrible. If you used a voice mask, you had to be prepared for everyone you played with to hate you instantly. It quickly became a way to troll others in games you didn’t really want to play. It even sounds annoying in the commercials that pushed it as a desirable feature.
oh.

The amount of stuff thats in this engine is astonishing

gray quarry
#

fossilized RV

#

and it takes less space than chromium

viscid onyx
gray quarry
#

via EH and stuff?

#

also isn't VoN like a relic from the past these days?
considering there's ts3 pipe mods like acre/tfar

viscid onyx
#

Probably more like through channel properties when creating the channel. I don't think an EH would necessarily be the right place for something like that.

gray quarry
#

ah i see

#

but those mods bypass von, right?

viscid onyx
gray quarry
#

Right

halcyon moth
#

Caching uncompressed files in 2025 seems super weird unless they're some sort of directory indexes.

full sonnet
#

The OS also caches it anyway

#

Can just disable cache inserts. And I don't think you'd notice it much. But the game would use less memory and people don't like that 😄

gray quarry
#

lol why

tall pumice
#

i have 32gb ram, and the game has to use it or so help me god

gray quarry
#

i'd rather have the opposite

full sonnet
#

can set -maxFileCacheSize=256 for minimum. I don't actually know why that is the minimum and what happens when it'd be zero 🤷

lucid totem
pallid cliff
#

Give us Arma 3 Alpha Branch😄

carmine juniper
#

Give us Operation Magnitude, let's be honest

full sonnet
trim crane
#

KSG 12, Police Hunter, etc.

full sonnet
#

meowsweats Please don't make me make UI that's so annoying

tall pumice
#

just ask chatgpt, ez

full sonnet
#

I would switch it around that the output device comes first, and the refresh buton is to the right of it instead of below. But heck no I'm done

viscid onyx
full sonnet
#

No

pallid cliff
scarlet root
#

interface should be config, yet functionality in c++ via idc mapping

past moon
ebon quail
#

what?

tough sand
#

never mind

past moon
# lucid totem _RAMDISK!_

i have ramdisk but my default A3 w/o mods is twice the RAM, so that doesn't cut it ... you would need like 256GB of RAM for RAMdisk with some mods to fit all there or start juggling with junctions to load only what is active

#

also i have one of those rare ramdrive drivers which are like 2x faster then the usual garbage floating around so it's actually faster than NVME ssd significantly

pallid cliff
#

And then there is a sleep 5 in all read write functions🤣

past moon
#

ironically i remember certain game, where developer was telling me that their precache theirs textures and terrain and objects into RAM and thus ssd or ramdrive aren't needed

#

so i fired up i/o monitor and wondered, so please explain to me , why is your game loading sound samples each time again and not keeping them in memory 😁

ocean sail
#

Added: "damage" sound controller for transport vehicles - https://feedback.bistudio.com/T130979
Is it planned to implement this new feature on vanilla assets that require it? On vehicle classes where sound remain even object destroyed
Something like this:

full sonnet
#

That's the intention

ocean sail
#

This radar engine sound reminded about bag with the sound described in this ticket: https://feedback.bistudio.com/T179776
Can this be fixed? This seems can be reproed with vehicles using sound=""; param in CfgVehicles. Not only CfgAnimationSourceSounds

full sonnet
#

Weird exception that doesn't make sense and that I can't understand while working on the Launcher, ok let's google it.
Oh.. Well..

past moon
full sonnet
#

XmlSerializers is missing in SharedResources. Which makes sense, because SharedResources is our code, and XmlSerializers literally is not supposed to exist.
"XmlSerializers" does not exist anywhere in our code.
Yet something is asking for it and not finding it and crashing.

And the stupid thing, if I rebuild and restart the launcher, the error magically disappears.
Then if I restart the same thing, that I just built, again, without rebuilding it. The exact same files and just start it a second time without making any changes, the error is back and it crashes again.
Well unless Visual Studio outright freezes when I try to launch, and have to kill it in task manager. Then it doesn't crash, because it doesn't even start.

That's why I don't do any Launcher fixes and features.

#

Ah I tracked it down

When the XML Serializer Generator is not used, XmlSerializer generates serialization code and a serialization assembly for each type every time an application is run.

Okey. So Microsoft says, they do it automatically everytime the application starts.
Well why are you then NOT doing it, and crashing because you didn't do it. If you're supposed to do it every time 😠

tepid dock
#

while working on the Launcher
👀

gray quarry
#

who else is willing to work on the launcher code?

pallid cliff
#

<@&105621371547045888>

wraith willow
#

banned

ivory ridge
#

Hopefully the statistic number on the server tab (right up corner) would be changed (Now it shows filtered against actual loaded server. Against all actual server that are online would be more helpful. Maybe as a third number: filtered/loaded/all server).

#

Because actual the number is useless if no filter is activated (both numbers are the same).

ivory ridge
#

BTW: If an other "default site" selected that "Dashboard" the yellow marker on the left side is still on "Dashboard" till the mouse cursor hover over the menu.

full sonnet
#

I won't try fixing small visual issues

unreal arrow
#

SQF Highlight by NATO standards

green summit
unreal arrow
#

NATO is a diverse organisation

full sonnet
#

#(rgb,width,height,nMips)extension("ace_texture","UniqueName")

enum TextureFormat 
{
PacAI88 = 1,
PacARGB8888 = 5
}

void RVExtensionGenerateTexture(const char* uniqueName, uint16_t width, uint16_t height, uint16_t pitch, uint8_t mipLevel, TextureFormat format, void* buffer)
{
  // data is pixels (width pixels per row (But row is pitch pixels wide, potentially empty buffer space), height rows)
  if (format == PacAI88) 
  {
    uint16_t* data = buffer; // format (uint16_t color = (alpha<<8) | brightness)
  }
  else if (format == PacARGB8888) 
  {
    uint32_t* data = buffer; // format (uint32_t color = (a<<24)|(r<<16)|(g<<8)|b)

    uint32_t fillColor = 0xFFFFFFFF;
    for (uint16_t y = 0; y<height; y++)
    {
      data = (char *)data + pitch;
      for (uint16_t x = 0; x<width; x++)
      {
        *data++ = fillColor;
      }
    }
  }
}

I need someone to tell me whether RVExtensionGenerateTexture is a reasonable name.
Naming things is hard.
Maybe RVExtensionFillTextureSource ?

lucid totem
#

wait what is it / how does that work / context?

full sonnet
#

RV Extension + Texture Source

#

Game creates a texture source and memory space for the image data.
And tells extension to put image data into the memory.
Then its displayed ingame.

Like to UI2Texture, or the "text" source. But filled by extension.

tepid dock
#

Why wasn't this avaialable 5 years ago??? notlikemeowcry 😭

#

I would have made such good use of it as it was the thing that we have been making workarounds for 🙁

lucid totem
#

basically… extension-filled textures, neato 😮

tall pumice
#

but what exactly do you do with this that you can't do right now without extension? any explicit use case examples?

full sonnet
#

Load any texture from outside of the game.

#

Like in-game Ad billboards filled from external source hmmyes

tall pumice
#

like from the web?

full sonnet
#

yeah

tall pumice
#

oh. nice.. and horrifying

full sonnet
#

You can already somewhat do it with Webbrowser UI, but that is a UI element. UI's are simulated every frame, takes up resources, and is more complex to set up.
A texture is only loaded once and quite simple.

lucid totem
#

make a vehicle get dirty over time 😄

tepid dock
#

Yeah, it's not about the possibility to load something from the web, but rather to generate something completely custom

full sonnet
#

You get a place to put pixels into. Where you get them from doesn't matter.
Can do 32x32 pixel art in there too 😄

mental fulcrum
#

It can run Doom for sure.

full sonnet
#

Its only one image per texture name though, not video

#

unless you want video..

tepid dock
lucid totem
#

can an allocated texture be flushed from the game's memory tho

mental fulcrum
#

should happen automatically when nothing references it, I guess

#

what happens when you get really far from the object with the texture on selection and back, would it call the extension again?

full sonnet
#

Yeah I could resonably do video... notlikemeow

#

It calls the extension every time it needs a mip it doesn't have yet.

So for a 1024x1024 texture, it might just call it once to get the 256x256 resolution mip.

But then it will call again if you get closer to it in-game.
It will also automatically remove it from VRAM if its unused for too long, and request again if it needs it again. Just normal texture stuff

#

Video just works by saying "If you need to fetch this texture, ignore that you already have it in VRAM and re-fetch it again".
That is... pretty simple and I don't even need any change in the API for that

#

I wouldn't feel to happy about people pushing like 2k texture data every frame. But ogg video does do it the same way so blobdoggoshruggoogly

mental fulcrum
#

finally! A way to stream po... youtube directly to arma billboards.

full sonnet
#

Well webbrowser 😄 Though streaming is currently a bit annoying as you have to pipe all the data through script

full sonnet
lucid totem
#

gif delay is not respected, unacceptable

full sonnet
#

:poutcat:

#

I have the delay, but don't know what units, milliseconds probably?

lucid totem
#

you really have no tickets assigned today 😁 but joke aside, GG!!

full sonnet
#

Still not decided on that name...
I guess I'll change to RVExtensionFillTextureSource, that makes more sense

#

How to do video?

1️⃣
#(rgb,width,height,nMips)extension("RVExtensionName","UniqueName", 0, textureType)
and
#(rgb,width,height,nMips)extension("RVExtensionName","UniqueName", 1, textureType)

or

2️⃣
#(rgb,width,height,nMips)extension("RVExtensionName","UniqueName", textureType)
and
#(rgb,width,height,nMips)extensionVideo("RVExtensionName","UniqueName", textureType)

3️⃣
or extensionAnimated

#

Also a question would be if I make it more performant, but more annoying to use.
Animated textures will re-load every frame, which is somewhat expensive, both for CPU time but also because we need to copy the new data to GPU.

But, I can also make it literally ask the extension "Do you have a new frame for me?" every frame. Much less work if there is no frame. A bit of overhead if there is actually a frame, so we need two extension calls..

#

I probably really should do that asking thing. But more code to write for feature creep, ugh.

pallid cliff
#

Write a to-do comment and forget about itmeowsweats

tranquil sphinx
full sonnet
#

The extension can either change or not change the buffer,
Not an option.
If the function gets called, it must write new texture

tranquil sphinx
#

Ah

full sonnet
#

Lots to keep in mind with this though.

So implementing the "has update available" is definitely helpful. 0.011ms for that, instead of 0.1ms for doing an update.

And also, if you have multiple mip levels, it will load the current mip level AND the lower ones.
So it might run 4 updates at once.
So probably recommended to only have single mip, though then it will look crappy in the distance

Also due to reasons, the "has update available" check is called twice. I might fix that

lucid totem
#

does it play gifs that only repeat at at certain frame and not the whole gif? 😄

#

🚪💨

full sonnet
#

You can code whatever you want in your code

#

Mine only plays gifs that exactly match the texture size and loop infintely

full sonnet
umbral orchid
#

semi-related but i wanted to make a ticket about it but I can't really track down the actual cause of it

but the 'new' procedural texture stuff that got added a few versions back seem to have some weird errors regarding mip maps, with one bug causing an onscreen error regarding it

#

namely the font/text generation one

#

when it triggers you get an error like:

Warning Message: Cannot load mipmap ww2\spex\addons\core_t\fonts\altedin\altedin1451mittelschriftgepraegt100-01.paa

and the texture is full white from that point on unless you generate new text (can't be the same text)

if you PREGENERATE the text in like cutRsc or a RscText UI element it seems to avoid the error.

It's like the game is trying to render the texture before it's in vram

#

searching Cannot load mipmap on discord a few other people had this happen too

#

the other issue that i'm not sure is an actual issue but deliberate but
#(rgb,width,height,3)
width/height and the mipmap counts do nothing for text

#

it seems to render it the same no matter what

full sonnet
#

Yeah I saw that before, Also happens with UIs. For some reason it cannot load fonts sometimes, probably something related to threading.
I think it can only load them from main thread, but its not there when it tries to

umbral orchid
#

that'd explain it. the most reliable trigger I found was the complexity of scenes

like a vehicle with a texture applied in VR on its own generally wouldn't trigger it, but in a complex mission/real terrain it would almost always trigger

full sonnet
#

It happens when the texture is not in cache.
Which happens on first load, or because it was unloaded because of VRAM needs

scarlet root
#

would class PreloadTextures work? (for the paa) [CfgFontFamilies seems not preloaded/cached - going by the slowFrameCaptures]

full sonnet
#

Probably yeah

strong rose
full sonnet
#

nu

ocean sail
#

I'd like to ask about squad.xml images, they glitch in the shadow. Just like Unit Insignias without the material on unit's uniform. q Can the squad logo apply the material to get rid of this?
I tried do↓ but no changes

player setObjectMaterial ["clan","\A3\Ui_f\data\GUI\Cfg\UnitInsignia\default_insignia.rvmat"]

https://feedback.bistudio.com/T194406

strong rose
full sonnet
#

Are there any jets that have pylon bays that open and extend outwards?
The black wasp has bomb bays.

But I'm looking for something where the flap opens, and then some missile holder telescopes/extends outwards, before firing the missile. Is that a thing?

I guess not because pylons themselves don't have an animation source for how opened the bay is 🤔

Is bay opening generally just a door opening up?

umbral orchid
#

i think so but like I used them for the bomb trigger covers in the cockpit

#

the bay animation I mean

#

doesn't the uhhh, blackfoot? the nato attack helicopter have bays that open up

#

and fold out

#

idk if it has pylons tho

full sonnet
#

Yeah, but thats also the flap opening thing.
We have a note "animated pylons such as F22 LAU-141, LAU-142"
Which if I see this right, open the bay door, and then slowly extend the missile holder/pylonPod downwards.

So the pylon itself is animated,

#

pylonReadyPos is a animation source in the vehicle.. But.. That seems a bit useless.
Because the pylon pod itself would be animated, and the vehicle doesn't know where it has what pods.
And the pod doesn't have access to that animation source 😄

umbral orchid
full sonnet
#

But how does the vehicle know that you have a LAU-142 pylon pod attached to a specific slot. Instead of for example a AGM missile that doesn't have animated extending

#

Or is the LAU-142 part of the holder/hardpoint pard, with only the pod then attached onto it?

umbral orchid
#

oh do you mean like, a pylon proxy that only animates when a specific weapon is mounted

full sonnet
#

I mean the pylon pod itself. (I hate this ambiguous naming)

The proxy attached onto the pylon, animating itself

#

This.
Top bar is the plane with its hardpoint.
The middle part, and the missile are part of the pylon pod proxy.
The middle part would animate outwards, before shooting the missile

#

I guess yeah you could just make the top AND the middle part be on the plane itself.
And only attach the missile as a pod to it

umbral orchid
#

oh right. i forgot that it works like that where you have the proxy on the vehicle, and then a proxy for the physical pylon, and that has proxies for the missiles

#

uhhh yeah I don't think it's possible to do that except by having the pylon pod itself part of the plane

#

instead of swappable

full sonnet
#

The confusing thing is, pylonReadyPos is simulated by the pylon proxy itself, but its not accessible to the proxy.

the bay opening is simulated by the vehicle, and accessible by the vehicle model.
But the pod "readying" is simulated by the pod, but only accessible to the vehicle.

But the pylonReadyTime.. is configured in the vehicle notlikemeow notlikemeowcry

#

I'm trying to figure out if its part of the vehicle holding the pod, or the pod itself. And I'm getting conflicting signals here.

It looks like the intention is it being part of the vehicle.
It is just added ontop of bay opening, first open bay, then ready pylon, then fire.
But if its just two things belonging together, why was the simulation for it pulled apart 😄

Probably because non-bay pylons can also have this 🤔

viscid onyx
full sonnet
#

Ah I see yeah, that seems to be it.
But also seems a bit.. redundant.
They could've just used the bay opening animation source for both 🤔

#

Nevermind, they ARE using the bay opening animation source for both.

viscid onyx
#

I think the Shikra's left/right bays also do this, could check them in case they did it differently between jets

full sonnet
#

Yeah its the same, thanks

#

Also interesting that on both planes, they keep the bays open even after firing empty.
Would think you'd close them again for aerodynamics

umbral orchid
#

and stealth lol

full sonnet
#

lol.. that's a bug.
The bay opening/closing simulation only runs when there's a magazine on the pylon.
But after you shoot out the last missile, its gone.
It has a bay closing delay configured, but it just never runs.

green summit
full sonnet
#

Nevermind thats a bug that I just introduced.
Good that I test things meowsweats

full sonnet
#

Does anyone know if pylons actually influence mass/center of mass?
I think they don't 🤔 I didn't see any code to do that

harsh orbit
#

they don't

#

and they should not

halcyon moth
#

How to make AIs fly even worse :P

green summit
halcyon moth
#

Arguable. Have you tried CUP planes?

harsh orbit
signal edge
#

should i put in a ticket for the following?
i created an object that is just a flat floor texture for the ground but i set it to be retexturable with the setobjecttexture command but it doesn't doesn't change when i tried it. is this a bug?

ruby edge
full sonnet
#

Aha. Pylons do influence mass, but only on Advanced helicoptersim.
That one accounts for the mass of all magazines in the vehicle, and as pylons are magazines.. tadaa.

full sonnet
#

Except one small teeny tiny flaw....
CfgMagazines Default adds weight parameter.
CA_Magazine however, adds mass parameter.

And the engine reads the .... weight parameter and puts it into _mass for magazines.
And the engine also reads mass and puts it into a different _mass for "Mass Objects".
So actually magazines have two mass variables, and they are the same name, just one is in a parent class.

So there comes the fun. Magazines mix setting mass or weight to a value.
Infantry carried magazines use mass
But vehicle magazines generally use weight
Except pylons, which are vehicle magazines, but use mass

The pylon "maxWeight" parameter, checks the one that corresponds to the mass config entry. So so far all correct.

But the weight calculations for helicopters, to calculate how much their ammo weighs, only uses the value from the weight config entry. Which pylon magazines are not using, they use mass. So for helicopter ammo weight calculations, all pylons weigh 0.

#

The "weight" mass type value, is actually only used by 4 things in engine code.
3 of them are disabled VBS code. One is the Advanced helisim ammo weight calculation..

So in short.
CfgMagazines weight is only used for helisim weight simulation.
And mass is used for everything else.

feral tangle
#

Is this mass actually mass though? I know in other contexts in the engine that doesn't seem to be the case.

full sonnet
#

That mass is used for soldier weight calculation for fatigue and in inventory code

feral tangle
#

I see.

#

In kg one would hope.

lucid totem
#

not pounds plz

feral tangle
#

Not that I have ever really come across units written in documentation for these types of variables...

full sonnet
#

VBS code implies its in kg but.. I'm not so sure about that..
Its the mass for inventory items, which we know is not in kg

#

5000rnd 7.62x51 belt, weighs 128, but has a mass of 8
20rnd 762x51 magazine, weighs 0, but has a mass of 12.

That doesn't add up either way.
Its just made up numbers 😄

feral tangle
#

I recall similar issues with defining vehicle masses in both config and model named properties during SPE development.

#

Where our vehicle guys plugged in real mass values, but they behaved wildly in game and always had to be changed until things felt right.

umbral orchid
#

mass for infantry is an amalgamation of volume and weight and isn't any standard unit of measurement

full sonnet
#

The only way to find out how much fuel a vehicle actually has, in liters.
Is to read the "fuelCapacity" config entry of it, and multiply it by fuel script command?

I can't find another way, and that seems annoying meowsweats

#

But fuelCapacity is atleast nice that its real units, 242 for little bird, little bird has 240L tank

tall pumice
#

now the question is, do a3 vehicles use real fuel capacity values or are all except the mentioned little bird just made up 😄

full sonnet
#

I only checked that one 🤣

scarlet root
#

Fixed: Empty subgroups would not be removed from groups and could trigger errors

#

is there more info available on that somewhere?

#

subgroups meaning AI subgroups, right?

full sonnet
#

No. Yes

#

If you join a group member who used to have its own subgroup, into a different group.
The subgroup becomes empty and should be deleted, but it wasn't deleted.
It would run FSM, with null leader and no units

halcyon moth
#

What's an AI subgroup? :P

#

Is that when you have TARGET enabled and some of the group go walkabout?