ATC: Good-BYE! (?)

This issue has me fired up enough to momentarily return from my retirement from the forums. There actually is a bug, here, but the root cause was missed and fixed with a hard-coding instead of tackling the issue that’s been there since release. The original bug still remains, unfixed.

The bug is actually really simple, but it requires a lot of background to explain.

TL;DR

Expand for the TL;DR

In Sim Update 14, someone hard-coded the word “Goodbye” into five lines (should have been six, but that’s another story…and another bug). That’s not how it should have been fixed. There was already a set of localizations available that do the job of “Good day,” called PILOT_HUMAN.1, PILOT_HUMAN.2, PILOT_HUMAN.3 that should have been renamed to PILOT_HUMAN.0, PILOT_HUMAN.1, and PILOT_HUMAN.2. If nothing had been done but that, the pilot would be saying “Good day” and this thread wouldn’t exist.

But there’s more to the story than that: There are actually three bugs in here. (Four, if you count the aforementioned extra bug that they created when they fixed this.) And if you want to read more, you can see my proposed fix in the section, Putting it all together: A proposed comprehensive fix.

If you want this fixed thoroughly, I would suggest filing a Zendesk bug report. I don’t mind if anyone references this post in their Zendesk ticket. Though I hope that the QA and/or development teams would skip the TL;DR, as I omitted information here in the name of brevity.

The full version

Background

In MSFS (2020 – hopefully it won’t work like this in 2024), localizations are handled by text files with variable names in braces { } that the sim’s code references.

In Sim Update 14, these are the five lines in the English localization file with a “Goodbye” in them:

      "ATCCOM.AC_AGNT_HANDOFF_RESP.0.text": "{frequency_new} {callsign_shortened}. {PILOT_HUMAN} Goodbye.",
      "ATCCOM.AC_AGNT_HANDOFF_RESP.0.tts": "{frequency_new} {callsign_shortened}. {PILOT_HUMAN} Goodbye.",
      "ATCCOM.AC_AGNT_HANDOFF_RESP.1.text": "{frequency_new}, {callsign_shortened}. {PILOT_HUMAN} Goodbye.",
      "ATCCOM.AC_AGNT_HANDOFF_RESP.1.tts": "{frequency_new}, {callsign_shortened}. {PILOT_HUMAN} Goodbye.",
      "ATCCOM.AC_AGNT_HANDOFF_RESP.2.text": "Going to {frequency_new}, {callsign_shortened}. {PILOT_HUMAN} Goodbye.",

The lines come in pairs. Think of each pair of lines as working together: The .text lines dictate what is displayed in the ATC window and subtitles. The corresponding .tts lines dictate what the pilot or ATC speaks. (In the English version, these two lines are almost always the same, although they don’t have to be. In other languages, the .tts version stays the same and the .text version is in that other language.)

And if you’re asking yourself, “‘Pairs?’ What happened to the sixth line?” “Goodbye” was omitted from that one:

      "ATCCOM.AC_AGNT_HANDOFF_RESP.2.tts": "Going to {frequency_new}, {callsign_shortened}. {PILOT_HUMAN}",

The way it works is, in MSFS, some code will call ATCCOM.AC_AGNT_HANDOFF_RESP, and the sim will choose one of the three pairs at random (.0, .1, or .2) and deliver the proper text and sound according to your chosen language and the corresponding localization file. So every once in a while, it will randomly choose the third option and you’ll see the ATC window say “Goodbye,” but the pilot won’t say “Goodbye” because it’s missing from the .tts line. See:

Problem #1: The hard-coding

So, where’s the hard-coding I mentioned? That {PILOT_HUMAN} you see in the above lines is another variable in the localization files. If you hunt further in the English localization file, you’ll find these six lines:

      "ATCCOM.PILOT_HUMAN.1.text": "Good day.",
      "ATCCOM.PILOT_HUMAN.1.tts": "Good day.",
      "ATCCOM.PILOT_HUMAN.2.text": "Thanks for the help.",
      "ATCCOM.PILOT_HUMAN.2.tts": "Thanks for the help.",
      "ATCCOM.PILOT_HUMAN.3.text": "Thanks.",
      "ATCCOM.PILOT_HUMAN.3.tts": "Thanks.",

