#arma3_tools

1 messages · Page 9 of 1

sly skiff
#

@haughty basalt

haughty basalt
sly skiff
rocky canyon
#

Does someone know what people are using to obfuscate their pbos ? Im afraid my 3D Models will get stolen once they are released

odd talon
#

I think the ebo format is only used by bi and the cdlc devs?

#

Could be wrong

karmic niche
#

You're right

rocky canyon
#

Not the ebo

#

3CB for example did something with their pbos that you cant even extract them for retextures

dawn palm
#

@rocky canyonpboproject obfuscates pbos with one time ciphers. ebos suffer from once the 'key' is known, ALL ebos are open. Wirh my tools it is physically impossible to recreate the p3d,
https://discord.gg/wMgbTKPU

rocky canyon
#

Thanks i try it out

glossy inlet
#

Last I tried mikeros obfuscation I could just double click open the pbo, navigate to the p3d and tadaa, there it is.

#

Obfuscation cannot encrypt anything. "one time ciphers" sounds very deceptive, because it sounds like encryption, which obfuscation isn't.
The game needs to be able to read it, which means the files are still in there, plain as day, and extractable.

Even if the pbo is mangled, or the p3d is actually encrypted, thieves also rip models straight from the GPU

dawn palm
#

sounds simple, but NONE of the p3d contents make any sense. the p3d itself cannot be reconstructed. the rvmats are scrambled paas less so but a nightmare to find the 'right' ones. Your reasoning above is correct, bu t it's now five years since anyone managed to make use of it.

#

I also want to add that the type of parasite I deal with hasn't the brains to do the hard work your method entails. Those that can, don't even bother copying other ppls work when they can make a better model from the get go. In all this time I have never seen an app that actually helps the thief defeat the protection i provide.

mortal relic
#

does anyone know how i can fix the steam error code: 2 thing that pops up when i try to update a mod via publisher?

loud sapphire
#

new update of binarize.exe is missing GFSDK_SSAO_d3d11.win32.dll

inland flare
#

Hotfix WIP, thanks for the report

loud sapphire
#

kk

#

is there a chnage log?

sly skiff
#

or even steam install issue

#

is your steam up to date?

#

try without vpn etc

#

or with vpn if you can

loud sapphire
#

looks fixed

inland flare
#

Great , thanks again for the report

#
Bohemia Interactive Forums

Page 4 of 4 - Tools Development Branch Changelog - posted in ARMA 3 - BI TOOLS - GENERAL: 20-08-2015Size: ~9 MB
 
FSM Editor
Added: New commands (Arma3 1.50 RC)
Added: New vanilla functions (Arma3 1.50 RC)
Terrain Processor
Added: A message box is displayed when trying to open a non existing project
Changed: Calculation of hectare areas for polygons is no longer needed (handled by TP)
Fixed: Trying to open a blank or non existing project lead to a CTD
Fixed: TP was requiring all shape...

#

Be aware: Note: Data binarized with this version can only be used with Arma 3 1.55 and newer

smoky halo
#

I had to restore my computer yesterday, and have just reinstalled Steam, Arma 3, Arma Samples, Arma Tools, Mikero Stuff, Blender, etc.

Everything is working except Arma Tools. The photo is the only error I see in the rpt, other than bulldozer x64 is not installed. I have verified the Tools on Steam, and it says that there is a file missing, downloads, but nothing changes.

Does anyone know if this error is on Steam end, Tools end, or my comp's end?

junior beacon
#

Did you do what it says?

smoky halo
#

Yes, I have attempted to start it from Steam many times, after validating, restarting, and redownloading.

smoky halo
junior beacon
#

Have you tried starting it direcly from the tool folder?

smoky halo
#

Yeah, same error. I am stumped so far.

smoky halo
#

Any Bohemia admins, I believe there might be an issue with Steam and the current Tools dowload for A3. I have tried everything I can think of. Steam will not download buldozer, and it corrupts most of the rest of the package.

glossy inlet
#

Bulldozer is Arma3 exe from your game folder

#

Don't use the "buldozer" that comes in A3 tools

smoky halo
#

I am not attempting to use either. The screenshot above shows the error. buldozer is missing, so it makes Steam and Mikero think it is not installed. Driving me crazy, lol. I have reinstalled the game, Tools, cleared Steam cache, manually erased all folders and duplicated. Same error every time.

#

It makes them act as if the entire Bis Tools is not there*

glossy inlet
#

In the A3 tools folder is the buldozer folder just empty or how is it missing?

smoky halo
#

There is no Buldozer folder, or exe. These are the only two Steam is downloading. The rpt is pointing to others, but they are not there.

smoky halo
sly skiff
#

(Arma tools that is)

smoky halo
sly skiff
#

It could refresh the download. Also you could try different preferred download location in steam settings

smoky halo
smoky halo
#

I uninstalled all games and tools, uninstalled Steam, manually deleted all folders, and did a fresh install of everything, and received the same error. That has to be on Steam, or the file from Bohemia, right?

sly skiff
#

at this point you can contact both BI tech support via the contact form on BI homepage

#

and Steam tech support as well as it could be some sort of steam error

dawn palm
#

a common problem can be that a3 tools might be unaware of you changing drives. (eg)

smoky halo
#

We will never know what it was, lol. I believe it was my machine. I restored the computer to out of the box settings, and started from scratch. Everything is working now. It had to be something with my hard drive after the previous format. Anyways, thanks for the help troubleshooting. That one was difficult 😵‍💫

wise forge
#

Is there a way to accept EULA via editing a text file or something?
My Arma 3 Tools just keep crash looping on trying to load the EULA window

#

Nvm, just opened Object Builder and accepted there, it didn't crash. Then I was able to launch the main thing normally

shrewd topaz
#

hi so i have squestion i want to re rexture a unifrom for my unit but the guides online all seem to pointo to tools that no longer exiist is there any modern tools or guides i could look at?

odd talon
#

What tools are they referring to?

#

All you need is an image editor such as photoshop, gimp etc.

A text editor such as visual studio code or notepad++

And the arma 3 tools on steam

I would recommend hemmt or pboproject though for packing

shrewd topaz
#

and tex2veiw as well

sly skiff
#

texview2 is part of arma 3 tools package on steam

frigid steppe
#

mate

#

can someone teach me how to actually setup Buldoze

#

literally all im getting is fatal error rtdl or some bs like that

#

i mount the drive

sly skiff
#

and follow it step by step, dont skip anything

onyx helm
#

What's the distribution requirement for Arma 3 Tools?

keen owl
#

You mean it's technical dependencies, like maybe VC Runtime version, etc? Or is this a #other_ip_topics type question?

onyx helm
#

Seems like the latter, yes. Thanks

old tide
#

Anyone had luck running Arma 3 Tools on linux properly? I'm having issues with End User License Agreement window issue where after pressing Yes I'm still getting a "You must agree the EULA before using Arma 3 tools"

pure sand
#

I felt like making a way to complex and optimized paramfile/config.cpp library

#

has been two days in the making

cold granite
#

How can I mount P drive on D drive?

jovial current
#

How can i make pbo's via shell?

#

i'm making a script to automate mass mission updating since my unit uses templates and such, and we wanted an easier way of updating all mission settings/scripts (files in the mission)

dawn palm
#

the mere existence of assets in the pbo's content folder(s) cause them to be packed into the pbo. the how what and why of what those settings do is not a pbo packing issue.

#

script alterations can be made using languages like python.

reef cave
#

Can Anyone help me with Blender And Arma tools pm me?

sly skiff
sly skiff
karmic niche
nocturne rain
#

would this be the correct place to ask questions about creating a new rcon tool?

jagged epoch
#

Anyone else having this issue? Moved to windows 11 recently so I reckon that might be playing a factor

dawn palm
#

dunno about the bis tools but no one has reported issues using pboroject for signing pbo (or any other bit of strangeness with win11). recommend you do a full re-install.

jagged epoch
#

Did already but no luck on that front, guess for now my best bet would be to look into pboproject

jagged epoch
sly skiff
jagged epoch
#

Yeah

dawn palm
#

did you remember to 'play' the tools once in order to set the registry?

glossy inlet
#

the best place on this discord server i suppose @nocturne rain

nocturne rain
#

great

#

so a friend is doing a school project and wants to create a basic rcon tool for arma in visual basic. He has managed to connect to an arma server fine if he hardcodes the checksum. but he cant seem to manage to generate the checksum on the fly.

#

any of you know if there is a more detailed spec out there? hes just looking formore details on how the CRC32 checksum should be generated

#

anyways. any advice will be appreciated

glossy inlet
#

i build an interface for that once.... But.. i see the code but i dont see my crc code :x

#

what crc is he generating?

#

or from what?.. should be the payload starting with the first 0x00 or 0x01

#

😄 i know i once build something to connect to battleye but i cant find my code ^^

nocturne rain
#

should i paste the code so you can see ? probably would explain it better 😄

glossy inlet
#

just found my code 😄

nocturne rain
#

oh really ? care to share your magic 😄

glossy inlet
#

well.. something of that... but yeah wouldt hurt if youd show me yours

glossy inlet
dawn palm
#

pboProject also has a cli to do that.

dense trail
#

hello where i can have malden 2035 open source

sly skiff
rancid lake
#

Is there any tool to unbinarize config.bin file ? I want to implement new features in my audio engine in c# and i need to parse every config.bin to recreate mods topology in order to find requested audio file

odd talon
#

Mikeros tools have the ability to convert them back into a config.cpp

#

Hemtt probs does too

dense cove
#

BankRev from Arma 3 Tools

#

But you can always use in-game config viewer

rancid lake
rancid lake
odd talon
#

Mikeros was originally cli based

#

And still has that functionality

rancid lake
dense cove
scenic canopy
rancid lake
#

Anyway i found the solution. CfgConvert does the job

dense cove
dense cove
rancid lake
dense cove
#

exportConfig can export all CfgPatches without extract all config or PBO?

rancid lake
dense cove
#

I'm asking too much because it seems you're doing something redundant or overcomplex. I cannot even make a good theory that why you have to, maybe I should shut myself

scenic canopy
#

You can find the pboprefix using sqf, then you only need to find pbo with that prefix instead of parsing the config files outside the engine

rancid lake
# dense cove I'm asking too much because it seems you're doing something redundant or overcom...

For example, i need to find "A3\Sounds_F\vehicles\boat\SDV\SDV_engine_2" the logic would be to do in my A3 folder parse Addon folder and then open Sounds_F.pbo . The problem is Sounds_F.pbo doesn't contain any directory named "'vehicles". Some addons have CfgPatches with addonRoot inside which tells the engine that any subfolder is owned by another addon. I need to find A3 pbo which has a "vehicles" folder for Sounds_F. But its less redundant than you think because at game start i parse and open every pbo to get their architecture. so i already know where every file is (it just takes 3 seconds). I just need to parse every config file at the same time in order to write the correct architecture

scenic canopy
#

Sounds like you want to read pboprefix property of pbos to find the correct one faster

rancid lake
scenic canopy
rancid lake
#

When Arma 3 Tools installs, does it write anything in the registry ? Can i just include CfgConvert in my dll or do i need to ask the user the path to Arma 3 Tools ?

rancid lake
onyx helm
#

Google up the EULA, it says you cannot distribute the tools. Arma 3 Tools writes to the registry in HKEY_CURRENT_USER\SOFTWARE\Bohemia Interactive\Arma 3 Tools on the first run of the tools program

#

You can get the path from there. Didn't read the entire convo

rancid lake
onyx helm
#

Also, for future reference, you can set BINtoCPP.bat as the default .bin file association so you only need to double click such file to convert it to cpp

glossy inlet
# rancid lake Hmm, very interesting, i never checked this. I will go take a look and see if it...

You have a in-game file path to a audio file, and want to read it out of the PBO?

I think you are looking for something like this
https://github.com/WolfCorps/TacControl/blob/master/src/ArmaExt/src/Modules/ModuleImageDirectory.cpp#L16

Automatically finds all PBO's loaded by Arma (In an external tool you won't know that, so you'd probably find all PBO's yourself)
Scan all pbo prefixes.

Then when you have a in-game filepath to an audio file, You can find which PBO its in, and read it out
https://github.com/WolfCorps/TacControl/blob/master/src/ArmaExt/src/Modules/ModuleImageDirectory.cpp#L70

Just this is C++ code not C#.
But if you have a C# PBO reading library, you could do the same

glossy inlet
rancid lake
rancid lake
steady birch
#

Hey guys, I am having an issue depbo'ing files. Some files are unpack with zero bytes or omitted, which I only found out when I have tried the repacked file. I've used Mikero's latest free tools, Extractpbo.exe is dated 2024, cpbo and depbo. All produces the same errors of missing or zero byte files for the same PBOs.

