#arma3_tools

1 messages Β· Page 41 of 1

vague shard
#
#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 {```
#

will verify the macro parameter naming

glossy inlet
#

Need to make better preprocessor error logging, but thats mostly a waste of time

dawn palm
#

{
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

glossy inlet
#

unless you force them with makepbo -n πŸ˜‰

dawn palm
#

-n was removed from makepbo something like a year ago

ionic dock
#

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

dawn palm
#

if necessary, you can delete argo from manifes.txt in my bin folder

ionic dock
#

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

dawn palm
#

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.

hard locust
dawn palm
#

yes. i'll wash my mouth out. ☺️

ionic dock
#

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

ionic dock
#

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.

ionic dock
ionic dock
#

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.

glacial loom
scenic canopy
#

check the output logs like the second image says

#

it will contain the errors

glacial loom
#

it just says "view output logs"

scenic canopy
#

press button "view output(s)"

glacial loom
#

@scenic canopy

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

glacial loom
#

where would i find these other logs

#

and does that mean i should re install rapify

scenic canopy
#

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

glacial loom
#

OK

#

caps lock sorry

glacial loom
scenic canopy
#

make sure all tools are updated to the same release

glacial loom
#

ok

glacial loom
dawn palm
#

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.

glacial loom
#

i see

#

@dawn palm how would I go about uninstalling all your tools

#

do i just uninstall mikero folder

glacial loom
#

so i reinstalled and it still doesnt work

dawn palm
#

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

glacial loom
#

@dawn palm I’ll get back to you because i’m not at my PC right now

glacial loom
#

@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

glacial loom
#

ping me if you have reply

dawn palm
#

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.

glacial loom
dawn palm
#

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
empty kindle
#

❓ ebo files are not meant to be unpacked, right? There is no official way of doing that.

karmic niche
#

Correct

#

No official and legal way of doing that, formally

empty kindle
#

OK, better to stop here πŸ™‚ Thanks for clarification @karmic niche.

glossy inlet
#

FYI .sqfc files require new bisigns with next A3Tools/Arma update

elfin oxide
#

What is a .sqfc file?

dusky dune
#

Super qool fricking code

glossy inlet
#

SQF bytecode

dawn palm
#

oooo, that's useful.

empty kindle
#

Another obfuscation layer around original assets?

drowsy comet
#

Speeds up scripts, very very cool

empty kindle
#

Is there any info around sqfc files? I do see it for the first time.

glossy inlet
#

basically like config.bin but for sqf

nocturne basin
#

sqfc is the chance for big improvements

#

upon custom language front for arma πŸ€ͺ

empty kindle
#

But on the other side if original BI scripts would be only sqfc, it is kind of obfuscation as well, right?

nocturne basin
#

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)

empty kindle
#

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

karmic niche
#

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

nocturne basin
#

Sqfc really just takes away the compile time and adds the possibility to optimize on assembly level

karmic niche
#

Yup, but as long as nothing besides the Arma VM can read it, it is obfuscation πŸ˜‰
Not for long, but for now, it is πŸ˜„

glossy inlet
#

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

empty kindle
#

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)?

nocturne basin
#

cuz that is what sqf did prior

#

and sqfc allows to to skip that step

neon flax
#

compilation takes time.

#

If you have precompiled data in pbo it will be loaded faster.

neon flax
#

Game startup is a lot faster with ACE for example.

empty kindle
#

But I mean to keep the cache across game starts.

neon flax
#

then you need a way to invalidate it.

#

Precompilation for addons on packing/building is optimal.

glossy inlet
#

could do in theory

#

but not much sense in that

nocturne basin
empty kindle
#

My questions are probably lame, that's why I have asked for some docs to take a look first πŸ™‚

glossy inlet
#

ArmaScriptCompiler can read bytecode

#

no need to do anything on sqf-vm

karmic niche
#

But can it print back something human-readable? (sorry for my ignorance, if it actually can)

glossy inlet
#

it can output the assembly, or the source SQF script (which is embedded in .sqfc)

empty kindle
#

So in theory for example it is possible now to write LLVM sqfc frontend?

#

And benefit from whole LLVM world?

nocturne basin
#

the basis is the same as before

#

the possible input files just changed

nocturne basin
karmic niche
empty kindle
#

possibilities are really nice these day, and I still do spend days hacking old OFP sqs files πŸ€¦β€β™‚οΈ

glossy inlet
nocturne basin
#

hence i still hope on some fancy PR 😏

#

tho ... needs to be more generalized probably

glossy inlet
#

I'm not gonna merge my whole WIP SQFC base into SQF-VM

nocturne basin
#

not expecting that
just saying that it would be a worthy addition to SQF-VM

