# Hello World
# (and other sm-ssc theming examples)
# A theme by various contributors. Sign your comments if you wish.

# contributors:
# AJ Kelly of the Spinal Shark Collective (http://ssc.ajworld.net/)

################################################################################
# 
[Common]
# InitialScreen defines the starting screen of the theme.
# It can either be a string or a Lua function that returns a string.
InitialScreen="ScreenTitleMenu"

################################################################################
# [base] Base Screens aren't concrete, but are referenced by concrete screens.

# Pretty much every screen derives from this one. Adding decorations to it is
# one of the first things a themer does.
[ScreenWithMenuElements]
ShowHeader=true
HeaderX=SCREEN_CENTER_X
HeaderY=SCREEN_TOP+24
HeaderOnCommand=draworder,100

ShowFooter=false
FooterX=SCREEN_CENTER_X
FooterY=SCREEN_BOTTOM-24
FooterOnCommand=draworder,100

ShowCreditDisplay=false

################################################################################
# [overlay] Overlay screens sit on top of everything.

################################################################################
# [core] Core Screens; these are the concrete implementations.

# ScreenTitleMenu is the first screen you see in this theme, thanks to the
# [Common] InitialScreen metric being changed.
[ScreenTitleMenu]
# PrevScreen is set to make sure nothing gets messed up.
PrevScreen="ScreenTitleMenu"
# These settings are used to disable the attract sequence:
IdleTimeoutSeconds=-1
IdleTimeoutScreen="ScreenTitleMenu"

# no header or footer here
ShowHeader=false
ShowFooter=false

# These settings define what options appear on the menu and what commands are
# run when they are selected:
ChoiceNames="1,2,3,4,5"
Choice1="text,Guide;screen,ScreenGuideMain"
Choice2="text,Reference;screen,ScreenReferenceMain"
Choice3="text,Tutorial;"
Choice4="text,Options;screen,ScreenOptionsService;"
Choice5="text,Exit;screen,ScreenExit;"

# These control the placement of the items, as well as the list:
ScrollerX=SCREEN_RIGHT-44
ScrollerY=SCREEN_CENTER_Y+32
ScrollerOnCommand=addx,SCREEN_CENTER_X;decelerate,0.8;addx,-SCREEN_CENTER_X
ScrollerTransform=function(self,offset,itemIndex,numItems) self:y(27*offset) end

[ScreenOptionsService]
# dummying out ScreenInit
NextScreen="ScreenTitleMenu"
PrevScreen="ScreenTitleMenu"
################################################################################
# [guide] The guide splits the elements of StepMania theming into different sections.
# It acts as an introduction to all of the concepts in modern StepMania theming.
# All guide pages aside from ScreenGuideMain MUST be prefixed with "Guide" in
# order to differentiate them from the core screens.
[ScreenGuideMain]
Class="ScreenSelectMaster"
Fallback="ScreenSelectMaster"
PrevScreen="ScreenTitleMenu"
AllowRepeatingInput=true

# modifying header position
HeaderY=SCREEN_TOP+72

ChoiceNames="Beginning,Metrics,Fonts,Graphics,BGAnims,Sounds,Scripts,Other,NoteSkins,Announcers,Characters"
ChoiceBeginning="name,Beginning"
ChoiceMetrics="name,Metrics"
ChoiceFonts="name,Fonts"
ChoiceGraphics="name,Graphics"
ChoiceBGAnims="name,BGAnims"
ChoiceSounds="name,Sounds"
ChoiceScripts="name,Scripts"
ChoiceOther="name,Other"
ChoiceNoteSkins="name,NoteSkins"
ChoiceAnnouncers="name,Announcers"
ChoiceCharacters="name,Characters"
DefaultChoice="Beginning"

ShowScroller=true
LoopScroller=false
PerChoiceScrollElement=false

ScrollerX=SCREEN_CENTER_X
ScrollerY=SCREEN_CENTER_Y*0.775
ScrollerNumItemsToDraw=10
ScrollerSecondsPerItem=0.1
ScrollerTransform=function(self,offset,itemIndex,numItems) self:y((itemIndex-(numItems/2))+offset*64) end

# guide base screen (sets up things I don't want to retype a lot -aj) #
[GuideBase]
Class="ScreenSelectMaster"
Fallback="ScreenSelectMaster"
PrevScreen="ScreenGuideMain"

## Metrics
[GuideMetrics]
Fallback="GuideBase"
### Metrics
### Languages

## Fonts
[GuideFonts]
Fallback="GuideBase"

## Graphics
[GuideGraphics]
Fallback="GuideBase"

## BGAnimations
[GuideBGA]
Fallback="GuideBase"
### Decorations			(simpler)
### Overlay/Underlay	(can be more complex)

## Sounds
[GuideSounds]
Fallback="GuideBase"

## Scripts
[GuideScripts]
Fallback="GuideBase"

## the Other folder
[GuideOther]
Fallback="GuideBase"
### HowToPlay steps
### PreferredSort

# And then there are the things that are related to theming:
## NoteSkins
[GuideNoteSkins]
Fallback="GuideBase"

## Announcers
[GuideAnnouncers]
Fallback="GuideBase"

## Characters
[GuideCharacters]
Fallback="GuideBase"

################################################################################
# [ref] The reference section contains a complete listing of commands and examples of how they work. #
# All reference pages aside from ScreenReferenceMain MUST be prefixed with "Reference"
# in order to differentiate them from the core screens.
[ScreenReferenceMain]
Class="ScreenSelectMaster"
Fallback="ScreenSelectMaster"
PrevScreen="ScreenTitleMenu"
AllowRepeatingInput=true