Can anyone recommend any udpated free PBO tools or should I stick with the default ARMA 3 tools?

Edit - someone can test against these mission pbo files which when extracted, it would show the following files as zero bytes:

http://co10esc.anzp.de

functions folder

AI

fn_Loiter.sqf
fn_resumeTask.sqf
fn_SeekShelter.sqf

SearchLeader\fn_onPlayerSpotted.sqf

and Revive\functions\HSC\fn_getKeyState.sqf

All are working in the original packed PBO's.

sly skiff
steady birch
#

I found the problem... In my haste to test the mission, I found the source code on github. For some reason, those files are all zero bytes on github so the master has been corrupted or deleted. My apologies to everyone for the warning.

Will advise the dev team about this...

hexed acorn
#

Hi! Sorry of this is the wrong channel for this.

I'm trying my hand at modding and am faltering at the very first steps of it, that being setting up the P: Drive.

Long story short, Installed ARMA 3, Installed ARMA 3 Tools, set the directory paths and unticked "use default", then proceeded to attempt to mount the drive.

My computer asks me for admin permissions and one of two things happens. If I deny it, WorkDrive throws up an error stating that the operation was cancelled by the user.
If I give it admin permission, which is not the correct thing to do anyway according to a thread on the BI forums, I get a message proclaiming that the install seems to be corrupted. Verifying via Steam does not resolve this, and just sends me in circles repeatedly trying to mount and then verifying and then trying to mount...

Most curiously of all, despite these errors, an empty P: drive still appears on my computer, and is correctly pathed to where it is supposed to be in preferences.
Even more curious, un-mounting the P: drive to try and reset things runs into the same admin permissions problem, with the addition that the option in Tools disappears, but the drive remains. The only way I got rid of it was by uninstalling ARMA 3 Tools and then running [subst p: /d] via the windows command line, except even that isn't working reliably anymore with cmd now declaring P: to be an invalid parameter.

I've checked file integrity of A3 Tools and of ARMA 3 itself. Didn't work.
I've reinstalled A3 Tools multiple times. Didn't work.
I've checked the user read/write permissions on all relevant folders. Makes no difference.

tl;dr, Can't mount P: drive, can't cleanly and reliably un-mount P: drive.

jovial elbow
# hexed acorn Hi! Sorry of this is the wrong channel for this. I'm trying my hand at modding...

Assuming that it isn't completely mucked up, restarting your computer will clean up the P: drive

You shouldn't be mounting the P: drive to the Arma 3 tools directory
Probably should be mounting to a separate folder on whatever drive you want your modding files on
The path for the "Mount the Project Drive" button is determined by the path you give in Preferences > Options > Path to your P Drive

That error in the first image is identical to when I tried it and denied the windows UAC prompt, probably expected since you denied access

I think I mounted mine the first time using Mikero's tools, I now just use Arma 3 tools
This has the instructions if you want to set it up as a batch file: https://pmc.editing.wiki/doku.php?id=arma3:tools:setup-p-drive

