QTTC (Quake Trigger Text Converter) V3.5
For a while i've been doing manually all my text input into Quake via Trenchbroom, using Word and notepad to make small quick notes.
I decided to make a small script to automate the process, and of course, have fun in the journey (with the help of my friend Nepta in coding).
While mappers may just do it on their own manually and naturally i decided to make a small python script to help me, and maybe others.
----
Update July 11st 2026: I've made a side-upgrade that uses Sunvalley and TTK libraries to improve visuals and also the function to detect if your computer has night mode or light mode and adapt based to it, the update remained in Github and never got the will to update it again... it's called the sv version and there's a Windows and Linux build for it... otherwise you can download the one on the site, it's final.
https://github.com/ChumaSuey/QTTC/releases/tag/V3.5 ( Win-sv and Lin-sv are the respective side-graded versions )
Thank you for everything, Chuma.
How to run it and what does is it require?
The script requires Python installed in your machine, it was interpreted or made with Python 3.9, but a regular python version should be enough for the script to work.
Works in Windows 11, 10 and in Linux it has been tested in Mint and Arch with a python version. (hope it runs for you as well)
QTTC-Win is the windows version, QTTC-Lin is the linux version (binaries made in Ubuntu) [for V2.5 they are split in Windows binaries and Linux binaries folder]
Instructions on how to use the script (from the GUI perspective) with direct steps.
from Wadcleaver GUI's feedback i've implemented and Nepta did an optimization so it looks good in most screens, but here it is what you will see.
We've made some changes to the script in order to have more functions, so pictures are rather different than the previous version:
1. Open the script
2. Input the text into the text input field.
So we will use an extract from the song "The root of all evil" by Dream Theater with some adds to make an example:
Proud "enough" for you to call me arrogant
Greedy 'enough' to be labeled a thief
Angry "enough" for me to go and hurt a man
Cruel 'enough' for me to feel no grief
this will be our input.
3. Click Translate to verify the text.
Here we see the 4 functions the script does:
- It line breaks the line at 40 chars maximum.
- Converts " " into `
- Converts ' ' into `
- Converts " " into `
It used to convert ' into ` but Quake supports single ticks, just not curly ticks... The last paragraph was left with the single ticks was left just for demonstration purposes.
The text appears as if it would be inserted into Trenchbroom, this change remains intentional because basically this text is the variable the script is saving to keep the text.
4. Choose your method of saving the text.
This part was reworked on to have more options at hand.
"Copy" button will copy the text into clipboard:
> Proud `enough` for you to call me\narrogant Greedy `enough` to be labeled a\nthief Angry enough for me to go and hurt\na man Cruel enough for me to feel no\ngrief
"Copy into trigger_relay" will copy the text into clipboard (intended to be copied into Trenchbroom) as a trigger_relay filling the "message" field, this was made to copy it as a reference to a point entity.
"Copy into trigger_textstory" will copy the text into clipboard (intended to be copied into Trenchbroom) as a trigger_textstory filling the "message" field ( a brush of 3 units of height and wide), this was made to copy it as a reference to a brush entity.
With this, the main functionality is covered, so the other 2 buttons that remain are the following ones :
"Save" will just save the text as a text file wherever you point the path at (in Windows it's a typical save, indicate name of the file and where you want it saved with the explorer)
"Clear" will clear the input and output text.
This one is a bit more complex but i'll explain quickly:
"Linebreak Cleaning" will just clean the existent text of any linebreak "/n" within the text input field, this was programmed so the mapper doesn't have to get to the original notes to retranslate the desired text.
This is intended to work for an already translated text, and it will only clean the text input field, not the translated output field... an example below.
Green lines show where the linebreaks (/n) were in the translated text, The blue where they were cleaned from.
As it can be seen within the green lines in the text input field, the linebreaks have been cleaned... the red lines are where the linebreaks should go.
FOR MORE DETAILS, CHECK THE GITHUB LINK!
I've summarized the utility for uploading purposes.
github.com
For a while i've been doing manually all my text input into Quake via Trenchbroom, using Word and notepad to make small quick notes.
I decided to make a small script to automate the process, and of course, have fun in the journey (with the help of my friend Nepta in coding).
While mappers may just do it on their own manually and naturally i decided to make a small python script to help me, and maybe others.
----
Update July 11st 2026: I've made a side-upgrade that uses Sunvalley and TTK libraries to improve visuals and also the function to detect if your computer has night mode or light mode and adapt based to it, the update remained in Github and never got the will to update it again... it's called the sv version and there's a Windows and Linux build for it... otherwise you can download the one on the site, it's final.
https://github.com/ChumaSuey/QTTC/releases/tag/V3.5 ( Win-sv and Lin-sv are the respective side-graded versions )
Thank you for everything, Chuma.
How to run it and what does is it require?
The script requires Python installed in your machine, it was interpreted or made with Python 3.9, but a regular python version should be enough for the script to work.
Works in Windows 11, 10 and in Linux it has been tested in Mint and Arch with a python version. (hope it runs for you as well)
QTTC-Win is the windows version, QTTC-Lin is the linux version (binaries made in Ubuntu) [for V2.5 they are split in Windows binaries and Linux binaries folder]
Instructions on how to use the script (from the GUI perspective) with direct steps.
from Wadcleaver GUI's feedback i've implemented and Nepta did an optimization so it looks good in most screens, but here it is what you will see.
We've made some changes to the script in order to have more functions, so pictures are rather different than the previous version:
1. Open the script
2. Input the text into the text input field.
So we will use an extract from the song "The root of all evil" by Dream Theater with some adds to make an example:
Proud "enough" for you to call me arrogant
Greedy 'enough' to be labeled a thief
Angry "enough" for me to go and hurt a man
Cruel 'enough' for me to feel no grief
this will be our input.
3. Click Translate to verify the text.
Here we see the 4 functions the script does:
- It line breaks the line at 40 chars maximum.
- Converts " " into `
- Converts ' ' into `
- Converts " " into `
It used to convert ' into ` but Quake supports single ticks, just not curly ticks... The last paragraph was left with the single ticks was left just for demonstration purposes.
The text appears as if it would be inserted into Trenchbroom, this change remains intentional because basically this text is the variable the script is saving to keep the text.
4. Choose your method of saving the text.
This part was reworked on to have more options at hand.
"Copy" button will copy the text into clipboard:
> Proud `enough` for you to call me\narrogant Greedy `enough` to be labeled a\nthief Angry enough for me to go and hurt\na man Cruel enough for me to feel no\ngrief
"Copy into trigger_relay" will copy the text into clipboard (intended to be copied into Trenchbroom) as a trigger_relay filling the "message" field, this was made to copy it as a reference to a point entity.
"Copy into trigger_textstory" will copy the text into clipboard (intended to be copied into Trenchbroom) as a trigger_textstory filling the "message" field ( a brush of 3 units of height and wide), this was made to copy it as a reference to a brush entity.
With this, the main functionality is covered, so the other 2 buttons that remain are the following ones :
"Save" will just save the text as a text file wherever you point the path at (in Windows it's a typical save, indicate name of the file and where you want it saved with the explorer)
"Clear" will clear the input and output text.
This one is a bit more complex but i'll explain quickly:
"Linebreak Cleaning" will just clean the existent text of any linebreak "/n" within the text input field, this was programmed so the mapper doesn't have to get to the original notes to retranslate the desired text.
This is intended to work for an already translated text, and it will only clean the text input field, not the translated output field... an example below.
Green lines show where the linebreaks (/n) were in the translated text, The blue where they were cleaned from.
As it can be seen within the green lines in the text input field, the linebreaks have been cleaned... the red lines are where the linebreaks should go.
FOR MORE DETAILS, CHECK THE GITHUB LINK!
I've summarized the utility for uploading purposes.
GitHub - ChumaSuey/QTTC: Quake trigger text converter.
Quake trigger text converter. Contribute to ChumaSuey/QTTC development by creating an account on GitHub.