# en - fao # Artillery Fire Control with Forward Observer in \"Foxhole\" ## [🇨🇳](https://hackmd.io/@j2B-AmOOTCeGtnWJUgacVQ/S1YateMcbl) [🇩🇪](https://hackmd.io/@j2B-AmOOTCeGtnWJUgacVQ/B19sIkM9bx) [🇬🇧](https://hackmd.io/@j2B-AmOOTCeGtnWJUgacVQ/Bk5YP1Gq-x) [🇫🇷](https://hackmd.io/@j2B-AmOOTCeGtnWJUgacVQ/BJ_8d1z5-x) [🇭🇺](https://hackmd.io/@j2B-AmOOTCeGtnWJUgacVQ/HyisfPZf-g) [🇷🇺](https://hackmd.io/@j2B-AmOOTCeGtnWJUgacVQ/HyeZKyMcbl) ## TLDR - Know where the target is - Know where the gunners are - Know where **YOU** are The system calculates the rest and notifies all participants. (near real-time, even to [Discord](#Discord)) 📺 https://youtu.be/d2amVYxveRQ _(This really is just the tip of the iceberg.)_ The programme is designed to **organise** participants into **one group**. It delivers the data to gun crews in a **standardized, easy-to-read format**. > Despite appearances, this is a text-based Telegram application. The map display is only a small part of it. ![image](https://hackmd.io/_uploads/Sk48R82G-g.png) [same atkually](https://foxhole-map.dob.systems) ![faoLarge](https://hackmd.io/_uploads/H11rXPWGbe.png) ![image alt](https://barcode.tec-it.com/barcode.ashx?data=https%3A%2F%2Ft.me%2FfaoHelper_bot&code=MobileQRCode&eclevel=L) [https://t.me/faoHelper_bot](https://t.me/faoHelper_bot) > With the exception of Hungarian, these are all machine translations. If you want to help me with my work or if you found a bug: [![Crowdin](https://badges.crowdin.net/faomanual/localized.svg)](https://crowdin.com/project/faomanual) # Using the Telegram bot Primarily supports the spotter’s workflow, but the real advantage appears during coordinated group operations. > The slash (`/`) commands mentioned below do not always need to be typed manually. A contextual keyboard appears for the user with the most relevant commands. > Only coordinates need to be typed. ## Creator **/start** **/create** The room is then created, the creator becomes its owner and is given a scout role. Other participants can join using the room code. ... Typical workflow:* Assign roles * Determine positions * Create vRefs * Conduct fire control **/leave** Quit everyone, remove vRefs and delete the room. ## Team members **/start** **/join** In this case, the user joins the room as a gunner, which can be changed by the commander or scout _(**[role](#role)**)_. # Basics ## Coordinates – MapCode On the in-game map (mod-dependent), coordinates can be read directly. CTRL + click posts them into the active chat. _(Applies only to the current hex.)_ ![Pasted image 20251205135126](https://hackmd.io/_uploads/B1Ih4vbGWx.jpg) At a slightly lower magnification, the map grid is better visible, and within it the 3x3 division. Of course, they work with a slightly different format, but their goal is also different. **Colonial Home Region-K9k3** = (**map name**)-(**x**)(**y**)k(**sg1**) > in the living word, the separating \"k\" is pronounced **keypad** | function | value | | -------- | -------------------- | | Map Name | Colonial Home Region | | x | K | | y | 9 | | sg1 | 3 | This will allow you to delimit an area of ​​approximately 42m x 42m on the map. :::info :information_source: When you drive the vehicle, the map that appears is ~360m wide for me. It can be useful to figure out where to place artillery relative to the target. :::warning :warning:_but maybe not so big on other resolutions_ ::: I have changed this to: - I left the map name - The separating letter \"k\" is replaced by \".\" I use. _(faster typing)_ - I divide the sub-grid into 9 more grids in the same way. > This will give you a grid of about 14 metres. (in the program there are also longer coordinates, these are calculated. They have an accuracy of up to 10 cm) ![FoxholeMapCode](https://hackmd.io/_uploads/Hy3bSPZfZx.png) ### format: (**x**)(**y**).(**sg1**)(**sg2**)==(**sgX**)...== | Feature | Value | grid size | | ------- | ----- | -------------------: | | x | k | | | y | 9 | 125m | | sg1 | 4 | ~42m | | sg2 | 7 | ~14m | | ==== | ==== | ==== | | ==sg3== | | ~5m | | ==sg4== | | ~2m | > The coordinates and boxes are also displayed on the map > Can be useful as a starting point ![image](https://hackmd.io/_uploads/H1m_1dlEbl.png) ## Polar coordinates, or vectors Playing with the coordinates of the previous map is a rough guess compared to what the accuracy of a well-connected vector network can provide. This may sound very harsh at first, but with a few simple practices and teamwork, ==accuracy within a metre== can be achieved. ![faoVectorChain](https://hackmd.io/_uploads/HJDiMKbf-g.svg) # Tasks ## Spotter If he organises his work and his team well, he only has to hit the targets ### basic commands #### /t Sets the current target for the group. This can be done from **mapCode**, **polar** or [tp](#vRef). On deployment, with the offset and wind parameter set, all gunner participants _(**[role](#role):** arty, main battery and fp)_ receive their own -unique- firepower. #### /mypos > **mapCode** - absolute positioning > **polar** - if you want to move somewhere. You enter your future position in advance and then work from there > **reference+polar** - the reference can be the target, a teammate or a vRef. If you want to locate your own position from the **target** use the '💢' button, otherwise choose from the list. > The system calculates your new position compared to the reference #### /moveto moving a teammate. > **index+MapCode** - absolute positioning > **index+polar** - calculates the teammate's position relative to you. #### /offset This is only added to the target coordinate. _This is not necessary with a well-established network and well-tuned winds._ The [**/o2w**](#o2w) command can change this. **polar** - calculates the offset from the vector between the specified point (e.g. impact) and the target. When a new offset is recorded, the offset is added to the previous offset. _(chained)_ If you are completely lost you can be reset. ![faoOffset](https://hackmd.io/_uploads/ByKDVtZz-g.svg) ##### Lateral angle table if you'd rather do the math in your head | | 5m | 10m | 20m | 30m | 40m | | ---- | --------------------: | --------------------: | ---------------------: | ---------------------: | ---------------------: | | 100m | 2.86° | 5.71° | 11.31° | 16.70° | 21.80° | | 200m | 1.43° | 2.86° | 5.71° | 8.53° | 11.31° | | 300m | 0.95° | 1.91° | 3.81° | 5.71° | 7.59° | simplified: | | 5m | 10m | 20m | 30m | 40m | | ---- | -------------------: | --: | --: | --: | --: | | 100m | 3° | 6° | 11° | 17° | 22° | | 200m | 1.5° | 3° | 6° | 9° | 11° | | 300m | 1° | 2° | 4° | 6° | 8° | Could the golden rule be that at 100m, every 5m you can count on 3°. This also applies in reverse, at 5m spacing between shots, at 100m range, you have to change the direction by 3° to fire in the same direction even differently: **300/distance** = 5m side angle e.g.: 150m at 15m side distance (300/150) \* (15/5) = 2 \* 3 = ~6° _(edited/counted: 5.71°)_ > if you want to be more precise **286/track** #### /o2w If you already have a well-set offset, it is possible to switch to wind parameters. Select the target and the system will convert the wind based on the distance and the projectile _(offset is reset)_. Thus, different distances and/or different guns can fire accurately at the same targets. _(until the next wind change)_ ### sessions #### just the map If all participants are positioned using only the most accurate (xy.ss) coordinates, there is still **==maximum error of ±28m==**! Offset the first couple of series and go to the first wind change that comes out of the tube. _(at similar distances and for the same shots)_ In this case _(we don't know the exact location of the participants and the destination)_ [**/o2w**](#o2w) will give an incorrect result!!! The **position error** and wind compensation are added together. As you can see, it is not necessarily difficult to get accurate references for the next collection. **Even over long distances, without chaining!** Related to this is the possibility of loading public buildings [vRef-buiding](#vRef-🃏). Exactly, one less margin for error. #### vector chains You pick up a reference of your choice (this could be yourself, a leader, or the target itself. The main thing is that it should roughly resemble the map). ##### onSubGrid I'll put the number of subgrid on the map. I fix my position at the coordinate of the subGrid _(**/mypos k9.7**)_, and from there I start to fix other points or a well identifiable landmark (and put the vRef-00 here) This is what you see (k9.7): ![image](https://hackmd.io/_uploads/HJxPa7jObg.png) ![image](https://hackmd.io/_uploads/B1fEU9aDbx.png) In the image above, the vRefs are chained to the corners of the bridges _(handy because you can see them from obscurity)_ After that, it drags the rest of the cast along compared to the reference. In this case the position error is minimal, in theory only the wind has to be compensated. ![faoVectorChain](https://hackmd.io/_uploads/HJDiMKbf-g.svg) #### mixed chains At long distances, it would be inconvenient to measure the whole course _(not to mention large bodies of water and mountains. [**example**](#Ismert-hibák))_. With the [**onSubGrid**](#onSubGrid) mentioned earlier, you can create two separate chains without loss of precision. ![faoMixedChain](https://hackmd.io/_uploads/BJH7V6Z9-e.svg) #### movements If you have already built up an accurate network you can move with **/mypos** (**polar**, **reference+polar**) with essentially no loss of accuracy. If you want to cover a longer distance with binoculars you can use vRef as a timeless marker ## Main Battery aka Lead Battery Reduces the spotter's workload by not having to position everyone, but only the leader. ==Then the cam is given an exact position==: 1. determines the position of the batteries in the vicinity by **/moveto index+polar**. 2. the batteries measure their own position relative to the leader **/mypos reference+polar** (much more telescopes, shorter time) This way, the bats do not have to be on top of each other, thus avoiding that a counter-attack can knock the whole grouping out of 1-2 series. Everyone gets individual shots, without chaos! ### Movement If he moves he can measure himself back to the grouping and vice versa. The point is to keep at least **one reference stationary while the others are moving** (but this applies to everyone in the network). ## Wind (role) > [!Caution] Currently unusable. Data entry works, counting doesn't > with **120** and **150** you might be able to use **[Wind Sock](https://foxhole.wiki.gg/wiki/Wind_Sock)** If you have installed [Wind Sock](https://foxhole.wiki.gg/wiki/Wind_Sock), you can view and adjust the wind parameters. Wind strength indication: 🧦 You can also guess from the [flag](https://foxhole.fandom.com/wiki/Wind) displayed on buildings. Wind strength indication: 🚩 ![image](https://hackmd.io/_uploads/SJUxDqnPbe.png) > in calm conditions, the 120mm at 220 yards averaged 4 hits in 10 shots on a target the size of a house. That's how much the variance matters ## vRef 🃏 The Jolly Joker! Marker stake. Any kind of land feature, building, tree, maybe something that is visible at night or even if it is hidden (e.g. a rock). These references can be used in motion. > \==**tp**== **targeting**, and - unlike **fp** - **does not count as a hit**! So it is left out of the ammunition calculation. Can be loaded directly as a target. > \==**fp**== **firing position** is a marker for a planned firing point on the map or a battery that is not on the telegram. When processing, the scout receives ammunition for **fp** that he can dictate (Discord). Or ==**Discord webhook**==. You can also set up a projectile for this. > \==**lp**== **loading position** planned reloading point. I have no ammunition > \==**b**== **building** loads various public buildings belonging to the server (able, charlie) and the selected map. (town base, seaport, etc.) At most, only buildings that you can see in the \"secure map\" (default: N) will appear here. > He acts like **tp**. > Format: **b-tb2-00** - Town Base 2 position > _(_❗😓_no building information for Home Region)_ ![image](https://hackmd.io/_uploads/HyCQpXOFZg.png) All items listed here [exportable](#export) --- # Commands ## /help writes something about every command you can use ## /name if your Telegram name is not the same as your Foxhole name, you should change it > this Telegram name is just your name displayed in Telegram, not a link to your profile ## /role Changes the task of the teammate. arty, spotter, main battery, wind ## /calc Calculates And displays the direction and distance from the target to the point shown. It works the same as /offset but it doesn't change the ammo, **it just gives information to the scout**. ## /arty In 2 steps _(ammo device)_ assigns the appropriate artillery to the room or selected character _(role:**arty**, role:**main battery**, vRef:**fp**)_ ## /map You can select the current map. The data recorded can be viewed on a map. Delete the map from the room. ref: [icons](https://cyanavigation.com/how-to-read-and-use-military-map-symbols-a-beginners-guide/) ![image](https://hackmd.io/_uploads/Sk48R82G-g.png) ## /discordwebhook On the discord server you need to create a webhook, [more](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks). The full route of this should be provided. This is fixed for the user, so when you create a new room, you only need to enable it if you need it. ![image](https://hackmd.io/_uploads/Sk0AGwnE-l.png) ## /discord If you have set the **webhook** and you are the creator of the **room** you can enable or disable the sending of data. It only sends items that do not have a telegram id. _(**fp**)_ In case of a change of a shooting element _(new target coordinate, offset, wind change, whatever you **administer**)_ it will send automatically, map on command only. ![image](https://hackmd.io/_uploads/ByHfzvhVWg.png) :::warning when creating the webhook, preferably name it **FAO Bot** and use the [download here](https://cdn.dob.systems/faoLogoDiscord.png) image as the icon. ::: ## /export Creates a text containing the current vRefs and the map. For example, these are the targets of the artillery ranges, with a few reference points and a few firing positions ### Colonial ![image](https://hackmd.io/_uploads/B1fEU9aDbx.png) :::success #### map, vRefs and firing positions ``` MapHomeRegionC.webp;16:vRef-00::k9.7;16:vRef-01::k9.997969;16:vRef-02::l8.336574;16:vRef-03::m8.277724;16:vRef-04::m8.635414;64:fp-120-0:6:k9.798827;64:fp-150-0:11:k8.165619;64:fp-150-1:11:k8.138384; ``` ::: :::success #### first island objectives ``` 32:tp-00::l9.776811;32:tp-01::l8.179713;32:tp-02::l8.137288;32:tp-03::l8.183941; ``` ::: :::success #### aims of the second island ``` 32:tp-10::m8.143182;32:tp-11::m8.161769;32:tp-12::m8.251291;32:tp-13::m8.355868;32:tp-14::m8.669534;32:tp-15::m8.65748;32:tp-16::m8.562831;32:tp-17::m8.429377;32:tp-18::m8.442436; ``` ::: :::success #### platforms around the island ``` 32:tp-20::m9.728329;32:tp-21::m9.861159;32:tp-22::n9.745249;32:tp-23::n9.859564;32:tp-24::n8.285147;32:tp-25::n8.813321;32:tp-26::n7.216491;32:tp-27::m7.332171;32:tp-28::m8.887164;32:tp-29::m8.775328; ``` ::: ### Warden ![image](https://hackmd.io/_uploads/rJRYLspvZx.png) :::success #### all in one ``` MapHomeRegionW.webp;16:vRef-00::h7.6;16:vRef-01::h7.454;16:vRef-02::g7.449721;16:vRef-03::f7.28883;16:vRef-04::f7.179924;32:tp-00::g7.666159;32:tp-01::g7.368594;32:tp-02::g7.651694;32:tp-03::g7.358721;32:tp-10::f7.638919;32:tp-11::f7.339421;32:tp-12::f7.351988;32:tp-13::f7.654397;32:tp-14::f7.561633;32:tp-15::f7.242684;32:tp-16::f7.161881;32:tp-17::f7.453239;32:tp-18::f7.141389;32:tp-20::f7.967826;32:tp-21::f7.858639;32:tp-22::f7.747834;32:tp-23::e7.859944;32:tp-24::e7.553933;32:tp-25::e7.237159;32:tp-26::e8.831146;32:tp-27::f8.712447;32:tp-28::f8.822923;32:tp-29::f8.931654;64:fp-120-0:7:h7.619581;64:fp-150-0:12:h7.37651;64:fp-150-1:12:h7.613273; ``` ::: ## /import You can use it to load a previously created export into the current room. The import does not overwrite anything and does not check for duplication. In case of a name conflict, there will be several references with the same name. --- # requirements: ## Telegram you can use it on desktop or mobile/tablet ## Discord\* I understand that Telegram is less popular in the western hemisphere, so I'll provide the possibility to send the data and the map to [Discord](#discordwebhook). **Only the room creator can set it.** ![image](https://hackmd.io/_uploads/H1VpfUAmWx.png) # Saved data or the GDPR **Telegram id** and **name** _(which you can change at any time)_, only these are stored as personal data. In addition, the **Discord webhook** may also be considered personal data, which you can change or delete at any time. The **Telegram id** and **webhook** **never gets published, anywhere**! _(**name** only in the current room)_ **I will not use this data for any other purpose and will not disclose it to anyone else!** I may make mistakes, but I will do my best to ensure that no personal information is leaked or falls into the hands of third parties! ### Periodically I completely delete the database! Unused rooms will be deleted within ~2 days, inactive users after ~30 days. _This is not a ban, only your data will be deleted from the system. Can be reactivated at any time._ Within the application, I provide the possibility to **view**, **modify** and **delete** your recorded data # They helped Thanks to **Vizi** for the \"test shoot\" and to **LMT** for the link to the \"other\" gunner app -------- # Known errors > [!Caution] Wind calculation! Currently partially usable > [!Caution] Sometimes not responding, I'm working on this bug! ![image](https://hackmd.io/_uploads/B1_oX7Xd-g.png)