Arma3P.cmd to unpack from Mikero's tools is worthwhile. It takes a while, but makes referencing stuff much faster (and is needed for pboProject iirc)
(Select N for the dubbing files unless you actually need them, it just takes longer if you don't need those files)

hexed acorn
# jovial elbow Assuming that it isn't completely mucked up, restarting your computer will clean...

Thanks for the response!

My P: drive isn‘t mapped into the Tools directory. „Arma 3 Tools [WorkDrive]“ is a separate folder on the same drive as the game and tools, with the path for the work drive is mapped to it in preferences.
I‘m using the instructions in Hoverguy‘s thread as a guideline to try and eliminate user error as the cause of whatever is going on with me. - https://forums.bohemia.net/forums/topic/190353-howto-work-drive-setup-bulldozer/ -

I‘ll try the batch file thing first tomorrow after work, then Mikero‘s, depending on what works, although using the AOI for his tools has been giving me it‘s own problems. Problem for later.

jovial elbow
hexed acorn
#

I’ve heard about HEMTT before. Might give it a try once I’m properly set up. Alright, I‘ll get back to you tomorrow.

hexed acorn
#

Update: Still not getting anywhere. Batch file isn't creating a P: drive despite giving it a path Disregard, took a couple refreshes for it to show up. Mikero's tools isn't cooperating. Running A3Pcmd just gets me an error about the tools not being set in registry.

I'm going to get back to this on the weekend, because the few hours I get in the week aren't enough for proper troubleshooting.

#

A P: drive has appeared, and it indeed mirrors the contents of the path set in the batch file. Despite apparently running into errors no man has ever run into before, I think I might have set up a P: drive. Is this complete, and can I move on to getting Buldozer and co. installed?

jovial elbow
# hexed acorn A P: drive has appeared, and it indeed mirrors the contents of the path set in t...

Should be fine

For fixing the Mikero's tools registry stuff, the easiest would be to just run and configure the stuff in the AIO installer
I can find the registry keys if you want to fix it manually

For buldozer, the recommendation is to just use the path to your Arma 3, since it's the same executable with some launch parameters
This works for the setup: https://pmc.editing.wiki/doku.php?id=arma3:tools:buldozer
(The warning about 32-bit is irrelevant now as far as I know, mine was working fine with the 64-bit, and I'm not even certain how much longer there will be a 32-bit executable)

jovial elbow
hexed acorn
#

Alright, sounds goods. Fingers crossed this is working as intended and I‘m not building myself a tower of jank.

I‘ll get back to you on the registry keys if I’m getting nowhere by messing around with the AOI by myself.

jovial elbow
#

@dawn palm What step actually sets the registry keys?
I can send him the registry keys from my computer, but that shouldn't be needed to get your tools working

sly skiff
#

and install them with the all in one installer

hexed acorn
# sly skiff run arma3p from mikeros tools

Already did. Tried to again today via the tools installed by the AOI, still unfortunately getting the same results from running Arma3P. Arma3Pdebug throws the same error.

Good news though, my P: drive itself still exists. Setting a batch file to map P on start-up, and getting Windows to run it on start-up appears to be doing good.

sly skiff
#

@dawn palm do you have any advice on how to debug this?

hexed acorn
#

Something on my setup is definitely messing with it, since the AOI-Installer also never seems to acknowledge that my tools are up to date. It tells me it needs to update the tools, then updates (requiring admin permissions for some reason), then tells me it needs to update the tools...

dawn palm
#

contact stickie..... moment

dense seal
#

Is there any way to use the tools in linux? I can't accept the license agreement when I use WINE

#

:(

dawn palm
#

my tools are linux based

dense seal
#

I mean the BI ones sorry

#

Trying to update a workshop mod

dawn palm
#

@dense seal , apologies. i assumed you meant addon builder and it's friends, better to be more specific.

dense seal
scenic canopy
dense seal
#

Nice to know but that also seems horrendous

glossy inlet
#

Launcher works in Proton, I don't see why Publisher wouldn't work too?

#

Maybe not wine itself, but proton

#

I wonder if we could set up from steam side, to launch tools in proton

scenic canopy
#

Proton should be default since June for anything that does not have native Linux binary on steam

#

Maybe not for tools? And if not you can always opt in to use it in app options

#

Can you accept the license if steam connection isn’t working due to wine isolation?

dense seal
#

It launches then immediately closes/crashes

#

Oh wait publisher is working now, I just can't open A3Tools(?)

glossy inlet
#

Only thing I tried is Launcher.
And Publisher is the same codebase so I expect that to work.

The A3Tools main window is some visual basic mess that I don't want to touch 😄

dense seal
dense seal
#

@glossy inlet do you know of any pbo manager for linux perchance?

scenic canopy
#

what's a pbo manager? extract? pack?

dawn palm
#

our tools have makepbo and extractpbo. we have no guis

#

and even if we did, which desktop would you suggest we write it for?

glossy inlet
dense seal
dawn palm
#

then you will fail in your modding adventure.

keen mantle
slender flame
rough grove
#

https://paa.hemtt.dev/

Convert your images to and from PAA in the browser, fully offline. Up to 8x faster on large images compared to the current leading brand.

rancid lake
#

The c# algorithm to decode wss sounds cannot decode this sound ⁨"A3\Sounds_F\vehicles2\soft\shared\add_layers\Rain_01_EXT"

dawn palm
#

my tools mark it as stereo, compressed, bytes with an unusual sample rate.

rancid lake
#

if i'm correct, the provided c# algorithm can only decode mono 16bits wav files

keen owl
rancid lake
#

When i try to decode Rain_01_EXT, i get a ⁨System.OverflowException : 'Negating the minimum value of a twos complement number is invalid.'⁩ at ⁨c# double asFloat = Math.Abs(srcSample) / 28.12574042515172;

keen owl
dawn palm
#

why div 28? what sort of witchery is that?

rancid lake
dawn palm
#

the sounds in that folder play quite normally, since floats aren't used in pcm data.those specific sounds range between rain and thunder. it is a mystery to me what that function is for. in the case of wss the pcm data is normal, stereo, nyble or byte compressed. All of them decompess to 16 bit wav format. whoever dreamed up this mess it woulld be worth theirtime to read the well documented biki.

#

bis themselves moved away from their roll-your-own wss formats to plain ogg for arrowhead and early a3. They will still be using ogg for music, and what seems a reversion to nyble format for beeps and clicks. nyble consumes the smallest data pack and is more than enough for the items.

glossy inlet
# rancid lake That's propably bohemia way to encrypt their song ^^ They are shifting the sampl...

Nothing is encrypted. Its just a mapping via a lookup table.
currentSample = previousSample + lookupTable[(SByte)srcSample + 127]
⁨```c++
int _delta[255];
MaxDelta=32768;
MaxDeltaInv=127;
double base=pow(MaxDelta,1.0f/static_cast<float>(MaxDeltaInv));
_delta[MaxDeltaInv]=0;
for( i=1; i<=MaxDeltaInv; i++ )
{
// / -1.084618362^-x for x<0 (-128 to -1)
// f(x)= { 0 for x=0 (0)
// \ 1.084618362^x for x>0 (1 to 127)
int v=toInt(pow(base,i));
_delta[MaxDeltaInv+i]=+v;
_delta[MaxDeltaInv-i]=-v;
}


I can't explain the witchery with the divide by 28 either.
That is apparently a somewhat convoluted way of live-generating the lookup table values, but in a different way?
#

I assume that code there, was reverse engineered from the WavToWSS tool shipped in Arma 3 tools.
Which is/was (we removed it) a 3rd party tool, made by a community member in the early 2000's, which did not adhere to the "standard" and actually did the decoding wrongly.
I remember that also did not use a lookup table and tried to calculate the delta for every sample, which made it much slower at processing files too. And it also did not support stereo, which the sample code on wiki also doesn't, that's more indication that its the same thing.

The Delta4 and Delta8 compression actually works the same way. So the "Nibble" (Someone made up that name for Delta4) c++ code listed there, with the lookup table.
Should look the same for the Byte (Delta8) compression, only that the byte one has a bigger table.

bright gull
rough grove
untold cloak
#

im searching for a working download for the poseidon tools. any idea?

untold cloak
#

i found an alternative, thank you

nimble island
#

Just to be curious: I am pretty sure most dedicated server owners have some automation to push their PBO on the server. My goal is to do it with a DLL triggered on the export mission event. Don't need git versioning at this step, cause I can deploy multiple times for testing purposes. How you guys do?

keen owl
#

No? Most dedicated server has no their PBO and if they did it would surely follow the normal mod update path (steam workshop / or FTP push or ....)
Testing on your "production"/playing server seems subpar, especially if it is a persistent=1 kinda server since it would affect everyone else there and/or require them to keep up.
I always just tested by starting a dedicated server locally and connecting to it.

sly skiff
#

please no crossposting

onyx helm
#

For missions, I get my PBO through PBO Manager and just upload it via FTP when I need it

#

P.S. you can upload missions while the server is running but you can't overwrite existing files

#

Load into a mission and get back to the mission screen to select the newly uploaded mission without restarting the server

glossy inlet
red brook
#

Hello everyone
is there any way to set a 2048 limit for pal2pace? or maybe there is an alternative?
pal2pace -size=512 resize to 512px
pal2pace -size=1024 resize to 1024px
pal2pace -size=2048 resize to 1024px

PS
so far, the working method is:

  1. Convert paa to png
  2. Change the size via image magick
  3. Convert png to paa
nimble island
# keen owl No? Most dedicated server has no *their PBO* and if they did it would surely fol...

I have many server instances, some for public games, other for internal team activities or dev/testing. I dunno how to start a local dedicated server on the same computer.
For sure, it is a topic for people who make missions themselves. I always considered the workshop as a way to share your missions with someone else, not to push them to your own box, because it is so much additional work for nothing.

nimble island
keen owl
# nimble island I have many server instances, some for public games, other for internal team act...

I didn't mean 'no' as in it not being a topic for mission makers, just that most don't use automation to push the pbo to their server (since a "proper" release is often at most weekly for most groups). Of course if you need to run a dedicated frequently and can't do it locally I guess your situation makes sense; I just think you are in the minority on that.

For running a dedicated locally I just use a .bat file:

set MODS=
rem CBA
set MODS=%MODS%;!Workshop\@CBA_A3
rem .... more mods........

set BASICS=-noLogs -noSplash -world=empty -skipIntro -noLand -noSound -config=config.txt
arma3server_x64.exe %BASICS% %PROFILE% "-mod=%MODS"

-noLogs might not be something you want if you need .rpt logs to debug.

nimble island
#

Will try soon thanks 😊

nimble island
#

Works perfectly, thank you, I generated a power shell script that parses HTML preset + links to start the local instance in one click.

keen mantle
#

validated files...

#

dev branch

vague shard
#

@keen mantle make sure to start A3 tool laucher once to accept stuff and make it write path to reg

nimble island
#

ArmA-TvT-Units 1.0.0-rc1 is available for anyone interested in automated loadouts management.
Full doc available online: https://docs.google.com/document/d/1bLKKTYYBXK4B6-Xb_abe8jUL_LPy2GR0ybta7RbkJyA/edit?usp=sharing
The tool goal in one screen:

red brook
tame anvil
#

I'm not sure what the best channel is to use for extension development. I'm using extensions as a bit of a learning experience to get hands on with some C++.

My build system uses CMake with MinGW's G++ as the compiler.

If I publish a DLL with the following code then it works fine in Arma when called via callExtension

__declspec(dllexport) void __stdcall RVExtension(char *output, unsigned int outputSize, const char *function) {
    std::strncpy(output, function, outputSize - 1);
}

However, as soon as I introduce std::stringstream then the extension no longer works as it returns an empty string

__declspec(dllexport) void __stdcall RVExtension(char *output, unsigned int outputSize, const char *function) {
    std::stringstream ss;
    ss << "Returning from " << function;

    std::string s = ss.str();
    std::strncpy(output, s.c_str(), outputSize - 1);
}

The RPT contains the following entry:

15:00:59 Call extension 'test_extension' could not be loaded: The specified module could not be found.

I've checked the compiled DLL in "Dependencies" and can see that there are no missing or unresolved dependencies, so they should be loadable.

Are there any caveats with using GCC through MinGW?

glossy inlet
#

I'm not sure what the best channel is to use for extension development.
This one, historically

#

MinGW's G++
That's a... weird choice 😄

#

Are there any caveats with using GCC through MinGW?
Yes, if you're not statically compiling, like shown in your screenshots, you need the extra dll's.
And they need to be either next to your dll or in the Arma game folder, I'd think its the game folder

#

easiest fix, compile static runtime library

tame anvil
#

I'm happy to change if there's a better alternative. I installed MinGW a few years back and stuck with it

glossy inlet
#

Most people on windows use Visual Studio (as does the Game itself)

karmic niche
#

Visual Studio is free nowadays

tame anvil
#

Ah, in that case I am using CLion, but I could install MSVC

karmic niche
#

Isn't CLion making use of MSVC to build anyway?

tame anvil
#

Not if I've explicitly told it to use MinGW 😂

#

I can easily change that

glossy inlet
#

You can use CLion with MSVC

#

But I don't know how you tell CMake to use it.

karmic niche
#

Ah, ok. My experience with building extensions was to make use of CMake and then it would compile using MSVC Build Tools on Windows and G++ on Linux, reusing the same Makefile

glossy inlet
#

set_property(TARGET targetName PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
This would be used for MSVC to set static builld.

You can also set static build with MinGW someway, but you'd have to figure out how.
Might be as simple as -static parameter

tame anvil
#

It's very easy - you can add a toolchain (MinGW/MSVC) and then link your CLion CMake profile to that toolchain. Then it populates the compiler arguments

I'll test the static compilation now. I was compiling with shared originally

karmic niche
#

Call extension 'test_extension' could not be loaded: The specified module could not be found.
It's also a good thing to write a small executable that mimics Arma loading of the DLLs if you want to troubleshoot (or do some integration tests). This way you can check if your DLL may be loaded using LoadLibrary and iterate faster than you would do, while rerunning Arma each time

#

Btw statically compiling makes your dll more likely to be able to be run on other people's machines so it's a good choice usually (even if shared already works on your machine)

glossy inlet
#

Btw is there a way to get more information out of LoadLibrary than just "The specified module could not be found." ?
Is there a way to actually get the name of the missed one?

karmic niche
#

Not that I know of. I've always used DependenciesGUI.exe for that 🙁

scenic canopy
keen owl
#

I mean shouldn't really mix c runtimes at all, IMO. It will work here because the integration is C like and there are no-cross free's etc..

karmic niche
#

What you could be using would be gflags to enable uhh... "windows debug information" while loading, I think and then run the thing in the Debugger

glossy inlet
#

I don't know of a way so there very well might not be one

#

I could probably read ETW events... ugh no

karmic niche
# glossy inlet I mean if Arma could detect it in code

If your library requires another one to be loaded and that library is missing, you won't be able to know that, I think.
The only thing that you'll be able to see is the trace log in the debug output, if you enable it in gflags

keen owl
#

On Windows I am generally happy using Ninja as the generator and MSVC cl as the compiler.
The only option, don't recall if that has changed, you could have problems running debug extensions with I think it was stack protectors (/GS maybe) ?

karmic niche
#

"Show Loader Snaps"

scenic canopy
#

I’ve spent too much time with cmake internals lately ban

glossy inlet
#

hm..

#

LoadLibrary doesn't passs any flags.
We could pass LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR so that it loads dependencies that are lying next to the DLL.
Otherwise I think it'd only load dependencies from the main game folder

tame anvil
#

I've switched CLion to MSVC and all is well. DependenciesGUI shows the VC Runtime and the extension works when using std::stringstream

Out of interest, what is it about MinGW that makes it a weird choice? Is it simply the combination of Windows + MinGW with GCC?

keen owl
#

It is essentially a GCC on Windows, and it uses "Linux-like" wrapping of the OS. The second thing is the game is likely using MSVC CRT where as MingW uses its own CRT and besides simple use cases (which admittedly Arma extension are in this matter) mixing C runtimes is a no-go.

karmic niche
#

LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR
This would actually make lots of sense, so that mods containing extensions can be self-contained, without "copy these to the main directory" directions (do any mods actually do that?)

glossy inlet
tame anvil
glossy inlet
keen owl
#

Right not to load extension it searches all addon folders until finds a matching name and loads that?

glossy inlet
#

Extension itself is handled by game.
Dependencies of extension is not

keen owl
#

Sure, but it on a callextension it searches all addon folders?

glossy inlet
#

All mod folders

karmic niche
keen owl
#

Since LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR is only for the loading of that particular "root extension dll" (and its extensions) I guess it makes sense to allow.

glossy inlet
#

But I'm not sure if its actually needed, I don't remember anyyone evver requesting that

keen owl
#

Extensions are closing on 15 years? People have been managing without so far.

karmic niche
keen owl
#

Does extDB3, ACE's dlls, and don't think CBA has any? cover the "majority" uses?

karmic niche
#

I'd have to double-check whether my extension may make use of that flag, once the 32bit support is dropped or not.
I've used RPATH on linux to obtain the same effect, and a separate DLL just to set the loading path on Windows, prior to loading Python, but I'm not fully sure if I'll be able to drop it, even though I won't need to check if I want my dependencies from the 32bit or 64bit folder, anymore 🤔

#

It's been years since I've touched that code and don't remember if there is anything else that's needed to be worked around (so I would have to keep the two stage loading anyway)

glossy inlet
keen owl
#

Integrating with ETW could be overkill, yeah. Maybe this matter will better be resolved by a note on BIKI on dynamic library loading behavior. I guess there might even be small variances since search is different on Linux?

orchid shadow
#

dayum

#

visual basic

rancid lake
#

Is there any chance i can open an ebo file ? I'd like to be able to read their files with my audio engine

#

If its not possible, well so be it, but for example, on the passive sonar i'm developping, you wouldn't hear them

sly skiff
#

but if you explain what you might need to know may be the info can be provided?

#

like is it just file paths

rancid lake
#

I need to read the ebo, to find audio files and play them but i think the ebo format was made intentionally so we cannot read them

sly skiff
#

is it external thing?

rancid lake
#

yes for my audio engine ( a c# dll)

sly skiff
#

right

#

then no dont think thats possible

rancid lake
#

that's what i expected ^^

sly skiff
#

@glossy inlet probably can verify my assumption here

gaunt raft
#

Hello everyone! I'm started studying the Arma 3 Tools and i have a lot of questions and issues. Is anybody can help me with that? (Im not good in English)

dense cove
#

Just ask.

gaunt raft
#

I dont understand how to add my model in arma 3. I got .p3d but how to add config for thist and another i dont understand

#

I tried to read documentation but nothing

dense cove
#

It's not really something we can explain in minutes. What exactly you're trying to and which part you stuck. If you need an assistance to write a working config for a prop, say so, if you need an assistance to pack into a PBO, say so

gaunt raft
#

I think i need all of that

#

))

dense cove
#

No time to tell especially I just started my shift. You still need to tell what you got so far and the ultimate goal

gaunt raft
#

Ok, I'll tell u from beginning.

I trying to create modular buildings for Arma 3. Just now i have 3d model ready and i want to chek how it will work in game. What i can? I can export my 3d model like .p3d and import it in the Arma 3 object builder. I guess that's all I can do.

I want to understand and learn to do this on my own(adding 3d models into Arma 3)

vague shard
#

@gaunt raft what type? prop/object, weapon, vehicle, gear?

gaunt raft
nocturne rain
#

ya he has actualy got it going aswell

rancid lake
#

Will there be a support for .Net on arma 3 ?

#

So far we can only import .Net Framework dlls

#

Many libraries are only available on .NET

keen owl
#

Are you talking about extensions?
Pretty sure Arma doesn't care at that level.

You might have DLL loading issues if your dll requires others

rancid lake
keen owl
#

What mean cannot? A very simple DLL is not even. Net framework or not, it is just CLR, and not even that because the interface is marshaled by dlllexport as C I believe

karmic niche
karmic niche
rancid lake
#

This is not the first time i code a DLL for Arma 3, i know how to make a dll for Arma 3. Since 2022 i'm saying .NET is not working on arma 3, you need to use .NET Framework

karmic niche
rancid lake
karmic niche
#

Again: there IS already support for .NET

rancid lake
karmic niche
#

If it doesn't work, file a ticket for that and the situation will be fixed

karmic niche
#

The fact that a web link doesn't work doesn't impact whether a programming language/framework is supported or not

#

Have you tried with a simple program that manually loads your DLL and tries calling your functions?
I suggest you write a simple program that LoadLibraryies your DLL and tries calling your functions. That or use KillzoneKid's code that's on his blog

#

Chances are that you simply forgot about something and you can fix that quite easily, without even involving the devs

rancid lake
#

KillzoneKid has made a c# code ?

karmic niche
#

This is not the first time i code a DLL for Arma 3, i know how to make a dll for Arma 3. Since 2022 i'm saying .NET is not working on arma 3, you need to use .NET Framework
Okay, it would help if you gave a bit more information: does this crash with a simple "hello world" program? If not, then when does it start crashing? If you say that you know how to make dlls for Arma, then what exactly is the change that makes Arma crash? What is the code where it's still working?
Do you require some additional dependencies that may not be available at runtime, etc?
I tried opening your mdmp, but my guess is that without files available to the devs, there is no chance of helping you, based on the mdmp alone

karmic niche
#

(after all, A3 is not in C# either)

keen owl
#

Hmm, they did change the host and clr init in .net so actually might need to be aot compiled or bootstrapped some other way

#

A separate LoadLibrary program would have the same issue

#

In that case

karmic niche
#

i'm pretty sure i haven't forotten anything
Been there, done that 😉
First, try creating a REALLY minimal "hello world" example in .NET and try to load that into Arma. At this point, that shouldn't take you more than 15 minutes of your life, so that's really something that you can afford checking.
If that doesn't work, then there really is a problem with .NET support.
Otherwise, make incremental changes to your code to see when exactly things stop working for you.

keen owl
#

Yeah I might try tomorrow. But due to the internal deployment differences in .net the entire example c# is basically invalid in modern .net

#

Even with nativeaot the marshalling has to be done differently

karmic niche
keen owl
#

@rancid lake Following works for me with .NET 9.0

// WARNING: For 32  bit we might need CallConvStdcall on the methods. (and different names)
public unsafe class Extension
{
    [UnmanagedCallersOnly(EntryPoint = "RVExtensionVersion")]
    public static void RVExtensionVersion(byte* output, uint outputSize)
    {
        // Assumes outputSize > len(version)
        ReadOnlySpan<byte> version = "Modern-Dotnet v0.1"u8;
        fixed (byte* src = version)
        {
            Buffer.MemoryCopy(src, output, outputSize - 1, version.Length);
        }
        output[version.Length] = 0;
    }

    [UnmanagedCallersOnly(EntryPoint = "RVExtension")]
    public static void RVExtension(byte* output, uint outputSize, byte* function)
    {
        int i = 0;
        for (byte c = function[i]; c != 0 && i < outputSize; ++i)
        {
            output[i] = function[i];
        }
        output[i] = 0;
    }
}

Above updated with proper spelling of "RV". With the following csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <PublishAot>true</PublishAot>
    <SelfContained>true</SelfContained>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <NativeLib>Shared</NativeLib>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
    <AssemblyName>modern_dotnet_x64</AssemblyName>
  </PropertyGroup>
</Project>

I only made 64 bit.

#

Well mostly work: "modern_dotnet" callExtension "hello world" echoes the message back.
But my .rpt log says: ... @modern_dotnet\modern_dotnet_x64.dll) [1.0.0.0] [1.0.0.0]
I thought it was supposed to say my version string from RvExtensionVersion.

keen owl
#

WTF. The versions shown are [File Version] and [ProductVersion]. Where is RvExtensionVersion supposed to appear?

rancid lake
rancid lake
#

Actually the fact that it is not working is very weird

keen owl
#

Not sure what to say. I built using dotnet publish -c Release and grabbed it from bin\release\win64\publish not nativeaot or parent folder which also had dll but missing exports.

And then I just forced it to load via @ mod option in launcher since the launcher refused to otherwise add a folder without pbo as mod

torpid valve
#

do you guys use the Giesecke thing or the 3F DllExport? you should use the latter for .NET
Giesecke is for .NET Framework

keen owl
#

Well I used neither as you can see above. But my guess is Giesek won't world unless you host the CLR somehow

torpid valve
#

yeah you should use the 3F one

rancid lake
keen owl
rancid lake
keen owl
#

Sure, but doesn't that make it annoying to turn off and on if you have to play on other servers with BattlEye?

#

Well I guess it just refuses to load it so maybe not.

rancid lake
#

Well, i launch the game like 50 time per day so i don't care about turning battleye on and off ^^

scenic canopy
nocturne basin
karmic niche
glossy inlet
glossy inlet
glossy inlet
glossy inlet
#

RVExtensionVersion != RvExtensionVersion

keen owl
#

😅

#

Well mystery resolved. Thx

rancid lake
#

I tested your code but in anyway i cant have it working ```using System.Runtime.InteropServices;
using System.Text;
using static System.Net.Mime.MediaTypeNames;

namespace ArmaTestDLL
{
public unsafe class Extension
{
[UnmanagedCallersOnly(EntryPoint = "RvExtensionVersion")]
public static void RvExtensionVersion(byte* output, uint outputSize)
{
// Assumes outputSize > len(version)
ReadOnlySpan<byte> version = "Modern-Dotnet v0.1"u8;
fixed (byte* src = version)
{
Buffer.MemoryCopy(src, output, outputSize - 1, version.Length);
}
output[version.Length] = 0;
}

    [UnmanagedCallersOnly(EntryPoint = "RvExtension")]
    public static void RvExtension(byte* output, uint outputSize, byte* function)
    {
        int i = 0;
        for (byte c = function[i]; c != 0 && i < outputSize; ++i)
        {
            output[i] = function[i];
        }
        output[i] = 0;
    }
}

}```

#

Arma 3 is obviously trying to load the dll because i can't delete it after without closing the game but i don't get anything in the RPT file

#
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <SelfContained>true</SelfContained>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <Platforms>AnyCPU;x64</Platforms>
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <IsAotCompatible>True</IsAotCompatible>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <IsAotCompatible>True</IsAotCompatible>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <DefineConstants>$(DefineConstants);WIN64</DefineConstants>
    <IsAotCompatible>True</IsAotCompatible>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <DefineConstants>$(DefineConstants);WIN64</DefineConstants>
    <IsAotCompatible>True</IsAotCompatible>
  </PropertyGroup>
</Project>```
#

The dll is generated with Release and x64 parameters

#

There is no reason it's working for you and not for me, i'm probably doing something wrong

glossy inlet
#

Same thing as above

#

its "RV" not "Rv"

rancid lake
# glossy inlet its "RV" not "Rv"

I still have the same result with this ```using System.Runtime.InteropServices;
using System.Text;
using static System.Net.Mime.MediaTypeNames;

namespace ArmaTestDLL
{
public unsafe class Extension
{
[UnmanagedCallersOnly(EntryPoint = "RVExtensionVersion")]
public static void RVExtensionVersion(byte* output, uint outputSize)
{
// Assumes outputSize > len(version)
ReadOnlySpan<byte> version = "Modern-Dotnet v0.1"u8;
fixed (byte* src = version)
{
Buffer.MemoryCopy(src, output, outputSize - 1, version.Length);
}
output[version.Length] = 0;
}

    [UnmanagedCallersOnly(EntryPoint = "RVExtension")]
    public static void RVExtension(byte* output, uint outputSize, byte* function)
    {
        int i = 0;
        for (byte c = function[i]; c != 0 && i < outputSize; ++i)
        {
            output[i] = function[i];
        }
        output[i] = 0;
    }
}

}```

glossy inlet
#

Try The RVExtensionArgs variant.
The script command, gives a error code that might tell in more detail what's wrong

keen owl
#

I'm not a .NET guy but don't you need <PublishAot>true</PublishAot> to force the aot compilation?

glossy inlet
#

Or send me the DLL and I'll tell you

rancid lake
keen owl
#

Also if you do dumpbin /exports your.dll (from visual studio command line) what does it say ?

#

PublishAot should be in .NET 7 and later.

keen owl
#

Is that all? Nothing is being exported then? Mine, with the version typo, looks like this:

  Section contains the following exports for modern_dotnet_x64.dll

    00000000 characteristics
    FFFFFFFF time date stamp
        0.00 version
           1 ordinal base
           3 number of functions
           3 number of names

    ordinal hint RVA      name

          1    0 00120410 DotNetRuntimeDebugHeader = DotNetRuntimeDebugHeader
          2    1 0003B5C0 RVExtension = RVExtension
          3    2 0003B530 RvExtensionVersion = RvExtensionVersion

  Summary

       29000 .data
        A000 .pdata
       55000 .rdata
        1000 .reloc
        1000 .rsrc
       CA000 .text
#

Are you compiling with <PublishAot> and grabbing specifically the one from inside the bin\Release\net8.0\win-x64\publish\ folder ?

rancid lake
#

yes i'm compiling with PublishAOT now, there is only one dll generated its the one at \ArmaTestDLL\bin\x64\Release\net8.0\win-x64

#

i tried .NET 9.0 yesterday but it didn't change anything

keen owl
#

Are you building or publishing? I have base folder, and publish and native.. The one in base has no exported symbols. The one in native and publish have.

rancid lake
#

let me try the dll to see if it works

#

And now the dll load perfectly, it answers back perfectly and the version is written properly in the rpt file

#

Huge thanks @keen owl i learned a lot these 2 days thanks to you 🙂

keen owl
#

Great you got it working. Hopefully any dependencies you run into are nativeaot compatible.

sullen wind
keen owl
#

Yeah, I don't know about modern .NET deployment model and the precise implications of build vs publish. Last time I wrote more than 300 lines of C# was in 2011, and I think .NET framework 3.5 was the newest.

tame anvil
#

Even unit test projects may require to be published if you're using a code coverage tool such as coverlet, and you're scanning code coverage outside of the standard dotnet test *.csproj because the DLLs for that dependency will be copied only during a publish.

rancid lake
rancid lake
tame anvil
#

For the reason I described 😅

Different things happen when building vs publishing

tame anvil
keen owl
#

Well it would work for the code present at compilation time, e.g. part of the assembly?

sullen wind
tame anvil
tame anvil
sullen wind
#

There are still some libraries that don’t fully work with AOT. I realized this pretty quickly while working on my "EdenOnline" extension, where objects are synced through the extension to the client UIs 😄

tame anvil
#

Out of interest, what made you settle with AoT for extensions? Was it the advantage of cutting out the JIT compiler?

In work I primarily develop systems that require reflection, such as ASP.NET Core, so I've not had much of an opportunity to work with AoT yet

glossy inlet
sullen wind
#

Simply performance, and combability. I tried to make it firs using JIt, and since arma is blocked and freezed when a extension call is made, you cannot make multiple calls in a short time using JIT

tame anvil
#

The joys of tasks and threads in C#. Thank god the SynchronizationContext is gone since that was the leading cause of unexpected deadlocks in the .NET Framework days.

I went with C++ for my first extension (hence me outing myself when I brought up MinGW recently) and created a very simple thread pool implementation to handle the background work

glossy inlet
#

and created a very simple thread pool implementation to handle the background work
C++ comes with its own thread pool since C++17, for parallel foreach and std::async. At least the MSVC standard library does use it. MinGW one might not.

tame anvil
#

I've heard of std::async but decided to do my own anyway for the sake of learning a bit more. With async/await in C# it has been a while since I've worked with threads

#

I am also using MSVC now. I learned my lesson with MinGW based on your recommendations

sullen wind
# glossy inlet Ah you were that guy working on the Eden multiplayer thing. I haven't heard anyt...

Don’t even remember telling anyone about it here 😄 Back then I realized that school and work were taking up too much time, so I didn’t even try to find someone to continue it. I also figured there might be reasons why it wouldn’t even work since otherwise, it probably would already exist already by someone else. Sure, I found some “cheats” to overcome the biggest issues. It’s still something I’m planning to work on, and I was actually thinking about it today, which is why I’m sending my first message here in a long time. And being honest... How cool would that be

glossy inlet
#

There were certainly blockers that made it not possible because missing script features.
But I thougt I fixed most of them for you

#

If there are more blockers later just hit me up.
It would be a huge feature if you could get it to work

rancid lake
marsh viper
#

Can't seem to find ExtractPboGui with mikeros allinone installer. Was it removed?

dawn palm
#

i may have disabled it due to conflicts with pbo manager. checking,,,,

#

yes, it's been removed due to too many opportiities to screw thingds up. use elitenes instead,

marsh viper
#

Thanks, mikero

sullen wind
twin torrent
#

Since the topic of C# and extensions came up. Does anyone know a way to incorporate RVExtensionFeatureFlags in a C# AoT extension? I've just been ignoring it but, it would be nice to use them if I could.

full drift
#

RIP visual basic

sullen wind
#

Didn't even know that was a thing 😂 I'll see if I can figure it out today + the other missing new features

twin torrent
sullen wind
#

I did this:

public static partial class Extension {
    [Flags]
    public enum RVExtensionFeature : ulong {
        None = 0,
        ContextArgumentsVoidPtr = 1 << 0,
        ContextStackTrace = 1 << 1,
        ContextNoDefaultCall = 1 << 2
    }

    private static RVExtensionFeature _featureFlags = RVExtensionFeature.ContextArgumentsVoidPtr | RVExtensionFeature.ContextStackTrace | RVExtensionFeature.ContextNoDefaultCall;

    /// <summary>
    /// Get or set the current feature flags for the extension.
    /// Changing these at runtime affects how Arma sees your extension.
    /// </summary>
    public static RVExtensionFeature FeatureFlags {
        get => _featureFlags;
        set => _featureFlags = value;
    }

    /// <summary>
    /// Helper methods to enable or disable individual flags dynamically
    /// </summary>
    public static void EnableFeature(RVExtensionFeature flag) => _featureFlags |= flag;
    public static void DisableFeature(RVExtensionFeature flag) => _featureFlags &= ~flag;
    public static bool IsFeatureEnabled(RVExtensionFeature flag) => (_featureFlags & flag) != 0;

    /// <summary>
    /// Called by Arma to query the features your extension supports
    /// </summary>
    [UnmanagedCallersOnly(EntryPoint = "RVExtensionFeatureFlags")]
    public static ulong RVExtensionFeatureFlags() => (ulong)_featureFlags;
}```

No idea if it works or not, since I have no idea how its even supposed to work so far 😄
sullen wind
keen owl
#

Does unmanagedcaller work for variables? I thought c# couldn't dll export variables?

sullen wind
#

Sure it can if you just have the memory pointer.

keen owl
#

Guess I need to read up on c#. Looks like exporting a function to me.

sullen wind
#

But since this method does not contain the pointer, I was thinking of making a small pointer in between. The c# compiler can then compile that all into single .dll easily.

basically its something like this:
__declspec(dllexport) uint64_t RVExtensionFeatureFlags = 0;

and then you just add reference to it in the .csproj. <NativeFileReference Include="featureflags.c" />

and that way you can access to it using:

[DllImport("__Internal", EntryPoint = "RVExtensionFeatureFlags")]
private static extern ref ulong NativeFeatureFlags();```

However, I need would have to do some checking to make sure that the compiler compiles the symbol in correct format to arma
twin torrent
#

basically you need an intermediary of some sort

keen owl
#

That is the part I don't get? Arma expects to find a variable, not a function at that exported location right?

twin torrent
#

yeah, you can trick c# into getting a pointer to a value stored but arrma isnt expecting a pointer, it expects to just get the value

#

from what i recall, you could package a C/C++ dll that calls into a C# dll but looks shady af. would be nice if there was maybe an alt like RVExtensionGetFeatureFlags that called a getter method or void method

#

BUT how do you tell arma which one to use?

keen owl
#

I guess it might be possible by using Unsafe, taking the address of an exported function and just write the desired value at the address in c# but that will require somehow getting the function part into writable memory.

#

An getting it right before first use if it.

twin torrent
#

IIRC first call to extension not only registers callback but it will look up RVExtensionFeatureFlags too. So you could only technically hook all that up during the first call. Which isnt horrible but also not ideal

nocturne basin
#

VisualBasic ... a lang nobody ever needed

glossy inlet
#

The question is if the unmanaged exports (that's what you're using right? Giesecke?) supports that at all.
If it doesn't, the best way would be to make it support it

sullen wind
glossy inlet
#

closed this as completed
☠️

#

So was it that Giesecke was just the old outdated one no-one should use anymore?
And this is the new one ? https://github.com/3F/DllExport
I think that one is the one I've been using.
It says it has .NET Core support

glossy inlet
twin torrent
#

All this is above my head in the sense I don't deal with building interop too much in daily work but, my understanding is .NET is something something dynamic memory, can't guarantee address something something. (I don't personally understand fully why). And there certainly may exist a workaround to someone who can dive deep enough.

#

But, I figure if I am ever going to build something where performance requires I use these flags, I am going to instead build a service and just write the extension in C\C++\Rust\whatever to be the middle man between the two. That seems the easiest for server-side. Client probably not.

#

Unless it's an external app ofc. Then it makes even more sense to do it that way

twin torrent
#

ok, I am going to eat all my words above. Because I am obsessive I managed a workaround. Basically you can compile a cpp with just the RVFeatureFlags and include it in the C# dll - Tested successfully in .net10.0 as it is much simpler than .net8.0. I might publish to Github repo an example for both .net8.0 and .net10.0 later today. I have to run out to do more work atm so might not be available until late late or possibly tomorrow. supposedly works for linux as well as windows but I have only tested windows so far and Arma does report feature flags using allExxtensions to verify

#

it was a trip to figure it out but, it's working

glossy inlet
#

We have that Extensions sample on Arma3 GitHub, it would be nice to get some pull requests for more samples there

potent mason
#

i have a question regarding Object builder does it have something similar to blender's temp hide (pressing "H" to hide selected and "alt+H" to unhide all )

sullen wind
#

@glossy inlet I think I found a bug... Basically the entity that is passed in OnEditableEntityRemoved event is group, but also not... The object reference still exists, since I can get the EXT_objectID variable, when using get3DENSelected. However even get3DENEntityID doesn't work with get3DENSelected at that point anymore. This event is only raised once.

add3DENEventHandler ["OnEditableEntityRemoved", {
    params ["_entity"];

    diag_log format ["_entity: %1", _entity]; // _entity: B Alpha 1-2
    diag_log format ["null: %1", isNull _entity]; // null: false
    diag_log format ["type: %1", typeName _entity]; // type: GROUP ??? (not OBJECT)

    // THIS GETS TRIGGERED
    if (_entity isEqualType grpNull) then {
        _units = units _entity;
        diag_log format ["group 2: %1", _entity]; // group 2: B Alpha 1-2
        diag_log format ["units 2: %1", _units]; // units 2: []
    };


    _selected = get3DENSelected "object";
    diag_log format ["getEdenSelected: %1", _selected]; // getEdenSelected: [<No group>:1 (B_helicrew_F)]

    _unit = _selected#0;

    diag_log format ["REMOVING OBJECT 1: %1", get3DENEntityID _unit]; // -1
    diag_log format ["REMOVING OBJECT 2: %1", _unit getVariable ["EXT_objectID",""]]; // RU9Y8MQW (WORKS)

    diag_log format ["REMOVING OBJECT 3: %1", get3DENEntityID _entity]; // -1
    diag_log format ["REMOVING OBJECT 4: %1", _entity getVariable ["EXT_objectID",""]]; // ""

    [_entity] call EXT_fnc_deleteObject;
}];```
glossy inlet
# sullen wind <@90532520101183488> I think I found a bug... Basically the entity that is pass...

Your text is very confusing.
You're deleting an object, but the eventhandler is fired with group ? Or you're deleting a group?
The event name says "Removed" not "Removing" or "Remove". It implies that the eventhandler fires after the object is removed, so it doesn't exist anymore.
So get3DENEntityID would fail, because its gone, and get3DENSelected also fails, because you can't select something that's gone

orchid shadow
#

Made a video for setting up a swifty repo

sullen wind
#

The thing is, (get3DENSelected "object") still works at that moment and returns an object that technically still exists. From that object, I can successfully read the variable:
_unit getVariable ["EXT_objectID",""]
So the object reference is still valid enough to access custom variables.
Its fine if _entity in OnEditableEntityRemoved is a GROUP as it is. However, the problem is that calling: units _entity returns an empty array. That means I have no way to access the actual units that belonged to that group, and therefore no way to retrieve: _unit getVariable ["EXT_objectID",""] for the deleted object.

My goal is to obtain the EXT_objectID of the deleted unit, but using the _entity parameter alone, there is currently no reliable way to do that.

So if _entity is intended to be a group in this event, then units _entity should still return the units that are being removed, so their variables can be accessed before final cleanup.

#

Sure I can build a work around where I iterate trough every object in get3DENSelected "object" and check if the group matches with the _entity variable.

#

So your statement:
“The event name says ‘Removed’ not ‘Removing’ or ‘Remove’. It implies that the event handler fires after the object is removed, so it doesn't exist anymore.”
is not really valid in this case.

The object clearly still exists at the moment the event fires, because (get3DENSelected "object") still returns the object reference, and I can still access its variables (getVariable ["EXT_objectID",""]).
That means the object has not been fully removed from the game state yet.
So the issue is not simply that the event fires “after removal”, the object is still partially accessible. The problem is that _entity does not provide access to it anymore, even though the reference still exists elsewhere.

sullen wind
#

And If i remove single object within a group, it still triggers _entity as group that is never even supposed to be deleted. If I remove two objects within the same group, the event runs twice, and the _entity returns same group on each time.

glossy inlet
#

Are the group members still there, when the group deletion is triggered?
Or already gone?

#

So the _entity parameter is wrong? Passing the wrong thing?

sullen wind
#

(_entity isEqualType grpNull) returns true

glossy inlet
#

You are saying a lot of things but you're really not helping me further

sullen wind
#

I belive this should run twice if group has one object, one time for group, and one time for the actual entity? For now it only runs once and typeName is GROUP

sullen wind
glossy inlet
#

If you delete a group WITH its units.
The eventhandler is not fired for the units inside the group, but only for the group itself.

That's the issue?
We need to first fire the eventhandler for all units in the group, and then the (now empty) group itself at the end?
OR, if a group is deleted, make sure the "units" command still works to retrieve all units inside it.

Both would solve your problem?

keen owl
#

Seems to me original would be some group and units are deleted.

  • the units are unlinked from the group
  • thus units _group is empty and the helicopter pilot has no group either. They are middle of being deleted. And thus has no edenID anymore which I think makes sense because no point in grabbing id from object going away.
  • of course get3denselected works because they are not gone yet, but about to.

None of above seems "wrong" to me.

But if as Razer says argument is always group even when deleting unit from inside group only then I too am befuddled

sullen wind
#

For example, if the group has just single object:

 params ["_entity"]; 
 if (_entity isEqualType grpNull) exitWith {}; 
 
 diag_log format ["_entity: %1", _entity];
}];```

This is never being invoked, because the event runs only once and at that point _entity is a group and not the object: ```if (_entity isEqualType grpNull) exitWith {};```
glossy inlet
keen owl
#

For me:

  • If I delete unit(s) inside group, then only triggers for unit(s).
  • If I delete group, only a single group trigger. No units triggers.
  • If I delete all units in group, but not the group itself, it only triggers for the units, but the group is gone inside the editor.
#

(public version)

glossy inlet
#

So the fix

  • When deleting a group, trigger for all units in the group first, and then for the group last
  • When deleting all units in group, also trigger for the group itself which will be auto-deleted when it becomes empty
keen owl
#

Yes.

glossy inlet
#

It might be nice to know that, when a unit is deleted. Its actually part of a sequence of deletions that affect the whole group.
So you already know at the first unit, that the whole group will be gone. That might be useful for some things but I don't know how to communicate that.

If you'd only fire the group event, and could retrieve all group members, then you could iterate over them then, and handle the recursion.
But that would be harder to implement.

I wonder how that works when deleting a layer 🤔 Is that also messed up

sullen wind
#

Another issue is, that if the group has 2 units, the event runs 4 times for where typeName == OBJECT

keen owl
#

Group should definitely trigger when deleted whether it be by auto-deletion-on-empty or not.
I don't think it is wrong for the order to be "indetermined", but it is definately more useful to have such post-order traversal.

keen owl
glossy inlet
#

Mh the order might not matter actually.
If you do group first and units after, its still all in one "operation", so at the last unit, the group will still be there.

But I think running units first, and group last is most intuitive

keen owl
#

It is definitely more useful if that is guaranteed, yes, (the "expected" post-order traversal).

keen owl
#

As for how to signal under unit handling that the group is going away.

  • A parameter seems akwards since does not make sense for other entity types (edit: I guess a general hash table parameter containing extra "context" information would be a more general solution here).
  • A command to query inside, seems "overkill"?
  • I don't know how "magic variables" like "_x" or "thisList" are handled, but if they are "just" dynamic variable introduced inside a "hidden" scope setup before the call to the event handler, then perhaps such one: _groupBeingDeleted = true 🤷‍♂️
glossy inlet
#

My eventhandler system makes it too hard to add magic variables for a specific case.
Parameter yeah, same thought.
Command yeah no 😄

We could set some "being deleted" variable on the group, that you can see from within the unit deletion. ugh

glossy inlet
#

Reopening a 3 year old ticket lol

#

The units own entity event UnregisteredFromWorld3DEN will fire.
My quick hotfix would probably work, but its a rabbit hole issue. I'll just hope it works lol

#

Oh no I found a Eden bug.
Delete two units but not the group. Undo, the grop icon renders at 0,0,0 xD

#

If I delete all units in group, but not the group itself, it only triggers for the units, but the group is gone inside the editor.
Now... This is even worse..
The groups are never deleted. They are rendered every frame, but during rendering, the group sees that all objects inside it are unregistered, so it doesn't draw itself.
That'll be related to the undo and the group icon draws at 0 bug..

I don't know what to do about that. The group is never deleted so the deletion handler shouldn't fire right?

keen owl
#

Yeah, did encounter the 0,0 issue when I tested before.

glossy inlet
#

Oh hell notlikemeowcry It just gets worse the deeper I go.
The icon draws above the leader.
But when you undo the unit deletion, the group cannot find its leader, because it thinks it has no leader.

When the undo was done, the units reappeared, but they were not added back into the group. So now the group is empty and the units... in what group are they now lol

#

The units are in null group lol. Aaaaaaaaaa

keen owl
#

And you would have gotten away with it too, if it weren't for us meddling scripties

glossy inlet
#

It would be fixed if the units were re-added to the group.
But they are never removed from it either, just set to disabled

keen owl
#

I don't know what to do about that. The group is never deleted so the deletion handler shouldn't fire right?
Well, I think the greater issue is how it all interacts with undo too. I don't know if the reason for not "deleting" it, is to support undo.

But as an user of the editor, I would expect things that disappear to be deleted.

#

Of course that also raises the question if you jump back and forth in history should the events re-fire?

glossy inlet
#

they should, and they do

#

There is code to reassign the group leader.

#

For that, after the units in the group are gone, it checks who is currently the leader of the group, and who will be the new leader. And stores that information to undo it in the undo step.

Well you just removed all units, the old leader is gone, and there is no new one because its empty.

sullen wind
#

Good thing is, that its the only thing I've found while making this EdenOnline Extension 😄 I just did a simple workaround for it now, and now the extension is ready as a MVP. Just need someone to test it with 🤔

glossy inlet
#

Well I think they're fixed now. Next #perf_prof_branch will have it but I don't know when.

Well the non-deleted group, not being deleted is still open...
But. I think for your use case it doesn't matter. The group will also become invisible on the receiving end.
I will leave that in

Just doing an undo, after another player JIP joins would be hell, but I suppose that's not supported already

#

get3DENEntityID on a removed group returning -1
That is because "Removed" fires after its been unregistered from eden
And it tries to find the group in Eden, inside the registered objects list.

That's a bit unfortunate. The workaround could be to pass the entityID that was removed, as argument to the Removed eventhandler. That's easy to do

#
add3DENEventHandler ["OnEditableEntityRemoved", { 
   params ["_entity", "_entityId"]; 
   systemChat format ["TYPE: %1, _this: %2", typeName _entity, _this];
}];
#

In Added we don't need that parameter because you can get it from the entity (right?)

sullen wind
#

Would be preferred. Wasn't expecting such fast reaction to this matter 😄

glossy inlet
#

If I find enough other things to put in, it might be in #perf_prof_branch tomorrow. I'll try to remember to ping you in the changelog

sullen wind
#

Thanks! No rush, the workaround seems to work just fine too

twin torrent
#

@glossy inlet @sullen wind Sorry this wasn't sooner but, I placed an example of making a C++\C# mixed DLL on github for others to base their knowledge from. It's not feature complete and very minimal but I think a link on the wiki would be cool and useful. https://github.com/CrashDome/Arma3Ext_CSharpFeatureFlagsSample

GitHub

Provides a working examle of adding Feature Flags to a C# DLL Extension for Arma 3 - CrashDome/Arma3Ext_CSharpFeatureFlagsSample

glossy inlet
twin torrent
#

Oh that is good to know.!

keen owl
#

So since C# AoT cannot export symbol, you sidestepped it by a moving it to C++. Your trick here is the linker happens later and does not care how the COFF file was made, so in the end we only have one dll?

Do you actually need to export the get and setter then, would a global linking symbols not be enough?

sullen wind
twin torrent
# keen owl So since C# AoT cannot export symbol, you sidestepped it by a moving it to C++. ...

I am not an expert on this type of stuff but, I found it was simple enough just to expose the get/set on C++ and import to C#. Very few extra lines of code needed. If it can be done with some other linker trickery, I do not know about it. And yes, the .obj file gets embedded into the final DLL along with the C# compilation. How it is arranged? I have no idea. I basically googled and read a lot of stackoverflow just to get ideas to try.

onyx helm
#

I have zero clue where to ask about this so feel free to redirect me.

Is there any flavor of C++ that would apply outside of Arma but not within? One example being declaring variables as:

overview =
    "Adds additional flares on top of the built-in JCA hand flares!" // Overview text, displayed from the extension menu
karmic niche
#

Not sure if I understand. What exactly do you mean by "outside but not within"? The example isn't really helping. What variables are you declaring? SQF variables, maybe?

#

Outside as "on the screen"? All extensions run kind of "outside", as they can do anything a separate program could do (as opposed to a mere SQF script)

onyx helm
onyx helm
#

My VSCode's C++ formatter extension messed about with my mod.cpp file and it got my curiosity

karmic niche
#

Uhh... Arma does... not interpret C++ files at all.
Maybe you're misunderstanding how extensions work. You're supposed to compile a C++ file into a DLL and that DLL is then just executed by Arma

onyx helm
karmic niche
#

It has nothing to do with C++ 😄

onyx helm
#

Ehh?

karmic niche
#

Just that. It's not C++ 🤷‍♂️

#

No idea why the cpp file extension is used but it has nothing to do with the programming language

onyx helm
#

Oh fun

karmic niche
#

You know what's funner? Reforger's Enforce Script using the .c extension instead of something like .enf 🤪

onyx helm
#

... I have to stop questioning everything for the sake of my own sanity sometimes

latent dagger
#

Is there any particular reason or way to improve the binarizing of WRP files? I use Mikero's, I've separated my data\layers out to another PBO for my terrain, but the WRP is ~500 MB and it takes about 5 or 6 minutes to binarize any time I need to make a config change. Is this as good as it gets?

dense cove
#

If you're just after a config change, only pack the config into a PBO and load both PBOs

latent dagger
#

That makes more sense. Thank you

glossy inlet
red nebula
#

Has anyone encountered this?

junior beacon
#

Yes, it's called AddonBuilder and it's ugly 😬

#

Joke aside, no idea.

#

Sadly there is no documentation of the error codes.

#

You could check the log files if they are more specific.

idle fiber
#

Is the binarized P3D being packed?

glossy inlet
idle fiber
#

Sorry... I’ll work on being more detailed. English is hard, My English isn’t great

#

My apologies for that random message. I must have accidentally hit send without realizing it.

toxic relic
#

@inland flare
Changed: P3D Binarization process now uses 32bit vertex indices

  • does that mean the artificial vert limit is also removed or planed to be removed from O2/OB?
north wasp
#

I've seen a tool somewhere to debug why signature verification isn't working and I forgot the name. Anyone remember?

#

Situation is that I'm using the same key and the same method (A3 tools command line with -sign) and it's stopped working at some point.

scenic canopy
north wasp
#

Hmm, apparently that also stopped working at some point. Can't find files with any reasonable path spec.

#

I don't think I can make the task much simpler for it:

scenic canopy
# north wasp I don't think I can make the task much simpler for it:
>bisign verify Keys\a3.bikey Addons\a3.pbo

Public Key: "Keys\\a3.bikey"
        Authority: a3
        Length: 1024
        Exponent: 65537

PBO: "Addons\\a3.pbo"
        Stored Hash:  [107, 65, 28, 74, 192, 35, 6, 77, 243, 45, 122, 113, 6, 209, 222, 15, 75, 255, 231, 177]
        Actual Hash:  [107, 65, 28, 74, 192, 35, 6, 77, 243, 45, 122, 113, 6, 209, 222, 15, 75, 255, 231, 177]
        Extensions
                prefix: a3
                product: ArmA 3
        Files
                config.bin: 178
                data\env2_co.paa: 307
                data\env_bathroom_co.paa: 307
                data\env_chrome_co.paa: 307
                data\env_cloth_green_co.paa: 307
                data\env_cloth_neutral_co.paa: 307
                data\env_co.paa: 307
                data\env_inter_hotel_co.paa: 307
                data\env_lake_co.paa: 307
                data\env_land_chrome_co.paa: 307
                data\env_land_co.paa: 307
                data\env_land_optic_co.paa: 307
                data\env_land_orange_co.paa: 307
                data\env_land_plastic_co.paa: 307
                data\env_mirror_co.paa: 307
                data\env_skin_co.paa: 307
                data\env_skin_dark_co.paa: 307
        Size: 5921

Signature: "Addons\\a3.pbo.a3.bisign"
        Authority: a3
        Version: V3
        Length: 1024
        Exponent: 65537

Verified!
rough grove
#

You'll get better messages out of hemtt

north wasp
north wasp
#

Huh no, that key was just invisible to bisign for some reason. Whatever, made a new one.

onyx helm
#

Praise be HEMTT

dapper pivot
#

It'll break the file format for unbinarized .p3d's which hasn't changed for years.

#

So if it happens you'll know about it.

#

They may also be doing it for object aggregation, e.g. for in-memory generated .p3d's (which is how roads work too).

terse osprey
#

I was trying to publish a update for a mod last night but the publisher tool was not launching at all. I’m just wondering if anyone had any insight to fix said issue.

#

I reinstalled arma tools and restarted my computer but neither fixed it.

onyx helm
#

Any crash logs or errors you're getting? I published an update for my mod <24 hours ago without issues

terse osprey
onyx helm
#

Hm. What OS are you running?

random fiber
#

What's the easiest way to move my P: drive to a different SSD?

jovial elbow
onyx helm
#

You can just unmount it through A3 Tools, no?

jovial elbow
#

That should work too
I don't think I've ever unmounted it that way though, always just left it mounted until I restart my computer

random fiber
#

Unmounting it isn't the issue, I want to have the files that are on to the P: drive to be on another drive

#

Not even sure what the default folder is for it

jovial elbow
#

Default folder for the P: drive from the Arma 3 tools mounting is something like Documents/Arma 3 Projects
Though it could be in your user home folder, or in Desktop, or someplace else entirely

onyx helm
#

You can check in the Arma 3 Tools settings

odd terrace
#

Unsure where to put this but:

Steam doesn't show Arma when searching for title in steam. Anyone else had/having this issue and what was done to resolve it?

#

The "Search" button doesn't work either. 😄

sly skiff
brisk garnet
#

As Zeus, when I bring in an ammo resupply box, and I try to add M67 Frag Grenades to the box, the grenades are greyed out and I cannot increase the number of grenades. How can I make it so i can add M67 grenades?

candid jungle
#

Does anyone manage to install a P Drive on linux ?

sly skiff
#

P drive can technically be just partition too

#

preferably empty one though in case of anykind of accident

scenic canopy
#

just make a p: directory symlink in dosdevices folder for wine to see it

small cedar
#

Anyone know why texview 2 would be failing to open my image? Its a png that has a 1024x1024 resolution

#

I would send it here but for some reason I cant

#

Image to paa also fails to convert it

small cedar
#

perhaps

#

either way gruppe adlers converter worked so i should be fine, thanks for the response

delicate root
#

Is there some way I can get AddonBuilder to recognize files from other addons #includeed in configs in the same way as most third-party tools, where it goes off of $PBOPREFIX$ instead of the actual filesystem? For example I'm trying to binarize/rappify my fork of Antistasi Ultimate, and I don't want to mess with the directory structure to make it easier to pull changes from upstream. All the #includes use \x\A3A\addons\<addon_name> assuming the prefix of x\A3A, while AddonBuilder seems to recognize the prefix as A3A and can't import the #includes from the core addon properly. Do I need to edit the #include lines or can I manipulate AddonBuilder to recognize other addons with the correct prefix? In case it's relevant, I'm using AddonBuilder from the commandline via a PowerShell script.

delicate root
#

Okay I'm starting to think I'm just using the -project argument wrong or something... Is there anywhere I can find documentation on how to set it to include script macros from CBA and all that? I'm not finding any useful info on the Biki. With HEMTT I just throw them all in the include folder and they get read, supposedly it's the same with Mikero's Tools.

#

I've got my -project argument set to the folder just outside the addons, is that not correct?

delicate root
#

This is the output I get when I run CfgConvert manually, does it require a P: drive to be set up? I recall reading that AddonBuilder doesn't require a P: drive.

The system cannot find the drive specified.
Include file A3A\addons\core\Includes\script_mod.hpp not found.
Error reading config file 'S:\repos\games\Arma3\A3-Antistasi-Ultimate-Moosehound\A3A\addons\config_fixes\config.cpp'
nocturne basin
dawn palm
#

I DO

atomic schooner
atomic schooner
opal mist
#

Anyone who has published a VS Code extension? I'd like to know what do the statistics visible to developer mean. E.g. acquisition (in conversion funnel) is currently at 450 %. How can it be more than 100 %?

full drift
#

So heres one for you guys can the arma community be trusted with open source projects?

wind elm
#

As long as you can't convert/use it for "life" -> I think so 😄

smoky halo
#

Normally if its open source they can technical monitize it anyways

Whats the project you are considering going open source ?

full drift
#

my multiserver rcon tool

wind elm
#

epm rcon?

full drift
#

an unreleased version

#

but yes

smoky halo
#

I would just opensource it if you arent bothered to maintain it and put it on github

full drift
#

its not the winforms version, that will stay closed source and ill be maintained as long as i keep arma servers running.

#

its more for this version

#

just to prove it is actually multitabbed and working 😛

smoky halo
#

If you opensource
Worse case it just sits there doing nothing on github.
Best case someone might start working on it & releasing publically (abit of a long shot imo)

IMO it comes down to if you want people to see your code (or if you want to clean it up first) 😛

full drift
#

the only concern i have is people ripping it off, i don't mind people helping out with update thats are publicly released by myself but dont want a million copy cats popping up.

median rune
#

I realise this is the wrong room but its seems to be the only one thats active. Im trying to load a mission file in eden but i keep getting "Error loading scenario". Anyone have a fix?

lofty jewel
#

Which biprivatekey does hemtt tool use when running hemtt release ? I can't figure it out, does it generate private keys on the fly?

scenic canopy
lofty jewel
#

thanks, so this private key is never saved and only used once per release?

silent trellis
#

@full drift it's gonna get ripped off if you open source it

#

Never stopped me

#

Well, correction, it's gonna get ripped off if it works and is any good

full drift
#

what? never stopped you from open sourcing or from ripping someone else off?

silent trellis
#

Never stopped me from open sourcing :p

#

I like open source stuff, lets me see other ways people do things

#

learn from them

#

But you'll always get kids who want the shortcut route to being a professional programmer and will just copypasta the code and call it their own

#

Does it actually work @full drift ?

full drift
#

it does

silent trellis
#

and aside from the metro ui, what's the difference between the winforms version

#

Actually.. more to the point why on earth are you still using winforms

full drift
#

i would say its like 95% away from being in a state that i'd be happy to do a public release on

#

main difference is the ability to import darts db because that used to be a thing

#

😛

#

and the main selling point is having all your servers open in one program

#

rather than 4 / 5 winform rcons open

silent trellis
#

tis a good idea

#

Well, if you do open sauce it send me a linky

full drift
#

small few niggles but 100% something that if there were people to help finish it then it would be a good replacement to the winforms version

silent trellis
#

I'd probably contrib

#

made a php BE rcon tool once

#

Then I accedentally deleted it when we moved servers... last time I didn't put something on github

full drift
#

i've go to many things to finish, i've got my bec replacement to finish off aswell

#

currently using it as my reserved slot / auto message thing atm

#

and tool to monitor and reload the bans.txt and bans-a3-guids.txt files when it notices a change

silent trellis
#

Why use bans.txt instead of BE?

full drift
#

bans.txt is the default file that BE writes to so we use that for our local bans

#

and we import bans-a3-guids.txt from the wsbans sytem for sa-matra servers

silent trellis
#

ah

full drift
#

that way we can keep the two seperate because me and dwarden bugged battleye to give us multi ban file support

#

dont think many people know / use it aswell

frigid ember
#

https://forums.bohemia.net/forums/topic/186984-x3kjs-ballistic-calculator-excel-macro-sheet/

The link on this (ten year necro) post doesn't work anymore (duh). Does anyone either have the sheet or have an equivalent tool?

junior beacon
#

@normal wigeon

frigid ember
#

oh no I already dm'd him 🙁

calm crystal
#

bans.txt is guid and ban.txt is puid, use both and profit

full drift
#

yea and random.txt is for anything you want

#

or thisismynewbansfile.txt

#

as i said you have have any name for your bans files

vague hearth
#

Does my code calculate correct I'm very newbie on this game

idle fiber
#

#skip

proper wave
vague hearth
pearl rune
glossy inlet
#

Guess you gotta do it manually now

spice jungle
#

I’ve been dealing with an odd issue lately. My A3 Tools launcher no longer opens. I’ll click it and it’ll just flash but won’t open. I can open each app individually but none of the paths or settings are saved. This persists after reinstalling as well.

jovial elbow
spice jungle
frozen meadow
#

you can use my extension, i think still works the merge func

orchid shadow
#
Bohemia Interactive Forums

Swifty : the simple and no-hassle mod updater - posted in ARMA 3 - COMMUNITY MADE UTILITIES:
https://getswifty.net
 
 
Swifty aims to be a simple and no-hassle mod updater for Arma 3 communities.
It doesnt try to do everything, but instead tries to be intuitive for end-users, with short time-to-play, less buttons to press and less confusing menus.
Rather than a common mod repository, it relies on communities to host their own, thus allowing their administrators to maintain cont...

rotund pulsar
#

is x-cam no longer compatible with arma since the eden update?

#

no exported xcam mission loads in the 2d/eden editor since the update?

grave moss
#

I literally exploded

pearl beacon
obsidian sluice
#

Hm, using textures in TGA doesn't work for me

#

When Oxygen wants to convert those, I got error 22

dapper pivot
#

Are they 8-bit per plane?

#

16 BPP .TGA's won't work. Substance tools tend to emit them.

obsidian sluice
#

Ah, that might be it

last sedge
#

hey guys, speaking with somone and he is saying he can obscurate the MOD pbo's i did not think this was possible... i know the Mission PBO can but did not think Mod pbo's could? anyone have any input on this?

smoky halo
#

Mikero Tools paid version of his tools have this feature.
It will stop some people from extracting the pbo, but it is not foolproof.

orchid shadow
#

It only works on shitty toolsets

last sedge
#

@smoky halo i dont understand how this can be done so tools cant read it but the engine can, there must be an instruction set or somthing for de-obscurating the PBO?

#

also good work on your Arma Extensions 😃 will be looking into things like this after ive had a crack at modeling for a bit, i dont belive people should be able to hide files like this, i mean A3 provides an amazing enviroment or modders and scripters and i have learnt so much from taking apart other peoples work (no stealing) infact alot of people in this discord have without knowing helped me to get to where i am now :/

smoky halo
#

Defeats the purpose to describe how it works, like i said its not fool proof.

Unfortantly there are people that will extract content outof a pbo & repackage it without permission etc.
Have even seen people rename files in an attempt to hide it.

Regardless its up to the authors themselves how they would like to package thier content imo.

last sedge
#

@smoky halo i understand this i just think its a bit "Meh"

#

lol

#

but anyways good work 😃

glossy inlet
#

@last sedge maybe pbos support having ? as a prefix or in folder names... When you unpack it on windows it cant because you are not allowed to create a folder containing ? ... Thats what i would try to safe pbos from getting unpacked

last sedge
#

@radiant wagon thats an intresting consept

orchid shadow
#

That's kinda how mikero does it

#

Thus you can defeat it with notepad and a replace ;)

#

or just unpack it on a linux

#

;)))