empty kindle
#

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 πŸ™‚

karmic niche
nocturne basin
#

SQC FTW

karmic niche
#

@empty kindle wasn't that Java?

#

I think Java was considered at some point (but then dropped, eventually)

empty kindle
#

I can check later.

glossy inlet
#

A3 has Java scripting implemented yeah

empty kindle
#

just wondering if Enfusion is going to bring some news in here

karmic niche
#

You mean to have an Enfusion -> sqfc compiler?

empty kindle
#

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.

karmic niche
#

I wouldn't say "no" if someone handed me such a piece of software, to use Β―_(ツ)_/Β―

karmic niche
#

The last time I checked (and I haven't checked really lately), they rewrote everything from SQF to Enfusion

#

At least for DayZ

empty kindle
karmic niche
#

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 πŸ€¦β€β™‚οΈ

dawn palm
#

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.

karmic niche
#

Yeah but I was thinking at least about the basic syntax, much like SQC, currently

dawn palm
#

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

karmic niche
#

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)

dawn palm
#

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.

karmic niche
#

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 like modded or ref, etc...
But other than that, it's closer to C++/C# than anything Bohemia has ever done before

dawn palm
#

^i agree

nocturne basin
#

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

karmic niche
#

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 πŸ˜„

blazing needle
#

is there an example repo for mikero's tools CI/CD on github?

empty kindle
#

@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.

blazing needle
#

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
empty kindle
#

seems legit

steps:
  - uses: arma-actions/mikero-tools@latest

will ensure mikero tools are installed and available in PATH

blazing needle
#

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?

empty kindle
#
- 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

blazing needle
#

oh well I guess I'll just test it and see what errors it throws at me

empty kindle
#

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

blazing needle
#

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
blazing needle
#

hmm can I pipe the output of pboProject to the cmd window? normally it opens a new one where all the information is

scenic canopy
#

you'll probably need the arma 3 tools action as well, I haven't made that public yet

blazing needle
#

ooh right

#

hm i'll check out hemtt then

elfin oxide
nocturne basin
#

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

elfin oxide
elfin oxide
# nocturne basin so enscript has `using`, properties and other distinctly C# syntax features? cuz...

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

nocturne basin
#
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
elfin oxide
#

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

nocturne basin
#

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

elfin oxide
#

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.

nocturne basin
#

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)

elfin oxide
nocturne basin
#

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

elfin oxide
#

@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.

karmic niche
nocturne basin
#

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

elfin oxide
#

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 ...

nocturne basin
#

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

karmic niche
#

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)

nocturne basin
elfin oxide
# karmic niche > I already wrote a featurecomplete one for enscript, BI can buy mine if they wa...

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.

nocturne basin
#

unit-testing

#

CI/CD

elfin oxide
#

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.

nocturne basin
#

nobody does in arma either but a few individuals

#

but it would be possible with sqf-vm

elfin oxide
#

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 πŸ˜‰

karmic niche
#

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.

elfin oxide
#

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.

karmic niche
#

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

elfin oxide
#

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.

blazing needle
#

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?

sly skiff
#

should be ok since most mod teams have their own project account that handles the workshop uploads

neon flax
#

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.

blazing needle
neon flax
#

Arma 3 Mods Steam depot needs Arma 3 ownership.

#

Missions depot does not.

elfin oxide
#

@neon flax can you actually upload without steamguard? I thought items are automatically turned to private then

neon flax
#

Upload new items - no
Update existing - yes

elfin oxide
#

Ohhh that is good to know

vague shard
#

@elfin oxide thanks a lot for sharing your insights once again πŸ™‡

orchid shadow
#

Very interesting really!

vivid bloom
#

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" thonk

glossy inlet
#

😠

vivid bloom
#

I knew i would get this kind of reaction πŸ˜„

glossy inlet
#

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

glossy inlet
orchid shadow
#

Haha obsfucation

vivid bloom
orchid shadow
#

Each to their own

#

I personally rather spend more time building stuff

glossy inlet
#

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

vivid bloom
#

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 πŸ˜„

glossy inlet
#

"It's not about hiding stolen stuff"
"people just steal it from the missionfile without even asking."

πŸ™ƒ

#

reee

orchid shadow
#

Like i said do what you will with your time

vivid bloom
# glossy inlet reee

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 πŸ˜„

dawn palm
#

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

scenic canopy
#

issue with rtm binarization in latest subscriber version, should hopefully be fixed soon

dawn palm
#

^done

cinder drum
#

Hey @dawn palm , small question on MakePbo/DePbo ; can you confirm "obfuscation" actually does LZSS compression ?

elfin oxide
#

