# 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 the participants. #Discord(in near real-time, even via Discord!!!)
📺 https://youtu.be/d2amVYxveRQ _(some basic stuff)_
📺 https://youtube.com/shorts/TMTIpF0tUo8
📺 https://youtube.com/shorts/dej4U97RMbI
The program’s goal is to bring participants together into a group. It delivers the data to gun crews in a **standardized, easy-to-read format**.
> Despite appearances, this is a text-based Telegram application, with only a very small part dedicated to map visualization.

[It’s actually the same.](https://foxhole-map.dob.systems)


[https://t.me/faoHelper_bot](https://t.me/faoHelper_bot)
> All of these are machine-translated, except for Hungarian and English. If you’d like to help with translations or have found a mistake:[](https://crowdin.com/project/faomanual)
# How to use the Telegram bot
It primarily assists the scout in their work, but the real benefits emerge during group operations.
> The slash (`/`) commands mentioned below do not always need to be typed manually. A context-specific keyboard is displayed to the user, including the most important commands. Only the coordinates need to be entered.
## Creator
**/start**
**/create**
This creates a room; the creator becomes the owner and is given the scout role. Other participants can join using the room code.
... Typical workflow:* Assign roles
* Determine positions
* Create vRefs
* Fire control
**/leave**
It removes all participants, deletes the vRefs, and deletes the room.
## Team members
**/start**
In this case, the user joins the room as an artillery operator, which can be changed by the battery commander or the scout _(**[role](#role)**)_.
# Basics
## Coordinates – MapCode
On the map—depending on the mod—the coordinates of a given position can be read. If you Ctrl-click on the map, it will also be posted in the current chat.
_(Applies only to the current hex.)_

At a slightly lower magnification, the map grid is more visible, and within it the 3x3 division. Naturally, they work with a slightly different format, as their purpose is different.
**Colonial Home Region-K9k3** = (**map name**)-(**x**)(**y**)k(**sg1**)
> In spoken English, the separator ‘k’ is called ‘keypad’
| function | value |
| -------- | -------------------- |
| Map Name | Colonial Home Region |
| x | K |
| y | 9 |
| sg1 | 3 |
This allows you to pinpoint an area of roughly 42 × 42 meters on the map.
:::info
:information_source: “When driving a vehicle, the displayed map covers about ~360 meters. This can be helpful when deciding where to position the artillery in relation to the target.
:::warning
:warning:_however, it may appear smaller on other resolutions_
:::
I changed this as follows:
- I omitted the map name
- The separating letter \"k\" is replaced by \".\" . _(faster typing)_
- I subdivide the subgrid into 9 additional squares.
> This results in a grid with roughly 14-meter resolution. (Longer coordinates may also appear in the program; these are computed values. They have an accuracy of up to 10 cm)

### 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 map shows both the coordinates and the grid boxes, which can be useful as a starting point

## 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 meter== can be achieved.

### Use of rangefinder
Normally, it shouldn’t cause any issues. You look at it, read the direction and distance, record it and you're happy 🥳.
> [!Caution] **The practice shows a slightly different picture.**
The measurement was taken from one point. Without moving, I only rotated the camera. (from vRef-02, at a distance of ~72 meters, with a building in the lower-left corner)
\*\*The most accurate result was achieved when the target was below my position, effectively giving a top-down view of the building and minimizing error.
_(ideally the target direction is towards the bottom edge of the screen)_
The others were to the right, left and forward of my position. The errors are clearly visible at angles and distances _(5-8m)_.

> [!Tip] If time and circumstances allow, it’s worth paying attention to this small detail or practicing it to increase accuracy.
> [!Warning]
> My biggest and most common mistake is that sometimes after a move I **forget to set my new position** and take new points relative to the old position. It’s a subtle error, and I usually only realize it after the problem has already occurred. If I've just measured a target, it's not a big problem, but if I've just worked ahead and measured a section of the frontline... Then it's downright painful 😭
> This can be easily checked on [map](#map), or if the gunners indicate that the range or direction is very wrong.
> So it's important to periodically check the map to see what I'm doing, and _(especially if most of the team is on Discord)_ to send the map to Discord. _(it's inside /helpers if you have [webhook](#discord) enabled for the room)_
> _If everyone is on Telegram, you don't have to worry about sending. Anyone can request a map of the current state._
> With a blank map _(no hex set and nothing linked to a map coordinate)_ it is much harder to detect errors. ( _except I can't see where the bullet hit_ 🤣 )
# Tasks
## Spotter
If he organizes his work and his team well, he only has to locate 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- firing data.
#### /mypos
> **mapCode** - absolute positioning
> **polar** - if you want to move somewhere. You pre-mark your future position and then operate 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. _In a well-structured network with properly set wind, this is not necessary._ 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 added, the displacement is added to the previous offset. \*(it accumulates) If you’ve completely lost track, it can also be reset.

##### 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° |
A good rule of thumb is that at 100 meters, every 5 meters equals roughly 3°. This also works in reverse: with 5 m spacing between the guns, at a distance of 100 m, the direction must be adjusted by 3° so they fire at the same point
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/distance**
#### /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)_. This way, guns at different distances and/or different guns can accurately fire at the same targets. _(until the next wind change)_
### sessions
#### just the map
Even If all participants are positioned using the more precise (xy.ss) coordinates, a **==maximum error of ±28m==** still occur! Apply an offset from the first few volleys, then continue until the next wind adjustment the gun can accommodate.
_(at similar ranges and with the same guns)_
In this case, _(since the exact positions of the participants and the target are unknown)_ [**/o2w**](#o2w) will return incorrect data!!! The position error and wind compensation are cumulative. The next paragraph shows that taking accurate references isn’t necessarily difficult. **Even over long distances, without chaining!**
This is related to the option of loading public buildings [vRef-buiding](#vRef-🃏). Precise, with one fewer potential error.
#### vector chains
It selects a reference point (which can be itself, a battery commander, or the target). The important thing is that it roughly matches the map).
##### onSubGrid
I align myself with the 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):


In the image above, the vRefs are chained to the corners of the bridges _(useful, as they remain visible even from cover)_
After this, the other participants are linked relative to the reference point. In this case the position error is minimal, in theory only the wind has to be compensated.

#### 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 any loss of accuracy.

#### 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 temporary marker
## Main Battery aka Lead Battery
It reduces the spotter’s workload, as they only need to position the battery commander rather than everyone. ==After the battery commander has been given an accurate position 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 binoculars, 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 important thing is that at least **one reference stays in place while the others move** (this applies to all participants 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 speed indicator: 🚩

> in calm conditions, the 120mm at 220 yards averaged 4 hits in 10 shots on a target the size of a house. This shows how much dispersion affects the result
## vRef 🃏
The Jolly Joker! Marker pole. 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 during motion.
> ==**tp**== **target point**, and - unlike **fp** - **does not count as a battery**! So it is not included in the firing data calculation. It can be directly imported as a target.
> ==**fp**== **firing position** Marking a planned firing position on the map or a battery that is not on Telegram. When processing, the scout receives a firing data for **fp** that he can call out (Discord). Or ==**Discord webhook**==. You can also assign a gun to this.
> ==**lp**== **loading position** planned reloading point. I have no firing data
> ==**b**== **building** loads various public buildings belonging to the server (able, charlie) and the selected map. (town base, seaport, etc.) At most, only the buildings visible on the ‘secure map’ (default: N) will be shown here.
> It acts like **tp**.
> Format: **b-tb2-00** - Town Base 2 position

All items listed here [exportable](#export)
---
# Commands
## /help
it gives a description of all usable commands
## /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 role of the teammate. arty, spotter, main battery, wind
## /calc
It calculates and displays the direction and distance from the target to the selected point. It works the same as /offset but it doesn't change the firing data, **it just gives information to the scout**.
## /arty
In 2 steps _(ammo icon)_ assigns the appropriate artillery to the room or to the selected character _(role:**arty**, role:**main battery**, vRef:**fp**)_
## /map
You can select the current map. The recorded data can be viewed on the map. Delete the map from the room.
ref: [icons](https://cyanavigation.com/how-to-read-and-use-military-map-symbols-a-beginners-guide/)

## /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.

## /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 firing data _(new target coordinate, offset, wind change, whatever you **record**)_ it is sent automatically, map is sent only on request.

:::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

:::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 targets
```
32:tp-00::l9.776811;32:tp-01::l8.179713;32:tp-02::l8.137288;32:tp-03::l8.183941;
```
:::
:::success
#### second island targets
```
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

:::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
This allows you 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 on 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.**

# 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 will 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
# Supporters
## Special Thanks To:
- **Vizi** for the \"test shoot\"
- **LMT** for the link to \"another\" gunner's app
- **Thunderz** for the English translation.
--------
# Known issues
> [!Caution] Wind calculation! Currently partially usable
> [!Caution] Sometimes it is not responding, I'm working on this bug!