last sedge
#

linux just streight bypasses this?

#

GG lol

orchid shadow
#

its a anti retard protecting

prisma dragon
last sedge
#

lol

radiant wagon
#

@last sedge huh?

last sedge
#

sos bro tagged wrong person lol

radiant wagon
#

oh algoods g haha

vivid condor
#

Would asking an extdb2 question here fall under this channel or another?

glossy inlet
#

depends... can be server/scripting/mission_making

#

just ask where it fits best

vivid condor
#

I'm wanting to move to the extdb2 whitelisting examples in the conf and I'm currently using the whitelist.txt but I'm not sure how to seamlessly transition to it.

smoky halo
#

The whitelisting is broken, its been broken for months
Bug in the logic somewhere were it loses track of number of players

There prob is some rcon text i am not parsing correctly when a player gets kicked / loses connection etc

inner gull
vivid condor
#

@smoky halo well that stinks. I'm trying to figure out a way to whitelist easier for my support team so I dont have to give people access to the dedicated server to update the txt file. Ive had a sync tool that was made for us that grabs from a google spreadsheet and then updates the whitelist.txt but it stopped updating properly last week and the person who made it is no longer around. So im in a dilemma of me being the only person that can whitelist and our reboots are 6 hours apart. theres gotta be an easier way out there to whitelist.