Notice how the first set of lines I showed before have a .0, .1, and .2 in them? Well, these ones have a .1, .2, and .3. They shouldn’t: They should also be .0, .1, and .2, just as they are, above. And THAT is what should have been changed. To fix the longstanding bug that has been with the sim since release, the developer should have left the ATCCOM.AC_AGNT_HANDOFF_RESP lines alone and they should have changed the PILOT_HUMAN lines from .1, .2, .3 to .0, .1., .2. If they had done that, we wouldn’t need the hard-coded “Goodbye” lines.

Problem #2: PILOT_HUMAN

But wait, there’s more! There’s yet another bug in there that’s been there since release:

Judging by the three lines ATCCOM.PILOT_HUMAN.0, ATCCOM.PILOT_HUMAN.1, and ATCCOM.PILOT_HUMAN.2, you would think that if you made the above changes, the sim would automatically start rotating between “Good day,” “Thanks for the help,” and “Thanks.” But it doesn’t. I wrote my own phraseology mod (available at the end of this post), and I fixed this issue for my own sim over two years ago. And I have never heard it say anything other than “Good day.” It seems that the sim’s code only looks for ATCCOM.PILOT_HUMAN.0 and nothing else. So if all you did was to fix the above localizations as described, you would get “Good day” all the time, which is as far as any mod could get (fixing this bug requires a code tweak and my mod can’t alter code). For a more robust implementation, this bug should be fixed, too, so that it randomly chooses one of the three lines. The localization lines already exist, but the randomization code for these lines isn’t working.

(As an aside, I’m not a big fan of “Thanks for the help.” I’ve heard it said in the real world, but usually only when the pilot and ATC have had some kind of non-standard interaction. In a system where you would hear the same thing one out of every three times, and where the pilot-ATC interactions are going to be as standard as you could get, I don’t think “Thanks for the help” makes much sense. In my mod, I have “Good day,” “Thanks,” and a blank line that I’ll explain in the next section. Although, to repeat myself, since the mod can’t rewrite the sim’s code, the pilot only says “Good day” and nothing else.)

Problem #3: AGNT_HUMAN

(Sorry. I know this is long. As I said, this is really simple, but it takes a lot of explanation.)

The above variable is called PILOT_HUMAN, and only the pilot speaks it. But ATC has one, too, and it’s called AGNT_HUMAN. From release until Sim Update 4, it was broken and looked like this (note the .1 instead of the .0):

      "ATCCOM.AGNT_HUMAN.1.text": "Good day.",
      "ATCCOM.AGNT_HUMAN.1.tts": "Good day.",

You may recall that at launch, there was no “Good day” in ATC. In Sim Update 5, the above lines were corrected as follows, and it’s still like this in Sim Update 14 today:

      "ATCCOM.AGNT_HUMAN.0.text": "Good day.",
      "ATCCOM.AGNT_HUMAN.0.tts": "Good day.",
      "ATCCOM.AGNT_HUMAN.1.text": "Good day.",
      "ATCCOM.AGNT_HUMAN.1.tts": "Good day.",

For even more realism, AGNT_HUMAN.1 could be made to say something else. But I actually prefer the idea of making the second one blank:

      "ATCCOM.AGNT_HUMAN.1.text": "",
      "ATCCOM.AGNT_HUMAN.1.tts": "",

So that 50% of the time, ATC says “Good day” and the other 50% of the time, ATC says nothing. Or maybe introduce an ATCCOM.AGNT_HUMAN.2 and have it say nothing ⅓ of the time. But that’s my opinion. Right now, just like PILOT_HUMAN, the code to randomly choose between these two doesn’t work, despite the existence of two pairs of lines.

Putting it all together: A proposed comprehensive fix

