QuizMenuTool Tutorial

From SkyTemple

This article is unfinished. You can help expanding it.


This guide explains how to use QuizMenuTool to create a custom Personality Quiz. The bulk of this guide will explain the use of the google sheets portion of the tool. A rudimentary understanding of SkyTemple scripting will be assumed, namely adding new acting scenes, and adding scenes to unionall.ssb. These topics have/will be covered in other wiki articles.

About QuizMenuTool

What Is QuizMenuTool?

QuizMenuTool is a customizable ExplorerScript replica of the Explorers of Sky Personality Quiz and Starter Selection, with minimal hardcoded aspects. The original quiz was designed to consist mostly of message_Menu ASM, and this serves to

What can QuizMenuTool do?

QuizMenuTool can modify the process of using the quiz to select a starter, expand/reduce the starter list, add/remove/modify questions from the quiz, and much more! In fact, the better question might be...

What Limitations does QuizMenuTool have?

There are a few critical things QuizMenuTool was not designed to do, though many of these could be remedied in the future if enough demand exists. Here's a list of what QuizMenuTool fails to replicate from the vanilla quiz:

  • Hero/Partner Type Exclusion: In the vanilla quiz, the hero and partner are prevented from sharing a type, to encourage team balance. No option for such a restriction has been implemented yet, though such a thing would be possible in the future, or be scripted manually for a specific hack.
  • SwitchMenu Portraits: In the vanilla quiz, scrolling to a partner choice displays a portrait of that partner, which gradually changes in expression. This feature would require significant custom code to emulate, and is unlikely to be available for QuizMenuTool.
  • Third Party Starter Tweaks: The original starter list is completely unused by QuizMenuTool. Changing it has no impact on the quiz. Players of a hack using QuizMenuTool will have difficulty adding their own starters to the game, though this could potentially be remedied with a special process checking the starter list against what it is expected to be, and assigning the desired starter if a mismatch is found?
  • Incompatibility with Japanese ROMs: Currently, QuizMenuTool is designed to only work for NA and EU ROMs. while in theory a Japanese Quiz could be designed, the Special Processes are not Japanese-compatible. This could be remedied with little effort, but the tool is designed for EU/NA ROMs.

Who QuizMenuTool is for

If either of the below points do not apply to you, you do not need QuizMenuTool.

  • You would like to expand (or shrink) the list of starter options in the game.
  • You would like to keep the personality quiz in the game, or edit the quiz directly.

If you only want to change the size of the starter list, and do not want the personality quiz (as if the SkipQuiz patch is applied), you should instead use StarterMenuTool, which is less powerful but requires much less work to set up.

Programs and Files

Required Programs and Files

General Spreadsheet Tips

Making a Copy of the Sheet

The above link does NOT grant edit access. In order to use the sheet, a copy will need to be made as follows:

Location of the "File" and "Make a Copy" buttons.

First click the "File" button on the top left. Next, "Make a Copy" of the sheet. Finally, name the copy as desired.

Cell Color-Coding

Throughout the spreadsheet, most cells are color-coded. Here's a brief explanation of each color present in the sheet:

  • Green Cells are for user input. If a cell is green, it is intended to contain input data.
  • Grey Cells contain formulas. They will update automatically, and should not be edited.
  • Orange Cells are for user outputs. If a cell is orange, it is intended to be exported elsewhere, such as to a SkyTemple script.
  • Cells without a color or of an unspecified color are typically safe to edit. Always check for a formula first though!

Paste Values Only

This tab is the first which will require the use of "Paste Values". When this guide specifies that a copy/paste must "Paste Values", this means that the copied text is a formula, and the pasted text should not be a formula.

Depiction of the "Values Only" button in the menu
Depiction of the "Values Only" button in the menu

There are two ways to paste values, either by right-clicking the paste location and selecting "Paste Special" then "Values Only", or by holding shift as you paste.

Quiz Preamble Generator: A Good First Impression!

The Quiz Preamble Generator Tab as a whole exists to create the very beginning of the quiz.

Upper Panel

Most tabs in the sheet contain an upper panel of some kind, with various simple inputs and feedback on them:

Location of the Quiz Preamble Generator's Upper Panel.
Location of the Quiz Preamble Generator's Upper Panel.

