Announcers
Announcers are a set of folders containing audio data for various kinds of situations. These can usually be a voice encouraging the player for their performance, comments about particular songs, among other things.
The default location for announcers are in Project OutFox/Announcers
, with the following structure:
Project OutFox/Announcers/
│
└───────My Announcer
|
└───title menu game name
└───Welcome to the game.ogg
└───OutFox.ogg
Depending on the screen the player is currently on, certain announcer sounds will play. Here we will list the items used in the engine, and talk about custom sounds.
Each item folder on the following list can contain any amount of sounds inside it. The game will pick randomly which one to play.
The engine can play certain sounds from the announcer, as long as the name is named correctly based on the following list:
Plays when entering the title menu. Usually recites the name of the game.
As noted on the Introduction to Theming’s guide to creating a custom screen, almost every screen is inherited on ScreenWithMenuElements
, meaning that all screens that use this class as a base will play announcers like this, where <Screen Name>
applies.
A message played when the player enters this screen.
Plays when the timer is running low on time.
Same rules apply from ScreenWithMenuElements, meaning that the intro
message can also be used here.
Plays after every specified amount of seconds have passed. This if often used to remind the player to do something in the game.
The amount of time can be changed on the screen’s IdleCommentSeconds
metric.
ScreenSelectMaster is the name of the class type of several different screens, so these will actually occur on any of the following:
ScreenTitleMenu
, ScreenSelectLanguage
, ScreenUnlockBrowse
, ScreenSelectStyle
, ScreenSelectPlayMode
, ScreenGameInformation
, or any other screen that has ScreenSelectMaster
as its Class metric.
Plays when the player enters the second page.
Choices on ScreenSelectMaster are split into two pages, all choices after the amount set by the NumChoicesOnPage1 metric are on the second page. The default is 1024, so this will never play unless the theme sets the metric lower to have a second page.
Players when the player has picked their Choice
.
For example: In ScreenSelectStyle2, a screen that could select the kind of style to play; you are presented with 3 choices: single, versus or double, and the player chooses double. Then the end result would end up looking like this:
- Screen Name: ScreenSelectStyle2
- Choice Name: double
Thus:
ScreenSelectStyle2 comment double
<Choice Name>
will be the name field of the gamecommand that defines the choice, so this could be literally anything the themer feels like.For this example, it ended up being double, which would look something like this:
# Note here that the 3 can also change, but DOES NOT apply to the scope of announcers, only the name field. Choice3="name,double"
Rules from ScreenWithMenuElements also apply here.
A special rule here for the SelectMusic screen. This is it’s opening announcer comment, <Screen Name> intro
will not work here.
Plays when a player chooses a song that was already played on this session.
Playes when a player chooses a song that hasn’t been played at all on the machine.
Plays when a player chooses a song that exceeds the value of ScreenSelectMusic::HardCommentMeter
, which is 10 by default.
Regular comment that plays when a player chooses a song that doesn’t apply to the rules from the previous 3 comment types.
Plays when a player chooses a course.
The following occur after certain actions.
The player has entered gameplay. This happens when the gameplay screen begins to fade in.
The in transition has ended, on some themes, a text saying “Are you ready?” would appear here.
The ready transition is done. Some themes would display a “Let’s go!” text.
Same aspect as gameplay here we go normal
, but in the case the player is currently on an extra stage.
Same aspect as gameplay here we go normal
, but in the case the player is on the last stage.
Plays at the end of a final stage if they’ve reached the Extra Stage criteria. The player has earned the chance to play the extra stage.
Plays at the end of a normal stage.
The player has failed at halfway or higher of an Oni course.
The player has failed at <50% of an Oni course.
The player has failed the stage.
The announcer recites the amount of combo the player has achieved without breaking it. The game performs a check for the first 1000 combo, in successions of 100 (100 -> 200 -> 300, etc) in which after that it will then call the gameplay combo overflow sound on every 100 combo.
Plays every 100 combo after 1000 combo.
Happens when the player has broken their combo.
The default value for the minimum combo to be broken to play the sound is 50, but can be changed with the metric Player::ComboStoppedAt
.
This is leftover code from In The Groove’s alpha inventory system. These have no function today.
Plays when a battle trick occurs. In other terms, when a player as sent a trick to the other player. Has 3 stages.
This is leftover code from In The Groove’s alpha inventory system. These have no function today.
Plays when a battle damage occurs. Has 3 stages.
The following play on every set amount of seconds defined by the ScreenGameplay::SecondsBetweenComments
metric.
Plays when a player has their lifebar full.
Player when a player is in danger, which is almost a depleted lifebar.
Plays while the player is doing okay in the song. It’s the last case from hot
and danger
.
Plays while the player is on a course (either Nonstop, Oni or Endless).
Only one of these sounds will play depending on the condition.
Plays if any of the players have achieved a record.
Plays if any of the players has achieved a full combo consisting of only Flawless.
Plays if any of the players has achieved a full combo consisting of only Excellents.
Plays if any of the players has achieved a full combo consisting of only Greats.
Plays if any of the players has achieved a full combo consisting of only Goods.
Plays if any of the players have achieved any tier related to <Grade>
. The player with the highest Grade is the one that will be played.
Because of the Tier system in modern SM, the tier is converted into a human readable string, which is represented by an “old grade”.
Plays at the summary screen, which is after all stages have been played. Same old grade logic from evaluation <Grade>
applies here.
Plays only on rave mode, when someone wins the match.
Plays only on rave mode, when someone loses the match.
Plays only on rave mode, when someone wins the match.
There’s no internal call to play a sound when the rave match is a draw, but can be added in Lua with a custom announcer sound.
If a player has achieved a grade tier of Tier_03 (A) or higher, after a set amount of seconds, this sound will play. The default is 2.5 seconds.
The amount of time can be changed by editing ScreenEvaluation::CheerDelaySeconds
.
A special rule here for the ScreenPlayerOptions screen. This is it’s opening announcer comment, <Screen Name> intro
will not work here.
A special rule here for the ScreenSelectCharacter screen. This is it’s opening announcer comment, <Screen Name> intro
will not work here.
A special rule here for the ScreenNameEntry screen. This is it’s opening announcer comment, <Screen Name> intro
will not work here.
A special rule here for the ScreenEnding screen. This is it’s opening announcer comment, <Screen Name> intro
will not work here.
You may have noticed by peeking into some announcer packs, that they sometimes contain folders that do not follow the naming convention described on Engine-defined sounds. This is because themes can play their any sound from the announcers, without a name limit.
Because of this however, you need to be wary about compatibility with said announcers on other themes, as there can be situations where the announcer pack is compatible with the theme it was designed for, and other themes won’t play all the sounds that come with the announcer.
An example of custom playback:
SOUND:PlayAnnouncer("My Custom Sound")
If the announcer doesn’t contain a folder named My Custom Sound
with a sound file inside, it will be ignored.