#arma3_tools
1 messages · Page 9 of 1
do I?

Does someone know what people are using to obfuscate their pbos ? Im afraid my 3D Models will get stolen once they are released
You're right
Not the ebo
3CB for example did something with their pbos that you cant even extract them for retextures
@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
Thanks i try it out
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
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.
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?
new update of binarize.exe is missing GFSDK_SSAO_d3d11.win32.dll
Hotfix WIP, thanks for the report
could be steam connection issue
or even steam install issue
is your steam up to date?
try without vpn etc
or with vpn if you can
looks fixed
Great , thanks again for the report
Here is the change log: https://forums.bistudio.com/topic/169362-tools-development-branch-changelog/page-4#entry2976243
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
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?
Did you do what it says?
Yes, I have attempted to start it from Steam many times, after validating, restarting, and redownloading.
This is the issue, I looked and it is in fact missing, however I can do nothing more than redownload and verify on Steam. Same errors no matter what I do on that end.
Have you tried starting it direcly from the tool folder?
Yeah, same error. I am stumped so far.
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.
Bulldozer is Arma3 exe from your game folder
Don't use the "buldozer" that comes in A3 tools
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*
In the A3 tools folder is the buldozer folder just empty or how is it missing?
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.
If it is helpful when I try to verify the integrity via Steam, it says one is not valid and will be downloaded. It does download a small patch, but the error remains the same. It is very bizarre! 
Try install it on different drive
(Arma tools that is)
Thanks for the idea, I will install it on my external in just a bit and see if it works there.
It could refresh the download. Also you could try different preferred download location in steam settings
Same error with an external drive or location. It is extremely odd, I have never had an issue in the past.
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?
I dont recall anyone else having that error.
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
a common problem can be that a3 tools might be unaware of you changing drives. (eg)
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 😵💫
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
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?
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
okay becasue the guides for that all siad i neede eliteness whaich dosent exist anymore. is there a guide for this method?
and tex2veiw as well
eliteness is part of mikeros toolset which still is alive and kicking
texview2 is part of arma 3 tools package on steam
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
What's the distribution requirement for Arma 3 Tools?
You mean it's technical dependencies, like maybe VC Runtime version, etc? Or is this a #other_ip_topics type question?
Seems like the latter, yes. Thanks
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"
I felt like making a way to complex and optimized paramfile/config.cpp library
has been two days in the making
How can I mount P drive on D drive?
Thanks 
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)
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.
Can Anyone help me with Blender And Arma tools pm me?
You can just ask the questions here
Or at #arma3_model ,public questions and answers can help others as well.
I would suggest adding a readme, compiling instructions and usage examples, to help people figure out if it's something of interest to them.
Otherwise, your library may be going to waste
would this be the correct place to ask questions about creating a new rcon tool?
Anyone else having this issue? Moved to windows 11 recently so I reckon that might be playing a factor
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.
Did already but no luck on that front, guess for now my best bet would be to look into pboproject
I'm getting a "I8N failed to create keys"
I haven't been able to find any info on that error beyond a single mention of it here #arma3_config message
Did you reinstall Arma 3 tools after you moved to win11?
Yeah
did you remember to 'play' the tools once in order to set the registry?
the best place on this discord server i suppose @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.
hes using the following specifications. http://www.battleye.com/downloads/BERConProtocol.txt
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
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 ^^
should i paste the code so you can see ? probably would explain it better 😄
just found my code 😄
oh really ? care to share your magic 😄
well.. something of that... but yeah wouldt hurt if youd show me yours
HEMTT tool could do it
pboProject also has a cli to do that.
hello where i can have malden 2035 open source
A) no crossposting (#rules )
B) not the right channel
C) You can not have them
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
Mikeros tools have the ability to convert them back into a config.cpp
Hemtt probs does too
i need something i can use as a command line in order to include it in a DLL. I never heard about Mikero tools programs taking arguments
I ned to unbinarize config.bin, not to extract the pbo
Is there any documentation ?
You don't need to if I understand the point. Just use https://community.bistudio.com/wiki/diag_exportConfig
I need to locate the corresponding pbo for a file. I don't see how diag_exportConfig can help me
Anyway i found the solution. CfgConvert does the job
Oh I meant CfgConvert not BankRev, sorry
You said you need config.cpp from config.bin, to get all config, to do something? If that's a no, that's a beyond my understanding, though
Oh no i don't need all config, i just need to parse all CfgPatches in every config file to determine the topology of loaded mods so when i want to play a song, i can easily locate and extract it. I'ts better to do it by parsing every config file because this way, i know exactly the path leading to the CfgPatches
exportConfig can export all CfgPatches without extract all config or PBO?
Yes but i need to know in which config file is defined each CfgPatches, so when a CfgPatches contains a addonRoot parameter, i know the path leading to this config file contains data for THIS addon
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
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
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
Sounds like you want to read pboprefix property of pbos to find the correct one faster
pbo prefix properties ?
Hmm, very interesting, i never checked this. I will go take a look and see if it does gives me the solution
PboPrefix can also be used in engine to get a list of all files in it, https://community.bistudio.com/wiki/addonFiles
And you can get a list of all prefixes, https://community.bistudio.com/wiki/allAddonsInfo
it's not exactly what i need i think but i'll keep it in mind
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 ?
actually, i think you're right, that's exactly what i need, thanks 🙂
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
Didn't see Bohemia Interactive folder, thank you for telling me
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
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
Some addons have CfgPatches with addonRoot inside which tells the engine that any subfolder is owned by another addon.
No that's not how that works.
CfgPatches is irrelevant for trying to resolve file paths
Yes, i figured i have to read pbos prefix to find the appropiate pbo ^^
Unfortunately, i coded this audio engine in c#, but it's fine, i figured it out
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:
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.
Mikeros tools should work fine for such files.
@dawn palm any idea what happens there? 👆
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...
👍
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.
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)
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.
Hi community - Disclaimer - I am not the best when it comes to explaining things to others. So please forgive me. - What is explained here is subject to change (this tutorial will be updated accordingly). - When a tools update is available (on main branch), after having installed the update be su...
That guide looks largely fine
When you get to actually making mods, either pboProject (from Mikero's tools) or hemtt (standalone) is highly recommended for the error checking
Addon Builder has almost no error checking, and so the error checking occurs when the game crashes in startup (or models fail to render, etc.)
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.
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?
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)
About the registry stuff
I don't actually remember when that stuff got set
There's one of the installers or setup steps that does it
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.
@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
run arma3p from mikeros tools
and install them with the all in one installer
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.
so this indicates that for some reason mikeros tools do not install correctly
@dawn palm do you have any advice on how to debug this?
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...
Is there any way to use the tools in linux? I can't accept the license agreement when I use WINE
:(
my tools are linux based
@dense seal , apologies. i assumed you meant addon builder and it's friends, better to be more specific.
I'm trying to use the Publisher tool
You can use steamcmd to publish on linux, https://github.com/arma-actions/workshop-upload/blob/master/entrypoint.sh
Nice to know but that also seems horrendous
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
Proton should be default since June for anything that does not have native Linux binary on steam
Note: This was released a second time on 7/01/2025 to fix an accessibility regression. A new Steam client has been released and will be automatically downloaded. Accessibility In Big Picture Mode, added an accessibility settings page with UI Scaling, High Contrast Mode, and Reduced Motion options. Learn more in the announcement and provide feedb...
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?
hm I can't seem to get it working
It launches then immediately closes/crashes
Oh wait publisher is working now, I just can't open A3Tools(?)
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 😄
ah fair, well thanks for the heads up
@glossy inlet do you know of any pbo manager for linux perchance?
what's a pbo manager? extract? pack?
our tools have makepbo and extractpbo. we have no guis
and even if we did, which desktop would you suggest we write it for?
hemtt, command line only. Does it all.
Can even binarize via proton.
yeah i'm too much of an ape to not have a gui unfortunately
then you will fail in your modding adventure.
Technically if we are gunna say ape for things here, the less technologically advanced option would be using the tools in a shell, not a GUI.
Translates text through api, free api is set to default testing.
It might be possible to make an automatic chat message translator out of this, so that each player gets a message in their own language.
https://github.com/tokyoshitt/translator
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.
splendid
very splendid
The c# algorithm to decode wss sounds cannot decode this sound "A3\Sounds_F\vehicles2\soft\shared\add_layers\Rain_01_EXT"
if i'm correct, the provided c# algorithm can only decode mono 16bits wav files
What provided algorithm? You mean this: https://community.bistudio.com/wiki/WSS_File_Format#C#_code . Not entirely familiar with the conversion itself, but seems to be fine at sample conversion level.
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;
What if you increase the range before negating it? Like so:
```csharp
double asFloat = Math.Abs((int)srcSample) / 28.12574042515172;
why div 28? what sort of witchery is that?
Yes, its working this way
That's propably bohemia way to encrypt their song ^^ They are shifting the sample to make it unreadable without knowing the shifting value
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.
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.
I will ask myself for ever, why people don't just open PRs anymore 
It's a completely different project using HEMTT's Rust libraries, not a fork of anything from grad's paa code.
I've also made several PRs to your projects in the past, one literally 9 days ago, so let's be chill
im searching for a working download for the poseidon tools. any idea?
for which Arma/purpose?
i found an alternative, thank you
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?
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.
please no crossposting
I use Open Group's features to update and install mods from the workshop directly
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
I have my own web panel for server management. And mission pbo's are drag&dropped into that. I guess thats half automation.
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:
- Convert paa to png
- Change the size via image magick
- Convert png to paa
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.
I am using also a web panel -not mine cause its dev is frozen- ArmAServerManager, and I can click/click to upload the file, but the goal is to skip this effort... since as soon as I export a MP PBO... I will 99.99% upload this file on the dedicated server, what else could I do with it.
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.
Will try soon thanks 😊
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 make sure to start A3 tool laucher once to accept stuff and make it write path to reg
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:
launch not from search
launch from folder
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?
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
I'm happy to change if there's a better alternative. I installed MinGW a few years back and stuck with it
Most people on windows use Visual Studio (as does the Game itself)
Visual Studio is free nowadays
Ah, in that case I am using CLion, but I could install MSVC
Isn't CLion making use of MSVC to build anyway?
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
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
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
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)
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?
Not that I know of. I've always used DependenciesGUI.exe for that 🙁
Set generator to use it
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..
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
Or use KK’s test tool
I mean if Arma could detect it in code
I don't know of a way so there very well might not be one
I could probably read ETW events... ugh no
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
https://stackoverflow.com/questions/77040874/using-gflags-show-loader-snaps-with-visual-studio
@glossy inlet
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) ?
"Show Loader Snaps"
I’ve spent too much time with cmake internals lately 
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
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?
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.
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?)
Yes there is a LoadFailure ETW event,
Which contains the name of the dll that failed to load. Which would then be the dependency
Ah, I see what you mean. This is what you meant earlier by mixing the runtimes. That makes sense
But I assume currently people have to copy stuff in to game folder, is that correct? do they do that?
I don't think I ever needed any dependency
Right not to load extension it searches all addon folders until finds a matching name and loads that?
Extension itself is handled by game.
Dependencies of extension is not
Sure, but it on a callextension it searches all addon folders?
All mod folders
I have no idea, sadly, as my base DLL is static + I'm adding my directory to the dll search path prior to loading python, effectively bypassing the issue. The first DLL may obviously be located in the mod's folder
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.
But I'm not sure if its actually needed, I don't remember anyyone evver requesting that
Extensions are closing on 15 years? People have been managing without so far.
It could be that anyone who actually gets to having a DLL that uses dependencies either:
- Already knows how to bypass it
- Thinks it's their fault and never asks here about that 😅
Does extDB3, ACE's dlls, and don't think CBA has any? cover the "majority" uses?
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)
https://learn.microsoft.com/de-de/windows/win32/api/evntrace/nf-evntrace-enabletraceex2
It can be configured to receive and filter events, and send them to a consumer function that handles them live.. But dang this setup is a pain. Not worth it
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?
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
negativo
but if you explain what you might need to know may be the info can be provided?
like is it just file paths
Well, my audio engine will not work with creator dlcs
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
is it external thing?
yes for my audio engine ( a c# dll)
that's what i expected ^^
@glossy inlet probably can verify my assumption here
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)
Just ask.
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
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
No time to tell especially I just started my shift. You still need to tell what you got so far and the ultimate goal
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)
@gaunt raft what type? prop/object, weapon, vehicle, gear?
Thats props. Just parts of building like floor, walls, stairs, etc.
-
Get A3 sample models and check the prop/object sample + extract a basic model pbo from A3 itself or some community mod for the config setup
-
Text tutorials
https://community.bistudio.com/wiki/Mondkalb's_Addon_Tutorial
https://community.bistudio.com/wiki/Mondkalb's_MultiMaterial_Tutorial
https://community.bistudio.com/wiki/Building_Configs
https://community.bistudio.com/wiki/Arma_3:_Creating_an_Addon -
Video tutorials
https://www.youtube.com/watch?v=v7cdG2sc0zk
https://www.youtube.com/watch?v=qZoI7f0ApSI&list=PLpqkCjhP2qY1ChOfC7d3R19owiq1nUSQq
https://www.youtube.com/watch?v=GxGIgurkzW4&list=PLbyLM76MffqwN3IpgZ63WOhuyNBFZIhd9&index=7
Thx u so much
ya he has actualy got it going aswell
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
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
I definitely cannot, i tried with an very simple dll and the game crashes
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
There is no reason for the game crashing because of your DLL.
Have you tried with a simple program that manually loads your DLL and tries calling your functions?
Honestly, this sounds like an omission from your side
There is even a link for writing extensions in .net at https://community.bistudio.com/wiki/Extensions#C#_3
(sure, the link seems to be broken now, but the fact that it was there means that it's working for other people)
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
Have you filed a ticket at https://feedback.bistudio.com/ ?
That's the easiest way to have your problem fixed
Not yet, that's the reason i'm asking if there will be a support for .NET
Again: there IS already support for .NET
click on the link
If it doesn't work, file a ticket for that and the situation will be fixed
(sure, the link seems to be broken now, but the fact that it was there means that it's working for other people)
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 thatLoadLibraryies 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
i'm pretty sure i haven't forotten anything
KillzoneKid has made a c# code ?
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
Code that does LoadLibrary doesn't need to be in C#. All it does need to is to emulate what Arma 3 is doing
(after all, A3 is not in C# either)
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
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.
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
Fair enough 👍
Seems like you did your part. Now let's see what the devs can do about it
@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.
WTF. The versions shown are [File Version] and [ProductVersion]. Where is RvExtensionVersion supposed to appear?
I tried your code, unfortunately it doesn't work for me
Actually the fact that it is not working is very weird
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
do you guys use the Giesecke thing or the 3F DllExport? you should use the latter for .NET
Giesecke is for .NET Framework
Well I used neither as you can see above. But my guess is Giesek won't world unless you host the CLR somehow
yeah you should use the 3F one
i generated it with Release and i grabbed the correct dll. the game doesn't crash anymore when i use callExtension but the dll doesn't echoes the output and i don't get anything in rpt file
You are using the right arma mod folder name etc ?
This shows basically my entire setup: https://imgur.com/a/YAM5e7R
the dll doesn't have to be in a mod with the same name, the dll can be in Arma 3 folder
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.
Well, i launch the game like 50 time per day so i don't care about turning battleye on and off ^^
It’s only loaded when you can callExtension unless you have same name as some other (system) DLL
SQF-VM still is a thing that can be used for that too
Cool. I didn't even know 🙂
That is about .NET Framework.
I assume Aryes specifcally omitting "Framework" means he wants .NET Core (later renamed to .NET)
.NET Core sample can be found here: https://github.com/arma3/RV-Extension-Examples
I know it works, I've used it for a couple projects up to a few months ago.
We don't do any .NET specific support, because we don't need any.
Crashed trying to call RVExtensionVersion
But I cannot see why because I don't have your DLL and debug symbols.
It prints RVExtensionVersion if it exists.
If the function doesn't exist (because its optional) it prints File/ProductVersion.
Did I mistype? Is it not written correctly? #arma3_tools message
RVExtensionVersion != RvExtensionVersion
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
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;
}
}
}```
Try The RVExtensionArgs variant.
The script command, gives a error code that might tell in more detail what's wrong
I'm not a .NET guy but don't you need <PublishAot>true</PublishAot> to force the aot compilation?
Or send me the DLL and I'll tell you
i checked this parameter for the solution in Visual Studio and it added <IsAotCompatible>True</IsAotCompatible> to my file, probably that's the way my version does it
I doubt? I think that just indicate that your .dll is compatible with nativeaot.
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.
Here is what it says
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 ?
hmm that looks normal
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
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.
My pictures earlier show the folder structure, and also my commands: https://imgur.com/a/YAM5e7R
hmmmm now i see the issue, indeed when you publish it includes everything properly but i don't understand why its not doing it when i build
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 🙂
Great you got it working. Hopefully any dependencies you run into are nativeaot compatible.
I made a C# Native AOT Arma 3 extension template about a year ago. It’s missing some features, but it might still help:
https://github.com/VainoKarppi/ArmaExtension
Arma 3 Extension Example written in .NET 9 NativeAOT - VainoKarppi/ArmaExtension
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.
It's because building and publishing are two different things which product slightly different artifacts in .NET
Publishing will run more steps within the underlying MSBuild targets. This is what you should be doing for any .NET application. It's a misconception to think that building is sufficient for a shippable
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.
Me too, i haven't touched c# since engineer school, i restarted programming in c# in 2022, i still have some to catch up ^^
i'll take a look at it
That's what i do when i finish a program but i didn't know dllexports could fail because of this
For the reason I described 😅
Different things happen when building vs publishing
I'm surprised this works actually. I thought reflection didn't work with AoT apps which was one of the reasons why source generators came about
Well it would work for the code present at compilation time, e.g. part of the assembly?
NET 10 improved AoT support a lot, so reflection works much better than before. By NET 11 it should be even more reliable. Source generators are still useful, but some of the earlier limitations are finally being fixed.
Reflection is usually runtime rather than compile time
That is good to know, thank you. Source generators were a pretty good addition to the language that really streamlined expensive reflection operations but it's good that we can also use reflection in places that weren't previously supported
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 😄
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
Ah you were that guy working on the Eden multiplayer thing.
I haven't heard anything about it so thought it was abandoned
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
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
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.
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
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
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
never give up when you have a good idea, even if it takes years
Can't seem to find ExtractPboGui with mikeros allinone installer. Was it removed?
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,
Thanks, mikero
Started working on this project again. Fixed a lot of stuff, added new features, and it should now be much more compatible with Arma, especially with parameters and async handling. In case someone was interested about it before. You can check how it works in the examples inside Tools/base_test.sqf
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.
RIP visual basic
Didn't even know that was a thing 😂 I'll see if I can figure it out today + the other missing new features
Hi guys, has anyone encountered this error when trying to update a mod in Arma 3 Tools?
Let me know if you figure out a way. I didn't spend too much time on it because .NET only exposes methods/functions. Seems like there would have to be some extra alt getter method calls on the arma-side of things. And even that is a bit sketchy to work with
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 😄
Pushed the changes now to main branch now
Does unmanagedcaller work for variables? I thought c# couldn't dll export variables?
Sure it can if you just have the memory pointer.
Guess I need to read up on c#. Looks like exporting a function to me.
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
I believe this is the first thing I tried. Your example above is what I was also thinking but just dropped the idea figuring it was too much testing work to make it worth my while atm
basically you need an intermediary of some sort
That is the part I don't get? Arma expects to find a variable, not a function at that exported location right?
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?
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.
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
VisualBasic ... a lang nobody ever needed
Feature flags is not a function.
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

https://github.com/dotnet/runtime/issues/93936
Here is a good thread I found about the c# limitation on dll exports, if someone wants to continue researching
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
https://github.com/3F/DllExport/issues/24 Yeah no.
Certainly seems doable, but someone would have to do it 😄 As always with open source projects
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
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
I was able to get it to work too:
https://github.com/VainoKarppi/ArmaExtension/commit/7e061d2d033e8b9af09eae20747ef176fbb470e1
We have that Extensions sample on Arma3 GitHub, it would be nice to get some pull requests for more samples there
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 )
@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;
}];```
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
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.
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.
Ah.
I would've thought the group members are first deleted, and each trigger the EH. And then the whole group goes away
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?
the group members are still in the game, but not in this context, because I can access them by using get3DENSelected "object", but doing units _entity returns empty array
(_entity isEqualType grpNull) returns true
You are saying a lot of things but you're really not helping me further
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
That is what I said/asked here #arma3_tools message
Ill try to provide you a better sqf sample
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?
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
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 {};```
The eventhandler is not fired for the units inside the group, but only for the group itself.
So your message can basically just be shortened to "Yes" ?
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)
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
Yes.
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
Another issue is, that if the group has 2 units, the event runs 4 times for where typeName == OBJECT
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.
not for me
My test is just
add3DENEventHandler ["OnEditableEntityRemoved", {
params ["_entity"];
systemChat format ["TYPE: %1", str (typeName _entity)];
systemChat str _entity;
if (typeName _entity isEqualTo typeName grpNull) then {
systemChat format ["UNITS: %1", units _entity];
};
}];
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
It is definitely more useful if that is guaranteed, yes, (the "expected" post-order traversal).
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🤷♂️
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
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?
Yeah, did encounter the 0,0 issue when I tested before.
Oh hell
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
And you would have gotten away with it too, if it weren't for us meddling scripties
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
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?
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.
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 🤔
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?)
Would be preferred. Wasn't expecting such fast reaction to this matter 😄
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
Thanks! No rush, the workaround seems to work just fine too
@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
Regarding other wiki links, yes, I think there Razers repo and one other one I found on github would be even better examples https://github.com/blake8090/arma-extension-dotnet
https://github.com/arma3/RV-Extension-Examples We have a whole repository for all kinds of examples, already linked to by the wiki
Oh that is good to know.!
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?
Nice! Look pretty similar to mine, but just using cpp instead of 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.
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
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)
Kind of... whether Arma interprets the C++ files' syntax in a different way compared to the conventional C++ compilers like GCC and MSVC
I've never seen variables or properties defined within multiple lines like here
My VSCode's C++ formatter extension messed about with my mod.cpp file and it got my curiosity
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
Sorry, it's not an extension, forgot to clarify
Aaaah... just ignore that file extension 😂
It has nothing to do with C++ 😄
Ehh?
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
Oh fun
You know what's funner? Reforger's Enforce Script using the .c extension instead of something like .enf 🤪
... I have to stop questioning everything for the sake of my own sanity sometimes
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?
If you're just after a config change, only pack the config into a PBO and load both PBOs
That makes more sense. Thank you
because the syntax mostly matches, so cpp works with existing syntax highlighting tools.
Has anyone encountered this?
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.
Is the binarized P3D being packed?
Use more words, then maybe the translation makes more sense. Your previous post didn't make sense either #arma3_model message
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.
@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?
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.
https://github.com/BrettMayson/bisign but now part of hemtt
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:
>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!
You'll get better messages out of hemtt
Yeah it works in some contexts but not others. Probably some secret Windows sandboxing.
Huh no, that key was just invisible to bisign for some reason. Whatever, made a new one.
Praise be HEMTT
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).
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.
Any crash logs or errors you're getting? I published an update for my mod <24 hours ago without issues
i dont see anything, it just dosent open
Hm. What OS are you running?
What's the easiest way to move my P: drive to a different SSD?
Move the folder that contains it to a different drive, and update the paths in whatever tool you use to initialize the P: drive
If you currently have your P: drive active, you might have to restart your computer or otherwise remove the virtual drive to move it
You can just unmount it through A3 Tools, no?
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
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
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
You can check in the Arma 3 Tools settings
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. 😄
probably more a steam support issue
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?
Does anyone manage to install a P Drive on linux ?
whatever its equivalent of virtual drive should work
P drive can technically be just partition too
preferably empty one though in case of anykind of accident
just make a p: directory symlink in dosdevices folder for wine to see it
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
wrong bit depth perhaps
perhaps
either way gruppe adlers converter worked so i should be fine, thanks for the response
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.
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?
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'
I DO
I have been away from modding for a year and forgot some stuff. I am attempting to pack a simple edit of the Samples Heli, and receiving this error, below. I have changed all paths, so I am not sure what the issue is. P drive is good, no major changes so far to the Sample.
https://drive.google.com/file/d/1Oa-XlaDRzr9jyb3Th4iPv_0vNSU1lZu1/view?usp=drivesdk
Remembered something Goat told me ages ago, deleted proxies in Blender, that part is working now.
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 %?
So heres one for you guys can the arma community be trusted with open source projects?
As long as you can't convert/use it for "life" -> I think so 😄
Normally if its open source they can technical monitize it anyways
Whats the project you are considering going open source ?
my multiserver rcon tool
epm rcon?
I would just opensource it if you arent bothered to maintain it and put it on github
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 😛
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) 😛
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.
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?
Which biprivatekey does hemtt tool use when running hemtt release ? I can't figure it out, does it generate private keys on the fly?
it will generate one, https://hemtt.dev/commands/release.html
Everything you need to build Arma 3 mods with HEMTT
thanks, so this private key is never saved and only used once per release?
Correct
@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
what? never stopped you from open sourcing or from ripping someone else off?
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 ?
it does
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
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
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
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
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
Why use bans.txt instead of BE?
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
ah
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
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?
I created a simple Excel Calculator for Arma Weapon Ballistics - it is designed to tweak/ balance Weapon values in modding, but can also be used by players to determine how to use the weapons. This is not only very usefull for tweaking weapon data itself, but also usefull to determine the elevati...
@normal wigeon
oh no I already dm'd him 🙁
bans.txt is guid and ban.txt is puid, use both and profit
yea and random.txt is for anything you want
or thisismynewbansfile.txt
as i said you have have any name for your bans files
Does my code calculate correct I'm very newbie on this game
#skip
Is there any code, or is it just the ai image?
Have code
https://merger.anteriam.pl/
noooo the site is gone ;-;
it was a merger for arma modlists ;-;
Guess you gotta do it manually now
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.
Does it open and then hide in the system tray of the taskbar?
About half the time it will start, but be minimized to system tray. I then need to click show in the right-click menu to get it to open as normal
Nothing in the task bar, but steam launcher will say it running.
you can use my extension, i think still works the merge func
any hope for firefox support?
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...
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?
I literally exploded
Arma language support in Atom v2.2.0 has been released https://atom.io/packages/language-arma-atom featuring new commands and BI functions as well as CBA functions
Hm, using textures in TGA doesn't work for me
When Oxygen wants to convert those, I got error 22
Are they 8-bit per plane?
16 BPP .TGA's won't work. Substance tools tend to emit them.
Ah, that might be it
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?
Mikero Tools paid version of his tools have this feature.
It will stop some people from extracting the pbo, but it is not foolproof.
It only works on shitty toolsets
@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 :/
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.
@smoky halo i understand this i just think its a bit "Meh"
lol
but anyways good work 😃
@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
@radiant wagon thats an intresting consept
That's kinda how mikero does it
Thus you can defeat it with notepad and a replace ;)
or just unpack it on a linux
;)))
its a anti retard protecting
tools update too https://dev.arma3.com/post/techrep-00027
lol
@last sedge huh?
sos bro tagged wrong person lol
oh algoods g haha
Would asking an extdb2 question here fall under this channel or another?
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.
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
Sweet. I can now join this elite club of toolmakers. https://forums.bistudio.com/topic/188794-configgenerator2/ 😃
@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.
@vivid condor find somebody to fix that tool for you ^^
:\
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
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
whitelisting via google spreadsheet that sync via executable
and i dont compile executables
i mean how does the server know who is whitelisted?
whitelist.txt
is that engine behaviour?
BEC
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
hmm hack bec?
well its not BE its BEC... so...
and its serverside so theres no ID or something to ban anyway
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
maybe no one ever suggested...
they have that nice sheduler system that could do it
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
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
@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
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
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
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?
@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
well i dont know your code ^^ obviously sounds like a bug...
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
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
Ya i just want to make sure its secure since itll be running on the server.
@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.
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
Anyone know if/where there's a .net wrapper for Mikero's depbo.dll?
Ask Mikero....on Skype
yo @scenic berry that fking cool
@scenic berry nice should speed up callExtension development times. shames its c# :/
FreeLibraryAndExitThread(selfModule, false);
^^ noob
anyone interested in running javascript (nodejs) via an extension?
there is no .net wrapper. mikeros API design is not really suited for that btw
re jigged the extension so it can now run C#, Javascript (NodeJS) and Python https://github.com/maca134/armaext
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,
fine for me
@orchid shadow: thanks, that should work. I only want it to verify uploads aren't corrupt.
hi, does anyone have a use for a Stringtable maker ? (csv, xml and ini compatible and converter)
There is quite a few, more can never hurt :)
Do any of them connect too Google's translate API to do automatic translations into all languages desired?
|- 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```
hello all
@prisma dragon do you guys happen to have some documentation on ODOL that you want to share? 😉
what do you want to know?
how this works for example https://community.bistudio.com/wiki/P3D_Lod_Edges
what is so difficult about it?
that stuff is mostly empty
since v70 it is ulong instead of ushort btw 😉
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
just let that stuff empty
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.
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 :>
here's my current progress: https://github.com/KoffeinFlummi/armake
you really want to binarize p3ds yourself?
half of the arma engine is used for that^^
^^
here's my apollo project @smoky halo http://puu.sh/of1Kn/c766d6889d.jpg
thats my model 😃 i am so Proud
your first binarized model? congrats 😃
and my shitty texture 😃
lol
go flummi!
proxies are still included as faces, but here's a more complicated model: http://puu.sh/okqlT/24567398a9.jpg
Whats that? Reminds me a bit of a M249 but... idk
mg5
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?
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
i see. thanks for the insights!
what about MLOD->ODOL->MLOD? is the back-conversion too incomplete or not precise enough too?
odol->mlod should be easier than the other way, it's just not a priority atm
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
oh. yeah you can't use that to verify since a lossless recovery from odol to mlod isn't possible
i dont mean directly via hash or so, but for example using dep3d from mikero to extract selections or other data
@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
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.
cmake that shit
😛
ill get in there at some point and make it all nice and buildy on any system
you can pry my makefile from my cold, dead hands
cmake make files are way better
it can generate makefiles, visual studio projects
any thing
pretty much
@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
Does anyone know how to make a skin for http://www.gameready3d.com/3d-Model-010416TRUK-Detail If someone could teach me how or tell me that would be awesome!
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
pretty neat 😃
if you are willing to share (i think your licenses suggests that), it could be useful for @wide cedar
had a look at it yesterday - KoffeinFlummi's armake project looks quite promising
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
@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 ^^
well what would you do differently?
well that would be c++, not c
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
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
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)
well it would help to directly use the leaked BIS source code which is C++ 😉
that's a perfect example of what i don't want 😛
i'm having trouble reading that anyways
yeah of course that needs to be simplified but it would help 😃
I have a feeling they wouldn't be too happy about that
no
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?
are you referring to the inertia stuff?
yes
that would certainly be helpful
ok 😃
i just have this atm: https://github.com/KoffeinFlummi/armake/blob/master/src/p3d.c#L371-L374 ^^
inertia is a matrix btw 😉
and here is the rest of it: https://github.com/KoffeinFlummi/armake/blob/master/src/p3d.c#L400
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
😃
i did model config reading over the weekend, so i should be able to actually use the right thermal variables now
getting there: http://puu.sh/oxvy1/11b4b4fc1d.jpg
Jedistyle
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)
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
added a pull request 😃
sweet, gonna take a look once i figure out these uv coordinates
do you understand how uvs are compressed?
yes
at the moment, it seems the issue isn't with the uvs themselves, but with the way i add points
@wide cedar did you forget to upload a material.h to git?
Oh yeah, turns out I forgot to add those
I pushed them now, they're still WIP anyways
@prisma dragon who do i rob to get featured in them spotreps, i wanna be famous.
@orchid shadow ?
spotreps are for arma3 updates
SITREPs he meant probably 😛
@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 😉
well first, I can give you the variable names that BIS use for this stuff
subSkeletonsToSkeleton = input.ReadIntArray(); skeletonToSubSkeleton = input.ReadArray<SubSkeletonIndexSet>();
so items is subSkeletonsToSkeleton
skeletonToSubSkeleton is bonelinks
ah, so i was right; len(bones) = len(bonelinks)
while items reference bonelinks
sweet, that'll make things easier
sweet, i'm going to take a look at that once i got this mg4 working fine
well yes I did that too, but I just submitted a new PR too 😉
oh, I don't see it
oh you PRed to yourself
ah shit
I am not fluent with GitHub ^^
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)?
need to check that stuff myself. But for me a skeleton is a tree of bones ans subskeletons are subtrees.
quite tricky. need to get my head around it first
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
do you have plans on adding support for island binarization and packing? 😄
not at the moment, as i have absolutely no experience with that
@smoky halo Have you tested extracting the skinning from ODOL's?
is there an alternative to squint available these days? (sqf/fsm checking tool/static code analysis)
There's an unreleased one that we see teaser screenshots for about every year. 😉
@dapper pivot can you be a bit more specific please (author/source) 😃
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.
Arma Intellij Plugin - Version 1.0.0 - posted in ARMA 3 - COMMUNITY MADE UTILITIES: Arma Intellij PluginCurrent version: 1.0.0 (First release)
Index
- Introduction
- Features and Images
- Feature Spotlight
- Overview Video
- Planned Features
- Download
- Source Code
- 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...