#define MACRO_INCOMINGPROJECTILE(WEAPON,SOUNDSETSOURCENAME,2DDISTANCE,SOUNDLENGTH,PREFIX) \
class PREFIX##_##WEAPON##_incomingEH { \
fired = QUOTE(_this params ['_unit','_weapon','','','_ammo','','_projectile']; if (isNull _projectile) then {_projectile = nearestObject [_unit, _ammo]}; PREFIX##_incomingSoundArray pushBack [_projectile,'##SOUNDSETSOURCENAME##', 2DDISTANCE , SOUNDLENGTH ,time]); \
};class CfgVehicles {```
#arma3_tools
1 messages Β· Page 41 of 1
Need to make better preprocessor error logging, but thats mostly a waste of time
{
comments /*
are
permissible */
//in the body of a macro
// providing the all important
is=there;
}
my tools would never accept 2DDISTANCE
for the reasons dedmen has stated
unless you force them with makepbo -n π
-n was removed from makepbo something like a year ago
Does someone else have the latest Mikero tools installed and can confirm or deny the following error: https://i.imgur.com/ifSSq4i.png
Doesn't matter if I pick yes or no at the start. Specified drive is P: and I can see that the tools copy files to it
latest in terms of free I probably need to add
if necessary, you can delete argo from manifes.txt in my bin folder
true, but what exactly is the conflict here? Does the tool tries to merge into a folder that is called the same? I mean malden has it's own pbo's afaik. I will remove it and try again. Just seems weird
the free tools have been out for some time and no-one else has reported this. The specific error is characters_f_patrol pbo is trying to overwrite data from an already extracted pbo. Sounds like you might have your bis addons in a bit of a muddle.
Kind of need argo if you want the terrain objects that it added
yes. i'll wash my mouth out. βΊοΈ
yeah, but I removed it from the manifest and currently trying the cmd again. Lets see. I probably just gonna check afterwards if my files are not corrupt. Steam check and such
yeah, seems like the governor of Malden does not like, me taken his island files. Worked without argo. Just gonna delete the argo folder and do a "integrity check" of A3. Should then download the argo files fresh.
weird, when I put Argo back in after the re-download same issue https://i.imgur.com/6Z26rdv.png
found the issue @dawn palm . For whatever reason I had missions_f_patrol.pbo (maybe more) also in my base A3 AddOns folder. I deleted the whole base AddOn folder and did a re-download. Now it works like a charm. Indeed your assumption with the bis addon muddle was correct lol.
Whenever I press "Crunch" using PBO project when making static animations I get this error and I show the "dos" screen or at least thats what i think it is.
https://preview.redd.it/e0a9vocpu7s61.png?width=160&format=png&auto=webp&s=f652066e9f02d510df69e10758122f3c3b87ea44
https://preview.redd.it/6m4h49qru7s61.png?width=525&format=png&auto=webp&s=c2e531995b510c3b1fd066ff2e262b2fe0aec67c
Not sure if this is the right channel for this but anyway if i can get some help
retarded question but where are the output logs
it just says "view output logs"
press button "view output(s)"
https://cdn.discordapp.com/attachments/732400441018679327/830506548668530698/unknown.png
alright it says this but im not sure what to do from here
@scenic canopy
if that's the only thing in the file it would seem like rapify is failing
you should probably check if there are other logs present
you should check status output when you start pboproject
it will list all used tools versions and potential warnings
all logs are in the same directory for builds
it will be in the temp folder of your work drive
@scenic canopy so i had to go for a bit however, the log in my temp folder just says this as well
https://cdn.discordapp.com/attachments/732400441018679327/830506548668530698/unknown.png
if its something with rapify how would i go about fixing it
make sure all tools are updated to the same release
ok
i reinstalled rapify to the same release as the pbo project and it still doesnt work
the world just doesnt want me to make arma static animations
there might be some issue with all-in-one installer, if you used it to get the necessary updates. The best you could/should do is uninstall all my tools and let aio install from fresh
failing that, use the bytex installer from the website. anything in red MUST be updated.
i see
@dawn palm how would I go about uninstalling all your tools
do i just uninstall mikero folder
so i reinstalled and it still doesnt work
is there anything in the log after the rapify line? If not, pass me your config via pm (plus all the includes it might have)
and, you have an undoubted error in your folder\location
P:\tutorial_pack\tutorial_pack is exceedingly unlikely
@dawn palm Iβll get back to you because iβm not at my PC right now
@dawn palm Alright I'm back at my PC, now if you are talking about the log in my P:/temp folder then yeah there's more after the rapify line now
And also I'm a little confused what you mean here
ping me if you have reply
i have no idea why you are so focused on the rapify command line when the error is clearly stated as the last lines of the log.
you have missing (rtm) files. and the cause would be obvious to most that they are either not where the config says they are, or they are genuinely missing.
P:\tutorial_pack\tutorial_pack
has probably happened because you have extracted someone else's pbo badly.
my rtms are in P:\tutorial_pack\tutorial so how would i change the config to say where they are
sounds like you want #arma3_config
tools update:
new linux tarball available (credit dahlgren/killswitch)
new queryaddons (credit dahlgren)
updated dll (credit mikero)
you can now use:
#define DISABLE_WARNINGS_ARE_ERRORS
to error on all other warnings except the section of code between:
#include "cannot.fix" // some bis hpp files eg
#undef DISABLE_WARNINGS_ARE_ERRORS // carry on```
this define is only active if warnings are indeed errors, set as a cmdline option.
enjoy
β ebo files are not meant to be unpacked, right? There is no official way of doing that.
OK, better to stop here π Thanks for clarification @karmic niche.
FYI .sqfc files require new bisigns with next A3Tools/Arma update
What is a .sqfc file?
Super qool fricking code
SQF bytecode
oooo, that's useful.
Another obfuscation layer around original assets?
Speeds up scripts, very very cool
Is there any info around sqfc files? I do see it for the first time.
basically like config.bin but for sqf
But on the other side if original BI scripts would be only sqfc, it is kind of obfuscation as well, right?
Nah
It still has the original files in it
And, given sqf-vm can load it at some point, you always then can get the contents back (probably mangled up and broken, but readable)
you can compile to bytecode on first execution and cache (or do more funcy stuff like JIT)
but if original files are still present then it is the best of both worlds
Well, from what I understood, from what Dedmen said, you could put gibberish in the "original files" or not put anything at all.
So as a side-effect, you could call that kinda-obfuscation, although the idea to create sqfc was motivated by something completely different
Sqfc really just takes away the compile time and adds the possibility to optimize on assembly level
Yup, but as long as nothing besides the Arma VM can read it, it is obfuscation π
Not for long, but for now, it is π
its intended to have the real .sqf file present as fallback, you can put gibberish in there but it may break in unforseen ways if you do
Then Dedmen why it is not compiled on first usage/load for example if you still need the original file (otherwise you can face problems)?
it is.. ?
Game startup is a lot faster with ACE for example.
But I mean to keep the cache across game starts.
then you need a way to invalidate it.
Precompilation for addons on packing/building is optimal.
i am a busy man
and sqf-vm is not really top priority right now π someday, it will arrive
My questions are probably lame, that's why I have asked for some docs to take a look first π
But can it print back something human-readable? (sorry for my ignorance, if it actually can)
it can output the assembly, or the source SQF script (which is embedded in .sqfc)
So in theory for example it is possible now to write LLVM sqfc frontend?
And benefit from whole LLVM world?
If arma supports it, it is a feasable addition to SQF-VM π€·ββοΈ
I already suggested that back then and was told that the Arma VM is stack-based, whereas llvm is register-based
possibilities are really nice these day, and I still do spend days hacking old OFP sqs files π€¦ββοΈ
But having the same thing implemented twice, oof
hence i still hope on some fancy PR π
tho ... needs to be more generalized probably
I'm not gonna merge my whole WIP SQFC base into SQF-VM
not expecting that
just saying that it would be a worthy addition to SQF-VM
Is there already any idea about Enfusion and scripting? I have seen some old (leaked?) docs from ARMA (probably Arma2) development exploring possibilities of replacing scripting with .NET runtime π
Although... python is stack-based and you can already read and parse python with ast.parse() and dis.dis() π
(but for real, it would be an enormous task to write a python converter to sqfc so treat this as a joke, nothing more)
SQC FTW
@empty kindle wasn't that Java?
I think Java was considered at some point (but then dropped, eventually)
I can check later.
A3 has Java scripting implemented yeah
just wondering if Enfusion is going to bring some news in here
You mean to have an Enfusion -> sqfc compiler?
I do hear everywhere about Enfusion is completely written from scratch as a new game engine. So I'm wondering if SQF would be part of that again or not.
I wouldn't say "no" if someone handed me such a piece of software, to use Β―_(γ)_/Β―
The last time I checked (and I haven't checked really lately), they rewrote everything from SQF to Enfusion
At least for DayZ
So unless they roll that back for "Arma Whatever" or decide some kind of compatibility layer is required, I wouldn't expect SQF to be present in future games
Yes, Enforce Script. For some reason I keep forgetting the name π€¦ββοΈ
I can't imagine enfusion script ever being convertible to sqf. The reason for script based C context was to get away from sqX entirely.
Yeah but I was thinking at least about the basic syntax, much like SQC, currently
to be clear here, Dayz 'script.c' is based on Enfusion but is not the same thing.
the 'basic' syntax is C, any C coder would have no issues reading or writing dayz scripts
Well, the language is (was?) still evolving so technically it won't be the same, but I don't see why you wouldn't be able to copy-paste DayZ code in future games (unless calling some DayZ-specific functions)
ummm. my understanding is there have been several revisions of enfusion script, but bis have branched out to roll their own. I doubt they rely on any enfusion parser eg.
perhaps they do, i simply don't know. All i know is that dayz script is recognisable as a C language.
All i know is that dayz script is recognisable as a C language.
Well it depends what you mean by that. It's definitely not parsable by C compilers because it has templates. And C++ parsers won't read it either because of keywords likemoddedorref, etc...
But other than that, it's closer to C++/C# than anything Bohemia has ever done before
^i agree
don't talke C# into the mix pls
it has done nothing wrong and is not comparable to languages with RAII support or pointers
or more: C# has pointers, yes
but they are "danger zone" stuff
C# has ref, that's why I mentioned it, and I also seem to remember Dedmen using the name in relation to Enforce Script π€·ββοΈ
The thing that I hate the most is that he is actually reading all that, probably knows the actual state of things, so knows when what we're saying is completely false, but can't say a thing about that. He just has keep watching us stating false information π
is there an example repo for mikero's tools CI/CD on github?
@blazing needle what are you looking for exactly? GitHub actions do support Windows, it should be simple to setup CI flow in there with Mikero tools.
and getting... uuh... "inspired" by CBA's CI i have this now (untested, just my understanding how it works):
name: pack-pbo
on: [push]
jobs:
pack:
runs-on: windows-latest
steps:
- uses: actions/checkout@master
- uses: arma-actions/mikero-tools@latest
- run: pboProject [options] SourceFolder [moreOptions]
- uses: actions/upload-artifact@v2-preview
with:
name: BIKIUtils-${{ github.sha }}-nobin
path: releases/BIKIUtils_*.zip
seems legit
steps:
- uses: arma-actions/mikero-tools@latest
will ensure mikero tools are installed and available in PATH
oh okay so the pboProject command is available that's good
now, i am wondering what I should set as SourceFolder. where does the checkout action check out the repo?
- uses: actions/checkout@master
is responsible for this
just check the readme
checkout is done in current working folder by default if I remember well
oh well I guess I'll just test it and see what errors it throws at me
by default you're in your git repo
so command like dir or ls will output your git repo content
once the checkout action happens
I see, dir returns D:\a\BIKIUtils\BIKIUtils
dir
shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"
Directory: D:\a\BIKIUtils\BIKIUtils
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 4/26/2021 2:16 PM .github
-a--- 4/26/2021 2:16 PM 210 config.cpp
hmm can I pipe the output of pboProject to the cmd window? normally it opens a new one where all the information is
currently no
you'll probably need the arma 3 tools action as well, I haven't made that public yet
Enscript is not directly comparable to either of the languages. It syntax is mostly inspired by C#, with a bit of c++ and java sprinkled on top. How the actual language works under the hood is quite different (and for the DayZ branch full of bugs and terrible behavior).
so enscript has using, properties and other distinctly C# syntax features?
cuz last time i looked at enscript, no properties or a using directive for disposable objects have been present
Enscript and sqX live in a completly different universe. Any kind of transpiling beyond the most simple expressions such as 1 + 1 is not really viable or possible.
No namespaces, hence no using. It uses the extends keyword for inheritance like java does, but also offers the c++/c# way with just Meh: BaseClass
It mostly comes down to naming. It is foreach(x:meh) and not for(x:meh) like in java. you have the auto keyword from c++, but it behaves the same like var from c# as well. Naming conventions are very close to C#, with capital letter first for example.
C# was a copycat of Java, and the programmers who made enscript have used either of them and programmed the script vm around it in c++ ... so that is the influences they had.
My bottom line is that you can compare syntax, but you can not expect much of the internal happenings to behave the same. You do not have raw pointers, neither do you have any kind of catch all void* (which is annoying as hell btw). I would call enscipt in the current state a glorified hello world OOP language with reference counting ... that is all it is really. But that is still a million times better than sqX ...
Oh also it has [Attributes] over classes... but they are only used for meta info and have no meaning for gameplay scripts
using (var disposable = new MyDisposable)
{
}``` that is the usage for the `using` keyword (at least if one speaks of C#s using keyword nowadays)
`foreach (var it in array)` is how it is done in C#
imo the distinction is important, something that has easy access to pointers (and RAII) is dangerous
no using keyword for that no. i confused it with using other namespaces on the top of the file π
There is one scenario where you can memory leak if you want to when not cleaning up, but for that you need to do a few things wrong. The reference counting deals with 99.99% of the memory mangement. End of scope yeets everything that is not strong referenced somewhere. So you are usually busy not getting your data nulled, rather than fixing memory leaks
ye
as said, from reading and hearing it is more comparable to C++ with shared_ptr autoing
and some wonky counting rules that i'd argue sound broken to me
It goes beyond my knowledge how java and c# handle this in detail, so I can not comment on that. The reference counting approach from shared_ptr seems to relate to how it works in enscript yeah. But you do not have to explictly set it up. Everything is reference counted, non primitive types are always passed as weak reference unless explicitly converted via ref into a strong one.
C#/Java utilize Garbage Collectors
while i am not familiar with the Java one, C# uses a three generation one that walks so called "strong references", marking any allocated item it finds and sweeping (freeing) any unmarked
strong references are statics and the current callstack
sounds complicated ... but it is dead-simple to implement (the mark and sweep algorithm, the generation stuff is trickier but also rather easy)
One last cent from me on this: What you can see with DayZ atm will most likely transfer easily onto future games. I see most changes in form of syntactic additions and fixes to make the current syntax less buggy (like variable scopes not being done well ... they are missing).
just make the core of enscript OS and let the community fix it imo
as long as the virtual machine is solid enough, stuff is easy to fix
tho .... with primitives being reference types still .... urgh
@nocturne basin I assume enscript has no real garbage collection in the strict sense. If the programmer losses all references to something because of bad code design there is nothing to clean it up anymore. A good GC would catch a self referencing instance if no one else is using it - i think. Enscript does not do that.
Thanks for the full explanation!
Tbh I'm kinda fine with a "glorified OOP hello world". Since it can't be worse than SQF, it can only be better, so that good π€·ββοΈ
ref-counting is a valid GC approach
one just has to deal with it properly (hence that weird behavior)
mark&sweep is another GC approach that, indeed, catches those instances
honestly, language development is fun π
currently writing my own code-generator to fuel future development of custom languages in the arma world and my very own programming language
The underlaying parser + compiler (they are not really seperated) are a mess. If anyone from former black element software reads this: Please feel death stared...
I doubt it is really fixable. You could layer loads and loads of patches onto it while hopying not to break anything and without worseing the performace ... but that isn't something for a community effort. It requires a small team with a really good plan and deep knowledge of what teams use what how at BI to work on it.
Personally ... I think it should be thrown out the window and replaced by a new proper parser (I already wrote a featurecomplete one for enscript, BI can buy mine if they want to ;)) and a solid compiler with clever optimizations. Combining many good approaches from the current codebase with a better overall plan and structure could make it a very very good language.
I think the enfusion team already works on adressing my of the concerns the dayz community told them about, but I am not sure if they are currently just layering fixes, or if they actually dig down and rework ...
core of enscript OS
The core is not the parser and compiler, but the bytecode the whole stuff runs on including (if available) the JIT
that way, one can properly inspect the whole thing and craft languages surrouding it
I already wrote a featurecomplete one for enscript, BI can buy mine if they want to π
Just for fun, in the same way as X39 wrote sqfvm or is it somehow usable in DayZ? @elfin oxide
(by some plugins, or by replacing a dll, for example)
SQF-VM was actually created, because arma.studio needed a solid way to execute and debug code π€«
https://www.youtube.com/watch?v=0qAp81eGjLs (available for download since pretty much then)
I wrote a grammar file for it that works with ANTLR so you could generate it for pretty much all languagues. I went with a C# target for now where I replicated all available expressions as C# classes so that you have a full expression tree that you can traverse, modify and turn it back into a readable script file.
I am not yet sure if and what of it will be publicly available, because for now it is the core of a commercial service. It might end up as open source language server so you can plug it into any modern IDE, but the way mod projects are setup atm in dayz makes dealing with the scripts a bit painful. For DayZ modders using the official workbench as IDE makes more sense, if you need debugging etc. A revised version of how you do modding and scripting for future Enfusion titles could be more interesting for this.
Since there is no way to supply the game with pre-built dlls, or bytecode etc for scripts there little usecase for being able to parse the files. A linter for workflows might be nice to have ... but then again ... there are no professional modders that would have something like this atm.
You could make a enscript-vm with it ... but dayz scripts without the game context make very little sense. And you would not want to write non dayz related code in enscript to make some kind of other application with it... for that the language has to little to offer.
One interesting thing is transpiling other languages into working enscript code. While it does not offer lambdas, properties, or working variable scopes out of the box, you could write code in a different language or enhance enscript a bit ... and transpile it back to vanilla enscript with polyfill code for everything.
I thought about making a typescript -> javascript kind of thing for enscript ... i just need a good name for a "better enscript". That might be a fun and actually useful project.
CI/CD yeah cool in theory, nobody does that in dayz.
nobody does in arma either but a few individuals
but it would be possible with sqf-vm
Yeah well I am not motivated to invest into something not many people would actually want to use. ngl
And yes @karmic niche a simple version of python -> enscript would be doable with it. Though i doubt all the complex syntax python has to offer would translate well π
CI/CD yeah cool in theory, nobody does that in dayz.
I need to restrain myself VERY heavily here, so... I'll just say: they should if they care about quality
I mean... in my book, if you're not unit testing, you're not serious about your code, period.
I have survived many years without unit testing ... but that is mostly because i integration tested it when using in so many scenarios I was the test itself ...
For critical code at work I am writing tests - if they make sense. I don't write tests for every little function blindly.
And yeah, there isn't much care about quality in DayZ. The biggest projects are run by groups of amatures that just wanna have some fun time. There is little professionalism in the community there ... but that is ok. I am not going to ask someone to work like a paid software engineer for a mod they make in their spare time. I personally just continue my work habits in my free time code, which I think works out well enough.
The only codebase I started to introduce proper workflows in the Community Framework. With 1.5 million subscribers we can't risk breaking something by accident ... so that needs a bit of testing yeah.
In everyones defense though ... it is SUUUUPER annoying to maintain a mod project for dayz. There isn't a way to open a mod project in the IDE, edit it and test just that. You have to extract all the game data, edit a single file to also include your mod sources and then act like you are a dayz developer ... even though you only care about your own additional files. If you want to switch to working on a different mod you need to swap out the whole workbench setup
If there was an easy way to open a solution in their workbench that just loads the mod assets and you are good it would be much easier. Then you could think about executing automated tests from its script console etc ... But right now all you can do is make an additional addon that integrationtests your code by launching a mission that does it's things, write the results somewhere and then calls ExitApplication() by itself. You still need to be able to create the GUI window. So no CLI testing. No testing on linux at all, no testing on windows workflows that do not have a supported GPU
Also you need to keep in mind that most mods there have a tiny scope compared to arma. Here you have big mods with teamsizes of like 10 people and more working on them. In dayz you got mostly 1 person doing one small mod and just fighting with dayz to get their idea working.
I didn't mean to start a big discussion about that :), nor did I mean to put down anyone by stating the previous.
Obviously you should test things that are testable. Or find ways to somehow effectively test these that don't look like they are testable ^^.
And I was mostly talking about algorithms in game modes, for example. Not whether a DayZ helicopter will actually fly in a certain way (although the algorithm used there could be tested using unit tests, I feel).
Software like sqfvm can then come in very handy for doing these sorts of unit tests. And once you have these tests, you should feel relieved (yeah, you actually should) that you can then feel free to do as much refactoring on that codebase as you want and your changes will (most probably) not break anything.
Obviously, if you're talking about "1 person doing one small mod", then that person will probably never need to do any real refactoring in the future, so tbh that actually falls under "you're not really serious about it".
Also, for the record, I haven't done any DayZ modding for now (and probably will skip that game as I simply don't like zombies) so I'm talking from the perspective of someone who has been making mods and tools around Arma (and actually only a minimal part of these have touched SQF - made mostly tools or libs)
Btw the last time I was checking the workbench I've noticed that there was a 10MB dll that seemed like it was responsible for Enscript.
I was silently hoping that modders would find a way to leverage it to write code that would simply load that dll and use it to do unit testing with the "official" interpreter
I have not digged into that one, but I suspect it is the enscript runtime. And RE'ing its interface structures could offer new ways of doing something ... but i am sick of C code atm ... so i did not bother reyling on that.
still working on my CI with hemtt. question: is it possible to run a command that returns the current version of the project? I know that hemtt status does return for example:
HEMTT 0.7.6
Environment: dev
Checks [00:00:00] [##############################] [1|1]
CI Environment: false
Version: 1.0.0
Addons to be built: 0
also: is it possible/okay to create a new steam account to upload to the steam workshop?
should be ok since most mod teams have their own project account that handles the workshop uploads
If you want to upload via GH actions you will need to have your steam guard turned off. So new dedicated account is recommended.
It needs to own arma tho.
it does? https://community.bistudio.com/wiki/Arma_3:_Tools_Installation doesnt mention that
@neon flax can you actually upload without steamguard? I thought items are automatically turned to private then
Upload new items - no
Update existing - yes
Ohhh that is good to know
@elfin oxide thanks a lot for sharing your insights once again π
Very interesting really!
So i just tried the ArmaScriptCompiler and Dedmen already answered my question if the .sqf fallback is always required (Yes it is).
My thought was to just leave the .sqf empty (If you are sure that the .sqfc will work)
I tested it and it works without a problem. So you could use it to keep the mission-file size a bit smaller and use it as a form of "obfuscation" 
π
I knew i would get this kind of reaction π
Yes you can skydive with a second hand $5 parachute that you got from the flea market..
but all safeties off and I don't recommend that and won't tell you that you can do that
Custom optimizers can now be written in lua config :u
https://github.com/dedmen/ArmaScriptCompiler/blob/master/sqfc.lua#L115
Haha obsfucation
Would be enough for most of the lazy stealing noobs.
I'll give tools to unpack sqfc files to anyone who asks.
Most of the people who obfuscate just want to hide their stolen stuff, I don't support that stuff
It's not about hiding stolen stuff, i spend thousands of hours to make custom stuff and people just steal it from the missionfile without even asking.
And when you call them out, they lie and say they found it on Github. But they forgot they have the file from your missionfile as txt still in their missionfile with my functionname etc π
"It's not about hiding stolen stuff"
"people just steal it from the missionfile without even asking."
π
reee
Like i said do what you will with your time
I share alot since i like the slogan "sharing is caring". If you think im trying to hide stolen stuff, i have no problem to send you my missionfile π
pboProject updated.
+deletes all pbo and bisign before starting crunch AND after any error (also accounts for different pboname). This to ensure that the user is not misled by a pbo being 'there'.
+prevented some potential gui messages appearing when in cmdline mode. rare, but possible.
+disabled renaming of pbo, if multiple pbo opereration is selected.
+added -Truncate p3d (shrink) to cmdline (dayz only)
+added p3d noPrefix to setup-> and -$ for cmdline (same as makepbo)
+reworded several confusing messages when packing wrps
issue with rtm binarization in latest subscriber version, should hopefully be fixed soon
^done
Hey @dawn palm , small question on MakePbo/DePbo ; can you confirm "obfuscation" actually does LZSS compression ?
obfuscation does not mean compression nor vise versa. But compression is enabled for many setups and part of obfuscation yes.
thanks, the problem with the obfuscation technique used is that it creates new filenames which are not valid UTF-8 strings
BI tools seem to accomodate that very well, but it causes problems to tools like armake2 which expect UTF-8 filenames
You can't sign an obfuscated pbo with armake2 because of that ; armake2 design is obviously wrong, but makepbo also has a responsibility in using non UTF-8 names
Could you make the obfuscation process generate random UTF-8 characters rather than random bytes ?
"but makepbo also has a responsibility in using non UTF-8 names" why? Because some 3rd party non-conforming tools are non-conforming?
Arma handles filename as a sequence of bytes. Doesn't care about encoding (just no null chars, and some places assume backslash as seperator)
^this
what you are experiencing above @cinder drum is a tools inability to cope with utf8 itself because windows does not support it. instead windows uses 'local codepage' which is for most people winansi cp1252
the windows file system is in utf16le 'widechar' unicode, and there is no straightforward way for files named in cyriliic to be translated from utf8 even tho the utf8 is correct.
Obfuscation is meant to cause you a hassle ... I fail to see why we should make more easy to access the files.
^yep
example taken in rksla3-aircraft_tug.pbo, which uses DePbo obfuscation, and contains the following sequence of bytes as a filename and is not UTF-8 compliant :
64 61 74 61 5C 61 6E 69 6D 5C D0 B7 D1 80 D1 92 D0 A8 D1 9C D0 B3 D1 87 D1 8F 2E 72 74 6D 00
i'll check above in a moment or two, but the inability to sign a pbo is nonsnese. internal filenames have no relevance at all.
that's why I say armake has a design flaw
it's still irrelevant. inability to sign a pbo has nothing to do with obfuscation.
and it's confusing me why you would try to sign one using it.
if signing works with bohemia tools everything is ok?
well i sign with dsutils too. and whether it signs or not is not relevant to the internal scramble of a pbo
my main point is not about signing pbos, it's just an example
if dsutils can successfully sign it but armake 2 can't then that would be an armake 2 issue
that's partially true
my main point is, you can find the following info regarding PBO format on the BIKI :
ascii fixed length ascii string(UTF-8)
source: https://community.bistudio.com/wiki/Generic_FileFormat_Data_Types
you can also find this information :
Since Armed Assault all strings are Unicode, with UTF-8 encoding used internally.
source: https://community.bistudio.com/wiki/String
basically this just denotes whomever wrote that has very poor understanding of what ASCII, Unicode, code pages and UTF-8 are
if filenames are expected to be in ASCII strict, then any byte >= 0x80 should make the pbo invalid
if filenames are expected to be in UTF-8, then any non UTF-8 sequence of bytes should make the pbo invalid
if filenames are expected to be any sequence of null terminated sequence of bytes, then the biki needs updating AND there is a risk of compatibility issues when you don't have the same ssytem code page on the box which makes the pbo and the one that plays arma 3
You should probably check the authors list for those pages
cheers man
first one was mainly written by mikero π
just checked the code. you are correct, file NAMES are random characters.
yoooo mikero himself literally using your tools as we speak haha
so either we update the biki to denotes that filenames can be any sequence of non-null bytes (because it works with dsutil.exe and arma3.exe)
and so other tools author will have their responsability to handle that case
seems to me to be an irrelevance. this is obfuscation we are talking about. and the biki you refer to was written by me 15 years ago!!!
since non utf-8 sequences work with the game I suggest to handle this as a documentation bug π
i still cannot find the relevance here. the author does not want you accessing his files.
fixed length ascii string(UTF-8)
That's wrong.
with UTF-8 encoding used internally.
UTF-8 is used for rendering strings yes. But thats irrelevant for PBO filepaths
then the biki needs updating
That documentation is unofficial 3rd party documentation with no guarantees about correctness.
And I don't even thing we (BI) want to exactly document all of it.
i'm fine with that
the problem is the same with trying to access non obfuscated pbo witch contains non utf-8 extended characters in the filenames
it just happens more frequently to find an obfuscated pbo rather than a non obfuscated pbo containing non ASCII characters in filename
and since you wrote that filenames were UTF-8 and then developped a tool that made non UTF-8 names I was puzzled
well the whole idea of obfuscation is to break the rules, and making it utterly impossible to extract (most) files with the names intact.
you could encode random filenames in UTF-8 compliant sequence of bytes, that would still do the job
fortunately the game doesn't care
do you guys know anyone I'd be able to contact for the config? IK wrong chat, haven't gotten any help so far
which makes me wonder on actual unicode support by A3 π
well as a general discussion of ascii, ansi, utf8, 'unicode', and 'local codepage' i agree with your comments. but to then include obfuscation in the pie is problematic.
Why are you asking here if you know its the wrong chat?
because no one has replied to my chat in #arma3_config , you guys here seem knowledgable of arma
You asked like 19 minutes ago, please be patient rather than breaking the #rules
once again, obfuscation is not the point, the point is making valid / invalid pbo files
well sorry I have very difficult times not distinguishing between format validity / working software π
Unfortunately I don't have write access to the BIKI if someone would be kind enough to add the information in https://community.bistudio.com/wiki/PBO_File_Format ?
why on earth would i mention anything at all in a public document for the thief to take advantage of? (s)he can figure it all out for themselves and lose hair doing so.
i have no idea what channel to actually ask this in, but is there something i have to do to a mod, put in a script/config somewhere to make the mod load as client AND server side? right now i have a few parking signs a buddy did, but when its loaded into server, it comes up as an "additional mod" instead of required and causing pbo errors because those signs are ON the server and required.
arma3p has been updated
Enjoy
arma3p updated (again)
thanx to @scenic canopy who implemented it. pboProject is now multi threaded. Crunching should be faster
π»
still room for improvements but should be quite a bit faster π
awwww, how sweet
since i read this message: #arma3_gui message, i was interested in reproducing a context menu entry for converting png files to paa files. so after a lot of trial and error (this answer https://stackoverflow.com/a/2124396/11370741 doesn't seem to work anymore, used this: https://stackoverflow.com/a/47745854/11370741 instead) in the registry i have come up with this .reg file:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\SystemFileAssociations\.png\Shell\ImageToPaa]
[HKEY_CLASSES_ROOT\SystemFileAssociations\.png\Shell\ImageToPaa\command]
@="\"X:\\SteamLibraryX\\steamapps\\common\\Arma 3 Tools\\ImageToPAA\\ImageToPAA.exe\" \"%1\""
``` if someone could give their opinion on this that would be neat. also wondering if it would be possible to read the installation path of the Arma 3 Tools and compose the path this way
you could lookup path to arma 3 tools during install
HKEY_CURRENT_USER\SOFTWARE\Bohemia Interactive\imagetopaa and key tool
there is also various tools to help with it
https://www.techspot.com/guides/1670-windows-right-click-menu/
https://thegeekpage.com/best-context-menu-editors-for-windows-10/
Is there any way to have MakePbo to ignore unbinarised P3D's?
well, seems like there isn't anymore. https://community.bistudio.com/wiki/MakePbo mentions the -U parameter, but it has for some reason been removed. Is there an archive of older versions?
I have 0.5.48, 0.5.50, 0.7.92, 0.8.03, 0.8.06 for linux
found the changelog for it, -U was removed in 2.06
so whichever version is before that
just throw me all of them and I'll figure it out
how do i prevent hemtt from erroring out when including files from a3?
you need to provide the needed includes
as a subfolder in the project? because i have all data unpacked on my p drive
include = [
"P:/a3"
]
``` like this?
it would just be "P:/ then
seems like a3\ui_f\hpp\defineCommon.inc is at fault. i got it working now with another include from 3den (a3\3den\UI\macros.inc) but no include folder is generated
generated?
GitHub
HEMTT Version: 5481d14 dev Project: https://github.com/ARCOMM/arc_misc/blob/c511c6ea8f99e1ca133201dcd88b0886614e37cc/addons/aan/config.cpp#L2 Description: Removing these lines from defineCommon.inc...
usually the needed files are copied to the include folder
sounded like that would be done automatically from my a3 folder?
ah okay. symlinking the entire a3 folder is okay too?
should be more or less the same as using P:/? 
aah I'm slowly getting it. emphasis on slowly π
imaging the include folder as the rest of your p drive except for the addons and optionals folder π
not sure if the binarize quirks are resolved yet or not 
so for anything p3d you might need to provide extra love
no worries, only config stuff π
@dawn palm my friend has recently bought Mikero tools, but he's struggling a little with command line only tools. Currently he was fighting with MoveObject one (all works good, but I had to even introduce him to cmd.exe, ....).
I was thinking about writing small frontend to this tool, is it possible due to licensing (no tool would be part of that program, it will just use the tool when present in path or manually specified)?
he's actually better off using moveFOLDER. it removes lot of the gruntwork. The eula license for my tools says, you are free to use them for any purpose you can think of. No restrictions.
ahh, ok, I'll check, thanks for the hint
does hemtt support the new preprocessor commands?
eg:
#if __A3_DEBUG__
#include "..\script_component.hpp"
#else
#include "\z\TER_MFU\addons\ui\script_component.hpp"
#endif
afaik no
and these cannot work in binarized configs anyway as they are determined at runtime
Hi there.
First question. Is there any way to have automatic backup of config.cpp on pboProject crunch and restore on unpack?
Second question: I hate header section created by depbo. Is there a way to disable that?
Third to dedmen, why sqfc.json have different slash layout in different sections. Can it be more consistent?
backup? 
the original config.cpp is still there after crunch
you won't get the same file after unpack is info is lost during crunching
After binarization cpp terns to bin. Comments gone. Includes pasted. So you canβt get same config back. Actually never mind. I will keep repo with nice looking config.
What about header. What is purpose? Is it just for lulz?
your expectations of debinarising a config.bin are unreasonable. There is no reason for the engine to wade thru comments, nor does it have to do multiple file accesses for .h/.hpp includes. Separate to that the actual code is converted to a binary form to make it very easy for engine code to rapidly find a class and a variable without the need to sift thru {.....} and arrays[]=
the header is far more important than your wish to make it look pretty.
engine=A3;// self explanatory.
version=aa123.4; // eg. displayed in the engine's (dot) rpt file.
enc= // encrypted
svn= // vbslite
mikedll= often looked for by people to give them confidence that the addon does not contain silly errors, and any issues they have is unlikely to be the pbo itself.```
example of other less used header.properties (which the engine will ignore):
```author="I am famous";
team="some CDLC brand";
website= whatever you like;```
the output is bin, the cpp is still kept in source folder
Hey all, Id love to figure out how add the ability to use thermal with HuntIR from ace, could anyone help me with that? or point me in the direction of somwhere better to ask? Ive done a good bit of digging and exsperimenting myself, but can't seem to get it to work ingame
No. If you put cpp in pbo it will override bin. So you will not get profit from config binarization if you keep both in pbo.
Unpack date? Who cares. What benefit I will get knowing that this pbo is from A3 if I took it from a3 mods and unpack? There is author and team fields at cfgpatches section. Looks very arrogant. All that info pretty useless and can be under debug or verbose flag by default
just make a config.txt as a copy of your cpp and keep it in your pbo
This is what I do currently by hands. Maybe small python script will help.
What about sqfc.json?
but the config.cpp should be in source control, why do you need it in pbo?
First question was how to backup and restore config file in not preprocessed state and ship with pbo to be able to unpack change and pack without access to git(or any kind) repo.
Again. Nevermind
did hemtt set some kind of flag which can be used in the configs when building with --release or without? I could have sworn I read something like that in the docs but can't find it anymore
Hm is there a discord bot that can post a message every time a steam workshop item is posted, or does the workshop have the api functionalities to create that?
The frontline bot does that π
Basically just do a rest request to get the "last updated" date and if that changes, that means that the workshop item has changed
another reason for me to want to look at that code
json_dict = {'itemcount': len(mod_ids)}
x = 0
for mod in mod_ids:
json_dict['publishedfileids[' + str(x) + ']'] = mod
x += 1
data = await fetch_post_json('https://api.steampowered.com/ISteamRemoteStorage/GetPublishedFileDetails/v1/',
json_dict)
if data:
mod_info = data['response']['publishedfiledetails']
return mod_info
Something like that
Don't ask me what that does, I've written that in 2019 and it still seems to work π€·ββοΈ
tools update (subscribers)
eliteness: fixed filetree panel
pboProject: reworded/correct 'bis binarise has errors'
new linux tarball
Hi friends,
Has anyone made any benchmarks to test SQFC performance gains?
I am curious about run-time performance, not about the loading time.
Sure, isn't SQFC optimizing something? How big is the performance gain from the optimizations?
Depends on your code and how much the open source optimizer optimizes away
Eg. 1+1 can be reduced to a single instruction down from three
a+b on the other hand cannot
Check it out
Thanks. That's cool. As I understood it helps with params unpacking a lot and everywhere a constant array is used.
I didn't know that array creation looks so bad

Not sure if this is the correct channel but how does one make a sound pack for your unit or people to use, I want to make one as a horror sounds for our ops but Iβm unsure how to make a sound mod
well, you need a good editor like audacity, but you probably already know that. Next, you need my tools to convert wav to wss or ogg, and finally you need to ask in config_makers about sounds[]= arrays
updated tools:
convertwrp fixes for linux
Does anyone got a copy of Steamroller lying around? foxhounds page seems to be down
@dapper pivot
Oops, it's working now (https://foxhound.international/arma-3-road-converter). Cheers for letting me know Senfo/Adanteh.
bloody nice, professionally written documentation, and a gr8 easy-to-use, tool.
is there an aplication similar to Tac view but for arma 3?
ok if anyone knows pls @ me
exporting the data is easy, showing relevant terrain in tacview is trickier. hard to scale out with lots of community terrains.
Im planning to make some "shitty" Thermals for my arma unit. can anyone help point me towards a right direction to start making mods?
magic mouse cursor
theres a way in sharex to fix that, do a google on it and it'll tell you. Something regarding DPI scaling
@glossy inlet can you drop a keyword on how one would implement something like that?
like, add support for filetypes to show the content like that in file explorer
Shell Namespace Extensions
tyvm
Bohemia Interactive Forums
Hello, PBO Viewer is an open-source project to interact with PBO files. It is a substitute for the old Pbo Manager that everyone knows. Moreover, PBO Viewer is the only cross-platform PBO tool with a graphic interface. A CLI interface is also available. Features: Cross-platform support: works on ...
Here cursor works fine
Would be cool to add mikero support too.
People complain that pbo manager is shit because it doesn't pack correctly.
But what if you could just right-click pack folders and it'll use pboProject if available π
I have paa thumbnail support for Windows somewhere on my hard drive 
paa thumbnails and quicklook for macOS on my GitHub
limitation of pboProject would be figuring out all needed params, makepbo might be doable
well makepbo is just packing nothing else right? I already have that anyway
yeah I wanted to add paa thumbnails later too
rapify but no binarise
Yeah would be need. Properly detect if A3 Tools or Mikeros tools are present and use them.
Will put it on GitHub once its in a usable state
Double click opening (with default app) works, icons work, subfolders work 
Time for some polish and then implement proper context menu.. I need my right-click -> "Edit in Notepad++" or I'll go crazy
Even this works fine π€
What's your favourite library to do reflection in C++? I want to find some solution to automate binary serialization and deserialization.
std::reflect from <experimental/reflect>?
Did you use it?
I have not no, I just saw it and thought it looks very cool.
Looks too experimental 
filesystem was in experimental as well and it was bascially stable the whole time.
I'd give it a try over some third party library. If what you are trying to do is not a nested edge case that might not be covered yet, then I doubt it has any downsides for you
MSVC support should basically be complete? Or atleast mostly?
Looks like MSVC doesn't have <experimental/reflect>
latest 2019 update includes C++20
do you have the std reflection?
probably need to wait for 23/26
23/26 what? π€ year?
c++23
Looks like it
Reflection ain't part of c++20
Does anybody here use CMake with Visual Studio?
For some reason Object Browser doesn't show classes, but only shows namespaces and functions in namespaces and a few other things, but not classes.
I see that MS have acknowledged this 2 years ago:
https://developercommunity.visualstudio.com/t/vs2019-doesnt-always-display-class-view-for-cmake/839981?viewtype=all
Does it work for you guys? Or maybe you know a fix for this?
It seems to work if I generate a .sln with cmake and then open it, but it seems like it's not the way it's supposed to work now after VS has native support of CMakeLists projects, right?
Cmake is buggy with VS
Raw cmake projects work better then the build ones tho in my experience
So accepting the buggy nature is kinda what one ends up with
https://computingonplains.wordpress.com/building-c-applications-with-cmake-and-visual-studio-code/
You may want to give vscode a shot tho
CLion has good cmake support
@cinder meteor just remembered you asked me how I navigate big projects/files without object browser.
I use Resharper, I just press CTRL+T and enter the class/method/variable name i want to go to, and it takes me there
That's cool too. But I like the object viewer thing (or similar) to see layout of unknown code.
I'm so used to SQF, now pain is my friend. π€ͺ
Also Ctrl+T is not a resharper hotkey, it's a base VS hotkey
But Resharper does something with it, dunno
can confirm. Also integrates well with VS17 and 19 compiler. Used it with both.
AFAIK ReSharper just enhances what base visual studio gives you already, enhancing the search
Tho... Visual studio in the last few years got more and more features that have been ReSharper exclusive (mostly in c# space)
What do mikeros tools do nowadays when trying to unpack a pbo with duplicate file names?
I may want to make a pbo with multiple $DUMMY files that all have the same name,
But if i remember right mikeros tools would just completely abort unpack if they found a file with same name already exists on disk
^yes. it will not over-scribble the contents of any folder. When it detects the 2nd same-name, it assumes it's been there to begin with.
part of the reason for this mechanism is the nightmare scenario of extracting a pbo with binarised files, over scribbling an original source folder
does it continue unpacking the rest of the non-duplicate files? or does it abort outright?
Are you on to implement this for pbos? https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/cc144093(v=vs.85)?redirectedfrom=MSDN
Yes.
Reading is done, pbo patcher for writing is done.
Tomorrow or so I'll plug the writing into the rest
Have you by chance a more up to date version of that page? π
Nope, I already have that exact page in my bookmarks
Kk
@glossy inlet
does it continue unpacking the rest of the non-duplicate files? or does it abort outright?
It instantly stops to alert the user that something is seriously wrong with the destination target. I stops so that the least damage is done, infesting that folder with files that should not be there at all.
(in the case of multiple same-name files in the pbo, the bis engine only uses (indexes) the last one. Some modders use that 'trick' to confuse the thief.
In my case I have many empty dummy files that I'd like to hide.
Currently I just name them "$DU2134" but they'll ofc be unpacked. It would be more efficient if I could just use the shortest possible names and name them all the same.
maybe just using "?DU1234" would be better as that won't show up in unpacked output
Why does CfgConvert use the name of the base class at the definition rather than the one specified after the name of the inheriting class. For example:
class parent;
class child : PARENT {
...
}
Gets binarized to a class child inheriting from parent and not child inheriting from PARENT
Are you sure its not just case related? If I remember correctly classes are not case sensitive, and thus the code above is making child inherit from external class parent
classes (and variables) are case InSEnsitIVE
however FULL_UPPER_CASE is the preserve of macros. thus:
#define PARENT ElePHantS
gives what you'd expect to see
you should never, not ever, use full upper case for any other purpose. Equally, you should never use anything else other than full upper case for macros
Yes I know they are case insensitive, just thought it was interesting that CfgConvert used the name as defined by the parent class at its definition and not just directly used the name defined when inheriting
Given that it preserves casing in the class name itself
it was interesting that CfgConvert used the name as defined by the parent class
how did you check that? debinarize? ingame config viewer?
binarize somethign with CfgConvert and then look at the binary file
For example if I binarize this class:
class PaReNt;
class sub : parent {
};
The binary file looks like this: https://i.imgur.com/pjei7e2.png
The first PaReNt is the extern declaration and the second one is parent of the sub class
when you inherit, it looks up the class using case insensitive search (because it needs to actually reference the real parent and also verify that its there)
Curiously CfgConvert complains if the class you inherit from does not exist, however for
delete parent;
class sub : parent {};
it does not complain
Seems counterintuitive that it allows inheriting from a deleted class?
not being picky here, but important to note with above, that the parent is NOT 'deleted' merely emptied of all content, including any embedded classes if they exist. The embedded classes aren't touched in any way, they are simply no longer attached inside this class (and may well be still used in others)
note also that the above only works if the parent itself has no inheritence, else it's ignored and a rpt error generated.
Makes sense, thanks.
I guess CfgConvert sees the delete and assumes you are deleting something that exists and that is why it lets you inherit from it
my guess is you already know these things, just attempting a tighten up.
Yeah, I am testing my tool on all the binarized config files from the game against CfgConvert to make sure they output the same thing
nope. the effect above has no consequence, to the point where it may as well not be inherited at all. the contents of the class AND the class itself is not 'deleted' (or 'emptied')
So after deleting something it becomes an emtpy class right?
if you want to truly delete anything, including classes you use
delete thingy;
the only place that keyword is used in bis, afaik, is for xBox rscpanels
So it deletes it if there are no subclasses, otherwise it just empties the class?
subsclasses by definition, are removed
not, deleted,. they simply no longer exist in the class that's emptied
this is very traditional:
class Turrets; / the root turret system
class whatever
{
class Turret: Turret
{
// add or change anything of the root class, but only for 'whatever'
}
}
/////// separate pbo
class whatever; // an external reference
class motorcycle:whatever
{
class Turret{}; // i don't want turrets
blah blah
};
And this is the same effect as if you had done delete Turret; instead of class Turret{};?
no, you would have removed Turrets for EVERY ONE!
you seem to misunderstand the words delete and empty.
delete water_bowl;
water_bowl{}; empty water bowl
So it always deletes the class for everyone?
For my example you said "the parent is NOT 'deleted' merely emptied of all content", but maybe I misunderstood that
the above is true it is not deleted. {} EMPTIES the contents
Wouldn't it be sub that gets emptied in my example?
all subs, by definition, no longer exist in the parent, because the parent is empty.
I don't follow. Is it because sub inherits from parent that it does not get deleted by the delete parent;?
You're both saying that delete deletes a class for everyone, but also that in the example it would just be emptied?
stop thinking delete is the answer. I is almost never used.
I just want to know what it does
I can see why it is better to empty it in the place where you don't want something rather than deleting it entirely
you might not want turrets, but others won't appreciate you either deleting (global) or emptying it globally.
so...
{
blah
blah
blah
};
new pbo
class A;
class C
{
class A:A{};
cBlah// all including A
};
new pbo
class A;
class D:C
{
class A{}; //empty the bugger for THIS class D
//and anything that inherits THIS class D
OR
delete A; // delete the bugger for anyone who inherits class D
class A:A
{
// use what there but add or change some things
};
OR
class A
{
blablah, blah;// remove everything for THIS class D
// and add new stuff
};
}:
And if there was a delete A; inside D then that would delete A for everyone?
sorry, fixed a typo, delete keyword added
Ah, okay, this makes sense. Thank you.
the engine builds one big config tree in memory
if you delete something in between, it is just gone - what happens with the rest is based on the specific inheritance structure you ended up from the load order of configs leading to the big tree
the config parsing is only influenced by rules, but its not the same as how the engine treats the tree in the end
ie delete is not accepted if a child depends on the class in the same config. however if done in another config, it can be done
How do you use Mikero's movefolder?
Nevermind, read the provided docs, BIKI didn't include it all.
Why would the biki document something about a third party tool 
Fair enough
still can't figure it out
So I'm supposed to copy P3Ds to a new directory
Then do movefolder /path/to/newdir/ on that directory
and then it should move all relevant files to it, if I understand it correctly.
but running that simply prints out movefolder Version 1.43, Dll 7.92 "/path/to/newdir/"
use the gui
Is there one for linux?
π
why is it included in the Linux files then?
@elfin oxide the BIKI is also for any third party content related to OFP/Arma or other BI games
Can I also document my crippling depression every time I have to look at SQF?
Nah thats too meta
You can use your sandbox page for that π
or user page I guess
@solemn isle
why is it included in the Linux files then?
included by error because i started to make a dos/penguin cmdline version and never got round to finishing it off. The team that creates the linux version of the tools, never noticed it did nothing but display syntax coz i never mentioned it to them!
it will be removed from future tarballs
@elfin oxide whats worse? SQF vs Enscript in DayZ?
sad
Comparing SQF to Enscript is like comparing caveman wallpaintings to a picasso. A few annoyances aside - that are most likely fixed with the next public iteration - i have nothing to complain about.
For a closed down custom language its very nice. The only thing that would be better is to use an existing language such as c# or java with a runtime that makes sure people can not import any packages they are not supposed to fool around with e.g. fileio
yep
for people already writing config.cpps for addons, there are very few surprises if they now turn their hand to missions (or writing script for animations). While there are certain specific keywords to learn, it's a C family language that most will understand immediately. The picasso in this one, is the syntax follows rules!!!! Which means, no matter what bis do, the text can be parsed for errors.
@elfin oxide thanks π last time you sounded more frustrated with Enscript π
Oh I will always find something that frustrates me. But nothing has made my suffer more than the years I spent on spooky commands and adding private to my _variables to make or not make stuff work.
Bi has a long list they can work through on the feedback tracker. If they do, people can walk into a hall of polished marble when first entering into scripting for the next titles.
My only problem with Enscript is lack of pass-by-value structs 
Sqf has rules... Even damn unambiguous ones
The seeming randomness of sqf however is created by the operands, the fancy commands one executes, which sometimes have this or that style
Wut? Rly?
Yes all classes objects are passed by reference
no way to have any custom classes passed by value
and I think there is no way to make a copy of a deep copy of an object :/
Isn't enscript with pointers and all that?
Implement a deepCopy() method. There you go, you have deepcopies
Sure it's nice to implement a standard default copy operator (or whatever it is) while compiler could have done it π€·ββοΈ
Live-Editing pbo's is a go
faaaancy
Why is it pbox? To avoid messing with your existing pbo file associations?
Yeah, I don't want to mess up my pbo association with this half-working prototype.
Once I have proper right-click->unpack here and folder right-click->pack implemented, with using Mikeros tools if found, I can scrap my old pbo assocs
Next up, editing pbo properties by just doing the old right-click->properties on the pbo
That would be neat.
Is there any way I can get pboProject to give me more detail for an error with model.cfg than "model.cfgs for this pbo have errors" ?
nothing better in the output log?
Nope, even with noisy turned on. What it does is just show all my code for my config.cpp, then
cfgPatches.DogeDude.weapons[]= has been altered
1 File(s) copied
"model.cfgs for this pbo have errors" ```
run rapify on the file
That worked! My new error is This \DogeDude\HelmetModel\model.cfg cannot have an extern (class ArmaMan;} without a parent config that defines it
We are getting somewhere!
Now I just need to work out how to solve that error...
define the class or have a model config high level up that does
@glossy inlet , nice idea for pbo properties
@merry vault , thanks for heads-up, will fix the output to show the actual error.
My object builder exported my new P3D with the format for textures looking like this: \p:\dogedude\helmetmodel\testhelmet.rvmat
This path is 100% wrong, and pboProject agrees with me. Is there a setting I can change in Object Builder to fix this?
I solved this issue by deleting the P:\ part of the path in Object Builder before I exported, just leaving this here for future reference
object builder does not export PBO files, I think you mean P3D?
you can see all texture paths and easily do bulk updates in the Mass Texture & Material renaming dialog
game wouldn't know what do to with P: so it's a good thing pboproject is failing it π
you can set the root texture path in object builder settings
I could be completly wrong, but I think binarized configs are already reduced. eg. any inerhited array + additional content would be hard baked into there already. easy enough for you to find out. make a dummy array in another config and extend it in your current one
no, it should be dynamically added.
But it does not work everywhere.
No, that's mikero tools magic IIRC. Which is not how the game behaves.
might be that our human readable output doesn't support +=
So we do support it, just not in some cases
is it a ={str1,str2} or only ={str2}?
I think it may just convert to = if it sees that it already knows all entries and can safely combine them
And CfgConvert doesn't have the Default class, so it assumes the magazines entry doesn't exist.
Which means class B doesn't append but create a new entry with =
and C appending to that, we know that B is constant so we also know that C will be
I think engine might do it the same, but it obv has all the other configs that you inherit from available to make the correct decisions
Doesn't A3Tools have a config.bin thats a AIO config? Maybe it uses that as a base to resolve these kinds of things
pretty sure CfgConvert loads the binarized config, like the game would do, processes it like the game would do, and then just dumps it in human readable form
Thus you get that
+= should be resolved by the engine during initial config load to memory
if any tool hardcodes it during a conversion, it should be wrong
the += operator is so unreliable, that bis altered the binarise process a few months ago to convert += to simply = IF the inhertited array can be determined by the binariser. As already mentioned above, this is clearly and logically not possible with extern inheritance. Instead, it simply passes the binarise code for += to the game engine for resolution.
@small sluice , for your above last paste to be correct, eg the += binarise operetor remains for the engine to work with, then clearly magazines[] could not be discovered in PutMuzzle or beyond
I didn't touch anything on that "a few months ago"
Maybe few years ago
prolly not, perhaps a year ago then, i'd have to look back thu my fixes.txt
and in terms of being unreliable. the engine can only work back ONE level of inheritence with a += operator (which is why i think they got cfgConvert to do the work instead_
i think you're simply confusing yourself. whatever you think is happening. the following is fact:
if it discovers magazines in an earlier inheritance it merges and converts to a straight forward =
if it can't find one for any reason, it leaves += alone
@glossy inlet
release 7:32 added manual addition of += arrays as per bis (which includes arrays to any level. bis only nest two)
so yes, a few years ago βΊοΈ
ClassicRangeMuzzle relies on an extern.
u using my tools or bis?
neither of them can ever be used with an = operator because the ultimate inheritence is not know for EITHER of them
whether BoundingMineRangeMuzzle merges two strings together would make no difference to the outcome.
which , in theory at least, can happen at game time.
the same
i really can't see what you're worry is here, niether BoundingMineRangeMuzzle nor the other one can have an = operator.
that's new to me. how odd.
agreed
in which case derap will show +=
what's the full text line from the bis tool pls?
no, just the mag+= please
little wonder we were talking at cross purposes @small sluice , i never expected the bis debinariser to be faulty!
originally the += operator could NOT be binarised. originally you could only use it in pbos with config.CPP
mikero goes testing.......
the cfgConvert I have here works fine for decode
class A:B
{
mags[]+={fred};
};
the output of above is
class A: B
{
mags[]+=
{
"fred"
};
};
use one of my tools to binarise, to see of there's a difference in outcome.
These are the bytes for the array in the binarized config: 05 01 00 00 00 6D 61 67 61 7A 69 6E 65 73 00 01 00 76 6E 5F 6D 69 6E 65 5F 6D 31 36 5F 6D 61 67 00
My cfgConvert from bis retains the += in the text output. Are you sure you're decoding the SAME file?
that's good
and what does cfgConvert say?
ebo?
Yeah so rapify does the correct thing and binarizes as +=
you know this because you did a hexdump, AND a cfgConvert?
k, well one of the issues is, why didn't cfgConvert show the same thing? what's different? smaller testfile?
i don't get anything from an ebo
and cfgConvert?
that's not what you pasted above much earlier
05 01 00 00 00 6D 61 67
time for sleep for me, we can PM each other later. we're cluttering up this channel with noise for others.
+= gets turned into = if the engine on runtime doesnt find an existing parameter definition for the class - there is no inheritance lookup
'existing' by definition, means inheriting
BUT, the engine only looks in THE inherited class, not, the inheritence chain.
this is not how it works according to my tests
the engine builds a config tree by simply parsing the input configs defined by the load order (-mod order, pbo naming and requiredAddons - dta before addons). it will extend the tree or overwrite existing definitions. += is the only to extend a parameter definition, if one exists for the given class from prior read configs. otherwise its directly written as parameter values - no lookup done whatsoever
if i've understood you correctly. you think it works as follows:
class A { thing[]="one"; };
different pbo (read later)
class A { thing[]+={"two"); };
if it also works in over-writes, like this, that's clever, however
the following cannot possibly be more straightforward or obvious in ANY test
class A { thing[]="one"; };
SAME CONFIG
class B:A { thing[]+={"two"); };
result IN GAME is
class B:A { thing[]={"one","two"); };
it is strongly used in magazines for the obvious reason that grenades and other base objects or actions need only to be declared once, rather than boringly repeating them 100 times (and getting a few wrong)
This is used in Magwell configs.
i stand corrected.
if, and only if, += is used in the same config for an array parameter defined in a class parent - does not have to be the immediate, the engine config parser will extend it. for other configs += only extends, if the parameter is defined in the same class already - otherwise it gets turned to setting the defined value for the parameter
(going by config browser output)
//config 1
class A
{
thing[]={"one"};
};
class B: A
{
};
class C: B
{
thing[]+={"three"};
};
class D: C
{
thing[]+={"four"};
};
//config 2
class A;
class B: A
{
thing[]+={"two"};
};
//config 3
class C;
class D: C
{
thing[]+={"five"};
};
results in:
A => one
B => two
C => one,three
D=> one,three,four,five
@vague shard ,it's clear from your examples above that chained inheritence is in effect. what's not clear is why
B => two
because chained inheritence should have made it
B => one,two
therefore there is some difference between all in one config versus class over-writes
ArmaScriptProfiler and ArmaDebugEngine were broken by todays Arma Update (will most likely crash at game start)
And as I don't have my PC I cannot publish an update for a while, most likely.
anyone got an o2script to rotate a model by 90Β° (points, vertices, named selections, etc) by chance?
the one thing I forgot to backup when I set up new computer was o2script folder. Lost some gems there that I have not been able to trace back
i have the folder here for when you need it HG (+the comref of course)
@vague shard , person to contact is/was tim dittmar, (@smoky halo ) good luck finding him tho.
I have luckily phased out OB mostly out of the workflow π
For the terrain makers out there I have made a tool that turns https://www.openstreetmap.org/ data into a script to create Arma objects, allowing for the rough creation of cities very quickly: https://imgur.com/a/sXhIwcY
Check it out here: https://github.com/Seb105/OSMtoArma
You may want to talk to @dusky dune about it π€
Because he made a tool to create terrains out of satmaps so your tools may complement each other
http://gtt.adanteh.xyz @ashen flax
Drag&Drop 
faancy
Drag&Drop with a video of it
How actually does this differ from that Dokan thing? Because you don't have to actively mount pbos?
dokan mounts and creates a drive so other tools can use it like normal filesystem.
This allows you to explore PBOs like ZIP files in windows.
Won't work for tools like pboProj
I assume that's because dokan creates a read only file system or one that won't permit other files to be created independently of the pbo's themselves. (p:\temp eg)
what would be exceptional here is if, instead, of creating a drive, dokan symlinked all the pbo prefixes to an existing drive with each link marked as read only. That would (almost) completely remove the need for tools like arma3p.
Dokan allows independent files. But it won't update the pbo's
So you can still have your buldozer and whatnot on your P drive next to all the virtually loaded pbo's
Technically pboProject could use some very annoying windows API to use PboExplorer to read directly from PBO's... But thats stupid, it might aswell just read from PBO's itself.
It knows how to write them so it should know how to read them too
Hi guys,
After i saw this message #arma3_tools message, I thought I could share this tool, it adds a contextual menu item on png and tga files that allows you to convert selected files into paa.
I originally created this for Projets Edaly β Project βLibertadβ and it saved us a lot of time on the long term so here it is
https://github.com/TKiraa/Convert-into-PAA
whats a decent, but simple pbo extractor these days?
cpbo?
I use mikeros ExtractPbo just as double click action (Only until my PboExplorer is good enough for production use of course :D)
ty
I'd suggest this one: https://forums.bohemia.net/forums/topic/233849-pbo-viewer-cross-platform-pbo-tool/
Bohemia Interactive Forums
Hello, PBO Viewer is an open-source project to interact with PBO files. It is a substitute for the old Pbo Manager that everyone knows. Moreover, PBO Viewer is the only cross-platform PBO tool with a graphic interface. A CLI interface is also available. Features: Cross-platform support: works on ...
ExtractPbo will unbinarize config and rvmats
ty
personally i am using mikero's tools but for less tech savvy need a more simple tool
Mikero only needs double clicking a pbo, how much simpler do you need? π
Mikero only needs double clicking a pbo, how much simpler do you need?
one that doesn't look for errors and doesn't report them to confuse the noob.
Folder updates live when you edit a file inside the pbo (at that point the pbo has been patched and the file replaced with the new version) 
I guess I need to add progress bars for that still, though maybe its fast enough to not need them
almost for certain bars not needed, even with config.cpp->bin and compression. extractpbo(gui) does same thing, but i've discouraged it's use.
Well I tried drag&dropping a 500mb video into a pbo π
For that you certainly need a progress bar.
But I don't know where the lower limit is. Don't know if windows even spawns a progress bar if you copy a very small file
well. horses for courses i guess. I prefer a simply egg timer for the above.
where progress bars ARE, unquestionably, useful is if they list the current file they're massaging. Making a large 'vid file' fairly obvious for the apparent stall.
I really want the modern progress bars that show you the transfer speed with the nice graphs.
But Microsoft actually didn't document them and doesn't offer the API.
And I looked at how to do it and its pretty cumbersome and not worth the effort to implement without documentation/API π’
1337hax0r
hello, is it possible to clear all property names with one command with DeP3d -GD * or other syntax?
no, individual deletes only
Make sure you donβt end up with some strange mixed arch file
You can check the format of the output file and dump the exposed names
how you define the calling convention depends on the compiler
but thats not your "method is not implemented" issue
can you show the code without the function bodies?
afaik you don't need the bottom 3 __stdcall, it will see your previous definition and use that.
But that looks fine to me
For x64 that dependency walker output is correct
the additional tools are listed on the bytex website
the 'free' tools are the core components for all the others.
free tools are more than enough for most people. the point behind subscriptions is to encourage me to continue with improvements (and a way of saying thank you for the quality tools you already got for free)
free tools are only updated when a showstopper is discovered (average of 6 to 12 months). Subscribers enjoy a continuous stream of improvements every week or so.
I'm having trouble using Game Updater to download the dev branch. Always stuck on "Steam3 Loading" and "Logging in user ...". I noticed it was mentioned that it was fixed earlier but I've tried with and without Handle Steam Client
Hi
Why is pboproject giving me this error?
class HL_moissonneuse : HL_Engins { inherit class 'HL_Engins' does not exist In File HL_Engins\config.cpp: circa Line 609 rap: missing inheritence class(es)
In this file : https://paste.ofcode.org/TfxF8vABpSNBpFUGvnhub7
No problem with addon builder
and the mod works perfectly with addon builder
haaaaaaaaaaaaaaaaaa
Looking at this file, I'd guess you've made a typo somewhere, like a missing } or something
because this thing is a mess and unreadable
well it's badly indented which has happened because it's so huge.
splitting it into several #includes would make it far easier to maintain
that said. I can find nothing wrong with it!!!!
paste of code changes the indentations, the original file is tabbed correctly.
HL_Engins is declared just before so must be able to inherit.
i agree
but no-one sane, is going to wade thru TWO THOUSAND!!!! lines of code to chase the problem down.
Probably best to work with the elimination method, just remove stuff until it builds correctly
should indicate the problem
but yeah, that error is strange.
I will remove the maximum number of lines and add each class one by one to see
my guess is that simething above the cfgVehicles class is causing the problem and each one of those root classes should be in their own #include to make things far easier to maintain.
same comment could be made for the half dozen vehicle classes that inherit from HL_engins.
eg i have another mod which inherits from HL_Engins and works fine in pboproject
https://paste.ofcode.org/Kz335xhvjxMVJjmnFx2G7j
Could it be the CfgPatches class having the same name, for some reason?
Shouldn't cause an error, but who knows.
I had tried with a different name and the error was the same
garbage unicode characters?
am thinking that, but........
Truncated file. Missing one or more};. Error starts near token 'HitGlass4' : HitGlass4
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGH
class HitLBWheel : HitLBWheel { armor = 0.125; passThrough = 0; radius = 0.5 };
should be
class HitLBWheel : HitLBWheel { armor = 0.125; passThrough = 0; radius = 0.5; /*<<<<<<<<*/};```
Saying things build in addon builder is meaningless btw. It does not check what yous feed it.
He misses the ; here
class HitLFWheel: HitLFWheel {armor=0.125; passThrough=0;radius=0.5};
Ho I'm too late
thank you for your time spent
Hey,
I'm currently working on an GitHub aciton, which uses SteamCMD to upload my mod the workshop. Because I want to make sure there are no compatibility issues I want to generate a meta.cpp (https://community.bistudio.com/wiki/Arma_3:_meta.cpp), which is usually taken care of by the Publisher.
protocol, publishedId and name were absolutely no issue. timestamp was a bit tricky but doable. The only field that's left is hashOverride, which presents me with a problem:
The docs state the following:
Mod hash override that is send by the server to the client instead of the hash calculated from real mod. The override hash can be calculated by ModHashCalculator.
Problem is tho that the ModHashCalculator is a GUI application, which doesn't do me much good in a CI environment. Is there a CLI solution available or proper documentation how the Hash is calculated?
I saw that, but first of all it doesn't run on windows (currently HEMTT only runs on windows, at lest if you want working keys) and it also doesn't add a meta.cpp
I was actually thinking about opening a pull request, once I'm done β€οΈ π
You can build with Windows and upload with linux π
I know with actions/cache or the artifacts workaround
still doesn't solve my issue π
Problem is tho that the ModHashCalculator is a GUI application
I am guessing that dsSignfile will do the job for you providing you supply it with only the files that are present in the pbo actually placed on the server (the so called short hash)
I'll take a look. Thanks β€οΈ
x/*-+
Hope this is the right channel for this: my unit runs a 60gb hard limit on mod list size. Since I'm lazy and don't want to pull out a calculator every time the mod list gets updated or I add extra bits, is there a tool to drop a mod list into and it'll pull info from workshop or workshop folder to give me a total size?
No. Workshop size info is not reliable
you could set up your A3Sync instance and use it to calculate the overall size of your mod collection
@proud heart thanks for the idea, I'll take a dig into it, I'm assuming it isn't kerbal science. Because we're all luddites we still rely on the vanilla launcher.
And yeah workshop isn't always reliable. 200mb? Nah, 8gb. But I've found it to generally be in the right region
I don't use A3Sync either, forcing people to download mods from some wild repo instead of workshop is cringe 
but what A3S can do is to show the overall size of mods you put into it, and that's the one way
other would be write a script in powershell or any windows-supported language but I am not a programmer so can't really help with that
And you could write a programme that makes the computer buy all the bananas and I wouldn't know any better... Except I'd get healthier from eating all the bananas
Sync seems to be a work around if it's kept local to my pc during draft
Damn how many mods do you guys use that you regularly get over 60gb
Limit is 60 most of which is rhs and cup. But if I run a bespoke list for an op it becomes a question of how much am I adding or if the whole list is getting looked at how the size changes
Ah, no wonder you hit 60gb quickly if you run both rhs and cup
They total 50 something off the top of my head. Constant debate whether to drop one of them
Getting off topic for the channel though. Appreciate the help and ideas all.
You can query steam cdn for actual size
Could you put that in two braincell language? π₯Ί
Me or Dahl?
Any of you. :/ I've been trying to research it but I'm clueless :/
I only know the verhoven film, which I haven't watched enough, the 2? Sequels and a short lived TV series
Thought it wouldn't be
Why can't I pm you lol
I can't send screenshots
throw them into imgur and post a link
Sadly I can't. I'm on phone atm. Currently working
I pm'd you
robo cop? 
steam cdn is where workshop content is being served from, that includes manifest with actual file sizes
https://imgur.com/rrI0yiZ @scenic canopy
So the workshop folder on my drive for folder properties? Or is it a file I can open with say notepad and whack the numbers into excel?
if you already have the mods downloaded you can just add up the numbers? π
I'm looking for a system that does it for me since I'm lazy π . So in an ideal world I'd drag drop a mod list export, some back end crunching would happen to pull the sizes from my workshop folder or the workshop and spit out a number
If it exists dandy if it doesn't it doesn't, move onto the next thing and keep whinging
I could give you a tiny python script that does something like that, just can't parse the mod list export, it takes the path to you workshop folder as first input and a file consisting of a newline-separated list of mod-folder names as second input.
If you know how to work with python generally(or one of your team-mates, i sadly just do not have the time currently to walk someone through it) let me know and I post it.
βοΈ just using the ping, as I figured the post is long ago and many people have this whole discord muted.
Appreciate the offer. Never worked Python before but no time like the present to dig into Google and learn. Life/employability skills etc etc
Because this discord actually does security better than most other server, I can't attach the script, but it is just this:
from pathlib import Path
import os
import sys
def bytes2human(n, annotate=False):
# http://code.activestate.com/recipes/578019
# >>> bytes2human(10000)
# '9.8K'
# >>> bytes2human(100001221)
# '95.4M'
symbols = ('Kb', 'Mb', 'Gb', 'Tb', 'Pb', 'Eb', 'Zb', 'Yb')
prefix = {s: 1 << (i + 1) * 10 for i, s in enumerate(symbols)}
for s in reversed(symbols):
if n >= prefix[s]:
_out = float(n) / prefix[s]
if annotate is True:
_out = '%.1f %s' % (_out, s)
return _out
_out = n
if annotate is True:
_out = "%s b" % _out
return _out
def get_folder_size(in_folder):
folder_size = 0
for dirname, folderlist, filelist in os.walk(in_folder):
for file in filelist:
path = os.path.join(dirname, file)
size = os.stat(path).st_size
folder_size += size
return folder_size
def main(workshop_folder, list_of_mod_names):
folder = Path(workshop_folder)
list_of_mod_names = set(item.casefold() for item in list_of_mod_names)
combined_size = 0
for i in folder.iterdir():
if i.name.casefold() in list_of_mod_names:
mod_size = get_folder_size(i)
combined_size += mod_size
return combined_size
if __name__ == '__main__':
_workshop_folder = sys.argv[1]
mod_list_file = Path(sys.argv[2])
with open(mod_list_file, 'r', encoding='utf-8', errors='ignore') as f:
mod_name_list = [name.strip() for name in f.read().splitlines() if name.strip() != '']
full_size = main(_workshop_folder, mod_name_list)
print(bytes2human(full_size, True))
This is not optimized, but it works.
after you have installed python, save the code above as `mod_sizer.py", then you open a cmd window and
path_to_this_script "path_to_the_workshop_folder" "path_to_a_file_of_mod_folder_names"
Example
D:\tools\mod_sizer.py "C:\Program Files (x86)\Steam\steamapps\common\Arma 3\!Workshop" "D:\tools\mod_names.txt"
>>> 24.1 Gb
where mod_names.txt looks like (everything is case-IN-sensitive):
@Vet_unflipping
@Unsung
@RHSUSAF
just a heads up it is quick and dirty.
If it works it doesn't matter and it's something that doesn't need detail. Again, really appreciated.
As I am actually excited by the challenge of:
-
doing this without external libraries
-
in a single script file
-
with only the exported mod list html as input
-
bonus: without using classes
I rewrote it. To achive all those things.
Before posting the script though, here are quick general instructions to get python (assuming you are on windows):
-
go here https://www.python.org/ftp/python/3.9.6/python-3.9.6-amd64.exe and download the installer (direct link to the download)
-
run it and make sure to **check the box saying something like
add python to PATH. This will make the python scripts executable by double clicking and or drag and dropping stuff onto it. If you want that, else you have to start it via cmd and give the exported html as an argument
Script is to large, to post here, sending you via DM, If it is of interest for others, let me know I could send it to an admin, to be posted or something
IMPORTANT THIS ONLY WORKS ON WINDOWS IMPORTANT
save this as a .py file and then just drag and drop the exported mod list onto it.
CHECK OUT THE SETTINGS REGION INSIDE
if something does not work let me know
with sqf-vm in vscode, how do i set up arma includes to not throw errors? i have the unpacked data in P:\a3 so I thought this would work (settings.json):
"sqfVmLanguageServer.ls.additionalMappings": [
{"/a3/ui_f": "P:/a3/ui_f"}
]
``` this is my include:
```sqf
#include "\a3\ui_f\hpp\defineDIKCodes.inc"
arma 3 toolbox for blender will not install. any clue? thanks
downloading from git adds extra folder to the zip so you need to unpack it manually to the blender addon folder or unpack the zip an repack without the extra folder
Best place to ask for that is at https://discord.gg/vpdwJtG in language-server
And the proper way, as of now, is to unpack the pbo (or use pbo virtualizers) and map it via ctrl+, options in there
copying it into your directory is also an option, fixing the path to the local one
Sqf-vm is actually reading and parsing that file, which is why it fails
@dawn palm sorry to bug you but ive been trying to fix this for hours
</end copy/crunch>
<Bis Binarising...>
binarise crashed
What is something that could cause this?
Thanks in advance
Binarize log might give you a hint
Usually broken p3d or rtm
Troublesome file should be last in bin log file unless my code is wrong
yes. to above, a common p3d crash error is if you have 2nd uvsets in lods that dont want them, or a weights specified in any lod other than geo. This last one happens (apparently) with copy pastes.
oh man, my last resort is bothering you fine people with my conundrum
trying to figure out how to refuel vehicles with a jerry can
Since this is #arma3_tools I'm going to go with the advice that you need to procure yourself a funnel as this is the best tool for the job Β―_(γ)_/Β―
alternatively you an use a |
Progress! And support for all the tools π₯
What would be the best way to uninstall my pdrive/a3 tools and install it again the mikeros way?
Not sure if this would be the right channel to ask
there should be NO 'steam a3 tools' on your p drive.
other than that, simply use arma3p. Written by experts with decades of experience, it even accounts for, and fixes, any mistakes that the steam tools might have made by over-riding them all.
it also supplies various items that bis don't (or not easily), buldozer cursors, maplegends, +++.
ps. steam tools still exist, but they aren't placed on the p drive (to do so would confuse the crap out of bis binarise). Only two of those tools are of any interest to you. obect builder and terrain builder. BOTH of them need to be used via shortcuts, NOT, the gui provided by bis coz it's broken.
copy, thanks!
Mikero have you been made aware of the packing issue that crashes pboProject?
seems like whenever you change any sort of p3d
when you go to pack it will crash
but then you pack again and its fine
Have not encountered such
if you can provide a repro I can look into it
Ill try reproduce it
So when I pack something with mikeros obfusqfcation like a building then I change the p3d (put it in blender, bind all the sections to get the sectioion count down and re-export)
then go to repack it again
it will freeze at the end, then I close, reopen and pack and its fine
- please check that this is consistent. ie alter the p3d again to see if same happens.
2)check if obfuscating is causing the issue by not using it.
has anybody managed to run .net5 as arma extension?
https://github.com/arma3/RV-Extension-Examples that one does not seem to do the trick
i saw another repo linked here, but it has been taken down
Lots of things changed from framework to core so probably incompatibility is at fault here
Use framework instead or, for better or worse, try to find a nuget that does the same for core
well the project used an early alpha lib of CoreRT now part of net5
too bad, i was really counting on that π
Feel free to dive in
The exports are important and hence you probably can get it to work again
sqfvm doesnt want to load it, KK callextension does load it somewhat but shows no method when using functions
are u aware of any tools that could help me analysing what is going on?
Dllexport or something among those lines was the name of the tool you can use
What is the error sqf-vm gives?
only "loading library failed with error code '126'"
Means sqf-vm could not find the module (the 126 is the windows error code returned)
am i supposed to do it the arma way e.g. "extension" callExtension "blub";
or do i need to specify _x64?
i am running the 64bit vm
Nope
What is the file structure?
i just copy pasted into the vm root folder
Where are you executing from?
Very weird then
Repl should always have the workspace at the sqf-vm exe dir then
It then all is on windows π€
So should work π€·ββοΈ
oh wait
if i specify "extension_x64" i get an 127 error π
(i bet it is just another 404 not found) π
" Receiving symbol failed with error"
Lul Wut
Then that is for some reason broken, auto appending the _x64
Anyways, the 127 is pretty much export not found
i managed to get it working
for the future me or anyone else who wants to get .Net5 working for arma extensions:
-
Use this code:
https://github.com/arma3/RV-Extension-Examples/
remove the UnmanagedCallersOnly.cs (it is already part of the framework) -
But follow install native compiler from here and how to get it setup:
https://github.com/dotnet/runtimelab/blob/feature/NativeAOT/docs/using-nativeaot/compiling.md -
Add
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<OutputType>Library</OutputType>
to a PropertyGroup
-
You MUST use this flaggs to get the code compiled:
dotnet publish /p:NativeLib=Shared /p:SelfContained=true -r win-x64u can swap it for linux_x64 -
the compiled code is now available under native
Why not create a PR?
That is what the git repo is for π
+1 for a PR
i think i got this working too
is there any tool to mass convert PBOs?
convert from what to what
Pbos to folders
Pass folder path to extract pbo and all pbos will be extracted
oh nice
thanks guys
I was manually extracting the entirety of cup with pbomanager
one
by
one
started pr request 
at that point might aswell make a pdrive out of it or use DokanPbo
dokanPbo?
Virtual Pbo drive.
Give it paths to modfolder, it creates you a pdrive without unpacking anything
@young plaza l, pboManager will not debinarise the configs or rvmats making it's usefulness problematic. Also, cupcore2p is provided by my tools to exctract all of cup 'properly'
yeah I know just needed it for a terrain
https://i.imgur.com/0Q537to.png
tried to install DePbo but it borked
do I need anything prior to this?
oh just found out about the AIO
considerably easier
also pretty professional looking
nice job
but I still get this problem
#arma3_terrain message
your envPath to the tools probably does not get written
you may beed to add that manually
I know I've asked a lot about it today but how do I do that manually?
nice job```
thank you @grand kelp
What are my options when I can edit my models and configs on a new workstation, but my unbinarized bi key is on another computer that's unavailable, AND I already have the mod published to Steam?
Basically, I'm wondering what the consequences are for creating a new bikey and publishing the next update with a new key, or if there's a better way.
Server admins would need to copy your new key to their allowed keys folder
biprivatekey is for signing, bikey is for allowing bisigned pbos
You can just copy the biprivatekey from the other machine if you want to reuse it
Some mods always reuse the same bikey
Other use a new key for every version to force upgrade
I hadn't thought of that, but it's sound reasoning... at least if there's a big update.
So I've been working on a compiler/templating engine for building Arma 3 Addons from a much smaller format.
i.e. generating the proper CfgMusic entries for a folder of .ogg files.
or generating a bunch of retextures of the same model given a folder to a bunch of textures.
I've also gotten the compiler integrated with armake2 for automatically packing & signing the pbos, and then a steamcmd to publish it to the workshop.
All and all - I'm able to build, pack, and sign in under 2 seconds, and then publish to the Workshop with a single command. (granted it's a small mod with no p3ds etc.)
Would this be useful for other people? I'm considering open-sourcing it and trying to get some other contributors/users.
I would ask a different question: Would it hurt to open-source it? If not, go for it. Chances are it will be useful for at least someone (at some point)
That's currently the plan. Was also just interesting in getting people's thoughts about such a tool.
I'm setting up a public github action, so people would be able to setup CI/CD for their Arma mods.
Personally I would consider tools like this to be very useful but then again I don't create any Mods that require this kind of stuff so I can only give an "external" view on this π€·
Thanks @sick verge
I've published the source code here: https://github.com/ajmwagar/laat
It currently has a Docker image that can be used to set up Github Actions (what i'm currently building out)
There is only really one build out "plugin" but I have more in the works.
my opinion is, that this type of 'template' engineering is only truly useful when it has a focussed end goal. For instance, a gui that creates music pbos, voice pbos, sound pbos, where the user doesn't have to insert so much as one semicolon to get a result. The gui would simply create a libtary of 'sounds' and do all the messy cfgMusic details without further fuss.
Items like volume, duration and pitch would be shown in gui edit boxes. Where all the user has to do is supply as class label and a file.ogg name.
@dawn palm That's a fair point.
Personally I don't like GUIs. Really for two reasons:
- You can't always version control the settings used as input
- It's harder to automate your use of them.
I want this tool to be able to be used in a CI/CD environment (generally a headless linux box)
fair enuff and a clearly different useage, (headless)
but - i do need to expose the volume, and pitch in the settings for the music plugin.
That and I work mostly from a command line so it's what i'm used to.
For instance, a gui that creates music pbos, voice pbos, sound pbos, where the user doesn't have to insert so much as one semicolon to get a result. The gui would simply create a libtary of 'sounds' and do all the messy cfgMusic details without further fuss.
Like I have made once for our unit to make music pack.
Just drop in whatever files, it automatically converts to Arma format and creates CfgMusic/CfgSounds config for you and lets you categorize them all
But its made as a user tool to use once you add new files, not a thing you use to repeatedly repack the same thing, cuz people don't do that with music, and even if they do they still only write the config once and are done with it
Yup. Sounds just like the music plugin for my project.
Takes music files > outputs a Music addon with a proper config.cpp and file structure.
I just finished releasing the github actions portion of the project. So you can now automatically use it to build > pack > sign > and release your mod to the workshop.
thats probably easier than mine. Push music files -> rest done automatically.
How do you decide categories (musicClass) just by subfolder?
yup just by subfolder and then it's formatted nicely with a prefix in the root config file that it's all based off of
Like I have made once for our unit to make music pack.
feels like a superb, long wished for tool @glossy inlet . If you ever want to release the code, i'd pack it with my (free) tools for everyone. (Probably modified to work as C++). And I agree there'd be no purpose or need to 'edit' the damn thing, providing, the classnames stayed the same, eg HotApples.ogg always wrapped around class HotApples, or something equally predictable. Only change i'd make is to produced ogg rather than wss (or convert wss right there and then) because that's what dayz needs.
I started to rewrite it from scratch last year, got half the way there, added funny gimmicks and then stopped working on it π
Only change i'd make is to produced ogg
it already does
https://cdn.discordapp.com/attachments/105463219954442240/738215035389870100/2020-07-30_03-59-57.mp4 Thats where it stopped post rewrite (warning loud)
Main focus was batch convert and config creation but then I had the idea of integrating TFAR filters and also applying filters to batch/multiple files and stuff.
Which surely is useful for loudness correction probably but... yeah a bit feature creeped
https://github.com/WolfCorps/KiriMusicHelper code is all here, but needs a couple days more work
π»
7-zip like comfort
And maximum signing comfort too of course

@glossy inlet , I reccomend you use extractpboDOS.exe rather than the gui version(extractpbo,exe) which calls extractPboDos in any case. Reason being, un-necessary lag initialsing hidden gui panels, etc etc,
by all means, let the user select 'extractpbo' but under the covers, use the dos speeed freak
Didn't know that the non DOS version does UI stuff despite it looking to only be DOS.
Are both always installed together?
always
(it's windoze that forces the gui() and ~gui() triggering. It has to start as a winmain then allocConsole)
Good all fixed
Also Pbo properties now supported as ugly textbox because I just can't WinForms
I tried to use MFC, but dang its such a chore.
And I already wrote all the COM code without using ATL and just by manually using COM stuff, so then using MFC would defeat my reason not to use ATL too π
yes.
the last desktop I ever took seriuosly was KDE for Linux and a dash of TKwidgets, Have had no further interest in them. I rely on @grand kelp now to make things look pretty.
All the properties at once 
Hey mikero, have you had any reports of proxies not working on some obfuscated buildings? Cheers
sounds logical, obfuscation likely breaks the path to proxy
@twilit canyon , yes I have. I hear of it all the time. And, the reason is: if you obfuscate a proxy pbo, you MUST re-crunch the pbo that uses those proxies AFTERWARDS, Each time, every time.
I've done this in order, tried it 4 times now. The p3d has named properties class house and map house, the p3d has land_p3d name and is config inherited from Hosue_F
and I am still having issues
also tried with map building
works fine unobfuscated
@twilit canyon , what exactly is 'not working' please?
class land_xxx is not an issue for proxies. You've done the right thing there, but land classes only affect door opening and window breaking.
So if I use any buildings with the obfuscation that have proxies, if they're in the same root as the original p3d or not all the doors don't work, animationNames doesn't work etc but they work fine if they're placed in eden just not in terrain. Packing terrain with pboproject also.
the non-obvious question to ask here is do any of your buildings with NO proxies work when they are baked into the map. eg do they open their doors?
2nd Q. have you tried NOT obfuscating the proxy pbo? Yesm, ok, proxies in he same pbo, you can't test, but what about ones in another pbo?
(and, of course, you should not obfuscate the wrp pbo itself, if you do, there's the answer)
Normal doors work even in the PBO with the non workign doors
Non obfuscating makes it work fine
I do a full build non obfuscation for the map
is this tool out btw?
if its the one I think it is
Its WIP.
I just implemented self-updating and consent.
Copy-pasting folders out of pbo is not working.
I'm working towards a beta testable version
wonderful being able to open pbos like that would make stuff alot easier π
esp being able to just copy paths
Ah I guess thats a good right-click feature to just copy a files full path
FYI mikero, makePbo doesn't support import config keyword, and fails to pack missions
#arma3_config message
https://community.bistudio.com/wiki/import

import X; should work the same as class X; in terms of the preprocessor right?
oh right, need to support from as well π
yeah basically exactly the same (atleast if you only parse and not binarize)
yeah, should be resolved runtime
thanx 4 heads up. I assume if this keyword is present, the mission.sqm cannot be binarised? (because it wouldn't know where to get class accessories:accessories
People wouldn't use this in mission.sqm
this is purely intended for description.ext, which doesn't get binarized
ah duh!!!!!!
depbo.dll v 8.13 now supports
import class [from class];
keyword only accepted in a desc.ext, and all lintchecks remain enabled with a small change to inheritance checking
Look what's coming...
Which reminds me to make you that sample terrain!
yes yes yes please. I had a simple 64x64 'haggis island' which was more than i ever needed
(Credit Planck)
I hope you can specify each of these from CLI ;)
the good news is, pboProject's CLI will use whatever was set in the gui.
it would be unrealistic to directly specify (up to) 128 arg,um,ents on a command line, and no, a .lst is guaranteed to fail with user typos. The gui ensures this can't happen, can ignore deprecated ones, and alert the user when there's new ones.
the code at the moment @neon flax blasts thru all ace3 and cba addons folder, sans problems. I think you're part of that team?
What about CLI only environments?
You can already set options via registry, ACE build script does that
π
@scenic canopy to the rescue
PboExplorer also sets pboProject filepaths in registry, and then just opens it to have the filepaths preselected.
Basically same for Addon Builder too
yes, but these are both guis which , like pboPro use it to 'remember'. it's not so clear with dos, where it would get these settings from, but doable.
it could 'simply' read the qword registry flags. worth thinking about.
one big dtawback,. unusable in linux
command line param to specify a json file (or whatever you like) with all the config
big downside of using registry for specifying such params is that you need to save and restore the keys after CLI usage.
Otherwise you will mess with user preferences that he has set in the GUI.
IMO something like "project config" file would be a good idea. It makes sense to have unified settings per project instead of having these things set "per person".