The "Bottom Screen" and "Top Screen" inputs are the map ID that should be used for that screen's background. Similarly, the Background Music Name/ID is a BGM name (or number) of the BGM that should play throughout the quiz. The "White Space?" checkbox will attempt to add indents to the output ExplorerScript lines, making the output script more human-readable.

Preamble Text

This is the first of many direct inputs for ExplorerScript code. Due to the way spreadsheets store cell data, " " behave weirdly when present in the final script. Please use ' ' instead. This input is for the first set of dialogue before the questions actually begin.

Location of the Quiz Preamble Inputs
Location of the Quiz Preamble Inputs

Outputs

The orange output cell on this sheet is largely unimportant, but is present for debug purposes. It compiles the portions of the script using the inputs on this tab of the sheet.

Starter Selection Generator: Actually Adding the Starters...

This tab of the sheet is primarily for inputting data about the starters, or the personality pools they belong to.

Upper Panel

The Upper Panel for the "Starter Selection Generator" Tab
Location of the "Upper Panel" for the "Starter Selection Generator" Tab

This upper panel contains 4 inputs, 3 of which are for Special Processes pertaining to starter selection. If other Special Processes have already been added, these Special Process IDs will need to be changed to free slots. The "White Space?" checkbox is the same as before, except for this tab of the sheet. The 4 grey cells are useful statistics about the input starters: how many different pools are used by the starters, how many species are present, and how many options there are for the hero and partner.

Personality Pool Input

Next, on the lower right is the nature "Pool" input. These contain the pool name, and the text that should be displayed if that pool is selected by the quiz.

Location of the "Personality Pool Input", where nature names and descriptions go.
Location of the "Personality Pool Input", where nature names/descriptions go.

The "Pool Name" field is only used by the Question Generator Tab, and will not show up anywhere in the final script. Modify these as desired as soon as possible, as it will be difficult to do so after designing the quiz questions. For best results, ensure all pool names are unique!

Starter Species Data

The bottom left segment of the sheet is the "Starter Species Data" input. This is part of a wider table, but each segment will be discussed individually.

Location of "Starter Species Data", where species-specific starter info goes.
Location of "Starter Species Data", where species-specific starter info goes.

While some of these fields should be intuitive, A brief description of each column is as follows:

  • Species Name: The name of the species as you want it shown in the quiz. If the cell turns purple on entering a species name, this means the Pokémon could not be found in Vanilla Translation Strings. French and German Translations will need to be added by hand, or all strings involving the Pokémon will need to be translated manually.
  • Species ID: The ID in SkyTemple of the Pokémon. [TODO: Explain how this is affected by ExpandPokeList].
  • Gender: The gender of the Pokémon, used to set the frame color, and to add "♂" and "♀" to the hero/partner selection list. 0 is Male, 1 is Female, and 2 is Genderless.
  • Pool ID: The number of the Pool the Pokémon should be categorized under. Each Pool that could be chosen by the Quiz should have at least one valid Pokémon, or Bulbasaur will be selected as a failsafe. If the species are not sorted by Pool ID, cells will turn red. The sheet will produce invalid labels if this table is not sorted by Pool ID!
  • Start w/ Vowel: If the Pokémon should be referred to as "...an [Pokémon]", check this box.

Talk Group & Role Exclusion

Continuing along the table, the next two subsections are for "Talk Groups" and "Role Exclusion". Both of these segments relate to either the hero, or the partner.

Location of Talk Group and Role Exclusion Inputs
Location of Talk Group and Role Exclusion Inputs

In the vanilla game, the hero and partner have differing dialogue depending on their species-specific "Talk Group". These columns are dedicated to assigning the talk group for the hero or partner if that row's species is chosen. While it handles pronouns for dialogue, especially in gendered languages, it also affects the way the partner's dialogue is written. It does the same for the hero's dialogue, but in the English localization it only affects 2 lines in the entire game ("Whoa" <-> "Wah", "All right" <-> "OK"). This is how they are used in vanilla:

Explorers of Sky Talk Groups
# Used By Notable Species Description
1 Partner Male Squirtle/Totodile/Chimchar/Meowth/Munchlax More Masculine/"Rural" Dialogue. (Refers to self as "Oira" in Japanese)
2 Partner All other Male Pokémon More Masculine/"Boyish" Dialogue. (Refers to self as "Boku" in Japanese)
3 Partner All Female Pokémon More Feminine Dialogue. (Refers to self as "Watashi" in Japanese)
4 Hero All Male/Genderless Pokémon Uses Masculine Pronouns
5 Hero All Female Pokémon Uses Feminine Pronouns

