#arma3_tools
1 messages Β· Page 39 of 1
Yes
@dawn palm Sorry to @ you but I keep packing multiple different pbos and I get error while adding addon names to requiredAddons array this is only after updating, before I updated all my pbos that had any inherited class were corrupted
you could try with disabling rebuild required addons
I did do that and it corrupts the pbo
work with the 'corrupted' pbo, find out why. (Because rebuild addons was masking this underlying error)
it does help if course if you explain what the 'corruption' is.
@dawn palm None of items inheriting a AMRA 3 class are in-game
and the .paa's cant be applied via scripts either
also do pboprefix still work?
as long as they follow the documented naming convention and format, yes
my main pbo is called t1p_textures
or the addon root
I want it to be called t1p_base
when its packed
=======HEADER=======
prefix=t1p_base\t1p_textures
Mikero=DePbo.dll
product=Arma 3
version=1
Pbo Type is: Arma Addon
==================```
this is in my $Prefix$
folder
I also tried $PBOPREFIX$
and pboprefix.txt
none work
are you packing the t1p_base folder?
and if not why not?
if you want that as the pbo name, put config into it and pack it from there
someone told me pboprefixs are a good way to help your stuff not get yoinked
they might not have known what they talk about
pboprefix does not really do anything to protect your work
and to be honest the only way to protect it is to not release it.
you could use a prefix that's not extractable on windows π
still won't stop anyone as that's easy to workaround
and would cause a lot of issues with OB etc
the prefix is formed by the Pdrive:\whatever\folder
$pboPrefix$.txt is not what you think it is. The value prefix=any\thing is already deprecated and soon to be removed.
$pboprefix$.txt is the pbo's properties file. the least interesting 'property' is prefix =
here are some others
author=I am famous;
version=1234;
product<<<< = A3;
CLDC=My Great Mod;
I've seen that error before from others. Don't know about a fix. It's on Steam side
@glossy inlet Any news?
Don't rememeber what its about
no news
Does anyone happen to know where I can find the documentation of this library? https://github.com/armageddonapps/QueryMaster
It's a c# library for steam server queries
@subtle smelt ServerQuery.GetServerInstance(EngineType.Source, "127.0.0.1", 2303)
thanks
anyone here got deeper into mod matching/signature system? especially special cases like optional client mods and the various edge cases with keys and signatures
@vague shard can you be a bit more specific about what kind of cases?
its unclear if V3 still supports optional client mods for example - there is different statements on this
V3 should enforce strict(er?) client to server data matching (without equalModRequired)
aspects like of having multiple BI signatures in a modfolder, if hashes for signatures (bisign) or key (bikey) are necessary to ensure they are the right version or havent been tampered with - or if the mod hash is all you need to verify
for client or server?
the new changes with enforced mods when used with -mod still supports client side mods using only keys on the server
re a new verification system: from what i'v e been told, my understanding is as follows:
the pbos on the server are no longer the same as those of the client. the publisher's pbos supplied to the server are stripped so that only files-of-interest remain. These then get repacked into (consequently) smaller pbos. The resulting sha key will of course be different. Each client is expected to do the same thing during verification by reading out all 'appropriate' files from the pbo and producing a sha to match with. The problem with this is that the order of files being read in the client's pbo must be in the same order as those made on the server. My tools orgnanise them differently to the way filebank does it so the verification will fail. I won't be copying filebank's many mistakes any time soon, and assume this latest act of madness goes away. There are just too many flies in this soup for it to ever become stable.
the pbos on the server are no longer the same as those of the client
never were. same as always.
pbo sha key is checked via bisign
I've explained it as best i can.
The new stuff is not because server files are repacked. The new stuff is to get a verified hash faster, to verify it sooner and kick out hackers sooner than if you were to first manually verify all the files in all the pbo's
The server file repacking is not an issue as long as the pbo's weren't built using your tools. Not really an issue for most people
thank you for the slap in the face
How many non-BI people make server-side reduced size repacks?
Never seen that done in mods yet
The way it came across to me was that unless people use addon breaker to make their pbos, they can no longer use them in multiplayer.
If the pbo's match 1-to-1 there won't be an issue
@scenic canopy thanks. for the client
i am pretty sure V3 brought strict(er) data matching between server load pbos and client pbos (similar to bikey have to be in arma3[server]\keys now) - however this wouldnt go together with optional mods not present on the server.
so if it still works via bikey on the server, is the data verification then only done for non optional mods?
I think so, I can check later
note that any leftover bisign from non allowed versions on clients will fail checks
I've seen it happen far to often π
at least arma3sync etc enforces strict mod folder content
Been there, done that π
compared to say steam workshop
it has stricter checks inside of pbo.
Not sure if it changed the "pbo completely missing on one side" thing
pretty sure V3 now checks for "pbo different" and "pbo missing" now right "when joining" - before it was done while on the server and based on available server resources probably (aka ppl could join and do bad stuff for a while at least)
the CLI interface is document in the dosmode.htm docs file
pboproject -P <source folder> -Mod=<target mod folder>
@dawn palm Any way to have PBOproject not binarise? For quicker testing
makepbo
if you want even faster test iteration you could use file patching
Hi, I'm not sure if I'm in the right category, but I have a question.
I have a create a DLL on the client side, and I would like to implement it on modded servers. However I have a small problem, Battleye doesn't want to run this one. How can I get it to allow the .dll to run?
Thanks you.
See this: https://forums.bohemia.net/forums/topic/217612-how-whitelist-my-dll-for-battleyes/
(I'm talking about both links in the first reply, actually)
Thanks you Stack ! π
I know i should try this myself (but as i'm unable to do it I thought about asking it here) ; i was wondering if strings, when passed using callExtension command (RvExtensionArgs function) get encapsulated in additional quotes , so for example callExtension ["fnc1",["ok"]] passes a char* [] with a single string containing "ok" (so basically the string in its whole is " "" ok "" ")
thank you.
i think you are kind of on the right path... strings are passed exactly as they appear ingame. so args is a string[] where args[0] is "ok" (wrapped in quotes, as a string).
Great. Thanks for the heads up.
Callextension gets the same values as str outputs
@limber hearth strings are wrapped in "" and all " inside are also escaped. You can detect if arg is a string by simply comparing 1st char to '"'
Yeah sure thx, I was doing that, but then my mind just said βwait,are you sure that what you are doing is appropriate?β
@limber hearth callExtension has function name argument which doesn't wrap strings into quotes, you can use this to actually pass data around if you don't want to unquote your strings
And it supports very large strings as I recall
might as well use basic overload callextension string instead would be cleaner and faster
Right now I have both overloads implemented, so eventually Iβll choose one and stick with it
you donβt need to to choose one to stick with you could use both depending on the task
is there some public implementation for A2S_player for latest Arma 3/steam query?
only found this convo from 1.5 years ago with some conclusions on the go:
https://discordapp.com/channels/105462288051380224/105464579600977920/606498195643826179
some are updated within the last month, https://github.com/search?q=A2S_player
ty. interesting - none of these turned up via google. only older ones
Added: "Vehicles only" difficulty setting to the 3rd person view option
Does this imply a change in the ServerBrowserProtocolV3? (an additional flag or difficulty number in the a2s_rules packet?)
Ah... reading the full page, before posting, usually helps :D
Added: "Vehicles only" difficulty option to thirdPersonView. Current values:
0 - disabled
1 - enabled
2 - enabled only for vehicles
I think the enoch flag should now be in browser protocol
0 false for 3rd person 1 and 2 true
Yes, yes, I know. I simply posted before getting to the Engine part of the SPOTREP π³
I think the enoch flag should now be in browser protocol
Yes, i can see 2.00 servers using it already
I hope it works fine in launcher :x
"Contact (Platform)"?
if you select server that's on enoch, and don't have contract it should show you to buy contact
same as with tanoa
@stray galleon i came back to it, after work and I'm not sure if i understand. Looking at https://community.bistudio.com/wiki/Arma_3_ServerBrowserProtocol3 there seems to only be 1 bit (C) that shows if 3rd person is enabled or not (and it sits in between other flags so you can't extend it to have 2 bits).
How are you supposed to send a 2 over the wire?
Or did you mean that regardless if it's 3rd person for vehicles or everyone, that flag will be set to true? (and as a result, you can't really know the setting, from the launcher)
maybe like this? https://thedailywtf.com/articles/What_Is_Truth_0x3f_ π
Or did you mean that regardless if it's 3rd person for vehicles or everyone, that flag will be set to true? (and as a result, you can't really know the setting, from the launcher)
Any chance to get an official confirmation for this?
thought I answered that already, yes 3rd person is also true when set for vehicles only
0 false for 3rd person 1 and 2 true
I know that you already wrote that but wanted to make extra sure I understood that correctly. Thanks for the confirmation π
depbo.dll update:
+fixed OFP odol -> Arma3 mlod conversion. You can now revisit flashpoint models and put them in a3. (credit IceBreaker)
+fixed ../ includes (credit Spoffy & Veteran29)
+fixed makepbo hang (rare) with corrupted p3d (Credit(Eggbeast)
Enjoy
does someone remember what to do again when dscreatekey/dssignfile only produces corrupted bikey/sign files - it was something corrupted with windows certification/authority
cant find any forum thread or FT post about it, but pretty sure a few people had the issue and found the solution
@vague shard this? https://feedback.bistudio.com/T83923
thanks. we found this but admin acc didnt help
from what i recall one had to do windows repair or install some package to replace the corrupted windows files
does anyone played with maxProcesses binarize param?
is there a way to setup pboproject to look for files via my game install, or do I always have to clone the game files to my P drive to binarize properly?
I heard people here to use this:
https://github.com/arma3/DokanPbo
Didn't try myself though
is there a way to setup pboproject to look for files via my game install, or do I always have to clone the game files to my P drive to binarize properly?
I always develop on my P drive, since it will ensure that PboProject (or any tool) will properly handle external files and paths inside your mod.
For testing I create the mod in a separate folder (in my caseArma 3\Mods) and use the local mod feature in the Launcher to load it.
right, I develop on my P drive, but I'm trying to see if I can avoid extracting all of the game data and superflously having 2x the space taken up by the same data
the issue I run into is pboproject throws missing file errors for anything not present in my p drive on packing
the DokanPbo git definitely looks interesting and will save that for later, but im unsure it will work for specifically what im trying to do
Main issue is that no tool can look inside pbo's to check if files inside it exist. And for you own sanity it's good that it will check for them, so you should have a3 source files (and possibly other mods) on your P drive
yeah thats what I figured, but I reckoned I'd ask just in-case
you could always use AddonBuilder in case you don't care about additional checking, since that does not care about missing files (or incorrect paths, configs, whatever).
But that's something I (and anyone on this Discord) strongly advise against.
DokanPbo can be used as an alternative but it will be slower.
Dedicated 2tb ssd for arma stuff ftw
yeah i know well to steer clear of addonbreaker
just a matter of me wanting to have my cake and eat it too lol
@onyx helm I'm of the same opinion, I'd rather not needlessly have GBs of duplicate data.
It's indeed annoying, especially when you have/need multiple mods unpacked. But on the other hand; I also use it to quickly search in configs/code, especially when there's no public source available (eg. on GitHub).
I just extract as necessary if there's something specific I want to look at, I understand the philosophy behind why mikero's tools are strict, but I think for checking files that aren't going to be included in the PBO it's reasonably to have the option to relax the rules a bit. Maybe a better compromise would be to have extractpbo generate a directory tree of all the files and use that as a reference, that way it knows the file exists without needlessly duplicating all that data.
I heard people here to use this:
https://github.com/arma3/DokanPbo
Didn't try myself though
Doesn't it work btw? It's supposed to solve the problem of having twice the hard drive space.
it's been used on build servers and for local development
if I can avoid extracting all of the game data and superflously having 2x the space taken up by the same data
if you're talking identical, assets. no matter which way you roll the dice, you MUST have arma3 binarised assets in the temp folder AND in the p:\drive proper. Without them, when making wrps, you will get no 2d icons on the map. Binarise, and pboPro only duplicate where they know it is necessary.
and the only way you're going to get them is to extract them, so that pboProject (in this case) can take care of them. If you would like to cherry pick this extraction to things you think you need, be prepared for unpleasant surpises in game.
it also turns out that to operate buldozer, you need the proxies of the p3d (if relevant) on the same drive.
again, cherry pick all you like, or, just get over it.
and finally, binarise, in general, needs to find THE binarised (or otherwise) rvmats in p:\proper along with whatever p3d you' are crunching. It cannot generate the correct rvmat inside the p3d if you don't supply it!
so again, try cherry picking a series of pbos from the game that you 'think' have the rvmats you need.
all this turmoil and pain from squabbling over the need for around 8gig of extracted data. And if space is that serious, you're in the wrong game.
I'd debate that last point, 14.6Gb for entire addons folder, and even though I have 4TB drive every bit adds up, especially when the average AAA titles these days ranged from 20 - 60GB
extracted data for the game is around 8gig. You alone have filled in with another 6gig. A user map takes anywhere between 20 and 35 gig, so extracting game data is relatively insignificant. To complain that the game itself wants a modest chunk of that is being petty. And to need that 8gig for something else is pointless.
but yes, in your case right now, i see where you have doubled the disk requirements. This is like arguing to keep your project smaller. both are unrealistic expectations.
a lot of assumptions in there, my project is a modest 3.23mb (weapon model), I'm not making nor intend to make maps
if you figure out a way of only extracting the rvmat textures, proxies and configs that you must extract. i'll implement it.
re: the only 8gb, if "Arma 3\Addons" includes DLC (which I assume is your point), arma3p does not give any option to exclude that content, it just dumps the house + kitchen sink
re: rvmat/proxies/configs, genuine question as I haven't seen it referenced in any guides or on forum, are you saying that for building custom models there are rvmats, proxies and configs that are required from the core files? for eg I know that proxies are referenced in the p3d, but if using your own rvmat or none at all, and what configs other than your own would be required?
@dawn palm There's a minor typo in current iteration of arma3p btw
placing snake man's maplegend.png in toot of P: for your convenience
tooting all over my P: π
"you MUST have arma3 binarised assets in the temp folder AND in the p:\drive proper."
Nah as said above, DokanPbo works, its not "proper" but works just fine
"and the only way you're going to get them is to extract them"
Nope, DokanPbo.
I also made this that creates empty dummy files for most of the game data, https://github.com/Dahlgren/arma-data-extractor
Minified does not work for terrains as p3ds are also 0 byte files
Maybe I should make an option not to minify p3ds
The entire extracted arma 3 comes out as ~250 MB
you probably also want textures, atleast lowest mip. I think binarize might open texture files to check transparency
Shouldnβt be that hard to add lowest mip
Thereβs already a PAA lib in there so
@warm tide thanx π
+binarise requires access to the genuine rvmat in order to bake it into the p3d. Not sure how/if dokanpbo handles that but dummy files won't help here.
+For wrp, UN binarised roads are required in source, and Binarised must be available in P:\temp to get the respective shaders happening. (not 100% sure of this 2nd requirement)
+binarised p3d's must be available for binarise to create a wrp.
+all configs from everywhere that have land classes need to be available when using addon breaker for making maps, otherwise you'll get no animations (doors opening etc)
dokanpbo has the actual rvmat
it's just a virtual filesystem on top of the pbos
same as if you would've extracted the files, without debinarization
the minified data extractor also saves the actual rvmat file from extraction
it's mostly textures, p3ds, sounds etc that are zeroed
it was made to build cba, ace, acex on public ci systems, I haven't tried much else than that yet
I should test it out with our SFP worlds and see what changes that are required to get it working there as well
but since p3ds are zeroed its not a good candidate to be used together with terrain builder π
dokanpbo is a lot better for local development environments
the minified stuff is mainly intended for public CI services where storage is limited and most files are not relevant
without debinarization
Config debin is implemented, don't think rvmat is
it's in an approved pr π
Oh, good boy dedmen
isn't the config.bin also exposed? 
yes
it just offers config.cpp as well via bohemia debin thingy
the bohemia 'debin thingy' does not convert from bin to cpp properly. it has no idea what to do or how to present enums embedded at end of the bin file. This in turn means destrype= destructengine ; fail.
since this app clearly wants to remain married to broken tools from bis, i have no further interest in it.
who uses enums?
adding other debin tools would just be another binary lookup and preference / selection on setup
adding support for say derapify would be very easy
or armake
the config.cpp is offered if the bohemia tool can be found via the registry and exists at the defined path, otherwise its omitted. config.bin is always there
and if you want to read it you can use derapify / eliteness on the virtual filesystem
can easily just check and say "find the best tool available" at startup, and just use that
yep, super easy
We could probably just embed a dll that does it directly, instead of launching a process, would be much more efficient
who uses enums?
bis. in (nearly) every config of their pbos. They are the equivalent of a binarised #define
I'm working on a simple mod to track stats (respawn, kills etc., more in the future). For this I use Intercept Database, which makes my work much easier. I wonder if there is any sense in queuing supported events (and sending them in fixed periods) and adding transactions (which results from the previous one).
The main reason behind queuing is to reduce network traffic.
I guess you'd have to implement the queuing yourself in SQF.
Intercept DB doesn't do that.
And neither transactions, but don't transactions still send stuff to server right away, but just don't commit? thus wouldn't benefit network traffic wise?
Hmm. Yep, you're right.
delta events would probably be your biggest saviour in terms of network traffic
not sending static objects over and over again saves a lot of data in our AAR π
anyone knows a good admin tool apart from Infistar
The main reason behind queuing is to reduce network traffic.
You could also set up a database locally and save your data there. This will effectively decrease your network traffic to zero and you can replicate the database or make remote backups at regular intervals to get the data somewhere else.
latency would be low but once you have a lot of data the indexing etc can take some time per insertion
Maybe just have an intermediary format that acts as a log of what happened (so that data is simply appended) - in its simplest form it can even be a text file [or some nosql db, dunno, just throwing ideas?] and then that file is processed by a script that inserts everything to a database after the end of the mission, all at once (not bound or related to Arma at all)
and then something happens at the end of the mission and all is lost π
Personally, when we made our own pseudo-minimal-AAR, I stored all the data in-memory, inside our extension (python btw π ) and when the mission ended we dumped everything into a json file π€·ββοΈ
I've heard a lot of people complaining about that for OCAP at least
we collect a couple of seconds of data and then make a bulk insert with that
and then something happens at the end of the mission and all is lost
If you're appending to a text file or adding timestamped records to a nosql DB, no data will be lost π
but ours also has an HTTP layer between the extension and the database for scalability and authentication
no, but your "send at end of mission" might not trigger depending on how its implemented π
could be solved by having a check at next "startup" if any files are leftover since past session
or done outside of the game engine
Yeah, true. Depends on how important that data is, to you. For us, it was just a gimmick so we didn't really care.
Also, depending on the implementation, you can make it so that that dangling data is simply appended to, at the start of the following mission and is dumped when that other mission will end, along with the new data
yep. probably easier to have one file per mission I would guess though
easier to debug/test at least π
and if one file suddenly got corrupt it wouldn't impact other missions
Just a heads up here folks which I apologise in advance for being off topic, but urgent. A nasty piece of ransomware is happening on Steam at moment. Pretending to be one of your steam friends. They/it beg you to give them an uptick vote for a game they're playing called Shonk and give you a url to click on. If you do so, it immediately starts locking down your pc with a message about "preventing a Ddos attack, be patient, and wait". I've had two 'friends' so far contacting me with identical message and identical crippling url.
If you do so, it immediately starts locking down your pc
They probably forgot to tell you about the exe they executed in the meantime because if clicking on a link would "immediately start" something on your PC, that would mean a nasty 0-day for your browser was discovered π
pboProject 2.85: update:
- added +/-H (do/don't convert png) to cmdline (ignored if not dayz engine)
when set, automatically ignores 'png' if specified in the exclude list (and accounts for multiple, inadvertent 'png' spec)
+added +/-G convert wav/wss to ogg
+fixed potential error where the -B exclude list could be empty - now checks cmdline for a 'proper' source including drivespec
- does an early check if the stale pbo can be deleted (credit TH)
- replaced wav files with mp3 in installer. much smaller package as a result
I have to say that hallelujah made me jump the first time as I was wearing headphones.
hallelujah has become my favorite song x)
if clicking on a link would "immediately start" something on your PC
Actually, kinda related: an RCE in Discord was revealed a few days ago :)
https://mksben.l0.cm/2020/10/discord-desktop-rce.html
(see video at the bottom)
So maybe I have to take back what i said and there actually is a possibility of an unknown RCE in steam browser, after all? π€ @dawn palm
(not directly caused by the article in the link above but got me thinking)
A guy just refused to join our unit because we use Teamspeak and they had an RCE years ago.
Guess he has to stop playing Arma and using Discord too
Tell him to throw his phone away, too
Actually... was he typing that from a Windows machine?!? π
@karmic niche , you've lost me re RCE, where am i /steam involved?
oh, you mean the ransomware?
I've previously stated my doubts about that clicking on a link would "immediately start" something on your PC
Yeah
ok
well, my use of 'immediately' means you click on a link, you get a new web-page, and your disk starts hammering it's guts out.
(this bit of ransome ware seems to have found an exploit via the sound drivers)
depbo update:
+fixed installer to work 'properly' when adding to the path environ string (Credit @grand kelp )
+added message box to installer IF registry changes were necessary and needing a reboot.
+'Missing RequiredAddons[]=' now says which class extern; causes this. (Credit @quick fog )
+added silent cmdline install for headless servers. the confusing message box has gone (credit @scenic canopy )
did anyone try to by chance if there is any character type (and amount) limit for bikey/bisign names? or full unicode supported?
character limit should be around 32k characters for most string handlers written in past decade. Windows uses Unicode 'wide_chars' for it's filenames. Thus making all 'filenames' full unicode (not quite true, but true enough). However, there is a high probability that the dsTools were written for Ansi character sets and that being the case, support for 'full unicode' is impossible. Ansi can only support 'local codepage' not, Unicode) You would be able to spot this by comparing the filename in windows explorer versus using a 'dir' command in the dos console (effectively, Ansi coded tools only 'see' the same as dos does). If you create a cyrillic filename via the explorer. you will see the difference immediately.
windows path limit is 260, for win7.
bisign names might be handled in binary, meaning utf8 support yes. But thats for the filename inside the bisign/bikey files. Not for the on-disk filename, especially on windows with utf16
Windows does not support utf8 encoded filenames. By default, they are misinterpreted as 'local codepage' which for most of us means 'WinAnsi' cp1252
As I said
Not for the on-disk filename, especially on windows with utf16
TLDR; noone knows
well knowing Q, and the way he asks questions, he's already spotted a problem with umlats in his filename.
and my answers presume the dstools are using the standard io functions rather than the wide char versions. sbcs for dos.exes was fairly normal for the time of it's release.
asking as Chinese servers transmit largely 0 mods via Steam protocol as it seems (only the yellow are vanilla servers)
also couldnt find any bikeys or mods with non ansi characters (so far)
could be an issue on our end. looking for more info/insight atm until i can dig deeper on our end
as Chinese servers transmit largely 0 mods via Steam protocol as it seems
We could try simply connecting to them and see what happens :)
But I agree that 0 mods and 31 signatures looks suspicious π€
Does anyone know how it is possible that a server reports this as a signature:
c:\users\owner\desktop\@extrazeuscompositions\addons\zeuscompositions.pbo
Yes, the full path, instead of something like cba_2.4.0.160530-5d662876
I don't even know why there is a ".pbo" suffix here (and no, it's not my server, I'm just crawling the internet π )
mod on desktop 
Could have been worse. Could have been %appdata%\Local\Temp π
Could have been worse. Could have been \\NETWORK-DRIVE\Shared-Mods
I actually do that at home 
But still... how is it that there is a full path instead of the file name? Hmm... maybe a linux server with a filename named as above? (with the backslashes) π€
You have Linux/windows flag in query don't you?
Yeah, just checked. Both the platform and environment flags are l so it looks like a native linux server
So either there is such a strange file in the keys directory or maybe a symlink/hardlink was wrongly resolved by the application π€
Hey, I don't know if that's the case. It's just a guess, you know
Why would you want to put pbo files in the keys directory is something I'd rather want to know π
Does anyone happen to have EMFtoPNG.exe lying around collecting dust? I would like to provide it with a safe and caring home.
EMF, oof. SVG export is where its at
Thank you, kind sir.
bit offtopic for this channel but as mikero posted about the RCE in this one too...
It seems there was indeed some vulnerability in steam:
The Steam Client Beta has been updated with the following changes:
General
Fixed remote code exploit in Chromium Embedded Framework freetype library (CVE-2020-15999)
To Note
Will not be the last one thanks to Browser based technology
The actual bug was in freetype2, which is used in way more than just chromium, so it's not really just about being browser based.
from one moment to the next i suddenly cant compile with pboproject anymore
i dont understand what's going on
i havent changed anything, but now i cant even pack simple folders that have nothing fancy inside
error log only says Rapify error
i've already reinstalled it
how can this happen out of the blue
check the log files
log file says rapify error and nothing else
it doesnt even copy files into temp
it has problems with rvmats, apparently
that's where it stops
yeah, every folder with an rvmat somewhere kills it
now the question is ... why ... it works for months and now it flips me off
google is as useless as ever
deleted rapify and makepbo, reinstalled an older version, ran updater, re-installed latest version .... now it works again
i swear arma will kill me some day
well, with your well-described symptoms above, the only logical explanation I can come up with is one of the exes was hit by a virus (on your pc). It could well be some other reason, but buggered if I can think of anything else that would make sense. I always have my antenna on hi alert when people have issues with my tools, but can't think of anything the tools could do to behave as stated. And, yes, am aware that you weren't blaming them, but this one goes on my watch list in case I have done something weally stoopid.
@dawn palm any idea how I could fix a "depbo corrupted sha key", trying to run arma3p and getting that error at armor_f_epb.pbo
im going to try to verify game files
well, with your well-described symptoms above, the only logical explanation I can come up with is one of the exes was hit by a virus (on your pc). It could well be some other reason, but buggered if I can think of anything else that would make sense. I always have my antenna on hi alert when people have issues with my tools, but can't think of anything the tools could do to behave as stated. And, yes, am aware that you weren't blaming them, but this one goes on my watch list in case I have done something weally stoopid.
@dawn palm it also had problems with .hpp files being included in my configs. after adding them to the ignore list, it continued compiling, but then it stopped on rvmats, which is why i believed it had something to do with rapify (not just because the log said rapify error). when only deleting & reinstalling rapify, it didn't change a thing, though. at the end of the day i'm not sure if deleting & reinstalling makepbo helped the cause or if just win10 locked something up for a while and then decided it was a good moment to stop acting up.
i'm not sure if there was anything weird i did before this happened. however, i was experimenting with macros, which gave me an error on compiling as well (which was weird and annoying, because the macro had nothing fancy in it) .... who knows
@dawn palm was -X removed in your tools or is there another way to use that feature? (ignoring missing files when binarizing)
I reverted to a backup that I saved before updating (haven't in awhile) and have the feature back for now.. but if there is a way with the most up to date pboProject please let me know... probably over 10k lines of missing files that were previously ignored
they aren't ignored now. With that amount of 'missing' files: it's a statistical guarantee that some of them are genuine. If you haven't used arma3p to extract your game data, you're not being serious. My tools are tools, not toys.
@dawn palm I have used arma3p and your tools for a long time, I appreciate the work you do. I never bothered to update and constantly close the update reminder because it simply worked with my setup. I did try to update just the other day and ran into that issue.. so I will have to keep on the old version. Here is an example of a recent build with just over 5k missing image files: https://sqfbin.com/azarujedirozaduneqit The mod is designed to be run with any supported mods enabled as it simply uses their file path. Having to extract all those mods would be a long process which was why I was grateful for that feature, I understand for the average user it makes zero sense π thanks
you need to write some batch file that creates dummy files for that list
My pdrive is already a mess π maybe sometime will get around to it
π messy setup makes messy mods
Oooor.. you just use DokanPbo and simply load all these mods π
Anybody have any idea why arma would break windows symlinks for stringtable.xml but not for .sqf files? As in the SQF files update properly when I change anything in one of them but the .xml refuses to update
I think you need to restart arma for stringtable updates to take effect
I'm not even talking about taking effect in arma, it's that arma seems to actually break the symlink. When I update the main file the other files in the other mission folders don't update
Are you sure your setup is correct? I'm using svn repo symlinked to Documents\Arma 3\missions and stringtables are working fine there
Well I made a little util in java to do it automatically for me and it does this: java for (File s : files) { String fileType = s.isDirectory() ? "/J" : "/H"; EXECUTE("mklink " + fileType + " \"" +targetFolder.toAbsolutePath() + File.separator + s.getName() + "\" \"" + s.getAbsolutePath() + "\""); }
With execute being java private static void EXECUTE(String arg) throws IOException { System.out.println("Running: " + arg); ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", arg); builder.redirectErrorStream(true); Process p = builder.start(); BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = ""; do { System.out.println(line); line = r.readLine(); } while (line != null); }
And it seems to work just fine for everything else
so hard links & junctions are not working for you?
not for the stringtable, for everything else they work fine
I've just been working with stringtable for a mission and it seems like when a value is changed, it needs a game restart to take effect. But when a new value is added, it takes doesn't need a game restart. Isn't it like this?
I'm not even talking about in game yet. These 2 files are hard-linked: https://i.imgur.com/gezBRMT.png
did you checked if stringtable is locked by a3 process?
Does arma lock the stringtable while running but not the SQF files? Because that would explain
sqf files are for sure not locked - not sure about xml but that would be one of the explanations that I could see
did you checked if stringtable is locked by a3 process?
I've checked that values were in fact changed in the file
But I've found some errors in the xml file actually, maybe it would explain it
Hello, I wanted to know if people have already contacted Battleye to whitelist their extensions ? (Like this topic: https://forums.bohemia.net/forums/topic/217612-how-whitelist-my-dll-for-battleyes/)
I sent them my request a month ago, but I have no response from them. I wanted to know how long it takes them to respond to this kind of request ? Thanks you.
in my experience nothing ever happens unless you message dwarden or it gets autowhitelisted from being frequently used (on the rare occasion)
Oh okay, Thank you for the information! π
@dawn palm Hey mate, I seem to be having some trouble with obfuscating my pbos with pboproject v2.86.7.85
Some of my textures aren't being added to the thing.obf file mainly textures with an alpha channel.
Do you have any idea why this could be and how I could go about fixing this problem?
the textures have to be referenced by the config/p3d/rvmat to take effect. If not, they remain plain jane for sqxShit. there have been no changes to obfuscation for several updates
@dawn palm Thanks for the reply mate, do the textures have to have reference inside the pbo that I'm pack or can it be referenced from a different pbo?
obvious or not, it is only the pbo they are in that can make the decision to scramble them. It is also 'normal' to intentionally leave some textures to be reman plain jane. Author choice. Without this 'mechanism' you would not be able to account for some sqX references from elsewhere because i don't inspect it's awfulness in any way.
correction there. any sqX statements in a config, whether exec eval or init= fields (eg) are fully analyzed. But for sqx in general i have better things to do with my time.
looks like i have the same rapify error again as last time
once again, no idea what triggered it
restarted computer, just to make sure - still same issue
@dawn palm any idea what i can check out?
ok, even deinstalling and reinstalling makepbo and rapify doesn't help this time
clearing temp folders doesnt help either
ok, deinstalled pboProject completely and reinstalled ... now it works again. so whatever it is that i am doing, it breaks something.
ouch!
Can someone point me in the direction of a tutorial for setting up and using Arma tools. YouTube and Google have failed me. I am a complete noob so please be gentle.
Which tools?
Arma Tools can be installed from Steam (shouldn't require any tutorial)
Mikero's Tools can be found easily on Google and then installed by running the installers.
Can't think of any other "Arma tools", unless you want something non-Arma specific.
@elder quartz PMCwiki has simple tools setup guides
@elder quartz PMCwiki has simple tools setup guides
@sly skiff Thanks, much appreciated
https://mikero.bytex.digital/Downloads
welcome to hell
pboProject 2.87 update:
+fixed cmdline +key= (credit TeTet)
- checked for model.cfg sectionsInherit= referring to it's own class causing permanent binarise loop (credit Eggbeast)
Yay i get the numpty prize lol
causing permanent binarise loop
Fixed in next binarize update, but it will throw an error and fail packing.
So i read that someone was making a tool to bypass model.cfg?
what do you mean @opaque pendant
Hello, I have a question regarding Named Pipe handling by dedicated server. I searched this Discord before asking but only mentions were regarding client usage (or maybe I misunderstood something).
Wiki https://community.bistudio.com/wiki/Arma_3_Named_Pipe says:
The pipe is created only if the command line contains -
command=param which defines the name for the pipe. Works for client and hosting client.
I wanted to check if it's really true and I created a Named Pipe and it did connect. The only thing commands were not read (or at leastshutdownwhich I tried) so nothing to celebrate. Is this intended behavior?
I tried with regular client and the same code did work and client was shut down.
Edited original message.
well wiki says it only works on client, not on server
so I assume it doesn't work on server
Ok, just wanted to make sure. Sorry for bothering you, have a good night.
Well I didn't check. I looked why shutdown didn't work because I didn't catch your thing about dedicated server
Yes, my bad, should have mentioned dedicated once more, not only on the beginning of the post.
So i read that someone was making a tool to bypass model.cfg?
Hard to understand the relevance of that.
a NameOfP3d.cfg, and/or a (series of) model.cfgs are baked into any p3d that needs it. What on earth is there to 'bypass' ?
It is true that (for the most part) dayz uses .anm & script and ignores the cfgModels class, but a cfg skeleton is still required.
there are tools for generating model.cfg animation classes from Blender/3DsMax animations
but other than that I cant think of anything related to model.cfg being discussed
ahhhh thanx.
bypass manually writing them perhaps
for simple things like turrets and wheels and such manual way is the king though
since they have specific requirements
unless something veeery fancy is being made π
and.... not to mention, the less popular, but very effective use of parent\model\cfgs which you only ever write ONCE. (the long, prone-to-error, ofp2_manskeleton being one of them)
does battleye.exe have any startup parameters? I can't make sense out of ole1986's startup parameters:
M:\SteamLibraryM\steamapps\common\Arma 3\steamapps\common\Arma 3\arma3battleye.exe 2 1 0 -exe arma3_x64.exe -mod=p:\Terra-s-Editing-Extensions\@Terra's Editing Extensions;!Workshop/@CBA_A3 -nosplash -world empty -skipIntro
this vscode extension: https://marketplace.visualstudio.com/items?itemName=ole1986.arma-dev
I can't for the life of me remember what the 2 1 0 were about but with the -exe you (obviously) selected the arma executable to run and everything else was AFAIR passed to that executable
thought so but i am interested in the 2 1 0 :D
probably something to do with access levels as it seems that the extension was build for developing arma extensions
I tried looking at the source code for my launcher but all I could find was that it was 0 1 previously π (around 2017 :P)
Looks like I was just copying what the Arma launcher was using Β―_(γ)_/Β―
That's cool and all, but they don't explain what the 1 and 0 mean π
Seriously though, thanks for the link π
Eh, I should have expected that :)
Btw. interesting error in one of these posts on the forum:
F:\Games\Steam\SteamApps\common\Arma 3>arma3battleye.exe 1
:)IMPORTANT: Please launch game via Steam or command line "arma3battleye.exe 0 1 [parameters]" from now on.
Uhh... okay π
2 1 0 is a countdown (all right sorry for the stupid joke)
π
@scenic canopy thank you!
So basically, pad every packet to 1200 bytes with nulls, right?
If by null you mean zero, yeah
interesting
Didn't even know this forum existed, seeing the changes on there sure beats "why is this broken now" lol
After some time has passed (and we have posted several warnings on this mailing list)
Is he referring to that forum as a mailing list or is there a mailing list that I should be looking for, right now? π€
xmas has come early:
FREE TOOLS update.
The free tools have been updated to the latest snapshot of the subscriber tools. More than 100 updates have occurred since the last tool release. Far too many to list here. (The changes are available in the documentation)
Note that obfuscation is always disabled for free versions, and there are at least a further dozen or so other tools that subscribers benefit from.
Enjoy
2020-11-23 Mirror for Free tools updated. https://pmc.editing.wiki/doku.php?id=arma3:tools:mikero-tools
@dawn palm i am not sure if this intended behaviour but since the latest update this macro:
#define INIT_DISPLAY(NAME,PATH) \
scriptName = ##NAME##;\
scriptPath = ##PATH##;\
onLoad = ["onLoad",_this,#NAME,'##PATH##'] call INIT_DISPLAY_FUNCTION; \
onUnload = ["onUnload",_this,#NAME,'##PATH##'] call INIT_DISPLAY_FUNCTION;
``` with call
```cpp
INIT_DISPLAY(DisplayName,ScriptPath)
``` gets translated to
onLoad = "[""onLoad"",_this,""DisplayName,'ScriptPath'] call (uinamespace getvariable 'BIS_fnc_initDisplay')""";
##PATH##
##NAME## the ##'s aren't needed
not my macro it's from \a3\ui_f\hpp\defineCommon.inc 
@blazing needle fixing, and bis or no bis, dedmen is right (they aren't required in the '##PATH##' s either). Bis will also learn, eventually, to not put trailing semis at end of a macro.
small updates for subscriber AND free tools
+fixed a few cosmetic errors in eliteness (see documentation)
+fixed a potential error when saving text with utf8 boms
+rapify: fixed wrong file name when #include fails
+fixed the # (stringify) for defines to work on partial line not just full line
no further updates will occur for the free tools until a showstopper happens.
@surreal wolf update for depbo:
linux tools now handle unicode text (and their boms when present) which are four byte utf32LE or BE
mac os utf16BE remains to be implemented
the above also 'happens' when using penguin text in windoze
Is there a way to extract the road network from a .wrp file, I've been trying to use Steamroller but problem is I'm doing it on Dayz ChernarusPlus and steamroller can't read it's .p3d files because it's in ODOL 53
My goal is to create a route-planner as my final uni project. I've also asked on the Dayz server but I feel I could get more help here
So I managed to download some of the unbinarised files provided in the wiki https://community.bistudio.com/wiki/DayZ:Using_Road_Tool_in_Terrain_Builder
But I'm still missing bridges, tunnels and sidewalks. Any ideas if those files exist in a licensed data package
@slate plaza You are on the wrong discord for DayZ things. Here you come for Arma 3 questions. Arma 3 offers path-finding functionality via SQF commands.
DayZ also offers a pathfinding api for agent naviation. Not strickly just roads though ...
I would not be aware of any legal source, where you would find the debinarized models for bridges and especially sidewalks. These are (to my knowledge) not usually part of the map making data that is published by Sumrak.
Allow me the comment, that if you just plan on doing some basic road path finding - that that will not really be sufficient as a final uni project - at least not in any university i ever visited. It's a matter of finding a world coord of each road segement, spending 2 hours on reading the A* wikipedia article and porting the pseudo code and you are done with it.
I know that it wouldn't be sufficient and I talked this with my professor I'm not only doing a pathfinder but also a webapp and mobile companion, I also have to write a thesis. The understanding was that I would have to use a fictional map and "you'll have to find a way to accurately weight the edges taking in consideration distance, slope and curvature of the road"
On the other point, I'm sorry this is not the best place to ask about this and I apologize
I also misphrased it, this is my final year uni project. I'm on my first year
Ahh ok π Well best of luck with your project. Let us in the dayz community know when you are done with it and got something working π
Thank you and I will post my work once I've figured it out
I managed to do get the shapefile!
what would be the best place to start looking into automating addon publishing via github? including building and publishing to the workshop
https://github.com/marketplace/actions/workshop-upload first result looking for steam Workshop github Action
oof I need to update the example it's unsafe and wont work after recent GH changes.
and add steam guard support 
Hah
Not even noticed it was you ππ
why use chernarus+ ? use a well know arma2 map (which works in arma3 just the same). all assets used by these maps have been published UNbinarised.
and of course with depew that you're using it will happily convert the wrp back to pew (or unbinarised) so why on earth travel up the wrong dark tunnel?
depew updated.
arma3p updated
i had a question about printing the rpt to the vscode output window a while ago and finally got around to hack something together. here is a vscode task that will get the latest rpt and watch it in the task window:
{
"label": "RPT Watcher",
"type": "shell",
"command": "Get-ChildItem -Path $env:USERPROFILE\\AppData\\Local\\Arma` 3 -Filter *.rpt | Sort-Object LastAccessTime -Descending | Select-Object -First 1 | Get-Content -Tail 1 -Wait",
"problemMatcher": [],
}
``` any comments?
nope just printing the rpt to a console
with "it" i meant vscode (natively/some plugin/etc)
the task window does not have filtering by default
imo without filtering or at least highlighting based on regex the rpt spam is just too unbearable unless you do very isolated sqf coding
true i just wanted to have a way to see the rpt in the same window that i code in
for more indepth things you'd probably need to create an extension which i cant since i dont know typescript (though i started looking into it a little bit
)
https://marketplace.visualstudio.com/items?itemName=everettjf.filter-line
https://marketplace.visualstudio.com/items?itemName=qcz.text-power-tools
https://marketplace.visualstudio.com/items?itemName=earshinov.filter-lines
Extension for Visual Studio Code - All-in-one solution for text manipulation: filter lines (grep), remove lines, insert number sequences and GUIDs, format content as table, change case, converting numbers and more. Great for finding information in logs and manipulating text.
these looks suitable. would just need to apply on .rpt by default as well with a predefined regex set
not sure if that is going in the direction that i was aiming for
but i suppose you can open the rpt via powershell in vscode with Start-Process instead of Get-Content
@blazing needle how do you deal with the unrelated rpt spam? using search all the time or clearing rpt each time you want to check something?
i dont. usually my rpt is clean enough to not need it
VR only scripting/UI work for the most part?
basically yes
how do you deal with the unrelated rpt spam?
my method is to simply search for mytag_ when found, it's not necessarily THE error listed, but has caused it.
depbo64.dll update version 7.91
+general text: improved utf8 detection. Ascii (not ansi) and utf8 are effectively the same thing, engine wise, but unless told otherwise, conversion to unicode for text display assumes local codepage. Cyrillic is now displayed properly, rather than interesting blobs and blatters.
rapify: +errors out if a drive:\spec is stated in a file\reference
+errors out if a \root spec is stated for an \rvmat\file (Credit @viscid verge / @quick fog )
+removed rebuild units equal as a lag muncher if only linting or if not a config.cpp
+fixed lesser used forms of "" and " in text variables and array arguments (credit @glossy inlet)
+added warning only for any (used) #define that is not FULL_UPPER_CASE
+changed trailing ; in macro bodies to warning only (Credit @viscid verge)
enjoy
Wow you fixed it? Thats awesome
https://github.com/playnet-public/ArmA3URLFetch
https://forums.bohemia.net/forums/topic/231816-accessing-player-data-from-api-endpoint/
A OpenSource ArmA 3 URL fetching extension tool. Contribute to playnet-public/ArmA3URLFetch development by creating an account on GitHub.
Hey Guys, i love playing Arma, but there is one thing that always bothered the hell out me... Why we have no way to save player data like custom weapon configs, player outfits etc with our account and access them on multiple multiplayer servers like King of the Hill or Altis Life? Over the past m...
I like the idea of having a separate api much more then having a DB extension
Yeah, but I think I would prefer to have the request details stuff in extension and kiss on sqf side.
well ... you could implement https://graphql.org/ easily and have that
that is exactly what we are doing for our stats tracking π
But i am really looking into using grpc
I personally currently Explore how I could use rust to create such an api
Tho... Barely have time
Sooo... It currently is just in a "it kinda works" state π
@dawn palm could be somehow skipped a Rapify error #define altered without an #undef?
There just a colour re-defining and before it was able to skip with -N parameter...
#undef WHATEVER
#endif
#define WHATEVER "pigs can fly"```
@void perch checking this....
D:\SteamLibrary\steamapps\common\Arma 3\Addons\sounds_f_weapons.pbo
I have no such file in my addons folder despite an update. what's going on here folks?
same, no such file here.
@void perch ?? what's going on?
(I wonder if bis released it to standard and NOT devel)
it's not the first time they would have done this, and if true, what's the point of bothering with devel at all?
also:
you cannot extract to an existing folder <-- meh, that was just recently added, right?
Aye. Don't rly like it tho
and is important. Nothing is more demoralising than extracting a pbo into your source folder
meh
makepbo fred
extractpbo fred p:
BANG!
and then I get blamed when they answer yes?
THEN it's their fault
(i mean, it's theirs anyway, when they unpack and don't pay attention before)
Just ran into that stuff yesterday, testing some macros and always had to delete the unpacked folder Manually
after the 10th time, it became pretty annoying

Yeah, sure. I've done that. But there was around a 20-30 lines with colours re-definings... π©
@dawn palm That's my wife's pc I was writing from, I just checked mine and don't have sounds_f_weapons.pbo either π€
I'll uninstall and re download it... had bad wifi on that pc for awhile, so maybe something got broke somewhere along the lines
sounds_f_weapons.pbo was removed as part of 1.90 it seems, https://forums.bohemia.net/forums/topic/222192-190-update-troubleshooting/
Hello! We have received some reports of connection issues to servers with the latest 1.90 update. We are currently investigating the issue, and would like to open a discussion regarding the update. If you have any questions or concerns regarding the update feel free to reply to this thread. Tips:...
important enhancements to pboProject
+orphan files in the temp folder (one's that no longer exist in the source folder) are removed. This reduces the need to ever use 'full build', and prevents unused garbage accumulating in the pbo.
+'missing paa files' in another pbo folder no longer happens if the folder is yet to be crunched and has the tga/png equivalent.
anyone know the error in pboproject/binarize:
GGATGLF
DePax: Unknown Tagg
makepbo failed: texheaders.bin failed
packing.log:
creating a texheaders.bin
a2_hmmwv\data\hmmwv_gpk_tower_1_co.paa:DePax: Unknown Tagg
Texerr: residual bytes at eof
detex: Texerr: residual bytes at eof
texheaders.bin failed```
Separately it lists it without the parent folder? a2_hmmwv is inside another folder with a2 ported vehicles but it doesn't mention it in the path.. If anyone has any ideas on where to look I would appreciate it! Thanks
>side note
It builds just fine as full build and noisy output with older mikeros tools but not updated. I get that error + corrupt PBO with new version.
Everything is up to date according to the updater so not sure what could be the problem or where I am going wrong
if I had a question/bug about MakePbo is this the place to ask it?
@tiny path try to resave the image with BI tools
I didnβt even realize it was pointing to the image properties, thanks @vague shard @dawn palm will try that!
Is there any .rpt highlighter plugin for Sublime Text 3?
@fiery thunder . Yes
Thanks both - resaving with tools worked
I've run into a problem with MakePbo and Compression (-Z) of PAAs
It seems to depend on the texture, but I think it's limited to PAAs that are DXT1 - sometimes the texture will fail to render in Arma 3 and ALSO prevent the entire interface it's in from showing as well
I have an overlay with a PAA in the centre (as a fake cursor), when the PBO is -Z=all the overlay is broken and doesn't render, and when the PBO is -Z="ogg,paa" it shows up fine
Both PBOs extract via ExtractPBO to roughly the same size (I have some additional SQF obfuscation, but all the PAAs are identical)
My MakePbo version is: makepbo Version 2.04, Dll 7.46
I'd like to keep -Z=all, as it saves me about 1MB, but I can't do that because of this texture/PBO bug
paas cannot be compressed due to the use of a texheaders.bin which looks at the literal offset, not the compressed one, when accessing the pbo. I am fairly sure that this is stated in the documentation along with (some) restrictions for sqf files.
something must be being compressed, I guess
-Z=all -> 2.53 MB (2,655,606 bytes)
-Z="*.paa" -> 3.69 MB (3,873,498 bytes)
they both extract to the same bytesize, so I'm assuming that the game is having trouble with whatever is happening in the -Z=all PBO
there is no 'all' file extension. folder, or name, so everything will be compressed.
i fail to see what your problem is, with the game having trouble.
i also can't fathom why your are surprised that on extraction the bytesize is identical.
i'm not surprised, I'm just pointing it out
anyway, if the behaviour is if you put 'all' that it will compress things, regardless of whether it should, then that's fine - if unexpected
since .ogg files will reject that compression - if textures shouldn't be compressed, I'm surprised they don't also reject it
if the advice is to not compress paas, that's also fine, it's just that the behaviour is undefined since the paas will sometimes work, and sometimes not - and I was just looking for clarifcation on why that was (and if there was anything to do to fix it)
yeah I thought that'd be the case too - but I'm still saving 1MB somewhere by doing it
that's really the driving motive here, keeping that saving, if I can
that .ogg compression rejection - I think I'm wrong about that being an outright choice the tool makes, it's probably just a size comparison - but if that's true it means it's definitely finding improvement in compressing the paas
I think we bzip our DXTs at work and get decent compression out of it
there are around 8 different encoding techniques for paa and pac files. DXT is the most frequent one encountered.
each of the 5 dxt formats simply extend the amount of information available in the alpha channel. Bis never used Dxt2 or 4, and rarely dxt3. It is either cheap alpha dxt1, or full blown alpha dxt5.
originally ALL encoding schemes were unconditionally compressed. Nowadays only the first two of the 8 layers of mipmaps are optionally compressed. It is for this reason that if another layer of compression were possible (and until arrowhead-arma2 it was) you would reduce the pbo size by about 20%
paa/pac compression uses lzo, pbo compression uses lzss
and yes, you are quite correct that my code will only compress a file if the result is smaller.
The reason why my tools do not reject paa/pac compression out of hand is the symptoms you accurately describe are considered a bug which might get fixed at some future date (pigs too, can fly). But, as you also discovered: thru judicious use, some paa is still pbo compressible.
cheers for the info, much appreciated - it sounds like for now the best route is to disable paa compression and cross my fingers for support later in the future
it does mostly work already, just with an odd edgecase that Arma doesn't like it
it'd be nice to see the compression savings in future but in my case an extra 1MB per PBO won't be the end of the world
when we did some tests with compressed PBOs in the past it caused issues with delta upgrades for arma3sync, steam workshop etc
Doesn't cause issues with my delta patching 
yeah our game has compressed archives for game content, which update every week, and it's a real hassle with steam delta patching
with pbo its different though, as each file inside the pbo is compressed individually. So it won't cause much delta patching pain as it can still delta per file
our archives sound similar, they're anywhere from a dozen to 10k individually compressed files (in differing compression formats)
if any one of the files in the middle changes we opt to either overwrite in place (if it's smaller or the same size) or erase it and append it to the end - so we don't mess with the byte offset of all the other files
apparently steams delta checking thing had trouble with it and we're looking to change how we're managing big archives
usually works fine, same with zsync that arma3sync uses with HTTP
In case someone was interested but not following the discussion in that thread (Changes to the A2S_INFO protocol), they eventually decided to add a challenge for a2s_info as well.
New discussion thread: https://steamcommunity.com/discussions/forum/14/2974028351344359625/
pboProject updated to:
+accept Appid on the command line
+Allow shrinkage of p3ds for servers (dayz only)
+ExtractPbo fixed bug with ofp rap files (yes folks, flashpoint is still being played)
+Small improvements to depbo64.dll in errror messages to make them clearer.
is there any "clear" documentation for toolmaking
depends on what kind of tool you're making
@dawn palm I once tried it through the shop email, but if it is ok, will post it here:
The Readme for MakePbo inside the ...\docs\PboProject\ folder ( MakePbo.ReadMe.htm ) is actually an shortcut with an path that I guess is on you pc or so and not and html doc. path: *:\*\*******\**\*******\DePboTools\MakePbo\Package.
Does not seem that important or urgent but wanted to let you know.
π
CRITICAL ERROR in pboProject which will erase your source\ folder if building maps.
update to version 2.95 asap
versions affected are 2.90 -> 2.93
thats scary
could someone quickly scim over my docs https://github.com/SQFvm/runtime/blob/master/src/sqc/ReadMe.md ? need to know if it is bearbale as documentation for my custom alt. language SQC
Also will gladly accept style-feedback
Your https://github.com/SQFvm/runtime/blob/master/src/sqc/ReadMe.md#logic is flawed π (greater/less than)
(I'm not qualified to give more input as i don't script)
I could correct small typos but I doubt you're actually interested in these
i appreciate any help i get π
there is also https://github.com/SQFvm/runtime/blob/master/src/sqc/ReadMe.md#switch
where the sqf example should be switch 5 do and case 2;
Hey guys, does arma 3 supports netcore class libraries (for extension making) ?
Yes
π
How can I import a vest model into arma? It's not rigged at all
That sounds like something for #arma3_model , rather than this chat (i think model is the right chat) @smoky halo
is there any documentation for the terrain builder project format?
No
That's too bad
Okay I hope this is the best place to ask this.
Are there any tools that allow me to send events outside of ArmA 3 that could tie to an Arduino controller?
In flight simulations we can manipulate physical instruments based on data coming out of the game.
Yes, with a custom extension.
I don't know of any existing arduino targeted ones.
I have one that can extract data and control things via websocket
I am reading on websocket now. Looks like there is something that can tie it to Arduino.
What info do you need?
Rpm, airspeed, angles
The simplest solution would be to read/write data from a serial connection in the extension, I think
And then just Serial.read() in Arduino
uses serial, with code for both game and arduino
there are a couple of other examples as well
I would rather put a tablet on my desk and render the stuff instead of building hardware :u
I use my stream deck for both arma and dcs π
But building hardware is cooler (and I'm saying that unironically π )
i.e. like this https://i.redd.it/1tu7q796w8t21.jpg
Oooh cool
they can be found quite cheap during sales, one can both use their official SDK via their desktop app or third party SDK for direct integration with it
@scenic canopy does it simulate an USB keyboard and then you bind the keys to actions in Arma?
depends on how you set it up π
that's the basic mode
or you can tie it directly to the game engine with two way I/O
Let me guess: But then you can't use it on public servers running BE π
Yes like that.
I have sling load, gear and radio on phone.
Wanna extend that to more stuff and get a tablet for it
Not really because it will probably require something on running on the client anyway - something that public servers will not have the keys for
I don't play on public servers π
I've done a few hardware builds for several games for fun, back in the day (and some even required modifying the games' memory so RE was required - twice the fun) but I just thought that it was pointless to do the same in Arma, unless you play on your own servers 99% of the time π¦
Okay, I am trying to keep up information overload lol
and if you have private keys for mods being used on the server it also helps π
and if you have private keys
And if you work for Bohemia it helps you even more π
a lot easier to make these things with intercept as well
C'mon, we're talking about mere mortals, here π
It's time to ascent
Dedmen could actually have a private client tailored for him, instead of having to use... blah... extensions. Like these filthy casuals π
I never got see BI Studio but holy heck BI Sim is nuts. Their place was incredible. They sky was the limit for techies like me.
I was considering that a few years ago but right now I have too good of a job, unfortunately π
Interviewed twice on site but did not get the gig RIP. Sorry off topic...I will read some about the compass so I can come back with more educated questions.
So you have an idea where I am starting I have a basic understanding of Arduino coding but all my extraction tools for data have been pre-made an rather easy to do. https://www.youtube.com/watch?v=1cHPRzPjocA
my two favourite tools for making integrations are https://github.com/intercept/intercept or https://github.com/BrettMayson/arma-rs
Oh, so we're advertising libraries now? π
Then if you like Python, you can use my favorite tool for integrations π
but but static typing!
Use type hints, you fool!
Besides, if it looks like a duck, quacks like a duck, it's a duck... or a 'NoneType' object has no attribute 'quack' π€·ββοΈ
π
lack of linux support would be a no go for me though
sadly linux x64 support for intercept is not done yet
it builds but the hook for game state does not work last time I tried my PR
If you're referring to Pythia's lack of linux support, then believe me, I would have implemented that a looooong time ago, if on ly I had enough time to do so π¦
We've resorted to running windows Arma3.exe with wine, just because Pythia wasn't working on linux, because that was faster to set up, than implementing all the Pythia features for linux π¦
π
running the server via wine works quite fine
though I prefer the stdout/stderr logger π
It gets even funnier if you're running it on windows, with WSL2 π
having a watcher for the rpt file is a bit meh for scaling out with containers
(and yes, we've done that, for development and testing π )
Someone's been slacking a bit...

You've still got a few hours left to be able to say that you merged that in 2020 π
haha
I planned to do my junit test thingy in intercept first but here I am with a rust extension instead π
Eh... sometimes, when I hear about all the things that your unit does, I'm tempted to join you (and learn the language) just to be able to do fun programming stuff π
I'm just trying to automate away boring tasks, so far I've found and fixed a couple of hundred config issues in some mods I'm involved with π
it also helps when doing compat stuff for JSRS etc, no need to manually try every weapon whenever either JSRS or the mod getting overhauled sound changes
I guess that's not tested right?
it works up until one of the game engine hooks, it does not find the game state
did I create a PR for the improved logging?
I don't remember anymore π
I had to add that to find out where it broke down π
I guess not π
The loader changes don't look right to me.
But they aren't used yet when you fail that early.
Don't remember improved logging
can't find it either π
I think the vtable thingy worked but not find_game_state
looks like I have the extra logging in my working directory π
Junit thingy?
sqf helper functions that wraps an extension to create junit/xunit xml files
so I can standardize my in game test tools and just give the xml files to whatever reporting tool that fits
i.e. jenkins, danger etc
thanks dedmen β€οΈ
No better place and time to merge a not fully tested, not fully working PR than sitting on couch with phone watching BΓΌttenwarder
π
ahhh
yeah ... probably would be nice to have for sqf-vm testing stuff too ...
finding the failed tests is ... ugly
aren't the tests in C++?
I've mostly used the Catch2 test library for C++ with fitting reports, mainly console and junit
sqf-vm features no C++ tests as of now
did never bother to add tests for it, if the sqf-tests (https://github.com/SQFvm/runtime/tree/master/tests) pass (which they do for everything but macos as of now ... which i cannot debug due to me not owning a mac π ) the VM is considered good
SQF tests tho cover most operators implemented
should write some utility one day to find those not used in the testing
right, I should fix those macOS tests π¦
if you can, please do
but the issue is somewhere in the parser ... soo not sure if you actually can do without guidance π
parsing ain't everybodies cup of tea afterall
So, what exactly is wrong on it? I'm currently getting this set up for our tools and obviously it would be preferable to find out now than running into brick walls π
the echo ::set-env name=VERSION::$(echo ${GITHUB_REF:11}) is a no no and that messes with the later hemtt and workshop steps using that env variable
Because that's the stage I'm at now... though I don't see it reflected in the article you just sent @scenic canopy
it is, they link the docs for assigning new variables via the environment file
time to make a PR I guess π
@neon flax https://github.com/arma-actions/workshop-upload/pull/3 π
Aaah gotcha
That gives me a bit more understanding actually
I'm so close! But the minute the thing starts the update of the workshop item, it immediately fails -.-
Ach... I'm struggling here. Any help would be appreciated. I've tried to incorporate Veteran's Github Action, and it works great... right up until it uploads the content. See the workflow run here: https://github.com/Saborknight/sw-upload-test/runs/1633608768?check_suite_focus=true#step:8:83
Preparing release v0.0.0
you're trying to publish a release of hemtt that does not exist
Uploading item 2344670619 for app 107410 from releases/24.1.1/@sw-upload-test
no bueno
HEMTT created 0.0.0 while steamcmd is trying to use 24.1.1
Huh.
you have the same warning on the github release step
releases/SW_Upload_Test_24.1.1.zip not include valid file.
Yeah... I get where the version is gotten for the action, but I can't figure out what HEMTT does to get it... because I don't really know what this is doing:
# HEMTT >= 0.7 (unreleased)
#[header_exts]
#version = "{{git \"id 8\"}}"
headerexts = [
"version={{git \"id 8\"}}"
]
I don't get it because, you see {{version}} being used before this, which looks like the place it's defined in. https://github.com/Saborknight/sw-upload-test/blob/master/hemtt.toml
No, but I've forced the version for now
In the hemtt.toml file
wait... what's the latest ?
0.7.6
Ah.... now I need to find out where that's being forced..
here's the 0.6.0 version logic, https://github.com/BrettMayson/HEMTT/blob/v0.6.0/src/project.rs#L279-L311
unless specified in the project toml
Ah. Right.That would explain a few things...
I don't get it... it's supposed to get stable according to this: https://github.com/Saborknight/sw-upload-test/blob/43974e9f1cb8a26fb2a64e615636dc47640c8b46/.github/workflows/release.yml#L16
yes, stable version of the 16AAModTeam's fork of HEMTT github action
which is pinned to 0.6.1
here's the official one, https://github.com/arma-actions/hemtt
Oh. I'm clearly too tired for this. These are all very stupid things that I'm skipping over right now
though I personally prefer to use one with pinnable version
How come? Jesus... I really am tired
not supported by either of those, other than the fork's stable which currently is locked to 0.6.1
Well, regardless... It's uploading to Steam Workshop now. So yeah, it was the versioning that hemtt works out with the mod's #define entries, or me forcing the version in the hemtt.toml file. I'm getting a much better understanding of how this whole thing works now. I'll get the rest sorted tomorrow. Thanks for the help Dahlgren!
Also wanted to get sqf-vm powered github Action running Btw. But cannot be bothered to do everything required for it ππ
i do have a very basic one, let me now when you get smth up running π
Tbh... Not really understanding how the whole Action thing in github works and no plan to learn it as of now
But as usual, I am happy about every contribution made to sqf-vm
Quick question, can extensions run while in the Eden editor? Testing stuff rn and not getting anything in display 313 but I do in display 46
yes they can
hey I've seen you over on @karmic niche 's Pythia discord, so I suppose you are talking about this extension :) Pythia's functions have recompile enabled, that means that they only exist inside of mission or more precisely that they are compiled on mission start. extensions do work in 3den, just not Pythia's functions π
Yeah that was my next thought, just continued to test in mission for now, was gonna raise the point later on to him
kinda ruins my plans of having it work in 3den though π
yeah I had the same problem and just made my own function based on Pythia's but without the recompile. If you are making a mod you could probably modify the config to remove the recompile. Not sure if that might break something or what the reason behind recompiling in this case is.
Well on the plus side I got what I wanted working inside a mission... and it seems like stack is typing now π
@dusky dune was the one doing the sqf part so I'm totally not putting the blame on him π
π
I don't know sqf, believe it or not. But I'm accepting PRs π
cc: @blazing needle
Have cfgFunctions with recompile never been in uiNamespace?
Its been years since i used them in the vanilla way
in 3DEN i traditionally call from uiNamespace and it should exist in there i believe
uuhh never heard of that but who knows. The more common use is from missionNamespace
[_args] call (uiNamespace getVariable "py3_fnc_callExtension")
Unless cfgFunctions init was changed it was parsingNamespace, uiNamespace and missionNamespace
Where missionNamespace does not stay as the same namespace between preview, exit and reloads hence it's unreliable at that point anyway
/*
Function: ADA_Eden_fnc_onEdenEvent
Author: Adanteh
Description: Wrapper for all possible edden functions, so we don't need to reload config
*/
#include "macros.hpp"
params [["_event", ""], ["_args", []]];
if !(is3DEN) exitWith { };
private _functionsAvaiable = missionNamespace getVariable [QGVAR(init), false];
if !(_functionsAvaiable) then {
missionNamespace setVariable [QGVAR(init), true];
_this call (uiNamespace getVariable QFUNC(onLoadMissionNamespace));
};
if !(MODULELOADED(MODULE)) exitWith { };
is what I even have in my Eden module for Plopper just to force reinit (Because I do use missionNamespace in those cases, but I need more reliable way of determing when exactly the missionNamespace changes
class EventHandlers
{
class ADDON
{
onUndo="['onUndo', _this] call (uiNamespace getVariable 'ADA_eden_fnc_onEdenEvent')";
onRedo="['onRedo', _this] call (uiNamespace getVariable 'ADA_eden_fnc_onEdenEvent')";
Etc
π I'll start working on it, thanks
got some tiny extension going here:
https://github.com/X39/extFileIO
might be handy for some people here
note though that only three operations are supported as of now as i did not have had the need for more
Is filesystem lib faster than fstream one ? I mean, for file manipulation with extensions.. I am no expert on this subject, but I managed to get better results using fstream. Sorry if this is a simple question, I'm trying to learn π
iostreams are generally considered slow
std::filesystem is something completely different, the code linked above uses fstream/iostream
anyone able to help out on this one?
https://stackoverflow.com/questions/65605184 C++ related with variadic templates
Stuff got an answer, will Code some fancy method host for c++ extensions tomorrow
And probably some basic testing framework for extensions too
auto m = sqf::method::create(
[](std::string path, std::optional<std::string> mode) -> bool {
return mode.has_value();
});
std::cout << "can_call 1: " << m.can_call({ "'test'"sqf }) << "\n" <<
"can_call 2:" << m.can_call({ "'test'"sqf, "'test'"sqf }) << "\n" <<
"can_call 3:" << m.can_call({ "'test'"sqf, "'test'"sqf, "'test'"sqf }) << "\n" <<
"can_call 4:" << m.can_call({ "'test'"sqf, "2"sqf}) << "\n" <<
"can_call 5:" << m.can_call({ "2"sqf, "2"sqf}) << "\n" <<
"can_call 5:" << m.can_call({ "2"sqf }) << "\n" <<
"call 1:" << m.call_generic({ "'test'"sqf }).to_string() << "\n" <<
"call 2:" << m.call_generic({ "'test'"sqf, "'test'"sqf }).to_string() << std::endl;```
can_call 2:1
can_call 3:0
can_call 4:0
can_call 5:0
can_call 5:0
call 1:[false]
call 2:[true]```
think things cannot get more simple then this now for extensions
i was wrong:
auto m1 = sqf::method::create(
[](std::string path, std::optional<std::string> mode) -> method::ret<bool, std::string> {
return method::ret<bool, std::string>::err("abc");
// alt: return { {}, { "abc" } };
});
auto m2 = sqf::method::create(
[](std::string path, std::optional<std::string> mode) -> method::ret<bool, std::string> {
return method::ret<bool, std::string>::ok(mode.has_value());
// alt: return { { mode.has_value() }, {} };
});
auto m3 = sqf::method::create(
[](std::string path, std::optional<std::string> mode) -> bool {
return mode.has_value();
});```
NOW it cannot get simpler
tho ... ret is too verbose 
https://github.com/arma3/sqf-value/blob/master/sqf-value/method.hpp just in case somebody wonders how it works
What is this for?
can't create a key to sign my addon i just get this error
i've reinstalled the tools like 3 times
when i try to create new keys i get this https://pastebin.com/PtsTfBey
use pboProject and be done with it.
@dawn palm just tried that and i use the paid version of your tools https://gyazo.com/c9c533fa866d7b4e3fe6cf40b525c28e
sadly i cannot create a key with your tools or A3 tools
Hi i hope some one cant help me as for some reason i can seem to sign my work any more in the log file this pops up table border=0 align=center width=95% cellpadding=0 cellspacing=0trtdCode Sample /td/trtrtd id=CODEError description: 8009000b: Key not valid for use in specified state. CPAcquireCo...
In my most recent attemp to sign an addon with the 2.51 tools I received error mesages using both the cmd promt method and soners Addon Signer GUI. The only method that seemed to work was to point BINpbo at my privatekey, but Im still skeptical as I dont know what to expect from this method and i...
TL;DR; it can be related to Windows password, try changing the user password
lol thats the thing i don't have a password
everything was fine until i started using a new SSD
Set a user password π
i'll try that real quick but i don't think it will change anything
just tried to make a key with mikero's and it failed due to CPAcquireContext failed
still can't make a key with a3 tools either
re-down;oad steam tools
did that 4 times now
still the same problem
even went to Microsoft website to download the framework 4.5 to be sure that it was installed and it was
what IDE/tool had code formatting again for sqf?
I've seen that there is a new extension for vscode: https://marketplace.visualstudio.com/items?itemName=Smith.sqf-formatter but haven't tested it yet. If someone got any opinion on that one I'd be interested to hear it
seems to be changing some chars from upper case to lower case as part of the formatting, which in my case is breaking macros π¦
though that may be because the part of the macro it edits is itself a command (from)
surrounded by underscores in the macro name?
yea
i find it changing the casing at all a bit weird tbh. it makes variables and commands bad camelCase.
eg
isEqualTypeArray -> isEqualtypeArray
ctrlPosition -> ctrlposition
_ctrlGroupHeader -> _ctrlgroupHeader
o_O
Sqf-vm had some command line processing or was that just still planned?
https://sqfvm.arma3.io/vm/ has pretty print support.
but many of the newer commands missing, its quite outdated
π
Using sqf-vm for pretty printing can be quite... Destructive π
Unless your contents actually does not use any preprocessor
What do you mean with command line processing?
sqfvm.exe --pretty x:\folderToProcess
linting and formatting would probably be better to have as a separate binary using the same sqf vm library
to avoid bloating the vm cli
preferably with great configuration via some config file π
plugin for prettier 
issue for pretty-printing is still macros tho
cant you skip them? ^[ \t/]*#anything.+ and \b[A-Z]+\b
Since he's parsing the whole code I think he doesn't need any regex to determine what is and what is not a macro π
But yeah, skipping them would be a good idea. At least for a start
yeah but if I understand correctly he resolves macros
then parses AST
then he can assemble the AST back to code with whatever formatting he wants
Eh, might need a separate branch without resolving, then π
you can't just skip the macros π
yeah, would need AST where macro is part of it
treat the macros like part of syntax
not sure, he might need to prove he is. 
I guess you're right. Maybe I simply overestimated his skills
That way lies madness
HEMTT was going to do that, not worth it, for your sanity please heed my warning
for your sanity please heed my warning
That's not my sanity, though π€·ββοΈ π
Another solution would be to taint the AST element if it's been created using a macro expansion and then skip these elements during code formatting
one can use the sqf-vm tokenizer to pretty-print ... but not implemented and kinda doubt one takes up the task (tho, would obviously provide a repo and channel on git and discord)
could do, but won't any time soon
essentially requires preprocessing at tokenizer stage, allows for fancier and more exact error position deduction etc.
but that is quite a lot just to support that for no real benefit but knowing that some macro may or may not contain {
plus pragma support in arma may be sufficient to "solve" that riddle too
adding more informations when preprocessing with sqf-vm (like macro name, chain etc.) allowing reconstructing the original text
bbuuuuuuuuutttttttt as said: tokenizer is more then sufficient for getting a proper prettyprint
just that one has to code it
pragma support lands in 2.02 btw
what does sqf-vm do?
basically lets you test scripts without starting arma
by showing eventual errors ?
or does it actually show results of the script?
both π
it is literally a community (or maybe just me ...) written SQF runtime
aka: it has the same (most not implemented tho) operators as arma
ah I think I understand, too advanced for me
I though it would somehow show the results of more visual scripts like setVelocity, but thats not it.
Instead of "SQF runtime", I'd call it "SQF interpreter" - would be clearer for me, at least
And then you can say that just as the perl interpreter executes perl scripts, the python interpreter - python scripts, sqf-vm executes SQF scripts π
but it is a runtime for sqf assembly with a sqf (and SQC!!!! π) parser plus fancyo ther things like preproc and config stuff
wanted to pull apart sqf-vm anyways for month now ... but cannot find the time to do that
(pull apart => runtime (most common base), sqf-parser, preprocessor, config-parser, filesystem, arma3-operators, ...)
and then have a cli repo, where the actual executable lives in
And then add an Intercept sqf-vm backend so that people could finally write their scripts for Arma in SQF! π
mhh? people do write their script in sqf already
That was the joke π
i want them do do it with SQC instead tho π
SQC compile callExtension is something i can do quite quickly
actual SQF-Binarized (aka: SQF-Assembly in PBOs) would be nicer tho ...
especially because then i could extend SQC to also have some other fancy features (eg. async-await, yield return, ....)
lots of really fancy words to conceal the fact its all black magic
Not really
And everything is open source and available on github π€«
The magic is in how the code is written, nothing else π
But might Start doing Black magic
And add jit compilation once University does not eat up All my spare time
π€·ββοΈ
It ain't that hard in my head
Besides the whole jank that is writing Assembly π€ͺ
like, most SQF is control structures
removing calls, switch, ... thus will help A LOT
then, to make things simpler and less janky, one can deduct the type implicitly, given params is available and properly filled
otherwise ... things are more complicated
aka: ```sqf
params [["_scalar", 1], ["_string", ""]];
if (_string == "foo") exitWith { 0 }
_scalar
for pbo proj does anyone know what this error is..
debpbo64: returned error code 1```
btw my file is 80mg.. which is nothing for modding and ive packed way bigger files
perhaps stupid question; but do you have enough room in the tmp/ directory and/or target directory?
yea i have about 50GB of free space not a lot but it should be enough
it's npt the output size, one of your files is unreadable, reporting IT's size as a negative number
@dawn palm fixed it somehow idk what i did but its gone now
I will alter the error msg to be more specific.
https://community.bistudio.com/wiki/PBO_File_Format#PBO_Header_Entry
is Offset actually used in arma? or is it ignored?
its read from the pbo, but then overwritten with internally calculated value.
Kk
Meh... Hoped I could abuse it to create unused space in the pbo
If you just want to add data to your pbo without them being real files ... add headers π as long as your data does not contain 0 bytes you can put anything there π
You can't have 0-sized files in a PBO? π€
Also won't just appending data at the end work? I wonder how the engine computes the offset of the pbo hash. Is it the last bytes of the PBO or the first bytes after the last file contained in the PBO?
If the latter, then you could even create a polyglot file that would be a valid PBO and also a valid zip file π (because AFAIR the zip table of contents is simply at the very end of the file
My SQF bytecode project from mid 2019 is finally taking form
Before and after
Code:
[player] call ace_common_fnc_getWeight
Result:
0.0402 ms
Code:
[player] call ace_common_fnc_getWeight
Result:
0.0344 ms
And game preStart time
params [
["_group", grpNull, [grpNull, objNull]],
["_weapon", objNull, [objNull]],
["_leaderPos", [0,0,0], [[], "", objNull], 3]
];
Before: 0.00973
After: 0.00225
Faster game startup, and faster scripts across the board (if a given mod was packed with precompiled bytecode)
Will have to... Yeah π π
My SQF bytecode project from mid 2019 is finally taking form
Don't do it! This will make Management think that they purchased Black Element pointlessly because all you needed to do was to optimize SQF π
He ain't optimizing sqf here really
More like how it is read in, swappinh expensive parsing with cheapo reading
Yeah you could probably do much more elaborate code reordering kind of optimization.
but that's more in your realm π
The sqf-vm jit will come, once I have actual spare time with University
Emplacing the if, foreach, while,... With assembly should increase execution speed by a Hella lot
btw I don't want to put you down or something, but until there is a SQC-Intercept plugin, there isn't much point in developing SQC (other that out of personal interest)
I don't see why someone would want to write code that can only be interpreted by something that is a replacement for a game script interpreter π¦
Uhm... You can use vscode to make it print a sqf file on every save
And with the sqf bytecode stuff, it can be precompiled to bytecode during packing stage π€ͺ
π€
SQC compiles down to same assembly code as SQF
Just get the sqfvm language Server and Hit ctrl + , π scrolling down will Show you the magic switch
And you can just Serialize that as bytecode, and as Arma can (soon) load bytecode, use it.
maybe stack should into typescript
Damn, I may actually start learning Arma modding, with that π
You meant typethon? π
I may need to add some new assembly instructions so you can do more useful things now that you have assembly access
Would be naice
But yes, SQC is actually the Typescript for SQF
Has no type checking yet beyond what sqf offera
But it is on the todo
That's not what i meant π
Code you write in typescript is never executed, it's converted to javascript that is then run in the browser
Ahh
Well.. Yeah π
Tho, sqc can be directly executed using sqf-vm π€ͺ and I know dahlgren works on testing cba with sqf-vm rn
Yes, but the context was that I refused to learn SQF because of its syntax (and because I had a gazillion of other more interesting things to do). Call me petty, I don't care π
Now, if there actually is something that resembles a programming language, I could give it a go π€
...when I'm done with YouKnowWhat
It resembles Javascript for the most Part even
This all looks pretty awesome Dedmen, really appreciate all the cool new shit you keep coming up with!
This stuff is from april 2019
π
I'm just cleaning it all up and integrating it into the game
integrating it into the game
What do you mean by that? π€
when it sees a .sqfc file (precompiled bytecode) it will load that instead
previously I did that via intercept which ofc wasn't viable to most modders
Oh no! I've been !wiki'ed! π¦
I also plan to make binarize.exe able to "binarize" sqf files and give you sqfc. Buuut.. Not 100% sure about that one
The community compiler is completely open source and has a more better experimental optimizer so... might just use that instead
Wait, so you're basically giving access to people to provide "machine code"-like data to be interpreted by the game interpreter?
yeah
Maaan, if I knew this stuff, I'd just be jumping into LLVM backend development π
SQF code is compiled down to instructions which are then "interpreted".
The sqfc is bare instructions loaded directly into the game
Imagine a C++ LLVM compiler that has a sqfc backend so you can literally compile C++ code into sqfc
X39's SQF-VM provides the instructions, I put them into a usable file format and let Arma read it.
SQF-VM is so well implemented (close to Arma) that its basically just plugging the correct things together
SQF Assembly has very few instructions, its still pretty limited
but once we know what we need, we can experiment with adding more instructions
SQF is a stack machine, without registers
but you have registers.
One thing I saw today while doing my optimizer testing with https://github.com/acemod/ACE3/blob/master/addons/common/functions/fnc_getWeight.sqf was
_unit,
uniformContainer _unit,
vestContainer _unit,
backpackContainer _unit
];
This does 4 get variable calls, it could just do one, push it into a register, and then pull from the register the other 3 times
what performance impact that would have, I have no idea, it was never possible to do such a thing so..
A time of loads more SQF performance experiments is incoming
I will also try to make a API for intercept, so you can register your own script instructions and fiddle around with ways to make it better.
Yeah, unfortunately, based on this stackoverflow question, LLVM looks not fit for that:
https://stackoverflow.com/a/38972640/6543759
How to write an LLVM backend for stack machine?
Just don't do it. LLVM DAG is designed specifically for the register machines and is of a little value for a stack machine compilation. You'd need a custom backend instead.
Sad πΌ
When you can create your own instructions though, you can build registers
the instruction that calls unary script command pulls the argument from stack.
You can make a copy of that, that pulls it out of your self-built registers
You'll put Mikero out of the obfuscators business with this π
or easy way
putValueFromRegisterOntoStack _register1
callUnary commandName
X39 already wrote a Assembly decompiler
Stack based could do here too
But would require explicit push/Pop instructions specially for this
And special call instructions not poping etc.
Long Story short: pretty much changing everything in the backend if I was to do it in sqf-vm
but yeah, you can include only bytecode in your mod/mission, and strip all the plaintext sqf out of it if you wanted to, but please don't :U
That is just normal Part of sqf-vm π€π€
Yeah exactly.
That was my idea.
Add push/pop instructions to translate between stack and registers, that would probably be the simplest solution
That way you can turn
_unit,
uniformContainer _unit,
vestContainer _unit,
backpackContainer _unit
getVariable _unit
getVariable _unit
callUnary uniformContainer
getVariable _unit
callUnary vestcontainer
getVariable _unit
callUnary backpackContainer
into
getVariable _unit
pop _register1
push _register1
push _register1
callUnary uniformContainer
push _register1
callUnary vestcontainer
push _register1
callUnary backpackContainer
something like that
Problem is that callXXXX will push too...
But woudln't that make the scripts even slower? (emulating registers)
Ohh.. You want to actually turn the whole runtime up and down?
no. Pulling from a register will be faster than doing a hashmap lookup for the variable
Youre not emulating registers really tho
You just need two values anyways theoretically
Tho Practically... That aint so simple
Will consume loads more cycles for simple things
For an Essential edge case
yes. You could implement special instructions that will pull/push with registers vs the stack.
so callUnaryRegister _resultRegister, _argumentRegister
I don't think I feel like doing that tho.
Theoretically, you aren't even limited by the amount of registers, its really just a hardcoded index to an array of script values.
You could tell "Hey allocate me 40 registers for this function please"
passing registers between script calls
oofski
They will probably be seperate list of registers per scope I guess?
in SQF you just don't know the side effects.
Or make up your own calling convention
So many ridiculous-ish ideas that I don't want to try, but I'll just open it and let others try it for me π
Sorry, I must have misread how you said emulating registers was supposed to be implemented (and I don't know the SQF assemby either). If it's as simple as "lookup value at offset X" then sure, it looks quite good
Well... One could turn sqf runtime into a proper stack based Machine, change loads of things Including value Stacks to have values sitting at offsets, making the caller manage that, removing loads of things from the actual language... Side effects would be devastating tho as it would break the entire variable lookup stuff
Given that sqf-vm is correct on that
Or make up your own calling convention
If you implement registers and a function calling conversion, Imma learn and create an Arma plugin for Ida Pro! π€£ (yes, I know, pointless π )
#arma3_scripting message
Dang, took me a while..
SQF has these instructions:
push value (push a value to the stack, usually a constant like a string or a number (not bool, they are commands))
makeArray count (take the count values from the stack, make them into an array and push the array back to the stack)
callUnary commandName (call command with last value on stack as argument, put result on stack)
callBinary commandName (last 2 values on stack as argument)
assignTo variableName (assign last value on stack, onto variableName)
assignToLocal variableName (private _var = ..)
getVariable variableName (get value of a local/global variable or a nular script command and put it on the stack, every variableName is first checked whether its a command name if it doesn't start with _ )
endStatement (cleanup leftovers, like when you don't assign a return value to a var)
the number of instructions is basically the limiter of your script performance. Especially command calls are slow (for multiple reasons, many of which sadly security against hackers which is putting a HUGE dent into our performance).
Arma has no optimizer, so a simple params [['_CBA_code',{},[{}]],['_this',[]]] which basically every script function does, ends up as a
endStatement;
push string '_CBA_code';
push code {};
push code {};
makeArray 1;
makeArray 3;
push string '_this';
makeArray 0;
makeArray 2;
makeArray 2;
callFunction params;
But, you can rewrite this like so:
endStatement;
push array [['_CBA_code',{},[{}]],['_this',[]]];
callFunction params;
That's the main optimization point.
Same for
_number * (1/1.73)
SQF doesn't optimize that constant down, it calculates it every time you get there, mine and X39's optimizer do.
...just let me compare these with the python's stack-based vm opcodes, now that I think of it... π
Better not
It does not compare
Don't worry, I don't have the time to work on this anyway π¦
But a man can dream...
A man can help development with sqf-vm making use of New arma Features
what you really should do is add a new scall binary op, like call but it hides locals from the callee. that would enable local optimisations
privateAll;
allowing custom calling conventions for community made utils would be sufficient tbh
allows for some very neat optimization on a whole different level
Anyone know of a python or c++ library that can write config files?
https://github.com/overfl0/Armaclass not everything 100% perfect, but might do what you want
Better that writing a poor version myself, much obliged!
not everything 100% perfect
I kill you!
I'm still waiting for you to add tests to the PR that you submitted, in order to merge the PR π
I guess, that's why it's only 99% perfect
testing is for nerds
Writing out Configs in sqf-vm π€π€ actually might be useful
@karmic niche The class is perfect for what i need. I'd say 100% perfect. Not to mention the awesome parser that just happens to be part of it π
Take that, @dusky dune ! π
The parser is actually is just reimplemented from a JS version made by someone else π
You took the time to rewrite it in a better language. So still a good job.
I know, right? Β―_(γ)_/Β―
experimenting a bit more with script optimizer.
This is what happens when you turn the array passed to params into a constant instead of letting it be re-built every time the function is called.
player call CBA_fnc_viewDir
0.0663 ms
player call CBA_fnc_viewDir2
0.0515 ms
just free performance.
Which when using SQF bytecode, you get with every script function
Faster "compile" time:
Result:
0.429553 ms
Code:
CBA_fnc_viewDir = compileScript ["x\cba\addons\common\fnc_viewDir.sqf"]
Result:
4.04858 ms
Code:
CBA_fnc_viewDir2 = compile preprocessFileLineNumbers "x\cba\addons\common\fnc_viewDir.sqf"
And faster runtime:
Result:
0.0473 ms
Code:
player call CBA_fnc_viewDir
Result:
0.0573 ms
Code:
player call CBA_fnc_viewDir2
These are the numbers of the current actual engine implementation.
"compile" time 10x as fast (translates to about 14 seconds faster Arma startup with ACE,CBA,ZEN
runtime ehhh 20% faster? I can't numbers.
nice
And the optimizer is open source to freely play around with
Here is the params optimization
https://github.com/dedmen/ArmaScriptCompiler/blob/master/src/optimizer/optimizerModuleConstantFold.cpp#L181-L219
from
push "_vehicle"
callNular objnull;
callNular objnull;
makeArray 1;
makeArray 3;
push "_weapon"
callNular nil;
push ""
makeArray 1;
makeArray 3;
makeArray 2;
callFunction params;
to
push [["_vehicle", objNull, [objNull]], ["_weapon", nil, [""]]]
callFunction params;
It would be rather useful to have the whole Script blob available π€ one could then eg. Remove all duped checks or remove the calls themself, folding the code essentially until it is as optimized down to the last bit of the call tree as possible
Like, if an if gets repeated in a Lower scope, then there is no need to do that
Call could be eradicated always, given that it only pushes a new scope in that sense
Params, same game, just remove
...
unless variables used have changed (or any invisible "call" inbetween)
Given that you have full knowledge about the whole call tree, you can know that
you often don't
if its a call to a variable, you don't know where it goes
and even things like condition&&GlobalVariable you can't know
Depends
An "educated guess" can be enough to increase Performance too
And removing call and params or restructuring Code so it is not repeating the same if all over the place might also be enough for another few ms
Yes it can. Either improve performance or break the script
Keep up the good work dedman!

Oki don't then
Btw I just remembered and I'll probably have to add that to the README.md:
Since Python 3.7, ordering is retained in dicts so you don't have to explicitly pass in keep_order=True for parsing nor use OrderedDicts for generating configs
Assuming you're using python 3.7+, of course
Im having issues with PboProject by Mikero. The error message im receiving at startup is in german, but you might still be able to help me. Roughly translated: The "?fs_SkipRootSpec@FilestringW@@QEAAPEB_WPEB_W@Z" Processentrypoint was not found in the DLL file "C:...\bin\pboProject.exe".
Ive allready reinstalled Pbo Project yet nothing changed. Couldnt find anything on Google, so can someone tell me something about this error?
Thank you. That totally did it!
I would have never guessed that.
Im having another issue related to the Toolbox. The Enviroment Path is not correctly added so PBOProject cant launch rapify. ive started the SetPath.exe manually, and while dong it from commandline i receive the error, that "The required library hostfxr.dll could not be found." It feels like i need the .NET Framework to run this, but it says you just have to run the installers to get going.
Probably not packed with self-contained flag
But is there something i can do about this?
Or do i just have to manually add the PATH to the enviroment?
either add the path our you could probably install the dotnet core runtime
Can anyone recommend good config parser? I would like to batch process some old configs (even OFP ones). I tried https://github.com/BrettMayson/Config2JSON and all mentioned ones in README in there without luck. Usually those parsers can't handle for inline comments, non-string values, ...
PS: I asked in wrong channel before. :/ #arma3_config message
Have you tried https://github.com/overfl0/Armaclass ?
And if it doesn't work with a valid config, submit a ticket and we'll see about fixing it π
@empty kindle
π
and all mentioned ones in README in there
Mine is mentioned in the README so simply head to "issues" and submit yours π
Although I probably won't update the parser if it's something that's not compatible with A3
If you don't tell me what's the problem you're never gonna see it fixed Β―_(γ)_/Β―
can't handle this part probably
units[] = {UKFLR110GPMG};
Should that be quoted in A3 to be valid? Sorry, I'm not really familiar with A3 configs.
seems so
units[] = {"UKFLR110GPMG"};
passes
I'll check if that is the only problem for this config
even true is not valid value?
autoFire=true;
should be
autoFire="true";
β
true is not a config value. usually it is handled via the define:
#define true 1
Should be valid in A3 too, sadly the quoting rules for configs are bit relaxed which is annoying when you want to write a parser.
Any valid OFP config should be valid A3 config.
So it should be a string? π€¨
So I have found out 2 main problems with that historical config (I picked really random one actually, I'll do more testing later).
- quoting is needed for strings
- semicolon is required at the end of statement (probably end of line = end of statement where it does make sense)
those changes do fix it - https://gist.github.com/simi/ebd585aeb8eb8e605414580585af89d8
Yes, it should get autoquoted
I can try to contribute to the project. Would that be welcomed @karmic niche ?
Sure
Relying on autoqute is a bad practice imho but well... Arma supports it.
Any idea about the semicolon requirements @neon flax ?
I'm 100% sure this config is valid in OFP.
Idk, easiest way would be throwing it into description.ext or something and checking if arma will crash.
and checking if arma will crash.
Good error handling is good π
Error handling is for the weak. 
Remember to add tests, if you do! π
@dusky dune you too π
Sure, I'll add the problematic parts in there. I'm not big pythonist, but since there is .travis.yml I know at least how to run tests π
I'll see what I can do in there. Thanks for the help everyone, heading to sleep for now. π€
@dusky dune thanks for the clarification, I can try to mimic the same in the parser.
As mentioned by @dusky dune paramfile strings don't need quotes.
when binarised:
hello world // and
"hello world"
are stored indentically in the binarised output. The only reason "quotes" are sometimes need is to avoid mis-interpreting a #define, eg
hello WORLD
be that as it may, as a convenience to the text editor such as np++ , tools that debinarise configs set the "strings" in qoutes purely as a convenience to the editor which will often color "strings" differently"