So in summary,

  1. These ATCCOM.AC_AGNT_HANDOFF_RESP.0 lines should not have been hard-coded, as a variable, PILOT_HUMAN already exists for the job.

    These five lines:

       "ATCCOM.AC_AGNT_HANDOFF_RESP.0.text": "{frequency_new} {callsign_shortened}. {PILOT_HUMAN} Goodbye.",
       "ATCCOM.AC_AGNT_HANDOFF_RESP.0.tts": "{frequency_new} {callsign_shortened}. {PILOT_HUMAN} Goodbye.",
       "ATCCOM.AC_AGNT_HANDOFF_RESP.1.text": "{frequency_new}, {callsign_shortened}. {PILOT_HUMAN} Goodbye.",
       "ATCCOM.AC_AGNT_HANDOFF_RESP.1.tts": "{frequency_new}, {callsign_shortened}. {PILOT_HUMAN} Goodbye.",
       "ATCCOM.AC_AGNT_HANDOFF_RESP.2.text": "Going to {frequency_new}, {callsign_shortened}. {PILOT_HUMAN} Goodbye.",
    

    should be reverted to their pre-Sim Update 14 state, thereby removing “Goodbye” and the missing sixth “Goodbye”, but more importantly, also removing a hard-coding that didn’t have to be there in the first place:

       "ATCCOM.AC_AGNT_HANDOFF_RESP.0.text": "{frequency_new} for {callsign_shortened}. {PILOT_HUMAN}",
       "ATCCOM.AC_AGNT_HANDOFF_RESP.0.tts": "{frequency_new} for {callsign_shortened}. {PILOT_HUMAN}",
       "ATCCOM.AC_AGNT_HANDOFF_RESP.1.text": "{frequency_new}, {callsign_shortened}. {PILOT_HUMAN}",
       "ATCCOM.AC_AGNT_HANDOFF_RESP.1.tts": "{frequency_new}, {callsign_shortened}. {PILOT_HUMAN}",
       "ATCCOM.AC_AGNT_HANDOFF_RESP.2.text": "Going to {frequency_new}, {callsign_shortened}. {PILOT_HUMAN}",
    
  2. The six PILOT_HUMAN lines:

       "ATCCOM.PILOT_HUMAN.1.text": "Good day.",
       "ATCCOM.PILOT_HUMAN.1.tts": "Good day.",
       "ATCCOM.PILOT_HUMAN.2.text": "Thanks for the help.",
       "ATCCOM.PILOT_HUMAN.2.tts": "Thanks for the help.",
       "ATCCOM.PILOT_HUMAN.3.text": "Thanks.",
       "ATCCOM.PILOT_HUMAN.3.tts": "Thanks.",
    

    should all be shifted down one number:

       "ATCCOM.PILOT_HUMAN.0.text": "Good day.",
       "ATCCOM.PILOT_HUMAN.0.tts": "Good day.",
       "ATCCOM.PILOT_HUMAN.1.text": "Thanks for the help.",
       "ATCCOM.PILOT_HUMAN.1.tts": "Thanks for the help.",
       "ATCCOM.PILOT_HUMAN.2.text": "Thanks.",
       "ATCCOM.PILOT_HUMAN.2.tts": "Thanks.",
    
  3. Code should be altered/fixed so that the sim actually randomly chooses between PILOT_HUMAN.0, PILOT_HUMAN.1, and PILOT_HUMAN.2. These lines exist in the localization file, so clearly there was an intent to use them.

    This is a subjective matter of taste, but in my phraseology mod, they look like this:

       "ATCCOM.PILOT_HUMAN.0.text": "Good day.",
       "ATCCOM.PILOT_HUMAN.0.tts": "Goodday.",
       "ATCCOM.PILOT_HUMAN.1.text": "",
       "ATCCOM.PILOT_HUMAN.1.tts": "",
       "ATCCOM.PILOT_HUMAN.2.text": "Thanks.",
       "ATCCOM.PILOT_HUMAN.2.tts": " - Thanks.",
    

    (This post is already ridiculous, so I won’t get into why I wrote “Goodday” and put the hyphen in the last PILOT_HUMAN.2. I’ll just say that it was deliberate.)

  4. The same thing should be done on the AGNT_HUMAN side so that the sim randomly chooses between ATCCOM.AGNT_HUMAN.0 and ATCCOM.AGNT_HUMAN.1. Again, both lines exist, and the sim does nothing with the second line.

    Another subjective matter of taste, but in my phraseology mod, those lines look like this:

       "ATCCOM.AGNT_HUMAN.0.text": "Good day.",
       "ATCCOM.AGNT_HUMAN.0.tts": "Goodday.",
       "ATCCOM.AGNT_HUMAN.1.text": "",
       "ATCCOM.AGNT_HUMAN.1.tts": "",
    