The "Role Exclusion" checkboxes blacklist the row from being an option as a hero or as a partner respectively. Certain Pokémon, particularly Meowth and Munchlax, are unable to be heroes in the vanilla game. This section is how to replicate that feature of the original quiz.

Fuwarante Blacklist

Finally, on the far end of the table, is the Fuwarante Blacklist inputs. These are perhaps the most complicated portion of this tab of the sheet.

Location of the Fuwarante Blacklist
Location of the Fuwarante Blacklist

Each column corresponds to a bit of the script variable $BIT_FUWARANTE_LOCAL. If the matching flag is on, the starter in that row cannot be chosen. This will be elaborated on further in the "Question Loop Generator", but this is a brief explanation of what the bits represent by default:

Bit Description/Use Case
0 If enabled, $PLAY_OLD_GAME will be true, meaning the player answered that they have played Time/Darkness before.
1 If enabled, the player has played EoS before, according to a custom starting question.
2 If enabled, the player has participated in a Mystery Mail event before, according toa custom ending question.
3 If enabled, the player claimed to be female in the final gender question. Enable for male starters.
4 If enabled, the player claimed to be male in the final gender question. Enable for female starters.

Outputs

Once again, the orange output cells on the far right of this sheet are largely unimportant, but are present for debug purposes. It compiles the portions of the script using the inputs on this tab of the sheet.

Question Loop Generator: Before, After, and For How Long?

Upper Panel

The upper panel of this sheet mostly consists of inputs, though the single output is a reminder of how many unique pools are used by the Starter Selection Generator. The input directly left of it is for telling the Question Loop Generator how many pools are in use, and should be changed to match the display. On the upper left of the panel, there are inputs for how many questions the game should ask the player, and how many questions will be written for the quiz to randomly choose from. In vanilla, there are 64 possible questions, and 8 will be given to the player.

Location of the Upper Panel of the Question Loop Generator
Location of the Upper Panel of the Question Loop Generator

The bottom row consists of checkboxes to enable/disable the Custom/Standard First and Last Questions, such as the Gender Question and the Time/Darkness Question, which boosts recruit rates for certain species if you answer yes, and adds points to certain pools containing sky-exclusive Pokémon.

ExplorerScript Pre/Post Quiz Questions

Room for an additional question before and after the quiz has also been made, which along with the Gender and Time/Darkness questions can be modified in the below ExplorerScript inputs:

Location of the ExplorerScript Inputs
Location of the ExplorerScript Inputs

These are the primary use-cases for the Fuwarante Blacklist described above.

The "[S:0]" text tag will be explained in further detail below.

Question Generator: Multiple Choice Monotony

Note: The "Yes." and "No." options have the "[S:0]" text tag after them. This does functionally nothing, and exists primarily to aid in automatic string translation, as the localization teams translated the same English responses for questions differently based on context. This will be elaborated on further in "Full Script Translation". If there are no plans to use the sheet's translation features, it is safe to remove any variants of "[S:0]". (instructions to do so in SkyTemple directly are present below).

About Question Templates

This tab of the sheet is dedicated to the design and storage of the individual random questions in the quiz. The way this sheet works revolves around "Question Templates" that store the question text, question number, answer text, pool ID, and points for that pool ID. Below is an example of a Question Template, and how it translates to question data:

Being busy.^11^4^8^2|Free time!^9^4|In between.^12^4
Question Text Question #
Do you prefer to be busy or to have a lot of free time? 35
Answer Text Pool 1 ID and Pts Pool 1 ID and Pts Pool 1 ID and Pts Pool 1 ID and Pts
Being busy. 11 4 8 2 - - - -
Free time! 9 4 - - - - - -
In between. 12 4 - - - - - -

Question Template Input

On the far left, is an input for an existing Question Template.

Question Template Input Location
Question Template Input Location

The "Use Question Template Input" checkbox tells the sheet whether or not to use the Question Template provided. When writing questions entirely from scratch, disable this checkbox. When modifying existing questions, enable the checkbox, and paste in the Question Template. This will subsequently auto-fill the Question Data Inputs with the data within the template. If the auto-filled data itself needs to be altered, you will need to copy and paste values the data, then disable the checkbox.

Question Data Inputs