obfuscation does not mean compression nor vise versa. But compression is enabled for many setups and part of obfuscation yes.

cinder drum
#

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 ?

glossy inlet
#

"but makepbo also has a responsibility in using non UTF-8 names" why? Because some 3rd party non-conforming tools are non-conforming?

dawn palm
#

<grin>

#

the scrambled names are 100% totally, utterly, utf8 throughout

glossy inlet
#

Arma handles filename as a sequence of bytes. Doesn't care about encoding (just no null chars, and some places assume backslash as seperator)

dawn palm
#

^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.

elfin oxide
#

Obfuscation is meant to cause you a hassle ... I fail to see why we should make more easy to access the files.

dawn palm
#

^yep

cinder drum
dawn palm
#

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.

cinder drum
#

that's why I say armake has a design flaw

dawn palm
#

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.

scenic canopy
#

if signing works with bohemia tools everything is ok?

dawn palm
#

well i sign with dsutils too. and whether it signs or not is not relevant to the internal scramble of a pbo

cinder drum
#

my main point is not about signing pbos, it's just an example

scenic canopy
#

if dsutils can successfully sign it but armake 2 can't then that would be an armake 2 issue

cinder drum
#

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

scenic canopy
#

You should probably check the authors list for those pages

smoky flume
#

yo any of you blokes know much about config's?

#

tag me btw I have notifications off

smoky flume
#

cheers man

cinder drum
dawn palm
#

just checked the code. you are correct, file NAMES are random characters.

smoky flume
#

yoooo mikero himself literally using your tools as we speak haha

cinder drum
#

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

dawn palm
#

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!!!

cinder drum
#

since non utf-8 sequences work with the game I suggest to handle this as a documentation bug πŸ™‚

dawn palm
#

i still cannot find the relevance here. the author does not want you accessing his files.

glossy inlet
cinder drum
#

i'm fine with that

cinder drum
#

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

dawn palm
#

well the whole idea of obfuscation is to break the rules, and making it utterly impossible to extract (most) files with the names intact.

cinder drum
#

you could encode random filenames in UTF-8 compliant sequence of bytes, that would still do the job

#

fortunately the game doesn't care

smoky flume
#

do you guys know anyone I'd be able to contact for the config? IK wrong chat, haven't gotten any help so far

cinder drum
#

which makes me wonder on actual unicode support by A3 πŸ˜’

dawn palm
#

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.

rancid anvil
smoky flume
#

because no one has replied to my chat in #arma3_config , you guys here seem knowledgable of arma

rancid anvil
smoky flume
#

aight shit

#

my bad I'll leave you guys alone in here, apologies

cinder drum
dawn palm
#

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.

stuck walrus
#

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.

dawn palm
#

arma3p has been updated
Enjoy

dawn palm
#

arma3p updated (again)

dawn palm
#

thanx to @scenic canopy who implemented it. pboProject is now multi threaded. Crunching should be faster

#

😻

scenic canopy
#

still room for improvements but should be quite a bit faster πŸ™‚

dawn palm
#

awwww, how sweet

blazing needle
#

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
scenic canopy
#

you could lookup path to arma 3 tools during install

#

HKEY_CURRENT_USER\SOFTWARE\Bohemia Interactive\imagetopaa and key tool

solemn isle
#

Is there any way to have MakePbo to ignore unbinarised P3D's?

scenic canopy
#

how old do you need?

#

I have some local copies

solemn isle
#

I have no clue when it was removed

#

and should've specified, need Linux version

scenic canopy
#

I have 0.5.48, 0.5.50, 0.7.92, 0.8.03, 0.8.06 for linux

solemn isle
#

found the changelog for it, -U was removed in 2.06

#

so whichever version is before that

solemn isle
blazing needle
#

how do i prevent hemtt from erroring out when including files from a3?

scenic canopy
#

you need to provide the needed includes

blazing needle
#

as a subfolder in the project? because i have all data unpacked on my p drive

scenic canopy
blazing needle
#
include = [
    "P:/a3"
]
``` like this?
scenic canopy
#

it would just be "P:/ then

blazing needle
#

whoa that takes a pretty long time to preprocess

#

oof and fails

scenic canopy
#

usually the needed files are copied to the include folder

blazing needle
#

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

scenic canopy
#

generated?

blazing needle
# scenic canopy generated?

usually the needed files are copied to the include folder
sounded like that would be done automatically from my a3 folder?

scenic canopy
#

manually

#

include is just automatically configured to be used πŸ™‚

blazing needle
#

ah okay. symlinking the entire a3 folder is okay too?

scenic canopy
#

should be more or less the same as using P:/? think

blazing needle
#

aah I'm slowly getting it. emphasis on slowly πŸ˜„

scenic canopy
#

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 think

#

so for anything p3d you might need to provide extra love

blazing needle
#

no worries, only config stuff πŸ™‚

empty kindle
#

@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)?

dawn palm
#

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.

empty kindle
#

ahh, ok, I'll check, thanks for the hint

blazing needle
#

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
glossy inlet
#

afaik no

#

and these cannot work in binarized configs anyway as they are determined at runtime

meager surge
#

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?

scenic canopy
#

backup? think

#

the original config.cpp is still there after crunch

#

you won't get the same file after unpack is info is lost during crunching

meager surge
#

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?

dawn palm
#

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;```
scenic canopy
#

