Jump to content

=VG= SemlerPDX

  • Content count

  • Joined

  • Last visited

Everything posted by =VG= SemlerPDX

  1. DIY - Custom Game Controller - 2 Dial HSI Course and Heading Knobs

    @Hesynergy I never made a wiring diagram, it's just two rotary encoders after all, but the pins are labeled in the Arduino sketch at the top - I believe the resistors are 10k Ohms.
  2. I have a touch screen monitor below my main one when I fly in flight simulators like Falcon BMS or DCS or Microsoft Flight Simulator. It's great for the MFD buttons, as opposed to the actual wired USB Thrustmaster MFD's physically attached to the screen like I used to have, and I can use the monitor for other things, too. But one thing I would love to have attached to the screen would be the Course and Heading knobs of the HSI (horizontal situation indicator) . It would need to be removable so I can store it when not in use. I've heard about a micro-suction tape that can stick to anything smooth and flat without leaving a residue or losing stickiness, so this is a good excuse to buy some and play around with sticking things to my monitors. ← On the left is the (green) Arduino Micro board I used to test the concept with a rotary encoder on a breakout board, where I wrote the initial sketch with the Joystick and Encoder libraries. Later, because I didn't want to sacrifice my Arduino Micro to this controller, I bought a 3 pack of these much smaller Sparkfun Pro Micro clones for fifteen bucks (blue one in the middle). That one is gonna stay there for future tests and such, they'll be the heart of many projects in the future since they cost so little and include so much! My DIY USB Game Controller - Rotary Encoders as Course & Heading Knobs for Falcon BMS / DCS / FSX *parts list with links at bottom The initial goals I had for this project were: Two Rotary Encoders with Push Buttons recognized as USB Game Controller in Windows Thin and flat, without taking up too much viewing space on the monitor Can stick and restick to the monitor with micro-suction tape USB connector can be removed so it can be boxed (NetDot magnetic) Fine control for one-degree per detent and Fast Speeds for turning quickly Encased in semi-rigid form like shrink wrap so it won't scratch the monitor Total cost for one single unit less than $10 First, I affixed the Rotary Encoders and the Pro Micro clone to an 8cm x 2cm prototype PCB with a couple header pins bent outwards and crimped down, and with the two blue solid copper switch wires soldered in place from the top. I also ran the 10k Ohm resistors for the switches now. These are for the push buttons built into the rotary encoders, and although they only have two pegs on the actual component, they require three wires from the controller board (ground, 5 volt power, and the blue switch wire going to the Pro Micro). All this added plenty of structure. There is no wiggle or play, I'm not gonna try to break it, but it is very rigid now. Here's a close look at the first stage of soldering. (okay, don't look too close) I don't have the highest quality tools or solder, or even a lot of skill and experience at this, but it's good enough -- and good enough should always be good enough for a DIY project for personal use. If I wanted to, I could order a custom circuit board if I was going to make a bunch of these, but I'm happy as it is. It is so cheap to buy some of this stuff, if you messed up, you can always just buy another. Those Pro Micro controller boards cost about as much as a value meal at a fast food joint, so you can literally afford to make mistakes as you learn even if you're on a very tight budget like I am. A homemade carbon filter fume extractor, a simple soldering iron with a power switch and a temperature controller, some handy dandy helping hands and that brass soldering tip cleaner make little projects like this very easy, and all these items together costs less than the Logitech mouse to it's right. Good enough to play. If anyone reading this has any idea to get into working with things like this, my advice is to jump right in, get the most basic stuff you can get, not the cheapest, but things with good reviews from some good online store like Amazon, Sparkfun, Adafruit, etc. Soldering the top side here, used one of the helping hands to hold a string of solder from the spool. When I'm dealing with tiny bits that are between 0.5mm-2mm, anything that helps is appreciated. One slip and this 225C soldering iron would burn through any one of those tiny chips or components on the board. I find myself holding my breath and doing one or two, then letting go for a sec. I had to redo a few, and I always wait for it to cool down so I don't transfer too much heat to this poor little board. I had a few bits of solid copper wire with colored insulators, from a breadboard jumpers kit, so I cut some to length, but used others as is. This resulted in an odd looking crossover of the Orange and Yellow wires, but they are not taller than the micro USB port on the other side of the board and that's fine. Once I was all done, I tested every connection for continuity and unintentional bridges, and it all checked out, so I encased it in shrink wrap. By some sort of miracle, it works, it looks decent, and I think that will do just great! I connected it to the computer and uploaded the sketch, which I had to modify slightly since I used a few different pins for the push buttons on the rotary encoders, now at pins 15 and 6 instead of 6 and 7. I am thoroughly hooked on these NetDot magnetic adapters. When I looked at the reviews for Pro Micro boards, one of the only issues I saw that I'd be concerned with is accidentally popping the micro-USB port off the Pro Mini board if dropped or yanked too hard. A magnetic connector completely eliminates this issue, as well as the standard wear and tear issues that plugging and unplugging creates over time. And they're as cheap as regular braided USB cables, too. Why not? Here it is connected to the touchscreen monitor. It is far more satisfying to have tactile dials for these knobs than trying to make little circles on the screen with my finger over the touchscreen dials. The micro-suction tape keeps it in place and actually has some grab when trying to pull it off the screen. I've started using a peeling action but I doubt the screen would ever have problems. I might get a 3D printed case someday and maybe even a 90 degree angle connector so the cord goes back behind the monitor naturally instead of downwards, but for now, it's done and working great. Turning the dial with the most basic rotary encoder sketch from that Arduino library results in a "one degree per detent" meaning one turn is one click, and one click is one degree. No matter how fast you turn it, with 20 detents per 360 degrees with these encoders, it would take FOREVER to turn the dial from heading 000 to 180!! I wrote two separate jump speeds to detect how fast the dial is being turned, one jumps 18 degrees per click, and the other 30 per click. Now, it's easy to twist the dial fast to get it spinning fast on screen, while also being able to dial in one degree at a time when needed. All in all, it was a fun project and it's made me think seriously about getting a 3D printer someday to make little plastic cases for things like this. Here's the code if someone wants to use it (or modify it to make it better): Rotary Encoders HSI Course and Heading Knobs.ino for Arduino IDE https://pastebin.com/drUnCfKN /* Simple HSI Knobs Sketch for Falcon BMS / DCS / FSX * for Arduino Micro/Leonardo / Sparkfun Pro Micro or equiv. clones * by SemlerPDX June2019 * VETERANS-GAMING.COM * * Pins: * Rotary Encoder 1 - (OUTA-OUTB-SW) = Arduino Pins (0,1,15) * Rotary Encoder 2 - (OUTA-OUTB-SW) = Arduino Pins (2,3,6) * * Encoder Library * http://www.pjrc.com/teensy/td_libs_Encoder.html * * Joystick Library * by Matthew Heironimus * https://github.com/MHeironimus/ArduinoJoystickLibrary */ #define ENCODER_USE_INTERRUPTS #define ENCODER_OPTIMIZE_INTERRUPTS #include <Encoder.h> #include <Joystick.h> //Tell the Encoder Library which pins have encoders Encoder axisXRotation(0, 1); Encoder axisYRotation(2, 3); //Rotary Encoder Push Button Pins int buttonArray[2] = {15, 6}; //Rotary Encoder Interrupt Pins int EncoderPin0 = 0; int EncoderPin1 = 1; int EncoderPin2 = 2; int EncoderPin3 = 3; //Delay Time between loops int debounceDelay = 260; //Variables to compare current to old values int oldX = 0; int oldY = 0; int RxAxis_Value = 1; int RyAxis_Value = 1; //Intervals for Jump/Warp Speed Rotations int JumpSpeed = 18; int WarpSpeed = 30; //Set generic joystick with id 42 with 2 buttons and 2 axes Joystick_ Joystick(0x42, 0x04, 2, 0, false, false, false, true, true, false, false, false, false, false, false); void setup() { //Set Encoder Pins as Pullups pinMode(EncoderPin0, INPUT_PULLUP); pinMode(EncoderPin1, INPUT_PULLUP); pinMode(EncoderPin2, INPUT_PULLUP); pinMode(EncoderPin3, INPUT_PULLUP); //Loop through buttons and set them as Pullups for(int x = 0; x < sizeof(buttonArray); x++) { pinMode(buttonArray[x], INPUT_PULLUP); } //Set Range of custom Axes Joystick.setRxAxisRange(0, 359); Joystick.setRyAxisRange(0, 359); // Initialize Joystick Library Joystick.begin(false); } void loop() { // Loop through button pin values & set to Joystick for (int x = 0; x < sizeof(buttonArray); x++) { byte currentButtonState = !digitalRead(buttonArray[x]); Joystick.setButton(x, currentButtonState); } // Read "Heading" X Axis Rotation Encoder Knob int newX = axisXRotation.read(); if (newX > oldX) { //Determine speed of increment & set output int difX = newX - oldX; RxAxis_Value = speedVal(difX, RxAxis_Value, 1); Joystick.setRxAxis(RxAxis_Value); axisXRotation.write(newX); oldX = newX; }else if (newX < oldX) { //Determine speed of decrement & set output int difX = oldX - newX; RxAxis_Value = speedVal(difX, RxAxis_Value, 0); Joystick.setRxAxis(RxAxis_Value); axisXRotation.write(newX); oldX = newX; } // Read "Course" Y Axis Rotation Encoder Knob int newY = axisYRotation.read(); if (newY > oldY) { //Determine speed of increment & set output int difY = newY - oldY; RyAxis_Value = speedVal(difY, RyAxis_Value, 1); Joystick.setRyAxis(RyAxis_Value); axisYRotation.write(newY); oldY = newY; }else if (newY < oldY) { //Determine speed of decrement & set output int difY = oldY - newY; RyAxis_Value = speedVal(difY, RyAxis_Value, 0); Joystick.setRyAxis(RyAxis_Value); axisYRotation.write(newY); oldY = newY; } //Send Joystick info through USB Joystick.sendState(); delay(debounceDelay); } //Function to set Rotation value adjusted for the turning speed int speedVal(int dif, int val, int dir){ if (dif >= WarpSpeed) { if (dir == 1) { val = val + WarpSpeed; }else{ val = val - WarpSpeed; } }else if (dif >= JumpSpeed) { if (dir == 1) { val = val + JumpSpeed; }else{ val = val - JumpSpeed; } }else{ if (dir == 1) { val = val + 1; }else{ val = val - 1; } } //Correct Rotation within 360 deg. if (val < 0) { val = val + 360; }else if (val >= 360) { val = val - 360; } return val; } Here's a cost breakdown: Pro Micro (clone of Sparkfun Pro Micro board sold by KeeYees) (3 pack) - $15.99 https://www.amazon.com/gp/product/B07FXCTVQP/ $5.33 per board PCB Prototype Board Kit - $15.99 https://www.amazon.com/gp/product/B07CK3RCKS/ $0.25 (just a guestimate - it's one part out of a huge kit) 360 Degree Rotary Encoders (5 pack w/knob caps) - $8.89 https://www.amazon.com/gp/product/B07DM2YMT4/ $3.56 for 2 dials Microsuction Tape (25cm X 30cm Sheet) - $14.95 https://www.amazon.com/gp/product/B00M7FC1K8/ $0.12 (just a guestimate - used 1.5cm x 6cm strip of a huge sheet) NetDot 5ft Braided Magnetic Tip USB Micro Cable (3 pack) - $13.90 https://www.amazon.com/gp/product/B074TB8XTL/ $4.64 for 1 cord (Not taking into account things like double sided sticky tape, solder, wires, or shrink wrap tubing segments used because they cost less than a few pennies) Total: $13.65 (USD) _________________________________ I spent a fair bit more money than I initially expected to (almost $55!), but much of that went towards components or materials that I'll be able to use for several projects in the future. At about $14 bucks, it is twice what I thought it would be per unit, so that will help me to better gauge other ideas. It seemed like it would be cheap as dirt, using many parts I already owned, but it all adds up - they don't sell less than a sheet of micro-suction tape, and buying control boards in bulk is the only wise way to do it (if you can call 3 units "bulk", that is). In conclusion, it was great to have an idea, play around with some proof of concepts, and then make it into a reality within a few days. Single game controllers today.... one day, a full cockpit of switches! Not sure what my next project will be, but among other ideas, I've considered making a custom control board for Kerbal Space Program, or maybe some kind of wireless gear that can connect to a computer and translate into RF to control some DIY RC cars or whatever with my Xbox controller already attached to my PC. Eventually, I want to get into wireless stuff, and even RC, but I might start with button boards that use USB cables just like this one. If anyone has any questions on this project, feel free to ask. Thanks for reading!
  3. Thanks for updating the server, Melon!
  4. VG Branding Material And Ressources

    Here is everything I have -- the zip contents are not sorted, sorry don't have time to organize them, and though there are some folders these were dropped in as I found them.. There will be duplicates, but in those cases, there also may be slight differences between them (text orientation in the image, file size, image size/resolution, image format, alpha/transparency layers) - so if it's something that is in use today (like on the website) just download it from there for the most recent "official" version of a graphic. Everything I had is in this zip, including many TS3 icons, ranks and ribbons from this website and older ones, and even some .PSD files that can be opened in photoshop. Any questions, specific requests, feel free to ask: https://www.dropbox.com/s/7n4uq8d51ylckq4/VG Graphics Master.zip?dl=1
  5. SQUAD Saturdays (Public Event)

    WEEKLY OPERATIONS EVENTS (SQUAD) EVERY Saturday! 19:00:00 ZULU (GMT/UTC/PRT) No Password Required - Anyone can join Max 80 Players On Event! EVENT BRIEF: Due to the last squad events being amazing successes, we will now take the squad server much further than before. We will now make squad events every weekend. So that everyone has knowledge of when our community is gathered and playing together. This also gives an opportunity to seed our server out on the wide range of other squad servers. Letting other players join the game and build a new player base. This means that we have 1 week to rectify all the rules that we need that are important to gameplay. So whoever is writing the new "Squad Holy Bible". Please get the most essential rules laid out first. Please meet in TS prior to start of event. To login to the =VG= server launch Squad and select CUSTOM BROWSER, SET Filters > Show Empty Servers, Show Full Servers. OBJECTIVE: More details will be posted here closer to the event -- stand by. ASSETS AVAILABLE: Depending on Map set - Will update in future Complete Details and Signups will be posted here prior to each event: (default forum section with past events: https://veterans-gaming.com/index.php?/forums/forum/296-squad/)
  6. =VG= Social Meeting

    Thought Discord had something along the lines of video conferencing, but upon googling, seems there may be some limiting factors... Haven't 'video called' anyone since my kid was... a kid. The grown up ones only text, sign of the times.... don't even properly 'phone call' these days. No idea what software is the 'good one', that isn't gonna cost money, or isn't literal spyware. Personally, I prefer the anonymity of VOIP like TS3, I mean, why should I have to put clothes on to chat on the computer? Counting on you all to figure that out and decide on a 'standard' for us all.
  7. VG Branding Material And Ressources

    Things are kinda all over.... I'll try to assemble an all inclusive VG GFX zip file before the end of the week. A bit out of sorts this morning, woke up late to dizzy spells ... must be getting old.. or maybe just dehydrated. Also need a day or so since this is something I had planned since I built this new PC, to consolidate and organize the images on my PC - got VG graphics scattered around in more than one VG labeled folder, half the time I can barely find what I'm looking for with keyword searches and it's getting frustrating. So, like I said, been meaning to do this for some time, good enough excuse to get it cracked out in a few days. edit: if there is something specific you might need faster than anything else, I can prioritize that and get a small package to you sooner, otherwise, I'll assemble every VG graphics (even the retired ones) by this weekend.
  8. Music in trans

    The key problem being that users have no way of quickly/easily turning down the volume of someone's direct chat (music spam) and also not everyone enjoys it, to be fair. If a Squad Leader needs to communicate with other Squad Leaders during transport, they have to fight to hear what is being said, or maybe they want to brief their Squad for landing, etc. etc. etc. You're not the first, you won't be the last, but take it to heart that it's not always as enjoyable for those getting a ride as you might hope. If you had some way of ensuring that it was at a low, ambient volume, I doubt anyone would mind quite so much -- but that's not the case at all, and you can't know the volume at which what your spam is heard, how much (or how little) it drowns out other essential in-game communication. Obviously your intent is for fun and not to annoy, but it's a fine line there, brother. Hate to be a wet blanket. Same with Kav, I'm sure.
  9. shutdown on timer

    I'd rather be called a geek than a nerd any day.
  10. Need help deciding....

    We definitely are working on adding new life to the Arma 3 sector at VG, it's hard when a lot of the tech guys are scattered - but it's just a matter of time. We plan to run Vanilla as well as Modded server(s), and hopefully get in some regular events, if only monthly to start. The game takes patience, on the part of players, and those who get technical designing missions. Attention to detail is key, and mistakes are compounded when a whole server of players is standing around scratching their asses while the mission host tries to jostle things into a working position as designed. ZEUS helps - like a Dungeon Master, they can on-the-fly add elements/enemies/gear to a map in action, and help keep things fresh if the original mission they designed doesn't play out exactly as planned. Takes time and effort to build something like this up, and a few good men willing to populate the server(s) and get them going.
  11. shutdown on timer

    Here's something you might like - a batch script I wrote long ago when I needed to be able to restart VoiceAttack using a voice command -- worked with a windows scheduled task I created to launch the VoiceAttack program as administrator, but bypass that annoying UAC pop-up to allow it. Found long ago that killing a task is no exact science, and need to be able to handle the case that it doesn't happen, and to try again until successful: @echo off title startVAwInput1.bat REM by SemlerPDX Jan2019 REM VETERANS-GAMING.COM :kill_VA taskkill /f /im VoiceAttack /fi "windowtitle eq VoiceAttack.exe" tasklist | find /i "*VoiceAttack*" >nul 2>&1 if errorlevel 1 ( ping -n 3>nul schtasks /run /TN "VAnoUACwINPUT1" exit ) else ( ping -n 2>nul goto kill_VA ) ↑ ping is the preferred "pause" or "sleep" method for Batch -- timeout is depreciated, where a ping such as that has a finite execution time, so increasing the number of times to ping effectively increases the 'pause' or 'sleep' time. Ya pick these things up over the years, again, self taught amateur just poking around trying to make things that work, then trying to make them work well/better in time.
  12. shutdown on timer

    Pretty much. Like I said, there are plenty of functions elsewhere that do tons of stuff to make this all work. The goal for me is optimization - I don't mind the initial program load time being a little longer if it means when someone actually says something that gets recognized, that it enacts the actions (and/or keypress(es)) within a tenth of a second. Issues I had in the past included accurate recognition, but a good 1 to 2 seconds before anything happened, which is far too long for interactivity in video games of most any kind. This new system lets me set some variables to RAM after loading from the save file, and those speed everything up... there are a lot of them, 'Open [the;] Cargo Bay [Door;Doors]' for example has 4 different ways to say that phrase, so each one gets parsed out to be a variable set to RAM that contains that command's data array (the VPB#,COM#, keys (if any), and options list) On file, it's just 2 variables for each command, but once loaded by the program, all get expanded into their multiple phrase variations, ending up with easy to reach data just based on what the user said, AVCS_VPB_COMMAND_open cargo bay door=VPB#1,COM#1,VPBKEY/e AVCS_VPB_COMMAND_open cargo bay doors=VPB#1,COM#1,VPBKEY/e AVCS_VPB_COMMAND_open the cargo bay door=VPB#1,COM#1,VPBKEY/e AVCS_VPB_COMMAND_open the cargo bay doors=VPB#1,COM#1,VPBKEY/e So, when they say something like, 'open cargo bay doors', it will toss the known variable name before it to get the data, "AVCS_VPB_COMMAND_{CMDSPOKEN}" which resolves to that command's data FYSA, this is all WIP alpha build, still evolving even as we chat it up here, having fun talking about these things for sure... but will have more fun when I release it as a working program. Tons of fun!!
  13. shutdown on timer

    VPB# always appears before COM# in the commandArray... First time through, it sets the VPBindex - does not disappear before iterating to next 'commFunc' in the commadArray of data - second time through it finds the COM# and sets VPBexe, compares them, if not equal, GoTo the above special function handler. VPBindex is always initialized before it gets to any 'commFunc' containing COM#, and the exception handling that VPBindex is not set is well enough if VPBexe doesn't equal it.... One is the index number of the command, the other is the command index (if different, the action is to find the command data from a different index numbered command) Sometimes, it is needed for the action of one command to simply be calling another command. It is a very edge case, but needed to factor in. AVCS_VPB_DATA_COMMAND_1=VPB#1,COM#1,VPBKEY/e AVCS_VPB_COMMAND_1=[Engage;Begin;Turn On;Start] [Hyperspace;Frame Shift;Warp] [Drive;Engines] ↑ that could be VPB index 1, command 1 -- it presses the 'e' key when recognized AVCS_VPB_DATA_COMMAND_2=VPB#2,COM#1 AVCS_VPB_COMMAND_2=punch it chewy ↑ that could be some other command like a single alternate phrase, or wildcard with no special dynamics, or etc., and it doesn't do anything except execute COM#1 That's the reason for that GoTo, and why I need to handle so many exceptions on that one. *edit: Also, there are functions not shown from elsewhere in the program, that's not a one-off.... this is a bit from inside another command, again, parts not show, but this is where data is extracted from that bit above into all the various phrases, so any one of the combinations is equal to the array of data for simple retrieval (following the above example, one would be: AVCS_VPB_COMMAND_start warp drive=VBP#1,COM#1,VPBKEY/e ) ←this is the stuff that gets loaded into RAM, the ones above are in a save file phrases = (VA.GetText("AVCS_VPB_COMMAND_" + cmdIndex.ToString())) phraseData = (VA.GetText("AVCS_VPB_DATA_COMMAND_" + cmdIndex.ToString())) phraseArray = vaProxy.Utility.ExtractPhrases(phrases, true, true) for each phrase in phraseArray if ((not(phrase = "")) and (not(phrasesFinal.Contains(phrase)))) phrasesFinal.Add(phrase) phrasesUnique = phrasesUnique + phrase + ";" VA.SetText("AVCS_VPB_COMMAND_" + phrase, phraseData) end if next
  14. shutdown on timer

    Normally for VB.net/C# I use VisualStudio, but this is an in-line function inside the VoiceAttack program itself, which makes use of a bunch of embedded proxy functions provided by VoiceAttack. That particular function is getting and setting variables for the VoiceAttack program to use in other functions and/or voice commands (much faster than VoiceAttack could do so with it's code-block style actions). The code above is VB.net, which is a C style language edit: Use LUA for batch highlighting, it's closest, doesn't break, and provides some basic highlighting -- I already edited your post
  15. shutdown on timer

    Funny thing, I actually just had to use a GoTo in a VB.net function I've been working on for my AVCS4 thing ... part of the new systems that let users create new voice commands using voice commands... I have to check if something is not right in geek town, and GoTo a section to handle the exception if so... thinking of any possible ways something can break, or any other ways it can receive data is the best way to make sure shit works right the first time, every time. Trial and error, testing and more testing... when you're chicken plucking your way along the self-taught route like I do, it takes years to get any sense of confidence Yea... cool spoiler tag thingy will look and work like this whenever I get it integrated into the website proper - this is me doing website admin stuff to put it in here, fysa Public Class VAInline dim VPBexe as integer dim VPBindex as integer dim VASnum as string dim commandCheck as string dim commandBase as string dim commandFull as string dim commandArray() as string dim entry() as string Public Sub Main() VPBexe = 0 if VA.GetText("~avcs_vpb_command_array") IsNot nothing 'Get voice command actions array and eval for actions' commandArray = VA.GetText("~avcs_vpb_command_array").Split(",") 'Handle voice command that only executes another voice command' VPBarray: if(VPBexe > 0) commandCheck = "AVCS_VPB_COMMAND_" + VPBexe.ToString() if (VA.GetText(commandCheck)) IsNot nothing commandArray = nothing commandBase = VA.GetText(commandCheck) commandFull = "AVCS_VPB_COMMAND_" + commandBase if (VA.GetText(commandFull)) IsNot nothing commandArray = VA.GetText(commandFull).Split(",") end if end if end if if(commandArray) IsNot nothing for each commFunc as string in commandArray if not(commFunc = "") 'Check if this command only calls other commands' if(commFunc.StartsWith("VPB#")) entry = commFunc.Split("#") VPBindex = Convert.ToInt32(entry(1)) else if(commFunc.StartsWith("COM#")) entry = commFunc.Split("#") VPBexe = Convert.ToInt32(entry(1)) if(not(VPBindex = VPBexe)) GoTo VPBarray end if 'Get the Keypress Action for this command' else if(commFunc.StartsWith("VPBKEY")) entry = commFunc.Split("/") VA.SetText("~VPBKEY", entry(1)) 'Get additional options for this command (if any)' else if(commFunc.Contains("PTTON")) VA.SetBoolean("~PTTON", true) else if(commFunc.Contains("AFMON")) VA.SetBoolean("~AFMON", true) else if(commFunc.Contains("VAASC")) VA.SetBoolean("~VAASC", true) VA.SetBoolean("~VASON", true) else if(commFunc.StartsWith("VAS")) VASnum = commFunc.Substring(3,1) VA.SetInt("~VAS", VASnum) VA.SetBoolean("~VASON", true) else if(commFunc.Contains("SFSON")) VA.SetBoolean("~SFSON", true) else if(commFunc.Contains("SFSYES")) VA.SetBoolean("~SFSYES", true) else if(commFunc.Contains("SFStrue")) VA.SetBoolean("~SFS", true) else if(commFunc.Contains("SFSfalse")) VA.SetBoolean("~SFS", false) end if end if next end if end if End Sub End Class ↑ basically, example of me checking at every step if something is not right, if something is nothing, if something is > 0 (hence, not nothing)... ya gotta check everything if ya don't want headaches later, scratching your head until it bleeds trying to figure out why something didn't work right, or as expected
  16. shutdown on timer

    I used to use GOTO a bit in batch -- so you do your comparison and if it's not numeric (checking for symbols, too), jump back up to the 'get input' section
  17. shutdown on timer

    Oh, yea, that's actually specifically for discerning A-Za-z from 0-9 -- per notes in that thread at StackOverflow, entering symbols or something like 0ABC (staring with zero) also would not be handled correctly. Thing is, with small user utilities, there is no real need to catch every exception, but when you do want to, you go for function over looks every time. If anyone uses this knowing what it is, and enters anything but a number when prompted to do so, deserves whatever errors or chaos ensues forth.
  18. shutdown on timer

    Nice batch scripting there! *(yes, the bbcode spoiler tag does not work here... have editor button in the works, but need more experience in CSS, and working with IPS to add button to editor) Re. Check for numeric value, do what the pro's do... StackOverflow.com FTW - grab first answer, modify as needed: https://stackoverflow.com/questions/17584282/how-to-check-if-a-parameter-or-variable-is-numeric-in-windows-batch-file SET "var="&for /f "delims=0123456789" %%i in ("%1") do set var=%%i if defined var (echo %1 NOT numeric) else (echo %1 numeric)
  19. Now that we've got the VG Air Force group officially created as a part of this website, I thought it would be good to discuss the plans and ideas for the future of the VG Air Force. First of all, I would like VG Air Force to be a home for pilots on the VG BMS Server, and should be the home for more than one VGAF Virtual Fighter Squadron, that way a VG Air Force pilot might enjoy being part of some VGAF Harriers Squadron with some unique name and number, and also take part in the events of the VGAF F-16's Strike Squadron, or something. Would like to let this thing grow into the different aspects of BMS that we enjoy, and organically let our members take up leadership roles if desired for training others, or hosting VGAF events of any kind. We should try to mix up the scheduling as well, so as to not stack too many during other events (some of us play other games here at VG, as well), so care should be taken when deciding on times for regular repeating events. It would be wise to begin creating some forum post materials that can serve as easy reference for standards we may like to encourage, from manner of dealing with in-game comms to use of in-game radio commands and communicating with ATC/AWACS/ETC. -- we can also try to discuss common multiplayer concepts and standards that we all might want to get on the same page with. Obviously, pilots learn these things as we all fly together, but having a central location to point people to will help create actual reference guides in the future. Thought it might be fun for us to all start at the 2nd Lt. and move through the ranks of this group based on some agreed upon criteria, including time with the VGAF, time on the server, and proficiency in a number of tasks from mundane to challenging, as appropriate. Needs discussion, and ideas. So, let's have at it in this thread, and flesh out this new VG Air Force into something we all enjoy!
  20. The VG Air Force - Group Ideas & Discussion

    I think one of the coolest group missions that the VG AF can work towards one day would be combined package on an OCA Strike mission. Offensive Counter Air is a strike against an enemy airbase, and these are highly protected, often by dedicated SAM sites. A large multiplayer package might include a SEAD or DEAD flight (Suppression/Destruction of Enemy Air Defense) as the tip of the spear, followed by an AI (Air Interdiction) flight to deal with any bandits, and the actual OCA Strike flight with each jet carrying as many as 12 BLU-107B 450lb Anti-Runway High Drag Penetrator bombs each. The goal would be to bring all pilots home safely, and maybe get some great video and pictures along the way. This would be a long term goal to work up to, so everyone should practice these various mission types - OCA strikes being much less dangerous in the latter days of the war when SAM's and interception by bandits are less likely - but SEAD/DEAD strikes must be practiced in the first few days of the campaign (unless outside the VG campaign in training/tactical engagement missions) before the enemy air defenses are completely wiped out by Day 5 or sooner.
  21. The VG Air Force - Group Ideas & Discussion

    The thing is, both BLuD and I have been "out of it" for so long, it is us who will rely upon you guys to help get us back up to speed, and to understand things that are different from BMS/Falcon versions we were familiar with - while it might amount to reminders (a metric fuck ton of them) other times it will require learning a whole system again, or just trying to bypass it for a single flight just to not bring everything to a grinding halt mid-flight or something, to come back to it when we have time to watch a tutorial video and do a re-training flight for that system. It's gonna be frustrating as shit and require a fair bit of patience, and only so much of that a human can take in any one day. Looking forward to it, nonetheless!! Not sure about Blud, but my brain is messed up with a decade of past info from Allied Force, Free Falcon, and the Falcon BMS 4.32-current versions - so when I try to remember something, sometimes it's not for the same jet/sim that I'm in. Fun fun! The longer the break you take, the longer it takes to retrain, but definitely not as long as that first time learning. Both BLuD and I still have to set up our gear, so it's like actually starting from scratch there. Personally, I told myself I'd get this next AVCS4 BMS version into pubic beta before I lose myself in the 3D world in any game (hard to do when you have "to-do" list nagging at ya). Looking forward to a list including BMS, ARK, Arma 3, Elite Dangerous, SQUAD, and even Red Dead Redemption 2 (when we get some other hombres into an online posse) - even some creative world stuff like COOP Satisfactory or Stormworks. Played so many games for so many years here, I just wanted to 'produce' something substantial so I can look back at these years and not say that all I did was play... mid life crisis, maybe? lmao .. ten years of VG for me so far... For me, it will be a little while after coming back before I'm comfortable leading a flight, might even have a hard time keeping up as a wingman, blowing through too much fuel and all that noob shit.... but it's like riding a bike, ya know, you never truly forget... well, a bike with like a thousand little switches and buttons, that is
  22. Membership Application - Rotblut - VG Air Force

    Changed Application Review Status to Membership Approved
  23. The VG Air Force - Group Ideas & Discussion

    I don't know why this went 'under the radar' for folks here, but this is STILL the ground floor, and I literally just created this thing last week - and posted this stuff up for everyone to see. After Kav included me in the group message thread where they had been training up some interested members, I realized the need to provide a base for all our members who have become interested (and serious) about this thing that BLuD and I (and others) have been into for years and years, the BMS 'niche' at VG. Really want anyone here (especially YOU, Blud) to be part of this and help direct it - those who have time to help manage things, as always, should step up to help out with the things that need doing so others not so involved may enjoy being part of this as pilots and just fly with the group. Please join!!
  24. Preview of the Upcoming Features of AVCS CORE Framework & the (WIP) 1.4 (alpha) of AVCS4 BMS Immersive Voice Control Radios ***APOLOGIES FOR THE LOW VOLUME!*** Took too much time to create, need to get back to work or this thing will never get into public beta tests -- thanks for understanding! Since I expected this upcoming version to be in public beta tests much sooner, I've created a preview of the new systems and functions in the next version of AVCS4 BMS Immersive Voice Control Radio Menus for VoiceAttack. This new version will be coming to a beta test soon. This will include the new AVCS CORE Framework and App designed for VoiceAttack which powers the profile update system, save file system, and bug reporting and semi-automated debugging systems. AVCS CORE is a VoiceAttack Profile that will load first, and handle the initialization of any AVCS4 Profile that it switches to, in this video, AVCS4 BMS. It will also handle my upcoming Elite: Dangerous voice control systems profile for VoiceAttack, and many other game control systems I have planned. Huge thanks for all the feedback and support! I am hoping to have a public beta test before the end of July, possibly much sooner, as I complete the final rounds of testing and get everything ready for release. Cheers! a note: *Not used to public speaking, and wasn't paying enough attention to my own actions, at about 2:10 said 0.04 was the 'default' - but the reason the "change" to the default keypress timings shown in the video didn't appear in the save file was because 0.05ms is the default, and only changing to a non-default time would cause a changed value to appear in the save file.
  25. Profile for VoiceAttack by =VG= SemlerPDX Description: These commands use VoiceAttack to translate the in-game on-screen radio menus from AWACS through Tanker into natural and intelligent voice command phrases that will fire keypress macros to help keep hands on the throttle and stick, and maintain immersion. As an additional option, these commands can be locked behind a push-to-talk mode bound to your UHF/VHF transmit buttons in-game, allowing any other VoiceAttack command unrestricted access if needed, while still restricting these BMS radio command macros. Finally, this single advanced control profile is extremely easy to edit or integrate into other profiles. At VETERANS-GAMING, we fly with friends or AI Pilots, or a mix of both on our 24/7 Public Korean Campaign in Falcon BMS. We may go out with an AI wingman only to have a friend take their place mid-flight. For this reason and others, I created this VoiceAttack profile based around restricting when the computer can execute keypress macros that match voice phrases, having to first check if that pilot was set to a human pilot and therefore disregard commands for that pilot. Thanks to user requests during the beta, there is now an optional mode to reverse the Human Pilots system, to assume all pilots are humans unless told otherwise, and also a system to choose a different keyboard layout than QWERTY. I have also added an optional Audio Feedback Mode to play a short radio cue sound when a command is successfully recognized. Included is a single profile that handles every callsign and radio command variation in Falcon BMS, with instructions on how to add any custom callsigns to the single profile. The focus of this profile is only on the in-game Radio Menus, and creating an immersive interaction layer through VoiceAttack that is easy to manage and update, or integrate into other Voice Control systems for Falcon BMS. My goal was an intuitive system, so there is no user manual - only a few infographics and quick reference pic of all the radio commands. I personally keep that final pic on my tablet for reference when flying, to find radio commands I seldom used in the past when they were more difficult to access while busy with HOTAS in the pit. Say goodbye to the keyboard, and enjoy the immersion! Cheers! Features: *Push-To-Talk mode disabled by default. Say, "Turn On Push To Talk Mode" to enable **Follow Instructions inside profile to set Push-To-Talk buttons to match BMS UHF/VHF keys Download: (Click Here) Tips for this profile: *On first import, you should say, "Initialize Profile" - after first time, this is automatic. Any attempt to use commands before this will trigger auto-initialization. If you get errors from my profile, Launch VoiceAttack and open Options (wrench icon in lower right): -Under last tab on top, System/Advance, check box next to "Use Nested Tokens" as in image 1 below -Unless absolutely required, during testing it's recommended to uncheck "Allow command segment info for composite commands" Open the profile - if not already done, group commands by category and consolidate multi-part commands as in image 2 & 3 below Click on the Description tab at the top to help sort commands further (see image 4) Read a semicolon ";" as the word "or" and look at long commands as having many options like saying "2;Two;Too;To;Wingman" (read as "2 -or- Two -or- Too -or- To -or- Wingman") Commands Reference: *Replace the word "Human" with "Computer" when All-Humans Mode is ON Normally, this profile assumes all pilots are Computers, use All-Humans Mode to invert this