#arma3_tools
1 messages ยท Page 37 of 1
tools update:
Eliteness:
pew: fixed crash when decoding pew object id's
added object example for each template clicked on
dll:
convertwrp: fix to pew column transform matrix (credit kwan)
rapify: fixed curly brace macro t = QUOTE({({1})}; call f); (credit @glossy inlet )
makepbo: creating a texheaders.bin is now silent. (credit @wind elm )
me: rapify: fixed potential error with #quoted strings in macros
I mean you cannot calculate weapon range and impact from just the weapon, the ammo matters too
@glossy inlet
Which is why i was looking for a formula or something similar. However this is the wrong channel for this, and im taking your advice about looking again at the wiki. Apparently i was looking at the wrong one before
Are there any special requirements for C# ? I get an "ErrorMessage: Buffer overrun detected when using extension testExtension" on a simple DLL
If I run the extension in KillzoneKids callExtension v2, all went fine
BattlEye is disabled for testing
whats the code of your simple dll
anyone elae have troubles to use the Game Updater with Steam Guard active?
thanks I'll test
then I could also just use the standard steam cli client. Should work the same. Not sure why I didn't think of it first. Thanks for your suggestions
@vague shard thanks, your linked app seems to work. However I had to switch the depot id to Arma 3 Content instead (107411) for it to make it work
I'm just gonna share my quick made script using kju's shared tool https://gist.github.com/Aebian/dddf239aab0ab41178b27c2fe1f7b6c4 for anyone else to use
np
small advertisement for it ๐
why use this?
- easy to configure due to good docu
- ensures download to work
- sync and mirror features
hi, has anybody experience with whitelisting Extensions with BattlEye? I tried following the instructions in the wiki (https://community.bistudio.com/wiki/Extensions#Getting_your_extension_whitelisted_by_BattlEye) but I did not get any response.
they are slow yes
ok. How slow? I send my email like 7 month ago. Is there still a chance that something will come out of this?
That sounds a bit too slow ๐
Just distribute your extension, and let many players attempt to load it
it will be submitted to battleye auto whitelisting thing
auto whitelisting?
Yes that
ok thx. I will keep trying^^
latest linux tarball of my tools now available (credit @surreal wolf )
@ dedmen for your full dump I assume I need to pack the config folder into a PBO and run it as a mod is that correct?
yep I was looking at https://github.com/dedmen/ArmaFullDump not releases. turning out to be not my month. thanks
probably easier to help if you state your problem
I guess he decided he doesn't need help anymore 
probably an a3lifer who didn't want to say exactly what he wanted or was doing in case some one else profited from it.
@native kiln I guess you already noticed but steamkit fixed the problem with CDN list 7 days ago
with unsupported type that was added, OpenCache
@scenic canopy can you link me the issue? cant seem to rememeber the issue youre referring to
edit: i see now
Someone here experienced in Bison syntax file debugging? Got some nasty reduce reduce error
are dlls only loaded from the game dir/same folder as the exe, or is in a modfolder also valid?
extensions can (and should) be loaded from mod folders
Both location are taken into account when loading a dll
(mod directory and arma3.exe location)
@vague shard did you ever use steam cli with any other branches then default? https://i.imgur.com/Dj1Tiol.png
ive used it only for mod sync so far
ah, fair enough, probably the prof branch is on a different depot id. A autoselect of given depot id would be lit
@vague shard ah, the branches are called differently on steamcmd. Works with the values from https://steamdb.info/app/107410/depots/#branches
thanks for the tool once again ^^
its the same name, you used the password as branch name
it is not
not for steamcli
for steamcli the profiling branch name is profiling and the pw is CautionSpecialProfilingAndTestingBranchArma3 the depot id is 249503 where as public branch uses public as branch name and depot id is 104711 there
you should take another look at your image then
why should I? What is your point?
I got my issue solved as stated above kju's reply with correct use of the branch names and depot id's so I'm not sure what you mean by "look at your image"
yeah and?
I'm not sure what you want me to tell. The Branch is the branch name, not the branch password, that was the main issue. And of course the profiling branch is on another depot id
ยฏ_(ใ)_/ยฏ
everything works as expected, I don't get your point
The Branch is the branch name, not the branch password
Exactly thats his point
that still wouldn't make sense with his original reply. its the same name, you used the password as branch name when refering to https://community.bistudio.com/wiki/Arma_3_Steam_Branches wouldn't make sense, as the Main Branch e.g, is called public on steam and not main. Also I stated that I have fixed my issue before he replied, that is what caused my confusion with his reply
@dawn palm what's the meaning of duplicated physical lods please ?
duplicated physical lods 6 and 7, resolution 11000.0
It means duplicate lods
you have a ShadowBuffer at 11000 and a auto generated ShadowBuffer at 11000
There is no ShadowVolume 1000, ShadowVolume is from 10000-10999
11000-11999 is ShadowBuffer LODs
Object builder doesn't label them correctly
oook so shadowVolume 1000 is the source of this issue ?
what if I set 100 ?
is the number related to the draw distance ?
or would SV0, SV1 and SV2 work the same?
afaik the numbers are just for ordering. But not sure if their specific value also has a influence
Its possible that the check is in a way wrong right now as sbSource = explicit/shadow = hybrid combo used with tree rvmat shaders uses custom lods for those lod levels. I dont think they are automatically generated.
this is to get shadows with alpha transparent textures on them to work
Mikero afaik finds them after binarize, which auto generates them
And from above screenshot you can clearly see that the manually created ShadowBuffer LOD was not intended
Mikero afaik finds them after binarize,
correct
having the sbSource = explicit/shadow = hybrid properties solves the error message
But with probably not-expected/wanted outcome, in this case
it always depends on what you're doing. And if you get that error you are doing something wrong.
The solution can be one of two things, and it depends on what you wanted to do
Either you are missing the property, or you have a errornous lod.
yes those lods should be used only in conjunction with the explicit sbSource.
or just not used as binarize will generate them in some cases (Which I'd recommend to just do/leave if you don't want manual ones which most people probably don't)
in the case of transparency in textured shadow mesh you want/need them, in any other case, no
@glossy inlet does your script profiler also have to option to do text based output similar to perf I guess?
wait, I assumed you built the GUI yourself and with WPF but it's Tracy and seems to be able to run on Linux ^^
assuming the profiler itself works with wine/proton
๐
https://github.com/arma3/RV-Extension-Examples/blob/54b617e5e91ed66944f656654618ea83815ed9f9/c%23/native library/README.md
Daaang look at this, native linux/windows 64bit extensions in .NET in easy.
Finally someone making use of X39's example repo
https://github.com/arma3/RV-Extension-Examples
yup
got a PN on discord from him yesterday
will take care of it in a few mins
or more: you took care, waiting until he is back ๐
Feel free to review, you see sharper
quickly rushed over it yesterday from mobilephone
looked good all in all
nice ๐
https://github.com/arma3/RV-Extension-Examples/
Feel good that you contributed the ArmA community ๐
Please fix the name ๐
done
Now I want a net core wrapper for intercept xD
Please don't make me learn c++
For that, cpp will not Serve you well
Clr/cpp wrapper would be mandatory
I might craft some sqf-vm extension crap someday though ๐ ๐
Writing your extensions in the language you try to escape
Sqf
(blame @glossy inlet for that idea)
i had the idea from someone else i think ๐ค
It's sad that so few people code in Python here, I seem see mostly C# programmers ๐ฆ
(yes, I know your opinion on the matter, X39 ๐ )
Although I have to say that Dslyecxi praised my Pythia - Python extension for Arma, so these people do exist (although he said that he is not a Python programmer either)
I don't code in c# or dotNet. nor will I ever have a need to. I do code in a limited subset of c++ which avoids anything to do with templates. Nor do i agree with stroustroup's attempts to make c(++) into something it isn't. competing with a 'better' language like c# (which i personally have no use for). If it's not in the stdlib, ain't interested.
I mean, yes, there are a few @_veterans that code in C++. I know that you do, X39 and Dedmen(?) mainly use C/++. But other than that, my observation (which may very well be wrong) is that most people here seem to be using C# nowadays ๐ค
I doubt you're wrong Stack, Microsft is the dominant player for things-pc, but IBM would take them to the cleaners in mid and mainframes). But, they are required to broaden their horizons if they want to move easily between microsft and the penguin.
swift wrapper for intercept? ๐
personally, i code mostly in C# for work
C for private projects (my lang project yaoosl eg. i am trying to figure out the most efficient way to store a namespace for the runtime later)
C++ for everything where C is too cumbersome or that simply i do not plan to maybe support on weirdo chipsets
I used to do Java, now I'm doing a lot of c++ but very recently I looked into Rust and that's probably what I'm going to use in the future
Rust is literally like another world
new concepts, new syntax = bad adoption rate
which is what the reality shows
Java is part of the c family: a good language and a rival to c#. Both suffer from being not being universally available on any platform, and Java is proprietary.
it is only really used where NPEs and the corresponding security issues are a horrifying thing
Rust is literally like another world
new concepts, new syntax = bad adoption rate
But it also means that it can get rid of all the PITA traditional languages have and also address problems that have existed for decades
you can only do one of those things at a time
plus rust adds ontop of existing PITA a butload of new PITA crap that one not even can understand thanks to new syntax
SizeOf(int) big-endian/little endian
it is said that one needs a month at least to start get productive with rust
and that is with daily usage
which means most of the stuff one wrote can be thrown away ...
it is a shame that rust is actually so different as a language, but that is the main reason i never even bothered to look into rust itself
getting a hang of reading the syntax correctly and using it so that programs compile will already take me a year (as i am in no way starting to use rust as my everyday lang) and understanding everything else rust brings with it another year afterwards
But the HUGE plus is: Once the program compiles, it's a lot more likely to be correct.
What you save in time when programming in e.g. c++, you'll pay later when the thing starts to mis-behave at runtime. And probably that'll take even more time that it takes you to write the Rust code
never said that ain't true
which is why i said it is a shame rust tried to be different at every level
also, once you get the hang of rust, you can write programs as fast as with c++
so the only con is really that the learning curve was made, not by accident (though not with this in mind), too huge to make it commercially viable in every usecase
except you can still ignore all the safety checks in rust
The part about the learning curve is probably true, yes
so if you start adopting someones lib or other codebase you might be in for a treat ๐
except you can still ignore all the safety checks in rust
Well yeah - you can always break a program if you want to. The point is to avoid accidental breaking ^^
assembly hell alternative in rust?
more like "urgh, this error is so annoying, I'll just bypass it"
said no lazy dev ever!
which is the problem again with rust
you need to learn it to not break it by accident or lazyness
which is again, why rust will stay at a nishe
Actually I don't think so
static languages are on the rise at least, that's nice
even frontend oriented such as typescript
you mean statically typed languages?
I also don't think that the learning curve is so huge that it can't be tackled properly.
I'm still looking into it but from what I have seen so far, it's not that different. A bit of different syntax here and there and for everything else the compiler tells you then and there what the problem is (and how to fix it)
That's way better than any c++ error messages
if you talk about bare minimum rust, yes
easy to learn
essentially just swapping types to the end
if you talk about actual productive work with rust, ohhh boy .... lifetime management ftw
problem is that rust enforces a new concept and a new syntax
it is like you are being told "here is your aircraft, gimme your car"
and thats it
Well if you're coming from Java (or something like that) I think it's equally hard to learn about memory management ๐คทโโ๏ธ
So the switch to c++ is not easy either
which is also horrifying
a ton of programmers running around, not knowing anything about memory management with a GC destroying all their crap because they never bothered to understand how it works
yes, statically typed ๐
which brings me to the final point: The programming world is PITA and will stay PITA forever
need to continue working ๐
but leaving you with this gem:
while let Some(c) = line.chars() {
// ...
}```
Once you know what it does, it's actually really nice โ๏ธ
To get yet another c++ reference: If you're new to the language and see something like
if (auto test = myFunction()) {
// ...
}
that's about the same. You need to know the syntax and the idoms that are used in a language to understand it ๐คท
depending on what funny stuff that function returns ๐
it's a lot more likely to be correct.
Well maybe no off by one's, buffer overflows and the likes. Which.. if you use proper structures/containers in C++ is also not an issue there.
Other logic bugs will still happen just as much in rust as elsewhere, and these are the ones you're usually fixing and having a hard time debugging.
Only thing that puts me off of rust so far is missing librarys. Basically everything has a C/C++/C# library.
That will just take more time for rust.
with the above in mind I always loved Perl's definition of zero.
'we hold all forms of zero, null, nil, nullptr, to be born equal as a zero'
Plus the big one: No race-conditions data-races
For the libraries: Yeah that'll come. But I'm actually amazed by how many there are already
Plus the big one: No race-conditions
If Arma had no race conditions I could easily make it run at 120fps ๐
Arma 4 written in Rust confirmed!
nah, version 9.99 of enfusion.
https://doc.rust-lang.org/nomicon/races.html#:~:text=Data Races and Race Conditions,one of them is unsynchronized
unless i missunderstood something, that datarace "prevention" is just the same as with c++s atomic
The Dark Arts of Advanced and Unsafe Rust Programming
Now I want a net core wrapper for intercept xD
Please don't make me learn c++
@gritty radish
there was , a long time ago, someone who tried to do something similiar.. https://github.com/Cloudhax23/InterSharp
It is useless to state how it ended..
However Rust does not prevent general race conditions.
This is pretty fundamentally impossible, and probably honestly undesirable. Your hardware is racy, your OS is racy, the other programs on your computer are racy, and the world this all runs in is racy. Any system that could genuinely claim to prevent all race conditions would be pretty awful to use, if not just incorrect.
So well... Basically still race conditions then. Unless you write correct/good code
I used the wrong term above. It prevents data races
Not race conditions
@nocturne basin you did miss something: std::atomic happens at runtime while Rust's guarantees work out at compile time only
atomic cannot happen at runtime
otherwise it would not be atomic
You can make a proper C# wrapper for intercept relatively easily.
You need a CLR inbetween, which has functions for converting the native types (string, containers, object references, config n such) to re-implemented C# types which is quite a bit of work.
Then you need to reimplement all function wrappers (the biggest part of intercept) and inside them convert back and forth between C# and native type (which probably costs you a heckton of performance and you might aswell write SQF at that point)
Or... instead of converting native<->.NET, you instead do the data handling in CLR and just offer C# methods on all the types to manipulate them. Still have to reimplement all the... hundreds? of wrappers
2587 wrappers as of 1.96
std::atomic wraps the access in a mutex if it's not an atomic operation leading to it being resolved at runtime
Because you can't just magically make each operation atomic at compile time
the CLR wrapper should be pretty fast tbh (thanks to compiler magix)
exact overhead could be measured using SQF-VM and its CLR wrapper if one wants to test the introduced
what do you think is rust doing, the moment no native instruction is available?
it cannot add some magic assembly instruction that fixes all problems
if you work with threads, you need to sync them
no language can fix that for you
Rust doesn't claim to make operations atomic. It just doesn't allow code that can lead to data races by using a very strict concept of ownership and borrowing
That's the beauty
two people cannot fiddle with the same thing at the same time, cuz only one peep owns it
I guess?
pretty much
@glossy inlet do you think that the CoreRT project already did anything of what you stated above? (Converted native types, mainly)
Well it surely didn't take care of the intercept/arma types
But maybe it took care of the primitives type, maybe D:
maybe it can be used for such.
But intercept has exact memory layout requirements. In some places even a single bit of padding being added would break it
So if you can define data structures there, and it can convert them to native layout for you, it would need to really be exact
CLR primitives are C++ Primitives more or less
only when classes or structs come in play the stuff gets difficult
https://github.com/SQFvm/ClrBridge/blob/master/ClrVirtualmachine.h#L90
https://github.com/SQFvm/ClrBridge/blob/master/ClrVirtualmachine.h#L132-L148
the relevant two things
would need to be done for pretty much all intercept related reference types
Personally I thought that this ability to compile directly to native code would have changed something for what concerns both net core and intercept, but i guess it didn't
@glossy inlet yes exactly. Plus some rules for borrowing values in order to make the concept usable
Maybe it did, maybe it lets you combine what would've been a seperate CLR library, directly into the C# code and make it compile down to the same thing
Yeah technically it is possible to combine existing stuff written in c/cpp and c# code (using corert), and compile to something that is native
Hi. I'm not sure if this is correct place to ask, but seems it is.
- Is there any list of error codes for callExtension checker by @stray galleon
- Is there any performance difference DLL in C# (DLLExport UnmanagedExports) vs native C++?
- There are theoretical performace differences, but you can totally ignore those given that they are not noticeable when comparing it to the actual workload you want to perform. Choose which of the languages offers you the best tools to achieve your goal. If you are not familiar with c++, C# and its default and nuget packages will make it easier to perform complex tasks, where as c++ will ask you to do everything and has 0 quality of life wrappers to offer for you. But with C++ you have more control over what is happening. If you dll should do things like, query a DB, write a text file, make some api call to some website or what ever, go with c#.
the only c++ dll i would ever consider would be if you do COMPLEX simulations or libraries and interfaces you want to use ONLY work with C++
I confirm the above. I've been writing Python arma extensions and in regular usage (that is, if you're not planning to call the extension 100 times within a frame), it's negligible
I ask because currently I have extension which do some magic and export JSON file. Every call take ~35-50ms. I think this is too much. So I need to rewrite it. It was written in C#.
make it asynchronous?
@meager surge see this: http://killzonekid.com/arma-scripting-tutorials-how-to-make-arma-extension-part-4/ (asynchronous extensions, you'll have to rewrite the code to C#)
(or you can also use extension callbacks to call SQF code back when you're done; they were not yet implemented when KK wrote the article)
And to be fair... if you're calling it on the server and once every minute (or maybe even every 10 seconds), then literally no one will notice that it's taking 50ms ๐
make it asynchronous?
maybe. but first I need to select language. And understand what Err:126 mean in checker to be able to test extension without arma
FYI: all the cool kids now use https://github.com/lucasg/Dependencies , instead of the old Dependency Walker ๐
i really need to get more people using SQF-VM for extension development ... i mean, why use some barebones implementation of some SQF operators if you can have the plethora already available in SQF-VM?
Not trying to be disrespectful to your work but why use SQF when you can use a regular programming language?
because you'll use the Arma extension from SQF anyway
SQF-VM is great if you want to do unit test, though
instead of kk's thing that does custom parsing and putting together and stuff.
You can just literally copy-paste the SQF code that you already use to call the extension from within Arma, just without arma
Oh sorry, I understood that the point above was to write extensions in SQF instead of another language, silly me ๐คฆโโ๏ธ
nah that was the other completely different thing we talked about yesterday or so
brett's rust wrapper for writing extensions works very nice too
i really need to get more people using SQF-VM for extension development ... i mean, why use some barebones implementation of some SQF operators if you can have the plethora already available in SQF-VM?
is there any tutorial or may be even video how to use it? (Something more detailed than "Double click on exe file")
double click on exe file.
Then you can run any sqf code. Put down your callExtension, it will call your extension
yeah. all my attempts failed on NOT IMPLEMENTED 
๐ค
what code are you actually trying to run there
callExtension definitely is implemented
I don't remember alredy. Even 13 chars from getPlayerUID not implemented
well there is no getPlayerUID when you don't have a player, but i guess adding a placeholder would be easy
there is other commands that want some environment but it does not exist.
nearEntities, cursorObject as an example. So to test code I need to create dummy placeholders for them?
if you deem them mandatory for your extension and they are not required, yes
you may also add them to the SQF-VM wishlist so i can implement them
This command is blocking, meaning that the game will wait for the extension to return before continuing. This may cause FPS drop if extension is not optimised. If extension takes too long, consider making asynchronous extension, where the result of the work of the extension is collected in a separate call.
Just a quick doubt: I was wondering if calling an extension on the server side actually locks the whole execution of other sqf scripts, or just the thread in which the callextension command is issued
You should make it async, any IO could be quite bad
Thank you both
So basically executing call extension in a spawned function doesn't change a thing, right?
I always had this doubt but really never asked about it
It does not. Executing "long" sqf command in spawned script also.
Despite the 3ms limit running "nearestObjects <whole_world>" would still freeze the game for much longer.
Because the scheduler can go to next script only AFTER command was executed not during the command execution.
Only spawning a new thread inside the extension will give you concurrency
Thank you, that's clear.
Meaning a new OS thread
Yep, I'm going to do it
has anyone made a better FSM editor by now? ๐
thought about it
but as nobody really uses FSM ... why bother to add another feature nobody uses to Arma.Studio?
already wrote some pretty decent editor for statemachine stuff at work
it ain't that complicated to rework it into arma ... but for what ๐คทโโ๏ธ those 2 people a year crafting a tiny state machine that they run the tool for 5 minutes?
binarise doesn't touch it, leaving the engine itself to strip away the fsm code nested in comments and then perform a rapify on what's left. The task being too difficult for bis to pass it thru cfgConvertFileChg first and therefore relieving the engine from doing so, each time every time it's invoked.
Oh, yes, i forgot that fsm rap text has trailing commas in it's arrays causing cfgConvert to crash. (sigh)
thought about it
but as nobody really uses FSM ... why bother to add another feature nobody uses to Arma.Studio?
- cries on his fsms scripts *
hello user 1/2 who uses it
๐ accurate tho
FSMs are ok and BI FSM editor is just fine.
I think so too, the editor does a decent job. The only criticisms are those above (which has little to do with the editor)
Yeah, once you know how to use it you can work fast in it.
It could use a dark mode tho ๐
why bother to add another feature nobody uses to Arma.Studio?
I think that for a hobby project doing or not doing something should depend on if you are personally interested in it or not
And speaking of editors and such... what if someone made behaviour tree framework with an editor... or combined some existing editor with an SQF implementation of it... ๐ค
just mod unreal engine and use its FSM stuff to export arma FSM's ๐
I have to say I find the FSM Editor very usable and useful...
Well, in fact - me too, if I ignore the fact that I don't like FSMs on their own, the editor itself is quite OK. Only sad thing is that I must type all the code straight in it so I can't easily run SQF-VM on it.
I think that for a hobby project doing or not doing something should depend on if you are personally interested in it or not
That works only for the first few years of your hobby project's lifetime ๐
I have to say I find the FSM Editor very usable and useful...
indeed it is funny
Hello everyone! Is this the channel to try to fix Arma 3 Tools? Getting a size pagination error when using Addon Builder or Binarize
should
@glossy inlet doesn't seem like wine plays nice with Intercept. Intercept itself loads fine but it can't find the ArmaScriptProfiler dlls apparently
๐ข
@hallow rapids did you lowercase the files? they need to be titleized
ArmaScriptProfiler_x64.dll or it wont work on a case sensitive fs
didn't
yep
tried with wine logs enabled?
so you can see what the dll loading thinks
it requires quite new c++ runtime
like latest c++ redist
don't see anything in the wine logs that's screaming like; hey there's an error
no references to ArmaScriptProfiler either though
this is proton/wine so it should be fine in terms of runtime and all
and it's writing messages from Intercept to the RPT
like this one: invoker::get().invoke_raw("diag_log", fmt::format("Intercept: Client plugin: {} was not found.", path_));
I guess I'll debug Intercept and see what it's actually doing when I've got a bit more time on my hands
you tried with WINEDEBUG and adequate logging right?
yep
don't have proton setup atm so can't test myself ๐ฆ
WINEDEBUG="+timestamp,+pid,+tid,+seh,+debugstr,+module"
which proton/wine are you running?
that one
proton 5.0 which is wine 5.0 I guess
@hallow rapids if you're talking with dedmen about the "finding code" that finds the open files, then I can confirm that my code that's very similar to the one intercept uses works with no problems with stock wine
(so that part of the intercept code should work too)
Welp, maybe another part doesn't work, then ๐
probably have to juggle around with some prefix stuff
Actually, i remembered that I was only testing with setting up a Frontline server so I'm talking about running arma3server.exe!
I have never succeeded at running the Arma client in wine (but my last tries have been a long time ago, to be fair)
probably won't work then due to the DX11 stuff
but now A3 is completely broken ๐
and you're using x64 version?
I don't remember where I've read that x64 wine is more problematic than the 32bit counterpart though ๐ค (might have been fake news)
probably won't work then due to the DX11 stuff
But I've seen reports of people successfully running the game with dxvk/proton
So maybe make sure that you can run the vanilla version first and THEN check with Intercept
I'm guessing you meant "without"?
Not sure what sentence you refer to but I've written what I meant, it seems
But I've seen reports of people successfully running the game with dxvk/proton
@karmic niche that one
the game is running fine with proton
been playing like that for a while
Arenโt there prebuilt test versions of proton?
as far as I know the hacky windows API intercept uses for finding files (same as ACRE) isn't implemented in wine
@glossy inlet seriously, we were able to run Pythia on wine, for Frontline, without any problems. I can look for the version that we were using and/or any forced native DLLs tomorrow.
I suspect the issue probably lays in some other part of the code
well I hear ACRE people repeatedly say it doesn't work ยฏ_(ใ)_/ยฏ
๐ค
Well I dunno. Works for me. Always had worked ๐ค
If we're talking about this part of the code, then I guarantee you that it works :)
https://github.com/overfl0/Pythia/blob/master/src/Pythia/FileHandles.cpp
Intercept doesn't compile with mingw-w64 so I'm giving up figuring it out for now :/
Arenโt there prebuilt test versions of proton?
@scenic canopy sorry meant Intercept ^^
ah ๐
it has github actions now so if you fork it any changes pushed will be automatically built and be available as artifacts for linux + windows on your fork
Github Action for sqf using sqf-vm would be neat
@scenic canopy ah sweet. I guess if all else fails I'll try that ๐
Github Action for sqf using sqf-vm would be neat
WIP-ish for a lint check by compiling with SQF-VM
Neat
just realized that what i was assuming to be a big-edian system, always was little edian ๐คฆโโ๏ธ๐
Getting pretty close with compiling Intercept with mingw but can't figure out out this one....
[100%] Linking CXX shared library intercept_x64.so
/usr/lib/gcc/x86_64-w64-mingw32/10.1.0/../../../../x86_64-w64-mingw32/bin/ld: ../extensions/extensions_static.a(extensions.cpp.o):/home/marcel/projects/intercept/src/host/extensions/extensions.cpp:34: undefined reference to `_ReturnAddress'
/usr/lib/gcc/x86_64-w64-mingw32/10.1.0/../../../../x86_64-w64-mingw32/bin/ld: ../extensions/extensions_static.a(signing.cpp.o): in function `intercept::cert::signing::verifyCert[abi:cxx11](std::basic_string_view<wchar_t, std::char_traits<wchar_t> >, intercept::types::r_string)':
/home/marcel/projects/intercept/src/host/extensions/signing.cpp:124: undefined reference to `__imp_CryptQueryObject'
tried -lxxxx -ing all the stuff in #pragma comment(lib, "xxxxx"); but nope
crypt32.lib?
tried linking it but doesn't seem to do much
oh found another CMakeLists.txt file with some compiler config stuff
that's better
now just this one left:
/usr/lib/gcc/x86_64-w64-mingw32/10.1.0/../../../../x86_64-w64-mingw32/bin/ld: ../extensions/extensions_static.a(extensions.cpp.o):/home/marcel/projects/intercept/src/host/extensions/extensions.cpp:34: undefined reference to `_ReturnAddress'
it's in rtcapi.h but no lib for it as far as I can tell
yay it built ๐
replaced _ReturnAddress with __builtin_return_address(0)
seems like a MSVC only thing
Ah yes, the joys of C++
why are you even compiling with mingw?
intercept needs to be binary compatible with Arma, and arma is built with MSVC/GCC.
So with mingw you might get some padding differences which might break it
Ah that's why it's not loading ๐
I'm on Linux and need a windows build to use with wine
mingw is technically gcc though
well the windows version is MSVC, not gcc ๐
they have different ways to do vtables, so that'll already break ya neck
I give up... D:\a\intercept\intercept\src\host\extensions\search.cpp(264,9): error C3861: 'ERROR': identifier not found [D:\a\intercept\intercept\build-win64\src\host\extensions\extensions_static.vcxproj]
๐
Looks like you have an ERROR in your code ๐
my code never has errors, only 'undocumented features'
TODOs
haaaaaaaaaaaaaaaaaaaa
is there a way to build pbos from source on Linux? I've heard of armake and the pbo tools of Mikero for Linux
Yes, you just answered your own question ๐
he he, any example for a hello world pbo or such?
I'm not the right person to ask (as i just know the PBO format - kinda - I'm not really into that part of modding) so someone else will have to point you the way.
In the meantime you can just pick the smallest PBO that you have in your arma installation, unpack it and look at what's inside
mikeros tools run on linux, but there is no binarize.exe on linux...
though I could build one ๐ค
makepbo (for linux) behaves identically as it's dos equivalent. Neither can binarise p3ds
ALL dos.exe files of my tools are >first< written for the penguin, with a wrapper to make them micro$oft compatible.
and a 'binarise.exe' would be exceptionally useful to me.
just toyed around with drone c/i and using that to start a nimitz or f-18 build would be great
just download the lib.so rar package for the penguin. which is available (and identical) for both subscribers and free.
in fact, it has just been updated.
this one? ```
depbo-tools-0.7.69$ ls lib/
libdepbo.so.0 libdepbo.so.0.7.69
I also recommend Armake as it's well written and maintained. I cannot make any sensible comment whether it's better or worse than my tools.
well written and maintained
armake1 last commit dec 2018, 20 issues, 5 open pull requests back till november 2018 and still not merged
armake2 last commit jul 2019, 20 issues, 4 open pull requests back till april 2019 and still not merged and with 0 comments from maintainer
k
HEMTT is the armake adaption that is mostly well maintained, and tries to fix the fixes that armake itself doesn't merge
perhaps i better say 'was' not 'is' ๐
there you go then. I just illustrated my ignorance. <grin>
I always thought that HEMTT was merely making use of armake instead of being an adaptation (you mean reimplementation?) ๐ค
so I use the original armake, binarize a p3d and then makepbo throws this: ```
internal error: lod size mismatch
ttt_cube.p3d:validating...p3d error Internally generated throw. See stderr for msg
Pbo: p3d error
checking.....
FYI: remember that there is armake and armake2. You may always want to test with "the other one"
trying armake2 now
lod size mismatch
is caused by the 4 byte sizeOf remaining data just before the vertex point flags (and all that follows) is not the same as the data actually read
hmm: ```
pbouser@tspindler-server:~$ armake2/target/debug/armake2 binarize ttt_cubesample/cube.p3d cube.p3d
error: binarize.exe is only available on windows. Use rapify to binarize configs.
(size mismatch is probably caused by counting the physx data at very end of file as being part of the LOD size)
HEMTT uses a fork of armake2
there's a WIP binarize process for the penguin as well
don't remember where that ended up though
you can use GitHub Actions / Circle CI / Azure DevOps Build pipelines / AppVeyor or any of the other Windows CI systems and use BI binarize there
ah, here's the mlod2odol, https://github.com/KoffeinFlummi/armake/blob/master/src/p3d.c#L1714
intercept needs to be binary compatible with Arma, and arma is built with MSVC/GCC.
So with mingw you might get some padding differences which might break it
@glossy inlet just for my curiosity; this mostly just applies to Intercept due to figuring out the addresses and what not for the in-engine commands right? Normally you'd be able to compile an extension with mingw?
as long as the C export is correct yes
I've used mingw for arma extensions in the past
Thank you sir dedmen
@dawn palm it seems like the Linux deWrp version is waaaaayyyy slower than on Windows
it takes 3+ minutes to dewrp -O ... Stratis
compared to 5-ish seconds with the (older) DeWrpDos.exe using wine
I don't remember waiting that long for deWrp on Windows either
CPU and disk usage is pretty much 0
ouch
my guess is it will be your memory or swap space. you need at least 3x sizeOf(wrp) for it to run efficiently
and five seconds for wrp to complete is a little on the low side
16 GB of ram should be plenty no? ๐
ram usage for deWrp is just 0.6% and CPU hovers somewhere between 1% and 3%
if I could get the Windows deWrp.exe (non dos) to work with wine I'd be happy as well but doesn't seem to work and crashes instantly ๐ฆ
will pass these messages on to Killswitch who maintains the penguin code.
๐ค
Found the problem...
Before
$ time dewrp -O Stratis.wrp >/dev/null 2>&1
real 3m4.280s
user 0m7.555s
sys 0m1.493s
After
$ time dewrp -O Stratis.wrp >/dev/null 2>&1
real 0m5.142s
user 0m5.011s
sys 0m0.063s
TODO: more testing...
No, it was just doing something when printing to stdout that does not need to be done in Linux
Suggestion for anyone skilled enough to script this, the supply drop option from Achilles but able to fit multiple vehicles into a single cargo vehicle
Like the British LCU mk10 can carry 3 APCs in game but the Achilles script will only load 1
Better ask this in #arma3_scripting
@glossy inlet ok thx for you help in Mai with the Extension whitelisting stuff ... it did work by just calling it again and again^^
@dawn palm I'm trying to read in a (convertwrp'ed) .pew file but for whatever reason my RvmatIndexTable is too big it seems as it's containing a bunch of 0 indexes at the end which isn't supposed to happen according to the wiki ๐ค
any clue what I'm doing wrong?
uint32_t tsx = xy->x >> layers[i].size_type;
uint32_t tsy = xy->y >> layers[i].size_type;
uint32_t table_size = tsx * tsy;
is the math
where xy is the terrain size (2048x2048)
@glossy inlet ๐
Also, supposedly layer sizetype is supposed to be between 0 and 2 but it's 3 for Stratis ๐
@hallow rapids it's possible i've broken something in the dll. try another smaller map to see what the result is.
just tried CUP Utes and it's asking for a table size of 16384 and at index 8704 I'm starting to get 0s in the table
it does seem that it reads the rest of the file correctly assuming it's supposed to end with 4 unnamed and empty selections
thank you. will look into this.
@dawn palm Just tested with a Stratis.pew someone got on Windows and that one seems fine
the Linux convertwrp seems faulty
different output
the Linux version also has the ObjectTemplate.roadFlag set to 1 but the Windows version doesn't ๐ข
could be because the Windows convertwrp is an older version
at least 4+ years
@surreal wolf ^
the latest windows version is 1.83 released on 12 dec 2019
Hi there... Hope this is the correct area to ask this question :)
Is it possible to enter a Server via a webpage in your browser?
I think you can launch a game through the steam url handler with parameters
Not sure though ^^
all info we could determine
but also be aware of:
https://feedback.bistudio.com/T126119
When you use steam://connect/<ip>:<port>/<password>/ launcher connects you to the server, but it will not fill the password for you.
You still have to fill the password yourself, correct behaviour would be that when launcher gets the password from steam browser protocol, it should be filled and you should be auto connected to the server.
I seem to be having a problem with the ARMA III Tools publisher...when I try to update an existing mod, it just...freezes and fails to respond. I tried running as admin; that isn't working. IT was functioning properly 2 days ago. I have a Windows 10 system and havent had any major bugs
use steamCMD instead: "%_APPPATH_STEAMCMD%\steamcmd.exe" +set_steam_guard_code %_SG_INTERNAL% +login %_USER_INTERNAL% %_PW_INTERNAL% +workshop_build_item "%_RELEASE_FILE_PATH%\%_RELEASE_FILE_WW2_LITE%.vdf" +quit
{
"appid" "107410"
"publishedfileid" "1996398183"
"contentfolder" "D:\kju\release\B\@WW2_LITE"
"previewfile" ""
"visibility" "1"
"title" "@WW2_LITE"
"description" ""
"changenote" ""
}
publisher also has a cmdline version
@hallow rapids
the dll has been fixed for convertwrp (credit killswitch)
"well when they're available anyway ^^"
Now. Please test.
๐
Hi, quick question: How do I sign my mod? I used DSUtils and it gave me a public and a private BIKEY. By putting the public BIKEY in the mod folder is that how I sign my mod?
nvm i just realised it
sorry for the stupid question
Are Poseidonโs tools still useful and good? Are they still updated?
its quite outdated now, old ST2 and outdated plugins
but you can get the same setup with plugins for ST3, Atom or VSCode
please make macro support a thing for vscode ๐
Wasnโt that already a thing with the extension written by armitxes ?
What macro support?
One of the sqf plugins (forgot its name) lists macros in the autofill thing (forgot the name for autofill thing)
Completion! Yes completion
Sqf language uploaded by Senfo does it
linter macro resolve support
It can go to macro definition sometimes if you mean this
no
What does it mean then? Linter macro resolve support?
Detect errors in macro arguments?
Hmm I use sqf vm for it. There is also an sqf vm plugin for VS Code.
I think he means that macros can be expanded to see what they are actually getting replaced with
no 
xD
GVAR(var) = 5
ace_stuff_var call func;
ERROR!! syntax error in line 1!!
ERROR!!!! undefined variable ace_stuff_var in line 2!!!!!
No you stupid, its right there in the macro. Just parse it correctly โฌโโฌ ใ( ใ-ใใ)
Aka the macro has to be expanded :P
yes
the current linter works for simple macros but doesn't work is you start using macros in macros.
#define GVAR(arg) myvariable_arg //can be parsed
#define QOUTE(arg) #arg
#define QGVAR(arg) QOUTE(GVAR(arg)) //doesn't work
Use sqf-vm to preparse
Be happy about nรถ more Problems
Should also be usable to expand macros on hover if Coded right Btw
the 1st line is faulty. the local variable 'arg' is not being used in the expression
i think and assume you meant 'myvariable_##arg'
the actual error message of course is solely dependent on the pre-processor of the compiler being used. including no error message at all.
testing.....
mh? ๐ค
I missinterpreted what you said at first, but its exactly what you said.
_ is not a word seperator, thus its just taken as one big "myvariable_arg" word withour any macro parameters inside it
Reminds me that I should add a Warning to sqfvm preproc if an arg is unused
It was just a quick example 
However the sqflint Plug-in for vscode would not have it detected
And i said, there shall be a ticket for it https://github.com/SQFvm/vm/issues/108 so that i can point at it and say "it is planned" soonโข๏ธ
i would love to see a better integration of sqfvm in vscode to highlight wrong lines in code directly
did you try the SQFVM plugin for it? ๐ค
The plugin has limited Support though
Yes I am just wondering if anyone has tried it at all
Got zero feedback about it so far
So I didn't update it much or anything
Yeah... Chances are, nobody really used it ๐ ๐
I have no idea if it's because I didn't finish it up until the end or people just misunderstood it or what exactly ๐คท
@cinder meteor yes i am using it right now
i mean it is cool to see it working as a command line output, but like i said, i would like to see it getting highlighted in code directly
Yeah I see
Let me check. I thought that there was problem matching implemented for it.
Soonโข๏ธ sqf-vm will be splitted up into separate components anyways
Which means that a specific vscode extension can be crafted
Yes you are right, problem matching (in-editor highlighting) is not implemented it seems ๐ค I forgot already if I even did it but it's not working anyway.
Next step language Server ๐คช ๐คช ๐คช
Hi there, I am having a few issues with setting up my development environment. I have installed the dev branch and am using arma3diag_x64.exe with the following arguments:
-skipIntro
-noSplash
-cpuCount=4
-malloc=tbb4malloc_bi_x64
-hugePages
-maxvram=3000
-showScriptErrors
-FilePatching
-mod=${workspaceFolder}\\@AH-64D Apache Longbow;I:\\Steam\\steamapps\\common\\Arma 3\\!Workshop\\@CBA_A3;I:\\Steam\\steamapps\\common\\Arma 3\\!Workshop\\@A3 Thermal Improvement
From my understanding, I should be able to reload the mod by running the following command:
diag_mergeConfigFile ["path\to\config.cpp"];
and restarting the scenario. I have had issue with not being able to recompile functions, when I enable recompile in a mission and use the function editor to recompile all, it doesn't change? Same with execVMed scripts.
Note: I didn't PBO the mod I am developing, it's using filepatching.
If this is the wrong channel, please let me know and I will fix that!
you initially have to start with a pbo, so that everything you did not alter is in there.
You need to enable recompile flag in CfgFunctions
oh?
In addition to a proper dev setup
Thank you for your help! So I need to add that recompile flag to CfgFunctions, I will do!
What steps are missing to make this a proper setup?
Files need to be in correct place. Config path is relative to Arma folder
Ah, my config path was not relative to the arma folder, in fact it wasn't even in the arma folder! I will change that. What is the correct place for the files?
Also, if it has to be relative, it may be worth editing what is on the wiki, as what it provides as an example is diag_mergeConfigFile ["O:\Arma3\A3\Stuff_F\config.cpp"]
Well if Arma is on O:/Arma3 (which it is in our dev setup) then that's correct
i think you are giving bad info here. files reference in arma are \absolute to the drive they are on.
model=\a3\some.p3d
must be P:\ a3 or O:\a3 in the above bad example
ok. then that's something i am definately not used to.
Okay, thank you. I will give it a go soon with this new information!
Thanks to the help of all you, I have made progress! Now I can update configs, but still unfortunately when I edit sqf files that are being edited using execVM, or functions (with the recompile flag enabled), the changes do not occur. Is there anything that has to be done to get this to work (with an addon, not a mission)
send the ingame path for your sqf file, and the out of game path where you are storing it and expecting it to be picked up by the game
I been trying to give the eden editor better tools so more people can create better content. I like to know what you think so far and what features you think can be useful. FlowGraph You create nodes which you connect together. A node is basically a function which can call on ...
I feel bad for him with the arma ui stuff ๐
Looks like a great concept to have a FSM like system for missions (eg. triggers)
doesnt seem like a fsm sort of thing
Looks cool but I would rather write SQF than use a flow graph ๐
But as a thing in itself it looks like a great achievement
I'd rather never look at sqf again, ever.
I also prefer writing code directly but I imagine that a lot of mission makers that aren't programmers will find this very useful
@glossy inlet The ingame path is called "\fza_ah64_controls\scripting\page_eng.sqf" and I have it at "I:\Steam\steamapps\common\Arma 3\A3\fza_ah64_controls\scripting\page_eng.sqf" on my machine
\A3\ but your mod doesn't have A3 in prefix
so thats wrong
You should have Arma 3\fza_ah64_controls
Ahh, okay. I will give that a go soon!
That has fixed it, thank you very much for helping me with it! Should definitely speed up my work!
will be interesting to see how you make the addon.
i've figured out that:
"I:\Steam\steamapps\common\Arma 3
becomes psuedo 'P:\ drive' for the purpose of accessing fza_ah64_controls
or stated in linux terms, the above becomes \
Arma just accesses files from working directory, like any other application does too if you use relative paths
no. it does not
the engine has no idea what a c:\my documents is.
it has NO drive: at all and everything inside begins as \
which is why you extract game data to a place like p:\ or z:\ to emulate what-the-engine-sees
k. whatever you say.
except for #includes there is no instance at all in the engine of relative addressing. Everything is absolute to \ . so much so that the \ is not normally required.
model=some\where.p3d;
and
model=\some\where.p3d ; // are identical in result
you are correct that for the above everything is relative to arma 3 \ folder because you have told the engine that this is the \root of all files.
because you have told the engine that this is the \root of all files.
working directory, like any other application does too if you use relative paths
put another way, when it comes to building the addon itself, it is not steam anything, nor arma 3,the world simply begins at \fza_ah64_controls
yeah. But we were talking about file patching.
And root is working directory, for file patching.
https://forums.bohemia.net/forums/topic/229820-eden-editor-flowgraph-inspector-and-tools/
@vague shard I don't even want to know how many hurdles you have to jump to make the thing inside the eden editor and I would suggest an external tool may be suited better, from what I gather the enduser mostly don't care if it is done in eden or outside. But it is only my opinion, also really like the idea (wanted to implement a node edtior thingi for some other stuff, because it is easier for non coders, but couldn't make it work, but I am also a complete coding novice)
@dusty walrus not my project. so best to share directly in the thread ๐
oh sorry overlooked that, sorry for the ping and thanks for the info
np
Is DeWRP a premium tool by Mikero or is it free?
All tools come with a free version that is less frequently updated
If you got send the source files you dont need dewrp
does someone have some A2S_RULES packet samples at hand by chance?
arma 3 specifically? or any game?
A3
trying to understand how do mod sync/matching with the data available, plus the new sqf commands to expose loaded mods (or rather the limits with optional mods, server mods, local mods, etc)
Stack will have some
zรกmฤrnรฝ: Stack will have some
lol, indeed ;)
Optional mods come from the signatures entry where they have to match the file name (NOT mod name!) of signatures for the mods (tbh I don't really remember the extension, what's important is that it's the file name)
But kju is asking because I have failed to answer his question in a timely manner (entirely my fault btw)
Server mods - you have no idea. That information is not passed to the client
u just too slow you Stack Overslow
I'm not claiming to know everything though, so if someone has a magic trick to get the list of optional mods from the server, then go ahead and type that here, please ๐
I don't know how any of that magic works. I only play with signature check disabled anyway
but there must be some reason the signature names are sent over query, so your thingy sounds plausible
// c++
struct type
{
unsigned short value;
type(unsigned short val) : value(val) {}
};
struct string : public type { string() : type(0 /* make this somehow non-user defined to prevent overriding but (type dependent)unique library (dynamic or static) wide */) {} };
struct integer : public type { integer() : type(1 /* make this somehow non-user defined to prevent overriding but (type dependent)unique library (dynamic or static) wide */) {} };```any ideas?
not quite sure what you mean.
to prevent overriding
make the variable private with only a getter?
struct boolean : public type { boolean() : type(1 /* "conflict" with integer */) {} };```
the above just serves as example ๐
trying to get rid of the enum for type in SQF-VM
and replace it with a more ... extensible way
so that i can split up SQF-VM properly (https://github.com/SQFvm/vm/issues/109)
why do you need types to be extendable?
SQF only has so many types
and can't people just define their own struct then? if they need a new type?
because i want to remove those things from the actual runtime
class type
{
protected:
unsigned short m_value;
static inline unsigned short s_type_value = 0;
type() {}
public:
auto operator<=>(const type& rhs) const = default;
};
template<typename T>
class type_t : public type
{
private:
static inline unsigned short s_local_type_value = 0;
public:
type_t()
{
if (s_local_type_value == 0) { s_local_type_value = ++s_type_value; }
m_value = s_local_type_value;
}
};
struct string : public type_t<string> { string() : type_t() {} };
struct integer : public type_t<integer> { integer() : type_t() {} };```
this ... works
auto operator<=>(const Point&) const = default; already coding in c++20? ๐
Yup ๐๐
Mayor Compilers are already Supporting it
Though... Removed it in sqf-vm actual implementation ๐ ๐
The expression a <=> b returns an object that compares <0 if a < b, compares >0 if a > b, and compares ==0 if a and b are equal/equivalent.
Wow I learned something new today ๐ฎ
Also had to understand it first ๐ ๐
The spaceship operator is essentially not usable in normal Code but eases the implementation of comparison operators greatly
With = default literally just implementing a default behavior ๐๐ comparing all against all
https://www.github.com/SQFvm/vm/tree/separation-of-concerns/src%2Fruntime%2Ftype.h Btw, this is what I settled with now
Accepting better ideas
The name of these operators are getting weirder everyday
Are you really still surprised, even after the "walrus operator" in Python? ๐
We wanna do Elvis operator someday
That's gonna take a lot of characters to type!
Are you really still surprised, even after the "walrus operator" in Python? ๐
@karmic niche
Exactly what i was thinking about actually! ๐
I just want a smooth operator ๐ฆ
Thinking of an automated one-click way to update mods on my server via FTP.
Is there such a solution? I'd like it to compare all mods it can find at the server with what I have in my local workshop folder and update those which have... mismatching date? No? Maybe there is a better way to compare mods? With a hash maybe?
On Linux I would suggest rsync, which allows you to only update new files (although I believe most FTP clients also have that feature by now).
Not sure if there's a Windows alternative though
Oh interesting! ๐ค Reminds me of FreeFileSync software I use to synchronize generic files (not related to FTP).
If I can reflect FTP into file system then this might work, right?
you could also look at https://rclone.org/ which is cross-platform, and let you do a lot of stuff, including syncing files with an external FTP server
Awesome ๐ฎ
and the rsync algorithm is actually that "good", that it will only update the parts which are different, instead of full files (no idea how, but it works great for massive backups)
Any idea how it performs comparison of files? I never considered how it can be done but I just hope it's not going to download the file entirely over FTP just to compare it
I believe it makes a checksum of chunks of each file, compares those, and if a single chunk is different it will only update that chunk (instead of the complete file).
For small updates on large amounts of data it's rather slow and traffic heavy (compared to just updating the changed files manually), but with larger changes it will be a lot faster.
If you have access to SSH on the server it will be even more optimized, but FTP works also
Yeah I have nothing except for FTP
Alternatively you could take a look at git-ftp (https://github.com/git-ftp/git-ftp), which basically creates a git repo on a FTP server.
I haven't used that myself, but I've heard colleagues liking it
Although that will most likely work with complete files, but works exactly as you would expect from git
Also interesting solution, thank you
@dawn palm Hi man I just wanted to say a huge thank you for your premium tools they are probably the best tools I have ever used and I would 100% recommend them to any developer. Thanks so much man for these tools!
@cinder meteor winSCP has also command line execution
didnt someone here use servers/cloud hosting with GPU for some automated A3 testing or similar? looking for some advice on the topic
That was @scenic canopy ๐
I have been using paperspace.com for DayZ devleopment. You have your own VM you can install steam and automation pipelines on. There are other options out there, but mayne failed to be able to launch RV and Enfusion engine because of hardware and driver requirements. You can even game on them, though the mouse movement is buggy at times cause of focus loss >.>
thanks! checking out
on a related note can one abuse one of those cloud gaming services (that allows steam install with mods and all) for such purpose too?
Unfortunetly not really. I tried but often mods are not allowed to be installed. also some services wipe the vm after you stop playing so you need to reinstall and download everything. for games that is np cause its bascially instant on 10G networking but mods is annoying to get running. Needless to say you got no way of running a batch or .sh on them
If it is just SQF-Related use SQF-VM ๐คช๐คช๐คช๐คช
can it read configs from pbo?
It has pbo Support in theory
Just that nobody ever added it to the actual vm
Aka: right now you need to unpack the Configs
Though that might change soonโข๏ธ
it has PBO reading classes, and it can read configs. But noone connected them together
I need an addon which can save and load arma strings in a file in key-value pairs, key is string, value is string too. Perhaps someone has written such a thing already?
ExtDB3 allows you to connect to a database to store anything you want.
https://community.bistudio.com/wiki/Arma_3:_Scripted_Database can store stuff in any namespace (although I'm sure there are better solutions)
other than that; afaik are there no mods which allow reading and writing files, especially not with BE support.
Or you can literally write that in 10 mins using Pythia ๐
But yeah, no BE support
As I understand, I just need to ask BE to approve my DLL. Also, is BE approval needed if it's a server-side addon?
BE won't even start the server if a DLL is loaded... which isn't allowed that is
if any dll is loaded? or any unsigned dll is loaded?
okay, then I just submit it to BE mail ๐คท or ask people to disable BE
so extDB3 is the most useful method to store data, especially server only
Or you can literally write that in 10 mins using Pythia ๐
I wanted to see how inconvenient is it to write arma extensions actually, never wrote one yet.
so extDB3 is the most useful method to store data, especially server only
but people need to mess with installation of SQL on their dedicated server, right? and some one people I've met barely know how to ifnd the RPT file on their server ๐คฃI'd rather have some addon which just requires installation like any other addon and nothing else.
if people can't even read simple instructions, are they even worth your mod? ๐
sure, my idea is to have them send me one file with their saved game for debug instead of whole varsarma3profile
but in short; BE support will be the biggest issue for anything that can read/write outside of the game/addon, and I even doubt it will be allowed at all
fine, then I ask them to disable it ๐คท
and telling people that BE can't be used (depending on use case) is probably worse... but that's my 2 cents
yeah I see, then they use the usual dumb way of storing data in arma :/
I mean I plan my SQF code to switch between those storage methods, if the addon is present
Wait wait, if you're doing something server-side you don't care about BE
BE will block loading dlls only on the client's machine
(that's what I always thought, at least ๐ค )
Grezvany13 said that BE on server won't let it load any DLLs
Fronline has been using Pythia (that's not BE whitelisted) on the server for years, so... ยฏ_(ใ)_/ยฏ
and you have BE enabled, right?
Is there even something like "enable BE" for servers in the config? I know that you can set "enforce BE on the client" in the server config but that's all

BattlEye = 1; Enables or disables the BattlEye anti-cheat engine. Default 0. - since 1.09 beta, in Arma 3 default is 1. Requires installed battleye on server and clients joining the server
I don't have access to our configs now, but we've always been running Pythia AND enforced BE for the clients
Maybe that "battleye on the server" just means something that will communicate with BE on the clients, not interfere with dll loading on the server
@dusky dune ?
I mean, use whatever you want, ExtDB3 could be a good solution. I'm just referring to Pythia as an extension that I 120% know is blocked by BE ๐
Also, is BE approval needed if it's a server-side addon?
no its not @cinder meteor
BE won't even start the server if a DLL is loaded...
Thats wrong @tawny island
BE does not care about DLLs on the server.
@cinder meteor inidb?
I tried that long time ago. It has limits on string length and it has some special characters which it can't handle.
1 or 2?
?
version? no idea, it was such a long time ago
it was inidbi2
maybe it doesn't have the max size restrictions any more?
Well... crashing the game is a good way to start writing an extension ๐คฃ
ErrorMessage: Buffer overrun detected when using extension 'filext'
anyone knows if you can delete the steam workshop depot cache and steam will only recreate the necessary one (aka it will get smaller)?
well is it diffs or just the most recent data?
I wonder, how would you implement data storage for this addon I discussed above?
So, I need to store key, value pairs in the file, both key and value are a string. I think I could just store it in format key<null>value<null> for each pair, where <null> is just 0-character. I don't think that there is a better and easier way really.
YAML or JSON would make it easy to view and edit in most editors
Good idea, but then I also need to think of escaping and unescaping characters which must be escaped in JSON
which addon above?
i mean i dont know how fast it would be, but just using the python stuff works pretty well without really problems
Any sane json or yaml library will deal with the escaping
Ok I see now, Python would have been a better choice, yes, it has good JSON capabilities
Any of the common languages will
Most high level languages ship with built in json and/or yaml support
I don't think that it's cool that I can't allocate a string of whatever size I want and pass it to arma as a return value :(
Why was it done this way? (char* output is provided by the game, int outputSize is the max amount of bytes I can write there)
int RVExtensionArgs(char *output, int outputSize, const char *function, const char **argv, int argc);
To avoid memory leaks I guess?
I don't think that it's cool that I can't allocate a string of whatever size I want and pass it to arma as a return value ๐ฆ
you can do that
use extension callback, they take arbitrary result link
To avoid memory leaks I guess?
no, performance, buffers stuff.
use extension callback, they take arbitrary result link
it's for asynchronous things though, my design is synchronous ๐คท
no, performance, buffers stuff.
looks strange, so the game always allocates some 20 kilobytes just for the case that I need to return this amount of data ๐คท
my design is synchronous
waitUntil ๐
so the game always allocates some 20 kilobytes just for the case that I need to return this amount of data
yep. Thats why its kept so "small"
Wouldn't it make more sense to allocate that space only when I need to return data? ๐คท I mean, does it matter if I allocate memory or arma?
yes it does matter who allocates it
you can't free memory that arma allocated, and arma can't free memory that you allocated
oh really ๐ฆ I didn't know this
why does extension callExtension [function, arguments] need to convert a string argument to a string? It makes sense if I passed a number as argument, but doing a str _valueWhichIsString makes no sense, or does it?
need to convert a string argument to a string?
what?
"filext" callExtension ["loopback", ["myString"]];
it returned ["""myString""",0,0]
so before calling my code, it coverts every argument into argument array to a string, even a string
in this example, "loopback" just returns to arma whatever was passed to it
strcpy_s(output, outputSize-1, argv[0]);
๐ค
I believe "quotes" are there to prevent any chance of 'thing' being misinterpreted as a #define
it's not just quotes, it does proper escaping of all data inside, just like str "whatever" would do in SQF
well sqf itself requires "quotes" to denote strings.
It doesn't add quotes to my function name though which is a string already, so I don't understand why would it do it for arguments
thing = __EVAL ("one" + "two" + "three");
yep
it gets every value as text, which for string escapes it again.
Not sure if thats a bug @stray galleon
callExtension args all arguments get converted to string, but string isn't taken 1-1 but instead gets its quotes escaped.
even if its a bug, probably too late now
I wonder if anyone's code relies on this ๐คฃ
probably everyone's who's passing strings through there
well, I'll just have to call compile it on the way back then
or parsesimplearray [_value] select 0
why solve character escaping problem if arma can equally solve it itself natively
because the arma thing you want to do is slower
and your extension code is "native" too
I meant that that solution is native to arma
I don't really know how hard destringification is ๐ค do I just convert each "" into " ๐คท
"""myString"""
this is perfectly legal syntax where you want the output to retain the quotes. example (in general)
["Hello World"]
will display "Hello World"
[Hello World]
will display Hello World
No idea what you're talking mikero.
You can just copy paste this https://github.com/dedmen/armake/blob/cpp/src/utils.cpp#L351
Probably not the most efficient tho I'd assume
["this is a quote"]
[this is not a quote]
Or I could just... pass data through function argument, and pass function name through argv[0]
๐คฃ
Yes, perfect, this is an arma solution to the problem
No, it makes game crash at around 100 kilobytes of passed data Most likely it's because of my code ๐คฆ - yes it works past 1 megabyte of characters 
@glossy inlet the reason is that you can check if an argument is a string or not, if its a string it starts with quotes
otherwise a string and a number would be the same
but it's a bit odd yes
normally you would know what arguments you're getting
but its nice for a generic function
i.e. """5""" vs "5"
output needs to be in the same format to use parseSimpleArray on it I guess
so it's consistent with that as well
strings are "strings" in sqf because there's no other way to detect the difference between GetObject and "GetObject", or "and" and and, nor any other stupid bloody verb-operator they use, of which there are hundreds which are regulatly added to whenever it suits them.
any other language, all this crap would be placed in a library and accessed by calls, but bis in their wisdom choose to make each one of them part of the formal syntax of the language.
Think I had some very horrible string to SQF types converter I made ages ago somewhere to pretty much fix those things ๐ค
@glossy inlet the reason is that you can check if an argument is a string or not, if its a string it starts with quotes
@scenic canopy
You have string, number, bool.
Everything that's not number or bool will be a string. Also with a extension you usually specified or know what types of arguments you expect.
So don't really see a reason to need to escape strings.
If you want strings as arguments, then you now have to unescape them manually
And if you wanted them escaped, you could just do that before calling the extension.
https://github.com/X39/sqfParser
Yeah... Think I should really rewrite it
Probably will do it tomorrow
to create prepared statements for database it could be useful to deduce the type
just send the query and all values in a single callExtension
@glossy inlet the reason is that you can check if an argument is a string or not, if its a string it starts with quotes
Then type data should have been provided explicitly. And it's not worth to iterate whole string to provide type anyway. Added quote is a by-product of a totally unrelated operation IMO.
helpful in your case since now a value can be either string or number automatically ๐
For my specific case, I convert data to string format already to make it compatible with any storage which can store strings, also to make it occupy less space in profileNamespace ๐คท
But for the general case... I don't know?
if you want to use json or yaml you should preferably handle the data as strings, numbers and booleans
I am not arguing of that. I am saying that arma stringifies my passed string. Then, irrelevant of the form I store it (JSON library, or raw data in file), the value I get back after reading the file is stringified one more time, so to get it back what I sent to my addon, I must de-stringify it again.
I know, I understand it. I'd prefer to get same string back. ๐คท
I also must encode the function somewhere. But don't worry, I've found my solution already, second syntax and data passed through function
why not just use the first one then?
How do I encode function name? I must pass both function name and a huge string to my addon.
I could reserve some static amount of space for storing function name there at the start of string, but why if second way works as well ๐คท
it won't be str'ed like the args for alternative syntax
but alt syntax gives multiple arguments...
if (strcmp(argv[0], "\"open\"") == 0) { currently I use this xD
function is not str'ed
only args
seems like a backwards approach instead of embracing the str'ed values in args
why backwards?
and same with return type
if you have open as the function you can just check for if (strcmp(function, "open") == 0)
"myext" callExtension ["some huge string which I do not want to stringify please!!", ["set", "myfile.log", "myVarName"]]
You see, I pass data (big string) through function argument there
or use std::string and just plain comparison
https://github.com/overfl0/Armaclass is there any lib like this but for c# ?
@nocturne basin does the current sqfvm build has trouble with including files one layer up?
i get this error on the linux binary but not on the windows one: " Failed to include '..\script_common.hpp' into file '/mnt/c/Users/Dragon/SQF-VM - Linux - x64/Corescripts/functions/logging/script_component.hpp] ':File Not Found"
also, doesn't the application provide exit codes if detecting errors?
@gritty radish no profanity.
my pboproject suddently doesn't open anymore
somehow my pc removed vcruntime140_1.dll
any idea how to reinstall it?
(re)install Microsoft Visual C++ 2015 - 2019 Redistributable
that did it thanks @tawny island
didn't feel like trusting those "dll download" sites
Oh? You're saying that one of your car engine's pistons is broken? Nah, don't go to the car mechanic! Don't replace the engine either. <opens an old and dirty chest> Hmm... Where did I put it? Oh, here! Take this spare generic piston that will totally work for you!
@gritty radish have you enabled the upper dir for access?
https://github.com/overfl0/Armaclass is there any lib like this but for c# ?
@neon flax
I wrote something in Java a while ago. While it is obviously not c# I guess Java and C# are close enough for it to be easily ported if you want to.
Iirc class parsing was a bit buggy though... I mainly used it to read PBOs - you'll have to check whether it works for you.
Head made one for C#
@neon flax
Thanks guys.
my dll contains an API of well maintained c++ functions to retrieve/add/alter any part of a pbo irrespective of which engine it was/is targetted for. Using it is documented in, well, hell, the documentation accompanying the dll.
being c++ it is as usable in the penguin as it is in windoze without further fuss.
The api is available both free and subscriber and is compatible to both.
I'm more interested in config manipulation only, wanted to use it for server config tool.
callExtension args all arguments get converted to string, but string isn't taken 1-1 but instead gets its quotes escaped. @glossy inlet not sure what you mean
The same API is used for rap/derap and all other file formats.
The dll treats all paramfiles both binarised and plain, as being born equal. There is no difference internally between the two.
@neon flax some of the server admin tools like FAST2 or FASTER contains C# classes for all kinds of server configs
ain't both tools written in vb.net?
@nocturne basin if you mean permissions on the filesystem, yes
FASTER is C#
i mean literally have you allowed that directory for SQF-VM to be navigated into @gritty radish ๐ i guess at best this is continued on the SQF-VM discord though
i will find my way soon 
I am working on an config database tool, and wanted to ask, is there a reason why enoch content isn't unpacked with arma3p? or at least isn't findable? Or should it be accessible?
to explain, the tool will use the icon path inside the config to show an preview picture, everything is working except the icons for enoch content
ok, thanks!
@neon flax sorry, I was thinking about serverify-a3, https://github.com/igorkis-scrts/Serverify-A3
it (mostly) uses the arma files as persistent storage
callExtension args all arguments get converted to string, but string isn't taken 1-1 but instead gets its quotes escaped.@glossy inlet not sure what you mean
@stray galleon
string passed as an argument to alt variant of callExtension gets stringified one more time. So If I pass an arma string with valuemyStuff, inside the extension I get"myStuff". As if it was passed throughstrSQF command.
Just copy-paste of my yesterday's message explaining this:
"filext" callExtension ["loopback", ["myString"]];
it returned ["""myString""",0,0]
so before calling my code, it coverts every argument into argument array to a string, even a string
in this example, "loopback" just returns to arma whatever was passed to it
strcpy_s(output, outputSize-1, argv[0]);
The same API is used for rap/derap and all other file formats.
no its not
The dll treats all paramfiles both binarised and plain
thats completely offtopic @dawn palm
can you avoid steam redownloading all data (when the mod id has changed), if you put the old data into "downloading" (that temp folder) or by other means?
@cinder meteor intended. also you can detect string type inside extension by checking if 1st char is ". easy to strip off easy to add back.
@stray galleon but if I store that result, I must unstringify it on the way back or elsewhere. Double waste of resources. And it's not like I'd need to just remove " at end and start, but also unescape double quotes and such
Anyway good to know that it's the intended behaviour 
it is supposed to be used with parseSimpleArray so you return array then you donโt need to do anything
if you want to send one string and return one string there is overload for this that doesnโt stringnify anything
https://github.com/X39/sqfParser/blob/master/sqf-parser/value.h
sooooo .... i got some ambiguity
if you want send array and return array then use args syntax
Has anything changed with parseSimpleArray regarding speed or is it still the case that sometimes call compile is faster? (AFAIR this was the case 2 years ago)
Depending on the type of input, of course
no call compile was faster when it was caching but i think this was now removed because of memory leak
Hmm... ๐ค
Thanks for the information! I remember the issue with the memory leak but didn't relate it to that (even though it sounds obvious, now).
Gotta redo my performance tests then
@nocturne basin use sscanf?
the parser (probably) already works
but the implicit cast & overloaded operators are troublesome ๐
it is supposed to be used with parseSimpleArray so you return array then you donโt need to do anything
Ok, so it stringifies it for me so that I can return a string which consists of, for instance
[argv[0], argv[1]]and use parsesimplearray on this in SQF side?
look up examples on callExtension page
also if you need to use data elsewhere after you passed it to extension, stripping/ adding quotes is easy there is even std:: function for it
Plus what I am crafting there ๐คซ๐คซ
also if you need to use data elsewhere after you passed it to extension, stripping/ adding quotes is easy there is even std:: function for it
What if my string is already a stringified array whicn initially had strings.
I understand the example but it still feels like this thing is doing more than it should. Just my opinion.
It's like 'convert it all to string even if it's a string already then call my code' instead of 'just call my code with the data I provide'
You can use my sqf-parser stuff above when I am done
Right now I just need to fix the operators
I am just passing my data through function argument for now, it doesn't stringify my string, don't worry
there is no separate type container that contains type of array elements you pass to extension it is all one big string. so how do you know element is string when it is inside the string already?
Anyway I might find time and add input handling routine code to biki I used before
well yeah "5" and 5 would look the same inside extension tehn
there is no separate type container that contains type of array elements you pass to extension it is all one big string. so how do you know element is string when it is inside the string already?
I'm used to writing in languages with strong types. There is no such problem there.
Just use intercept
and implement your own script command
battleye whitelisting is the only problem with intercept, but thats not a thing on server sooo
c++ is strongly typed language the problem is input output bottleneck
battleye whitelisting is the only problem with intercept, but thats not a thing on server sooo
Yeah I know but... i just wanted to try the standard way to see how much I like it :)
c++ is strongly typed language the problem is input output bottleneck
What's the problem really? How do I know type of my data? Easy, if it's my code then I always know its type because it's my code
if you need to know the type you could add it as param
what if you need to write extension to be used by others?
Well you need to specify the arguments and expected syntax and stuff anyway
then you need to be able to check input, because you donโt know what user will put in it
You need to do that now with the string double escape too
you need to know when user passes string and it is easy because it will always start with "
array will always start with [
@cinder meteor dedmen alraedy linked you code to (de)stringify stuff between extension and sqf world
i need to look up how i did it but you can check accept or reject user input quite easily when args syntax is used
I think the currently args solution is quite neat, super simple to write dynamic args handling
which is perfect for prepared queries with setString, setInteger etc
yes if you use stored procedures with known argument types your work is done for you
yep
neat, might be good to add on the wiki
I have something similar to dedmen's solution today
what if you need to write extension to be used by others?
make an SQF wrapper which checks parameters, decodes return code, prints errors, etc ๐คท
If I had to make that callExtansion interface, I'd make that thing pass data in form [typename, value, typename, value], I think there is no better way to pass type information than to pass it explicitly
when you pass wrong argument to sqf function the game doesnโt crash
if you donโt want to check input in the dll, which is holding Arma by the balls then it is your problem
I can crash game by a trillion other ways with an extension ๐คท
Of all ways to pass data type information there was chosen the one which does useless work plus also mangles data, and it won't change because it's too late anyway. I think it's not worth discussing this further.
But thanks for providing solutions.
2 lines of extra code for 10-something people later to search for destringifier?

Maybe actually a third parameter to callExtension could be added, which would toggle string behaviour...
But of course I am in no way suggesting it to you ๐ I've found my workaround anyway
@cinder meteor https://github.com/X39/sqfParser/blob/master/sqf-parser/value.h
auto input = sqf::value::parse("[1,\"false\", false, \"\"\"foo\"\"\"]");
auto output = sqf::value({ 1, "false", false, "\"foo\"" }).to_string();
// equals the SQF-Array [1, "false", false, """foo"""]
```that might be useful for ya? ๐
I am really thankful for this @nocturne basin but I've bypassed custom string manipulations entirely, I'd rather not do them if possible
that is less about custom string manipulation
But I understand that it could have parsed my string, right?
and more about adding in a full layer of functionality, without any need to ever craft your sqf-output values on your own and full support for .. pretty much anything you can throw at it
yup
and output your values correctly as parseSimpleArray compatible code
Hmm yes I see, the autoformat for output could be useful if I need it, thanks
https://github.com/X39/sqf-value also updated the whole readme and added proper license
just in case somebody wants to use it
Just want to make sure: is it fine if I store extra files in the addon folder (such as !Workshop/@myaddon if my addon was called myaddon)?
Will workshop erase those files? Is it possible?
I mean, extra files generated by addon itself, such as saved games or user data
From my experience any files that are not on the workshop are left alone
So new folders / files dont get changed / removed
Not sure what happens when you add a new file to workshop version that was previously created by your addon
Although saving stuff like saves there doesnt sound like a good idea imo 
Why @rancid anvil ? Where would you save them?
The profile folder
I recently got advice that all addons which store extra files (infistar for instance) tend to save them in the folder rwith arma addon, it eases migration and other things.
either in the .vars file or a seperate file for the addon
Hm I know that Kp lib stores them in the profile folder, not sure what other missions do
for plopper i just do everything in the addon folder and Pythia installs pip requirements to the mod folder as well
Although i agree that probably the profile folder would be a better option
you can read env vars
Is it possible to somehow binarise something using BI's 3DEN UI macroExecs.inc and macros.inc files?
The macros used for https://community.bistudio.com/wiki/Arma_3_Pixel_Grid_System
why wouldn't it be? they are just text files
is compressed rvmat valid for model binarization? also meaningful or instead actually problematic?
it seems to be possible with mikero tools or maybe otherwise (source of compression is not entirely clear yet)
Updated https://github.com/X39/sqf-value to be even simpler to use with types Supported by sqf::value
std::array<float, 1> arr(...) ; sqf::value(arr) ;
Maybe I should add it to the list in the biki ๐ค
@vague shard most likely means binarized rvmats. I have not paid attention to it in the past, but it would not supprise me if binarize.exe knows how to deal with binarized data it has to fetch to binarize the source model. That you will have to test with a dummy and see, unless someone has tried it already and can report his findings ๐
no i am talking about compression
from makepbo.readme.txt:
Compression
compression (and obfuscation) is disabled if you pack unbinarised p3d's.
Any pbo can be compressed for ANY engine. Since many low grade pbo extractors 'out there' don't understand compression, this can be used as a mild form of obfuscation.
The results of compressing mission pbos can achieve better than 75% reduction in payload.
For addons, the results are less spectacular (between 5..10%) because pax's (which form the majority of files in an addon) are generally the largest in size and are (mostly) pre-compressed anyway.
under no circumstances will the dll compress init*.sqs or sqf
the dll will not compress a file who's result would be larger
Obfuscation automatically implies compression. If no specific compression is specified, it will use the defaults.```
i think its lzss compression
Ah yes. Compression is pbo level though. Any util that wants to access any of the pbo contents has to unpack the pbo, thus reversing the compression before reading the actual rvmat file. A single file can NOT be compressed under any circumstances.
So the answer then is, it does not matter. if the tool accepts pbos as source locations for rvmats, then it will be able to use them no matter if the pbo was compressed or if it is raw
Is it true that currently only 32 bit extensions work on linux? Meaning that only 32 bit linux executables can use extensions?
Where did you read that?
A single file can NOT be compressed under any circumstances.
actually it can. Pbo compression is per-file, inside the pbo.
Is it true that currently only 32 bit extensions work on linux?
no?
no?
@glossy inlet
Where did you read that?
@nocturne basin
https://community.bistudio.com/wiki/callExtension
just search 'linux' and you will find
Currently only 32-bit extensions are supported on Linux.
thats wrong
Okay, so... I guess it was old data
probably written because 64bit linux outright didn't exist at all
Is there some extension which exists in community which is built both for windows and linux?
extDB (no x64 linux)
ArmaScriptProfiler (though not sure if I did x64 linux, probably not)
๐ค why is there no x64 linux for extDB? Is it super hard to make?
there was no x64 linux when extDB was last touched by its dev
Thus he didn't make it
Ok I understand
There is one somewhere here that I ported
@cinder meteor https://hosted.anrop.se/extdb3/debug/extDB3_x64.so
I was rather wondering how to make a setup to build that for all platforms
Or if I could borrow it from somewhere for my extension ๐
I've added linux x64 to anrop aar and armascriptprofiler
both use cmake
but armascriptprofiler also needs intercept for linux x64
which is missing at least one vtable lookup
Great, I will take a look!
What is anrop for? Never heard of it.
Maybe it would be worth making some multi-platform Arma extension CMAKE project template, I think it would be very useful. Unfortunately I am very bad with CMAKE and such things at this point.
https://www.github.com/SQFvm/vm/tree/master/CMakeLists.txt
Just take a Look at sqf-vm's cmakelists
you just need to worry about windows vs linux
i.e. the difference between https://community.bistudio.com/wiki/Extensions#C.2B.2B
Currently key word meaning that at the time of writing this was the situation but doesnt mean that is the situation now
though it is still kinda true because linux 64 server is still dev
@cinder meteor also from the same page See GCC documentation on "How to use the new C++ visibility support" https://gcc.gnu.org/wiki/Visibility
which means you probably need to add compile option
Thanks!
@vague shard
is compressed rvmat valid for model binarization? also meaningful or instead actually problematic?
the rvmat baked into the p3d is sourced from plain jane text, or binarised (bis binarise accepts either). There would, however, never be a reason to not binarise any rvmat file. This is especially true of the thousands present in a wrp pbo.
lzss compression is used in the pbo after all this occurs for any/all files depending on what you exclude.
there are no known issues with rvmat (or p3d) compressed 'files' (eg the entries in the pbo itself). Paa cannot be compressed due to the texheaders.bin which records hard offsets into an uncompressed paa
as to problematic, the answer is p3d rvmats themselves may not be required in the pbo at all, since they're already baked in to the p3d! (to date, no one has actually tested this 'theory' ๐
as said i am speaking of compressed rvmat - not rapified rvmat
the issue observed is a stark fps drop of models with such setup - my theory is the engine cannot read the compressed rvmat, thus cannot merge the information and leaves the reference to the rvmat. as result the engine has to load the info on runtime which results in the fps issues
we are looking for people with some insights on bisign files:
- is it really a problem if a client has multiple per pbo or fine as long as one of them is "correct" aka fits one bikey of the server?
- any other way known to match/verify bisign vs bikey (and pbo) than going just by their naming?
- any "simple" way via extension to know which bisigns are loaded by arma/to scan all loaded modfolders for bisign files?
well people tend to have keys of multiple versions of cba present
i assume as such also bisign (but naturally just one pbo version)
yes, don't do that based on that experience ๐
should be fine to have multiple keys as long as they are unique
and then player A has pbo + bisign from one version, player B has pbo + bisign from another version
but in our case one player had pbo + multiple bisign versions
where one was valid, one was wrong
the issue observed is a stark fps drop of models with such setup - my theory is the engine cannot read the compressed rvmat, thus cannot merge the information and leaves the reference to the rvmat. as result the engine has to load the info on runtime which results in the fps issues
@vague shard @dawn palm Just happened to stumble across this (for entirely unrelated reasons), and wanted to add a little info - I've observed FPS drops happen with only compressed .p3ds, .rvmats were uncompressed in that test, and still saw major FPS drops.
I've written an example Arma Extension in Rust, that compiles on both 32-bit and 64-bit Windows and Linux and is completely free from extra dependencies (just rust standard library). It's also got a README that explains how to install toolchains and cross-compile for 32-bit from a 64-bit install, as well as (briefly) where to put .sos and .dlls.
Notably, it contains an example works around an issue in the Rust compiler that prevents 32-bit Windows DLLs from being detected by Arma, and a writeup on how that workaround works.
https://github.com/Spoffy/Rust-Arma-Extension-Example
Started as a bit of a curiosity project, but thought it might be useful if written up!
Feel free to create a PR for the community examples repo
https://github.com/arma3/RV-Extension-Examples
Ooh, shall do.
if you do cool stuff and want a repo on there feel free to ask as well o7
Oh, sweet, will do if any of my random bits and pieces turn into anything!
should add my SQF scripts to the sqf-gems repo there
brett made a nice wrapper for doing arma extensions in rust, https://github.com/synixebrett/arma-rs
Opened a PR @nocturne basin, let me know if you want me to change anything. (Edited: Pinged wrong person)
*X39 (i guess X360K2 will now be furiously typing any minute :P)
ah, I see its mentioned in the readme as well ๐
perhaps it should be mentioned higher up in the readme?
Yeah, I did. His stuff is a really nice bit of work, though unfortunately the amount of fancy macros he uses obfuscates the actual interface used.
I thought a more clear-cut example would be helpful!
most of the files don't end with a newline, good practice to ensure compatibility with tools
btw as a sidenote afaik people dont get pinged if a ping is edited into a message, they get the yellow message highlight but not the actual ping sound/red 1 on the server icon @faint salmon