the output is bin, the cpp is still kept in source folder

grand burrow
#

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

meager surge
#

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

glossy inlet
#

just make a config.txt as a copy of your cpp and keep it in your pbo

meager surge
#

This is what I do currently by hands. Maybe small python script will help.

What about sqfc.json?

scenic canopy
#

but the config.cpp should be in source control, why do you need it in pbo?

meager surge
blazing needle
#

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

rancid anvil
#

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?

karmic niche
#

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

rancid anvil
#

sippy another reason for me to want to look at that code

karmic niche
#
    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 πŸ€·β€β™‚οΈ

dawn palm
#

tools update (subscribers)
eliteness: fixed filetree panel
pboProject: reworded/correct 'bis binarise has errors'
new linux tarball

cinder meteor
#

Hi friends,
Has anyone made any benchmarks to test SQFC performance gains?

#

I am curious about run-time performance, not about the loading time.

nocturne basin
#

Technically there is none

#

Only in practice, when optimizing, there can be one

cinder meteor
nocturne basin
#

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

cinder meteor
#

Yes I understand.

#

So... is there a list of all optimisations somewhere?

nocturne basin
#

Check it out

cinder meteor
#

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

smoky halo
#

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

dawn palm
#

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

dawn palm
#

updated tools:
convertwrp fixes for linux

meager falcon
#

Does anyone got a copy of Steamroller lying around? foxhounds page seems to be down

dusky dune
#

@dapper pivot

dapper pivot
dawn palm
#

bloody nice, professionally written documentation, and a gr8 easy-to-use, tool.

smoky halo
#

is there an aplication similar to Tac view but for arma 3?

glossy inlet
#

I've seen someone make a Tac View exporter for A3

#

Don't remember where

smoky halo
#

ok if anyone knows pls @ me

scenic canopy
#

exporting the data is easy, showing relevant terrain in tacview is trickier. hard to scale out with lots of community terrains.

balmy fiber
#

Im planning to make some "shitty" Thermals for my arma unit. can anyone help point me towards a right direction to start making mods?

glossy inlet
#

Its a bit crusty, but I already prefer it over PBOManager πŸ˜„

dusky dune
#

magic mouse cursor

dusky dune
#

theres a way in sharex to fix that, do a google on it and it'll tell you. Something regarding DPI scaling

native kiln
#

@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

scenic canopy
native kiln
#

tyvm

vague shard
glossy inlet
#

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 πŸ™ƒ

scenic canopy
#

I have paa thumbnail support for Windows somewhere on my hard drive think

#

paa thumbnails and quicklook for macOS on my GitHub

#

limitation of pboProject would be figuring out all needed params, makepbo might be doable

glossy inlet
#

well makepbo is just packing nothing else right? I already have that anyway
yeah I wanted to add paa thumbnails later too

scenic canopy
#

rapify but no binarise

glossy inlet
#

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

glossy inlet
#

Double click opening (with default app) works, icons work, subfolders work meowsweats
Time for some polish and then implement proper context menu.. I need my right-click -> "Edit in Notepad++" or I'll go crazy

glossy inlet
cinder meteor
#

What's your favourite library to do reflection in C++? I want to find some solution to automate binary serialization and deserialization.

elfin oxide
cinder meteor
#

Did you use it?

elfin oxide
#

I have not no, I just saw it and thought it looks very cool.

cinder meteor
#

Looks too experimental think_turtle

elfin oxide
#

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

glossy inlet
#

MSVC support should basically be complete? Or atleast mostly?

cinder meteor
#

Looks like MSVC doesn't have <experimental/reflect>

scenic canopy
#

latest 2019 update includes C++20

cinder meteor
scenic canopy
#

probably need to wait for 23/26

cinder meteor
scenic canopy
#

c++23

cinder meteor
#

Looks like it

nocturne basin
#

Reflection ain't part of c++20

cinder meteor
cinder meteor
#

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?

nocturne basin
#

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

scenic canopy
#

CLion has good cmake support

glossy inlet
#

@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

