#arma3_tools
1 messages ยท Page 38 of 1
you better only edit it in when you ping me, I'll see it anyway but you won't annoy me ๐
very nice with all the different function types covered ๐
Cool, rust seems quite nice
Cheers!
thanx @faint salmon. And, btw, mentioned to Rob your worth paying a lot more money๐
Rofl, thanks @dawn palm ๐
I really don't know Linux much, but if I were to test my arma extension on Linux, what's the easiest way to make a test setup? Just install Ubuntu on a VM, install Steam and arma 3, then try on a dedicated server?
๐ค
Oh, seriously, I can install Ubuntu just from Microsoft Store?! ๐ต
can you run Arma server in WSL?
yep, testing my stuff written in .net core on Linux
If that weird stuff works, your extension definitely will.
You require windows 10 up to date and you are good to go
We tested Frontline on WSL2 just for kicks a few months back and it was working okay ๐คท
@cinder meteor note that WSL2 works quite differently than WSL1
It's shipping a modified Linux kernel (Microsoft Linux - lol, it's officially a cold day in hell) instead of trying to work with a vanilla thing
If I recall correctly WSL1 didnโt even support native 32 bit binaries
And they were playing the "let's reimplement all the syscalls" game :)
WSL or docker works quite good for testing
However AFAIR WSL2's support for NTFS is abysmal (speed wise)
with docker now using WSL2
Or so I heard
but its so easy to just wipe the WSL2 for simple testing so for just trying out your extension WSL would be enough
otherwise docker would make it easier to make reproducable containers
WSL2 is just a Hyper-V VM-ish
In WSL it was cool to have a native access from the windows explorer to the Linux partition . But as they virtualized everything now this is not possible anymore
WSL2 is just a Hyper-V VM-ish
Yeah, thatโs it
which sucks for some use cases
such as high mem processes
or running inside KVM machines on non Intel
Definitely
its nice that they're adding GPU acceleration and stuff though
LXD also added a bunch of hardware passthrough recently
the future is promising!
Indeed, did you ever imagine that one day Microsoft would have even spent 2 minutes trying to implement Linux on windows ?
Honestly, I never did.
I'm still shocked, give me a break guys xD
We tested Frontline on WSL2 just for kicks a few months back and it was working okay ๐คท
@glossy inlet I just remembered that it actually was a Windows arma server, run with Wine on WSL2 on Windows ๐
And yes, it worked! ๐
a windows VM which ran on a linux VM?
Vm-ception
its nice that windows is adopting container support as well
in 2004 update it can even do process isolation instead of the hyperv overhead
even works with process monitor tools which is great for troubleshooting
...if your computer is "ready for the 2004 update" which my laptop sadly isn't (I can't do the windows update yet) :(
looks at the date
Don't worry, in a year MS will have invented time travel a hundred years forward!
I know that will happen because... eeh... time travel!
But the "2004" got me confused for a while, the first time I saw it ๐
The 2000 problem
so released in 1904?
WSL or docker works quite good for testing
I've got Arma server/HC implementations in docker on my GitHub, if needed.
It's only small improvements made over timelf's version though.
The compose config is probably more valuable overall:
https://github.com/Spoffy/Arma-Docker-Compose
I've got some more improvements to both that need pushing really though, those versions are a bit out of date.
Docker-compose I've found to be pretty great, if you need a server and a handful of headless clients, or just to manage several servers at once. They all share the same mod folder on my install, and the same docker image, so there's basically no disk usage impact or maintainance impact to having more servers.
Only downside I've found is that entering steam guard codes when an actual server executable is updated is a bit frustrating, but only 5 minutes of frustrating.
Brettโs startup script for Docker is quite neat, it automatically starts with mounted mods and their keys
๐ and headless clients should you want them
does the engine load/parse all bisign files? or only look for them when the server requests one for a bikey? anyone knows how it works?
it would be easy to check using Process Monitor, https://docs.microsoft.com/en-us/sysinternals/downloads/procmon
set filter to check for access to anything ending with .bikey
I haven't booted my Windows desktop today yet but I can check later on
note that Process Monitor will inject some kernel thingies that will trigger battleye to refuse startup so you have to reboot before battleye or similar anticheat tools will let you play again
on linux you can check with strace, grep for anything with .bikey
either you'll see a file load during start or once someone joins
well i mean more in the sense does the engine cache the data (so it can be exposed via sqf)
checking for file access when exactly bisign (and if bikey on client happens) is still interesting. running procom quickly
so seems:
- client also loads bikeys (probably for local host server)
- loads on game start. bikey before pbo. bisign right after. (dta folder first then addons)
- seems bisign are read again during runtime (maybe upon/after joining a server)
- once or multiple times? i.e. first join or every join?
probably each time when joining a server to compare server bikeys vs client data. will try to verify later today
also forgot to mention the engine looks for bikeys in:
.\arma 3\keys
.\arma 3\expansion\keys
.\users\NAME\keys
So, i dont really know where to ask this. I guess this is the right place so here we go.
I m searching for a "addon" that allows me to have a tcp or upd port for data transfer between server and internet.
Basically, a socket. But for linux
i could find a github repo, that had that, but only for windows
https://github.com/Tirpitz93/a32s
This is the repo i found
What are you trying to do?
Is this the right place to ask about extension (.dll) making?
I have an extension I'm writing (in C#) that needs to be called frequently to export data. It works, but it is slower than I'd like (simply calling it takes at least 1ms). Considering what it does (opens a file, writes a line, closes the file) this seems exceedingly slow. Is this an inherent limitation of extensions or is there a way to speed it up?
Profile what you have. Create an "echo" extension first (returns what you pass to it) and check how fast or slow it is. Then add functionality and check what part of your code makes it slow
So extensions shouldn't be that slow? Is the time cost of calling an extension (assuming the extension does nothing) known? I just want to make sure I am not doing something wrong with compiling the extension that might be making it slower.
@hollow crag file operations can be slow, if you are calling them in the same thread as Arma and frequently then this is not a good way. The call to extension is normally as fast as call command provided you return immediately. Everything else is your overhead introduced by running the extension itself. Create a worker thread and process passed data asynchronously
@stray galleon I never even thought to try using threads, that'd work perfectly! In fact, wouldn't I be able to spawn a worker thread during the first execution of the .dll and then simply pass it the stuff I need it to write each time the extension is called? The thread should be persistent as long as Arma is running right? I'll have to partially rewrite the extension to get it to work like that but it should become orders of magnitude faster since all the Arma thread will need to do is send the data to the worker. I'm gonna give that a shot and see if it works.
Yes, that is a good solution. If youโre using the same file just keep it open as well
@scenic canopy Good idea, thanks!
It's also worth checking output buffer size. If it's too small, then it will flush(write to disk) too often. In your case it currently flushes every time it closes the file. You can just keep the file always open and increase the output buffer size, it will make the extension call much smaller on average.
I would try that before trying to mess with more threads.
Also... Just time your function without Arma (simulate a write to disk yourself) and check how long that takes. If it turns out that your function is simply slow then do as KK said, create a background thread
Is the time cost of calling an extension (assuming the extension does nothing) known?
My Python extension that translates the arguments and return value from and to SQF (and does nothing, in its simplest form) can be called roughly 200 times every 3ms (meaning it takes 3ms to call it 200 times). An extension that doesn't translate the arguments (and does nothing) should be even faster
@cinder meteor @karmic niche Thanks for the ideas.
After rewriting it to use a worker thread to handle the file I/O and streaming the data to the file instead of opening and closing it every time (dunno why I ever thought that was a good idea lol) I have gotten the execution time of the extension down to 0.0015ms. That's several orders of magnitude faster. Thanks so much for the help!
is there any alternative to moveObject for wrps? (besides manipulation via TB itself/export from TB)?
moveObject does not/no longer updates the paths for LAND classes and as result the engine wants both p3d references in the wrp
So I have an idea of yet another extension which bridges SQF with a good programming language (C++ most likely)
The extension function is a coroutine, which returns string to SQF and suspends. And on SQF side we have something like this (in pseudocode):
while (true) {
_result = call extension ...
if (_result == "end") { break loop};
call compile _result;
}
Does it make sense or not?
Also I am not sure how to marshall all data types. I think string, number, bool are fine. Perhaps groups and objects can use NetIDs?
And yes I know that there is Intercept, let's not discuss it please.
The extension function is a coroutine (...)
Does it make sense or not?
Yes, it does, that's how it works in Pythia and it literally uses python coroutines to do that ๐
That is what extDB does
Its called polling, and its pretty much very ineffective as you are constantly calling the extension..
Just use extension callbacks to tell the game when its done
Those have been added only like 2 years ago dedmen, it's too early to use them
AFAIR what Sparker wanted to do was to be able to freeze the extension's execution to get some additional data from SQF and then continue its execution so the callbacks won't help you much, I think
The above doesn't look like that though
and even there, just do a callback to ask for additional info.
๐ค thinking of it, i need to start writing an SQF-VM extension for arma ๐
Do me a favor and write an Enscript-VM extension ๐
still no enscript assembly
so no enscript-vm for yu
a little bird needs to tweet to me about that and the extension is close to being done in an instance
but otherwise i will just try to immitate
which will not be of any great help ๐คท
What do you mean by "enscript assembly"?
for a good reproduction of how it works i need the following informations pretty much:
- What are the concrete instructions used by the target language (eg.
ADD_lrINC1...) - How does the scoping works (when are what variables available for whom)
- What about call structure etc.
for SQF, most of that was simple
Enscript however, is another thing, where i would need way tighter relation to the actual enscript language to replicate it properly simply because even the slightest difference probably could make a huge difference
but i also could be wrong
and the compiler just does fancy magic
while the underlying system is literally dumb as bread and a collection of various hashmaps that work fancy ways to map methods to strings
did not looked into dayz modding yet
so i do not even have any idea besides the syntax
which obviously is not telling me much ๐
I'd love to start learning Enscript for that new game that will be using Enfusion technology, that's never been officially announced, and is totally not in the works, but sadly my interest with playing with zombies is around zero (or in the negatives) so even though I own DayZ I could not have forced myself to start modding it ๐ฆ
personally i enjoy DayZ
but it would never come into my mind to start modding it
soooo ... i am more or less in the same position
plus even sqf-vm ... i have not played arma for like 3 - 4 years in a clan and on public servers? 1 year, maybe 2
Just use extension callbacks to tell the game when its done
No it's not what I wanted to do. I wanted to call my extension, and in extension code I would write gameplay code for instance, which would occasionally need to call game SQF code synchronously . Callback queue is asynchronous thing, it's a queue.
So to sum it up, from point of view of writing extension code, game is synchronous to it. I ask to do itcreateUnitfor istance and it does it right now.
So, think of an Intercept alternative which is native to the game ๐
your solution is also not synchronous
I'd love to start learning Enscript for that new game that will be using Enfusion technology, that's never been officially announced, and is totally not in the works, but sadly my interest with playing with zombies is around zero
me too, I actually learned a bit of Enscript and it's pretty cool. But I can't force myself to play a game which promotes to letting other people down or lie to them, instead of cooperating :/
you also have to wait till the scheduler gets back to your script, to poll your extension again
callbacks are also processed once per frame
but they do the "polling" in engine, making it much faster and more efficient
sure sure, but I explained already why armas callback doesn't really fit what I want. Well I could do it with them but it would mean that extension coroutine must wait at least one frame each time SQF is called
but it would mean that extension coroutine must wait at least one frame each time SQF is called
and how is that any different than your loop method?
You also have to wait till your next loop check
with callbacks you have to wait till the next callback check
what's the difference?
Difference is that I can make lots of calls to extensions per frame
and you can also trigger lots of callbacks per frame
Ah you mean if, while you get the result of the callback, you have a additional request right away?
of course
just add that in your callback code
_result = send data to extension
if _result == have another request you need to do for me
do the other request
loop inside your callback code until all requests are fulfilled
bonus is, you never poll your extension, while it doesn't need to, as the callbacks take care of that
yes but I want the extension code to be actual replacement to mission flow SQF code, it must look nice, without me passing things like 'call this SQF code and when you are done call this on extension side', it must look like
// C++ below
// Any mission flow or whatever code
floor magic = calculateMagicNumbers();
// Whenever I want to call SQF I want to do it easily
// No idea yet how to format or convert values yet
string unitID = CallSQF("createUnit", vector(pos, type, ...));
// At this point in reality the coroutine has suspended but it is transparent to the mission
// flow code, we just continue as if nothing has happened
registerUnit(unitID); // Whatever other logic
So think of an Intercept which doesn't rely on questionable manipulations with function pointers and such
Word of caution: unless you're doing lots of stuff in C++ and have few calls to SQF, it's going to be slow
Yes I understand
For the case of my scenario it's 95% of code not related to actual arma game
๐
like... commander AI logic and similar things
Also I don't think it's going to be that slow. the SQF code instead can be formed into bigger functions so that we don't have to call single SQF operators (and thus waste time parsing data on these small commands). For instance instead of just creating unit, it can create unit and assign a loadout to him.
How slow was it for case of Pythia @karmic niche ? Did you do lots of SQF calling from Python side?
Also, what if I need to pass object ID into extension and back? Does netid work well or were there some unpredictable things about netid?
Well, AFAIR it literally was the same as making another callExtension call
Didn't really test it THAT much, just saw it was (expectedly) roughly the same
callExtension call itself if pretty lightweight compared to generic SQF cost
...meaning that i was able to squeeze roughy 200 calls within the 3ms, due to me translating all the arguments and responses from/to Python/SQF objects
but these calls were doing useful work, weren't they
it wasn't only parsing data there and back for nothing
or was it?
I don't remember. i think I was usually working with "echo" functions, meaning that they returned the same values as were passed
But as of now, I really don't remember what was tested. it was over two years ago, I think
...python is also not fastest thing of all, compared to C++ ๐ค (perhaps it will be faster)
Yes, definitely. But you know, you can do the same benchmarks as i did ๐
These were my calls that i was doing:
https://github.com/overfl0/Pythia/wiki/Scratchpad
And these were the results:
https://github.com/overfl0/Pythia#performance
or did you get object ID
I didn't really implement much if it. I assumed that the only things I can pass in and out reliably were the basic structures (see table in the link above) [+ NIL]
it must look like
yeah and using callbacks prevents you from doing that how?
I don't understand
using callbacks will work same as your while loop constantly polling, just be more efficient.
I don't understand the problem
You suggested adding additional extension request to callback code which is not comfortable to work with
Ah you mean if, while you get the result of the callback, you have a additional request right away?
SparkerToday at 4:11 PM
of course
DedmenToday at 4:12 PM
just add that in your callback code
That's what I was replying to
but you only write that sqf side code once
so if I call an extension from per frame handler and use the arma extension callback mechanism, the call back will be performed at this frame or next one?
next time the callbacks are processed
your eachframe check also only runs once per frame, and you need to wait until the nexttime eachframe handlers are executed
Ah I see
I'd think callbacks are executed before perframe handler
so next frame
...python is also not fastest thing of all, compared to C++ ๐ค (perhaps it will be faster)
Actually, maybe @nocturne basin could do the same tests in C++ with his value translation library? (forgot the name)
but I don't see how your "check every frame" variant is any better? that also only runs once per frame?
but I don't see how your "check every frame" variant is any better? that also only runs once per frame?
it polls my extension in a loop until extension is done or decides to 'yield' or suspend willingly, so extension can request multiple SQF calls within one frame
Well moving the poll into callback instead of doing it eachframe, your extension can say "I want to do stuff, please poll me"
that way you don't needlessly poll every frame, but only when the extension needs it
addMissionEventHandler ["ExtensionCallback", {
params ["_name", "_function", "_data"];
// ... do stuff
"..." callExtension "..."
}];```
There ya go
coroutines using extensioncallback
Actually, maybe @nocturne basin could do the same tests in C++ with his value translation library? (forgot the name)
https://github.com/X39/sqf-value
and yes, it can easily parse stuff from arma to cpp and back to arma ๐
Well moving the poll into callback instead of doing it eachframe, your extension can say "I want to do stuff, please poll me"
that way you don't needlessly poll every frame, but only when the extension needs it
but I can't do multiple SQF calls from extension code in one frame, that's only real difference
you can
I don't see why you couldn't do that?
its literally the same as you proposed, just more efficient
What if if my extension code needs the result returned from SQF code right now in further program flow
addMissionEventHandler ["ExtensionCallback", {
params ["_name", "_function", "_data"];
// ... do stuff
"..." callExtension "..."
}];```
There ya go
coroutines using extensioncallback
shhh
All the problems you bring up would be the exact same problems with your proposed loop. I guess you fail to understand me
now you have a loop to poll the extension until its done working.
My proposal is to have a loop to poll the extension until its done working.
EXACT SAME THING
Difference is.
You start the loop each frame
I propose your extension to tell the game via callback "please start the loop, I have work to do"
So my proposal you don't actually start the polling loop, if the extension doesn't need anything
in your proposal, you poll every frame even if there is no data needed, wasting performance
well, the callExtension with a simple request 'do you have work to do or are you suspended for this frame?' is pretty lightweight.
But to actually put data into SQF callback queue so that our extension is polled next frame the extension must implement some free-running thread I guess, or what else will trigger it so that it calls game to be polled?
Yes, I assumed initially that you wanted to not do infinite extension poll loop, I misunderstood you.
addMissionEventHandler ["ExtensionCallback", {
params ["_name", "_function", "_data"];
// ... do stuff
"..." callExtension "..."
}];
vs
// onEachFrame
private _result = "";
while (_result != "end") {
_result = "..." callExtension "...";
call compile _result;
}```
the upper really is better though
better for what exactly? @nocturne basin
I am not sure if you comment on same thing as we discussed
the extensioncallback variant is better compared to calling the extension over and over again
with the only additional limit imposed being that ~100 max callbacks
Dedmen suggested to use ExtensionCallback only to remove the infinite loop poll when no work needs to be done. Then to use the infinite loop poll when it must be really done.
As I understood him at least.
or more: redesign it like so that you tell arma "execute this code" and then provide a callback
pseudo incomming:
void prepareCallback(string sqf, promise)
{
array.push(sqfcallback)
rvcallback(sqfcallback.id, sqf);
}
void returnCallback(int id, string result)
{
array.get(id).promise(result)
}
void somemethod()
{
// ... do stuff
preparecallback(...)
}```
yes, well, it's not very convenient, that's why I think that a coroutine approach is best because I just suspend the coroutine and return to it later
because I won't need to prepare callback and promise and etc
there is no difference
I thought doing work in a seperate thread was the sole purpose of your extension?
To speed up stuff?
just that the calling instance is at a different spot
you just add a proper request to the method-mix
instead of "guessing" every frame that work might be available
i think there is a missunderstanding going on here though
I thought doing work in a seperate thread was the sole purpose of your extension?
To speed up stuff?
Other threads can be employed when needed, but main purpose is to call SQF from extension synchronously with the game engine, at same frame
...then there could be another thread for some heavy things, but it would need to synchronize with the extension's coroutine I think ๐ค which would ask game to do things.
imho: You just simply overcomplicate it.
Why exactly? Looks like simplest approach. Except coroutines are not in C++ yet but they will be in the future. Basic idea is quite simple. ๐คท. Stack Overflow used same approach in his Pythia extension.
Simplest approach is Callback EH, not that loop-thing you do there
Send msg to Ext, call Arma back when it's done. Nothing else.
No idea why you need PerFrame precision anyway.
@karmic niche was the CallbackEH even a thing, when you made Pythia? ๐ค
Thought so
Yeah, it wasn't
intercept also wasn't as cool as it is now
I appreciate the fact that BI saw Intercept's potential and assigned one of their employees to the project ๐
No idea why you need PerFrame precision anyway.
@wind elm
To write all code in C++, except for rare cases when it must interface with arma, in a synchronous way. If I do it how you suggest, for instance if I want to setPos on a unit, it will be called next frame, who knows if the unit is still alive at next frame or is it deleted. Any asynchronous or delayed thing is bad.
uhm
Yeah, okay, hf and gl.
I still don't believe that the Ext return will be in the same frame, but okay (ignoring the overhead of your method at this point)
I still don't believe that the Ext return will be in the same frame, but okay (ignoring the overhead of your method at this point)
What do you mean?
CallExtension does its thing and returns in same frame, isn't it?
Then it would have the same result with Callextension
+iirc what you just do, is maxing out the CE calls
(iirc 100 per Frame)
So you just simply waste "Performance"
ah is there a limit to how many I can call per frame?
Yes
Calling function pointer returns an int. This is the number of available slots in the input buffer left for this frame after your call and can range from 99 to -1. The buffer is processed and cleared every frame and the maximum number of slots that can be filled per frame is 100. If you are planning to call back with more than 100 results per frame, make sure your extension retries if it receives negative int, which means the buffer was full and your call did not succeed. Ideally suited for callbacks from different threads, but if callback is initiated from the calling thread, the EH will fire on the next frame of game simulation. Needless to say, the "ExtensionCallback" event handler needs to exist before any callbacks, otherwise the data will just stay in the buffer. Removing all "ExtensionCallback" EHs clears the buffer as well as mission restart.
So you just simply waste "Performance"
if lots of code is computation and not arma code (like createUnit, setVehiclePos and such) then the cost of marshalling data should be dwarfed by the gain of pure C++ speed ๐
I am not going to do use the ExtensionCallback, this is not in my idea to use it
just callExtension
Missread that part, you are right
Anyway, you still waste ressources with the looping idea
Here is my initial idea from yesterday:
So I have an idea of yet another extension which bridges SQF with a good programming language (C++ most likely)
The extension function is a coroutine, which returns string to SQF and suspends. And on SQF side we have something like this (in pseudocode):
while (true) {
_result = call extension ...
if (_result == "end") { break loop};
call compile _result;
}
Anyway, you still waste ressources with the looping idea
I lose somewhere to win by not doing calculations in SQF. SQF is extremely slow compared with anything.
It is, but worth spamming callExtension? Doubt it
It's like having a function, that calls another function constantly for an answer, instead of event-driven stuff.
SQF is pretty slow.. but I think your constant callExtension polling and interfacing will kill all your benefits
That's the point
event-driven stuff.
well I don't want event-driven stuff, events are not a solution to everything
I'll try to make SQF a bit faster maybe next week
well I don't want event-driven stuff, events are not a solution to everything
But having a loop is? Naahhh.
Just another Thread in Arma. What if that Thread get's delayed?
Like if another functions (for whatever reason) hangs?
SQF is pretty slow.. but I think your constant callExtension polling and interfacing will kill all your benefits
Again, guys, it's only a question of ratio of how much computation I do in extension VS how often the extension must call actual SQF. I believe that gains can be quite huge for our case, where we do insane amount of AI calculations (strategic).
Or too many other Threads use up the 3ms (or however the number was)
only trying out will tell
But having a loop is? Naahhh.
Just another Thread in Arma. What if that Thread get's delayed?
Did I ever say 'thread'? It's a coroutine.
His loop is not a "thread" Dscha
its unscheduled, it will just freeze the game until its done
even worse
How is speeding up calculations in C++ worse than calculating same thing in SQF?
I have same reaction to your reaction ๐คท is there something not clear?
How is speeding up calculations in C++ worse than calculating same thing in SQF?
@cinder meteor โ๏ธ
Oh, edited.
It's NOT the issue, that you offload stuff to the extension, no idea where you get that from ๐ค
Anyway, you asked for thoughts, answers were given to you.
well... Dedmen said that in my idea the coroutine runs until its done with its things and thus blocks main thread.
You said that it's even worse than (what you thought was) making a new thread ๐คท
No it's not worse, it's just not related, I can still create another thread to offload things to it when and if it's needed. But for some gameplay code which I'd prefer to run in main thread and do synchronous SQF callbacks it seems like a valid solution. Lots of things can be done in same 3 milliseconds, for instance.
Anyway, you asked for thoughts, answers were given to you.
Thank you, I appreciate them.
Lots of things can be done in same 3 milliseconds, for instance.
And a lot of things (outside your scope) can break that.
e.g. Life-Server scriptingnoobs
3ms don't apply here
"Let's spawn this"
"Let's spawn that"
"Uh, new thread! Must be handled gut"
as you said you do polling in eachFrame

3ms don't apply here
Well it's used in SQF for 'that's approximately how much we can spare for scheduler time', so I just used it for reference. We are talking about ~millisecond(s) anyway.
I get the feeling, you are trying to optimize more than it is rly needed.
What are the plans anyway? Multiplayer?
Not really, I'm also trying to write as few SQF as possible for things which don't interface with arma directly
Think when I am done with my sqf-vm Upgrade, I will continue with object oriented scripting again
Using sqf-vm to write the sqf out
What are the plans anyway? Multiplayer?
I have no plans really, maybe I'll try to implement it some day just as a proof of concept, to see how fast it can run while (de)stringifying data from arma to extension and back.
Not really, I'm also trying to write as few SQF as possible for things which don't interface with arma directly
like? (not mocking/trying to trick you in any way, just interested)
like? (not mocking/trying to trick you in any way, just interested)
Like this
https://github.com/Sparker95/Vindicta/blob/development/src/AI/Commander/AICommander.sqf
Or this
https://github.com/Sparker95/Vindicta/tree/development/src/AI/Garrison
These don't need much things from the game, it's pure computation.
Should probably post my music tool to forums 
Music tool ๐ ?
Oooooh fancy!
Maybe I can actually figure out how to add non-standard music to my missions if you release that ๐
yeah its just put music in, get files out and copy-paste config
Ye 
Arma second/multi screen applications always lacked some certain features...
For example the ability to control your radio from your second screen/laptop/tablet/smartphone together with a API that can easily be used elsewhere for example on some fancy Rasperry pi cockpit setups ๐
https://cdn.discordapp.com/attachments/558666278957613057/740020788622655488/2020-08-04_03-37-54.mp4
Obviously pretty jank UI for now :U Currently 7 channels, one row per radio. While you can actually only have two channels active per radio
Functionality first, design later ๐
fancy 
@karmic niche can you 3D print a raspberry pi case in the shape of a radio?
@dusky dune can you 3D model a raspberry pi case in the shape of a radio?
Nรถ
faaaancy, reminds me a bit of athena
yeah it'll kinda be like athena
Marker displaying/creating will also be added later I think
but in comparison to Athena it'll be completely open source, I'll take care of pull requests, and I also want to make a android app
Ooooh sounds very nice
I'll probably stream implementing GPS trackers/blue force tracking later ๐
Gonna have to watch that later
Ohh you got it done? Nice!
Does that mean we now get high quality svgs onto the biki about the maps?
I can give you 400+ arma world svgs if you want them ๐
Nah ๐ there used to be a time where I Needed it
I don't think you want 8MB svg's on biki ๐ค
One bug I noticed though, the landmass is a single polygon without holes :/ So if you have dips in the land with lakes and such, that'd look wrong
not sure if I'll make a hole in the poly, or instead just place a water poly ontop of the land poly
yeah will probably place another water layer ontop of land layer
for all the ponds/lower parts and stuff
oof what happened with that forrest
oh, I found out how to optimize forest shapes better than I do currently... Its really too hot to work on this stuff
I mean, are all the empty spots how its supposed to look? Feels like it should just be a single big forest without all these hundreds of tiny gaps
it'd definetly look better without all the small gaps imo ๐
wew
That image looks like something messed up by some Thiscatdoesnotexist AI


https://youtu.be/C8X_92sAsHg Finally a non-magic BFT system :3
Now just need to do show/edit/create map markers
and renaming GPS Trackers ๐
@scenic canopy MinForestSquares= in your config.cpp affects the density of green on the 2d map. I think the value refers to trees per meter
The green are non-orthogonal icons generated at binarise time. Each one individually drawn and filled using bezier curves.
that UI though

It looks so simple, but the pipeline to get to there...
- Marker of class "flag_Germany" at position
- Look up in CfgMarkers and find the icon path
- Scan all pbo's loaded by game and grab their prefix
- Find the pbo with the longest prefix match to the icon path
- Parse the pbo headers and find the wanted file
- Load wanted file from pbo into ram
- Parse PAA headers from that file
- Grab biggest mipmap's data
- Decompress the DXT1/DXT5 data into ARGB
- Base64 encode the image data and transfer to frontend via websocket
- Parse the byte data into a bitmap and display it
But... Tada... All Markers that can ever exist are supported
and if I need for whatever, I can load any paa and display it.
scribbles note on sticky note to never try anything like this and sticks it to my monitor
Also
and if I need for whatever, I can load any paa and display it.
custom uploaded icons for each group uploaded through the application #when
(/s is joke pls no bonk)
The awesome stuff with this project is that I can take so many things I already did.
I use stuff from ArmaDebugEngine, MipMapTool, my Armake c++ port (now moved into "ArmaPboLib"), ArmaWebControl
How does this relate to the Athena mod? Aren't you redoing that work but by yourself?
No relation to Athena mod, besides doing alot of similar stuff
Originally the map and marker display was just a extra feature, not my focus.
But now I'm finishing that first cuz its fun
veeery slow progress ๐
Looks quite fancy already
I love you
dragging markers is from ACE
same as the marker creation dialog and editing markers
I'm just live updating them
I want to create markers in the app tho, but you cannot create like.. side channel only markers.. so I may need to introduce some new commands to handle markers
And ofc retrieving and creating polyline markers ๐
why not create markers based on groups?
createMarkerLocal and be done with it
also, the polyline stuff ... depending on what you are using to create that UI, that can be rather simple
createMarkerLocal and be done with it
Needs to be fully compatible with the ingame markers, editing, moving, all the ACE stuff.
depending on what you are using to create that UI, that can be rather simple
Arma has no script commands to create/retrieve polyline markers. That's the problem. The app UI is no problem at all
Arma has no script commands to create/retrieve polyline markers. That's the problem. The app UI is no problem at all
Well time for you to add them then ๐
The ragged edges on the SVG and this beautiful straight line on the northern border of takistan were a off by one in my edge detection 
If all goes well now, I should have smooth edges and working lakes
Then just turn forest into a single poly for sum performance, and then it should be done ๐

polyline marker support in sqf, yes plz
The worst part in this is the testing, I now spent over an hour to start up Arma, load CUP Terrains Takistan and try to start an export. I didn't even get to main menu yet for various annoying reasons.
oof.. its so much better and lakes work :3. But the top ends 512m too soon and is still a bit wavy ๐ค
I also merged multiple points on the same line together to just two points on the end, filesize for takistan from 22MB->11MB
Oooonn the mountaintops there are mountain height numbeeeeeers sings
Most of the features will be optional, and you can choose with the script command that'll do the export
polygon who'se outlines cross eachother, thank you Altis Limni region.... I don't think I'll fix that... Even on ingame map the outlines are crossing over eachother.
https://github.com/SQFvm/vm/blob/sqc/src/sqc/parser.h#L94-L939
Meanwhile: i am coding some alt-SQF syntax for SQF-VM
Done for yesterday/today, time to go to bed..
Only need to optimize the forest polygons now..
And apparently roads are ultra expensive too ๐ค Makes sense as every road segment is currently seperate instead of one long connected polyline
Is this based on the .emf export?
Replacing emf export with SVG
I remember trying to extract terrain features from EMF (-topography). But the only identifier was the shape and color and I recall that two features shared both. (seems one of collision was that non-bitblt land is white and so is part of the roads that are also drawn as polygons)
Do you only use the line-to EMF commands for the roads?
Your time/bead rhythm is absolutly crasy
Do you only use the line-to EMF commands for the roads?
@keen owl
There is no EMF commands here, this is SVG.
My misunderstanding, I thought you created the SVG from .emf files
No. Writing new SVG exporter in engine
Cool. Are you adding attributes about what kind of terrain feature onto the elements? For example, the lines with contour could then be used as isolines for a 3d representation.
you can export the height map and render a 3d version
I know, have done multiple times. And have needed the contour lines for their own use too, but have had to reconstruct them from the 3d geometry instead.
No. Writing new SVG exporter in engine
@glossy inlet
๐
I remember wasting my time trying to write an automatic thumbnail generator for our missions (that was using SVGs generated from EMFs) and it was a real pain in the :donkey:
I eventually obtained something barely working but it required so much manual processing or (automatic) dodgy workarounds that I ditched the idea
Yeah I want to add some attributes too, for example a height attribute to the countLines(height lines)
But I also want to keep the file size down, but with a script command that lets you specify some export options that shouldn't be a problem
you can export the height map and render a 3d version
@scenic canopy
Is the height map just a texture file? Or is it more effort?
more effort ๐
you have to export terrain heights at your chosen interval and make a nice ascii or image file from it
either in game or from wrp
or did you mean the export format?
Terrain Builder supports either xyz, asc or some other I can't remember 
text format should be easy
A 20kmx20km taken at 5m intervals is 4 million points, if kept at a good accuracy is 16MBytes of floating point numbers or "just" 4MBytes if downgraded to 8-bit range. WebGL in my browser, at least back then, was not much a fan of 4 million vertices and 8 million naively made triangles. I am thinking contour lines would give acceptable quality and look smoother at the same time, with easier dynamic tesselation.
For export I just diag_log'ged something like ["SomeIdentifier", [X1, Y1, Z1], [X2, Y2, Z2]......]
The line length was limited to x entries to prevent too long string.
you have to make the mesh into smaller parts
and load them as needed
three.js has really nice libs for handling terrains as well
Yeah, you are right.. But the my proof-of-concept project died after I successfully flew a helicopter around in Arma and could watch a red sphere mirror my movement in the browser, since I had no end goal for the project.
๐
Yeah, I did use three.js, but this was years ago and I think it was more barebones then
we did a PoC with 3D AAR
At least looking at it now it has waaaaaay more convenience utilities
quite neat seeing someone survive a barrage of fire since he's in a ditch
which would be hard to tell in 2D AAR view
That rather cool. My AAR was only in 2D so somtimes it was difficult to understand the situation which sort of the defeat the R in AAR a bit.
But it was also a PoC and died after I showed to my self that one can store an hour of ingame data for 10 players and 100 AI using less than X Mbytes... (Think it was 5)
@scenic canopy i suppose the 3D AAR was not continued further?
it uses the same data as our 2D AAR so should be enough to replace the map component with the three.js renderer and some basic mesh instead of markers for units
I was thinking about making in-game AAR but no time at the moment.
gruppe adler has a nifty end of mission replay feature, https://github.com/gruppe-adler/grad-replay
interesting 
are there any quality open source config parsing libraries?
Maybe. It depends on the language that you're using
C is the standard interface language, but i'll take C++
I have a cpp file in here https://github.com/synixebrett/config2json
@rough grove I see that you've used my python library in your comparison table (btw. I never claimed that my python lib was going to be fast, it's just a rewritten JS version [Fusselwurm's lib] so that I wouldn't have to emulate JS in python ๐คทโโ๏ธ ).
Could you provide me with the file that makes the library crash so that I can fix it? (although my guess is that it simply ran out of memory, since the file size seemed huge).
Also, why are all the results marked as NA? Do you need anything special? (I haven't looked into the lib for a long time, but I guess that all you need to do is a outfile.write(json.dumps(parsed)) to get your json with it)
Anyone here got some experience with textmate grammars? I'm trying to solve from screen related, basically some known words (builtin functions) are properly detected, however Capture groups from other rules seem to always overwrite this.
What i want is have 1 scope for known functions, and another one for function declaration usage (After call with a capture grup basically)
Another picture maybe illustrates it a bit better. In this case I don't want the call capture pattern to overwrite the coloring the known function already has. Putting it before/after does not seem to matter at all with capture gruops, overriding no matter what
@karmic niche I don't have the files anymore, but I just used a AiO dump and a random mission I had
The NAs were crashes if I recall correctly
I just use that now since everything I do for Arma is in Rust now
That's too bad because the library was working for me, for all the files that I've used it with (and I know that @dusky dune was also using it). If you'd give me a file that was making it crash, I'd be very obliged (especially that it wouldn't make sense for me to time anything since the files would be completely different).
It's especially strange that you had crashes even with small files (which cannot be explained by an out-of-memory type of error) while I haven't seen any.
@rough grove
are there any quality open source config parsing libraries?
it's not open source, and doesn't 'parse' in my understanding of the word, but my subscriber tools contain an api & sdk to get at/alter/modify/tweak/compile/decompile any bis paramfile. the api functions() themselves have remained consistent over past decade, even tho configs themselves contain different additions like array[]+= and the every increasing use use of exec/evals.
your (or someones') use of 'parsing' to convert uiversal c++ syntax in paramfiles to json doesn't make much sense to me.
I actually made a (simple) AiO2JSON converter in NodeJS which is still a WIP, but it does work without any issues. And there are enough use-cases to have it in JSON, especially for those not working in C/C++.
well ... technically, you also can use SQF-VM for that
No way ๐ฑ
Yieas
2020-08-16 12:02:52,062 [ERROR] 1 (:0): Publisher.PublishProgressViewModel+<PublishItemExecute>d__24.MoveNext - Publisher.WorkshopUpdateException: Error updating exception. ---> Publisher.SteamAsyncOperationFailedException: Steam error code: 2, Error code: 1, Error message: STEAM_API_DLL TODO
https://forums.bohemia.net/forums/topic/230449-publisher-error-code-2/
Hello. Im trying to publish a mod on steam workshop, but get this error: I dont had any VAC bans. Upload missions to the workshop also works. Here is some piece of log: Spoiler 2020-08-16 12:02:52,001 [INFO] 11 (:0): Publisher.Steam.PublishingWorker+PublishImplCoreAsyncd__1b.M...
Steam broke ยฏ_(ใ)_/ยฏ
Error message: STEAM_API_DLL TODO
Gotta love them error messages
thats not ours ๐
I never said they were ๐
think i will do a LSP implementation with SQF-VM
should not be that hard afterall
Beep boop android

And a tiiiny bit more android (Yes I crashed into the ground :u)
Anyone here who could help me out in setting up a vscode extension for a language Server?
Arrived at the point where I could use someone who already did that, so i don't have to dive into the docs for that too ๐ ๐
@fickle void maybe? He made the debugger one for Dedmen debugger thingy
shouldn't languageserver be so generic, that there just needs to be one generic "langauge server" extension on vscode side that just connects to server, and the server does the rest?
The debugger runs as a debugging server specifically rather than a language server.
It seems that vscode calling it a "server" is technically true but (at least for the debugger) what it means is you implement a standard interface for the service you are providing, in my case a debugger, and then vscode can run that in a separate process for you hiding all the boiler plate.
a bit of server boiler plate, but mostly implementing an rpc interface
looks quite straight forward, most of my problems with writing my extension was having to remember how to write ts, and having to learn some basics about node js
@nocturne basin theres a useable library for it in c#
pretty straightforward iirc, the actual .ts extension for vscode was like 50 lines
Yeah... Ruled that one out quite fast as c++/clr is not available for non Windows Systems
And thus started coding one myself
Yeah... The actual language Server is separated from vscode
But the clientside boilerplate I could use some help with
clr not available on non windows?
(as right now I am already at the point where I need to attach it once)
C++/CLR
That is different from pure common language runtime
Or more: the native interface
Cannot be ran using dot net core sadly...
And as sqf-vm is c++
Ah
I would need to use different interfacing methods
Wich is quite hard
So i implemented a basic JsonRPC Server in c++ and put a language Server ontop of it
https://discord.gg/5uQYWQu in case one wants to do the boilerplate on vscode side ๐คช๐คช
i suggest you follow the official guide for the extension part
its really straightforward
then use something like this in extension.ts
this is what i used to run a dotnet application, uses standard in and out
now i just need something to do it without installing the whole nodejs package ๐
Hello, Does anyone have any experience using the LODDiagColors for testing LOD Ranges. I have enabled this in CFGWorlds and Also Launched using the Diagnostics exe. However I am unable to get the function working. I suspect it need a command to enable the Visual Changes. If anyone knows how to enable this or set this up correctly. It would be much apricated. Thank you.
only available in internal exe from BI i would assume
Interesting, defeats the purpose of announcing it in the change logs and having it included in the sample data.
it was in changelog?
The LODDiag shader should always be available
but never seen it used
It came in for the Visual Update. I saw it in one of the change logs. Never used it as it wasnt useful until fairly recently for testing
I think its just missing a command to use it
can only find it mentioned in my forum post
That could be what I saw, not 100% sure. Still doesn't explain why its inside the sample data. If that's meant to be configs we can use.
no results in our wiki ๐ค
Ah but for LODDiagColors
"RenderLODs" diag_enable true; "RenderLODs" diag_enable false; diag_toggle "RenderLODs"
but yeah many diag modes aren't enabled in public diag build, yet
that might be one of them
I will try that now.
Not Valid. That's a shame.
but yeah many diag modes aren't enabled in public diag build, yet
@glossy inlet Any idea on when these functions will be released publicly?
late this year maaaaybe
Its on my list, and I'll soon have more time so likely late this year
Ah okay that's fine. I can wait. Thank you anyhow! Any other special diag tools coming soon as well that you could tease?
the other stuff in diag build
I think terrain fps benchmark and something else costmap thing
Awesome! Look forward to using it, May or may not be for its normal intended purpose :D. Thank you.
Probably could use some help tomorrow with publising a vscode extension https://github.com/SQFvm/vscode/blob/language-server/JsonRPC/JsonRPC/main.cpp#L65-L76 ๐๐
whats the most supported or most working IDE for SQF error checking these days?
Just use SQF VM ๐
i tried with VSC. however it seems you have to check each file manually one by one - which is not feasible for large projects
Working on it @vague shard
Sqf-vm with some Script to load everything at least once would be feasable though
If you want to syntax check everything though, arma.studio already checks every file at Start
And has basic Debugger capabilities
thanks i was using it in the past - wasnt aware of updates as it didnt have the auto updater yet
It did have
You probably clicked on "no" though during a message Box asking for permission
The same occured for that Version but as Setup Dialog
I use VSC with the debugger and SkaceKamen's linting stuff
i do too, but its no longer updated, is it?
plus it has couple of issues and limitations (no GV space - so you gets lots of warnings)
I am already trying to implement sqf-vm vscode Language Server as fast as possible
After that, no macro issues or anything else shall exist amymore ๐คช๐คช
the SQFlint is really fragile
one typo somewhere or other issue and it stops working for all files sometimes.
But it's the best thing we have for now. ๐
Can't wait to test the SQFVM thingy
feel free to help out
just got roughly till next week (excluding the weekend) to get it done as, after that, i have to do face university again ...
used SQDev (next to VSC) in the past, but its no longer supported
i cant seem to get my mod to work, every time i compress the file and then decompress it, im missing a great bunch of stuff
like... i lose the files in the file folder
how are you compressing it?
via addon
once i decompress it i only have config and rap
i just use the addon builder
it spits out the pbo and once i uncompress it via bankrev, its missing literally 99% of its files
@rancid anvil
Ah I dunno anything about that
You mean pack/unpack a PBO file?
Try packing with Mikero Tools, instead: https://mikero.bytex.digital/Downloads
its weird because i used a different mod that let me edit it for my personal use, it works fine, once i pack it and then unpack it all of its files and folders are gone
do you want me to send my full mod file for you to take a look? its only like 16.9 MB
i think im packing the folder wrong but idk how to do it correctly
dang.. i got it to work.. but now the thing only shows up in eden editor but not zeus
The vscode extension stuff really starts to get annoying.....
Especially because I do not really do any actual development but rather try to fiddle why vscode is not doing what I want
Okey I'm done with optimizing Road networks on the SVG export, from 7MB down to 2MB for stratis.. roads are stupid.
But the export speed is meh-ish
EMF: 42MB in 1.9 seconds
SVG: 2.1MB in 23 seconds
but thats in debug build so not release performance, but still quite the difference. But 10x the time for 1/20th the size.. acceptable.
Atleast roads now don't lag out TacControls mapview.
And theoretically I still need to optimize the forests.
And with some multithreading added the same stratis export goes down to 5s on 100% cpu load ๐ Finally you can make Arma fully use you CPU
Arma multithreading support confirmed ๐
First production use test :3
The Names look a bit hard to read especially on a small phone display
That is because of the coloring though
Alternativly, a proper Label could be used
yeah, I also just added the outline to it
outline needs to be thicker, and the color is wrong too, that should be a dark blue
Ah oku
and quite some stuff missing still
Definetly looks fancy though 
Makes me miss the old times when I still Played arma...
Though, still hard to read
@tawny pumice
i think im packing the folder wrong but idk how to do it correctly
as mentined to you already, use pboProject. You are wasting your time with addon builder or worse, pboManager. Addon builder eg, cannot re-pack already binarised files.
One more night of work and.. Automatic terrain export, so it now supports every terrain (once SVG export lands in perf/prof/stable)
faaancy
And also support for all marker types/colors/rotations (except polyline)
And of course the same on Android.
And next night will be either polyline markers, or something else, or nothing and play csgo the whole night..
And velocity indicator for GPS trackers, but I don't like this yet.
RIP heli crews
Should've turned on the Forest layer in that video ๐ then you could've seen what happened
And the backend for the notes section.
You can create however many notes you want, each note has a text and you can assign it a GPS tracker and Radio Frequency.
And you get buttons to jump the map view to the GPS tracker, or to set your radio's alternate channel to the frequency.
Idea is to have a "Note" for each squad ingame, so you can keep notes about the squad, the GPS tracker on their vehicle and their radio frequency all in one place to quickly switch and look around. Like a Tactical Control center so to say, where you have the overview about everything and can play a dispatcher :D
The concept isn't that well thought through.. and I have to do some magic such that the UX stays somewhat acceptable.
Embrace the qt
Soooo
The Lang Server powered by sqf-vm works now
(though, no Features exist yet besides the syntax error)
Tomorrow at work, I will implement some additonal Features
Like variable stuff
And if some specific bi monkey indeed gets the #pragma instruction done, those unknown variables will become errors, not Warnings ๐คซ๐คซ
Might also do Config Auto complete later down the line ๐ค but need to be able to Serialize the arma Config first
Added benefit Btw. Config parsing works out of the Box for free too
@nocturne basin as I understand - this is for Windows only?
Nope
Sqf-vm is available on All Platforms
So will the vscode extension be
Wrote a whole language-server implementation base from scratch to keep it Platform independent
Didn't saw sqf-vm for Linux yet
Was available from the start for Linux ๐คจ
Hmm. Will search better. Thanks
No need to
Just head over to the github Page and download it from ci https://github.com/SQFvm/vm/actions/runs/220602628
https://marketplace.visualstudio.com/items?itemName=SQF-VM.sqf-vm-language-server
just in case someone wants to try it out, published the current version (stuff not yet working great though ... so beware that this is still in-dev)

That's why you added polyline related commands? ๐
where is the live-version of that drawing process?
Arma only creates the marker when you're done with drawing
we want moar
we want moar
Inb4 Drawful 3, the sequel to Drawful 2 (obviously ๐ ) is released as an Arma mod!
Well, actually, after That Miller Thing (Super Miller Land - if someone has not seen it yet) i shouldn't even bait people because someone is definitely gonna step in and implement it ๐คทโโ๏ธ
Super Miller Land
what on earth did my eyes just see?
hi,
Is it possible that files signed by (original) armake won't work because of armake? I don't have access to the server the file is being installed on, but move to cli armake from bi's tools is the only change I'm sure happened
bisign files are being created next to signed pbo's so I suppose I'm using it correctly
hmm... deprecated. so I answered my question here.
You can try using armake2 instead of armake โ๏ธ
might as well go all the way to hemtt where the signing issue should it be fixed with its fork of armake2
there's a serious issue with armake2:
the idea of using cli was to make a script and have server admin sign the file before putting it to server, I can't really go teaching people how to build rust sources now ๐
hemtt is available as releases
and for older versions armake2 can be called directly
hmm
or rather, armake2 is exposed via hemtt
you could try with 0.6.1 but some fixes for signatures was made in 0.7.x
but those don't expose armake2 as a cli command if I remember correctly
I'll try it later, thanks. I remember bumping off hemmt for some reason in the past and that's why I used armake
And another half day of work gone into TacControl
Is it already on some git repo?
yeah
Link?
trying to find where I put it
Ah found it, got a bit lost https://github.com/WolfCorps/TacControl
๐๐ Okay
Might Look into crafting a neater ui tomorrow
I'm trying to somewhat keep it Arma style, as you can see on the marker edit menu thing that says "gps tracker edit"
Yes
But legend could be improved eg.
If I find time at work tomorrow, I will change a few things to make it neater
DragNDrop of most common ones for example
And some toggle Buttons with Icons
Yeah that stuff is just from some map sample I based that stuff on. I want to have docked windows with things like layers, and switching channels for markers (so they become transparent just like ingame) and hiding markers from specific players and all kinds of goofy stuff.
And tons of configurability to hide the things that one rarely needs or doesn't need.
Atleast thats the vision
Will See tomorrow how far I get, might provide ya with the ux basics for that then already, so you just need to enable them ๐
And I still need to replicate all or most of that on android app side oof...
All the logic stays the same, but the UI layouts need to be reimplemented for android
Xamarin makes it at least somewhat simple
but if you want to dev on it and try it out, thats a bit hard currently as it uses a couple script commands that don't exist yet, and the map to SVG export functionality that also doesn't exist yet
Don't need to try it to work on the ui ๐ but some indev svg would probably be useful
oah.. our map line paintings at the start of every mission will ascend to a new level once people can draw with their tablets and pen 
And with the API, you can easily expand it to for example have your aircraft instruments draw on your tablet or phone, that'd be neat.
Just switching the UI between the "TacControl" battlefield overview mode thing, and specific layouts/modes for logistics, or vehicle driving, helicopter flying or such...
Would be quite neat
Buying some cheapo Android Tablet
And using it as Monitor extension
dude from my unit literally ordered a tablet last week when I said I'll make an android app for TacControl, now I have to finish the app :u
๐๐
Well... My goals for the sqfvm language Server are more or less done
Now it is just adding Features
Or debugging Support ๐ค๐ค
I think reducing the minimum point distance is not a good idea.. Arma's minimum is 5 meters, I think thats reasonable
Are line commands in dev?
Not in Dev-Branch yet, but soonโข๏ธ
Is there some list for sqf operators output types?
I am talking about eg. Createvehicle only outputs objects
Like literally what the different operators are outputing
Might be able to implement nice diagnostics for the vscode extension one day using that
Catching Problems before they occured
intercept commandlist has what the commands usually return
what they usually return doesn't mean that they can't return anything else tho
@nocturne basin extended filter for supportInfo has return type but it only a suggestion, and is not used by the engine so some could be typos and also some commands could return multiple types mostly by mistake rarely by poor design
Yeah thats the same that the intercept command list has, which SQF-VM already used in the past, so should be easy to adapt
1: function test(arga, argb)
2: {
3: diag_log(format("%1 - %2", arga, argb));
4: }
5: test("sqc", "hello world");
6:
Executing...
----------------------------------------------------
[INF] [L0|C0] [DIAG_LOG] sqc - hello world
[INF] Context droped with return value `nil`.
----------------------------------------------------```
welcome SQC (example with comments showing off the syntax: https://github.com/SQFvm/vm/blob/sqc/src/sqc/ReadMe.md)
soooo .... guess nobody wants a neater SQF that could be generated using SQF-VM ๐
https://cdn.discordapp.com/attachments/508636635513225237/748996781747994744/2020-08-28_22-03-30.png Full map on second screen when flying logistics is awesome :3
Now a neat Tablet is Needed for that, which you can use for stuff
Would be nice if native vr Support was a thing in arma (like... As Alternative to TrackIR)
So that could be rendered directly in the Choppers ๐ค๐ค with fancy Finger Support and stuff like that (#dremz)
Yeah guess I gotta buy some cheap tablet, ingame rendering that.. nope
I have my phone, but combined with missconfigured zoom limits and forgetting the "keep screen on" and forgetting to properly update gps trackers and rerender the map.. that was useless today ๐
I had 4 radio channels, I made the radio control in TacControl for exactly this.. radio control was broken completely and I constantly mixed up hotkeys and transmitted on wrong frequency 
You will Figure it out ๐
Is the rendering an issue because of complexity of scene?
I won't try to render that stuff ingame somehow. Just too much effort.
Just in case someone wants to try out SQC: https://github.com/SQFvm/vm/actions/runs/230185810 (Example again: https://github.com/SQFvm/vm/blob/master/src/sqc/ReadMe.md)
wondering right now ... why is it there is no popBack operator?
I know
But it is less about what is possible and more about consistency
Like, there is pushBack
But no popBack
also no pushFront
evening fellas ๐
playing with sqf-vm in vs code
very nice
only done run task sqf-vm-compile so far, but tis already helping lots
thank you
My macro usage is confusing sqflint
If sqf-vm language-server Was far enough, that would be no issue
oof seems like Arma doesn't even support x macros
yeah no, macro parser seems stupid
nvm, I changed "nothing" and it suddenly works
Nope, I take that back
#define EH_UNREGISTER(name,handler) \
private _eh##name = _oldVehicle getVariable [QUOTE(DOUBLES(TC_Vehicle_EH,name)), -1]; \
if (_eh##name != -1) then { \
_oldVehicle removeEventHandler [QUOTE(name), _eh##name]; \
_oldVehicle setVariable [QUOTE(DOUBLES(TC_Vehicle_EH,name)), nil]; \
};
#define EVENTHANDLERS(XX) \
XX(Engine,TC_main_fnc_Vehicle_onEngineChanged) \
XX(GetIn,TC_main_fnc_Vehicle_updatePassengers) \
XX(GetOut,TC_main_fnc_Vehicle_updatePassengers) \
EVENTHANDLERS(EH_UNREGISTER);
#undef EH_UNREGISTER
Yeah that doesn't work... It doesn't resolve XX properly. Output is just (Engine,TC_main_fnc_Vehicle_onEngineChanged)
Well.... Why should it work ๐ค๐ค
You Pass in the macro string
Is that even valid in C preprocessor?
Yes that's a valid thing in C/C++, and KK said it works in config too
Well... Time to improve upon the sqf preprocessor then ๐คช๐คช
Ah
Or: to use some gcc build Script
#define EVENTHANDLERS \
XX(Engine,TC_main_fnc_Vehicle_onEngineChanged) \
XX(GetIn,TC_main_fnc_Vehicle_updatePassengers) \
XX(GetOut,TC_main_fnc_Vehicle_updatePassengers) \
#define XX(name,handler) \
private _eh##name = _oldVehicle getVariable [QUOTE(DOUBLES(TC_Vehicle_EH,name)), -1]; \
if (_eh##name != -1) then { \
_oldVehicle removeEventHandler [QUOTE(name), _eh##name]; \
_oldVehicle setVariable [QUOTE(DOUBLES(TC_Vehicle_EH,name)), nil]; \
};
EVENTHANDLERS;
#undef XX
this works
http://killzonekid.com/x-macros/ KK has a blog post about it
And a new thing backend ready, task after sleep, make UI. And then buttons in android app to switch landing gear or sling load stuff or switch collision lights or watch my rotor rpm and my barometric altitute
huff
please tell me thats not the VS stuff ๐ฆ
AvalonDock with VS2013DarkTheme
I still think you should embrace the Qt and be a good boy :DDD
Wouldn't embracing Qt (and being a good boy) make it simpler to port the application to Android later? (just asking, not suggesting anything, I don't know this stuff)
I'm building it in C# and WPF and use Xamarin for android app. Meaning I can reuse the C# business logic 1-to-1 on mobile.
Only need to rebuild the UI (obviously)
Is there a document that describes how .bisign files are created (i.e. pbo files are signed). Let's say that I'd like to reimplement signing PBOs myself or implement signature verification. Are there docs available, somewhere?
how .bisign files are created
I mean programmatically, obviously. Not asking for command line arguments to pass toDSSignFile(or Mikero's counterpart) ๐
Thanks @scenic canopy
I've never written a line of Rust code but it surely won't be hard to figure out what's going on there, by looking at the code ๐
Yeah, not that much to generate or sign
armake1 has generator and sign in C as well,
https://github.com/KoffeinFlummi/armake/blob/master/src/keygen.c
https://github.com/KoffeinFlummi/armake/blob/master/src/sign.c
but I'd go for the rust one as reference as it fixed some known issues
but those were probably more related to the pbo creation than the signing so ๐
$"test {"string"} to test {1} or {[1,2,3].select(1)} features of {""""}formatable"" strings! {{ empty btw. gets {} }}" such a nice way to write format expressions in SQC compared to SQF
format ["test %1 to test %2 or %3 features of %4formatable"" strings! { empty btw. gets %5 }", "string", 1, [1, 2, 3] select 1, """", nil]
such a neat thing
@karmic niche , under the covers my tools use DsUtils. I merely make them integrated/easier to use.
I would have gladly passed you code to do so , but don't have any.
I'd also advise you not to write your own because you will be forever playing catchup with bis when they change the formula. This they have done already at least four times.
For similar reasons, although i am sorely, sorely tempted to release my own binariser, i would have to play catchup each time they alter the p3d contents. Which has, so far, averaged 1/ per 3 months.
@dawn palm wrp support?
yes. wrp and p3d are the only two assets I allow bis binarise to get at. It is blocked from doing anything else. Even in a wrp i don't let it access any\where other than the project itself, and won't even let it produce land classes.
30% of my processing crunch is spent either preventing binarise from stuffing things up, or checking afterwards that it hasn't.
Well, the reason I was asking is that I have that pet project of mine - Pythia. The mod that lets you run python code (almost) seamlessly from SQF (terms and conditions apply).
The running python code is currently stored in a directory inside your Arma mod directory but there is no reason I couldn't simply use a PBO file instead of a directory.
The only issue is that I'd have to read the PBO myself because the SQF commands reading files from a PBO don't differentiate an empty file from a file that doesn't exist and, in python, most of the __init__.py files that mark a directory as a package are actually empty. [and also because AFAIR they can't fetch binary data, just utf8-encoded files?]
But now that I think of it. Do I actually even need to check the signatures of the PBO files at all to ensure their integrity? Isn't that done by the engine anyway? (I'm trying to prevent the issue of a malicious user that would replace the content of a PBO after it was validated by the engine, and before my code reads it, in order to cheat).
That's why I wanted to understand how signature checking works.
I know that, in theory, PBO files are locked by windows the moment Arma reads them but, on the other hand, you theoretically can force-release a file handle too (not sure how that would end for the game, the moment it tries to read from it, but I'm assuming a PBO file that doesn't contain any SQF code, just my python files, so the engine itself wouldn't ever need its contents later on)
Basically, the TL;DR and the core issue/question is: is it possible to read an arbitrary PBO file's contents, by an external process, while ensuring its integrity? [meaning that the content that I will read is the same as what Arma thinks it is]
In the worst case scenario I could use my external code to read PBO files just to check for the presence of an __init__.py file (because faking a file presence in a PBO will probably not get you anywhere, as a cheater), and then read and pass the file contents using loadFile (but then I will lose the possibility to load compiled code - a really cool feature that I actually currently use, myself!)
the SQF commands reading files from a PBO don't differentiate an empty file from a file that doesn't exist and
didn't I push fileExists command yet? I wanted to do that.
pbo reading is easy tho, I do that too in TacControl
Isn't that done by the engine anyway?
yes... but depending on what file extension your scripts in the pbo's are, their check might only be delayed
that I will read is the same as what Arma thinks it is
I think you can trust the Arma file locking that far, at that point you are against kernel-mode stuff already, and yeah they could manipulate the pbo contents, but they could also manipulate all the innerts of pythia at the same time
@dawn palm would your own binarise support wrp on linux?
it can. yes. but i am not keen to release it because i will have to maintain it from then on and fix any bugz it has.
it was last tested to produce type24 4 colors. not 5 + normals. it also doesn't support dayz type 25's which have a different road network format compared to arma with the exact same format number (sigh)
@karmic niche . the sha key inside a pbo only verifies the contents of the pbo has not altered. most hackers would extract, fiddle about, and rpack, which would produce a new 'good' sha key.
the dsSignature is only used for mp MP play and only when the server admin enables signature checking (most do). Wen enabled for mp play, the server will not accept either a bad signature,r a missing bisign, or key to verify it with. So if that's where your code's destination is, the engine has already done this checking for you.
Re utf8 you are quite correct, with some exceptions, ALL 'text' (binarised or otherwise) is assumed to be utf8 (byte) encoded. This is one area where bis have maintained some consistency for many, many, years. They do, sometimes, forget this, and some coding think it's dealing with 'local codepage' (winansi for most people). It is notable for instance with most of mod.cpp and some areas of the pbo's header (author, version, etc).
didn't I push fileExists command yet? I wanted to do that.
Wow, well, there is no mention of that command on the Biki so I assumed it doesn't exist. Also I didn't want to bother you with my own personal requests, but if it's something that you already have working then I would be much obliged :)
Yes, i know that reading PBOs is easy, I have my own python library for that ;)
yes... but depending on what file extension your scripts in the pbo's are, their check might only be delayed
Not sure what you mean but I'm talking about storing .py, .pyd, [.pyc, .pyo] files
I think you can trust the Arma file locking that far, at that point you are against kernel-mode stuff already
Not really. There exist user-space programs that let you "unlock" windows files so it's something literally anyone can do.
The steps to cheat with Pythia would be (if you're a cheater, please don't read this, m'kay?)
- Run Arma, let it read all PBOs (and check the signatures? That's when that happens?)
- Unlock the PBO that contains python code, replace with your own PBO containing modified python code
- Connect to MP and let Pythia reopen the new file on disk and evecute its contents (since we're talking about reading the file contents from python and not using loadFile)
but they could also manipulate all the innerts of pythia at the same time
That's further down on my backlog: figure out how to load 100% of a python interpreter from memory and not from disk (so that then it could also be stored in a PBO or a BE-whitelisted dll). Judging by how far I've gone already, I would be willing to ask cpython devs on how to do that and even compile my own custom version of cpython. I've done worse things ๐ (and it surely will look cool on my CV ๐ )
@glossy inlet
the engine has already done this checking for you
See my response to Dedmen above: I'm considering reading the PBO file myself, from python (to read both empty and binary compiled .pyd files - these are compiled python modules, possibly even compiled C++ code compatible with python). I cannot then depend on the engine to have done the checks since my file may be a completely different handle.
the dsSignature is only used for mp MP
"I have a dream" that one day I will submit Pythia to BE for whitelisting and all (~5 ๐ ) players will be able to use Pythia client-side ๐
So i don't really care about SP. I'm talking about MP+BE
@dawn palm
Well, I also realized that there is also a shortcut that I could take, which is "pack the directory to a PBO myself" and then apply some sort of Base64 encoding to all the files and add some special markers that would denote an empty file ๐ค
But meh, that's not really elegant and I've strived for elegance and ease of use ever since I started the project
Release 7.71:
Major update to MikeRo's tools. Many corrections and improvements. Too many to list here. (See individual readme's) . All exes affected. All tools should run significantly faster on most people's PC's.
Latest penguin tarball is currently 7.70
any changes to makepbo that makes this buildable? https://github.com/CBATeam/CBA_A3/blob/master/addons/ee/config.cpp
fails on the scope values last time I tried
"I have a dream" that one day I will submit Pythia to BE for whitelisting
just do the auto whitelisting
Mikero said once he fixed that or was working on fixing it, months ago @scenic canopy
guess I should give it a try again then ๐
just do the auto whitelisting
Still, i don't want to do auto whitelisting if i know that it can be abused very easily, on the client side
Btw I wonder how many native python dlls will have to be whitelisted before stuff starts working with BE ๐
Especially that lots of DLLs won't even get the chance to be loaded if the base python dll doesn't get loaded (because it is not whitelisted)
I don't get the DLL blocking till this day. It does not prevent harmful DLLs from being whitelisted. If I put a DLL with payload into a popular mod and trigger it after I know it has been whitelisted and many people have it that still works.
So it can not have anything to do with protecting the casual users.
If it's to block cheaters from doing memory manipulation then that clearly failed from day one ... There are countless tools available that are not even arma specific to attach a DLL to the game and then use DirectX or what ever to hook onto everything.
So why is BE doing it?
If they wanted to block of on clients (which I could understand) then at least the whitelisting should only happen after the author submits the source of the DLL together with the DLL he wants to have whitelisted
Whitelisting anything after it has been blocked X times seems like a "meh we don't really care, let's just automate this" approach to me.
2.11 made compat
added -B option to not binarise a cpp or sqm```
makepbo Version 7.71, Dll 7.73 "P:\x\cba\addons\ee"
------args---------
-P
-A
-B
P:\x\cba\addons\ee
@cba_a3\addons
-------------------
Warning: PboPrefix.txt and $PBOPREFIX$ (no ext) have been deprecated
Use $PBOPREFIX$.txt instead
configuring with P:\x\cba\addons\ee\$PBOPREFIX$
<adding entries:...>
$NOBIN$:scanning
$PBOPREFIX$ :ignored. Already processed
config.cpp:compiling...P:\x\cba\addons\ee\config.cpp: Rap: eval/exec has unbinarisable sqX
Rapify error```

any input @dawn palm ?
here's the config.cpp, https://github.com/CBATeam/CBA_A3/blob/master/addons/ee/config.cpp
If I put a DLL with payload into a popular mod
yeah then have fun putting malicious dll's into your popular mod :D
trigger it after I know it has been whitelisted and many people have it that still works.
if its a hack BE will still detect it if its whitelisted.
Whitelisted is just meant to fend cheaters off for a while, by delaying them
Id guess its alike a lock on the door, a persistent/pro burglar brings tools to get through the door no matter what or goes through some alternate route
but it does keep the amateurs out
let me know when I can test it again ๐
huff
#arma3_tools message what has happened to this ui?
Its the same, its Avalon Dock
ohh
yeah
got time now (since i just killed a 1L bottle of wine myself ๐ gf already asleep)
where was that link again
think i have some things i can contribute, even if i am not using it
do you have some standalone-debug stuff build in by now?
laptop cannot stand arma ๐
could you send me over one of the SVGs? might implement some debug adapter then first
Loaded from Common.Helper.ParseLayers
For debug data you could just fill GameState, gameInfo contains the worldname.
Its just fed by a json document at start when it gets "FullState"
no solution file
src/DesktopClient
guess this will be fun
This is a full state of my current game. Guess that could just be embedded as json, and be loaded in debug. That would work
But the markers wouldn't render as the paa's are requested from Arma as needed
no worries
will take care of it (unless i cannot stand your code :3)
developing using WPF at work for a while now ๐คซ i know my way around ๐
I'd love if you have an idea to fix my WPF binding garbage without having to create seperate ViewModel classes.
I implement the view logic inside the View classes too cuz that's more convenient. But to bind to a member inside the View I need to do this ugly thing where I set Name="ctrlName" on the UserControl, and then have to use ,ElementName="ctrlName" on every binding.
problem now is that the auto-restore failed for some reason
though ... might continue in PM for further stuff ๐
X39: got time now
Prepare for trouble
X39: since i just killed a 1L bottle of wine myself
Make it double
๐
I know, I know, that's gonna be your Rubber Duck, for debugging
my best work got created being drunk
and i am like 5 beers away from that by now ๐
my best work got created being drunk
Balmer peak for me is more at like 2 glasses of wine though
What is in the mikero tools update, I couldn't find a changelog
Many corrections and improvements. Too many to list here. (See individual readme's) . All exes affected. All tools should run significantly faster on most people's PC's.
@scenic canopy ,
eval/exec has unbinarisable sqX
fixed โบ๏ธ
Mikero, your (I think latest) ExtractPboDos V2.20 and Dll 7.46 creates the $PBOPREFIX$.txt with UTF8-BOM, previously it did it without BOM
For repacking pbo's I always just remove everything besides the prefix from the .txt, and remove the .txt ending to pack it, now I also have to un-BOM it

@dawn palm one step forward, one step back. not sure if I'd blame the tool or not though. P:\x\cba\addons\ee\config.cpp: #includes P:\x\cba\addons\ee\script_component.hpp, but is excluded from pbo
if I add -X=borkbork it works
but without any -X=... it fails
I checked some of my older built PBOs, they had BOM marker as well
so its probably been like that for a while now @glossy inlet
oh sorry, after extract ๐
only have newer versions than that to test with atm 
yeah didn't update in a while
BOM breaks while packing?
I use Ketegys CPBO for packing, and it keeps the bom mark in the finished pbo
ouch
@glossy inlet , kegetys and I 'invented' $pboPrefix$ when we weren't sure what we were looking at during elite xbox BETA (wow). since then the world has moved on: a) to make it a .txt file like any other editable text. You can't associate an editor to anything without an .ext hence the reason for a bit of common sense.
b) the prefix nowadays is not supposed to be used in that file. And ceraintly not the way we had it originally as just a single line with no crlf
the bom stays because the text inside is NOT 'local codepage' or even winansi. it's ut8 throughout to allow cyrllic prefixes as but one (poor) example, but more to say:
Author="I am famous"; in any language and, any symbols, the author cares to write it in. I have zero interest in supporting cbo. We wrote that in a galaxy far away a long time ago.
You can just handle it as utf8 internally, Arma does too. No need for BOM
you can' scrawl cyrillic chars eg without saving as utf8 (or unicode)
my tools accept either.
similarly russian can't scrawl (some of) the european umlats because his 'local codepage' is not winansi
$pboprefix$.txt has evolved as a pbo header properties file. The least useful property in that file is prefix=what\ever
but, even there, what\ever needs to be in utf8 too because ALL file references in windoze are wide char unicode. You simply cannot access some files (or folders) with winansi code pages
@dawn palm should -B have a default exclude list? or calls without -X in general
Can someone Help me sometime, I Need some Help learning how to use Mikeros tools
they have manuals in the installation folder
other than that you can ask specific questions about them on relevant makers channels or if it does not fit any of them, then here or #arma3_questions
Thanks
should -B have a default exclude list?
@scenic canopy , i decided not to because it gets very messy, very fast.
better imho to alert the user to special conditions rather than switch default excludes on him
you can convince me to introduce it.
but it has some kind of exclude since the hpp is excluded ๐
unless I specify a different exclude list
pboProject now has TWO exclusion lists. one for standard, one for the -B option
makepbo.exe will not make a pbo without one.
makepbo.exe will not make a pbo without one.
can you specify? cannot make pbo without specifying files to exclude? or always use the default?
last time i looked my makepbo.exe tool needed an -X specifier of one sort or another.
oh, and btw @glossy inlet , am going to change the BOM so that it is only inserted if, in fact, the 'text' has utf8 chars. (basically >= 0x80)
Thats nice :3 thanks
makepbo runs without the -X
and it filters out hpp for at least the addon I tried
which then fails packing the config.cpp since the include checker fails due to hpp not being present
is it using the exclude list from pboproject by default?
you can test with the https://github.com/CBATeam/CBA_A3/blob/master/addons/ee/config.cpp
Noob question here:
I want to port my windows extension to linux and I'm slowly getting to the point where it almost builds fully and could start being tested.
It's probably a noob question but how exactly can I execute code that will test whether the linux extension worked correctly?
On Windows, I usually was opening the editor, running an empty VR mission and using the debug console to issue callExtension calls to check everything was working.
On linux I can't really run a native client and do the same. What's the usual workflow for that? Start a linux server with a predefined mission. Join as admin and do remoteExec in the console? Is that how I'm supposed to test or is there a simpler/better way?
Note that I cannot really use external programs that will load the .so because I need to test a few hacky things that require to actually have Arma running
you can set the linux server to autostart the mission
Do you require some specific input from ARMA, or just loaded in the process?
just make a simple mission that utilizes your extension automatically
maybe -autotest even works with the linux server? haven't tried that yet
If all fails, you can always start the server with the extension, join it with a client and then use the debug console to remotely call callExtension
You also could use sqf-vm ๐คซ๐คซ
Thanks for the response, guys :)
Well, i haven't really touched that code in over a year so I don't really remember the full extent of features that I'll have to test but I know for sure that I will at least need to get the names and locations of all the mods that are loaded by Arma by implementing my own lsof that will be peeking at /proc/self/fd, much like Intercept and ACRE were doing (I'm not reusing their code because I wrote my own to do the same thing on windows because of historical and licensing issues - Intercept was not MIT back then, I think [or was that even before intercept???]).
So that's why I will have to have Arma running and will NOT be able to use sqf-vm for that ๐คซ ๐คซ
Although it would be tempting to use it for the unit tests ๐
By the way, now that I think of it, I could just start a regular linux arma server and then hardcode its PID and test all my code using /proc/<PID>/fd, instead ๐ค
But I'll need to test it all with the real software anyway, at least once
If you need someway to test the extension while loaded, and don't require input from ARMA, just expose another way to communicate with it, named pipe, etc.
@scenic canopy , you are right. if -X (exclude from pbo ) isn't stated at all it uses the default exclude list from the dll. (this can be 'viewed' by pressing 'use defaults' in pboProject.
it would help if I RTFM !!!!
Hummmmm... ๐ค
Gonna have to update my class parsing library soon ๐ค
https://community.bistudio.com/wiki/import
...and so will @rough grove ^^^
Damn, thats a nice addition
significant improvements to Eliteness p3d displays. (both MLOD and ODOL)
+fixed 'accumulate lod' to work properly
- fixed no 'accumulate lod' to work properly
+added a cut' n paste for various window selects. Fairly major for most people trying to copy file references and named selections
+fixed resize-window to be relevant and now saves the window dimensions for use next time.
+sets NameOfP3d in title bar
+removed horizontal scrollbars when not relevant and re-organised some panels to be more space conservative. Eg more screen for your buck.
+changed skeleton / rvmat extraction buttons to be more intuitive
changes to the dll
UTF8 BOMS are now only present in text files >>>IF<<< the character stream is not totally Ascii (chars < 0x80). Note that WinAnsi (cp1252) is NOT Ascii, it's Ansi (Ascii PLUS European chars). It just another codepage like Turkish or Cyrillic and creates havoc when importing umlat characters (as an eg) into the bis engine. Without a bom windows assumes 'local codepage'. Which is diastrous for a Russian trying to read text from Germany, and vice versa. There is no way, up, over or around, this necessity if you use European characters in your text. (configs. missions, rvmats. $pboprefix$.txt and blah blah blah). It ensures that Russians. you, and the bis engine are all on the same page. Note also, without a bom, it takes longer to read text files because the first thing any decent text editor does (notepad++) is scan the entire file to detect potentially utf8.
Enjoy
Good guy mikero 
Just found out if you have a period at the end of your rtm name, PboProject will crash with no error report. Took me hours to find the problem.
i don't know why it had a period in the name, must've been drunk when i did that lol.
Does anyone know of a Java implementation of the SQF toString? I'm trying to automate scanning some code used by script kids to be able to more effectively defend against those scripts
https://github.com/SQFvm/runtime/blob/master/src/runtime/d_string.h#L49-L99
just convert it to java
thanks
anyone here got experience with cmake and shared libraries?
having troubles getting the language server link to sqf-vm dynamic, not static
add_library(... SHARED ...) or target_link_libraries(...)
@jolly widget , where was the period please. in the filename itself, in a config? or?
yeah ... but the lib file corresponding to the (windows) dll file is not being generated as it seems
or at least it is not found in the output folder
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 14.09.2020 12:32 5072384 libsqfvm_sqc.dll
-a---- 14.09.2020 12:32 16636216 libsqfvm_sqc.ilk
-a---- 14.09.2020 12:32 32722944 libsqfvm_sqc.pdb```
seems to have to do with incremental linking ๐ค
urgh ... no
just that i really have to append dllexport to every bloody class ...
who came up with that stupid "idea"
you should only have to do it to the functions that are actually called into the DLL.
SQF-VM is a wholesome project
everything may be used by some external tool
in this case, i need access to ... well ... all but the frames
that will change the moment i actually create an application using the debugger
only symbols i obviously do not need are those, which are scoped private ... which is encapsulation tho,
long story short: everything that is exposed in some header, is something i potentially need in an external application
@dawn palm in the filename itself like this "AnimName.".rtm
i've been using an old version of pboProject (from 2015). worked fine. tried newest free version today and it fails with
locating Personal Tools2.51 for Arma2/Arrowhead...
no pal2pace tool
BI personal tools is obviously installed and pal2pace exists. any ideas?
missing registry entry for it
you wouldn't happen to know the key off the top of your head?
@dawn palm should know ๐
procmon says it was only reading ImageToPAA path which points to A3 tools ImageToPAA, copying pal2pace into that directory got rid of the error but now it complains about createkey
hah
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ Bohemia Interactive Studio\Oxygen 2 Personal Edition\main
(builds the location of
\TexView 2\TexView2.exe");
\TexView 2\Pal2Pace.exe");
\TexView 2\TexMerge.exe");
HKLM\Software\Bohemia Interactive Studio\Arma 2 NAME NOT FOUND
HKLM\Software\Wow6432Node\Bohemia Interactive Studio\Arma 2 SUCCESS
HKLM\SOFTWARE\WOW6432Node\bohemia interactive studio\arma 2\main SUCCESS
HKLM\SOFTWARE\WOW6432Node\bohemia interactive studio\arma 2 SUCCESS
HKLM\Software\Bohemia Interactive Studio\ArmA 2 OA NAME NOT FOUND
HKLM\Software\Wow6432Node\Bohemia Interactive Studio\ArmA 2 OA SUCCESS
HKLM\SOFTWARE\WOW6432Node\bohemia interactive studio\arma 2 oa\main SUCCESS
HKLM\SOFTWARE\WOW6432Node\bohemia interactive studio\arma 2 oa SUCCESS
HKLM\Software\Bohemia Interactive\ArmA 3 NAME NOT FOUND
HKLM\Software\Wow6432Node\Bohemia Interactive\ArmA 3 NAME NOT FOUND
these are the only keys in HKLM it looked at
after that it looks around in HKCU\Software\Bohemia Interactive\
this made it happy:
copy dscreatekey from a3 to a2
copy pal2pace from a3 texview 2/ to a3 imagetopaa/
it seems to be confusing a2 and a3
a2 tools doesn't seem to have dscreatekey and it looks in the wrong place for pal2pace
was it not recommended to not have A2 and A3 tools installed at the same time?
by whom?
that would be pretty sad if they somehow conflict
installing 2 versions of the same software usually causes issues...
seems a stretch to consider them "[different] versions of the same software"
but in essence they are
as well as Arma 2 and Arma 3 use different versions of the same engine
I think first terrain stuff I made for Arma 3 was with the visitor 3 from Arma 2 tools package
you cannot have a Pdrive: with both engines extracted because the bin\config.bin is common to both but entirely different contents. Most people with multiple game engines have 3 virtual drives.
P:\ =arma2
Q:\ =arma3
Z:\ = dayz.
P:\ is chosen for A2 because some of tools for it are hard wired to only use P:\ (binmakerules.txt eg)
dsSignfiles for A2 and A3 are different. called the same, but different. For a2, you have to download and install DsUtils.exe (there are NO registry settings for this a2 package)
A2 tools use HKLM. A3 uses HKCU. From memory, there is only one registry corruption between the two and again, from memory, it's TexView.
////////////// personal tools for arma2
//////////////
C:\Program Files (x86)\Bohemia Interactive\Tools
binmake
binmake.exe
binarize\binarize.exe
cfgconvert\cfgconvert.exe
CfgConvertFileChng\CfgConvertFileChng.exe
Pal2Pace\Pal2Pace.exe probably not used
BinPBO Personal Edition
DSSignFile\DSSignFile.exe// i choose to put DsUtils.rar here
filebank\filebank.exe
BinPbo.exe
FontToTga\FontToTga.exe
FSM Editor Personal Edition\FSMEditor.exe
FSMCompiler.exe
Oxygen 2 Personal Edition\O2Script.Exe
\MatEditor.exe
\Oxygen2PE.exe
sound tools\wavtolip.exe
\wavtosss.exe
texview 2\Pal2Pace.exe (identical to above)
\TexMerge.exe
\TexView2.exe
Visitor3\Visitor3.exe
*/```
// all of it is wow64
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
BIStudio (all path and exe keys)
Binarize\path
BinMake\path Warning: path has incorrect appended slash
CfgConvert\path and exe keys
dsSignFile\path and exe keys
// bis only provide a rar package for dssignfiles etc (DsUtils.rar).
//It has no registry location or default place to put it
//>>>IF<<< you set the registry above to where you installed it. PboProject will find it
FileBank\path and exe keys
TextureConvert\Main WARNING changed on a3
I then build \TexView2,\Pal2Pace and \TexMerge from main
Bohemia Interactive (main == path to)
arma3\main to engine.exe
BinMake\main correct personal tools location (no appended \)
BinPBO Personal Edition\main
FontToTga\main
FSM Editor Personal Edition\main
Bohemia Interactive Studio
arma2\main engine.exe
arma2 oa\main engine.exe
cwa\main
Oxygen 2 Personal Edition\main
// I build:
\\TexView 2\\TexView2.exe");
\\TexView 2\\Pal2Pace.exe");
\\TexView 2\\TexMerge.exe");
Visitor 3\main
Sound Tools\main
////////////////////////////////////////////////////////
SQC:
1: x = 0;
2: diag_log(x++);
3: diag_log(x);
4: diag_log(++x);
Outputted SQF:
1: x = 0;
2: diag_log x;
3: x = (x + 1);
4: diag_log x;
5: x = (x + 1);
6: diag_log x
Output:
[INF] [L2|C0] [DIAG_LOG] 0
[INF] [L3|C0] [DIAG_LOG] 1
[INF] [L4|C0] [DIAG_LOG] 2
``` hehehehe
SQC is really nice
diag_log(x++) should print x not x+1
Outputted SQF:
doesn't match the actual Output at the bottom though
Outputted SQF would print 1,1,2
but your output shows 0,1,2
guess something in the assembly to SQF is wrong of SQF-VM nope ... just forgot to add the new stuff to functions too
sooo, with the fixed version again: SQC is really nice
That's great, now convince BI to implement it in Arma 3 and I'll start using it ๐
I got it implemented in the sqfvm language Server, which means Auto compilation as you Code (not with autocompletikn etc. Only syntax highlighting and reall the compilation thing)
Tho if bi would pick it up, I would appreciate that obviously
So... it's like CoffeeScript, but for SQF? ๐
Not sure what coffeescript is
So cannot answer that question ๐ ๐
But it means that using it is as simple as using vscode and flicking a switch to enable it
AFAIR it was something that was starting becoming popular before typescript became popular. Basically you wrote your stuff in coffeescript and then "compiled" it into JS ๐
Ahh
Yeah, pretty much that
Syntax check on the go inclusive too obviously
So no reason not to use it ๐คช๐คช
Still need to write some forum post tho ๐ค๐ค
https://discord.gg/eP4QgTr come and join the Club @karmic niche ๐๐
b-but I don't know SQF ๐ (like... seriously, I don't know it! ๐ )
So what? You Code in sqc ๐๐
No, I code in Python ๐
<insert shameless plug about my Pythia Arma extension here ๐ >
Actually, screw it! Here it is ๐
https://discord.gg/Pp6ac56
ALWAYS PLUGGING YOUR OWN STUIFF
Yeah X39! You should be ashamed of yourself! ๐
that's a nice icon
Do you mean the Pythia one?
@glossy inlet pls answer this important question
yes
@karmic niche SOMEONE LIKES MY RETARDED LOGOOOOO IM SO HAPPYYYYYYYYYYY ๐
its 2deep4stack
<swear word but actually female dogs> dont know bout my oracle of delphi in Python colors
Can someone help me? When I'm trying to binarise my wrp with pbo Project it always crashes and there is no really important error in the log. Here are the last lines of the log. I tried to change the p3ds , but it still crashes with the same output
4:16:17: No simulation: land_workshop_05_f
4:16:17: No simulation: land_powerline_03_pole_f
4:16:17: No simulation: land_powerline_03_pole_f
4:16:17: ca\plants2\misc\misc_stub1.p3d: Model has different version of physx serialization. Model: 0x03030400, current: 0x04010100.
4:16:17: ca\plants2\misc\misc_st```
So SQC translates javascript into SQF, right? Does it support objects then?
Or maybe I misunderstand SQC. Sorry I wasn't following it much.
@silk warren you show the BIN log. You need to view->outputs instead
So SQC translates javascript into SQF, right? Does it support objects then?
@cinder meteor sqc is translated to SQF. There is no JavaScript in the equation. I just mentioned it because I was comparing sqc to coffescript
Sqc is the language that you write in, not a tool
The Moment hashmaps Land for sqf tho (Unlike location, those which do not need to be deleted), I will add json syntax tho
problem that's holding up hashMaps is that object as key doesn't work ๐ข big sad
@sly skiff from Torndeco
@dawn palm
""E:\Programme\Steam\steamapps\common\Arma 3 Tools\Binarize\Binarize.exe" -targetBonesInterval=56 -textures=P:\temp -binPath=P:\ "chernarus" "P:\temp\chernarus""
"binarise crashed"```
but I wanted objects ๐ข
Why ain't objects working tho
@silk warren there's 1,000 reasons why binarise crashes and no=one, so far, has a good answer to them. they range from a p3d which has edit lods, to maps with odd settings. All you can do to fix it is use the 'halve and halve again' rule.
hashmap won't notice when objects get deleted
so they stay in there as zombies, can't remove, can't access
But that kinda is the expected behavior
Also, why hashmaps with object as key? You already have value storage for objects
So while it indeed is a minor inconveniance, there is no Real reason for objects as key
And for those who need it, netid exists ๐คทโโ๏ธ๐คทโโ๏ธ
@dawn palm so basically I need over a year to find out the problem xd Do I need to replace the p3ds with one which is working to sort out the problem ?
how would i know? it might not even be a p3d. all you can do, is use the halve and halve again rule. OR, revert back to the time when was working.
@silk warren if you get crashdump (mdmp) from the binarize crash, report it on FT so that it can be fixed someday
๐น ...over the rainbow๐ต
first time trying to binarizing it... ๐ฉ
you have been too ambitious then for a 'first' time. use the halve halve again.
it could be as simple as you giving poor map dimensions for binarise to feed on.
how do I know the good map dimensions
the problem you face, is, it's not my tools that are crashing. bis binarise has blown itself up. When any program does that, it can't tell you what's gone wrong.
Is there any link where I can find them
why aren't you in the map makers channel?
and why are you making yet=another=version of chernarus
wait I will dm you some pics.
please don't. they bore me to tears
have you done the PMC tutorial? If not you are wasting everyone's time, including your own.
yea I did.
please don't. they bore me to tears
@dawn palm I still send you some. ๐
problem that's holding up hashMaps is that object as key doesn't work ๐ข big sad
@glossy inlet str object can be used as key instead I think?
Oh wait sorry I just woke up
Why is it needed? I don't understand
You can add another hashmap which tracks which object IDs are valid
nu
Question also is what should happen with objects as key... Like, do the existing Keys then just vanish? If yes, why? It is just an ordinary list at that point
Imo strings as key is the most Important Option anyways... Afterall, even using numbers makes not that much of sense, as then one also could just use an array
And me want Dat hashmaps
the hash would stay the old objectid, but you have no way to get a object with that same ID, so you can never access the key anymore
well with just string key its not worth it, you already have namespaces (location, simple object)
If they work the same way, with the need of being deleted anyways, then that is true indeed
But cleaning up leaves a heavy burden upon a User, with a language that has poor life time control at best
But cleaning up leaves a heavy burden upon a User, with a language that has poor life time control at best
I think this is the biggest issue with existing approaches using CBA-style namespaces (simple objects or locations) - cleanup is left to performed manually, otherwise it's easy to leak objects (for example, unexpected SQF error that prevents cleanup code running). And all the other existing approaches to fake hashmaps are relatively costly in terms of performance.
Struggling to think of a situation where you'd need an object as a key anyway, given you can always do myObject setVariable ["property", 1] instead of looking it up in a hashmap named "properties". I guess the only thing you'd gain is the ability to enumerate the keys? But that's easily worked around.
Speaking of maps, one must specify which key to use for the map. For an int number it's just its sequence of bytes, same for strings, same for any value-type I think. But how do we calculate key of... another map? Is it sequence of keys of all its values? Or is it just its unique ID? Or what? What sense does it even make and when would any one need it?? ๐ฎ ๐ฎ ๐ฎ

The Moment hashmaps Land for sqf tho (Unlike location, those which do not need to be deleted), I will add json syntax tho
@nocturne basin You mean hash maps which are refcounted like local _variables?
yeah I also thought about the map as key problem, and was gonna exclude that anyway.
I think we are only left to string, number, side, bool, code, array (containing all other possible types)
those are all the types that don't have a "null", right?
which are refcounted like local _variables?
which are refcounted like all variables
fairly sure, not certain, that string responds to isnil because the string can be a reference to a non-existent $str_whatever
