Finding the true path the story will take...
Can find downloads here
To make sure this is as accessible as possible to all people, all examples below use free and open source software, and there is no requirement to use any service or be connected to the internet for any of this to work. I am also providing files that would work on Linux, so even the Operating System would not require a potentially country restricted one like Windows, or hardware specific ones like Macintosh.
- Spreadsheet: OnlyOffice
- Markdown Reader: MarkText.
Note: If you are copying names directly from Discord, or just names in general contain non-ASCII characters, then I would recommend you change a setting in MarkText to better handle UTF encoding.
File
-> Preferences
-> Editor
-> File Representation
And turn off "Automatically detect file encoding" and make sure default encoding it set to UTF-8
If you are looking for a specific section there is a Table of Contents:
I made this app for Tower of God Wiki/Reddit Discord, but there is no reason this couldn't be used by other communities or for personal use. This is the format that the App is based around, but it is not limited to this, and offers a wide variety of customization:
I tried to make the app as simple to interface with as can be. After having downloaded the App, simply put it in a directory of your choice. I have imagined it would go into a folder, and then along with it, another folder to hold the Chapter Spreadsheets, but they don't have to be in the same place for the App to work.
Example:
Tower Of God Bingo
-> Chapters
-> tog-bingo.exe
To start with, the spreadsheet:
The app works on a per file basis, so each new chapter, or just any new bingo in general, would have its own file. All entries are done on the first sheet. Column A is where all names go. Column B is where their guesses go. The names should be continuous, with no empty row in-between any names. If done as such, no names past the break would be analyzed.
All characters are valid except for P
which is reserved to pass on squares. In the examples below I use Y
and N
, but you could just as easily use X
and O
, or any other combination of characters, what's important here is to be consistent and everyone follow the syntax. A player can only Pass on the bonus squares. If they attempt to Pass on squares they can't, the app will mark it as an incorrect guess by them. Case doesn't matter, nor any spaces.
Getting the path to the file is pretty simple. In the normal Windows Explorer, you can click the arrow on the top right and more options will cascade. Simply click the file to highlight it, and then click "Copy path". This will copy it to the clipboard.
If you are using OneCommander, there is an option on the bottom of the right-click context menu.
(Note: Keyboard shortcut only works in OneCommander)
On Linux you can simply just copy the file as a normal copy, and when you paste inside a text field, it will paste the path to the file.
Note: The Spreadsheet Must Not be Opened By Another Program When Using App
On Windows you can simply open it like any other program.
On Linux, first you must make sure its executable.
Then you can right-click in an empty space inside the directory, and click open in terminal.
This will open the current directory in the terminal. From there type ./
and then the program name. Just typing tog and pressing TAB
should be enough to auto complete.
Upon running the app, it will ask you to decide on a choice:
Entering 1
will load the default settings based on this format:
That is to say a 4x3 grid, with the bonus being the final column. Think of it like a 3x3 + 1 Column:
Grid | 1 | 2 | 3 | Bonus |
---|---|---|---|---|
A | 10 | 10 | 10 | 20 |
B | 30 | 30 | 30 | 60 |
C | 50 | 50 | 50 | 100 |
After entering 1
and pressing ENTER
to submit, it will inform you the settings were loaded and now ask for the path you should have copied to your clipboard.
On Windows you can simply Right-Mouse CLICK
and it should paste the path.
You can also press CTRL + SHIFT + V
on your keyboard to paste it. This option will also work on Linux.
One you have pasted it, press ENTER
to submit it. The Program will now ask for you to enter a Key. This Key is the correct sequence of the bingo once the correct bingo is known. The players guesses are compared against the known correct Key.
The order is read from left to right, and row to row.
-->
10
10
10
20
-->
30
30
30
60
-->
50
50
50
100
For the default settings, the key must be 12 characters long. If you do not enter enough, the program will tell prompt you again. A Key should NOT contain any other characters other than the decided syntax, Y
and N
, X
and O
, etc. Case doesn't matter, nor any spaces.
Upon entering in the key press ENTER
to submit. If there are no errors, it will tell you it successfully completed the operation, and tell you how many guesses have been gone through.
The output file is saved in the same location as the previously entered path, and takes the same name as well. It saves it as a Markdown file, but it also functions just fine as a normal text document. The output file is pre ordered from highest score to lowest, with the names corresponding.
Along with the scores, it also outputs two tables, the first one shows the correct bingo answer, and the second shows the total number of correct picks for the respective squares. Its output in a percentage format.
Besides the default configuration, the solver also supports custom inputs.
The maximum size for the grid is 255 x 255, for a total of 65,025 squares. Under realistic conditions this is well beyond reasonable usage, as there would need to be just as many questions that are thought up.
Press 2
and press ENTER
and initially it will ask you for an input of some value and also show what the default settings are for reference.
What I will be building in this example:
This amount is how many columns there are in total, including the bonus columns.
Default settings loads a value of 4.
Grid | 1 | 2 | 3 | 4 |
---|
In this example I will be using a column value of 5.
Grid | 1 | 2 | 3 | 4 | 5 |
---|
Next it asks for a row input. I'll also be using a value of 5, for a total of 25 total squares.
Grid | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
A | |||||
B | |||||
C | |||||
D | |||||
E |
Now it asks for the bonus column amount. In the default config, of the 4 total columns, the 1 final column is the bonus. Like a 3x3 grid, plus an extra row.
Grid | 1 | 2 | 3 | Bonus |
---|
For this example I will be saying that out of the 5 total columns, 2 will be bonus.
Grid | 1 | 2 | 3 | Bonus | Bonus |
---|
Next is how much each row will increment over the current row. In the default config the first row is worth 10 per normal square, with a value of 20 here, the next row will go up to 30. Then the following row will go up another 20 to equal 50.
Grid | 1 |
---|---|
A | 10 |
B | 30 |
C | 50 |
For this example I will use 50 as the value:
Grid | 1 |
---|---|
A | 10 |
B | 60 |
C | 110 |
Next is deciding the multiplier the bonus squares will have over their rows normal value. In the default config a value of 2 means that the bonus squares are worth twice the amount.
Grid | 1 | 2 | 3 | Bonus |
---|---|---|---|---|
A | 10 | 10 | 10 | 20 |
B | 30 | 30 | 30 | 60 |
I will be using a 4 here, making each bonus square worth four times the rows base amount.
Finally we have the starting rows base amount. This is what the worth is of the normal squares on the very first row. For this value I will use a 20 base value.
So for this example we have a 5x5 grid, of which the final 2 columns are bonus columns, and which the first row starts with a base value of 20, and a 4 times multiplier for the bonus squares, with each rows base value going up by 50 from the previous.
Grid | 1 | 2 | 3 | Bonus | Bonus |
---|---|---|---|---|---|
A | 20 | 20 | 20 | 80 | 80 |
B | 70 | 70 | 70 | 280 | 280 |
C | 120 | 120 | 120 | 480 | 480 |
D | 170 | 170 | 170 | 680 | 680 |
E | 220 | 220 | 220 | 880 | 880 |
It then asks to input the path. This is done just as normal.
And finally you enter the key. And with that you are done. The solver will output in the same manner as before, making a markdown file with the same name and location as the original spreadsheet. Also ordered from highest score to lowest. Also with the table of the correct answer, and the correct amount of guesses.
If you wanted a more standard Bingo format, where every square would be the same value, no bonus squares, a free square, etc., then you can also get that functionality as well.
Firstly, I will be making a 5x5 grid, with a free space in the middle. Each square will be worth 50 points, and you can pass on any square.
As the host of the Bingo, you can decide the rules to voting, where you can say to just pick what they think is going to happen, passing on squares they don't think will happen, and leave it at that. However, you could also decide to award points for those who want to say that some things wont happen instead. Its all decided on the Key input in the end. For this example I will just be taking inputs that people think will happen, and just skip those they think won't.
Now as this isn't an actual bingo, where you have to make a full connected line, a free space doesn't really serve a purpose, but just for demonstration purposes I will include it. A free square is really just that you would always enter something in that spot, that everyone knows this, and entered it in themselves in that spot for a correct guess. For this example I will use also be using X
and O
.
I set the the Columns and Rows to 5, to set the 5x5 grid size.
The way the program works by default is that only bonus squares can be Passed, so to make it possible to pass on any square in the grid, we need to set the bonus columns to the same amount as the full range of columns, in this case 5. This qualifies the full grid as "Bonus", allowing any to be passed with a P
.
As I am making each square worth 50, I set this to 50.
As I want all squares on all rows to be worth the same, 50, I will set this to 0.
Although we effectively made the entire bingo grid a bonus grid, as I've already set the value I wanted, I don't need any multiplier. I will set it to 1 so that the value for all squares are left at 50, 50 x 1 = 50.
And with that the grid is built. Next you just enter the file path as normal.
For the answer key, you would just enter the known correct outcome, making sure to answer the free square, that everyone would have, with the agreed upon character. For the center square I made sure that it was an O
that would line up with what everyone else would have picked there, making a "free" square.
Key | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
A | X | O | O | X | X |
B | X | X | O | O | O |
C | O | X | O | X | X |
D | X | O | O | X | X |
E | O | X | X | O | X |
A guess by someone could then look like this, having followed the rules and only voted for what they thought would happen, and passed the ones they thought wouldn't:
Guess | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
A | P | P | O | O | P |
B | P | P | O | P | O |
C | O | P | O | O | P |
D | P | O | O | O | P |
E | O | P | P | O | P |
Now first of all, depending on your humor, this can be hilarious. And secondly, the result such a guess would have would be:
Stats | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
A | 0.00% | 0.00% | 100.00% | 0.00% | 0.00% |
B | 0.00% | 0.00% | 100.00% | 0.00% | 100.00% |
C | 100.00% | 0.00% | 100.00% | 0.00% | 0.00% |
D | 0.00% | 100.00% | 100.00% | 0.00% | 0.00% |
E | 100.00% | 0.00% | 0.00% | 100.00% | 0.00% |
Names | Scores |
---|---|
Rolo | 300 |
This process in manual for now. With the file open in MarkText click the hamburger menu and go to:
File
-> Export
-> HTML
From there a box will pop up. You can search through and tweak things if you'd like, one of which I'd recommend being the font size, but you can also just leave it default which is what I have done in this example. Just name the file what you want, and click save.
I have kept the same name as the other files for this bingo.
Next you'll want to open the new HTML file. This should open your default browser.
To get a thinner, and in my opinion, a nicer looking final image, you can just make the browser window itself as thin as you need.
The viewport size changes and so does the table rendered.
From here, if you are on FireFox, or a fork of it, you can just right click and save as screenshot. and save as a full page.
If you are on a Chromium based browser, like Google Chrome, Edge, Brave, etc., you can get an extension, or you can use the built in option that's hidden behind dev tools.
As I couldn't possibly cover every extension, I'll only be showing the dev tools option. To enter the dev mode, press F12
on your keyboard. this will bring up a menu in the browser.
From there press CTRL
+ SHIFT
+ P
to bring up the command pallet. Type in Shot
and select "Capture full-size screenshot" and then name it and choose where to save it. I name it the same as the other folders and place it in the same folder.
And with that you have a PNG image with that width you set.
Thanks to JetBrains for the licenses as part of the All Products Pack and their continued support for open source projects