cinder meteor
cinder meteor
cinder meteor
#

Also Ctrl+T is not a resharper hotkey, it's a base VS hotkey

glossy inlet
#

But Resharper does something with it, dunno

elfin oxide
nocturne basin
glossy inlet
#

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

dawn palm
#

^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

glossy inlet
#

does it continue unpacking the rest of the non-duplicate files? or does it abort outright?

nocturne basin
glossy inlet
#

Yes.
Reading is done, pbo patcher for writing is done.
Tomorrow or so I'll plug the writing into the rest

nocturne basin
#

Have you by chance a more up to date version of that page? πŸ˜‚

glossy inlet
#

Nope, I already have that exact page in my bookmarks

nocturne basin
#

Kk

dawn palm
#

@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.

glossy inlet
#

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

small sluice
#

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

elfin oxide
#

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

dawn palm
#

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

small sluice
#

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

glossy inlet
#

it was interesting that CfgConvert used the name as defined by the parent class
how did you check that? debinarize? ingame config viewer?

small sluice
#

binarize somethign with CfgConvert and then look at the binary file

#

For example if I binarize this class:

class PaReNt;
class sub : parent {
};
#

The first PaReNt is the extern declaration and the second one is parent of the sub class

glossy inlet
#

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)

small sluice
#

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?

dawn palm
#

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.

small sluice
#

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

dawn palm
#

my guess is you already know these things, just attempting a tighten up.

small sluice
#

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

dawn palm
#

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')

small sluice
#

So after deleting something it becomes an emtpy class right?

dawn palm
#

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

small sluice
#

So it deletes it if there are no subclasses, otherwise it just empties the class?

dawn palm
#

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
};

small sluice
#

And this is the same effect as if you had done delete Turret; instead of class Turret{};?

dawn palm
#

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

small sluice
#

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

dawn palm
#

the above is true it is not deleted. {} EMPTIES the contents

small sluice
#

Wouldn't it be sub that gets emptied in my example?

dawn palm
#

all subs, by definition, no longer exist in the parent, because the parent is empty.

small sluice
#

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?

dawn palm
#

stop thinking delete is the answer. I is almost never used.

small sluice
#

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

dawn palm
#

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

      };
    }:
small sluice
#

And if there was a delete A; inside D then that would delete A for everyone?

dawn palm
#

sorry, fixed a typo, delete keyword added

small sluice
#

Ah, okay, this makes sense. Thank you.

vague shard
#

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

solemn isle
#

How do you use Mikero's movefolder?

#

Nevermind, read the provided docs, BIKI didn't include it all.

elfin oxide
#

Why would the biki document something about a third party tool thinkDerp

solemn isle
#

Β―_(ツ)_/Β―

elfin oxide
#

Fair enough

solemn isle
#

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/"

dawn palm
#

use the gui

solemn isle
#

Is there one for linux?

solemn isle
#

😐

dawn palm
#

no

#

move folder is not suitable for the penguin

solemn isle
#

why is it included in the Linux files then?

vague shard
#

@elfin oxide the BIKI is also for any third party content related to OFP/Arma or other BI games

elfin oxide
#

Can I also document my crippling depression every time I have to look at SQF?

rancid anvil
#

heh Nah thats too meta

solemn isle
#

or user page I guess

dawn palm
#

@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

vague shard
#

@elfin oxide whats worse? SQF vs Enscript in DayZ?

solemn isle
elfin oxide
#

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

dawn palm
#

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.

vague shard
#

@elfin oxide thanks πŸ™‡ last time you sounded more frustrated with Enscript πŸ˜›

elfin oxide
#

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.

cinder meteor
#

My only problem with Enscript is lack of pass-by-value structs notlikemeow

nocturne basin
cinder meteor
#

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 :/

nocturne basin
#

Isn't enscript with pointers and all that?

glossy inlet
#

Implement a deepCopy() method. There you go, you have deepcopies

cinder meteor
glossy inlet
rancid anvil
#

blep faaaancy

elfin oxide
#

Why is it pbox? To avoid messing with your existing pbo file associations?

glossy inlet
#

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

elfin oxide
#

That would be neat.

merry vault
#

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" ?

rancid anvil
#

nothing better in the output log?

merry vault
#

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" ```
vague shard
#

run rapify on the file

merry vault
#

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...

vague shard
#

define the class or have a model config high level up that does

dawn palm
#

@glossy inlet , nice idea for pbo properties
@merry vault , thanks for heads-up, will fix the output to show the actual error.

merry vault
#

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?

merry vault
#

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

scenic canopy
#

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

elfin oxide
#

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

neon flax
#

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.

glossy inlet
#

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

vague shard
#

+= should be resolved by the engine during initial config load to memory