glossy inlet
#

@vivid condor find somebody to fix that tool for you ^^

vivid condor
#

:\

#

i was hoping to rid myself of restarts to get new whitelisted

#

was hoping the db style whitelister was instant

#

people hate waiting 6 hours for a reboot to play

glossy inlet
#

are you whitelisting via script? you could modify that script yourself?

#

if you have extDB change that script from using the whitelist.txt to a DB request

vivid condor
#

whitelisting via google spreadsheet that sync via executable

#

and i dont compile executables

glossy inlet
#

i mean how does the server know who is whitelisted?

vivid condor
#

whitelist.txt

glossy inlet
#

is that engine behaviour?

vivid condor
#

BEC

glossy inlet
#

ouh

#

i probably would hack the whitelist check function and overwrite it with something that re-reads the whilelist.txt on intervals

#

win or linux?

#

on win its easy on linux i never tried ^^

#

but probably too much hassle and not worth it

vivid condor
#

hmm hack bec?

glossy inlet
#

well its not BE its BEC... so...

#

and its serverside so theres no ID or something to ban anyway

vivid condor
#

i forget which version of bec im running

#

looks like the newest

#

i wonder why they dont have a function that checks every couple minutes

glossy inlet
#

maybe no one ever suggested...

#

they have that nice sheduler system that could do it