There was a beta bug. What did they fix in the beta?

They actually did change something in the beta. They didn’t just mark it fixed-on-live and do nothing. The forums bug report filed in the beta said that “Good bye” should be “Goodbye”. That’s what they fixed. I’m not going to copy-and-paste all five lines, but this is what one line looked like in the first beta round:

      "ATCCOM.AC_AGNT_HANDOFF_RESP.0.text": "{frequency_new} {callsign_shortened}. {PILOT_HUMAN} Good bye.",

And here’s how it looked after that beta bug was logged:

      "ATCCOM.AC_AGNT_HANDOFF_RESP.0.text": "{frequency_new} {callsign_shortened}. {PILOT_HUMAN} Goodbye.",

There was commentary in that bug thread about other things they should change it to, but the original bug was about changing “good bye” to “goodbye”, and that’s what they did.

If “good bye” bothers you, log a bug report on Zendesk

I think that Zendesk has vastly improved since the sim launched. It is now my primary place for logging bugs, not the forums.

I logged Zendesk ticket #201564 on this issue. If this bothers you as it does me, I suggest logging one, too. If you agree with my approach, you could tell them to revert the ATCCOM.AC_AGNT_HANDOFF_RESP localization lines back to what they were in Sim Update 13 and to fix the PILOT_HUMAN and AGNT_HUMAN bugs that have been there since release. You could also refer them to this post.

Why log a separate bug report if I’ve already done one? Zendesk says that “middle-of-the-road and cosmetic bugs are prioritized based on reproduction and the number of times reported,” so the more people they hear from, the more likely this will be fixed.

Don’t spam them, though: If you create three duplicate Zendesk bug reports, they’re going to throw two of them out. They need to hear from 20 people, not the same person 20 times. And please be nice. The Zendesk people don’t control what goes into the sim.

My phraseology mod

If you want to see “Good bye” go away, one way to do it would be to use a phraseology mod I developed after Sim Update 4. The ATC fixes they employed barely scratched the surface of what could be changed. This mod doesn’t fix everything ATC: It can’t because it can’t change code. But it makes ATC, particularly VFR ATC, much more tolerable.

Get the phraseology mod here

The mod is three files. It should come in a .zip file, but that’s not allowed, here. I’ll distribute two of them, and I’m comfortable saying you’ll have to rename the first file to “faa-phraseology.ps1” because it is a text file:
faa-phraseology.ps1.txt (196.4 KB)
Readme.txt (10.3 KB)
The third file is a .bat file. I don’t feel comfortable uploading a .bat file as a text file even though it’s innocuous, so you can just re-create it yourself with a text editor: setup.bat:

@echo off
PowerShell -NoProfile -ExecutionPolicy Bypass -File "faa-phraseology.ps1"

Just put all three files in a folder somewhere and run the .bat file. Or, if you would feel safer not running batch files, right-click the .ps1 file and choose “Run with PowerShell”. Then follow the prompts.


With due respect to the simplified phraseology mod, that’s a single localization file that you copy over the existing localization file. The problem is that the sim is constantly changing, and if you replace that file, you’re also overwriting recent changes pertaining to new sim features and things like the startup screen. That mod is only 3 months old, so using it right now probably has minimal consequences. But over the long term, it could cause problems.

My mod is a shell script that does 600+ find-and-replace operations on the English localization file. What makes my mod different is that if there are new sim changes, the mod doesn’t overwrite them. The mod doesn’t overwrite anything it doesn’t expect to see. And it has backup and restore functionality. Just like the other mod, you have to use this every time there’s a sim or beta update.

I know it sounds like I’m here to promote my mod, but I’m not. My mod is 2½ years old, and so far, I’ve only given it privately to a few people. I’m making it public now because this “Good bye” thing has bothered me enough to come out of my hole long enough to write this.

And now that my ridiculously-long post is over, I’m going back to retirement again… :wave:

12 Likes