#

if any tool hardcodes it during a conversion, it should be wrong

dawn palm
#

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

glossy inlet
#

Maybe few years ago

dawn palm
#

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_

dawn palm
#

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.......

dawn palm
#

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.

vague shard
#

+= gets turned into = if the engine on runtime doesnt find an existing parameter definition for the class - there is no inheritance lookup

dawn palm
#

'existing' by definition, means inheriting

#

BUT, the engine only looks in THE inherited class, not, the inheritence chain.

vague shard
#

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

dawn palm
#

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)

neon flax
vague shard
#

(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

dawn palm
#

@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

glossy inlet
#

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.

vague shard
#

anyone got an o2script to rotate a model by 90Β° (points, vertices, named selections, etc) by chance?

sly skiff
#

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

dawn palm
#

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.

sly skiff
#

I have luckily phased out OB mostly out of the workflow πŸ˜„

ashen flax
karmic niche
#

Because he made a tool to create terrains out of satmaps so your tools may complement each other

dusky dune
glossy inlet
#

Drag&Drop bongocat

rancid anvil
#

bongocat faancy

glossy inlet
karmic niche
#

How actually does this differ from that Dokan thing? Because you don't have to actively mount pbos?

neon flax
#

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

dawn palm
#

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.

glossy inlet
glossy inlet
# neon flax Won't work for tools like pboProj

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

spice sentinel
#

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

vague shard
#

whats a decent, but simple pbo extractor these days?

elfin oxide
#

cpbo?

glossy inlet
#

I use mikeros ExtractPbo just as double click action (Only until my PboExplorer is good enough for production use of course :D)

vague shard
#

ty

blazing needle
# vague shard whats a decent, but simple pbo extractor these days?
scenic canopy
#

ExtractPbo will unbinarize config and rvmats

vague shard
#

ty

#

personally i am using mikero's tools but for less tech savvy need a more simple tool

scenic canopy
#

Mikero only needs double clicking a pbo, how much simpler do you need? πŸ™‚

glossy inlet
#

Guess we need a in-browser pbo open tool 🀣

#

Open website, drag&drop pbo, done.

scenic canopy
#

I have one for that πŸ™ƒ

#

Got tired of it when adding PAA Viewer from pbo files

dawn palm
#

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.

sly skiff
#

No clicking, stuff just is there in right place when one needs it.
Go.

glossy inlet
#

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) realwobcat
I guess I need to add progress bars for that still, though maybe its fast enough to not need them

dawn palm
#

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.

glossy inlet
#

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

dawn palm
#

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.

glossy inlet
#

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 😒

cinder meteor
#

You can always put a fake GIF animation

glossy inlet
dusky dune
#

1337hax0r

timber mason
#

hello, is it possible to clear all property names with one command with DeP3d -GD * or other syntax?

dawn palm
#

no, individual deletes only

scenic canopy
#

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

glossy inlet
#

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

dawn palm
#

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.

stray lodge
#

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

timber mason
#

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)

#

No problem with addon builder

#

and the mod works perfectly with addon builder

dawn palm
#

haaaaaaaaaaaaaaaaaa

solemn isle
#

because this thing is a mess and unreadable

dawn palm
#

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!!!!

timber mason
#

paste of code changes the indentations, the original file is tabbed correctly.
HL_Engins is declared just before so must be able to inherit.

dawn palm
#

i agree

#

but no-one sane, is going to wade thru TWO THOUSAND!!!! lines of code to chase the problem down.

solemn isle
#

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.

timber mason
#

I will remove the maximum number of lines and add each class one by one to see

dawn palm
#

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.

timber mason
solemn isle
#

Could it be the CfgPatches class having the same name, for some reason?

#

Shouldn't cause an error, but who knows.

timber mason
#

I had tried with a different name and the error was the same

scenic canopy
#

garbage unicode characters?