# modifying header position
HeaderY=SCREEN_TOP+72

ChoiceNames="Screens,Managers,Classes,LuaRef"
ChoiceScreens="name,Screens;screen,ReferenceScreens"
ChoiceManagers="name,Managers;screen,ReferenceManagers"
ChoiceClasses="name,Classes"
ChoiceLuaRef="name,LuaRef;urlnoexit,http://kki.ajworld.net/lua/sm5/Lua.xml"
DefaultChoice="Screens"

ShowScroller=true
LoopScroller=false
PerChoiceScrollElement=false

ScrollerX=SCREEN_CENTER_X
ScrollerY=SCREEN_CENTER_Y+48
ScrollerNumItemsToDraw=10
ScrollerSecondsPerItem=0.1
ScrollerTransform=function(self,offset,itemIndex,numItems) self:y((itemIndex-(numItems/2))*64) end

# reference base screen (sets up things I don't want to retype a lot -aj) #
[ReferenceBase]
Class="ScreenSelectMaster"
Fallback="ScreenSelectMaster"
PrevScreen="ScreenReferenceMain"
HeaderY=SCREEN_TOP+72
AllowRepeatingInput=true

ShowScroller=true
LoopScroller=false
PerChoiceScrollElement=false

ScrollerX=SCREEN_CENTER_X
ScrollerY=SCREEN_CENTER_Y+48
ScrollerNumItemsToDraw=10
ScrollerSecondsPerItem=0.1
ScrollerTransform=function(self,offset,itemIndex,numItems) self:y((itemIndex-(numItems/2))*64) end

## Screens
[ReferenceScreens]
Fallback="ReferenceBase"

ChoiceNames="Screen,Overlays,SWME,Options"
# screen,RefScreens-Screen
ChoiceScreen="name,Screen"
# screen,RefScreens-Overlays
ChoiceOverlays="name,Overlays"
# screen,RefScreens-ScreenWithMenuElements
ChoiceSWME="name,SWME"
# screen,RefScreens-ScreenOptions
ChoiceOptions="name,Options"
DefaultChoice="Screen"

## Managers and other Singletons
[ReferenceManagers]
Fallback="ReferenceBase"

ScrollerX=SCREEN_CENTER_X
ScrollerY=SCREEN_CENTER_Y*0.775
ScrollerNumItemsToDraw=10
ScrollerSecondsPerItem=0.1
ScrollerTransform=function(self,offset,itemIndex,numItems) self:y((itemIndex-(numItems/2))+offset*64) end

ChoiceNames="Announcer,Character,File,Game,GameSound,GameState,MemCard,Message,Noteskin,Prefs,Profile,Screen,Song,Stats,Theme,Unlock"
DefaultChoice="Announcer"

ChoiceAnnouncer="name,AnnouncerManager;"
ChoiceCharacter="name,CharacterManager;"
ChoiceFile="name,FileManager;"
ChoiceGame="name,GameManager;"
ChoiceGameSound="name,GameSoundManager;"
ChoiceGameState="name,GameState;"
ChoiceMemCard="name,MemcardManager;"
ChoiceMessage="name,MessageManager;"
ChoiceNoteskin="name,NoteskinManager;"
ChoicePrefs="name,PrefsManager;"
ChoiceProfile="name,ProfileManager;"
ChoiceScreen="name,ScreenManager;"
ChoiceSong="name,SongManager;"
ChoiceStats="name,StatsManager;"
ChoiceTheme="name,ThemeManager;"
ChoiceUnlock="name,UnlockManager;"

#@# STEPMANIA ROBOT MASTERS
### ANNOUNCER [man]
[ReferenceAnnouncerMan]

### CHARMAN
[ReferenceCharMan]

### FILEMAN
[ReferenceFileMan]

### GAMEMAN
[ReferenceGameMan]

### GAMESOUNDMAN
[ReferenceGameSoundMan]

### GAMESTATE
[ReferenceGameState]

### MEMCARDMAN
[ReferenceMemCardMan]

### MESSAGEMAN
[ReferenceMessageMan]

### NOTESKIN [man]
[ReferenceNoteskinMan]

### PREFSMAN
[ReferencePrefsMan]

### PROFILEMAN
[ReferenceProfileMan]

### SCREENMAN
[ReferenceScreenMan]

### SONGMAN
[ReferenceSongMan]

### STATSMAN
[ReferenceStatsMan]

### THEME [man]
[ReferenceThemeMan]

### UNLOCKMAN
[ReferenceUnlockMan]

## Classes
[ReferenceClasses]
Fallback="ReferenceBase"

### Actor
[ReferenceActor]
#### many sub-things

### ActorFrame
[ReferenceActorFrame]

### Banner
[ReferenceBanner]

### Song
[ReferenceSong]

### Steps
[ReferenceSteps]

### Course
[ReferenceCourse]

### Trail
[ReferenceTrail]

### and a ton of other missing stuff

################################################################################
# [tutor] Tutorials are guides to implementing specific things #
# All tutorial pages aside from ScreenTutorialMain MUST be prefixed with "Tutorial"
# in order to differentiate them from the core screens.
[ScreenTutorialMain]
Class="ScreenSelectMaster"
Fallback="ScreenSelectMaster"
PrevScreen="ScreenTitleMenu"
AllowRepeatingInput=true

# modifying header position
HeaderY=SCREEN_TOP+72

# todo: figure out what tutorials

# tutorial base screen (you know the drill by now -aj) #
[TutorialBase]
Class="ScreenSelectMaster"
Fallback="ScreenSelectMaster"
PrevScreen="ScreenTutorialMain"