vivid condor
#

im running windows

#

so youre thinking i could add a schedule to eleviate the need for restart to rescan the whitelist

#

that would be nice if i knew the function

glossy inlet
#

possible... but i think its easier to just hardcode the refresh in a hack...

#

try to get in contact with the BEC guys maybe theyll add that to the scheduler

full drift
#

@glossy inlet Nuxil gave up on everything BEC related so hes not going to add anything

#

This is why i've created a tool to replace BEC but no eta on release sadly

#

But it does have whitelisting finished

#

which looks for changes to the reservedslot json file and reloads that when it notices a change

#

giving you realtime updates

vivid condor
#

thats good to hear but i need something yesterday 😦

#

i sent an email to the contact on the website and came back with a bounce

glossy inlet
#

wow.... you can extract the BEC code from the lib and just add things onto it as you wish

#

and easily replace functions... like the whitelist check one

#

just have to find the function name

#

there is also an example which auto fetches the bans out of a MysqlDB and doesnt let the player join if it finds a ban

#

on the BEC download site on the left you can get that "Example Plugins" package

#

BEC has a scheduler command called "loadwhitelist" ... it is not listed on the BEC website

#

cant see it implemented though... its only in the list for the BEC scheduler commands but nowhere else in code

#

so anyone who wants to... in the plugin-dev-example there is a pics folder with a "tutorial" on how to unpack the compiled py files.. then you can just google for "Easy Python Decompiler" and get the source to fiddle around yourself... I dont know python sadly