dawn palm
#

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; /*<<<<<<<<*/};```
sly skiff
#

Saying things build in addon builder is meaningless btw. It does not check what yous feed it.

timber mason
#

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

bright gull
#

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?

scenic canopy
bright gull
scenic canopy
#

You can build with Windows and upload with linux πŸ™‚

bright gull
#

I know with actions/cache or the artifacts workaround

#

still doesn't solve my issue πŸ˜…

dawn palm
#

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)

bright gull
dawn palm
#

x/*-+

rose leaf
#

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?

sly skiff
#

No. Workshop size info is not reliable

proud heart
#

you could set up your A3Sync instance and use it to calculate the overall size of your mod collection

rose leaf
#

@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

proud heart
#

I don't use A3Sync either, forcing people to download mods from some wild repo instead of workshop is cringe shrug

#

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

rose leaf
#

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

rancid anvil
#

Damn how many mods do you guys use that you regularly get over 60gb

rose leaf
#

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

rancid anvil
#

Ah, no wonder you hit 60gb quickly if you run both rhs and cup

rose leaf
#

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.

scenic canopy
#

You can query steam cdn for actual size

rose leaf
#

Could you put that in two braincell language? πŸ₯Ί

cloud reef
#

Hey dahlgren

#

Do you know anything about robo cop?

rose leaf
#

Me or Dahl?

cloud reef
#

Any of you. :/ I've been trying to research it but I'm clueless :/

rose leaf
#

I only know the verhoven film, which I haven't watched enough, the 2? Sequels and a short lived TV series

cloud reef
#

Not the film lol

#

Let me pm you

rose leaf
#

Thought it wouldn't be

cloud reef
#

Why can't I pm you lol

rose leaf
#

If you think I can be helpful go nuts

#

Maybe it's my privacy settings

cloud reef
#

I can't send screenshots

proud heart
#

throw them into imgur and post a link

cloud reef
#

Sadly I can't. I'm on phone atm. Currently working

cloud reef
scenic canopy
#

robo cop? think

scenic canopy
proud heart
rose leaf
scenic canopy
#

if you already have the mods downloaded you can just add up the numbers? πŸ˜„

rose leaf
#

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

dusty walrus
#

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.

dusty walrus
rose leaf
dusty walrus
#

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.

rose leaf
#

If it works it doesn't matter and it's something that doesn't need detail. Again, really appreciated.

dusty walrus
# rose leaf If it works it doesn't matter and it's something that doesn't need detail. Again...

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

blazing needle
#

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"
cedar nacelle
#

arma 3 toolbox for blender will not install. any clue? thanks

sly skiff
#

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

nocturne basin
#

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

twilit canyon
#

@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

scenic canopy
#

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

dawn palm
#

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.

next prism
#

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

karmic niche
#

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 Β―_(ツ)_/Β―

glossy inlet
#

alternatively you an use a |

next prism
#

yeah, sorry, misinterperated the name of the channel

#

i apreciate your sarcasm though

glossy inlet
dawn palm
#

πŸ‘

#

(Nicely dun)

peak musk
#

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

dawn palm
#

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.

twilit canyon
#

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

sly skiff
#

Have not encountered such

scenic canopy
#

if you can provide a repro I can look into it

twilit canyon
#

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

dawn palm
#
  1. 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.
gritty radish
#

has anybody managed to run .net5 as arma extension?

#

i saw another repo linked here, but it has been taken down

nocturne basin
#

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

gritty radish
#

well the project used an early alpha lib of CoreRT now part of net5

#

too bad, i was really counting on that πŸ˜„

nocturne basin
#

Feel free to dive in
The exports are important and hence you probably can get it to work again

gritty radish
#

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?

nocturne basin
#

Dllexport or something among those lines was the name of the tool you can use

#

What is the error sqf-vm gives?

gritty radish
#

only "loading library failed with error code '126'"

nocturne basin
#

Means sqf-vm could not find the module (the 126 is the windows error code returned)

gritty radish
#

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

nocturne basin
#

Nope
What is the file structure?

gritty radish
#

i just copy pasted into the vm root folder

nocturne basin
#

Where are you executing from?

gritty radish
#

started sqfvm.exe

#

should i start it from the comandline?

nocturne basin
#

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 πŸ€·β€β™‚οΈ

gritty radish
#

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"

nocturne basin
#

Lul Wut

#

Then that is for some reason broken, auto appending the _x64

#

Anyways, the 127 is pretty much export not found

gritty radish
#

i managed to get it working

#

for the future me or anyone else who wants to get .Net5 working for arma extensions:

  1. Use this code:
    https://github.com/arma3/RV-Extension-Examples/
    remove the UnmanagedCallersOnly.cs (it is already part of the framework)

  2. 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

  3. Add

<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<OutputType>Library</OutputType>

to a PropertyGroup

  1. You MUST use this flaggs to get the code compiled:
    dotnet publish /p:NativeLib=Shared /p:SelfContained=true -r win-x64 u can swap it for linux_x64

  2. the compiled code is now available under native

nocturne basin
#

Why not create a PR?
That is what the git repo is for πŸ˜‰

native kiln
#

+1 for a PR

gritty radish
#

i am trying to get callbacks working first

#

that one is the tricky part

gritty radish
#

i think i got this working too

young plaza
#

is there any tool to mass convert PBOs?

glossy inlet
#

convert from what to what

young plaza
#

Pbos to folders

glossy inlet
#

Well I'm making one meowsweats

#

batch script, drag&drop all on extractPbo maybe

scenic canopy
young plaza
#

oh nice

#

thanks guys

#

I was manually extracting the entirety of cup with pbomanager

#

one
by
one

gritty radish
glossy inlet
young plaza
#

dokanPbo?

glossy inlet
#

Virtual Pbo drive.
Give it paths to modfolder, it creates you a pdrive without unpacking anything

young plaza
#

I'd rather not make more than one pdrive

#

I'll try with extractpbo

dawn palm
#

@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'

young plaza
#

yeah I know just needed it for a terrain

young plaza
#

oh just found out about the AIO
considerably easier
also pretty professional looking
nice job

sly skiff
#

your envPath to the tools probably does not get written

#

you may beed to add that manually

young plaza
#

I know I've asked a lot about it today but how do I do that manually?

dawn palm
#
nice job```
thank you @grand kelp
plucky pilot
#

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.