Location of the Question Data Inputs Area
Location of the Question Data Inputs Area

The Question Data Inputs Area should seem relatively intuitive. The question text is at the top, the answers are beneath, and up to 4 Personality Pools can gain points from each answer choice. The White Space checkbox is identical to the previous tab, and the question index is just the internal "ID" of the question. It should be incremented for each new question created, and will translate to the ID of the switch case in the final code. Note that the drop-down for the Pool Names is sourced from the Pool Names column of the Starter Selection Generator, and any changes to that list after creating the questions may lead to problems. With the current setup of the sheet, each question is limited to a maximum of 26 answer choices, but this limit is arbitrary, and can be circumvented by editing the question template manually, and pasting it in the Template List. In the event that a single question requires more than 26 choices, please ping happylappy in a support thread.

Question Template Output & Template List

Finally, once the question is complete, a template for the question will be created in "Question Template Output".

Location of Question Template Output & Template List
Location of Question Template Output & Template List

Before moving onto the next question, copy the template output, and Paste Values in the corresponding slot on the "Question Template List". By default, templates for each vanilla question are already in the Question Template List, ready to be edited or modified by copying and pasting into the Question Template Input. The Script Output Column is again for debug purposes, and is read automatically by another tab of the sheet.

Personality Pool Selection Generator: Gerrymandering and Tie-Breaking

Once the quiz itself is completed, the points need to be tallied, so that a winning pool can be selected. The exact way that this happens in vanilla is a tad complicated, especially when it comes to breaking ties. Here are the steps that occur in vanilla:

  1. Points are added to pools containing Sky-Exclusive Starters if the player has played Time/Darkness.
    • If Male is chosen for the gender question, +4 Points are added to Relaxed, Hasty, and Sassy. (Phanpy, Shinx, and Riolu)
    • If Female is chosen for the gender question, +4 Points are added to Relaxed and Jolly. (Vulpix and Eevee)
  2. The highest pool is found, and chosen.
    • If there is a tie, it is broken by adding a random number (0-19) to each, and rescoring the points.
    • If there is STILL a tie, it chooses the smallest pool it can.

This tab of the sheet serves to implement these two features in a customizable way.

Upper Panel

About half of the upper panel is actually new this time. The "White Space" and "Number/# of Pools In Use" are unchanged, except they apply to this sheet.

Location of Pool Selection Generator Upper Panel
Location of Pool Selection Generator Upper Panel

The checkbox for "Do Pool Tinkering" enables/disables the Pool Tinkering portion of this sheet, while the "Maximum Tiebreaker Points" input determines the random value added to tied pools to decide a victor. Larger numbers result in less chance of a secondary tie, but could result in overflow for certain pools.

Pool Tinkering

As stated above, the vanilla quiz favors pools with Sky-Exclusive Starters for the specified gender if they've played Time/Darkness. Through checking the BIT_FUWARANTE_LOCAL flags from the "Question Loop Generator", we can mimic this effect.

Location of Pool Tinkering Portion.
Location of Pool Tinkering Portion.