vivid condor
#

So to change the question. Is there a good whitelisting technique for my admins so I dont have to give them access to the dedicated server to add someone?

#

i guess no one really whitelists anymore?

vivid condor
#

@glossy inlet then problem we're having with our exe that creates the whitelist.txt is that its only grabbing 5 names/guids from the list. It happened between a reboot about a week ago. We looked through the exe and it looks correct. we're thinking its with the google spreadsheet we use but unable to find a problem. If we delete 5 users it just grabs the next 5. it should be grabbing 200

#

also for those looking for something to instant whitelist with BEC theres a Watchdog plugin and you just simply install it in the plugins folder of BEC and sees when you change whitelist.txt and no reboot needed

glossy inlet
#

well i dont know your code ^^ obviously sounds like a bug...

vivid condor
#

i mean i could send you then little exe if you wanted to help but i think i just need to figure out how to sync the whitelist.txt from google drive

glossy inlet
#

dont even know if you need to auth if you only access a public file

#

i can write you a quick script for that tomorrow if you need

vivid condor
#

Ya i just want to make sure its secure since itll be running on the server.

full drift
#

@vivid condor thats because ive not fixed my exchange server, i deleted the dc because i was not paying attention to the vm i was removing

#

and ive not gotten around to recreating it.

vivid condor
#

ok np

#

but i found a plugin to sense when whitelist.txt has changed so i think im ok

#

Dedmen helped me make an exe that pulls from google drive so I can have several people add people to whitelist without having access to the dedicated server

scenic berry
#

something been messing with

fickle crane
#

Anyone know if/where there's a .net wrapper for Mikero's depbo.dll?

quartz thorn
#

Ask Mikero....on Skype

last sedge
#

yo @scenic berry that fking cool

smoky halo
#

@scenic berry nice should speed up callExtension development times. shames its c# :/

golden totem
#

FreeLibraryAndExitThread(selfModule, false);
^^ noob

scenic berry
#

anyone interested in running javascript (nodejs) via an extension?

smoky halo
#

there is no .net wrapper. mikeros API design is not really suited for that btw

scenic berry
orchid shadow
#

@fickle crane checkout swiftpbo on github

#

only extracts and compress tho

next glen
#

anyone else having the probelm that when you click on say, Object Builder, that Arma 3 Tools just closes itself, so you have to relaunch it,

quiet gorge
#

fine for me

fickle crane
#