scenic canopy
#

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

plucky pilot
#

I hadn't thought of that, but it's sound reasoning... at least if there's a big update.

craggy horizon
#

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.

sick verge
#

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)

craggy horizon
#

I'm setting up a public github action, so people would be able to setup CI/CD for their Arma mods.

sick verge
#

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 🀷

craggy horizon
#

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.

dawn palm
#

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.

craggy horizon
#

@dawn palm That's a fair point.

Personally I don't like GUIs. Really for two reasons:

  1. You can't always version control the settings used as input
  2. 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)

dawn palm
#

fair enuff and a clearly different useage, (headless)

craggy horizon
#

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.

glossy inlet
#

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

craggy horizon
#

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.

glossy inlet
#

thats probably easier than mine. Push music files -> rest done automatically.
How do you decide categories (musicClass) just by subfolder?

craggy horizon
#

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

dawn palm
#

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.

glossy inlet
#

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

#

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

dawn palm
#

😻

glossy inlet
glossy inlet
rancid anvil
dawn palm
#

@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

glossy inlet
#

Didn't know that the non DOS version does UI stuff despite it looking to only be DOS.
Are both always installed together?

dawn palm
#

always

#

(it's windoze that forces the gui() and ~gui() triggering. It has to start as a winmain then allocConsole)

glossy inlet
#

Good all fixed

#

Also Pbo properties now supported as ugly textbox because I just can't WinForms

dawn palm
#

yea, i use MFC foundation classes only for gui.

#

takes longer to code but,,,,

glossy inlet
#

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 πŸ˜„

dawn palm
#

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.

glossy inlet
twilit canyon
#

Hey mikero, have you had any reports of proxies not working on some obfuscated buildings? Cheers

sly skiff
#

sounds logical, obfuscation likely breaks the path to proxy

dawn palm
#

@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.

twilit canyon
#

and I am still having issues

#

also tried with map building

#

works fine unobfuscated

sly skiff
#

do you really need to obfuscate?

#

or do you need to use proxies?

dawn palm
#

@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.

twilit canyon
dawn palm
#

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)

twilit canyon
#

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

spring gust
#

if its the one I think it is

glossy inlet
#

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

spring gust
#

wonderful being able to open pbos like that would make stuff alot easier πŸ‘

#

esp being able to just copy paths

glossy inlet
#

Ah I guess thats a good right-click feature to just copy a files full path

glossy inlet
scenic canopy
#

import X; should work the same as class X; in terms of the preprocessor right?

#

oh right, need to support from as well πŸ™ˆ

glossy inlet
#

yeah basically exactly the same (atleast if you only parse and not binarize)

scenic canopy
#

yeah, should be resolved runtime

dawn palm
#

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

glossy inlet
#

People wouldn't use this in mission.sqm

#

this is purely intended for description.ext, which doesn't get binarized

dawn palm
#

ah duh!!!!!!

dawn palm
#

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

dawn palm
#

Look what's coming...

sly skiff
#

Which reminds me to make you that sample terrain!

dawn palm
#

yes yes yes please. I had a simple 64x64 'haggis island' which was more than i ever needed

#

(Credit Planck)

neon flax
dawn palm
#

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?

native kiln
#

What about CLI only environments?

scenic canopy
#

You can already set options via registry, ACE build script does that

native kiln
#

πŸ‘

dawn palm
#

@scenic canopy to the rescue

glossy inlet
#

PboExplorer also sets pboProject filepaths in registry, and then just opens it to have the filepaths preselected.
Basically same for Addon Builder too

dawn palm
#

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

glossy inlet
#

command line param to specify a json file (or whatever you like) with all the config

neon flax
#

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".

dawn palm
#

yes. understood. but, you can't have everything.

#

if a team want a multi tasking set of tools, i want a salary.