On the far left, are the IDs of the two flags that should be checked (without modification, this could be 0 for "Time/Darkness", and 3/4 for "Male/Female"). Depending on if the 1st and 2nd flags are true (1), or false (0), the selected pools (as many as needed) will gain the specified number of points. In order to accommodate for the "Surprise Me!" gender option, 2 points are given for male, 2 for "not male", 2 for "female", and 2 for "not female", in order to influence every pool containing a sky-exclusive starter. (A similar process is done for the Time/Darkness exclusive starters I've added to my example quiz, if the player has NOT played time/darkness). Up to 10 slots are present for pool tinkering, though more could be added if there is a pressing need.

Aura Bow Generator: Fortune Telling and Color Theory

The Aura Bow Generator serves to emulate the cinematics of the vanilla aura bow portion of the quiz. In addition to simply detecting when and for how long the player is touching the Aura Bow, the actual bow color needs to be determined! For the vanilla quiz, the process is as follows:

  • Use DS Favorite Color (75% Chance): If the DS Favorite Color is selected, the user's favorite color will match the color of the bow.
  • Use DS Mac Address (25% Chance): If the Mac Address is selected, then "mac_address & 0xF" determines the color of the bow.

This functionality can be replicated by QuizMenuTool, and the chances can even be altered!

Upper Panel

The Aura Bow Generator's Upper Panel is one of the largest of every tab, though many of these inputs are similar to prior tabs of the sheet. The top left input boxes are Special Process IDs for the 4 Special Processes needed to emulate the Aura Bow portion of the quiz, and the "White Space?" Checkbox is the same as always. The "Aura Bow Output" on the top right is the final script output for this tab, unnecessary outside of debug purposes.

Location of the Aura Bow Generator Upper Panel.
Location of the Aura Bow Generator Upper Panel.

Beginning with the bottom left of the panel, there are 4 map LEVEL names. "Bottom 1" is for the background while touching the Aura bow, Bottom Screen 2 is for the presentation of the colored Aura Bow, and the Bottom/Top Screen 3 is the backgrounds that the script should end with, when transitioning to the starter reveal. Finally, on the bottom right of the upper panel is the "Touch Screen Aura Bow Object Name". Per the name, this is the name or ID of the object that should be present on the bottom screen, that will animate when the player touches it. The last three digits of the object seem to vary depending on unknown factors, so be sure to verify that yours matches by inspecting this object in M00A01A with SkyTemple.

Where to check the Aura Bow Touch Object Name in SkyTemple
Where to check the Aura Bow Touch Object Name in SkyTemple

Aura Reading Panel

Beginning on the lower left of the tab, the Aura Reading Panel consists of 3 ExplorerScript code segments, which play before the blank aura bow fades in, after the aura bow fades in, and if the player lets go of the touch screen too quickly.

Location of the Aura Reading Panel.
Location of the Aura Reading Panel.

At the very bottom of this panel, there are inputs for dialogue in all 5 languages that will play during the aura reading process. Unlike most text in the quiz, this string must be translated here, as every localization takes a different amount of time to print the dialogue. The length of time the touch screen should have been held for is calculated for each [W:X] text tag, and compared against the actual length of time the touch screen was held. Customizing this text string is possible in the box, so these calculations must be done by the sheet. If your hack is for a US ROM, or will be english-only, disable the "Use EU Strings" Checkbox. "Expected Text Speed (# of chars per frame)" should be the speed your dialogue prints at in SkyTemple. This will ensure that the actual length of the text is properly accounted for in the calculation. "Touch Screen Frame Tolerance" is a grace period for letting go of the bow. This is necessary for certain emulators, damaged touch-screens, failure to account for the dialogue box opening/closing, etc. Feel free to adjust as desired, such that the quiz is possible to complete.

Bow Selection Panel

Finally, the Bow Selection Panel handles the actual selection and presentation of the Aura Bow.

Bow Selection Panel Location.
Bow Selection Panel Location.

The upper left of the panel is for assigning weights to the three methods for selecting a bow color: DS Favorite Color, DS MAC Address, or a custom block of code. Note that these weights must be integers or the sheet will generate invalid code. For convenience, the percent chance of each option is computed by the sheet, based on the weights and total weight. The ExplorerScript input for the custom bow selection is on the right of this panel, and on the bottom left is the flavor-text for each bow color.

Variable Cleanup & End-Cap Generator: Nearly Finished!

This tab of the sheet aims to clean up the bevy of variables used by the quiz, and prep the game for actually running. Since QMT uses a majority of the script variables the game has to function, this tab resets them all back to what they should be at the beginning of a save file, now that the quiz no longer needs them. If some part of the quiz needs to be remembered, such as the color of the aura bow, whether the player has played Time/Darkness, or the winning Quiz personality pool, that needs to be preserved in this tab. In addition, this is the tab where the starters are officially initialized, which allows them to be nicknamed. Finally, the special process for actually assigning the starters, PROCESS_SPECIAL_INIT_MAIN_TEAM_AFTER_QUIZ, will wipe $CONFIG_COLOR_KIND clean, replacing it with what the real quiz determined your aura bow color to be. Because the real quiz never runs during QMT, this will always be zero. As a result, the aura bow color needs to be saved somewhere besides $CONFIG_COLOR_KIND, then returned afterwards.

Upper Panel

This tab ALSO has an upper panel! The number of pools to clear should ideally match the number of pools in use. "White Space" does the same thing it has up to this point, and the far right output cell is read elsewhere, and only exists for debug purposes.

Variable Cleanup & End-Cap Upper Panel Location.
Variable Cleanup & End-Cap Upper Panel Location.

In the center of the panel are three new checkboxes. "Name Partner?" and "Name Hero?" should be somewhat intuitive, they enable/disable the ExplorerScript inputs for naming the hero and partner respectively, which will be elaborated on below. Finally, "Set $VERSION to 1?" sets the "$VERSION" script variable to 1 at the very end of the script. Without ASM modification, saving the game with this variable as anything besides 1 results in a "corrupt" save file. In the absence of a strong reason otherwise, this box should remain checked.

Hero Name, Partner Name, & Closing Remarks

These ExplorerScript Inputs are for... the code used for nicknaming the partner and hero respectively, as well as the last few lines of text before the quiz truly ends.

Location of ExplorerScript Code Inputs.
Location of ExplorerScript Code Inputs.

Note that MENU_PARTNER_NAME will not function without the dedicated SkyPatch, in the QMT github repo (linked at the top). Additionally, the menus themselves will close any active text-box the instant they are done printing, which is why the hero monologue ends with a [K]. A message_Close(); would also suffice. Finally, the closing remarks should actually fade out the bgm and screen as desired. Feel free to optimize the fades, there is probably a more efficient way to achieve the right effect.

Script Variable Preservation Panel

The Script Variable Preservation Panel serves to determine what information should be preserved after the quiz. By default, only the variables storing the personality pool counts are actually being erased, though certain configurations may require some variables to be kept, and others to be wiped in addition.

Script Variable Preservation Panel Location.
Script Variable Preservation Panel Location.

Beginning at the top, is the "Variable Erasure Blacklist". Based on other interactions with the sheet, the "Automatic Variables" will fill up automatically, but any script variables specified in this row will be kept as they are at the end of the quiz, and not erased. An example of a manual blacklist example might be $VERSION, which doesn't need a dedicated line of code for erasure if it will ALSO be set to 1 at the end. The next row, "Additional Variables to Erase", will be added to the list of erased variables if they are not already present. The $BIT_FUWARANTE_LOCAL variables should be erased in addition, as the Driftblim Gondola will interpret these variables as valid station passes to enter. Below that, is the "Variable Transfer Table". Prior to erasing anything, variables in the "Old Variable Name" column will be moved to the "New Variable Name". The old variable will be slated for erasure, while the new one will be spared. For convenience, the "Variable Meaning" Tab on the left will autofill one or both of these columns depending on the option you select:

Variable Meaning Old Variable Name New Variable Name Comments
Aura Bow Preserve $CONFIG_COLOR_KIND $LOCAL0 If this Variable Meaning is present, $CONFIG_COLOR_KIND will be restored in post. It's only purpose is to prevent the quiz from wiping the variable on running "PROCESS_SPECIAL_INIT_MAIN_TEAM_AFTER_QUIZ".
Winning Pool $SCENARIO_SUB7 Any This variable retains the winning Pool ID from the quiz itself. This could prove useful for dialogue, or perhaps some other purpose?
Winning Points $SCENARIO_SUB6 Any This variable retains the number of points the winning Pool ID had after the tie-breaking process. This could prove useful for dialogue, or perhaps some other purpose?
Fuwarante Bit X $BIT_FUWARANTE_LOCAL[X] Any These correspond directly to the FUWARANTE blacklist, and in this example is used to pass forward the Time/Darkness question to $PLAY_OLD_GAME, the variable responsible for the recruitment rate buff for playing Time/Darkness.
Direct Script Variable Any Any This is an invitation to input whatever script variables are needed, and will adjust the coloration of the row to match.

A full list of script variables with their appropriate descriptions will be provided in "Other Resources", and might prove useful for more advanced tinkering in this panel.

Full Script Translation: EU ROM Superiority

This tab of the sheet is dedicated to translating all lines of dialogue into Spanish, French, German, and Italian, for an EU ROM. If the hack this is for doesn't need translation, this tab can be completely skipped. One of the most essential features of a translated quiz is the ability to pre-translate the vanilla text strings from the original quiz.

Upper Panel

By default, the left-most checkbox of the upper panel will "activate" this sheet for translation. This may cause lag, and will cause more lag every time a change is made on one of the prior sheets, while enabled. Only begin translating once finished with the quiz, at least in the short term.

Location of the Full Script Translation Upper Panel.
Location of the Full Script Translation Upper Panel.

The "Auto-Translate Vanilla Strings" check-box will automatically search for and translate exact matches to vanilla Quiz strings. Additional translations can be added in "Vanilla Translation Strings" as needed. If no exact match is found, the translation will be left blank for manual translation. "Auto-Translate Pokemon" similarly will attempt to translate exact matches for dialogue specific to the final species. For example, "[R][CN]Will be a [CS:K]Magnemite[CR]![W:60]" will be automatically translated to "[R][CN]wird ein [CS:K]Magnetilo[CR]![W:60]" (German), based on Magnemite's German name and the phrase "wird ein ___!". This will only occur if the checkbox is enabled, and only for Pokemon names present in "Vanilla Translation Strings". Finally, the "Trim [S:0] Before Translation" checkbox will remove all "[S:0]" text tags from the dialogue before searching for a match, ensuring that the various "Yes.", "No.". "Of Course!", and "Open it!" are not translated automatically, per their vanilla quiz questions. Regardless of whether this checkbox is enabled, the final script output will not contain the "[S:0]" tags.

String Translation Panel

The string translation panel, on the right of this tab, is where text string translation will actually occur.

Location of String Translation Panel.
Location of String Translation Panel.

On the left, are English lines of text extracted from other tabs of the sheet. each column corresponds to an EU language (Spanish, French, German, Italian). At the top of each column, is a count of how many untranslated lines of dialogue are left for that language, as well as a checkbox to enable/disable each language. In the above screenshot, French dialogue will not be added to the final script, because the checkbox is enabled. In the rows themselves, are pink cells (vanilla translated text), green cells (empty), and blue cells (manual translation). Simply review each pink cell, and manually translate the English for that row for green cells so they turn blue. If a pink cell needs editing, simply copy the cell, and Paste Values it on top of itself, and it will turn blue, which is safe to edit.

Vanilla Translation Strings: Future-Proofing The Sheet

This tab of the sheet is used to store vanilla strings from the base game, and official Pokemon translations. These can be amended and edited as desired, to include custom strings for auto-translation, or new Pokemon name translations.

Vanilla Translation Strings Dialogue
Vanilla Translation Strings Dialogue

This area above contains all relevant vanilla strings, which can be added to or amended as desired, in the green cells in these 5 columns. If a need arises to make changes to the quiz after translation, it is best to move all manually translated lines to this tab, before making any changes. Additionally, the lookup table for Pokemon species names can be modified:

Vanilla Translation Strings Species
Vanilla Translation Strings Species

On the far right of the tab, are a list of every Pokemon through Scarlet & Violet, and the French/German translations for each species (Spanish and Italian use English species names). These can also be amended or added to as desired.

Full Script Compression: It's Finally Over?

Last but not least, is the Full Script Compression Tab. This tab compiles all of the information from the other tabs, and compresses it into a copy/pastable batch of scripts for SkyTemple.

Upper Panel

There are a handful of settings in this upper panel. "White Space" is as it has been for every prior tab, but that's the only returning input.

Full Script Compression Upper Panel Location.
Full Script Compression Upper Panel Location.

"Use Full MegaScript" will compile the entire quiz into one script. This is only possible for English-only quizzes, and is only advised for quizzes with few questions and fewer starter choices. "Use Translated Scripts?" will use the outputs from Full Script Translation, which will be empty if the sheet is not active. Disable this checkbox for English-only quizzes. "Generate Unionall CORO" will create the unionall code needed to run the quiz, for a copy and paste replacement for the existing CORO EVENT_M00A_01 coroutine. The "Script File LEVEL Name" should reflect the location of the map LEVEL "folder" that the script file will actually be under. The "Script File SCRIPT Name" should become the name of the acting script itself, and should be 8 alphanumerical characters or fewer (not case-sensitive). Finally, the "Sector Param." is the sector parameter of the supervision_ActingSub() Opcode. Generally this should be zero, though none of these scripts internally utilize the sector parameter, should it be of interest for customization.

SkyTemple Script Outputs

This portion of the sheet consists of outputs to SkyTemple. Unlike most output cells thus far, these are actually intended for use!

SkyTemple Script Outputs Location.
SkyTemple Script Outputs Location.

The intended places for each of these outputs will be described in "Importing The Scripts To SkyTemple", but when copying a script, be sure to copy all cells in the box with text.

Importing The Scripts To SkyTemple

Converting From StarterMenuTool

Other Resources

QMT Script Variable Map