@orchid shadow: thanks, that should work. I only want it to verify uploads aren't corrupt.

spiral forge
#

hi, does anyone have a use for a Stringtable maker ? (csv, xml and ini compatible and converter)

orchid shadow
#

There is quite a few, more can never hurt :)

quartz thorn
#

Do any of them connect too Google's translate API to do automatic translations into all languages desired?

orchid shadow
#

👍

#

That be .. intresting lol

nocturne basin
#
    |- stdLib:    Added interface ::std::ISerializable
    |- stdLib:    Added ::std::Vehicle(string, vec3) constructor
    |v- stdLib:   Added `using ::std::Tupel`
    ||-            Added Tupel2<T1, T2>
    ||-            Added Tupel3<T1, T2, T3>
    ||-            Added Tupel4<T1, T2, T3, T4>
    |\-            Added Tupel5<T1, T2, T3, T4, T5>
    |- Compiler:  ReEnabled (& implemented) interfaces
    |- Compiler:  Fixed TryCatch variable is not getting printed
    |- Compiler:  Changed how virtual functions are adressed
    |- Compiler:  Changed where object meta data is located
    |- Compiler:  Fixed issue in switch
    |- Compiler:  Fixed NPE in Idents on LNK errors
    \v- Compiler: Only one PreInit function is allowed now
     \-            Added new Linker exception LNK0060```
signal raptor
#

hello all

wide cedar
#

@prisma dragon do you guys happen to have some documentation on ODOL that you want to share? 😉

smoky halo
#

what do you want to know?

wide cedar
smoky halo
#

what is so difficult about it?

#

that stuff is mostly empty

#

since v70 it is ulong instead of ushort btw 😉

wide cedar
#

alright, so if i'm reading this right the first array should have the size of the mlod points array

#

and the second one the size of the vertex table in the odol

#

the second one is understandable, but surely there are multiple vertices for every point (1 to 4 or something), so how do i decide which one to store. is it just any of them?

#

also, what purpose does this serve and why do i need to know what mlod point a vertex originated from later?

#

here's a shitty drawing of what i mean

smoky halo
#

just let that stuff empty

dapper pivot
#

BIS probably doesn't document those kinds of formats themselves given that most of them appear to be fairly homogenous serializations.

#

And are you trying to binarize? There's quite a few unknown fields especially when it comes to PhysX. And many things are non- trivial to compute like bouyancy.

wide cedar
#

yes

#

that's what i'm doing

#

it turns out that the reference array was empty in "official" ODOLs as well, so i did just what @smoky halo suggested

#

and yes, it's quite challenging

#

but that's half the fun :>

smoky halo
#

you really want to binarize p3ds yourself?

#

half of the arma engine is used for that^^

wide cedar
smoky halo
#

^^

wide cedar
mortal kernel
#

thats my model 😃 i am so Proud

smoky halo
#

your first binarized model? congrats 😃

wide cedar
#

making progress...

mortal kernel
#

and my shitty texture 😃

wind elm
#

lol

pearl beacon
#

go flummi!

wide cedar
wind elm
#

Whats that? Reminds me a bit of a M249 but... idk

wide cedar
#

mg5

vague shard
#

very nice :👌 what is the process you use - build a special p3d with binarize and your tool achieve same hash/exactly same result, or more of a visual/technical analysis confirmation?

wide cedar
#

i took jaynus' pbo reader from the work-in-progress vehicle damage extension for ace and turned it into a standalone executable. i then use that to compare my file with a sample

#

you can't really compare files directly with a hexeditor or hashing due to heavy usage of float values and due to the fact that i don't use compression, while the official binarize does

vague shard
#

i see. thanks for the insights!

#

what about MLOD->ODOL->MLOD? is the back-conversion too incomplete or not precise enough too?

wide cedar
#

odol->mlod should be easier than the other way, it's just not a priority atm

vague shard
#

yeah not meant to suggest that either; just meant that there are a few tools out there that could be used to verify your progess - but might not be useful to do; just putting out wild guesses

wide cedar
#

oh. yeah you can't use that to verify since a lossless recovery from odol to mlod isn't possible

vague shard
#

i dont mean directly via hash or so, but for example using dep3d from mikero to extract selections or other data

smoky halo
#

@wide cedar do you program on linux only? I could add some stuff but I dont get it to work with Visual Studio. Dont really want to create a linux build environment

wide cedar
#

thanks for wanting to help! at the moment i program exclusively on linux. i know there are some bugs on windows still. i guess you could try to run make on windows, or just recreate the compiler settings in visual studio; they should be relatively simple, as you can see in the rather simple makefile.

cyan crow
#

cmake that shit

#

😛

#

ill get in there at some point and make it all nice and buildy on any system

wide cedar
#

you can pry my makefile from my cold, dead hands

smoky halo
cyan crow
#

cmake make files are way better

#

it can generate makefiles, visual studio projects

#

any thing

#

pretty much

pearl beacon
#

@smoky halo @wide cedar I did get it to compile on Windows using mingw-w64's make

#

that was before p3d stuff was implemented though

#

you can just grab insider preview of Win10 and enable Linux subsystem, then just use make from that

lunar spoke
plush shard
#

something I've started some time ago but finally reached a somehow acceptable state:
a python3 library & cmd line script for:

  • basic pbo operations (create, list, extract - no support for compression or mission pbos)
  • key conversion (DER & PEM -> .biprivatekey/.bikey)
  • pbo signature creation
  • pbo signature verification
    (only tested it on linux, yet - so it may or may not work on windows)
    https://github.com/4d4a5852/a3lib.py
vague shard
#

pretty neat 😃

#

if you are willing to share (i think your licenses suggests that), it could be useful for @wide cedar

plush shard
#

had a look at it yesterday - KoffeinFlummi's armake project looks quite promising

wide cedar
#

looks nice @plush shard; i had already hoped that it might be possible to create keys and sign stuff with default nix tools like openssl/h, i will certainly take a look at your stuff once i'm done with the p3d stuff

smoky halo
#

@wide cedar is there a reason why you use quite old school C coding style?

#

I would like to add the MLOD to ODOL mass conversion stuff, but coding like that is quite special ^^

wide cedar
#

well what would you do differently?

smoky halo
#

use vector and matrix classes for example ^^

#

and use operator overloading

wide cedar
#

well that would be c++, not c

smoky halo
#

yeah, why use C?

#

I mean no offense. just would like to know if there is a reason or if you just simply like C

wide cedar
#

It's mostly personal preference, and speed. I generally dislike object-oriented programming since I generally think that the conveniences aren't worth the added fragmentation and unnecessary abstractions

smoky halo
#

ok i c

#

so you are a purist ^^

wide cedar
#

Basically, yeah.

#

I mean, you might save some lines of vector math, but overall I think total LOC would probably stay the same.

#

(for armake at least)

smoky halo
#

well it would help to directly use the leaked BIS source code which is C++ 😉

wide cedar
#

that's a perfect example of what i don't want 😛

#

i'm having trouble reading that anyways

smoky halo
#

yeah of course that needs to be simplified but it would help 😃

wide cedar
#

I have a feeling they wouldn't be too happy about that

smoky halo
#

yeah I am not recommending to simply copy it anyways

#

can structs have methods in C?

wide cedar
#

no

smoky halo
#

ok

#

I will try to refresh my C "skills" then and see if I can do the mass conversion stuff. Would that be useful for you?

wide cedar
#

are you referring to the inertia stuff?

smoky halo
#

yes

wide cedar
#

that would certainly be helpful

smoky halo
#

ok 😃

wide cedar
smoky halo
#

inertia is a matrix btw 😉

wide cedar
#

oh yeah, i was meaning to ask someone about that

#

it seems like a 3x3 matrix, but it seems to be stored in 12 bytes

smoky halo
#

it is a 3x3 matrix stored in 36 bytes

#

there is no thing as thermal_profile2

wide cedar
#

aha

#

that makes more sense actually :>

smoky halo
#

😃

wide cedar
#

i did model config reading over the weekend, so i should be able to actually use the right thermal variables now

wide cedar
wind elm
#

Jedistyle

wide cedar
vague shard
#

very impressive!

#

do you mind doing a short bullet point overview whats still on your list (and stages of completion if you have some in mind)

wide cedar
#

Let's see:

  • fix the uv coordinates (current issue)
  • write proper proxies and bones
  • write animations
#

those are the only main things remaining

#

there are also a few smaller issues that don't seem crucial for correct binarization

smoky halo
#

added a pull request 😃

wide cedar
#

sweet, gonna take a look once i figure out these uv coordinates

smoky halo
#

do you understand how uvs are compressed?

wide cedar
#

yes

#

at the moment, it seems the issue isn't with the uvs themselves, but with the way i add points

wide cedar
smoky halo
#

@wide cedar did you forget to upload a material.h to git?

wide cedar
#

Oh yeah, turns out I forgot to add those

#

I pushed them now, they're still WIP anyways

orchid shadow
#

@prisma dragon who do i rob to get featured in them spotreps, i wanna be famous.

prisma dragon
#

@orchid shadow ?

orchid shadow
#

rude

smoky halo
#

spotreps are for arma3 updates

pearl beacon
#

SITREPs he meant probably 😛

wide cedar
#

@smoky halo if you can explain to me how this whole bone link / items stuff works, i'm done with everything but materials and your mass conversion 😉

smoky halo
#

well first, I can give you the variable names that BIS use for this stuff

wide cedar
#

that would be great

#

as items isn't really that descriptive

smoky halo
#

subSkeletonsToSkeleton = input.ReadIntArray(); skeletonToSubSkeleton = input.ReadArray<SubSkeletonIndexSet>();

#

so items is subSkeletonsToSkeleton

#

skeletonToSubSkeleton is bonelinks

wide cedar
#

ah, so i was right; len(bones) = len(bonelinks)

#

while items reference bonelinks

#

sweet, that'll make things easier

smoky halo
#

submitted another pull request

#

just some minor corrections

wide cedar
#

sweet, i'm going to take a look at that once i got this mg4 working fine

pearl beacon
#

you mean you added commits to your PR

#

sorry, I had to 😄

smoky halo
#

well yes I did that too, but I just submitted a new PR too 😉

pearl beacon
#

oh, I don't see it

smoky halo
pearl beacon
#

oh you PRed to yourself

smoky halo
#

ah shit

pearl beacon
#

😄

#

hehe, happens

smoky halo
#

I am not fluent with GitHub ^^

wide cedar
#

just saw that, lots of great clarifications in there, thanks

#

regarding the subskeleton look up table, every model i've looked at only has a single skeleton index for every subskeleton entry

#

in which conditions would there be multiple ones?

#

also, am i correct in assuming that the subskeleton is simply the subsection of the skeleton which is relevant for the current lod (i.e. every bone that has a corresponding selection)?

smoky halo
#

need to check that stuff myself. But for me a skeleton is a tree of bones ans subskeletons are subtrees.

smoky halo
#

quite tricky. need to get my head around it first

smoky halo
#

you seem to assume right

#

subSkeletonToSkeleton only contains bones that are used in the corresponding lod

#

if I understand the code right they are ordered according to their first use in sections

#

i am not sure, but it could be that there would be multiple entries if there is a section that uses more bones than the specified targetBoneInterval. But I am not completely sure about that

smoky halo
#

do you have plans on adding support for island binarization and packing? 😄

wide cedar
#

not at the moment, as i have absolutely no experience with that

dapper pivot
#

@smoky halo Have you tested extracting the skinning from ODOL's?

vague shard
#

is there an alternative to squint available these days? (sqf/fsm checking tool/static code analysis)

dapper pivot
#

There's an unreleased one that we see teaser screenshots for about every year. 😉

vague shard
#

@dapper pivot can you be a bit more specific please (author/source) 😃

dapper pivot
#

I'll dig it up when I'm back on a PC, he's been working on it since Alpha.

#

Pretty sure he's in the Skype group.

orchid shadow
#

spotreps

#

sitreps

#

whatever

#

i dont care. all the same to meee

vague shard
#
Bohemia Interactive Forums

Arma Intellij Plugin - Version 1.0.0 - posted in ARMA 3 - COMMUNITY MADE UTILITIES: Arma Intellij PluginCurrent version: 1.0.0 (First release)
 Index

  1. Introduction
  2. Features and Images
  3. Feature Spotlight
  4. Overview Video
  5. Planned Features
  6. Download
  7. Source Code
  8. Donate
     
     1. Introduction
    Arma Intellij Plugin is a plugin developed by K-Town (me) for Intellij IDEA. Intellij IDEA is a Java IDE developed by Jetbrains and offers many amazing APIs for creating...