diff options
Diffstat (limited to 'unicode')
156 files changed, 10831 insertions, 10498 deletions
diff --git a/unicode/COPYRIGHT.txt b/unicode/COPYRIGHT.txt index c389afc0..80a5031f 100644 --- a/unicode/COPYRIGHT.txt +++ b/unicode/COPYRIGHT.txt @@ -25,4 +25,5 @@ Patches contributed by: "jekatt"
Benedikt Krueger
Holger Kuhn "hawkear"
+Florian Küpper "flokuep"
Wesley Stessens "profoX"
\ No newline at end of file diff --git a/unicode/DisplayChanges.patch b/unicode/DisplayChanges.patch new file mode 100644 index 00000000..9cb00a18 --- /dev/null +++ b/unicode/DisplayChanges.patch @@ -0,0 +1,88 @@ +Index: src/menu/UDisplay.pas +=================================================================== +--- src/menu/UDisplay.pas (revision 1702) ++++ src/menu/UDisplay.pas (working copy) +@@ -42,8 +42,65 @@ + SysUtils; + + type ++ { this is a effect for screen fade that in fact does nothing ++ and should be used as parent for new fade effect. ++ It will also be used if fading is disabled } ++ TFadeEffect = class ++ private ++ ++ public ++ constructor Create; ++ ++ { this procedure is called when a screen change starts } ++ procedure StartFade; ++ ++ { this function is called during a screen change, before screen ++ is drawn. screenchange is finished if this function returns ++ true. DoFadePostDraw will be called in every case after this ++ function was called, but fading will be finished regardless ++ what is returned DoFadePostDraw.} ++ function DoFadePreDraw: Boolean; ++ ++ { this function is called during a screen change, after screen ++ was drawn. screenchange is finished if this function returns ++ true. } ++ function DoFadePostDraw: Boolean; ++ ++ ++ ++ destructor Destroy; ++ end; ++ ++ { class representing a kind of screen that is drawn over ++ one or more other screens. it has focus before the ++ screens that it is overlaying } ++ TOverlay = class(TMenu); ++ + TDisplay = class + private ++ FadeInProgress: Boolean; ++ CurrentMenu: TMenu; ++ ++ FadeEffect: TFadeEffect; ++ public ++ constructor Create(Caption: String); ++ ++ { changes displayed screen, starts fading } ++ procedure ChangeMenu(NewScreen: TMenu); ++ property Menu: TMenu read CurrentMenu write ChangeMenu; ++ ++ ++ ++ ++ ++ { calls draw procedures of Screen and overlays, it ++ returns false if application should be closed } ++ function Draw: Boolean; ++ ++ destructor Destroy; ++ ++ {TDisplay = class ++ private + //fade-to-black-hack + BlackScreen: boolean; + +@@ -53,7 +110,7 @@ + LastFadeTime: cardinal; // last fade update time + + FadeTex: array[1..2] of GLuint; +- ++ + FPSCounter: cardinal; + LastFPS: cardinal; + NextFPSSwap: cardinal; +@@ -78,7 +135,7 @@ + procedure SaveScreenShot; + + function Draw: boolean; +- end; ++ end; } + + var + Display: TDisplay; diff --git a/unicode/Makefile.in b/unicode/Makefile.in index ad94259d..1b4f7707 100644 --- a/unicode/Makefile.in +++ b/unicode/Makefile.in @@ -58,6 +58,7 @@ USDX_GAME_DIR := $(top_srcdir)/game USDX_TOOLS_DIR := $(top_srcdir)/tools USDX_BUILD_DIR := $(top_srcdir)/build USDX_LIB_DIR := $(USDX_SRC_DIR)/lib +USDX_PLUGIN_DIR := $(top_srcdir)/plugins INSTALL_DATADIR := $(datadir)/$(USDX_PACKAGE_NAME) @@ -113,6 +114,7 @@ BUILD_TARGETS = all debug release rebuild build .PHONY: $(BUILD_TARGETS) $(BUILD_TARGETS): all-deps $(MAKE) -C $(USDX_SRC_DIR) $@ + $(MAKE) -C $(USDX_PLUGIN_DIR) all .PHONY: all-deps all-deps: @@ -213,13 +215,22 @@ install-strip: install .PHONY: install-all -install-all: install-exec install-data +install-all: install-exec install-plugins install-data .PHONY: install-exec install-exec: $(MKDIR) "$(DESTDIR)$(bindir)" $(INSTALL_PROGRAM) "$(USDX_BIN)" "$(DESTDIR)$(bindir)" +# FPC target platform and processor +PPLATFORM := @FPC_PLATFORM@ +PPROCESSOR := @FPC_PROCESSOR@ + +.PHONY: install-plugins +install-plugins: + $(MKDIR) "$(DESTDIR)$(INSTALL_DATADIR)/plugins" + $(INSTALL) "$(USDX_GAME_DIR)/plugins"/* "$(DESTDIR)$(INSTALL_DATADIR)/plugins" + .PHONY: install-data install-data: $(MAKE) RECURSIVE_SRC_DIR="artwork" \ @@ -265,7 +276,7 @@ install-data-recursive: uninstall: uninstall-all .PHONY: uninstall-all -uninstall-all: uninstall-data uninstall-exec +uninstall-all: uninstall-data uninstall-exec uninstall-plugins .PHONY: uninstall-data uninstall-data: @@ -282,6 +293,10 @@ uninstall-data: uninstall-exec: $(RM) "$(DESTDIR)$(bindir)/$(USDX_BIN_NAME)" +.PHONY: uninstall-plugins +uninstall-plugins: + $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/plugins" + ################################################# # Distributable source-package (TODO) ################################################# @@ -431,7 +446,9 @@ endef .PHONY: macosx-dmg macosx-dmg: macosx-standalone-app $(RM) UltraStarDeluxe.dmg - $(HDIUTIL) create -type SPARSE -size 40m -fs HFS+ -volname UltraStarDeluxe -ov -attach UltraStarDeluxe.sparseimage + $(RM) UltraStarDeluxe.sparseimage + $(HDIUTIL) create -type SPARSE -size 100m -fs HFS+ -volname UltraStarDeluxe -ov UltraStarDeluxe.sparseimage + $(HDIUTIL) attach UltraStarDeluxe.sparseimage /bin/cp -R UltraStarDeluxe.app /Volumes/UltraStarDeluxe # /bin/cp ultrastardx/icons/UltraStarDeluxeVolumeIcon.icns /Volumes/UltraStarDeluxe/.VolumeIcon.icns # /Developer/Tools/SetFile -a C /Volumes/UltraStarDeluxe/.VolumeIcon.icns /Volumes/UltraStarDeluxe @@ -450,3 +467,4 @@ clean-macosx-app: .PHONY: clean-macosx-dmg clean-macosx-dmg: $(RM) UltraStarDeluxe.dmg + $(RM) UltraStarDeluxe.sparseimage diff --git a/unicode/README.txt b/unicode/README.txt index 713e572e..9c80086d 100644 --- a/unicode/README.txt +++ b/unicode/README.txt @@ -29,12 +29,16 @@ Wiki: http://wiki.ultrastardeluxe.org/ = 1. About = ==================== -UltraStar Deluxe (USDX) is a free and open source karaoke game. It allows up to six players to sing along with music using microphones in order to score points, depending on the pitch of the voice and the rhythm of singing. +UltraStar Deluxe (USDX) is a free and open source karaoke game. It allows +up to six players to sing along with music using microphones in order to +score points, depending on the pitch of the voice and the rhythm of +singing. -UltraStar Deluxe is a fork of the original UltraStar (developed by corvus5). -Many features have been added like party mode, theme support and -support for more audio and video formats. -The improved stability and code quality of USDX enabled ports to Linux and Mac OS X. +UltraStar Deluxe is a fork of the original UltraStar (developed by corvus5). +Many features have been added like party mode, theme support and support +for more audio and video formats. +The improved stability and code quality of USDX enabled ports to Linux and +Mac OS X. ==================== = 2. Release Notes = @@ -44,7 +48,7 @@ The improved stability and code quality of USDX enabled ports to Linux and Mac O [Path] Songs=[SongFolder] (e.g. C:\Program Files\Ultrastar\Songs) -- To take a screenshot press "PrintScreen" Key +- To take a screenshot press "PrintScreen" key. Screenshots are saved in the directory "Screenshots". - To enable joypad support change config.ini: @@ -57,15 +61,15 @@ The improved stability and code quality of USDX enabled ports to Linux and Mac O [Controller] Joypad=On -- To Enable 4 to 6 Playermode 2 Screens are needed. - Disable the fullscreen mode, extend your desktop horizontaly, set the - resolution to fill one screen. +- To Enable 4 to 6 player mode 2 screens are needed. + Disable the full screen mode, extend your desktop horizontally and set + the resolution to fill one screen. Add to Config.ini: [Graphics] Screens=2 -- Press Alt + F[1..12] in NameScreen to Save a Playername - Press F[1..12] to Load a Playername +- Press Alt + F[1..12] in NameScreen to save the name of a player + Press F[1..12] to load the name of a player - To enable benchmark run the game with -benchmark parameter @@ -74,48 +78,49 @@ The improved stability and code quality of USDX enabled ports to Linux and Mac O = 3. Command-Line Parameters = ============================== -Command-Line Parameters are passed to the game adding it to the Path of a -Shortcut or starting the game within the console. +Command-line parameters are passed to the game adding it to the path of a +shortcut or starting the game within the console. The following parameters are possible. They can be joined in any possible way. - Benchmark : Create a benchmark.log file with start timings. -- NoLog : Do not create any .log files +- NoLog : Do not create any .log files -- Joypad : Start with Joypad support +- Joypad : Start with joypad support -- Language [ID] : Load Language [ID] on startup. +- Language [ID] : Load language [ID] on startup. Example: -Language german -- Songpath [Path] : Some as config Songpath. +- Songpath [Path] : Same as config Songpath. Example: -SongPath "C:\Ultrastar Songs" -- ConfigFile [File] : Load Configfile [File] instead of config.ini. - Path to the file have to exist. +- ConfigFile [File] : Load configuration file [File] instead of config.ini. + The path to the file has to exist. Example: -ConfigFile config.SongCreation.ini - ScoreFile [File] : Use [File] instead of Ultrastar.db - Path to the file have to exist. + The path to the file has to exist. Example: -ScoreFile HouseParty.db -- FullScreen : Start the game in Fullscreen Mode +- FullScreen : Start the game in full screen mode -- Depth [16/32] : Force Depth 16 or 32. Example: -Depth 16 +- Depth [16/32] : Force depth to 16 or 32. Example: -Depth 16 - Resolution [ID] : Force resolution. Example: -Resolution 800x600 -- Screens [1/2] : Force 1 or 2 Screen Mode. Example: -Screens 2 +- Screens [1/2] : Force 1 or 2 screens. Example: -Screens 2 Some Examples: -Start with Resolution 1024x768 32 Bit Depth and Fullscreen: +Start with a resolution of 1024x768, a depth of 32 bit and in full screen +mode: ultrastar.exe -Resolution 1024x768 -Depth 32 -Fullscreen -Start without logging and polish Language -ultrastar.exe -NoLog -Language german +Start without logging and with polish language +ultrastar.exe -NoLog -Language polish -Start with custom config File and Score DB: +Start with a customs configuration file and score database: ultrastar.exe -ConfigFile C:\Ultrastar\Configs\PartyConfig.ini -ScoreFile C:\Ultrastar\Scores\PartyScores.db @@ -123,12 +128,12 @@ ultrastar.exe -ConfigFile C:\Ultrastar\Configs\PartyConfig.ini -ScoreFile C:\Ult = 4. Controls = =============== -[J] to open the "Search for a Song" Interface +[J] to open the "Search for a Song" interface [Cursor] to navigate through the screens. -[Enter] to confirm +[Enter] to confirm [Escape] to go to the previous screen. -In Songscreen +Songscreen [R], [Shift] + [R], [Strg] + [R] select a random song/category @@ -136,4 +141,4 @@ In Songscreen [Alt] + [Shift] + [Letter] jump to a title with the first letter [Letter] -Editor Controls are described in documentation.pdf +Editor controls are described in documentation.pdf diff --git a/unicode/RELEASEBLOCKERS.txt b/unicode/RELEASEBLOCKERS.txt new file mode 100644 index 00000000..cd8d07eb --- /dev/null +++ b/unicode/RELEASEBLOCKERS.txt @@ -0,0 +1,31 @@ +Blockers for the outstanding 1.1 release +if you want to help us then start at this tasks + +Missing party mode (contact whiteshark to get further information on how to help) +- finishing new one (partymode branch) + pro: should be easy to port to all supported platforms + it should be easy to extended w/ lua support + basic plugin support, not only party modes + con: work! + modes has to be adapted + work! +- merge the old one + pro: less work + it is known to work and there are many existing modis + con: may be difficult to port to other platforms than windows + +Unicode support (contact tobigun to get further information on how to help) +- there is a unicode branch +- seems to work except for some glitches + +Microfone playback +- buffers have to be adjusted + - this may be done automatically (prefer this!) + - or at least the user has to manually adjust this +- there may be other problems as due to the missing buffer adjustment there were no extensive tests + +Theme changes +- there are some problems w/ theme-object positions mainly in the option-screens + +There are also assembla tickets that need to be fixed +http://www.assembla.com/spaces/usdx/milestones/26192-UltraStar-Deluxe-1-1-Release
\ No newline at end of file diff --git a/unicode/configure b/unicode/configure index 385a5eb1..b2351c6a 100755 --- a/unicode/configure +++ b/unicode/configure @@ -6271,6 +6271,8 @@ ac_config_files="$ac_config_files Makefile" ac_config_files="$ac_config_files src/Makefile" +ac_config_files="$ac_config_files plugins/Makefile" + ac_config_files="$ac_config_files src/config-$FPC_PLATFORM.inc:src/config.inc.in" if [ x$libprojectM_USE_CWRAPPER = xyes ]; then diff --git a/unicode/configure.ac b/unicode/configure.ac index 84f06d58..7d643c9b 100644 --- a/unicode/configure.ac +++ b/unicode/configure.ac @@ -235,6 +235,7 @@ AC_SUBST(LIBS) AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([src/Makefile]) +AC_CONFIG_FILES([plugins/Makefile]) AC_CONFIG_FILES([src/config-$FPC_PLATFORM.inc:src/config.inc.in]) if [[ x$libprojectM_USE_CWRAPPER = xyes ]]; then AC_CONFIG_FILES([src/lib/projectM/cwrapper/Makefile]) diff --git a/unicode/game/languages/Catalan.ini b/unicode/game/languages/Catalan.ini index 3486f631..d8ebad19 100644 --- a/unicode/game/languages/Catalan.ini +++ b/unicode/game/languages/Catalan.ini @@ -46,15 +46,18 @@ SING_OPTIONS_GAME_DEBUG=Debug SING_OPTIONS_GRAPHICS_WHEREAMI=Opcions Grà fiques SING_OPTIONS_GRAPHICS_DESC=configurar grà fics -SING_OPTIONS_GRAPHICS_RESOLUTION=Resoluciò +SING_OPTIONS_GRAPHICS_RESOLUTION=ResoluciÌ£ SING_OPTIONS_GRAPHICS_FULLSCREEN=Pantalla complerta SING_OPTIONS_GRAPHICS_DEPTH=Profunditat +SING_OPTIONS_GRAPHICS_VISUALIZER=Visualització SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Oscil·loscopi SING_OPTIONS_GRAPHICS_LINEBONUS=Bonus de lÃnia SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Mida pel·lÃcula SING_OPTIONS_SOUND_WHEREAMI=Opcions de so SING_OPTIONS_SOUND_DESC=configurar so +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Reproducció del micro +SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Música de fons SING_OPTIONS_SOUND_MIC_BOOST=Ampli Micro SING_OPTIONS_SOUND_CLICK_ASSIST=Assistència Click SING_OPTIONS_SOUND_BEAT_CLICK=Clic de ritme @@ -68,6 +71,7 @@ SING_OPTIONS_LYRICS_DESC=configuració de lletres SING_OPTIONS_LYRICS_FONT=Font SING_OPTIONS_LYRICS_EFFECT=Efecte SING_OPTIONS_LYRICS_SOLMIZATION=Solfeig +SING_OPTIONS_LYRICS_NOTELINES=Pentagrama SING_OPTIONS_THEMES_WHEREAMI=Options d'Aparença SING_OPTIONS_THEMES_DESC=Configuració d'aparença @@ -91,6 +95,16 @@ SING_OPTIONS_ADVANCED_LINEBONUS=Bonus de lÃnia SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Quantes vegades cantada SING_OPTIONS_ADVANCED_ONSONGCLICK=després de triar cançó SING_OPTIONS_ADVANCED_PARTYPOPUP=Menú Automà tic de festa +SING_EDIT=Editor +SING_EDIT_MENU_DESCRIPTION=crea cançons +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Importar text de fitxer midi +SING_EDIT_BUTTON_DESCRIPTION_EXIT=tornar +SING_EDIT_BUTTON_CONVERT=Importar +SING_EDIT_BUTTON_EXIT=enrere +SING_EDIT_NAVIGATE=navegar +SING_EDIT_SELECT=triar +SING_EDIT_EXIT=enrere + SING_LEGEND_SELECT=seleccionar SING_LEGEND_NAVIGATE=navegar @@ -130,12 +144,13 @@ SONG_SCORE=puntuació cançó SONG_SCORE_WHEREAMI=Puntuació SING_SCORE_TONE_DEAF=Sense oïda -SING_SCORE_AMATEUR=Aficionat +SING_SCORE_AMATEUR=Novell +SING_SCORE_WANNABE=Aficionat +SING_SCORE_HOPEFUL=Esperançador SING_SCORE_RISING_STAR=Futura estrella SING_SCORE_LEAD_SINGER=Bon cantant -SING_SCORE_HIT_ARTIST=LÃder de grup -SING_SCORE_SUPERSTAR=Super estrella -SING_SCORE_ULTRASTAR=Ultra estrella +SING_SCORE_SUPERSTAR=Estrella +SING_SCORE_ULTRASTAR=Super estrella SING_TOP_5_CHARTS=millors 5 jugadors SING_TOP_5_CHARTS_WHEREAMI=millors 5 @@ -173,7 +188,7 @@ SONG_MENU_NAME_PLAYLIST_NEW=Nova llista SONG_MENU_PLAYLIST_NEW_CREATE=Crear SONG_MENU_PLAYLIST_NEW_UNNAMED=Sense nom -SONG_MENU_NAME_PLAYLIST_DEL=Segur que vols esborrar? +SONG_MENU_NAME_PLAYLIST_DELITEM=Segur que vols esborrar? SONG_MENU_YES=Si SONG_MENU_NO=No @@ -295,4 +310,8 @@ MSG_QUIT_USDX=Realment vols sortir d'UltraStar? MSG_END_PARTY=Realment vols sortir del mode festa? ERROR_NO_SONGS=No hi ha cançons ERROR_NO_PLUGINS=No hi ha Plugins -ERROR_CORRUPT_SONG=No es poden carregar les cançons
\ No newline at end of file +ERROR_CORRUPT_SONG=No es poden carregar les cançons +ERROR_CORRUPT_SONG_FILE_NOT_FOUND=No es pot carregar: Fitxer no trobat +ERROR_CORRUPT_SONG_NO_NOTES=No es pot carregar: No s'han trobat notes +ERROR_CORRUPT_SONG_NO_BREAKS=No es pot carregar: No s'han trobat lÃnies +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=No es pot carregar: Error llegint lÃnia %0:d diff --git a/unicode/game/languages/Croatian.ini b/unicode/game/languages/Croatian.ini index 5f97459b..1c7e349d 100644 --- a/unicode/game/languages/Croatian.ini +++ b/unicode/game/languages/Croatian.ini @@ -1,7 +1,7 @@ [Text] -SING_LOADING=Ucitavanje... +SING_LOADING=Uèitavanje... -SING_CHOOSE_MODE=Izaberi nacin igre +SING_CHOOSE_MODE=Izaberi naèin igre SING_SING=pjevaj SING_SING_DESC=brza igra: pjevaj solo ili duet @@ -37,8 +37,8 @@ SING_OPTIONS_EXIT=natrag SING_OPTIONS_GAME_WHEREAMI=Opcije Igre SING_OPTIONS_GAME_DESC=osnovne opcije igre -SING_OPTIONS_GAME_PLAYERS=Br. igraca -SING_OPTIONS_GAME_DIFFICULTY=Težina +SING_OPTIONS_GAME_PLAYERS=Br. igraèa +SING_OPTIONS_GAME_DIFFICULTY=Težina SING_OPTIONS_GAME_LANGUAGE=Jezik SING_OPTIONS_GAME_TABS=Tabovi SING_OPTIONS_GAME_SORTING=Sortiranje @@ -51,23 +51,27 @@ SING_OPTIONS_GRAPHICS_FULLSCREEN=Cijeli ekran SING_OPTIONS_GRAPHICS_DEPTH=Dubina boja SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Osciloskop SING_OPTIONS_GRAPHICS_LINEBONUS=Bonus linije -SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Velicina videa +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Velièina videa +SING_OPTIONS_GRAPHICS_VISUALIZER=Vizualizacije SING_OPTIONS_SOUND_WHEREAMI=Opcije Zvuka SING_OPTIONS_SOUND_DESC=postavke zvuka SING_OPTIONS_SOUND_MIC_BOOST=Mic boost -SING_OPTIONS_SOUND_CLICK_ASSIST=Pomoc klikovima +SING_OPTIONS_SOUND_CLICK_ASSIST=Pomoæ klikovima SING_OPTIONS_SOUND_BEAT_CLICK=Klik na udarce SING_OPTIONS_SOUND_THRESHOLD=Threshold -SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Igra za dva igraca -SING_OPTIONS_SOUND_PREVIEWVOLUME=Glasnoca prikaza +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Igra za dva igraèa +SING_OPTIONS_SOUND_PREVIEWVOLUME=Glasnoæa prikaza SING_OPTIONS_SOUND_PREVIEWFADING=Fade-in vrijeme +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Microphone Playback +SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Pozadinska glazba SING_OPTIONS_LYRICS_WHEREAMI=Opcije Tekstova SING_OPTIONS_LYRICS_DESC=postavke tekstova SING_OPTIONS_LYRICS_FONT=Font SING_OPTIONS_LYRICS_EFFECT=Efekt SING_OPTIONS_LYRICS_SOLMIZATION=Solmizacija +SING_OPTIONS_LYRICS_NOTELINES=Crtovlje SING_OPTIONS_THEMES_WHEREAMI=Opcije Tema SING_OPTIONS_THEMES_DESC=postavke tema i skinova @@ -85,28 +89,38 @@ SING_OPTIONS_ADVANCED_WHEREAMI=Ostale Opcije SING_OPTIONS_ADVANCED_DESC=ostale postavke SING_OPTIONS_ADVANCED_EFFECTSING=Efekti kod pjevanja SING_OPTIONS_ADVANCED_SCREENFADE=Fade-out ekrana -SING_OPTIONS_ADVANCED_LOADANIMATION=Anim. tijekom ucit. +SING_OPTIONS_ADVANCED_LOADANIMATION=Anim. tijekom uèit. SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Sigurn. pitanja SING_OPTIONS_ADVANCED_LINEBONUS=Bonus linije SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Zapamti broj pjev. SING_OPTIONS_ADVANCED_ONSONGCLICK=Nakon pjesme SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto party meni +SING_EDIT=Editor +SING_EDIT_MENU_DESCRIPTION=napravi svoje pjesme +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Uèitaj tekst iz midi datoteke +SING_EDIT_BUTTON_DESCRIPTION_EXIT=natrag +SING_EDIT_BUTTON_CONVERT=Uèitaj +SING_EDIT_BUTTON_EXIT=natrag +SING_EDIT_NAVIGATE=upravljanje +SING_EDIT_SELECT=odaberi +SING_EDIT_EXIT=natrag + SING_LEGEND_SELECT=odaberi SING_LEGEND_NAVIGATE=navigacija SING_LEGEND_CONTINUE=nastavi SING_LEGEND_ESC=natrag -SING_PLAYER_DESC=unesi ime igraca -SING_PLAYER_WHEREAMI=Imena igraca +SING_PLAYER_DESC=unesi ime igraèa +SING_PLAYER_WHEREAMI=Imena igraèa SING_PLAYER_ENTER_NAME=unesi ime -SING_DIFFICULTY_DESC=odaberi težinu -SING_DIFFICULTY_WHEREAMI=Težina +SING_DIFFICULTY_DESC=odaberi težinu +SING_DIFFICULTY_WHEREAMI=Težina SING_DIFFICULTY_CONTINUE=odabir pjesme SING_EASY=Lako SING_MEDIUM=Srednje -SING_HARD=TeÅ¡ko +SING_HARD=Teško SING_SONG_SELECTION_DESC=odaberi pjesmu SING_SONG_SELECTION_WHEREAMI=Odabir Pjesme @@ -132,21 +146,23 @@ SONG_SCORE_WHEREAMI=Rezultat SING_SCORE_TONE_DEAF=Bez sluha SING_SCORE_AMATEUR=Amater SING_SCORE_RISING_STAR=Zvijezda u usponu -SING_SCORE_LEAD_SINGER=Vodeci pjevac +SING_SCORE_LEAD_SINGER=Vodeæi pjevaè SING_SCORE_HIT_ARTIST=Hit Artist SING_SCORE_SUPERSTAR=Superstar SING_SCORE_ULTRASTAR=Ultrastar +SING_SCORE_WANNABE=Wannabe +SING_SCORE_HOPEFUL=Pun nade -SING_TOP_5_CHARTS=top 5 Igraca +SING_TOP_5_CHARTS=top 5 Igraèa SING_TOP_5_CHARTS_WHEREAMI=top 5 SING_TOP_5_CHARTS_CONTINUE=odabir pjesme POPUP_PERFECT=izvanredno! POPUP_AWESOME=predivno! -POPUP_GREAT=odlicno! +POPUP_GREAT=odlièno! POPUP_GOOD=dobro! -POPUP_NOTBAD=nije loÅ¡e! -POPUP_BAD=loÅ¡e! +POPUP_NOTBAD=nije loše! +POPUP_BAD=loše! POPUP_POOR=jadno! POPUP_AWFUL=grozno! @@ -155,18 +171,18 @@ IMPLODE_GLUE2= i SONG_MENU_NAME_MAIN=Kolekcija pjesama SONG_MENU_PLAY=Pjevaj -SONG_MENU_CHANGEPLAYERS=Promijeni igrace +SONG_MENU_CHANGEPLAYERS=Promijeni igraèe SONG_MENU_EDIT=Uredi SONG_MENU_MODI=Pjevaj Modi -SONG_MENU_CANCEL=PoniÅ¡ti +SONG_MENU_CANCEL=Poništi SONG_MENU_NAME_PLAYLIST=Playliste SONG_MENU_PLAYLIST_ADD=Dodaj Pjesmu -SONG_MENU_PLAYLIST_DEL=IzbriÅ¡i Pjesmu +SONG_MENU_PLAYLIST_DEL=Izbriši Pjesmu SONG_MENU_NAME_PLAYLIST_ADD=Dodaj Pjesmu SONG_MENU_PLAYLIST_ADD_NEW=na novu playlistu -SONG_MENU_PLAYLIST_ADD_EXISTING=na postojecu playlistu +SONG_MENU_PLAYLIST_ADD_EXISTING=na postojeæu playlistu SONG_MENU_PLAYLIST_NOEXISTING=Nema playlisti. SONG_MENU_NAME_PLAYLIST_NEW=Nova Playlista @@ -179,50 +195,50 @@ SONG_MENU_NO=Ne SONG_MENU_NAME_PLAYLIST_LOAD=Otvori Playlistu SONG_MENU_PLAYLIST_LOAD=otvori -SONG_MENU_PLAYLIST_DELCURRENT=obriÅ¡i trenutnu Playlistu +SONG_MENU_PLAYLIST_DELCURRENT=obriši trenutnu Playlistu -SONG_MENU_NAME_PLAYLIST_DEL=ObriÅ¡i Playlistu? +SONG_MENU_NAME_PLAYLIST_DEL=Obriši Playlistu? SONG_MENU_NAME_PARTY_MAIN=Party Meni SONG_MENU_JOKER=Joker SONG_MENU_NAME_PARTY_JOKER=iskoristi joker -SONG_JUMPTO_DESC=pretraži pjesme -SONG_JUMPTO_TYPE_DESC=Traži : +SONG_JUMPTO_DESC=pretraži pjesme +SONG_JUMPTO_TYPE_DESC=Traži : SONG_JUMPTO_TYPE1=Sve SONG_JUMPTO_TYPE2=Naslov -SONG_JUMPTO_TYPE3=Izvoðac -SONG_JUMPTO_SONGSFOUND=%d pjes(a)ma naðeno -SONG_JUMPTO_NOSONGSFOUND=Niti jedna pjesma nije pronaðena. -SONG_JUMPTO_HELP=Unesi tekst koji želiÅ¡ tražiti. -SONG_JUMPTO_CATTEXT=Traži: %s +SONG_JUMPTO_TYPE3=Izvoðaè +SONG_JUMPTO_SONGSFOUND=%d pjes(a)ma naðeno +SONG_JUMPTO_NOSONGSFOUND=Niti jedna pjesma nije pronaðena. +SONG_JUMPTO_HELP=Unesi tekst koji želiš tražiti. +SONG_JUMPTO_CATTEXT=Traži: %s PARTY_MODE=party mod -PARTY_DIFFICULTY=Težina +PARTY_DIFFICULTY=Težina PARTY_PLAYLIST=Playlist Mod PARTY_PLAYLIST_ALL=Sve pjesme PARTY_PLAYLIST_CATEGORY=Folder PARTY_PLAYLIST_PLAYLIST=Playliste PARTY_ROUNDS=Runde PARTY_TEAMS=Br. Timova -PARTY_TEAMS_PLAYER1=Br. Igraca - Tim1 -PARTY_TEAMS_PLAYER2=Br. Igraca - Tim2 -PARTY_TEAMS_PLAYER3=Br. Igraca - Tim3 +PARTY_TEAMS_PLAYER1=Br. Igraèa - Tim1 +PARTY_TEAMS_PLAYER2=Br. Igraèa - Tim2 +PARTY_TEAMS_PLAYER3=Br. Igraèa - Tim3 PARTY_LEGEND_CONTINUE=nastavi PARTY_OPTIONS_DESC=postavke za party igru PARTY_OPTIONS_WHEREAMI=Party Opcije -PARTY_PLAYER_DESC=unesi imena timova i igraca! +PARTY_PLAYER_DESC=unesi imena timova i igraèa! PARTY_PLAYER_WHEREAMI=Party Imena PARTY_PLAYER_ENTER_NAME=unesi imena -PARTY_PLAYER_LEGEND_CONTINUE=zapocni party-igru +PARTY_PLAYER_LEGEND_CONTINUE=zapoèni party-igru -PARTY_ROUND_DESC=sljed. igraci za mikr. +PARTY_ROUND_DESC=sljed. igraèi za mikr. PARTY_ROUND_WHEREAMI=Party Sljed runda -PARTY_ROUND_LEGEND_CONTINUE=zapocni rundu +PARTY_ROUND_LEGEND_CONTINUE=zapoèni rundu PARTY_SONG_WHEREAMI=Party Odabir pjesme PARTY_SONG_LEGEND_CONTINUE=pjevaj @@ -237,7 +253,7 @@ PARTY_WIN_LEGEND_CONTINUE=natrag na glavni meni PARTY_ROUND=Runda PARTY_ROUND_WINNER=Pobjednik -PARTY_NOTPLAYEDYET=nije joÅ¡ odigr. +PARTY_NOTPLAYEDYET=nije još odigr. PARTY_NOBODY=nitko ni NEXT_ROUND=Sljed. runda: @@ -245,11 +261,11 @@ PARTY_DISMISSED=Izbacen! PARTY_SCORE_WINS=%s je PARTY_SCORE_WINS2=pobijedio! -PLUGIN_HDL_NAME=Zadrži liniju -PLUGIN_HDL_DESC=Nemoj biti gori od pointera na rating baru. +PLUGIN_HDL_NAME=Zadrži liniju +PLUGIN_HDL_DESC=Nemoj biti gori od pokazivaèa na 'rating' baru. PLUGIN_UNTIL5000_NAME=Do 5000 -PLUGIN_UNTIL5000_DESC=Pobjeðuje onaj tko prvi doðe do 5000 bodova. +PLUGIN_UNTIL5000_DESC=Pobjeðuje onaj tko prvi doðe do 5000 bodova. PLUGIN_DUELL_NAME=Dvoboj PLUGIN_DUELL_DESC=Pjevaj dvoboj do 10000 bodova. @@ -257,22 +273,22 @@ PLUGIN_DUELL_DESC=Pjevaj dvoboj do 10000 bodova. PLUGIN_TEAMDUELL_NAME=Dvoboj timova PLUGIN_TEAMDUELL_DESC=Dodaj mikrofon! -PLUGIN_BLIND_NAME=Slijepi nacin +PLUGIN_BLIND_NAME=Slijepi naèin PLUGIN_BLIND_DESC=Dvoboj bez gledanja nota. -PLUGIN_BLIND_NOSCORE_NAME=Slijepi nacin 2 +PLUGIN_BLIND_NOSCORE_NAME=Slijepi naèin 2 PLUGIN_BLIND_NOSCORE_DESC=Dvoboj bez gledanja nota i bodova. -PLUGIN_MORE1000_NAME=1000 ViÅ¡e -PLUGIN_MORE1000_DESC=Pjevajte dok jedan od igraca ne skupi 1000 bod viÅ¡e. +PLUGIN_MORE1000_NAME=1000 Više +PLUGIN_MORE1000_DESC=Pjevajte dok jedan od igraèa ne skupi 1000 bod više. STAT_MAIN=Statistika STAT_MAIN_DESC=General STAT_MAIN_WHEREAMI=Statistika STAT_OVERVIEW_INTRO=%0:s Statistika. \n Zadnji reset je bio %2:.2d.%1:.2d.%3:d -STAT_OVERVIEW_SONG=%0:d pjesama (%3:d sa Videom), od cega je %1:d pjesama otpjevano a %2:d nije.\n Najpopularnija pjesma je %5:s od %4:s. -STAT_OVERVIEW_PLAYER=Od zadnjeg reseta bilo je %0:d razlicitih igraca.\n Najbolji igrac je %1:s sa prosjekom od %2:d bodova.\n %3:s je napravio/la najveci rezultat sa %4:d bodova. +STAT_OVERVIEW_SONG=%0:d pjesama (%3:d sa Videom), od èega je %1:d pjesama otpjevano a %2:d nije.\n Najpopularnija pjesma je %5:s od %4:s. +STAT_OVERVIEW_PLAYER=Od zadnjeg reseta bilo je %0:d razlièitih igraèa.\n Najbolji igraè je %1:s sa prosjekom od %2:d bodova.\n %3:s je napravio/la najveæi rezultat sa %4:d bodova. STAT_DETAIL=Statistika STAT_DETAIL_WHEREAMI=Detaljna statistika @@ -286,9 +302,9 @@ STAT_DESC_SCORES=HighScores STAT_DESC_SCORES_REVERSED=LowScores STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) -STAT_DESC_SINGERS=Najbolji pjevaci -STAT_DESC_SINGERS_REVERSED=Najgori pjevaci -STAT_FORMAT_SINGERS=%0:s \n Prosjecni bodovi: %1:d +STAT_DESC_SINGERS=Najbolji pjevaèi +STAT_DESC_SINGERS_REVERSED=Najgori pjevaèi +STAT_FORMAT_SINGERS=%0:s \n Prosjeèni bodovi: %1:d STAT_DESC_SONGS=Popularne pjesme STAT_DESC_SONGS_REVERSED=Nepopularne pjesme @@ -298,10 +314,15 @@ STAT_DESC_BANDS=Popularni bendovi STAT_DESC_BANDS_REVERSED=Nepopularni bendovi STAT_FORMAT_BANDS=%0:s \n %1:dx otpjevano -MSG_ERROR_TITLE=GreÅ¡ka +ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Pjesma se ne može uèitati: Datoteka nije naðena +ERROR_CORRUPT_SONG_NO_NOTES=Pjesma se ne može uèitati: Nije naðena niti jedna nota +ERROR_CORRUPT_SONG_NO_BREAKS=Pjesma se ne može uèitati: Nije naðen niti jedan 'linebreak' +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Pjesma se ne može uèitati: Greška u obradi linije %0:d + +MSG_ERROR_TITLE=Greška MSG_QUESTION_TITLE=Pitanje MSG_QUIT_USDX=Napustiti UltraStar? MSG_END_PARTY=Napustiti Party igru? -ERROR_NO_SONGS=Nema ucitanih pjesama -ERROR_NO_PLUGINS=Nema ucitanih pluginova -ERROR_CORRUPT_SONG=Pjesma se ne može ucitati.
\ No newline at end of file +ERROR_NO_SONGS=Nema uèitanih pjesama +ERROR_NO_PLUGINS=Nema uèitanih pluginova +ERROR_CORRUPT_SONG=Pjesma se ne može uèitati.
\ No newline at end of file diff --git a/unicode/game/languages/Dutch.ini b/unicode/game/languages/Dutch.ini index 6bb3833f..010fc63c 100644 --- a/unicode/game/languages/Dutch.ini +++ b/unicode/game/languages/Dutch.ini @@ -1,298 +1,322 @@ [Text] SING_LOADING=Laden... -SING_CHOOSE_MODE=Kies modus -SING_SING=Zingen -SING_SING_DESC=Snel spelen: zing een solo of een duet +SING_CHOOSE_MODE=kies mode +SING_SING=zing +SING_SING_DESC=snel spelletje: zing een solo of duet -SING_MULTI=Party -SING_MULTI_DESC=Zing in party-modus +SING_MULTI=party +SING_MULTI_DESC=zing in party-mode -SING_TOOLS=Extra +SING_TOOLS=tools -SING_STATS=Statistieken -SING_STATS_DESC=Bekijk de statistieken +SING_STATS=stats +SING_STATS_DESC=bekijk de statistieken -SING_EDITOR=Editor -SING_EDITOR_DESC=Creeër je eigen nummers +SING_EDITOR=editor +SING_EDITOR_DESC=Maak je eigen liedje -SING_GAME_OPTIONS=Spel opties -SING_GAME_OPTIONS_DESC=Verander de spel instellingen +SING_GAME_OPTIONS=spelopties +SING_GAME_OPTIONS_DESC=verander de spelopties -SING_EXIT=Afsluiten -SING_EXIT_DESC=Spel beëindigen +SING_EXIT=Stoppen +SING_EXIT_DESC=stop het spelletje -SING_OPTIONS=Opties -SING_OPTIONS_DESC=Verander instellingen +SING_OPTIONS=opties +SING_OPTIONS_DESC=Verander de opties SING_OPTIONS_WHEREAMI=Opties SING_OPTIONS_GAME=Spel -SING_OPTIONS_GRAPHICS=Grafisch +SING_OPTIONS_GRAPHICS=graphics SING_OPTIONS_SOUND=Geluid -SING_OPTIONS_LYRICS=Teksten -SING_OPTIONS_THEMES=Thema's -SING_OPTIONS_RECORD=Opnamen +SING_OPTIONS_LYRICS=Tekst +SING_OPTIONS_THEMES=Thema +SING_OPTIONS_RECORD=Opname SING_OPTIONS_ADVANCED=Geavanceerd SING_OPTIONS_EXIT=Terug -SING_OPTIONS_GAME_WHEREAMI=Opties Spel +SING_OPTIONS_GAME_WHEREAMI=Spel Opties SING_OPTIONS_GAME_DESC=Algemene spelinstellingen SING_OPTIONS_GAME_PLAYERS=Spelers SING_OPTIONS_GAME_DIFFICULTY=Moeilijkheidsgraad SING_OPTIONS_GAME_LANGUAGE=Taal -SING_OPTIONS_GAME_TABS=Tabbladen +SING_OPTIONS_GAME_TABS=Tabs SING_OPTIONS_GAME_SORTING=Sorteren SING_OPTIONS_GAME_DEBUG=Debug -SING_OPTIONS_GRAPHICS_WHEREAMI=Opties Grafisch +SING_OPTIONS_GRAPHICS_WHEREAMI=Grafische opties SING_OPTIONS_GRAPHICS_DESC=Grafische instellingen SING_OPTIONS_GRAPHICS_RESOLUTION=Resolutie -SING_OPTIONS_GRAPHICS_FULLSCREEN=Volledig scherm -SING_OPTIONS_GRAPHICS_DEPTH=Kleurdiepte +SING_OPTIONS_GRAPHICS_FULLSCREEN=Fullscreen +SING_OPTIONS_GRAPHICS_DEPTH=Diepte +SING_OPTIONS_GRAPHICS_VISUALIZER=Visualisatie SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Oscilloscoop -SING_OPTIONS_GRAPHICS_LINEBONUS=Regel Bonus -SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Video formaat +SING_OPTIONS_GRAPHICS_LINEBONUS=Lijnbonus +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Video grootte -SING_OPTIONS_SOUND_WHEREAMI=Opties geluid +SING_OPTIONS_SOUND_WHEREAMI=Geluidsopties SING_OPTIONS_SOUND_DESC=Geluidsinstellingen -SING_OPTIONS_SOUND_MIC_BOOST=Mic versterken +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Microfoon Playback +SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Achtergrond Muziek +SING_OPTIONS_SOUND_MIC_BOOST=Microfoon boost SING_OPTIONS_SOUND_CLICK_ASSIST=Klik assistent -SING_OPTIONS_SOUND_BEAT_CLICK=Metronoom +SING_OPTIONS_SOUND_BEAT_CLICK=Beat klik SING_OPTIONS_SOUND_THRESHOLD=Drempelwaarde -SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Twee speler modus -SING_OPTIONS_SOUND_PREVIEWVOLUME=Selectie Volume -SING_OPTIONS_SOUND_PREVIEWFADING=Crossfading +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Twee spelers mode +SING_OPTIONS_SOUND_PREVIEWVOLUME=Voorbeeld volume +SING_OPTIONS_SOUND_PREVIEWFADING=Voorbeeld Faden -SING_OPTIONS_LYRICS_WHEREAMI=Opties Teksten -SING_OPTIONS_LYRICS_DESC=Tekstinstellingen +SING_OPTIONS_LYRICS_WHEREAMI=Tekst Opties +SING_OPTIONS_LYRICS_DESC=Tekst instellingen SING_OPTIONS_LYRICS_FONT=Lettertype -SING_OPTIONS_LYRICS_EFFECT=Effect -SING_OPTIONS_LYRICS_SOLMIZATION=Solmisatie +SING_OPTIONS_LYRICS_EFFECT=Effecten +SING_OPTIONS_LYRICS_SOLMIZATION=Solmizatie +SING_OPTIONS_LYRICS_NOTELINES=Staafjes -SING_OPTIONS_THEMES_WHEREAMI=Opties Thema's -SING_OPTIONS_THEMES_DESC=Thema en Skin instellingen +SING_OPTIONS_THEMES_WHEREAMI=Thema opties +SING_OPTIONS_THEMES_DESC=Thema- en skinopties SING_OPTIONS_THEMES_THEME=Thema SING_OPTIONS_THEMES_SKIN=Skin SING_OPTIONS_THEMES_COLOR=Kleur -SING_OPTIONS_RECORD_WHEREAMI=Opties Opnamen +SING_OPTIONS_RECORD_WHEREAMI=Opname opties SING_OPTIONS_RECORD_DESC=Microfoon instellingen SING_OPTIONS_RECORD_CARD=Geluidskaart -SING_OPTIONS_RECORD_INPUT=Aansluiting +SING_OPTIONS_RECORD_INPUT=Input SING_OPTIONS_RECORD_CHANNEL=Kanaal -SING_OPTIONS_ADVANCED_WHEREAMI=Opties Geavanceerd -SING_OPTIONS_ADVANCED_DESC=Geavanceerde instellingen -SING_OPTIONS_ADVANCED_EFFECTSING=Noot effecten -SING_OPTIONS_ADVANCED_SCREENFADE=Schermovergang -SING_OPTIONS_ADVANCED_LOADANIMATION=Laad Animaties +SING_OPTIONS_ADVANCED_WHEREAMI=Geavanceerde opties +SING_OPTIONS_ADVANCED_DESC=geavanceerde instellingen +SING_OPTIONS_ADVANCED_EFFECTSING=Zing effecten +SING_OPTIONS_ADVANCED_SCREENFADE=Faden +SING_OPTIONS_ADVANCED_LOADANIMATION=Laad animaties SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Veiligheidsvragen -SING_OPTIONS_ADVANCED_LINEBONUS=Regel Bonus -SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= -SING_OPTIONS_ADVANCED_ONSONGCLICK=Na Selectie -SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto Partymenu +SING_OPTIONS_ADVANCED_LINEBONUS=Lijnbonus +SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Telling +SING_OPTIONS_ADVANCED_ONSONGCLICK=Selecties na het Liedje +SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto PartyMenu + +SING_EDIT=Editor +SING_EDIT_MENU_DESCRIPTION=Maak je eigen liedje + +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Importeer tekst van midi file +SING_EDIT_BUTTON_DESCRIPTION_EXIT=Terug +SING_EDIT_BUTTON_CONVERT=Importeer +SING_EDIT_BUTTON_EXIT=Terug + +SING_EDIT_NAVIGATE=Navigeer +SING_EDIT_SELECT=Selecteer +SING_EDIT_EXIT=Terug SING_LEGEND_SELECT=Selecteer SING_LEGEND_NAVIGATE=Navigeer -SING_LEGEND_CONTINUE=Verder +SING_LEGEND_CONTINUE=Ga Verder SING_LEGEND_ESC=Terug -SING_PLAYER_DESC=Type spelersnaam -SING_PLAYER_WHEREAMI=Spelernaam -SING_PLAYER_ENTER_NAME=type de naam +SING_PLAYER_DESC=Kies Namen +SING_PLAYER_WHEREAMI=Namen +SING_PLAYER_ENTER_NAME=Kies namen -SING_DIFFICULTY_DESC=Selecteer moeilijkheidsgraad +SING_DIFFICULTY_DESC=selecteer moeilijkheidsgraad SING_DIFFICULTY_WHEREAMI=Moeilijkheidsgraad -SING_DIFFICULTY_CONTINUE=Verder een nummer selecteren -SING_EASY=Makkelijk -SING_MEDIUM=Gemiddeld +SING_DIFFICULTY_CONTINUE=Ga verder +SING_EASY=Gemakkelijk +SING_MEDIUM=Gemiddeled SING_HARD=Moeilijk -SING_SONG_SELECTION_DESC=Kies een nummer -SING_SONG_SELECTION_WHEREAMI=Nummer selecteren -SING_SONG_SELECTION_GOTO=Ga naar... -SING_SONG_SELECTION=Nummer Selectie -SING_SONG_SELECTION_MENU=Menu -SING_SONG_SELECTION_PLAYLIST=Speellijst -SING_SONGS_IN_CAT=Nummers -PLAYLIST_CATTEXT=Speellijst: %s +SING_SONG_SELECTION_DESC=Kies je liedje +SING_SONG_SELECTION_WHEREAMI=Selecteer een liedje +SING_SONG_SELECTION_GOTO=Ga naar +SING_SONG_SELECTION=Liedjes Selectie +SING_SONG_SELECTION_MENU=menu +SING_SONG_SELECTION_PLAYLIST=playlist +SING_SONGS_IN_CAT=Liedjes +PLAYLIST_CATTEXT=Playlist: %s SING_TIME=TIJD -SING_TOTAL=Totaal -SING_MODE=Zing een solo -SING_NOTES=Noten -SING_GOLDEN_NOTES=Gouden noten -SING_PHRASE_BONUS=Regel bonus +SING_TOTAL=totaal +SING_MODE=zing solo +SING_NOTES=noten +SING_GOLDEN_NOTES=gouden noten +SING_PHRASE_BONUS=lijn bonus -SING_MENU=Hoofdmenu +SING_MENU=Hoofd Menu -SONG_SCORE=Nummer score +SONG_SCORE=Score SONG_SCORE_WHEREAMI=Score -SING_SCORE_TONE_DEAF=Toon Doof +SING_SCORE_TONE_DEAF=Toondoof SING_SCORE_AMATEUR=Amateur -SING_SCORE_RISING_STAR=Beginnende Ster -SING_SCORE_LEAD_SINGER=Hoofd Zanger -SING_SCORE_HIT_ARTIST=Hit Artiest +SING_SCORE_WANNABE=Wannabe +SING_SCORE_HOPEFUL=Hoopvol +SING_SCORE_RISING_STAR=Opkomende Ster +SING_SCORE_LEAD_SINGER=Hoofdzanger SING_SCORE_SUPERSTAR=Superster -SING_SCORE_ULTRASTAR=Ultrastar +SING_SCORE_ULTRASTAR=ULTRASTAR -SING_TOP_5_CHARTS=Top 5 Spelers -SING_TOP_5_CHARTS_WHEREAMI=Top 5 -SING_TOP_5_CHARTS_CONTINUE=Naar de nummer selectie +SING_TOP_5_CHARTS=top 5 Spelers +SING_TOP_5_CHARTS_WHEREAMI=top 5 +SING_TOP_5_CHARTS_CONTINUE=Ga Verder POPUP_PERFECT=perfect! -POPUP_AWESOME=super! -POPUP_GREAT=geweldig! +POPUP_AWESOME=ongelooflijk! +POPUP_GREAT=fantastisch! POPUP_GOOD=goed! POPUP_NOTBAD=niet slecht! POPUP_BAD=slecht! -POPUP_POOR=beroerd! -POPUP_AWFUL=verschrikking! +POPUP_POOR=zwak! +POPUP_AWFUL=pijnlijk! -IMPLODE_GLUE1=, -IMPLODE_GLUE2= en +IMPLODE_GLUE1=, +IMPLODE_GLUE2= en -SONG_MENU_NAME_MAIN=Nummer menu -SONG_MENU_PLAY=Zing -SONG_MENU_CHANGEPLAYERS=Verander spelers +SONG_MENU_NAME_MAIN=Liedjes Menu +SONG_MENU_PLAY=Zingen +SONG_MENU_CHANGEPLAYERS=Verander de spelers SONG_MENU_EDIT=Bewerken -SONG_MENU_MODI=Zing modus -SONG_MENU_CANCEL=Afbreken +SONG_MENU_MODI=Zing een Mode +SONG_MENU_CANCEL=Cancel -SONG_MENU_NAME_PLAYLIST=Nummer Menu -SONG_MENU_PLAYLIST_ADD=Nummer toevoegen -SONG_MENU_PLAYLIST_DEL=Nummer verwijderen +SONG_MENU_NAME_PLAYLIST=Liedjes Menu +SONG_MENU_PLAYLIST_ADD=Voeg een liedje toe +SONG_MENU_PLAYLIST_DEL=Verwijder Liedje -SONG_MENU_NAME_PLAYLIST_ADD=Nummer toevoegen -SONG_MENU_PLAYLIST_ADD_NEW=Nieuwe speellijst -SONG_MENU_PLAYLIST_ADD_EXISTING=Afsluiten speellijst -SONG_MENU_PLAYLIST_NOEXISTING=Geen speellijst aanwezig +SONG_MENU_NAME_PLAYLIST_ADD=Voeg een liedje toe +SONG_MENU_PLAYLIST_ADD_NEW=aan een nieuwe Playlist +SONG_MENU_PLAYLIST_ADD_EXISTING=aan een bestaande playlist +SONG_MENU_PLAYLIST_NOEXISTING=Geen playlist beschikbaar -SONG_MENU_NAME_PLAYLIST_NEW=Nieuwe speellijst -SONG_MENU_PLAYLIST_NEW_CREATE=Creeër -SONG_MENU_PLAYLIST_NEW_UNNAMED=geennaam +SONG_MENU_NAME_PLAYLIST_NEW=Nieuwe Playlist +SONG_MENU_PLAYLIST_NEW_CREATE=Maak aan +SONG_MENU_PLAYLIST_NEW_UNNAMED=Zonder naam -SONG_MENU_NAME_PLAYLIST_DEL=Werkelijk verwijderen? +SONG_MENU_NAME_PLAYLIST_DELITEM=Wil je dit echt verwijderen? SONG_MENU_YES=Ja SONG_MENU_NO=Nee -SONG_MENU_NAME_PLAYLIST_LOAD=Speellijst openen -SONG_MENU_PLAYLIST_LOAD=Openen -SONG_MENU_PLAYLIST_DELCURRENT=Verwijder huidige speellijst +SONG_MENU_NAME_PLAYLIST_LOAD=Open Playlist +SONG_MENU_PLAYLIST_LOAD=open +SONG_MENU_PLAYLIST_DELCURRENT=Verwijder huidige Playlist -SONG_MENU_NAME_PLAYLIST_DEL=Verwijder speellijst? +SONG_MENU_NAME_PLAYLIST_DEL=Verwijder de Playlist? SONG_MENU_NAME_PARTY_MAIN=Party Menu SONG_MENU_JOKER=Joker -SONG_MENU_NAME_PARTY_JOKER=Gebruik joker +SONG_MENU_NAME_PARTY_JOKER=Joker inzetten? -SONG_JUMPTO_DESC=Zoek nummer +SONG_JUMPTO_DESC=Zoek liedje SONG_JUMPTO_TYPE_DESC=Zoek naar: SONG_JUMPTO_TYPE1=Alles SONG_JUMPTO_TYPE2=Titel SONG_JUMPTO_TYPE3=Artiest -SONG_JUMPTO_SONGSFOUND=%d Nummer(s) gevonden -SONG_JUMPTO_NOSONGSFOUND=Geen nummers gevonden -SONG_JUMPTO_HELP=Type tekst om te zoeken naar +SONG_JUMPTO_SONGSFOUND=%d Liedje(s) gevonden +SONG_JUMPTO_NOSONGSFOUND=Niks gevonden +SONG_JUMPTO_HELP=Typ waarnaar moet gezocht worden SONG_JUMPTO_CATTEXT=Zoek naar: %s -PARTY_MODE=Party modus +PARTY_MODE=party mode PARTY_DIFFICULTY=Moeilijkheidsgraad -PARTY_PLAYLIST=Speellijst modus -PARTY_PLAYLIST_ALL=Alle nummers +PARTY_PLAYLIST=Playlist Mode +PARTY_PLAYLIST_ALL=Alle liedjes PARTY_PLAYLIST_CATEGORY=Map -PARTY_PLAYLIST_PLAYLIST=Speellijst +PARTY_PLAYLIST_PLAYLIST=Playlist PARTY_ROUNDS=Rondes PARTY_TEAMS=Teams -PARTY_TEAMS_PLAYER1=Spelers Team1 -PARTY_TEAMS_PLAYER2=Spelers Team2 -PARTY_TEAMS_PLAYER3=Spelers Team3 +PARTY_TEAMS_PLAYER1=Speler Team1 +PARTY_TEAMS_PLAYER2=Speler Team2 +PARTY_TEAMS_PLAYER3=Speler Team3 -PARTY_LEGEND_CONTINUE=Verder +PARTY_LEGEND_CONTINUE=Ga Verder -PARTY_OPTIONS_DESC=Instellingen voor de party-spellen +PARTY_OPTIONS_DESC=Instellingen voor het Partyspelletje PARTY_OPTIONS_WHEREAMI=Party Opties -PARTY_PLAYER_DESC=Type speler- en teamnamen! +PARTY_PLAYER_DESC=Kies Speler en Teamnamen PARTY_PLAYER_WHEREAMI=Party Namen -PARTY_PLAYER_ENTER_NAME=Type namen -PARTY_PLAYER_LEGEND_CONTINUE=Start Party spel +PARTY_PLAYER_ENTER_NAME=Kies de namen +PARTY_PLAYER_LEGEND_CONTINUE=start partyspelletje -PARTY_ROUND_DESC=Volgende spelers naar de microfoons -PARTY_ROUND_WHEREAMI=Party Volgende Ronde -PARTY_ROUND_LEGEND_CONTINUE=Start ronde +PARTY_ROUND_DESC=Volgende spelers aan de Microfoon +PARTY_ROUND_WHEREAMI=Party Volgende ronde +PARTY_ROUND_LEGEND_CONTINUE=start de ronde -PARTY_SONG_WHEREAMI=Party nummer selectie -PARTY_SONG_LEGEND_CONTINUE=Zing -PARTY_SONG_MENU=Party menu +PARTY_SONG_WHEREAMI=Party Song-Selectie +PARTY_SONG_LEGEND_CONTINUE=Zing +PARTY_SONG_MENU=partymenu -PARTY_SCORE_DESC=scores van de laatste ronde -PARTY_SCORE_WHEREAMI=Party Punten +PARTY_SCORE_DESC=score van de laatste ronde +PARTY_SCORE_WHEREAMI=Partypunten -PARTY_WIN_DESC=winnaar van het party spel +PARTY_WIN_DESC=winnaar van de party-game PARTY_WIN_WHEREAMI=Party Winnaar PARTY_WIN_LEGEND_CONTINUE=Terug naar het hoofdmenu PARTY_ROUND=Ronde PARTY_ROUND_WINNER=Winnaar -PARTY_NOTPLAYEDYET=nog niet gespeeld +PARTY_NOTPLAYEDYET=Nog niet gespeeld PARTY_NOBODY=niemand -NEXT_ROUND=Volgende ronde: +NEXT_ROUND=Volgende Ronde: -PARTY_DISMISSED=Verworpen! -PARTY_SCORE_WINS=%s -PARTY_SCORE_WINS2=gewonnen! +PARTY_DISMISSED=Uitgeschakeld! +PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS2=overwinningen! -PLUGIN_HDL_NAME=Houd de Regel -PLUGIN_HDL_DESC=Zing niet slechter dan de wijzer in de zing-o-meter aangeeft +PLUGIN_HDL_NAME=Hold the Line +PLUGIN_HDL_DESC=Zing niet slechter dan het pijltje aangeeft! PLUGIN_UNTIL5000_NAME=Tot 5000 -PLUGIN_UNTIL5000_DESC=Wie het eerst 5000 punten heeft wint het spel. +PLUGIN_UNTIL5000_DESC=De eerste aan 5000 wint. PLUGIN_DUELL_NAME=Duel -PLUGIN_DUELL_DESC=Zing een duel tot 10000 punten. +PLUGIN_DUELL_DESC=Zing een duel to 10000 punten. + +PLUGIN_TEAMDUELL_NAME=Team Duel +PLUGIN_TEAMDUELL_DESC=Geef de microfoon door! -PLUGIN_BLIND_NAME=Blinde Modus -PLUGIN_BLIND_DESC=Duel zonder de dat je de noten ziet. +PLUGIN_BLIND_NAME=Blinde Mode +PLUGIN_BLIND_DESC=Duel zonder de noten te zien. STAT_MAIN=Statistieken STAT_MAIN_DESC=Algemeen STAT_MAIN_WHEREAMI=Statistieken -STAT_OVERVIEW_INTRO=%0:s Statistieken. \n Laaste herstart was op %2:.2d.%1:.2d.%3:d -STAT_OVERVIEW_SONG=%0:d nummers(%3:d met Video), waarvan %1:d al zijn gespeeld en %2:d nog niet gespeeld.\n Het meest populaire nummer is %5:s van %4:s. -STAT_OVERVIEW_PLAYER=Sinds de laatste herstart zijn er %0:d verschillende speler(s).\n De beste speler is %1:s met een gemiddelde score van %2:d punten.\n %3:s Heeft de hoogste Score behaald met %4:d punten. +STAT_OVERVIEW_INTRO=%0:s Statistieken. \n Laatst gereset op %2:.2d.%1:.2d.%3:d +STAT_OVERVIEW_SONG=%0:d Liedjes(%3:d met Video), waarvan %1:d al gespeeld zijn en %2:d nog niet.\n Het populairste liedje is %5:s van %4:s. +STAT_OVERVIEW_PLAYER=Sinds de laatste reset waren er %0:d verschillende spelers.\n De beste speler is %1:s met een gemiddelde score van %2:d punten.\n %3:s had de hoogste score met %4:d punten. STAT_DETAIL=Statistieken -STAT_DETAIL_WHEREAMI=Gedetaileerde statistieken +STAT_DETAIL_WHEREAMI=Gedetailleerde statistieken -STAT_NEXT=Volgende pagina -STAT_PREV=Vorige pagina -STAT_REVERSE=Anders om -STAT_PAGE=Pagina %0:d van %1:d Pagina's\n (%2:d van %3:d records) +STAT_NEXT=Volgende Pagina +STAT_PREV=Vorige Pagina +STAT_REVERSE=Omgekeerde Volgorde +STAT_PAGE=Pagina %0:d van de %1:d Paginas\n (%2:d van de %3:d scores) -STAT_DESC_SCORES=Hoogste scores +STAT_DESC_SCORES=Topscore STAT_DESC_SCORES_REVERSED=Laagste scores STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) -STAT_DESC_SINGERS=Beste Zangers -STAT_DESC_SINGERS_REVERSED=Slechtste Zangers -STAT_FORMAT_SINGERS=%0:s \n Gemiddelde score: %1:d +STAT_DESC_SINGERS=Beste Spelers +STAT_DESC_SINGERS_REVERSED=Slechtste Spelers +STAT_FORMAT_SINGERS=%0:s \n Gemiddlede score: %1:d -STAT_DESC_SONGS=Populairste nummer -STAT_DESC_SONGS_REVERSED=Minst populaire nummer +STAT_DESC_SONGS=Populairste liedje +STAT_DESC_SONGS_REVERSED=Minst populaire liedjes STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx gezongen -STAT_DESC_BANDS=Populairste artiest -STAT_DESC_BANDS_REVERSED=Minst populaire artiest +STAT_DESC_BANDS=Populairste Artiesten +STAT_DESC_BANDS_REVERSED=Minst populaire artiesten STAT_FORMAT_BANDS=%0:s \n %1:dx gezongen -MSG_ERROR_TITLE=FOUT! +MSG_ERROR_TITLE=Error MSG_QUESTION_TITLE=Vraag -MSG_QUIT_USDX=Ultrastar afsluiten? -MSG_END_PARTY=Party modus afsluiten? -ERROR_NO_SONGS=Geen nummers geladen +MSG_QUIT_USDX=Uit met de pret? +MSG_END_PARTY=Stoppen met de Party? +ERROR_NO_SONGS=Geen liedjes geladen ERROR_NO_PLUGINS=Geen plugins geladen -ERROR_CORRUPT_SONG=Nummer kan niet worden geladen.
\ No newline at end of file +ERROR_CORRUPT_SONG=Liedje kon niet geladen worden +ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Liedje kon niet geladen worden: File niet gevonden +ERROR_CORRUPT_SONG_NO_NOTES=Liedje kon niet geladen worden: Geen noten gevonden +ERROR_CORRUPT_SONG_NO_BREAKS=Liedje kon niet geladen worden: Geen linebreaks gevonden +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Liedje kon niet geladen worden: Probleem met regel %0:d
\ No newline at end of file diff --git a/unicode/game/languages/English.ini b/unicode/game/languages/English.ini index 05559c1a..a65fa20e 100644 --- a/unicode/game/languages/English.ini +++ b/unicode/game/languages/English.ini @@ -190,7 +190,7 @@ SONG_MENU_NAME_PLAYLIST_NEW=New Playlist SONG_MENU_PLAYLIST_NEW_CREATE=Create SONG_MENU_PLAYLIST_NEW_UNNAMED=Unnamed -SONG_MENU_NAME_PLAYLIST_DEL=Really Delete? +SONG_MENU_NAME_PLAYLIST_DELITEM=Really Delete? SONG_MENU_YES=Yes SONG_MENU_NO=No diff --git a/unicode/game/languages/Euskara.ini b/unicode/game/languages/Euskara.ini index 9d560321..94a30dc5 100644 --- a/unicode/game/languages/Euskara.ini +++ b/unicode/game/languages/Euskara.ini @@ -1,297 +1,322 @@ -[Text] -SING_LOADING=Kargatzen... - +[Text] +SING_LOADING=Kargatzen... + SING_CHOOSE_MODE=Aukeratu -SING_SING=Kantatu -SING_SING_DESC=Kantatu - +SING_SING=Abestu +SING_SING_DESC=Abestu: bakarka edo binaka + SING_MULTI=Taldea -SING_MULTI_DESC=Taldean kantatu - -SING_TOOLS=Erremintak - -SING_STATS=Estatistikak -SING_STATS_DESC=Estatistikak ikusi - -SING_EDITOR=Editorea -SING_EDITOR_DESC=Zure kantuak sortu - -SING_GAME_OPTIONS=Aukerak -SING_GAME_OPTIONS_DESC=Jokoaren aukerak aldatu - -SING_EXIT=Irten -SING_EXIT_DESC=Jokotik irten - -SING_OPTIONS=Aukerak -SING_OPTIONS_DESC=Aukerak aldatu -SING_OPTIONS_WHEREAMI=Aukerak - +SING_MULTI_DESC=Taldean abestu + +SING_TOOLS=Tresnak + +SING_STATS=Estatistikak +SING_STATS_DESC=Estatistikak ikusi + +SING_EDITOR=Editorea +SING_EDITOR_DESC=Zure kantuak sortu + +SING_GAME_OPTIONS=Hobespenak +SING_GAME_OPTIONS_DESC=Jokoaren hobespenak aldatu + +SING_EXIT=Irten +SING_EXIT_DESC=Jokotik irten + +SING_OPTIONS=Hobespenak +SING_OPTIONS_DESC=Aukerak aldatu +SING_OPTIONS_WHEREAMI=Hobespenak + SING_OPTIONS_GAME=Jokoa -SING_OPTIONS_GRAPHICS=Grafikoak -SING_OPTIONS_SOUND=Soinua -SING_OPTIONS_LYRICS=Letrak -SING_OPTIONS_THEMES=Gaiak -SING_OPTIONS_RECORD=Grabazioa -SING_OPTIONS_ADVANCED=Aurreratuak -SING_OPTIONS_EXIT=Itzuli - -SING_OPTIONS_GAME_WHEREAMI=Jokoaren aukerak -SING_OPTIONS_GAME_DESC=Jokoaren aukera orokorrak +SING_OPTIONS_GRAPHICS=Grafikoak +SING_OPTIONS_SOUND=Soinua +SING_OPTIONS_LYRICS=Letrak +SING_OPTIONS_THEMES=Gaiak +SING_OPTIONS_RECORD=Grabazioa +SING_OPTIONS_ADVANCED=Aurreratuak +SING_OPTIONS_EXIT=Itzuli + +SING_OPTIONS_GAME_WHEREAMI=Jokoaren hobespenak +SING_OPTIONS_GAME_DESC=Jokoaren hobespen orokorrak SING_OPTIONS_GAME_PLAYERS=Jokalariak -SING_OPTIONS_GAME_DIFFICULTY=Zailtasuna -SING_OPTIONS_GAME_LANGUAGE=Hizkuntz -SING_OPTIONS_GAME_TABS=Etiketa -SING_OPTIONS_GAME_SORTING=Sailkatu -SING_OPTIONS_GAME_DEBUG=Arazketa era - -SING_OPTIONS_GRAPHICS_WHEREAMI=Aukera grafikoak -SING_OPTIONS_GRAPHICS_DESC=Aukera grafikoak -SING_OPTIONS_GRAPHICS_RESOLUTION=Erresoluzioa +SING_OPTIONS_GAME_DIFFICULTY=Zailtasuna +SING_OPTIONS_GAME_LANGUAGE=Hizkuntza +SING_OPTIONS_GAME_TABS=Etiketak +SING_OPTIONS_GAME_SORTING=Sailkapena +SING_OPTIONS_GAME_DEBUG=Araztu + +SING_OPTIONS_GRAPHICS_WHEREAMI=Grafikoen hobespenak +SING_OPTIONS_GRAPHICS_DESC=Grafikoen hobespenak +SING_OPTIONS_GRAPHICS_RESOLUTION=Erresoluzioa SING_OPTIONS_GRAPHICS_FULLSCREEN=Pantaila osoa -SING_OPTIONS_GRAPHICS_DEPTH=Kolorearen kalitatea -SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Osziloskopioa -SING_OPTIONS_GRAPHICS_LINEBONUS=Bonus marra -SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Bideoaren tamaina - -SING_OPTIONS_SOUND_WHEREAMI=Soinuaren aukerak -SING_OPTIONS_SOUND_DESC=Soinuaren aukerak -SING_OPTIONS_SOUND_MIC_BOOST=Mikrofonoa indartu +SING_OPTIONS_GRAPHICS_DEPTH=Kolore kalitatea +SING_OPTIONS_GRAPHICS_VISUALIZER=Bistaratzeak +SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Osziloskopioa +SING_OPTIONS_GRAPHICS_LINEBONUS=Lerro Bonusa +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Bideo tamaina + +SING_OPTIONS_SOUND_WHEREAMI=Soinu hobespenak +SING_OPTIONS_SOUND_DESC=Soinu hobespenak +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Mikrofono playback-a +SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Atzeko soinua +SING_OPTIONS_SOUND_MIC_BOOST=Mikrofonoa indartu SING_OPTIONS_SOUND_CLICK_ASSIST=Noten laguntza SING_OPTIONS_SOUND_BEAT_CLICK=Kolpeen laguntza -SING_OPTIONS_SOUND_THRESHOLD=Mikrofonoa arindu -SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Bi jokalariren era -SING_OPTIONS_SOUND_PREVIEWVOLUME=Bolumen aurreratua -SING_OPTIONS_SOUND_PREVIEWFADING=Joanaldia - -SING_OPTIONS_LYRICS_WHEREAMI=Letren aukerak -SING_OPTIONS_LYRICS_DESC=Letren aukerak -SING_OPTIONS_LYRICS_FONT=Iturria -SING_OPTIONS_LYRICS_EFFECT=Efektua -SING_OPTIONS_LYRICS_SOLMIZATION=Solfeoa - -SING_OPTIONS_THEMES_WHEREAMI=Gaien aukerak -SING_OPTIONS_THEMES_DESC=Gaien aukerak +SING_OPTIONS_SOUND_THRESHOLD=Arintzea +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Bi jokalari modua +SING_OPTIONS_SOUND_PREVIEWVOLUME=Bolumena aurreikusi +SING_OPTIONS_SOUND_PREVIEWFADING=Desagerpena aurreikusi + +SING_OPTIONS_LYRICS_WHEREAMI=Letren hobespenak +SING_OPTIONS_LYRICS_DESC=Letren hobespenak +SING_OPTIONS_LYRICS_FONT=Letra-mota +SING_OPTIONS_LYRICS_EFFECT=Efektua +SING_OPTIONS_LYRICS_SOLMIZATION=Solfeoa +SING_OPTIONS_LYRICS_NOTELINES=Pentagramak + +SING_OPTIONS_THEMES_WHEREAMI=Gaien hobespenak +SING_OPTIONS_THEMES_DESC=Gaien eta azalen hobespenak SING_OPTIONS_THEMES_THEME=Gaia SING_OPTIONS_THEMES_SKIN=Azala -SING_OPTIONS_THEMES_COLOR=Kolorea - -SING_OPTIONS_RECORD_WHEREAMI=Grabazioaren aukerak -SING_OPTIONS_RECORD_DESC=Grabazioaren akerak -SING_OPTIONS_RECORD_CARD=Soinu txartela -SING_OPTIONS_RECORD_INPUT=Captura -SING_OPTIONS_RECORD_CHANNEL=Kanala - -SING_OPTIONS_ADVANCED_WHEREAMI=Aukera aurreratuak -SING_OPTIONS_ADVANCED_DESC=Aukera aurreratuak -SING_OPTIONS_ADVANCED_EFFECTSING=Kantuan efektuak -SING_OPTIONS_ADVANCED_SCREENFADE=Desvanecimiento -SING_OPTIONS_ADVANCED_LOADANIMATION=Kargatzearen animazioa -SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Galdetu -SING_OPTIONS_ADVANCED_LINEBONUS=Bonus marra -SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= -SING_OPTIONS_ADVANCED_ONSONGCLICK=Kantua aukeratzean -SING_OPTIONS_ADVANCED_PARTYPOPUP=Taldearen menu automatikoa - -SING_LEGEND_SELECT=Aukeratu -SING_LEGEND_NAVIGATE=Nabigatu -SING_LEGEND_CONTINUE=Jarraitu -SING_LEGEND_ESC=Itzuli - -SING_PLAYER_DESC=Jokalarien izenak +SING_OPTIONS_THEMES_COLOR=Kolorea + +SING_OPTIONS_RECORD_WHEREAMI=Grabazioaren hobespenak +SING_OPTIONS_RECORD_DESC=Mikrofonoaren hobespenak +SING_OPTIONS_RECORD_CARD=Soinu-txartela +SING_OPTIONS_RECORD_INPUT=Sarrera +SING_OPTIONS_RECORD_CHANNEL=Kanala + +SING_OPTIONS_ADVANCED_WHEREAMI=Hobespen aurreratuak +SING_OPTIONS_ADVANCED_DESC=Hobespen aurreratuak +SING_OPTIONS_ADVANCED_EFFECTSING=Kantu efektuak +SING_OPTIONS_ADVANCED_SCREENFADE=Pantaila desagertu +SING_OPTIONS_ADVANCED_LOADANIMATION=Animazioa kargatzerakoan +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Ziurtasun galderak +SING_OPTIONS_ADVANCED_LINEBONUS=Lerro bonusa +SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= +SING_OPTIONS_ADVANCED_ONSONGCLICK=Aukeratu ondoren +SING_OPTIONS_ADVANCED_PARTYPOPUP=Talde menu auto + +SING_EDIT=Editorea +SING_EDIT_MENU_DESCRIPTION=Zure kantuak sortu + +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Testua inportatu MIDI fitxategiatik +SING_EDIT_BUTTON_DESCRIPTION_EXIT=Itzuli +SING_EDIT_BUTTON_CONVERT=Inportatu +SING_EDIT_BUTTON_EXIT=Itzuli + +SING_EDIT_NAVIGATE=Nabigatu +SING_EDIT_SELECT=Aukeratu +SING_EDIT_EXIT=Itzuli + +SING_LEGEND_SELECT=Hautatu +SING_LEGEND_NAVIGATE=Nabigatu +SING_LEGEND_CONTINUE=Jarraitu +SING_LEGEND_ESC=Itzuli + +SING_PLAYER_DESC=Jokalarien izenak sartu SING_PLAYER_WHEREAMI=Jokalarien izenak -SING_PLAYER_ENTER_NAME=Izenak idatzi - -SING_DIFFICULTY_DESC=Zailtasuna aukeratu -SING_DIFFICULTY_WHEREAMI=Zailtasuna -SING_DIFFICULTY_CONTINUE=Hurrengoa -SING_EASY=Erreza -SING_MEDIUM=Ertaina -SING_HARD=Zaila - -SING_SONG_SELECTION_DESC=Kantua hautatu -SING_SONG_SELECTION_WHEREAMI=Kantuaren hautaketa -SING_SONG_SELECTION_GOTO=Joan... -SING_SONG_SELECTION=Kantuaren hautaketa -SING_SONG_SELECTION_MENU=Menua -SING_SONG_SELECTION_PLAYLIST=Zerrenda -SING_SONGS_IN_CAT=Kantuak -PLAYLIST_CATTEXT=Lista: % - -SING_TIME=Denbora -SING_TOTAL=Guztira -SING_MODE=Bakarrik -SING_NOTES=Notak -SING_GOLDEN_NOTES=Urrezko notak -SING_PHRASE_BONUS=Bonus marra - -SING_MENU=Menu nagusia - -SONG_SCORE=Puntuak -SONG_SCORE_WHEREAMI= - -SING_SCORE_TONE_DEAF=Desafinatu -SING_SCORE_AMATEUR=Zale (Aficionado) -SING_SCORE_RISING_STAR=Hobetzen -SING_SCORE_LEAD_SINGER=Kantaria -SING_SCORE_HIT_ARTIST=Kantari handia -SING_SCORE_SUPERSTAR=Superizarra -SING_SCORE_ULTRASTAR=Ultraizarra - -SING_TOP_5_CHARTS=Onenak -SING_TOP_5_CHARTS_WHEREAMI= -SING_TOP_5_CHARTS_CONTINUE=Jarraitu - -POPUP_PERFECT=Perfektu! -POPUP_AWESOME=Txundigarri! -POPUP_GREAT=Sekulakoa! -POPUP_GOOD=Ongi! -POPUP_NOTBAD=Ez dago gaizki! -POPUP_BAD=Gaizki! -POPUP_POOR=Oso gaizki! -POPUP_AWFUL=Gaizkiago ezin! - -IMPLODE_GLUE1=, -IMPLODE_GLUE2= eta - -SONG_MENU_NAME_MAIN=Kantuaren menua -SONG_MENU_PLAY=Kantatu -SONG_MENU_CHANGEPLAYERS=Jokalaria aukeratu -SONG_MENU_EDIT=Aldatu -SONG_MENU_MODI=Motza kantatu -SONG_MENU_CANCEL=Ezeztatu - -SONG_MENU_NAME_PLAYLIST=Menua -SONG_MENU_PLAYLIST_ADD=Kantua gehitu -SONG_MENU_PLAYLIST_DEL=Kantua kendu - -SONG_MENU_NAME_PLAYLIST_ADD=Kantua gehitu +SING_PLAYER_ENTER_NAME=Izenak idatzi + +SING_DIFFICULTY_DESC=Zailtasuna aukeratu +SING_DIFFICULTY_WHEREAMI=Zailtasuna +SING_DIFFICULTY_CONTINUE=Abestia aukeratu +SING_EASY=Erraza +SING_MEDIUM=Bitartekoa +SING_HARD=Zaila + +SING_SONG_SELECTION_DESC=Abestia aukeratu +SING_SONG_SELECTION_WHEREAMI=Abestia aukeratu +SING_SONG_SELECTION_GOTO=... joan +SING_SONG_SELECTION=Abestia aukeratu +SING_SONG_SELECTION_MENU=Menu +SING_SONG_SELECTION_PLAYLIST=Zerrenda +SING_SONGS_IN_CAT=Abestiak +PLAYLIST_CATTEXT=Zerrenda: %s + +SING_TIME=Denbora +SING_TOTAL=Guztira +SING_MODE=Bakarka abestu +SING_NOTES=Notak +SING_GOLDEN_NOTES=Urrezko notak +SING_PHRASE_BONUS=Lerro bonusa + +SING_MENU=Menu nagusia + +SONG_SCORE=Puntuazioa +SONG_SCORE_WHEREAMI=Puntuazioa + +SING_SCORE_TONE_DEAF=Desafinatua +SING_SCORE_AMATEUR=Amateur +SING_SCORE_WANNABE=Etorkizuneko Izarra +SING_SCORE_HOPEFUL=Hautagaia +SING_SCORE_RISING_STAR=Hobetuz Zoaz +SING_SCORE_LEAD_SINGER=Kantari Handia +SING_SCORE_SUPERSTAR=SuperStar +SING_SCORE_ULTRASTAR=UltraStar + +SING_TOP_5_CHARTS=5 hoberenak +SING_TOP_5_CHARTS_WHEREAMI=5 hoberenak +SING_TOP_5_CHARTS_CONTINUE=Abestia aukeratu + +POPUP_PERFECT=Bikain! +POPUP_AWESOME=Txundigarri! +POPUP_GREAT=Sekulakoa! +POPUP_GOOD=Ongi! +POPUP_NOTBAD=Ez dago gaizki! +POPUP_BAD=Gaizki! +POPUP_POOR=Eskas! +POPUP_AWFUL=Penagarri! + +IMPLODE_GLUE1=, +IMPLODE_GLUE2= eta + +SONG_MENU_NAME_MAIN=Menua +SONG_MENU_PLAY=Abestu +SONG_MENU_CHANGEPLAYERS=Jokalariak aukeratu +SONG_MENU_EDIT=Editorera bidali +SONG_MENU_MODI=Modi bat abestu +SONG_MENU_CANCEL=Itzuli + +SONG_MENU_NAME_PLAYLIST=Menua +SONG_MENU_PLAYLIST_ADD=Zerrendara gehitu +SONG_MENU_PLAYLIST_DEL=Zerrendatik ezabatu + +SONG_MENU_NAME_PLAYLIST_ADD=Abestia gehitu SONG_MENU_PLAYLIST_ADD_NEW=Zerrenda berrira -SONG_MENU_PLAYLIST_ADD_EXISTING=Zerrendara -SONG_MENU_PLAYLIST_NOEXISTING=Ez dago zerrendarik - -SONG_MENU_NAME_PLAYLIST_NEW=Zerrenda berria -SONG_MENU_PLAYLIST_NEW_CREATE=Sortu -SONG_MENU_PLAYLIST_NEW_UNNAMED=Izen gabe - -SONG_MENU_NAME_PLAYLIST_DEL=Kendu? +SONG_MENU_PLAYLIST_ADD_EXISTING=Zerrendara +SONG_MENU_PLAYLIST_NOEXISTING=Ez dago zerrendarik + +SONG_MENU_NAME_PLAYLIST_NEW=Zerrenda berria +SONG_MENU_PLAYLIST_NEW_CREATE=Sortu +SONG_MENU_PLAYLIST_NEW_UNNAMED=Izengabea + +SONG_MENU_NAME_PLAYLIST_DELITEM=Ezabatu? SONG_MENU_YES=Bai -SONG_MENU_NO=Ez - -SONG_MENU_NAME_PLAYLIST_LOAD=Zerrenda zabaldu -SONG_MENU_PLAYLIST_LOAD=Zabaldu -SONG_MENU_PLAYLIST_DELCURRENT=Zerrenda hau kendu -SONG_MENU_NAME_PLAYLIST_DEL=Kendu? - -SONG_MENU_NAME_PARTY_MAIN=Menua -SONG_MENU_JOKER=Aleatorio - -SONG_MENU_NAME_PARTY_JOKER=Aleatorio - -SONG_JUMPTO_DESC=Bilatu -SONG_JUMPTO_TYPE_DESC=Bilatu: -SONG_JUMPTO_TYPE1=Dena -SONG_JUMPTO_TYPE2=Tituloa -SONG_JUMPTO_TYPE3=Artista -SONG_JUMPTO_SONGSFOUND=%d kantu aurkitu dira -SONG_JUMPTO_NOSONGSFOUND=Ez daugo kanturik -SONG_JUMPTO_HELP=Idatzi hitz gakoak -SONG_JUMPTO_CATTEXT=Bilatu: %s - -PARTY_MODE=Taldeko modua -PARTY_DIFFICULTY=Zailtasuna -PARTY_PLAYLIST=Zerrenda modua -PARTY_PLAYLIST_ALL=Dena -PARTY_PLAYLIST_CATEGORY=Karpeta -PARTY_PLAYLIST_PLAYLIST=Zerrendak -PARTY_ROUNDS=Errondak -PARTY_TEAMS=Taldeak -PARTY_TEAMS_PLAYER1=1 taldeko jokalariak -PARTY_TEAMS_PLAYER2=2 taldeko jokalariak -PARTY_TEAMS_PLAYER3=3 taldeko jokalariak - -PARTY_LEGEND_CONTINUE=Jarraitu - -PARTY_OPTIONS_DESC=Taldeko jokoaren aukerak -PARTY_OPTIONS_WHEREAMI= - -PARTY_PLAYER_DESC=Jokalarien eta taldeen izenak idatzi -PARTY_PLAYER_WHEREAMI=Taldeen izenak -PARTY_PLAYER_ENTER_NAME=Izena idatzi -PARTY_PLAYER_LEGEND_CONTINUE=Hasi - -PARTY_ROUND_DESC=Hurrengo jokalaria -PARTY_ROUND_WHEREAMI=Hurrngo erronda -PARTY_ROUND_LEGEND_CONTINUE=Erronda hasi - -PARTY_SONG_WHEREAMI=Kantua aukeratu -PARTY_SONG_LEGEND_CONTINUE=Kantatu -PARTY_SONG_MENU=Menua - -PARTY_SCORE_DESC=Azkeneko errondaren puntoak -PARTY_SCORE_WHEREAMI= - -PARTY_WIN_DESC=Talde irabazlea -PARTY_WIN_WHEREAMI= -PARTY_WIN_LEGEND_CONTINUE=Menu nagusira joan - +SONG_MENU_NO=Ez + +SONG_MENU_NAME_PLAYLIST_LOAD=Zerrenda ireki +SONG_MENU_PLAYLIST_LOAD=Ireki +SONG_MENU_PLAYLIST_DELCURRENT=Zerrenda hau ezabatu + +SONG_MENU_NAME_PLAYLIST_DEL=Zerrenda ezabatu? + +SONG_MENU_NAME_PARTY_MAIN=Talde menua +SONG_MENU_JOKER=Komodina + +SONG_MENU_NAME_PARTY_JOKER=Komodina erabili + +SONG_JUMPTO_DESC=Bilatu +SONG_JUMPTO_TYPE_DESC=Bilatu: +SONG_JUMPTO_TYPE1=Guztia +SONG_JUMPTO_TYPE2=Titulua +SONG_JUMPTO_TYPE3=Artista +SONG_JUMPTO_SONGSFOUND=%d kantu aurkituta +SONG_JUMPTO_NOSONGSFOUND=Ez dago kanturik +SONG_JUMPTO_HELP=Hitz gakoak idatzi +SONG_JUMPTO_CATTEXT=Bilatu: %s + +PARTY_MODE=Taldean Abestu +PARTY_DIFFICULTY=Zailtasuna +PARTY_PLAYLIST=Abestiak +PARTY_PLAYLIST_ALL=Guztiak +PARTY_PLAYLIST_CATEGORY=Karpeta +PARTY_PLAYLIST_PLAYLIST=Zerrenda +PARTY_ROUNDS=Errondak +PARTY_TEAMS=Taldeak +PARTY_TEAMS_PLAYER1=Jokalariak 1.an +PARTY_TEAMS_PLAYER2=Jokalariak 2.an +PARTY_TEAMS_PLAYER3=Jokalariak 3.an + +PARTY_LEGEND_CONTINUE=Jarraitu + +PARTY_OPTIONS_DESC=Taldean jokatzeko aukerak +PARTY_OPTIONS_WHEREAMI=Taldeko hobespenak + +PARTY_PLAYER_DESC=Jokalarien eta taldeen izenak +PARTY_PLAYER_WHEREAMI=Taldeen izenak +PARTY_PLAYER_ENTER_NAME=Izenak idatzi +PARTY_PLAYER_LEGEND_CONTINUE=Jokoa hasi + +PARTY_ROUND_DESC=Hurrengoa mikrofonora +PARTY_ROUND_WHEREAMI=Hurrengo erronda +PARTY_ROUND_LEGEND_CONTINUE=Erronda hasi + +PARTY_SONG_WHEREAMI=Talde Abestia aukeratu +PARTY_SONG_LEGEND_CONTINUE=Abestu +PARTY_SONG_MENU=Talde menua + +PARTY_SCORE_DESC=Azken Errondako puntuazioa +PARTY_SCORE_WHEREAMI=Talde puntuazioa + +PARTY_WIN_DESC=Talde irabazlea +PARTY_WIN_WHEREAMI=Talde jokoaren irabazlea +PARTY_WIN_LEGEND_CONTINUE=Menu nagusira itzuli + PARTY_ROUND=Erronda -PARTY_ROUND_WINNER=Irabazlea -PARTY_NOTPLAYEDYET=Jokatu gabe -PARTY_NOBODY=Inor +PARTY_ROUND_WINNER=Irabazlea +PARTY_NOTPLAYEDYET=Jokatu gabe +PARTY_NOBODY=Inor NEXT_ROUND=Hurrengo erronda: - -PARTY_DISMISSED=Galdu duzu! -PARTY_SCORE_WINS=% -PARTY_SCORE_WINS2=Irabazi duzu! - -PLUGIN_HDL_NAME=Jarraitu horrela -PLUGIN_HDL_DESC=Ez jaitsi pantailan markatutako puntuak! - -PLUGIN_UNTIL5000_NAME=5000-arte -PLUGIN_UNTIL5000_DESC=5000 puntu hartzen duena irabazle. - -PLUGIN_DUELL_NAME=Duelua -PLUGIN_DUELL_DESC=Duelu bat egin 10.000 punturarte. - -PLUGIN_BLIND_NAME=Itsu modua -PLUGIN_BLIND_DESC=Notak begiratu gabeko duelua. - -STAT_MAIN=Estadistikak -STAT_MAIN_DESC=Orokorra -STAT_MAIN_WHEREAMI=Estadistikak - -STAT_OVERVIEW_INTRO=%0:s Estatistikak. \n Azkenengo aldiz erabili zen: %3:d-%2:.2d-%1:.2d -STAT_OVERVIEW_SONG=%0:d Kantu daude (%3:d bideoarekin), eta hauetatik %1:d kantatu dira eta %2:d oraindik ez.\n Kanturik ospetsuena "%5:s" da %4:s taldearena. -STAT_OVERVIEW_PLAYER= %0:d jokalari daude.\n Onena %1:s da bataz-besteko %2:d punturekin.\n %3:s -(e)k puntu gehien egin ditu: %4:d puntu. - + +PARTY_DISMISSED=Galdu duzu! +PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS2=irabazi du! + +PLUGIN_HDL_NAME=Eutsi goiari +PLUGIN_HDL_DESC=Ez jaitsi markatutako puntuazio mailatik. + +PLUGIN_UNTIL5000_NAME=5000 arte +PLUGIN_UNTIL5000_DESC=Azkarrena 5000 puntu lortzen irabazten du. + +PLUGIN_DUELL_NAME=Duelua +PLUGIN_DUELL_DESC=Duelua 10.000 punturarte. + +PLUGIN_TEAMDUELL_NAME=Talde duelua +PLUGIN_TEAMDUELL_DESC=Mikrofonoa pasa! + +PLUGIN_BLIND_NAME=Itsuan +PLUGIN_BLIND_DESC=Duelua notak ikusi gabe. + +STAT_MAIN=Estatistikak +STAT_MAIN_DESC=Orokorrak +STAT_MAIN_WHEREAMI=Estatistikak + +STAT_OVERVIEW_INTRO=%0:s estatistikak. \n Azken aldiz ezabatutak %3:dko %2:.2daren %1:.2dan +STAT_OVERVIEW_SONG=%0:d abesti daude (%3:d bideoarekin), hauetatik %1:d dagoeneko abestu dira, %2:d oraindik ez dira abestu.\n Gehien abestu den kantua %5:s da, %4:s-ena. +STAT_OVERVIEW_PLAYER=Azken aldiz ezabatu zirenetik, %0:d jokalari desberdin egon dira.\n Jokalari hoberena %1:s da %2:dko batezbesteko puntuazioarekin.\n %3:s puntuaziorik altuena lortu zuen, %4:d puntu. + STAT_DETAIL=Estatistikak -STAT_DETAIL_WHEREAMI=Estatistika zehaztuak - -STAT_NEXT=Hurrengoa -STAT_PREV=Aurrekoa -STAT_REVERSE=Atzekoz aurrera jarri -STAT_PAGE=Página %0:d de %1:d \n (%2:d of %3:d Entrys) - -STAT_DESC_SCORES=Punturik onenak -STAT_DESC_SCORES_REVERSED=Punturik txarrenak -STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) - -STAT_DESC_SINGERS=Jokalari onenak -STAT_DESC_SINGERS_REVERSED=Jokalari txarrenak -STAT_FORMAT_SINGERS=%0:s \n Bataz-besteko puntuak: %1:d - -STAT_DESC_SONGS=Kantu ospetsuenak -STAT_DESC_SONGS_REVERSED=Kantu ez ospetsuak -STAT_FORMAT_SONGS=%0: - %1: \n %2: aldi kantatua - -STAT_DESC_BANDS=Talde ospetsuena -STAT_DESC_BANDS_REVERSED=Ospe gutxieneko taldea -STAT_FORMAT_BANDS=%0: \n %1:d aldi kantatua - -MSG_ERROR_TITLE=Errorea -MSG_QUESTION_TITLE=Galdera -MSG_QUIT_USDX=Irten nahi duzu? -MSG_END_PARTY=Bukatu nahi duzu? -ERROR_NO_SONGS=Kantu gabe -ERROR_NO_PLUGINS=Plugin gabe -ERROR_CORRUPT_SONG=Ezin da kantua kargatu
\ No newline at end of file +STAT_DETAIL_WHEREAMI=Estatistika zehatzak + +STAT_NEXT=Hurrengo orria +STAT_PREV=Aurreko orria +STAT_REVERSE=Ordena alderanztu +STAT_PAGE=Seite %0:d orri %1:dtik \n (%2:d sarrera %3:dtik) + +STAT_DESC_SCORES=Puntuazio onenak +STAT_DESC_SCORES_REVERSED=Puntuazio txarrenak +STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) + +STAT_DESC_SINGERS=Jokalari onenak +STAT_DESC_SINGERS_REVERSED=Jokalari txarrenak +STAT_FORMAT_SINGERS=%0:s \n Batezbesteko puntuazioa: %1:d + +STAT_DESC_SONGS=Abesti ospetsuak +STAT_DESC_SONGS_REVERSED=Abesti ez ospetsuak +STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx aldiz abestuta + +STAT_DESC_BANDS=Talde ospetsuak +STAT_DESC_BANDS_REVERSED=Talde ez ospetsuak +STAT_FORMAT_BANDS=%0:s \n %1:dx aldiz abestuta + +MSG_ERROR_TITLE=Hutsa +MSG_QUESTION_TITLE=Galdera +MSG_QUIT_USDX=Ziur zaude irten nahi duzula? +MSG_END_PARTY=Ziur zaude talde jokoa bukatu nahi duzula? +ERROR_NO_SONGS=Ez dago abestirik +ERROR_NO_PLUGINS=Ez dago pluginik +ERROR_CORRUPT_SONG=Ezin da abestia kargatu +ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Ezin da abestia kargatu: Fitxategia falta da +ERROR_CORRUPT_SONG_NO_NOTES=Ezin da abestia kargatu: Ez daude notak +ERROR_CORRUPT_SONG_NO_BREAKS=Ezin da abestia kargatu: Ez daude lerro jauziak +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ezin da abestia kargatu: Okerra %0:d lerroan
\ No newline at end of file diff --git a/unicode/game/languages/Finnish.ini b/unicode/game/languages/Finnish.ini index 1ec7a1de..7b1a511a 100644 --- a/unicode/game/languages/Finnish.ini +++ b/unicode/game/languages/Finnish.ini @@ -1,322 +1,322 @@ -[Text]
-SING_LOADING=Ladataan...
-
-SING_CHOOSE_MODE=valitse pelimuoto
-SING_SING=laula
-SING_SING_DESC=pikapeli - laula soolo tai duetto
-
-SING_MULTI=bileet
-SING_MULTI_DESC=Oletko valmis joukkuetaistoon?
-
-SING_TOOLS=asetukset
-
-SING_STATS=tilastot
-SING_STATS_DESC=näytä tilastot
-
-SING_EDITOR=kappale-editori
-SING_EDITOR_DESC=luo omia kappaleita
-
-SING_GAME_OPTIONS=peliasetukset
-SING_GAME_OPTIONS_DESC=muokkaa peliasetuksia
-
-SING_EXIT=lopeta
-SING_EXIT_DESC=lopeta peli
-
-SING_OPTIONS=asetukset
-SING_OPTIONS_DESC=muuta asetuksia
-SING_OPTIONS_WHEREAMI=Asetukset
-
-SING_OPTIONS_GAME=peli
-SING_OPTIONS_GRAPHICS=grafiikka
-SING_OPTIONS_SOUND=ääni
-SING_OPTIONS_LYRICS=lyriikat
-SING_OPTIONS_THEMES=ulkoasut
-SING_OPTIONS_RECORD=äänitys
-SING_OPTIONS_ADVANCED=lisäasetukset
-SING_OPTIONS_EXIT=takaisin
-
-SING_OPTIONS_GAME_WHEREAMI=Peliasetukset
-SING_OPTIONS_GAME_DESC=yleiset peliasetukset
-SING_OPTIONS_GAME_PLAYERS=Pelaajat
-SING_OPTIONS_GAME_DIFFICULTY=Vaikeustaso
-SING_OPTIONS_GAME_LANGUAGE=Kieli
-SING_OPTIONS_GAME_TABS=Kansiot
-SING_OPTIONS_GAME_SORTING=Lajittelu
-SING_OPTIONS_GAME_DEBUG=Debuggaus
-
-SING_OPTIONS_GRAPHICS_WHEREAMI=Grafiikka-asetukset
-SING_OPTIONS_GRAPHICS_DESC=grafiikka-asetukset
-SING_OPTIONS_GRAPHICS_RESOLUTION=Resoluutio
-SING_OPTIONS_GRAPHICS_FULLSCREEN=Koko ruutu
-SING_OPTIONS_GRAPHICS_DEPTH=Värisyvyys
-SING_OPTIONS_GRAPHICS_VISUALIZER=Visualisointi
-SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Värähtelijä
-SING_OPTIONS_GRAPHICS_LINEBONUS=Viivabonukset
-SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Videon koko
-
-SING_OPTIONS_SOUND_WHEREAMI=Ääniasetukset
-SING_OPTIONS_SOUND_DESC=ääniasetukset
-SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Oma ääni kuuluvissa
-SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Taustamusiikki
-SING_OPTIONS_SOUND_MIC_BOOST=Mikin voimakkuus
-SING_OPTIONS_SOUND_CLICK_ASSIST=Klikkausapu
-SING_OPTIONS_SOUND_BEAT_CLICK=Tahti-apu
-SING_OPTIONS_SOUND_THRESHOLD=Kynnystaso
-SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Kaksinpelitila
-SING_OPTIONS_SOUND_PREVIEWVOLUME=Esikatselun voimakkuus
-SING_OPTIONS_SOUND_PREVIEWFADING=Esikatselun feidaus
-
-SING_OPTIONS_LYRICS_WHEREAMI=Lyriikka-asetukset
-SING_OPTIONS_LYRICS_DESC=lyriikka-asetukset
-SING_OPTIONS_LYRICS_FONT=Fontti
-SING_OPTIONS_LYRICS_EFFECT=Tehoste
-SING_OPTIONS_LYRICS_SOLMIZATION=Solmisaatio
-SING_OPTIONS_LYRICS_NOTELINES=Nuottiviivasto
-
-SING_OPTIONS_THEMES_WHEREAMI=Ulkoasu-asetukset
-SING_OPTIONS_THEMES_DESC=ulkoasu-asetukset
-SING_OPTIONS_THEMES_THEME=Ulkoasu
-SING_OPTIONS_THEMES_SKIN=Tausta
-SING_OPTIONS_THEMES_COLOR=Väri
-
-SING_OPTIONS_RECORD_WHEREAMI=Äänitys-asetukset
-SING_OPTIONS_RECORD_DESC=mikrofonin asetukset
-SING_OPTIONS_RECORD_CARD=Äänikortti
-SING_OPTIONS_RECORD_INPUT=Sisääntulo
-SING_OPTIONS_RECORD_CHANNEL=Kanava
-
-SING_OPTIONS_ADVANCED_WHEREAMI=Lisäasetukset
-SING_OPTIONS_ADVANCED_DESC=lisäasetukset
-SING_OPTIONS_ADVANCED_EFFECTSING=Kappaletehosteet
-SING_OPTIONS_ADVANCED_SCREENFADE=Ruudun feidaus
-SING_OPTIONS_ADVANCED_LOADANIMATION=Latausanimaatio
-SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Poiston vahvistus
-SING_OPTIONS_ADVANCED_LINEBONUS=Rivibonus
-SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=
-SING_OPTIONS_ADVANCED_ONSONGCLICK=Kappaleen jälkeen
-SING_OPTIONS_ADVANCED_PARTYPOPUP=Autom. bilevalikko
-
-SING_EDIT=kappale-editori
-SING_EDIT_MENU_DESCRIPTION=luo omia kappaleita
-
-SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Luo .txt midi-tiedostosta
-SING_EDIT_BUTTON_DESCRIPTION_EXIT=takaisin
-SING_EDIT_BUTTON_CONVERT=Luo
-SING_EDIT_BUTTON_EXIT=takaisin
-
-SING_EDIT_NAVIGATE=liiku
-SING_EDIT_SELECT=valitse
-SING_EDIT_EXIT=takaisin
-
-SING_LEGEND_SELECT=valitse
-SING_LEGEND_NAVIGATE=liiku
-SING_LEGEND_CONTINUE=jatka
-SING_LEGEND_ESC=takaisin
-
-SING_PLAYER_DESC=syötä pelaajan nimi
-SING_PLAYER_WHEREAMI=Pelaajien nimet
-SING_PLAYER_ENTER_NAME=syötä nimi
-
-SING_DIFFICULTY_DESC=valitse vaikeustaso
-SING_DIFFICULTY_WHEREAMI=Vaikeustaso
-SING_DIFFICULTY_CONTINUE=kappalevalinta
-SING_EASY=Helppo
-SING_MEDIUM=Keskitaso
-SING_HARD=Vaikea
-
-SING_SONG_SELECTION_DESC=valitse kappale
-SING_SONG_SELECTION_WHEREAMI=Kappalevalinta
-SING_SONG_SELECTION_GOTO=mene ...
-SING_SONG_SELECTION=kappalevalinta
-SING_SONG_SELECTION_MENU=valikko
-SING_SONG_SELECTION_PLAYLIST=soittolista
-SING_SONGS_IN_CAT=kappaletta
-PLAYLIST_CATTEXT=Soittolista: %s
-
-SING_TIME=KESTO
-SING_TOTAL=yhteensä
-SING_MODE=laula soolo
-SING_NOTES=nuotit
-SING_GOLDEN_NOTES=kultanuotit
-SING_PHRASE_BONUS=rivibonus
-
-SING_MENU=Päävalikko
-
-SONG_SCORE=kappaleen pisteet
-SONG_SCORE_WHEREAMI=Pisteet
-
-SING_SCORE_TONE_DEAF=Sävelkorvaton
-SING_SCORE_AMATEUR=Amatööri
-SING_SCORE_WANNABE=Wannabe
-SING_SCORE_HOPEFUL=Toiveita herättävä
-SING_SCORE_RISING_STAR=Nouseva tähti
-SING_SCORE_LEAD_SINGER=Päälaulaja
-SING_SCORE_SUPERSTAR=Supertähti
-SING_SCORE_ULTRASTAR=Ultratähti
-
-SING_TOP_5_CHARTS=top 5 pelaajat
-SING_TOP_5_CHARTS_WHEREAMI=top 5
-SING_TOP_5_CHARTS_CONTINUE=kappalevalintaan
-
-POPUP_PERFECT=täydellistä!
-POPUP_AWESOME=loistavaa!
-POPUP_GREAT=mahtavaa!
-POPUP_GOOD=hyvä!
-POPUP_NOTBAD=menettelee!
-POPUP_BAD=huonoa!
-POPUP_POOR=heikkoa!
-POPUP_AWFUL=kauheaa!
-
-IMPLODE_GLUE1=,
-IMPLODE_GLUE2= ja
-
-SONG_MENU_NAME_MAIN=kappalevalikko
-SONG_MENU_PLAY=Laula
-SONG_MENU_CHANGEPLAYERS=Vaihda pelaajia
-SONG_MENU_EDIT=Muokkaa
-SONG_MENU_MODI=Laula muunneltu kappale
-SONG_MENU_CANCEL=Peruuta
-
-SONG_MENU_NAME_PLAYLIST=Kappalevalikko
-SONG_MENU_PLAYLIST_ADD=Lisää kappale
-SONG_MENU_PLAYLIST_DEL=Poista kappale
-
-SONG_MENU_NAME_PLAYLIST_ADD=Lisää kappale
-SONG_MENU_PLAYLIST_ADD_NEW=uuteen soittolistaan
-SONG_MENU_PLAYLIST_ADD_EXISTING=luotuun soittolistaan
-SONG_MENU_PLAYLIST_NOEXISTING=Soittolistaa ei saatavilla
-
-SONG_MENU_NAME_PLAYLIST_NEW=Uusi soittolista
-SONG_MENU_PLAYLIST_NEW_CREATE=Luo
-SONG_MENU_PLAYLIST_NEW_UNNAMED=Nimetön
-
-SONG_MENU_NAME_PLAYLIST_DEL=Vahvista poisto?
-SONG_MENU_YES=Kyllä
-SONG_MENU_NO=Ei
-
-SONG_MENU_NAME_PLAYLIST_LOAD=Avaa soittolista
-SONG_MENU_PLAYLIST_LOAD=Avaa
-SONG_MENU_PLAYLIST_DELCURRENT=poista nykyinen soittolista
-
-SONG_MENU_NAME_PLAYLIST_DEL=Poista soittolista?
-
-SONG_MENU_NAME_PARTY_MAIN=Bilevalikko
-SONG_MENU_JOKER=Jokeri
-
-SONG_MENU_NAME_PARTY_JOKER=käytä jokeri
-
-SONG_JUMPTO_DESC=etsi kappale
-SONG_JUMPTO_TYPE_DESC=Etsi:
-SONG_JUMPTO_TYPE1=Kaikki
-SONG_JUMPTO_TYPE2=Nimen mukaan
-SONG_JUMPTO_TYPE3=Artistin mukaan
-SONG_JUMPTO_SONGSFOUND=Löytyi %d kappaletta
-SONG_JUMPTO_NOSONGSFOUND=Kappaletta ei löytynyt
-SONG_JUMPTO_HELP=Syötä hakuteksti
-SONG_JUMPTO_CATTEXT=Etsi: %s
-
-PARTY_MODE=biletila
-PARTY_DIFFICULTY=Vaikeustaso
-PARTY_PLAYLIST=Soittolistan valinta
-PARTY_PLAYLIST_ALL=Kaikki kappaleet
-PARTY_PLAYLIST_CATEGORY=Kansio
-PARTY_PLAYLIST_PLAYLIST=Soittolista
-PARTY_ROUNDS=Kierrokset
-PARTY_TEAMS=Joukkueet
-PARTY_TEAMS_PLAYER1=Pelaajat Joukkue1
-PARTY_TEAMS_PLAYER2=Pelaajat Joukkue2
-PARTY_TEAMS_PLAYER3=Pelaajat Joukkue3
-
-PARTY_LEGEND_CONTINUE=jatka
-
-PARTY_OPTIONS_DESC=bilepelin asetukset
-PARTY_OPTIONS_WHEREAMI=Bile-asetukset
-
-PARTY_PLAYER_DESC=Syötä pelaajien ja joukkueiden nimet!
-PARTY_PLAYER_WHEREAMI=Bilepelaajien nimet
-PARTY_PLAYER_ENTER_NAME=syötä nimet
-PARTY_PLAYER_LEGEND_CONTINUE=aloita bileet
-
-PARTY_ROUND_DESC=seuraavat pelaajat mikkeihin
-PARTY_ROUND_WHEREAMI=Seuraava kierros
-PARTY_ROUND_LEGEND_CONTINUE=aloita
-
-PARTY_SONG_WHEREAMI=Bilekappaleen valinta
-PARTY_SONG_LEGEND_CONTINUE=laula
-PARTY_SONG_MENU=bilevalikko
-
-PARTY_SCORE_DESC=kierroksen pisteet
-PARTY_SCORE_WHEREAMI=Bilepisteet
-
-PARTY_WIN_DESC=bilepelin voittaja
-PARTY_WIN_WHEREAMI=Bilepelin voittaja
-PARTY_WIN_LEGEND_CONTINUE=takaisin päävalikkoon
-
-PARTY_ROUND=Kierros
-PARTY_ROUND_WINNER=Voittaja
-PARTY_NOTPLAYEDYET=pelaamatta
-PARTY_NOBODY=ei kukaan
-NEXT_ROUND=Seuraava kierros:
-
-PARTY_DISMISSED=Diskattu!
-PARTY_SCORE_WINS=%s
-PARTY_SCORE_WINS2=voittaa!
-
-PLUGIN_HDL_NAME=Pidä pintasi!
-PLUGIN_HDL_DESC=Älä putoa palkin alapuolelle.
-
-PLUGIN_UNTIL5000_NAME=Viistonnia
-PLUGIN_UNTIL5000_DESC=Ensimmäisenä 5000 pistettä saanut voittaa.
-
-PLUGIN_DUELL_NAME=Kymppitonni
-PLUGIN_DUELL_DESC=Kaksintaistelu 10000 pisteeseen.
-
-PLUGIN_TEAMDUELL_NAME=Mikit kiertoon!
-PLUGIN_TEAMDUELL_DESC=Mikki kiertää joukkueen sisällä... Varaudu siis laulamaan!
-
-PLUGIN_BLIND_NAME=Sokkona
-PLUGIN_BLIND_DESC=Et näe nuotteja.
-
-STAT_MAIN=Tilastot
-STAT_MAIN_DESC=Yleiset
-STAT_MAIN_WHEREAMI=Tilasto
-
-STAT_OVERVIEW_INTRO=%0:s \n Pelattu viimeksi %1:.2d.%2:.2d.%3:d
-STAT_OVERVIEW_SONG=%0:d kappaletta(%3:d musiikkivideota), joista %1:d pelattu ja %2:d joita ei vielä kokeiltu.\n Suosituin kappale: %4:s :n %5:s
-STAT_OVERVIEW_PLAYER=Viimeksi %0:d eri pelaajaa,\n joista paras oli %1:s keskipisteillä %2:d pistettä.\n %3:s sai korkeimmat pisteet, %4:d pistettä.
-
-STAT_DETAIL=Tilasto
-STAT_DETAIL_WHEREAMI=Yksityiskohtainen tilasto
-
-STAT_NEXT=Seuraava sivu
-STAT_PREV=Edellinen sivu
-STAT_REVERSE=Paras/huonoin
-STAT_PAGE=Sivu %0:d / %1:d\n (%2:d / %3:d)
-
-STAT_DESC_SCORES=Parhaat laulajat
-STAT_DESC_SCORES_REVERSED=Huonoimmat laulajat
-STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s)
-
-STAT_DESC_SINGERS=Parhaat laulajat
-STAT_DESC_SINGERS_REVERSED=Huonoimmat laulajat
-STAT_FORMAT_SINGERS=%0:s \n Keskipisteet: %1:d
-
-STAT_DESC_SONGS=Suosituimmat biisit
-STAT_DESC_SONGS_REVERSED=Vähiten lauletut biisit
-STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx laulettu
-
-STAT_DESC_BANDS=Suosituimmat bändit
-STAT_DESC_BANDS_REVERSED=Vähiten lauletut bändit
-STAT_FORMAT_BANDS=%0:s \n %1:dx laulettu
-
-MSG_ERROR_TITLE=Virhe
-MSG_QUESTION_TITLE= o_0
-MSG_QUIT_USDX=Poistutaanko UltraStarista?
-MSG_END_PARTY=Poistutaanko biletilasta?
-ERROR_NO_SONGS=Kappaleita ei saatavilla
-ERROR_NO_PLUGINS=Lisäosia ei saatavilla
-ERROR_CORRUPT_SONG=Kappaletta ei voi ladata.
-ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Kappaletta ei voi ladata: Tiedostoa ei löytynyt
-ERROR_CORRUPT_SONG_NO_NOTES=Kappaletta ei voi ladata: Nuotteja ei löytynyt
-ERROR_CORRUPT_SONG_NO_BREAKS=Kappaletta ei voi ladata: Rivikatko(j)a ei löytynyt
-ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Kappaletta ei voi ladata: Virhe txt:n rivillä %0:d
\ No newline at end of file +[Text] +SING_LOADING=Ladataan... + +SING_CHOOSE_MODE=valitse pelimuoto +SING_SING=laula +SING_SING_DESC=pikapeli - laula soolo tai duetto + +SING_MULTI=bileet +SING_MULTI_DESC=Oletko valmis joukkuetaistoon? + +SING_TOOLS=asetukset + +SING_STATS=tilastot +SING_STATS_DESC=näytä tilastot + +SING_EDITOR=kappale-editori +SING_EDITOR_DESC=luo omia kappaleita + +SING_GAME_OPTIONS=peliasetukset +SING_GAME_OPTIONS_DESC=muokkaa peliasetuksia + +SING_EXIT=lopeta +SING_EXIT_DESC=lopeta peli + +SING_OPTIONS=asetukset +SING_OPTIONS_DESC=muuta asetuksia +SING_OPTIONS_WHEREAMI=Asetukset + +SING_OPTIONS_GAME=peli +SING_OPTIONS_GRAPHICS=grafiikka +SING_OPTIONS_SOUND=ääni +SING_OPTIONS_LYRICS=lyriikat +SING_OPTIONS_THEMES=ulkoasut +SING_OPTIONS_RECORD=äänitys +SING_OPTIONS_ADVANCED=lisäasetukset +SING_OPTIONS_EXIT=takaisin + +SING_OPTIONS_GAME_WHEREAMI=Peliasetukset +SING_OPTIONS_GAME_DESC=yleiset peliasetukset +SING_OPTIONS_GAME_PLAYERS=Pelaajat +SING_OPTIONS_GAME_DIFFICULTY=Vaikeustaso +SING_OPTIONS_GAME_LANGUAGE=Kieli +SING_OPTIONS_GAME_TABS=Kansiot +SING_OPTIONS_GAME_SORTING=Lajittelu +SING_OPTIONS_GAME_DEBUG=Debuggaus + +SING_OPTIONS_GRAPHICS_WHEREAMI=Grafiikka-asetukset +SING_OPTIONS_GRAPHICS_DESC=grafiikka-asetukset +SING_OPTIONS_GRAPHICS_RESOLUTION=Resoluutio +SING_OPTIONS_GRAPHICS_FULLSCREEN=Koko ruutu +SING_OPTIONS_GRAPHICS_DEPTH=Värisyvyys +SING_OPTIONS_GRAPHICS_VISUALIZER=Visualisointi +SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Värähtelijä +SING_OPTIONS_GRAPHICS_LINEBONUS=Viivabonukset +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Videon koko + +SING_OPTIONS_SOUND_WHEREAMI=Ääniasetukset +SING_OPTIONS_SOUND_DESC=ääniasetukset +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Oma ääni kuuluvissa +SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Taustamusiikki +SING_OPTIONS_SOUND_MIC_BOOST=Mikin voimakkuus +SING_OPTIONS_SOUND_CLICK_ASSIST=Klikkausapu +SING_OPTIONS_SOUND_BEAT_CLICK=Tahti-apu +SING_OPTIONS_SOUND_THRESHOLD=Kynnystaso +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Kaksinpelitila +SING_OPTIONS_SOUND_PREVIEWVOLUME=Esikatselun voimakkuus +SING_OPTIONS_SOUND_PREVIEWFADING=Esikatselun feidaus + +SING_OPTIONS_LYRICS_WHEREAMI=Lyriikka-asetukset +SING_OPTIONS_LYRICS_DESC=lyriikka-asetukset +SING_OPTIONS_LYRICS_FONT=Fontti +SING_OPTIONS_LYRICS_EFFECT=Tehoste +SING_OPTIONS_LYRICS_SOLMIZATION=Solmisaatio +SING_OPTIONS_LYRICS_NOTELINES=Nuottiviivasto + +SING_OPTIONS_THEMES_WHEREAMI=Ulkoasu-asetukset +SING_OPTIONS_THEMES_DESC=ulkoasu-asetukset +SING_OPTIONS_THEMES_THEME=Ulkoasu +SING_OPTIONS_THEMES_SKIN=Tausta +SING_OPTIONS_THEMES_COLOR=Väri + +SING_OPTIONS_RECORD_WHEREAMI=Äänitys-asetukset +SING_OPTIONS_RECORD_DESC=mikrofonin asetukset +SING_OPTIONS_RECORD_CARD=Äänikortti +SING_OPTIONS_RECORD_INPUT=Sisääntulo +SING_OPTIONS_RECORD_CHANNEL=Kanava + +SING_OPTIONS_ADVANCED_WHEREAMI=Lisäasetukset +SING_OPTIONS_ADVANCED_DESC=lisäasetukset +SING_OPTIONS_ADVANCED_EFFECTSING=Kappaletehosteet +SING_OPTIONS_ADVANCED_SCREENFADE=Ruudun feidaus +SING_OPTIONS_ADVANCED_LOADANIMATION=Latausanimaatio +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Poiston vahvistus +SING_OPTIONS_ADVANCED_LINEBONUS=Rivibonus +SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= +SING_OPTIONS_ADVANCED_ONSONGCLICK=Kappaleen jälkeen +SING_OPTIONS_ADVANCED_PARTYPOPUP=Autom. bilevalikko + +SING_EDIT=kappale-editori +SING_EDIT_MENU_DESCRIPTION=luo omia kappaleita + +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Luo .txt midi-tiedostosta +SING_EDIT_BUTTON_DESCRIPTION_EXIT=takaisin +SING_EDIT_BUTTON_CONVERT=Luo +SING_EDIT_BUTTON_EXIT=takaisin + +SING_EDIT_NAVIGATE=liiku +SING_EDIT_SELECT=valitse +SING_EDIT_EXIT=takaisin + +SING_LEGEND_SELECT=valitse +SING_LEGEND_NAVIGATE=liiku +SING_LEGEND_CONTINUE=jatka +SING_LEGEND_ESC=takaisin + +SING_PLAYER_DESC=syötä pelaajan nimi +SING_PLAYER_WHEREAMI=Pelaajien nimet +SING_PLAYER_ENTER_NAME=syötä nimi + +SING_DIFFICULTY_DESC=valitse vaikeustaso +SING_DIFFICULTY_WHEREAMI=Vaikeustaso +SING_DIFFICULTY_CONTINUE=kappalevalinta +SING_EASY=Helppo +SING_MEDIUM=Keskitaso +SING_HARD=Vaikea + +SING_SONG_SELECTION_DESC=valitse kappale +SING_SONG_SELECTION_WHEREAMI=Kappalevalinta +SING_SONG_SELECTION_GOTO=mene ... +SING_SONG_SELECTION=kappalevalinta +SING_SONG_SELECTION_MENU=valikko +SING_SONG_SELECTION_PLAYLIST=soittolista +SING_SONGS_IN_CAT=kappaletta +PLAYLIST_CATTEXT=Soittolista: %s + +SING_TIME=KESTO +SING_TOTAL=yhteensä +SING_MODE=laula soolo +SING_NOTES=nuotit +SING_GOLDEN_NOTES=kultanuotit +SING_PHRASE_BONUS=rivibonus + +SING_MENU=Päävalikko + +SONG_SCORE=kappaleen pisteet +SONG_SCORE_WHEREAMI=Pisteet + +SING_SCORE_TONE_DEAF=Sävelkorvaton +SING_SCORE_AMATEUR=Amatööri +SING_SCORE_WANNABE=Wannabe +SING_SCORE_HOPEFUL=Toiveita herättävä +SING_SCORE_RISING_STAR=Nouseva tähti +SING_SCORE_LEAD_SINGER=Päälaulaja +SING_SCORE_SUPERSTAR=Supertähti +SING_SCORE_ULTRASTAR=Ultratähti + +SING_TOP_5_CHARTS=top 5 pelaajat +SING_TOP_5_CHARTS_WHEREAMI=top 5 +SING_TOP_5_CHARTS_CONTINUE=kappalevalintaan + +POPUP_PERFECT=täydellistä! +POPUP_AWESOME=loistavaa! +POPUP_GREAT=mahtavaa! +POPUP_GOOD=hyvä! +POPUP_NOTBAD=menettelee! +POPUP_BAD=huonoa! +POPUP_POOR=heikkoa! +POPUP_AWFUL=kauheaa! + +IMPLODE_GLUE1=, +IMPLODE_GLUE2= ja + +SONG_MENU_NAME_MAIN=kappalevalikko +SONG_MENU_PLAY=Laula +SONG_MENU_CHANGEPLAYERS=Vaihda pelaajia +SONG_MENU_EDIT=Muokkaa +SONG_MENU_MODI=Laula muunneltu kappale +SONG_MENU_CANCEL=Peruuta + +SONG_MENU_NAME_PLAYLIST=Kappalevalikko +SONG_MENU_PLAYLIST_ADD=Lisää kappale +SONG_MENU_PLAYLIST_DEL=Poista kappale + +SONG_MENU_NAME_PLAYLIST_ADD=Lisää kappale +SONG_MENU_PLAYLIST_ADD_NEW=uuteen soittolistaan +SONG_MENU_PLAYLIST_ADD_EXISTING=luotuun soittolistaan +SONG_MENU_PLAYLIST_NOEXISTING=Soittolistaa ei saatavilla + +SONG_MENU_NAME_PLAYLIST_NEW=Uusi soittolista +SONG_MENU_PLAYLIST_NEW_CREATE=Luo +SONG_MENU_PLAYLIST_NEW_UNNAMED=Nimetön + +SONG_MENU_NAME_PLAYLIST_DELITEM=Vahvista poisto? +SONG_MENU_YES=Kyllä +SONG_MENU_NO=Ei + +SONG_MENU_NAME_PLAYLIST_LOAD=Avaa soittolista +SONG_MENU_PLAYLIST_LOAD=Avaa +SONG_MENU_PLAYLIST_DELCURRENT=poista nykyinen soittolista + +SONG_MENU_NAME_PLAYLIST_DEL=Poista soittolista? + +SONG_MENU_NAME_PARTY_MAIN=Bilevalikko +SONG_MENU_JOKER=Jokeri + +SONG_MENU_NAME_PARTY_JOKER=käytä jokeri + +SONG_JUMPTO_DESC=etsi kappale +SONG_JUMPTO_TYPE_DESC=Etsi: +SONG_JUMPTO_TYPE1=Kaikki +SONG_JUMPTO_TYPE2=Nimen mukaan +SONG_JUMPTO_TYPE3=Artistin mukaan +SONG_JUMPTO_SONGSFOUND=Löytyi %d kappaletta +SONG_JUMPTO_NOSONGSFOUND=Kappaletta ei löytynyt +SONG_JUMPTO_HELP=Syötä hakuteksti +SONG_JUMPTO_CATTEXT=Etsi: %s + +PARTY_MODE=biletila +PARTY_DIFFICULTY=Vaikeustaso +PARTY_PLAYLIST=Soittolistan valinta +PARTY_PLAYLIST_ALL=Kaikki kappaleet +PARTY_PLAYLIST_CATEGORY=Kansio +PARTY_PLAYLIST_PLAYLIST=Soittolista +PARTY_ROUNDS=Kierrokset +PARTY_TEAMS=Joukkueet +PARTY_TEAMS_PLAYER1=Pelaajat Joukkue1 +PARTY_TEAMS_PLAYER2=Pelaajat Joukkue2 +PARTY_TEAMS_PLAYER3=Pelaajat Joukkue3 + +PARTY_LEGEND_CONTINUE=jatka + +PARTY_OPTIONS_DESC=bilepelin asetukset +PARTY_OPTIONS_WHEREAMI=Bile-asetukset + +PARTY_PLAYER_DESC=Syötä pelaajien ja joukkueiden nimet! +PARTY_PLAYER_WHEREAMI=Bilepelaajien nimet +PARTY_PLAYER_ENTER_NAME=syötä nimet +PARTY_PLAYER_LEGEND_CONTINUE=aloita bileet + +PARTY_ROUND_DESC=seuraavat pelaajat mikkeihin +PARTY_ROUND_WHEREAMI=Seuraava kierros +PARTY_ROUND_LEGEND_CONTINUE=aloita + +PARTY_SONG_WHEREAMI=Bilekappaleen valinta +PARTY_SONG_LEGEND_CONTINUE=laula +PARTY_SONG_MENU=bilevalikko + +PARTY_SCORE_DESC=kierroksen pisteet +PARTY_SCORE_WHEREAMI=Bilepisteet + +PARTY_WIN_DESC=bilepelin voittaja +PARTY_WIN_WHEREAMI=Bilepelin voittaja +PARTY_WIN_LEGEND_CONTINUE=takaisin päävalikkoon + +PARTY_ROUND=Kierros +PARTY_ROUND_WINNER=Voittaja +PARTY_NOTPLAYEDYET=pelaamatta +PARTY_NOBODY=ei kukaan +NEXT_ROUND=Seuraava kierros: + +PARTY_DISMISSED=Diskattu! +PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS2=voittaa! + +PLUGIN_HDL_NAME=Pidä pintasi! +PLUGIN_HDL_DESC=Älä putoa palkin alapuolelle. + +PLUGIN_UNTIL5000_NAME=Viistonnia +PLUGIN_UNTIL5000_DESC=Ensimmäisenä 5000 pistettä saanut voittaa. + +PLUGIN_DUELL_NAME=Kymppitonni +PLUGIN_DUELL_DESC=Kaksintaistelu 10000 pisteeseen. + +PLUGIN_TEAMDUELL_NAME=Mikit kiertoon! +PLUGIN_TEAMDUELL_DESC=Mikki kiertää joukkueen sisällä... Varaudu siis laulamaan! + +PLUGIN_BLIND_NAME=Sokkona +PLUGIN_BLIND_DESC=Et näe nuotteja. + +STAT_MAIN=Tilastot +STAT_MAIN_DESC=Yleiset +STAT_MAIN_WHEREAMI=Tilasto + +STAT_OVERVIEW_INTRO=%0:s \n Pelattu viimeksi %1:.2d.%2:.2d.%3:d +STAT_OVERVIEW_SONG=%0:d kappaletta(%3:d musiikkivideota), joista %1:d pelattu ja %2:d joita ei vielä kokeiltu.\n Suosituin kappale: %4:s :n %5:s +STAT_OVERVIEW_PLAYER=Viimeksi %0:d eri pelaajaa,\n joista paras oli %1:s keskipisteillä %2:d pistettä.\n %3:s sai korkeimmat pisteet, %4:d pistettä. + +STAT_DETAIL=Tilasto +STAT_DETAIL_WHEREAMI=Yksityiskohtainen tilasto + +STAT_NEXT=Seuraava sivu +STAT_PREV=Edellinen sivu +STAT_REVERSE=Paras/huonoin +STAT_PAGE=Sivu %0:d / %1:d\n (%2:d / %3:d) + +STAT_DESC_SCORES=Parhaat laulajat +STAT_DESC_SCORES_REVERSED=Huonoimmat laulajat +STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) + +STAT_DESC_SINGERS=Parhaat laulajat +STAT_DESC_SINGERS_REVERSED=Huonoimmat laulajat +STAT_FORMAT_SINGERS=%0:s \n Keskipisteet: %1:d + +STAT_DESC_SONGS=Suosituimmat biisit +STAT_DESC_SONGS_REVERSED=Vähiten lauletut biisit +STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx laulettu + +STAT_DESC_BANDS=Suosituimmat bändit +STAT_DESC_BANDS_REVERSED=Vähiten lauletut bändit +STAT_FORMAT_BANDS=%0:s \n %1:dx laulettu + +MSG_ERROR_TITLE=Virhe +MSG_QUESTION_TITLE= o_0 +MSG_QUIT_USDX=Poistutaanko UltraStarista? +MSG_END_PARTY=Poistutaanko biletilasta? +ERROR_NO_SONGS=Kappaleita ei saatavilla +ERROR_NO_PLUGINS=Lisäosia ei saatavilla +ERROR_CORRUPT_SONG=Kappaletta ei voi ladata. +ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Kappaletta ei voi ladata: Tiedostoa ei löytynyt +ERROR_CORRUPT_SONG_NO_NOTES=Kappaletta ei voi ladata: Nuotteja ei löytynyt +ERROR_CORRUPT_SONG_NO_BREAKS=Kappaletta ei voi ladata: Rivikatko(j)a ei löytynyt +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Kappaletta ei voi ladata: Virhe txt:n rivillä %0:d
\ No newline at end of file diff --git a/unicode/game/languages/French.ini b/unicode/game/languages/French.ini index 8531b640..1b358542 100644 --- a/unicode/game/languages/French.ini +++ b/unicode/game/languages/French.ini @@ -6,96 +6,100 @@ SING_SING=Solo SING_SING_DESC=Chanter SING_MULTI=Multi -SING_MULTI_DESC=Chanter à plusieurs +SING_MULTI_DESC=Chanter à plusieurs SING_TOOLS=Outils SING_STATS=Statistiques SING_STATS_DESC=Consulter les statistiques -SING_EDITOR=Éditeur -SING_EDITOR_DESC=Créer vos propre chansons +SING_EDITOR=Éditeur +SING_EDITOR_DESC=Créer vos propre chansons SING_GAME_OPTIONS=Options -SING_GAME_OPTIONS_DESC=Modifier les paramètres du jeu +SING_GAME_OPTIONS_DESC=Modifier les paramètres du jeu SING_EXIT=Quitter SING_EXIT_DESC=Quitter le jeu SING_OPTIONS=Options -SING_OPTIONS_DESC=Changer les paramètres +SING_OPTIONS_DESC=Changer les paramètres SING_OPTIONS_WHEREAMI=Options SING_OPTIONS_GAME=Jeu SING_OPTIONS_GRAPHICS=Graphismes SING_OPTIONS_SOUND=Audio SING_OPTIONS_LYRICS=Paroles -SING_OPTIONS_THEMES=Thèmes +SING_OPTIONS_THEMES=Thèmes SING_OPTIONS_RECORD=Micros -SING_OPTIONS_ADVANCED=Avancé +SING_OPTIONS_ADVANCED=Avancé SING_OPTIONS_EXIT=Retour SING_OPTIONS_GAME_WHEREAMI=Options de jeu -SING_OPTIONS_GAME_DESC=Options générales de jeu +SING_OPTIONS_GAME_DESC=Options générales de jeu SING_OPTIONS_GAME_PLAYERS=Joueurs -SING_OPTIONS_GAME_DIFFICULTY=Difficulté +SING_OPTIONS_GAME_DIFFICULTY=Difficulté SING_OPTIONS_GAME_LANGUAGE=Langue SING_OPTIONS_GAME_TABS=Dossier SING_OPTIONS_GAME_SORTING=Tri -SING_OPTIONS_GAME_DEBUG=Débogage +SING_OPTIONS_GAME_DEBUG=Débogage SING_OPTIONS_GRAPHICS_WHEREAMI=Options graphiques -SING_OPTIONS_GRAPHICS_DESC=Paramètres des graphismes -SING_OPTIONS_GRAPHICS_RESOLUTION=Résolution -SING_OPTIONS_GRAPHICS_FULLSCREEN=Plein écran +SING_OPTIONS_GRAPHICS_DESC=Paramètres des graphismes +SING_OPTIONS_GRAPHICS_RESOLUTION=Résolution +SING_OPTIONS_GRAPHICS_FULLSCREEN=Plein écran SING_OPTIONS_GRAPHICS_DEPTH=Couleurs +SING_OPTIONS_GRAPHICS_VISUALIZER=Visualization SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Oscilloscope SING_OPTIONS_GRAPHICS_LINEBONUS=Bonus de phrases -SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Taille vidéo +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Taille vidéo SING_OPTIONS_SOUND_WHEREAMI=Options de son -SING_OPTIONS_SOUND_DESC=Paramètres de son +SING_OPTIONS_SOUND_DESC=Paramètres de son +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Entendre le micro +SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Musique de fond SING_OPTIONS_SOUND_MIC_BOOST=Amplif. mic. SING_OPTIONS_SOUND_CLICK_ASSIST=Clics d'aide -SING_OPTIONS_SOUND_BEAT_CLICK=Métronome +SING_OPTIONS_SOUND_BEAT_CLICK=Métronome SING_OPTIONS_SOUND_THRESHOLD=Suppression bruit SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Mode 2 joueurs -SING_OPTIONS_SOUND_PREVIEWVOLUME=Prévis. volume -SING_OPTIONS_SOUND_PREVIEWFADING=Prévis. baisse +SING_OPTIONS_SOUND_PREVIEWVOLUME=Prévis. volume +SING_OPTIONS_SOUND_PREVIEWFADING=Prévis. baisse SING_OPTIONS_LYRICS_WHEREAMI=Options de paroles -SING_OPTIONS_LYRICS_DESC=Paramètres de paroles -SING_OPTIONS_LYRICS_FONT=Caractères +SING_OPTIONS_LYRICS_DESC=Paramètres de paroles +SING_OPTIONS_LYRICS_FONT=Caractères SING_OPTIONS_LYRICS_EFFECT=Effet SING_OPTIONS_LYRICS_SOLMIZATION=Afficher gamme +SING_OPTIONS_LYRICS_NOTELINES=Barres -SING_OPTIONS_THEMES_WHEREAMI=Options des thèmes -SING_OPTIONS_THEMES_DESC=Paramètres des thèmes -SING_OPTIONS_THEMES_THEME=Thèmes +SING_OPTIONS_THEMES_WHEREAMI=Options des thèmes +SING_OPTIONS_THEMES_DESC=Paramètres des thèmes +SING_OPTIONS_THEMES_THEME=Thèmes SING_OPTIONS_THEMES_SKIN=Aspect SING_OPTIONS_THEMES_COLOR=Couleur SING_OPTIONS_RECORD_WHEREAMI=Options d'enregistrement -SING_OPTIONS_RECORD_DESC=Paramètres des micros +SING_OPTIONS_RECORD_DESC=Paramètres des micros SING_OPTIONS_RECORD_CARD=Carte son -SING_OPTIONS_RECORD_INPUT=Entrée +SING_OPTIONS_RECORD_INPUT=Entrée SING_OPTIONS_RECORD_CHANNEL=Canal -SING_OPTIONS_ADVANCED_WHEREAMI=Options avancées -SING_OPTIONS_ADVANCED_DESC=Paramètres avancés +SING_OPTIONS_ADVANCED_WHEREAMI=Options avancées +SING_OPTIONS_ADVANCED_DESC=Paramètres avancés SING_OPTIONS_ADVANCED_EFFECTSING=Effet de chant -SING_OPTIONS_ADVANCED_SCREENFADE=Fondu écran +SING_OPTIONS_ADVANCED_SCREENFADE=Fondu écran SING_OPTIONS_ADVANCED_LOADANIMATION=Charge animation SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Confirm sup. SING_OPTIONS_ADVANCED_LINEBONUS=Bonus de phrases -SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Compteur de titres chantés +SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Compteur de titres chantés SING_OPTIONS_ADVANCED_ONSONGCLICK=Choix ap. chanson SING_OPTIONS_ADVANCED_PARTYPOPUP=Menu multi auto -SING_EDIT=Éditeur -SING_EDIT_MENU_DESCRIPTION=Créer vos propre chansons +SING_EDIT=Éditeur +SING_EDIT_MENU_DESCRIPTION=Créer vos propre chansons -SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Importer texte à une dossier de midi file +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Importer texte à une dossier de midi file SING_EDIT_BUTTON_DESCRIPTION_EXIT=Retour SING_EDIT_BUTTON_CONVERT=Importer SING_EDIT_BUTTON_EXIT=Retour @@ -113,15 +117,15 @@ SING_PLAYER_DESC=Entrer le nom du joueur SING_PLAYER_WHEREAMI=Nom du joueur SING_PLAYER_ENTER_NAME=Modifier -SING_DIFFICULTY_DESC=Choisir le niveau de difficulté -SING_DIFFICULTY_WHEREAMI=Difficulté +SING_DIFFICULTY_DESC=Choisir le niveau de difficulté +SING_DIFFICULTY_WHEREAMI=Difficulté SING_DIFFICULTY_CONTINUE=Valider SING_EASY=Facile SING_MEDIUM=Moyen SING_HARD=Difficile SING_SONG_SELECTION_DESC=Choisir une chanson -SING_SONG_SELECTION_WHEREAMI=Sélection du titre +SING_SONG_SELECTION_WHEREAMI=Sélection du titre SING_SONG_SELECTION_GOTO=Atteindre SING_SONG_SELECTION=Choix de chanson SING_SONG_SELECTION_MENU=Menu @@ -143,9 +147,10 @@ SONG_SCORE_WHEREAMI=Points SING_SCORE_TONE_DEAF=Casserole SING_SCORE_AMATEUR=Amateur +SING_SCORE_WANNABE=Aspirant chanteur +SING_SCORE_HOPEFUL=Espoir SING_SCORE_RISING_STAR=Star en herbe SING_SCORE_LEAD_SINGER=Artiste -SING_SCORE_HIT_ARTIST=Révélation SING_SCORE_SUPERSTAR=Superstar SING_SCORE_ULTRASTAR=Ultrastar @@ -162,27 +167,27 @@ POPUP_BAD=Pas terrible ! POPUP_POOR=Mauvais ! POPUP_AWFUL=Nul ! -IMPLODE_GLUE1=, -IMPLODE_GLUE2= et +IMPLODE_GLUE1=, +IMPLODE_GLUE2= et SONG_MENU_NAME_MAIN=Menu SONG_MENU_PLAY=Chanter SONG_MENU_CHANGEPLAYERS=Changer de joueur -SONG_MENU_EDIT=Éditeur +SONG_MENU_EDIT=Éditeur SONG_MENU_MODI=Chanter un mode SONG_MENU_CANCEL=Annuler SONG_MENU_NAME_PLAYLIST=Menu -SONG_MENU_PLAYLIST_ADD=Ajouter une chanson -SONG_MENU_PLAYLIST_DEL=Supprimer la chanson +SONG_MENU_PLAYLIST_ADD=Ajouter une chanson +SONG_MENU_PLAYLIST_DEL=Supprimer la chanson -SONG_MENU_NAME_PLAYLIST_ADD=Ajouter chanson -SONG_MENU_PLAYLIST_ADD_NEW=À la nouvelle playlist -SONG_MENU_PLAYLIST_ADD_EXISTING=Ajouter à la playlist -SONG_MENU_PLAYLIST_NOEXISTING=Pas de playlist +SONG_MENU_NAME_PLAYLIST_ADD=Ajouter chanson +SONG_MENU_PLAYLIST_ADD_NEW=À la nouvelle playlist +SONG_MENU_PLAYLIST_ADD_EXISTING=Ajouter à la playlist +SONG_MENU_PLAYLIST_NOEXISTING=Pas de playlist SONG_MENU_NAME_PLAYLIST_NEW=Nouvelle playlist -SONG_MENU_PLAYLIST_NEW_CREATE=Créer +SONG_MENU_PLAYLIST_NEW_CREATE=Créer SONG_MENU_PLAYLIST_NEW_UNNAMED=Sans-nom SONG_MENU_NAME_PLAYLIST_DELITEM=Supprimer ? @@ -205,34 +210,34 @@ SONG_JUMPTO_TYPE_DESC=Recherche : SONG_JUMPTO_TYPE1=Tout SONG_JUMPTO_TYPE2=Titre SONG_JUMPTO_TYPE3=Artiste -SONG_JUMPTO_SONGSFOUND=%d Chanson(s) trouvée(s) -SONG_JUMPTO_NOSONGSFOUND=Aucune chanson trouvée -SONG_JUMPTO_HELP=Entrer le texte à rechercher +SONG_JUMPTO_SONGSFOUND=%d Chanson(s) trouvée(s) +SONG_JUMPTO_NOSONGSFOUND=Aucune chanson trouvée +SONG_JUMPTO_HELP=Entrer le texte à rechercher SONG_JUMPTO_CATTEXT=Recherche: %s PARTY_MODE=Mode multi -PARTY_DIFFICULTY=Difficulté +PARTY_DIFFICULTY=Difficulté PARTY_PLAYLIST=Playlist PARTY_PLAYLIST_ALL=Toutes les chansons PARTY_PLAYLIST_CATEGORY=Dossier PARTY_PLAYLIST_PLAYLIST=Playlist PARTY_ROUNDS=Nbre manches -PARTY_TEAMS=Nbre équipes -PARTY_TEAMS_PLAYER1=Joueur(s) équipe 1 -PARTY_TEAMS_PLAYER2=Joueur(s) équipe 2 -PARTY_TEAMS_PLAYER3=Joueur(s) équipe 3 +PARTY_TEAMS=Nbre équipes +PARTY_TEAMS_PLAYER1=Joueur(s) équipe 1 +PARTY_TEAMS_PLAYER2=Joueur(s) équipe 2 +PARTY_TEAMS_PLAYER3=Joueur(s) équipe 3 PARTY_LEGEND_CONTINUE=Suivant -PARTY_OPTIONS_DESC=Paramètres du mode multi +PARTY_OPTIONS_DESC=Paramètres du mode multi PARTY_OPTIONS_WHEREAMI=Options du mode multi -PARTY_PLAYER_DESC=Entrer le nom des équipes et des joueurs +PARTY_PLAYER_DESC=Entrer le nom des équipes et des joueurs PARTY_PLAYER_WHEREAMI=Mode multi: Equipes PARTY_PLAYER_ENTER_NAME=Modifier PARTY_PLAYER_LEGEND_CONTINUE=Valider -PARTY_ROUND_DESC=Joueurs suivants à vos micros ! +PARTY_ROUND_DESC=Joueurs suivants à vos micros ! PARTY_ROUND_WHEREAMI=Mode multi: Manche suivante PARTY_ROUND_LEGEND_CONTINUE=Commencer @@ -243,7 +248,7 @@ PARTY_SONG_MENU=Menu PARTY_SCORE_DESC=Score de la manche PARTY_SCORE_WHEREAMI=Mode multi: Score -PARTY_WIN_DESC=Gagnant de la partie +PARTY_WIN_DESC=Gagnant de la partie PARTY_WIN_WHEREAMI=Mode multi: Gagnant PARTY_WIN_LEGEND_CONTINUE=Retour au menu principal @@ -253,12 +258,12 @@ PARTY_NOTPLAYEDYET=- PARTY_NOBODY=Personne ne NEXT_ROUND=Manche suivante: -PARTY_DISMISSED=Rétrogradé +PARTY_DISMISSED=Rétrogradé PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=l'emporte ! PLUGIN_HDL_NAME=Tiens la barre -PLUGIN_HDL_DESC=Maintiens la jauge dans le secteur indiqué +PLUGIN_HDL_DESC=Maintiens la jauge dans le secteur indiqué PLUGIN_UNTIL5000_NAME=A 5000 PLUGIN_UNTIL5000_DESC=Le 1er qui atteint 5000 points remporte la manche @@ -266,28 +271,31 @@ PLUGIN_UNTIL5000_DESC=Le 1er qui atteint 5000 points remporte la manche PLUGIN_DUELL_NAME=Duel PLUGIN_DUELL_DESC=Le meilleur score remporte la manche +PLUGIN_TEAMDUELL_NAME=Duel par équipe +PLUGIN_TEAMDUELL_DESC=Passes le micro! + PLUGIN_BLIND_NAME=A l'aveugle -PLUGIN_BLIND_DESC=Obtiens le meilleur score sans regarder l'écran. +PLUGIN_BLIND_DESC=Obtiens le meilleur score sans regarder l'écran. STAT_MAIN=Statistiques -STAT_MAIN_DESC=Général +STAT_MAIN_DESC=Général STAT_MAIN_WHEREAMI=Statistiques -STAT_OVERVIEW_INTRO=Statistiques d'%0:s \n Dernière réinitialisation le %1:.2d.%2:.2d.%3:d -STAT_OVERVIEW_SONG=%0:d chansons (%3:d avec vidéo)\n%1:d ont déjà été chantées une fois, %2:d pas encore. \n\n La chanson la plus chantée est %5:s de %4:s. -STAT_OVERVIEW_PLAYER=%0:d joueurs différents ont chantés depuis la dernière réinitialisation . \n\n Le meilleur joueur est %1:s avec %2:d points. \n Meilleur score, %4:d, atteint par %3:s. +STAT_OVERVIEW_INTRO=Statistiques d'%0:s \n Dernière réinitialisation le %1:.2d.%2:.2d.%3:d +STAT_OVERVIEW_SONG=%0:d chansons (%3:d avec vidéo)\n%1:d ont déjà été chantées une fois, %2:d pas encore. \n\n La chanson la plus chantée est %5:s de %4:s. +STAT_OVERVIEW_PLAYER=%0:d joueurs différents ont chantés depuis la dernière réinitialisation . \n\n Le meilleur joueur est %1:s avec %2:d points. \n Meilleur score, %4:d, atteint par %3:s. STAT_DETAIL=Statistiques -STAT_DETAIL_WHEREAMI=Statistiques détaillées +STAT_DETAIL_WHEREAMI=Statistiques détaillées STAT_NEXT=Page suiv. -STAT_PREV=Page préc. +STAT_PREV=Page préc. STAT_REVERSE=Inverser -STAT_PAGE=Page %0:d de %1:d \n (%2:d entrées sur %3:d) +STAT_PAGE=Page %0:d de %1:d \n (%2:d entrées sur %3:d) STAT_DESC_SCORES=Score STAT_DESC_SCORES_REVERSED=Pires scores -STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) +STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) STAT_DESC_SINGERS=Chanteurs STAT_DESC_SINGERS_REVERSED=Pires chanteurs @@ -295,16 +303,20 @@ STAT_FORMAT_SINGERS=%0:s \n Score moyen: %1:d STAT_DESC_SONGS=Chansons STAT_DESC_SONGS_REVERSED=Chansons impopulaires -STAT_FORMAT_SONGS=%0:s - %1:s \n Chanté %2:dx +STAT_FORMAT_SONGS=%0:s - %1:s \n Chanté %2:dx STAT_DESC_BANDS=Artistes STAT_DESC_BANDS_REVERSED=Artistes impopulaires -STAT_FORMAT_BANDS=%0:s \n Chansons chantées: %1:d +STAT_FORMAT_BANDS=%0:s \n Chansons chantées: %1:d MSG_ERROR_TITLE=Erreur -MSG_QUESTION_TITLE=Confirmation +MSG_QUESTION_TITLE=Confirmation MSG_QUIT_USDX=Quitter le jeu ? MSG_END_PARTY=Quitter la partie ? -ERROR_NO_SONGS=Aucune chanson. -ERROR_NO_PLUGINS=Aucun plugin. -ERROR_CORRUPT_SONG=Impossible de charger la chanson.
\ No newline at end of file +ERROR_NO_SONGS=Aucune chanson. +ERROR_NO_PLUGINS=Aucun plugin. +ERROR_CORRUPT_SONG=Impossible de charger la chanson. +ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Chargement impossible: Fichier non trouvé +ERROR_CORRUPT_SONG_NO_NOTES=Chargement impossible: Pas de partition trouvée +ERROR_CORRUPT_SONG_NO_BREAKS=Chargement impossible: Saut de ligne introuvable +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Chargement impossible: Erreur analyseur à la ligne %0:d
\ No newline at end of file diff --git a/unicode/game/languages/German.ini b/unicode/game/languages/German.ini index 97a31d57..4ea0bf89 100644 --- a/unicode/game/languages/German.ini +++ b/unicode/game/languages/German.ini @@ -1,14 +1,14 @@ [Text] -SING_LOADING=Lade... +SING_LOADING=Lädt... -SING_CHOOSE_MODE=Modus wählen +SING_CHOOSE_MODE=Modus wählen SING_SING=Singen SING_SING_DESC=Singen SING_MULTI=Party SING_MULTI_DESC=Ein rundenbasiertes Teamspiel spielen -SING_TOOLS=Tools +SING_TOOLS=Werkzeuge SING_STATS=Statistiken SING_STATS_DESC=Die Statistiken anschauen @@ -16,26 +16,26 @@ SING_STATS_DESC=Die Statistiken anschauen SING_EDITOR=Editor SING_EDITOR_DESC=Erstelle deinen eigenen Song -SING_GAME_OPTIONS=Spiel-Optionen -SING_GAME_OPTIONS_DESC=Verändere die Spieleinstellungen +SING_GAME_OPTIONS=Spieloptionen +SING_GAME_OPTIONS_DESC=Verändere die Spieleinstellungen SING_EXIT=Beenden SING_EXIT_DESC=Spiel verlassen SING_OPTIONS=Optionen -SING_OPTIONS_DESC=Einstellungen verändern +SING_OPTIONS_DESC=Einstellungen verändern SING_OPTIONS_WHEREAMI=Optionen SING_OPTIONS_GAME=Spiel SING_OPTIONS_GRAPHICS=Grafik SING_OPTIONS_SOUND=Sound SING_OPTIONS_LYRICS=Lyrics -SING_OPTIONS_THEMES=Themes +SING_OPTIONS_THEMES=Design SING_OPTIONS_RECORD=Aufnahme SING_OPTIONS_ADVANCED=Erweitert -SING_OPTIONS_EXIT=zurück +SING_OPTIONS_EXIT=zurück -SING_OPTIONS_GAME_WHEREAMI=Optionen Spiel +SING_OPTIONS_GAME_WHEREAMI=Spieloptionen SING_OPTIONS_GAME_DESC=Allgemeine Spieleinstellungen SING_OPTIONS_GAME_PLAYERS=Spieler SING_OPTIONS_GAME_DIFFICULTY=Schwierigkeit @@ -44,18 +44,18 @@ SING_OPTIONS_GAME_TABS=Ordner SING_OPTIONS_GAME_SORTING=Sortierung SING_OPTIONS_GAME_DEBUG=Debug -SING_OPTIONS_GRAPHICS_WHEREAMI=Optionen Grafik -SING_OPTIONS_GRAPHICS_DESC=Einstellungen für die Grafik -SING_OPTIONS_GRAPHICS_RESOLUTION=Auflösung +SING_OPTIONS_GRAPHICS_WHEREAMI=Grafikoptionen +SING_OPTIONS_GRAPHICS_DESC=Grafikeinstellungen +SING_OPTIONS_GRAPHICS_RESOLUTION=Auflösung SING_OPTIONS_GRAPHICS_FULLSCREEN=Vollbild -SING_OPTIONS_GRAPHICS_VISUALIZER=Visualisierung SING_OPTIONS_GRAPHICS_DEPTH=Farbtiefe +SING_OPTIONS_GRAPHICS_VISUALIZER=Visualisierung SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Oszilloskop SING_OPTIONS_GRAPHICS_LINEBONUS=Phrasenbonus -SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Videogröße +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Videogröße -SING_OPTIONS_SOUND_WHEREAMI=Optionen Sound -SING_OPTIONS_SOUND_DESC=Einstellungen für den Sound +SING_OPTIONS_SOUND_WHEREAMI=Soundoptionen +SING_OPTIONS_SOUND_DESC=Soundeinstellungen SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Mikrofon Wiedergabe SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Hintergrundmusik SING_OPTIONS_SOUND_MIC_BOOST=Mic-Anhebung @@ -66,69 +66,69 @@ SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=2-Spieler-Modus SING_OPTIONS_SOUND_PREVIEWVOLUME=Vorschau Lautst. SING_OPTIONS_SOUND_PREVIEWFADING=Vorschau Fading -SING_OPTIONS_LYRICS_WHEREAMI=Optionen Lyrics -SING_OPTIONS_LYRICS_DESC=Einstellungen für die Lyrics +SING_OPTIONS_LYRICS_WHEREAMI=Lyricsoptionen +SING_OPTIONS_LYRICS_DESC=Einstellungen für die Lyrics SING_OPTIONS_LYRICS_FONT=Schriftart SING_OPTIONS_LYRICS_EFFECT=Effekt SING_OPTIONS_LYRICS_SOLMIZATION=Solmisation SING_OPTIONS_LYRICS_NOTELINES=Notenlinien -SING_OPTIONS_THEMES_WHEREAMI=Optionen Themes -SING_OPTIONS_THEMES_DESC=Einstellungen für Theme und Skin -SING_OPTIONS_THEMES_THEME=Theme +SING_OPTIONS_THEMES_WHEREAMI=Designoptionen +SING_OPTIONS_THEMES_DESC=Design und Skineinstellungen +SING_OPTIONS_THEMES_THEME=Design SING_OPTIONS_THEMES_SKIN=Skin SING_OPTIONS_THEMES_COLOR=Farbe -SING_OPTIONS_RECORD_WHEREAMI=Optionen Aufnahme -SING_OPTIONS_RECORD_DESC=Einstellungen für die Mikrofone +SING_OPTIONS_RECORD_WHEREAMI=Aufnahmeoptionen +SING_OPTIONS_RECORD_DESC=Mikrofoneinstellungen SING_OPTIONS_RECORD_CARD=Soundkarte SING_OPTIONS_RECORD_INPUT=Eingang SING_OPTIONS_RECORD_CHANNEL=Kanal -SING_OPTIONS_ADVANCED_WHEREAMI=Optionen Erweitert +SING_OPTIONS_ADVANCED_WHEREAMI=Erweiterte Optionen SING_OPTIONS_ADVANCED_DESC=Erweiterte Einstellungen SING_OPTIONS_ADVANCED_EFFECTSING=Singeffekte SING_OPTIONS_ADVANCED_SCREENFADE=Bildschirm-Fade SING_OPTIONS_ADVANCED_LOADANIMATION=Lade-Animation SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Sicherheitsabfr. SING_OPTIONS_ADVANCED_LINEBONUS=Phrasenbonus -SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Wie oft gesungen mitzählen -SING_OPTIONS_ADVANCED_ONSONGCLICK=nach Song-Wahl -SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto Party-Menü +SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Wie oft gesungen mitzählen +SING_OPTIONS_ADVANCED_ONSONGCLICK=Nach Songauswahl +SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto Party-Menü SING_EDIT=Editor SING_EDIT_MENU_DESCRIPTION=Erstelle deinen eigenen Song -SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Text aus Midi-Datei in Text importieren -SING_EDIT_BUTTON_DESCRIPTION_EXIT=zurück -SING_EDIT_BUTTON_CONVERT=Import -SING_EDIT_BUTTON_EXIT=zurück +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Midi/Kar-Datei in Text exportieren +SING_EDIT_BUTTON_DESCRIPTION_EXIT=zurück +SING_EDIT_BUTTON_CONVERT=Importieren +SING_EDIT_BUTTON_EXIT=zurück SING_EDIT_NAVIGATE=Navigieren -SING_EDIT_SELECT=Auswählen -SING_EDIT_EXIT=zurück +SING_EDIT_SELECT=Auswählen +SING_EDIT_EXIT=zurück -SING_LEGEND_SELECT=Auswählen +SING_LEGEND_SELECT=Auswählen SING_LEGEND_NAVIGATE=Navigieren SING_LEGEND_CONTINUE=Weiter -SING_LEGEND_ESC=Zurück +SING_LEGEND_ESC=zurück SING_PLAYER_DESC=Spielernamen eingeben. SING_PLAYER_WHEREAMI=Spielernamen SING_PLAYER_ENTER_NAME=Namen eingeben -SING_DIFFICULTY_DESC=Schwierigkeitsgrad auswählen +SING_DIFFICULTY_DESC=Schwierigkeitsgrad auswählen SING_DIFFICULTY_WHEREAMI=Schwierigkeitsgrad SING_DIFFICULTY_CONTINUE=zur Song-Auswahl SING_EASY=Einfach SING_MEDIUM=Mittel SING_HARD=Schwierig -SING_SONG_SELECTION_DESC=Wähle deinen Song +SING_SONG_SELECTION_DESC=Wähle deinen Song SING_SONG_SELECTION_WHEREAMI=Song-Auswahl SING_SONG_SELECTION_GOTO=Gehe zu .. SING_SONG_SELECTION=Song-Auswahl -SING_SONG_SELECTION_MENU=Menü +SING_SONG_SELECTION_MENU=Menü SING_SONG_SELECTION_PLAYLIST=Playlist SING_SONGS_IN_CAT=Songs PLAYLIST_CATTEXT=Playlist: %s @@ -140,27 +140,27 @@ SING_NOTES=Noten SING_GOLDEN_NOTES=Goldener Ton SING_PHRASE_BONUS=Phrasenbonus -SING_MENU=Hauptmenü +SING_MENU=Hauptmenü -SONG_SCORE=Song Punkte +SONG_SCORE=Songpunktzahl SONG_SCORE_WHEREAMI=Punkte -SING_SCORE_TONE_DEAF=Nichtskönner +SING_SCORE_TONE_DEAF=Nichtskönner SING_SCORE_AMATEUR=Amateur -SING_SCORE_WANNABE=Möchtegern +SING_SCORE_WANNABE=Möchtegern SING_SCORE_HOPEFUL=Fortgeschritten SING_SCORE_RISING_STAR=Sternchen -SING_SCORE_LEAD_SINGER=Hit-Künstler +SING_SCORE_LEAD_SINGER=Hit-Künstler SING_SCORE_SUPERSTAR=Superstar SING_SCORE_ULTRASTAR=UltraStar SING_TOP_5_CHARTS=Top-5-Spieler -SING_TOP_5_CHARTS_WHEREAMI=Top-5 -SING_TOP_5_CHARTS_CONTINUE=zur Song-Auswahl +SING_TOP_5_CHARTS_WHEREAMI=Top 5 +SING_TOP_5_CHARTS_CONTINUE=Zur Songauswahl POPUP_PERFECT=Perfekt! POPUP_AWESOME=Cool! -POPUP_GREAT=Gut! +POPUP_GREAT=Toll! POPUP_GOOD=Gut! POPUP_NOTBAD=O.K.! POPUP_BAD=Schlecht! @@ -170,41 +170,40 @@ POPUP_AWFUL=Grausam! IMPLODE_GLUE1=, IMPLODE_GLUE2= und -SONG_MENU_NAME_MAIN=Menü +SONG_MENU_NAME_MAIN=Menü SONG_MENU_PLAY=Singen -SONG_MENU_CHANGEPLAYERS=Spieler Wechseln +SONG_MENU_CHANGEPLAYERS=Spieler wechseln SONG_MENU_EDIT=Editor SONG_MENU_MODI=Einen Modus singen SONG_MENU_CANCEL=Abbrechen -SONG_MENU_NAME_PLAYLIST=Menü -SONG_MENU_PLAYLIST_ADD=Song hinzufügen -SONG_MENU_PLAYLIST_DEL=Song löschen +SONG_MENU_NAME_PLAYLIST=Menü +SONG_MENU_PLAYLIST_ADD=Song hinzufügen +SONG_MENU_PLAYLIST_DEL=Song löschen -SONG_MENU_NAME_PLAYLIST_ADD=Song hinzufügen +SONG_MENU_NAME_PLAYLIST_ADD=Song hinzufügen SONG_MENU_PLAYLIST_ADD_NEW=Zu neuer Playlist -SONG_MENU_PLAYLIST_ADD_EXISTING=Zu existierender Playlist +SONG_MENU_PLAYLIST_ADD_EXISTING=Zu bestehender Playlist SONG_MENU_PLAYLIST_NOEXISTING=Keine Playlist vorhanden SONG_MENU_NAME_PLAYLIST_NEW=Neue Playlist SONG_MENU_PLAYLIST_NEW_CREATE=Erstellen SONG_MENU_PLAYLIST_NEW_UNNAMED=Unbenannt -SONG_MENU_NAME_PLAYLIST_DELITEM=Wirklich löschen? +SONG_MENU_NAME_PLAYLIST_DELITEM=Wirklich löschen? SONG_MENU_YES=Ja SONG_MENU_NO=Nein -SONG_MENU_NAME_PLAYLIST_DEL=Playlist löschen? +SONG_MENU_NAME_PLAYLIST_LOAD=Playlist öffnen +SONG_MENU_PLAYLIST_LOAD=öffnen +SONG_MENU_PLAYLIST_DELCURRENT=Aktuelle Playlist löschen +SONG_MENU_NAME_PLAYLIST_DEL=Playlist löschen? -SONG_MENU_NAME_PLAYLIST_LOAD=Playlist öffnen -SONG_MENU_PLAYLIST_LOAD=Öffnen -SONG_MENU_PLAYLIST_DELCURRENT=Aktuelle Playlist löschen - -SONG_MENU_NAME_PARTY_MAIN=Party-Menü +SONG_MENU_NAME_PARTY_MAIN=Party-Menü SONG_MENU_JOKER=Joker -SONG_MENU_NAME_PARTY_JOKER=Joker spielen +SONG_MENU_NAME_PARTY_JOKER=Joker einsetzen SONG_JUMPTO_DESC=Song suchen SONG_JUMPTO_TYPE_DESC=Suchen in: @@ -213,7 +212,7 @@ SONG_JUMPTO_TYPE2=Titel SONG_JUMPTO_TYPE3=Artist SONG_JUMPTO_SONGSFOUND=%d Song(s) gefunden SONG_JUMPTO_NOSONGSFOUND=Keinen Song gefunden -SONG_JUMPTO_HELP=Text eingeben um zu suchen +SONG_JUMPTO_HELP=Suchtext eingeben SONG_JUMPTO_CATTEXT=Suche nach: %s PARTY_MODE=Party-Modus @@ -230,36 +229,36 @@ PARTY_TEAMS_PLAYER3=Spieler Team 3 PARTY_LEGEND_CONTINUE=weiter -PARTY_OPTIONS_DESC=Einstellungen für das Partyspiel. +PARTY_OPTIONS_DESC=Einstellungen für das Partyspiel. PARTY_OPTIONS_WHEREAMI=Party Optionen PARTY_PLAYER_DESC=Team- und Spielernamen eingeben. PARTY_PLAYER_WHEREAMI=Party Spielernamen PARTY_PLAYER_ENTER_NAME=Namen eingeben -PARTY_PLAYER_LEGEND_CONTINUE=Party-Spiel starten +PARTY_PLAYER_LEGEND_CONTINUE=Partyspiel starten -PARTY_ROUND_DESC=Die nächsten Spieler an die Mikros! -PARTY_ROUND_WHEREAMI=Party nächste Runde +PARTY_ROUND_DESC=Die nächsten Spieler an die Mikros! +PARTY_ROUND_WHEREAMI=Party nächste Runde PARTY_ROUND_LEGEND_CONTINUE=Runde starten PARTY_SONG_WHEREAMI=Party Song-Auswahl PARTY_SONG_LEGEND_CONTINUE=Singen -PARTY_SONG_MENU=Party-Menü +PARTY_SONG_MENU=Party-Menü PARTY_SCORE_DESC=Punkte der letzten Runde. PARTY_SCORE_WHEREAMI=Party Punkte PARTY_WIN_DESC=Gewinner des Partyspiels. PARTY_WIN_WHEREAMI=Party Gewinner -PARTY_WIN_LEGEND_CONTINUE=zurück zum Hauptmenü +PARTY_WIN_LEGEND_CONTINUE=Zurück zum Hauptmenü PARTY_ROUND=Runde PARTY_ROUND_WINNER=Sieger PARTY_NOTPLAYEDYET=Noch nicht gespielt PARTY_NOBODY=Niemand -NEXT_ROUND=Nächste Runde: +NEXT_ROUND=Nächste Runde: -PARTY_DISMISSED=Ausgeschieden +PARTY_DISMISSED=Ausgeschieden! PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=hat gewonnen! @@ -270,36 +269,36 @@ PLUGIN_UNTIL5000_NAME=Bis 5000 PLUGIN_UNTIL5000_DESC=Wer zuerst 5000 Punkte hat, gewinnt. PLUGIN_DUELL_NAME=Duell -PLUGIN_DUELL_DESC=Normales Spiel. Höchste Punktzahl gewinnt. - -PLUGIN_BLIND_NAME=Blind Mode -PLUGIN_BLIND_DESC=Erreiche blind die höchste Punktzahl. +PLUGIN_DUELL_DESC=Normales Spiel. Höchste Punktzahl gewinnt. PLUGIN_TEAMDUELL_NAME=Teamsingen PLUGIN_TEAMDUELL_DESC=Gib das Mikro weiter! +PLUGIN_BLIND_NAME=Blind Mode +PLUGIN_BLIND_DESC=Erreiche blind die höchste Punktzahl. + STAT_MAIN=Statistiken STAT_MAIN_DESC=Allgemein STAT_MAIN_WHEREAMI=Statistiken STAT_OVERVIEW_INTRO=%0:s Statistiken. \n Letzter Reset am %1:.2d.%2:.2d.%3:d -STAT_OVERVIEW_SONG=%0:d Songs(%3:d mit Video), davon wurden %1:d schon einmal gesungen und %2:d noch nicht. \n Der am häufigsten gesungene Song ist %5:s von %4:s. -STAT_OVERVIEW_PLAYER=Seit dem letzten Reset haben %0:d verschiedene Spieler gesungen. \n Der beste Spieler ist %1:s mit %2:d Punkten. \n Die höchste Punktzahl, %4:d, wurde von %3:s erreicht. +STAT_OVERVIEW_SONG=%0:d Songs(%3:d mit Video), davon wurden %1:d schon einmal gesungen und %2:d noch nicht. \n Der am häufigsten gesungene Song ist %5:s von %4:s. +STAT_OVERVIEW_PLAYER=Seit dem letzten Reset haben %0:d verschiedene Spieler gesungen. \n Der beste Spieler ist %1:s mit %2:d Punkten. \n Die höchste Punktzahl, %4:d, wurde von %3:s erreicht. STAT_DETAIL=Statistiken STAT_DETAIL_WHEREAMI=Detaillierte Statistiken -STAT_NEXT=Nächste Seite +STAT_NEXT=Nächste Seite STAT_PREV=Vorherige Seite STAT_REVERSE=Umkehren -STAT_PAGE=Seite %0:d von %1:d \n (%2:d von %3:d Einträgen) +STAT_PAGE=Seite %0:d von %1:d \n (%2:d von %3:d Einträgen) STAT_DESC_SCORES=Highscores STAT_DESC_SCORES_REVERSED=Lowscores STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) -STAT_DESC_SINGERS=Beste Sänger -STAT_DESC_SINGERS_REVERSED=Schlechteste Sänger +STAT_DESC_SINGERS=Beste Sänger +STAT_DESC_SINGERS_REVERSED=Schlechteste Sänger STAT_FORMAT_SINGERS=%0:s \n Durchschnittliche Punktzahl: %1:d STAT_DESC_SONGS=Beliebteste Songs diff --git a/unicode/game/languages/Greek.ini b/unicode/game/languages/Greek.ini new file mode 100644 index 00000000..cf83332f --- /dev/null +++ b/unicode/game/languages/Greek.ini @@ -0,0 +1,323 @@ +;Leo 21 +[Text] +SING_LOADING=Öüñôùíåé... + +SING_CHOOSE_MODE=ÅðéëïãÞ ôñüðïõ ðáé÷íéäéïý +SING_SING=Ôñáãïýäçóôå +SING_SING_DESC=ÃñÞãïñï ðáé÷íßäé: ÔñáãïõäÞóôå óïëï Þ íôïõÝôï + +SING_MULTI="ÐÜñôõ" +SING_MULTI_DESC=ÔñáãïõäÞóôå óå ðáé÷íßäé "ÐÜñôõ" + +SING_TOOLS=Åñãáëåßá + +SING_STATS=ÓôáôéóôéêÜ +SING_STATS_DESC=Äåßôå ôá óôáôéóôéêÜ + +SING_EDITOR=Äçìéïõñãßá +SING_EDITOR_DESC=ÖôéÜîôå ôï äéêü óáò ôñáãïýäé + +SING_GAME_OPTIONS=ÅðéëïãÝò ðáé÷íéäéïý +SING_GAME_OPTIONS_DESC=ÁëëÜîôå ôéò åðéëïãÝò ôïõ ðáé÷íéäéïý + +SING_EXIT=¸îïäïò +SING_EXIT_DESC=¸îïäïò áðï ôï ðáé÷íßäé + +SING_OPTIONS=ÅðéëïãÝò +SING_OPTIONS_DESC=ÁëëÜîôå ôéò åðéëïãÝò +SING_OPTIONS_WHEREAMI=ÅðéëïãÝò + +SING_OPTIONS_GAME=Ðáé÷íßäé +SING_OPTIONS_GRAPHICS=ÃñáöéêÜ +SING_OPTIONS_SOUND=¹÷ïò +SING_OPTIONS_LYRICS=Óôß÷ïé +SING_OPTIONS_THEMES=ÈÝìáôá +SING_OPTIONS_RECORD=Ç÷ïãñÜöçóç +SING_OPTIONS_ADVANCED=Ãéá ðñï÷ùñçìÝíïõò +SING_OPTIONS_EXIT=Ðßóù + +SING_OPTIONS_GAME_WHEREAMI=ÅðéëïãÝò ðáé÷íéäéïý +SING_OPTIONS_GAME_DESC=Êýñéåò åðéëïãÝò ðáé÷íéäéïý +SING_OPTIONS_GAME_PLAYERS=Ðáß÷ôåò +SING_OPTIONS_GAME_DIFFICULTY=Äõóêïëßá +SING_OPTIONS_GAME_LANGUAGE=Ãëþóóá +SING_OPTIONS_GAME_TABS=ÅôéêÝôåò +SING_OPTIONS_GAME_SORTING=Ôáîéíüìéóç +SING_OPTIONS_GAME_DEBUG=Áðïóõìöüñçóç + +SING_OPTIONS_GRAPHICS_WHEREAMI=ÅðéëïãÝò ãñáöéêþí +SING_OPTIONS_GRAPHICS_DESC=Ñõèìßóåéò ãñáöéêþí +SING_OPTIONS_GRAPHICS_RESOLUTION=ÁíÜëõóç +SING_OPTIONS_GRAPHICS_FULLSCREEN=ÐëÞñçò ïèüíç +SING_OPTIONS_GRAPHICS_DEPTH=ÂÜèïò +SING_OPTIONS_GRAPHICS_VISUALIZER=Êéíïýìåíï öüíôï +SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Ïóêéëïóêüðéï +SING_OPTIONS_GRAPHICS_LINEBONUS=Ìðüíïõò ãñáììÞò +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=ÌÝãåèïò âßíôåï + +SING_OPTIONS_SOUND_WHEREAMI=ÅðéëïãÝò Þ÷ïõ +SING_OPTIONS_SOUND_DESC=ÅðéëïãÝò Þ÷ïõ +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=¹÷ïò ìéêñïöþíïõ +SING_OPTIONS_SOUND_BACKGROUNDMUSIC=ÌïõóéêÞ óôï ìåíïý +SING_OPTIONS_SOUND_MIC_BOOST=Éó÷ýò ìéêñïöþíïõ +SING_OPTIONS_SOUND_CLICK_ASSIST=ÂïÞèåéá ìå êëßê +SING_OPTIONS_SOUND_BEAT_CLICK=ÂïÞèåéá ñõèìïý +SING_OPTIONS_SOUND_THRESHOLD=Åõáéóèçóßá ìéêñïöþíïõ +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Ìå äýï ðáß÷ôåò +SING_OPTIONS_SOUND_PREVIEWVOLUME=¸íôáóç ðñïåðéóêüðéóçò +SING_OPTIONS_SOUND_PREVIEWFADING=ÓâÞóéìï ðñïåðéóêüðéóçò + +SING_OPTIONS_LYRICS_WHEREAMI=ÅðéëïãÝò óôß÷ùí +SING_OPTIONS_LYRICS_DESC=Ñõèìßóéåò óôß÷ùí +SING_OPTIONS_LYRICS_FONT=ÃñáììáôïóåéñÜ +SING_OPTIONS_LYRICS_EFFECT=ÅöÝ +SING_OPTIONS_LYRICS_SOLMIZATION=ÅìöÜíéóç íüôáò áíôß óôß÷ùí +SING_OPTIONS_LYRICS_NOTELINES=ÐåíôÜãñáììï + +SING_OPTIONS_THEMES_WHEREAMI=ÅðéëïãÝò èåìÜôùí +SING_OPTIONS_THEMES_DESC=Ñõèìßóåéò èåìÜôùí +SING_OPTIONS_THEMES_THEME=ÈÝìá +SING_OPTIONS_THEMES_SKIN=ÌïñöÞ èÝìáôïò +SING_OPTIONS_THEMES_COLOR=×ñþìá + +SING_OPTIONS_RECORD_WHEREAMI=ÅðéëïãÝò ìéêñïöþíïõ +SING_OPTIONS_RECORD_DESC=Ñõèìßóåéò ìéêñïöþíïõ +SING_OPTIONS_RECORD_CARD=ÊÜñôá Þ÷ïõ +SING_OPTIONS_RECORD_INPUT=ÅðéëïãÞ ìéêñïöþíïõ +SING_OPTIONS_RECORD_CHANNEL=ÊáíÜëé + +SING_OPTIONS_ADVANCED_WHEREAMI=ÅðéëïãÝò ãéá ðñï÷ùñçìÝíïõò +SING_OPTIONS_ADVANCED_DESC=Ñõèìßóåéò ãéá ðñï÷ùñçìÝíïõò +SING_OPTIONS_ADVANCED_EFFECTSING=ÅöÝ ôñáãïõäéïý +SING_OPTIONS_ADVANCED_SCREENFADE=ÓâÞóéìï åéêüíáò +SING_OPTIONS_ADVANCED_LOADANIMATION=Öüñôùóç êéíïýìåíùí åéêüíùí +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=ÅñùôÞóåéò áóöáëåßáò +SING_OPTIONS_ADVANCED_LINEBONUS=Ìðüíïõò ãñáììÞò +SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= +SING_OPTIONS_ADVANCED_ONSONGCLICK=ÌåôÜ áðï ôçí åðéëïãÞ ôñáãïõäéïý +SING_OPTIONS_ADVANCED_PARTYPOPUP=Áõôüìáôï ìåíïý "ÐÜñôõ" + +SING_EDIT=Äçìéïõñãßá +SING_EDIT_MENU_DESCRIPTION=ÖôéÜîôå ôï äéêü óáò ôñáãïýäé + +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=ÅéóáãùãÞ áñ÷åßïõ êåéìÝíïõ +SING_EDIT_BUTTON_DESCRIPTION_EXIT=Ðßóù +SING_EDIT_BUTTON_CONVERT=ÅéóáãùãÞ +SING_EDIT_BUTTON_EXIT=Ðßóù + +SING_EDIT_NAVIGATE=ÅîåñÝõíçóç +SING_EDIT_SELECT=ÅðÝëåîå +SING_EDIT_EXIT=Ðßóù + +SING_LEGEND_SELECT=ÅðÝëåîå +SING_LEGEND_NAVIGATE=ÅîåñÝõíçóç +SING_LEGEND_CONTINUE=ÓõíÝ÷éóå +SING_LEGEND_ESC=Ðßóù + +SING_PLAYER_DESC=ÃñÜøå ïíüìá(ôá) ðáé÷ô-ç/ùí +SING_PLAYER_WHEREAMI=Ïíüìáôá ðáé÷ôþí +SING_PLAYER_ENTER_NAME=ÃñÜøå üíïìá + +SING_DIFFICULTY_DESC=ÄéÜëåîå äõóêïëßá +SING_DIFFICULTY_WHEREAMI=Äõóêïëßá +SING_DIFFICULTY_CONTINUE=Óôçí åðéëïãÞ ôñáãïõäéïý +SING_EASY=Åýêïëï +SING_MEDIUM=ÌÝôñéï +SING_HARD=Äýóêïëï + +SING_SONG_SELECTION_DESC=ÄéÜëåîå ôñáãïýäé +SING_SONG_SELECTION_WHEREAMI=ÅðéëïãÞ ôñáãïõäéïý +SING_SONG_SELECTION_GOTO=ÐÞãáéíå óå... +SING_SONG_SELECTION=ÅðéëïãÞ ôñáãïõäéïõ +SING_SONG_SELECTION_MENU=Ìåíïý +SING_SONG_SELECTION_PLAYLIST=Ëßóôá +SING_SONGS_IN_CAT=Ôñáãïýäéá +PLAYLIST_CATTEXT=Ëßóôá: %s + +SING_TIME=×ñüíïò +SING_TOTAL=Óýíïëï +SING_MODE=Ôñáãïýäá óüëï +SING_NOTES=Íüôåò +SING_GOLDEN_NOTES=×ñõóÝò íüôåò +SING_PHRASE_BONUS=Ìðüíïõò ãñáììÞò + +SING_MENU=Êýñéï ìåíïý + +SONG_SCORE=Âáèìïëïãßá ôñáãïõäéïý +SONG_SCORE_WHEREAMI=Âáèìïëïãßá + +SING_SCORE_TONE_DEAF=Êáêïöùíßî +SING_SCORE_AMATEUR=Áñ÷Üñéïò +SING_SCORE_WANNABE=Ôï èÝëåé... +SING_SCORE_HOPEFUL=Åëðéäïöüñïò +SING_SCORE_RISING_STAR=Áíåñ÷üìåíï áóôÝñé +SING_SCORE_LEAD_SINGER=Åðáããåëìáôßáò +SING_SCORE_SUPERSTAR=Óïýðåñóôáñ +SING_SCORE_ULTRASTAR=Áðüëõôïò óôáñ + +SING_TOP_5_CHARTS=Ïé êáëýôåñïé 5 ðáß÷ôåò +SING_TOP_5_CHARTS_WHEREAMI=Ôïð 5 +SING_TOP_5_CHARTS_CONTINUE=Óôçí åðéëïãÞ ôñáãïõäéïý + +POPUP_PERFECT=ÔÝëåéá! +POPUP_AWESOME=ÖáíôáóôéêÜ! +POPUP_GREAT=Ðïëý êáëÜ! +POPUP_GOOD=ÊáëÜ! +POPUP_NOTBAD=Ï÷é Üó÷çìá! +POPUP_BAD=¢ó÷çìá! +POPUP_POOR=ðïëý Üó÷çìá! +POPUP_AWFUL=Áðáßóéá! + +IMPLODE_GLUE1=, +IMPLODE_GLUE2= êáé + +SONG_MENU_NAME_MAIN=Ìåíïý ôñáãïõäéþí +SONG_MENU_PLAY=ÔñáãïõäÞóôå +SONG_MENU_CHANGEPLAYERS=ÁëëÜîôå ðáß÷ôåò +SONG_MENU_EDIT=Åðåîåñãáóßá +SONG_MENU_MODI=ÔñáãïõäÞóôå ìéÜ ôñïðïðïßçóç +SONG_MENU_CANCEL=Áêýñùóç + +SONG_MENU_NAME_PLAYLIST=Ìåíïý ôñáãïõäéïý +SONG_MENU_PLAYLIST_ADD=Ðñüóèåóå ôñáãïýäé +SONG_MENU_PLAYLIST_DEL=ÄéÝãñáøå ôñáãïýäé + +SONG_MENU_NAME_PLAYLIST_ADD=Ðñüóèåóå ôñáãïýäé +SONG_MENU_PLAYLIST_ADD_NEW=Óå íÝá ëßóôá +SONG_MENU_PLAYLIST_ADD_EXISTING=Óå õðÜñ÷ïõóá ëßóôá +SONG_MENU_PLAYLIST_NOEXISTING=Äåí õðÜñ÷åé äéáèÝóéìç ëßóôá + +SONG_MENU_NAME_PLAYLIST_NEW=ÍÝá ëßóôá +SONG_MENU_PLAYLIST_NEW_CREATE=Öôéáîå íÝá +SONG_MENU_PLAYLIST_NEW_UNNAMED=×ùñßò üíïìá + +SONG_MENU_NAME_PLAYLIST_DEL=ÄéáãñáöÞ? +SONG_MENU_YES=Íáé +SONG_MENU_NO=¼÷é + +SONG_MENU_NAME_PLAYLIST_LOAD=¢íïéîå ìéá ëßóôá +SONG_MENU_PLAYLIST_LOAD=¢íïéîå +SONG_MENU_PLAYLIST_DELCURRENT=ÄéÝãñáøå áõôÞ ôç ëßóôá + +SONG_MENU_NAME_PLAYLIST_DEL=ÄéáãñáöÞ ëßóôáò? + +SONG_MENU_NAME_PARTY_MAIN=Ìåíïý "ÐÜñôõ" +SONG_MENU_JOKER=ÌðáëáíôÝñ + +SONG_MENU_NAME_PARTY_JOKER=ÅðéëïãÞ ìðáëáíôÝñ + +SONG_JUMPTO_DESC=ØÜîå ôñáãïýäé +SONG_JUMPTO_TYPE_DESC=ØÜîå ãéá: +SONG_JUMPTO_TYPE1=¼ëá +SONG_JUMPTO_TYPE2=Ôßôëïò +SONG_JUMPTO_TYPE3=ÊáëëéôÝ÷íçò +SONG_JUMPTO_SONGSFOUND=%d Ôñáãïýäé(á) âñÝèçêáí +SONG_JUMPTO_NOSONGSFOUND=Äåí âñÝèçêå ôñáãïýäé +SONG_JUMPTO_HELP=ÃñÜøå êåßìåíï ãéá áíáæÞôçóç +SONG_JUMPTO_CATTEXT=ÁíáæÞôçóç ãéá: %s + +PARTY_MODE=Åßäïò ðáé÷íéäéïý "ÐÜñôõ" +PARTY_DIFFICULTY=Äõóêïëßá +PARTY_PLAYLIST=Ðáßîå ìå ìßá ëßóôá +PARTY_PLAYLIST_ALL=¼ëá ôá ôñáãïýäéá +PARTY_PLAYLIST_CATEGORY=ÖÜêåëïò +PARTY_PLAYLIST_PLAYLIST=Ëßóôá +PARTY_ROUNDS=Ãýñïé +PARTY_TEAMS=ÏìÜäåò +PARTY_TEAMS_PLAYER1=Ðáß÷ôçò ïìÜäá1 +PARTY_TEAMS_PLAYER2=Ðáß÷ôçò ïìÜäá2 +PARTY_TEAMS_PLAYER3=Ðáß÷ôçò ïìÜäá3 + +PARTY_LEGEND_CONTINUE=ÓõíÝ÷åéá + +PARTY_OPTIONS_DESC=ÅðéëïãÝò ãéá ôï ðáé÷íßäé "ÐÜñôõ" +PARTY_OPTIONS_WHEREAMI=ÅðéëïãÝò "ÐÜñôõ" + +PARTY_PLAYER_DESC=ÃñÜøå ïíüìáôá ðáé÷ôþí êáé ïìÜäùí +PARTY_PLAYER_WHEREAMI=Ïíüìáôá "ÐÜñôõ" +PARTY_PLAYER_ENTER_NAME=ÃñÜøå ïíüìáôá +PARTY_PLAYER_LEGEND_CONTINUE=Îåêßíá ôï ðáé÷íßäé "ÐÜñôõ" + +PARTY_ROUND_DESC=Åðüìåíïé ðáß÷ôåò +PARTY_ROUND_WHEREAMI=Åðüìåíïò ãýñïò "ÐÜñôõ" +PARTY_ROUND_LEGEND_CONTINUE=Îåêßíá ôï ãýñï + +PARTY_SONG_WHEREAMI=ÅðéëïãÞ ôñáãïõäéïý "ÐÜñôõ" +PARTY_SONG_LEGEND_CONTINUE=ÔñáãïõäÞóôå +PARTY_SONG_MENU=Ìåíïý "ÐÜñôõ" + +PARTY_SCORE_DESC=Âáèìïëïãßá ôåëåõôáßïõ ãýñïõ +PARTY_SCORE_WHEREAMI=Âáèìïß "ÐÜñôõ" + +PARTY_WIN_DESC=ÍéêçôÞò ôïõ ðáé÷íéäéïý "ÐÜñôõ" +PARTY_WIN_WHEREAMI=ÍéêçôÞò "ÐÜñôõ" +PARTY_WIN_LEGEND_CONTINUE=ÅðéóôñïöÞ óôï êýñéï ìåíïý + +PARTY_ROUND=Ãýñïò +PARTY_ROUND_WINNER=ÍéêçôÞò +PARTY_NOTPLAYEDYET=Äåí ðáß÷ôçêå áêüìç +PARTY_NOBODY=Êáíåßò +NEXT_ROUND=Åðüìåíïò Ãýñïò: + +PARTY_DISMISSED=ÁðïâïëÞ! +PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS2=Íßêçóå! + +PLUGIN_HDL_NAME=Ìåßíå ðÜíù áðü ôç ìðÜñá! +PLUGIN_HDL_DESC=Ìåßíå ðÜíù áðü ôç ìðÜñá ðïõ åìöáíßæåôáé + +PLUGIN_UNTIL5000_NAME=ÌÝ÷ñé 5000 ðüíôïõò +PLUGIN_UNTIL5000_DESC=¼ðïéïò öôÜóåé ôïõò 5000 ðüíôïõò êåñäßæåé + +PLUGIN_DUELL_NAME=Ìïíïìá÷ßá +PLUGIN_DUELL_DESC=ÔñáãïõäÞóôå óå ìïíïìá÷ßá ìÝ÷ñé ôïõò 10000 ðüíôïõò + +PLUGIN_TEAMDUELL_NAME=Ìïíïìá÷ßá ïìÜäùí +PLUGIN_TEAMDUELL_DESC=Äþóå ôï ìéêñüöùíï! + +PLUGIN_BLIND_NAME=Óôá ôõöëÜ +PLUGIN_BLIND_DESC=Ìïíïìá÷ßá ÷ùñßò íá âëÝðåôå ôéò íüôåò + +STAT_MAIN=ÓôáôéóôéêÜ +STAT_MAIN_DESC=Êýñéá +STAT_MAIN_WHEREAMI=ÓôáôéóôéêÜ + +STAT_OVERVIEW_INTRO=%0:s ÓôáôéóôéêÜ. \n Ôåëåõôáßá Ýîïäïò óôßò %2:.2d.%1:.2d.%3:d +STAT_OVERVIEW_SONG=%0:d ôñáãïýäéá(%3:d ìå âßíôåï), Üðï ôá ïðïßá %1:d Ý÷ïõí ðáé÷ôåß Þäç êáé %2:d äåí Ý÷ïõí ðáé÷ôåß áêüìç.\n Ôï ðéï äçìïöéëÝò ôñáãïýäé åßíáé %5:s áðü %4:s. +STAT_OVERVIEW_PLAYER=Áðü ôï ôåëåõôáßï óâÞóéìï õðÜñ÷åé-ïõí %0:d ðáß÷ôçò-åò .\n Ï êáëýôåñïò ðáß÷ôçò åßíáé %1:s ìå ìÝóï üñï âáèìïëïãßáò %2:d âáèìïýò.\n %3:s Ýêáíå ôç ìåãáëýôåñç âáèìïëïãßá ìå %4:d âáèìïýò. + +STAT_DETAIL=ÓôáôéóôéêÜ +STAT_DETAIL_WHEREAMI=ËåðôïìåñÞ óôáôéóôéêÜ + +STAT_NEXT=Åðüìåíç Óåëßäá +STAT_PREV=Ðñïçãïýìåíç óåëßäá +STAT_REVERSE=Áíôßóôñïöá +STAT_PAGE=Seite %0:d áðü %1:d óåëßäåò\n (%2:d of %3:d åéóáãùãÝò) + +STAT_DESC_SCORES=Õøçëüôåñåò Âáèìïëïãßåò +STAT_DESC_SCORES_REVERSED=×áìçëüôåñåò âáèìïëïãßåò +STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) + +STAT_DESC_SINGERS=Êáëýôåñïé ôñáãïõäéóôÝò +STAT_DESC_SINGERS_REVERSED=×åéñüôåñïé ôñáãïõäéóôÝò +STAT_FORMAT_SINGERS=%0:s \n ÌÝóïò üñïò âáèìïëïãßáò: %1:d + +STAT_DESC_SONGS=Ðéï äçìïöéëÞ ôñáãïýäéá +STAT_DESC_SONGS_REVERSED=Ëéãüôåñï äçìïöéëÞ ôñáãïýäéá +STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx ôñáãïõäÞèçêáí + +STAT_DESC_BANDS=Ðéï äçìïöéëÞò ìðÜíôåò +STAT_DESC_BANDS_REVERSED=Ëéãüôåñï äçìïöéëÞò ìðÜíôåò +STAT_FORMAT_BANDS=%0:s \n %1:dx ôñáãïõäÞèçêáí + +MSG_ERROR_TITLE=ÓöÜëìá +MSG_QUESTION_TITLE=Åñþôçóç +MSG_QUIT_USDX=¸îïäïò áðü ôï ðáé÷íßäé? +MSG_END_PARTY=¸îïäïò áðï ôï ðáé÷íßäé "ÐÜñôõ"? +ERROR_NO_SONGS=Äåí öïñôþèçêáí ôñáãïýäéá +ERROR_NO_PLUGINS=Äåí öïñôþèçêáí âïçèçôéêÝò åöáñìïãÝò +ERROR_CORRUPT_SONG=Ôá ôñáãïýäéá äåí Þôáí äõíáôü íá öïñôþóïõí +ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Ôï ôñáãïýäé äåí Þôáí äõíáôü íá öïñôþóåé: Ôï áñ÷åßï äåí âñÝèçêå +ERROR_CORRUPT_SONG_NO_NOTES=Ôï ôñáãïýäé äåí Þôáí äõíáôü íá öïñôþóåé: Äåí âñÝèçêáí íüôåò +ERROR_CORRUPT_SONG_NO_BREAKS=Ôï ôñáãïýäé äåí Þôáí äõíáôü íá öïñôþóåé: Äåí âñÝèçêáí êåíÜ áíÜìåóá óôéò íüôåò +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ôï ôñáãïýäé äåí Þôáí äõíáôü íá öïñôþóåé: ËÜèïò óôçí åðéêüëçóç ôçò ãñáììÞò %0:d
\ No newline at end of file diff --git a/unicode/game/languages/Italian.ini b/unicode/game/languages/Italian.ini index 1d319203..d814041f 100644 --- a/unicode/game/languages/Italian.ini +++ b/unicode/game/languages/Italian.ini @@ -1,106 +1,110 @@ [Text] SING_LOADING=Caricamento... -SING_CHOOSE_MODE=scegli modalita' -SING_SING=canto -SING_SING_DESC=partita rapida: canta da solo o in duetto +SING_CHOOSE_MODE=scegli modalità +SING_SING=canta +SING_SING_DESC=quick game: canta da solo o duetta SING_MULTI=party -SING_MULTI_DESC=canta in modalita' party +SING_MULTI_DESC=canta in modalità party SING_TOOLS=strumenti SING_STATS=statistiche -SING_STATS_DESC=visualizza le statistiche +SING_STATS_DESC=guarda le statistiche SING_EDITOR=editor -SING_EDITOR_DESC=crea nuove canzoni +SING_EDITOR_DESC=crea la tua canzone -SING_GAME_OPTIONS=opzioni di gioco +SING_GAME_OPTIONS=impostazioni di gioco SING_GAME_OPTIONS_DESC=cambia le impostazioni di gioco -SING_EXIT=esci -SING_EXIT_DESC=esci dal gioco +SING_EXIT=chiudi +SING_EXIT_DESC=chiudi il gioco -SING_OPTIONS=opzioni -SING_OPTIONS_DESC=cambia le impostazioni -SING_OPTIONS_WHEREAMI=Opzioni +SING_OPTIONS=impostazioni +SING_OPTIONS_DESC=cambia impostazioni +SING_OPTIONS_WHEREAMI=Impostazioni SING_OPTIONS_GAME=gioco SING_OPTIONS_GRAPHICS=grafica -SING_OPTIONS_SOUND=sonoro +SING_OPTIONS_SOUND=suono SING_OPTIONS_LYRICS=testi SING_OPTIONS_THEMES=temi -SING_OPTIONS_RECORD=registrazione +SING_OPTIONS_RECORD=registrazioni SING_OPTIONS_ADVANCED=avanzate SING_OPTIONS_EXIT=indietro -SING_OPTIONS_GAME_WHEREAMI=Opzioni Gioco -SING_OPTIONS_GAME_DESC=impostazioni di gioco generali +SING_OPTIONS_GAME_WHEREAMI=Impostazioni Gioco +SING_OPTIONS_GAME_DESC=impostazioni generali di gioco SING_OPTIONS_GAME_PLAYERS=Giocatori -SING_OPTIONS_GAME_DIFFICULTY=Difficolta' +SING_OPTIONS_GAME_DIFFICULTY=Difficultà SING_OPTIONS_GAME_LANGUAGE=Lingua -SING_OPTIONS_GAME_TABS=Tab -SING_OPTIONS_GAME_SORTING=Catalogazione +SING_OPTIONS_GAME_TABS=Schede +SING_OPTIONS_GAME_SORTING=Ordinamento SING_OPTIONS_GAME_DEBUG=Debug -SING_OPTIONS_GRAPHICS_WHEREAMI=Opzioni Grafica -SING_OPTIONS_GRAPHICS_DESC=impostazioni della grafica +SING_OPTIONS_GRAPHICS_WHEREAMI=Impostazioni Grafica +SING_OPTIONS_GRAPHICS_DESC=impostazioni grafica SING_OPTIONS_GRAPHICS_RESOLUTION=Risoluzione -SING_OPTIONS_GRAPHICS_FULLSCREEN=Schermo intero -SING_OPTIONS_GRAPHICS_DEPTH=Profondita' Colore +SING_OPTIONS_GRAPHICS_FULLSCREEN=Fullscreen +SING_OPTIONS_GRAPHICS_DEPTH=Profondità +SING_OPTIONS_GRAPHICS_VISUALIZER=Visualizzazioni SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Oscilloscopio -SING_OPTIONS_GRAPHICS_LINEBONUS=Bonus Linea -SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Dimensione video - -SING_OPTIONS_SOUND_WHEREAMI=Opzioni Sonoro -SING_OPTIONS_SOUND_DESC=impostazioni del sonoro -SING_OPTIONS_SOUND_MIC_BOOST=Boost microfono -SING_OPTIONS_SOUND_CLICK_ASSIST=Click aiuto -SING_OPTIONS_SOUND_BEAT_CLICK=Click battuta -SING_OPTIONS_SOUND_THRESHOLD=Tolleranza -SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Modalita' due giocatori +SING_OPTIONS_GRAPHICS_LINEBONUS=Linee Bonus +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Grandezza video + +SING_OPTIONS_SOUND_WHEREAMI=Impostazioni Suono +SING_OPTIONS_SOUND_DESC=impostazioni suono +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Playback Microfono +SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Musica in background +SING_OPTIONS_SOUND_MIC_BOOST=Potenzia microfono +SING_OPTIONS_SOUND_CLICK_ASSIST=Click di Assistenza +SING_OPTIONS_SOUND_BEAT_CLICK=Click di Beat +SING_OPTIONS_SOUND_THRESHOLD=Soglia +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Modalità due giocatori SING_OPTIONS_SOUND_PREVIEWVOLUME=Volume Anteprima -SING_OPTIONS_SOUND_PREVIEWFADING=Dissolvenza Ant. +SING_OPTIONS_SOUND_PREVIEWFADING=Fading Anteprima -SING_OPTIONS_LYRICS_WHEREAMI=Opzioni Testi -SING_OPTIONS_LYRICS_DESC=impostazioni dei testi -SING_OPTIONS_LYRICS_FONT=Carattere -SING_OPTIONS_LYRICS_EFFECT=Effetto +SING_OPTIONS_LYRICS_WHEREAMI=Impostazioni Testi +SING_OPTIONS_LYRICS_DESC=impostazioni testi +SING_OPTIONS_LYRICS_FONT=Font +SING_OPTIONS_LYRICS_EFFECT=Effetti SING_OPTIONS_LYRICS_SOLMIZATION=Solfeggio +SING_OPTIONS_LYRICS_NOTELINES=Pentagramma -SING_OPTIONS_THEMES_WHEREAMI=Opzioni Temi -SING_OPTIONS_THEMES_DESC=impostazioni temi e maschere -SING_OPTIONS_THEMES_THEME=Tema -SING_OPTIONS_THEMES_SKIN=Maschera +SING_OPTIONS_THEMES_WHEREAMI=Impostazioni Temi +SING_OPTIONS_THEMES_DESC=impostazioni temi e skin +SING_OPTIONS_THEMES_THEME=Temi +SING_OPTIONS_THEMES_SKIN=Skin SING_OPTIONS_THEMES_COLOR=Colore -SING_OPTIONS_RECORD_WHEREAMI=Opzioni Registrazione -SING_OPTIONS_RECORD_DESC=impostazioni del microfono -SING_OPTIONS_RECORD_CARD=Scheda audio -SING_OPTIONS_RECORD_INPUT=Ingresso +SING_OPTIONS_RECORD_WHEREAMI=Impostazioni Registrazione +SING_OPTIONS_RECORD_DESC=impostazioni microfoni +SING_OPTIONS_RECORD_CARD=Scheda Audio +SING_OPTIONS_RECORD_INPUT=Input SING_OPTIONS_RECORD_CHANNEL=Canale -SING_OPTIONS_ADVANCED_WHEREAMI=Options Avanzate +SING_OPTIONS_ADVANCED_WHEREAMI=Impostazioni Avanzate SING_OPTIONS_ADVANCED_DESC=impostazioni avanzate -SING_OPTIONS_ADVANCED_EFFECTSING=Effetti cantato -SING_OPTIONS_ADVANCED_SCREENFADE=Dissolvenza -SING_OPTIONS_ADVANCED_LOADANIMATION=Carica Animazione -SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Conferme -SING_OPTIONS_ADVANCED_LINEBONUS=Bonus di linea -SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= -SING_OPTIONS_ADVANCED_ONSONGCLICK=se Sel. Canzone -SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto MenuParty - -SING_EDIT=editor -SING_EDIT_MENU_DESCRIPTION=crea nuove canzoni - -SING_EDIT_BUTTON_DESCRIPTION_CONVERT=importa il testo da uno schedario di midi +SING_OPTIONS_ADVANCED_EFFECTSING=Effetti del canto +SING_OPTIONS_ADVANCED_SCREENFADE=Fading dello schermo +SING_OPTIONS_ADVANCED_LOADANIMATION=Animazione Caricamento +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Domande di Sicurezza +SING_OPTIONS_ADVANCED_LINEBONUS=Linee Bonus +SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Contatore +SING_OPTIONS_ADVANCED_ONSONGCLICK=dopo Canzone Seleziona +SING_OPTIONS_ADVANCED_PARTYPOPUP=Menu Party automatico + +SING_EDIT=Editor +SING_EDIT_MENU_DESCRIPTION=crea la tua canzone + +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Importa testo dal file midi SING_EDIT_BUTTON_DESCRIPTION_EXIT=indietro -SING_EDIT_BUTTON_CONVERT=importa +SING_EDIT_BUTTON_CONVERT=Importa SING_EDIT_BUTTON_EXIT=indietro -SING_EDIT_NAVIGATE=naviga +SING_EDIT_NAVIGATE=navigare SING_EDIT_SELECT=seleziona SING_EDIT_EXIT=indietro @@ -109,21 +113,21 @@ SING_LEGEND_NAVIGATE=naviga SING_LEGEND_CONTINUE=continua SING_LEGEND_ESC=indietro -SING_PLAYER_DESC=inserisci nome giocatore/i -SING_PLAYER_WHEREAMI=Nomigiocatori +SING_PLAYER_DESC=inserisci nome/i giocatore/i +SING_PLAYER_WHEREAMI=Nomi giocatori SING_PLAYER_ENTER_NAME=inserisci nome -SING_DIFFICULTY_DESC=seleziona difficolta' -SING_DIFFICULTY_WHEREAMI=Difficolta' -SING_DIFFICULTY_CONTINUE=a selezione canzone +SING_DIFFICULTY_DESC=seleziona difficoltà +SING_DIFFICULTY_WHEREAMI=Difficultà +SING_DIFFICULTY_CONTINUE=per cantare seleziona SING_EASY=Facile -SING_MEDIUM=Medio +SING_MEDIUM=Media SING_HARD=Difficile SING_SONG_SELECTION_DESC=scegli la tua canzone -SING_SONG_SELECTION_WHEREAMI=Seleziona Canzone -SING_SONG_SELECTION_GOTO=vai a... -SING_SONG_SELECTION=selezione canzone +SING_SONG_SELECTION_WHEREAMI=Selezione Canzone +SING_SONG_SELECTION_GOTO=vai a .. +SING_SONG_SELECTION=seleziona canzone SING_SONG_SELECTION_MENU=menu SING_SONG_SELECTION_PLAYLIST=playlist SING_SONGS_IN_CAT=Canzoni @@ -131,62 +135,63 @@ PLAYLIST_CATTEXT=Playlist: %s SING_TIME=TEMPO SING_TOTAL=totale -SING_MODE=canto da solo +SING_MODE=canta solo SING_NOTES=note -SING_GOLDEN_NOTES=note d'oro -SING_PHRASE_BONUS=bonus di linea +SING_GOLDEN_NOTES=note dorate +SING_PHRASE_BONUS=linee bonus SING_MENU=Menu Principale -SONG_SCORE=punteggio canzoni -SONG_SCORE_WHEREAMI=Punteggio +SONG_SCORE=punti canzone +SONG_SCORE_WHEREAMI=Punti -SING_SCORE_TONE_DEAF=Campana -SING_SCORE_AMATEUR=Dilettante -SING_SCORE_RISING_STAR=Stella nascente -SING_SCORE_LEAD_SINGER=Cantante solista -SING_SCORE_HIT_ARTIST=Artista di successo +SING_SCORE_TONE_DEAF=Tone Deaf +SING_SCORE_AMATEUR=Amatore +SING_SCORE_WANNABE=Aspirante +SING_SCORE_HOPEFUL=Promessa +SING_SCORE_RISING_STAR=Stella Nascente +SING_SCORE_LEAD_SINGER=Cantante Solista SING_SCORE_SUPERSTAR=Superstar SING_SCORE_ULTRASTAR=Ultrastar -SING_TOP_5_CHARTS=i migliori 5 giocatori -SING_TOP_5_CHARTS_WHEREAMI=i migliori 5 -SING_TOP_5_CHARTS_CONTINUE=a selezione canzone +SING_TOP_5_CHARTS=migliori 5 Giocatori +SING_TOP_5_CHARTS_WHEREAMI=migliori 5 +SING_TOP_5_CHARTS_CONTINUE=per cantare seleziona POPUP_PERFECT=perfetto! -POPUP_AWESOME=fantastico! +POPUP_AWESOME=stupendo! POPUP_GREAT=grande! -POPUP_GOOD=bene! +POPUP_GOOD=buono! POPUP_NOTBAD=non male! -POPUP_BAD=male! +POPUP_BAD=scarso! POPUP_POOR=pessimo! -POPUP_AWFUL=disastroso! +POPUP_AWFUL=orribile! IMPLODE_GLUE1=, IMPLODE_GLUE2= e SONG_MENU_NAME_MAIN=menu canzone SONG_MENU_PLAY=Canta -SONG_MENU_CHANGEPLAYERS=Cambia giocatori +SONG_MENU_CHANGEPLAYERS=Cambia Giocatori SONG_MENU_EDIT=Modifica SONG_MENU_MODI=Canta un Modi -SONG_MENU_CANCEL=Cancella +SONG_MENU_CANCEL=Annulla SONG_MENU_NAME_PLAYLIST=Menu Canzone SONG_MENU_PLAYLIST_ADD=Aggiungi Canzone SONG_MENU_PLAYLIST_DEL=Elimina Canzone SONG_MENU_NAME_PLAYLIST_ADD=Aggiungi Canzone -SONG_MENU_PLAYLIST_ADD_NEW=a playlist nuova -SONG_MENU_PLAYLIST_ADD_EXISTING=a playlist esistente +SONG_MENU_PLAYLIST_ADD_NEW=alla nuova playlist +SONG_MENU_PLAYLIST_ADD_EXISTING=alla playlist esistente SONG_MENU_PLAYLIST_NOEXISTING=Nessuna playlist disponibile SONG_MENU_NAME_PLAYLIST_NEW=Nuova Playlist SONG_MENU_PLAYLIST_NEW_CREATE=Crea -SONG_MENU_PLAYLIST_NEW_UNNAMED=Senza nome +SONG_MENU_PLAYLIST_NEW_UNNAMED=Senza Nome -SONG_MENU_NAME_PLAYLIST_DEL=Confermi l'eliminazione? -SONG_MENU_YES=Si' +SONG_MENU_NAME_PLAYLIST_DELITEM=Vuoi davvero eliminare? +SONG_MENU_YES=Sì SONG_MENU_NO=No SONG_MENU_NAME_PLAYLIST_LOAD=Apri Playlist @@ -198,113 +203,120 @@ SONG_MENU_NAME_PLAYLIST_DEL=Elimina Playlist? SONG_MENU_NAME_PARTY_MAIN=Menu Party SONG_MENU_JOKER=Jolly -SONG_MENU_NAME_PARTY_JOKER=pesca jolly +SONG_MENU_NAME_PARTY_JOKER=usa jolly -SONG_JUMPTO_DESC=cerca canzoni -SONG_JUMPTO_TYPE_DESC=Cerca Per: +SONG_JUMPTO_DESC=cerca song +SONG_JUMPTO_TYPE_DESC=Cerca per: SONG_JUMPTO_TYPE1=Tutto SONG_JUMPTO_TYPE2=Titolo SONG_JUMPTO_TYPE3=Artista -SONG_JUMPTO_SONGSFOUND=%d Risultati -SONG_JUMPTO_NOSONGSFOUND=Nessun risultato -SONG_JUMPTO_HELP=Digita il Testo da Cercare +SONG_JUMPTO_SONGSFOUND=%d Canzone(i) trovata(e) +SONG_JUMPTO_NOSONGSFOUND=Nessuna Canzone trovata +SONG_JUMPTO_HELP=Scrivi il Testo da Cercare: SONG_JUMPTO_CATTEXT=Cerca per: %s -PARTY_MODE=modalita' party -PARTY_DIFFICULTY=Difficolta' -PARTY_PLAYLIST=Modalita' Playlist -PARTY_PLAYLIST_ALL=Tutte le canzoni +PARTY_MODE=modalità party +PARTY_DIFFICULTY=Difficultà +PARTY_PLAYLIST=Modalità Playlist +PARTY_PLAYLIST_ALL=Tutte le Canzoni PARTY_PLAYLIST_CATEGORY=Cartella PARTY_PLAYLIST_PLAYLIST=Playlist -PARTY_ROUNDS=Turni -PARTY_TEAMS=Squadre -PARTY_TEAMS_PLAYER1=Giocatori Sq.1 -PARTY_TEAMS_PLAYER2=Giocatori Sq.2 -PARTY_TEAMS_PLAYER3=Giocatori Sq.3 +PARTY_ROUNDS=Rounds +PARTY_TEAMS=Teams +PARTY_TEAMS_PLAYER1=Giocatore Team1 +PARTY_TEAMS_PLAYER2=Giocatore Team2 +PARTY_TEAMS_PLAYER3=Giocatore Team3 PARTY_LEGEND_CONTINUE=continua -PARTY_OPTIONS_DESC=impostazione per il gioco-party -PARTY_OPTIONS_WHEREAMI=Opzioni Party +PARTY_OPTIONS_DESC=impostazioni per il gioco (party) +PARTY_OPTIONS_WHEREAMI=Impostazioni Party -PARTY_PLAYER_DESC=inserisci nome giocatore e squadra! +PARTY_PLAYER_DESC=inserisci giocatore- e nomi squadre! PARTY_PLAYER_WHEREAMI=Nomi Party PARTY_PLAYER_ENTER_NAME=inserisci nomi -PARTY_PLAYER_LEGEND_CONTINUE=inizia gioco-party +PARTY_PLAYER_LEGEND_CONTINUE=incomincia il gioco (party) -PARTY_ROUND_DESC=prossimi giocatori ai microfoni -PARTY_ROUND_WHEREAMI=Party Turno Successivo -PARTY_ROUND_LEGEND_CONTINUE=Comincia turno +PARTY_ROUND_DESC=prossimi giocatori al microfono +PARTY_ROUND_WHEREAMI=Prossimo Round del Party +PARTY_ROUND_LEGEND_CONTINUE=incomincia round -PARTY_SONG_WHEREAMI=Party Selezione-Canzone +PARTY_SONG_WHEREAMI=Canzone Party-Seleziona PARTY_SONG_LEGEND_CONTINUE=canta PARTY_SONG_MENU=menu party -PARTY_SCORE_DESC=punteggio dell'ultimo turno -PARTY_SCORE_WHEREAMI=Punti Party +PARTY_SCORE_DESC=punteggio dell''ultimo round +PARTY_SCORE_WHEREAMI=Punti del Party -PARTY_WIN_DESC=vincitore del gioco-party -PARTY_WIN_WHEREAMI=Party Vincitore +PARTY_WIN_DESC=vincitore del gioco (party) +PARTY_WIN_WHEREAMI=Vincitore Party PARTY_WIN_LEGEND_CONTINUE=torna al menu principale -PARTY_ROUND=Turno +PARTY_ROUND=Round PARTY_ROUND_WINNER=Vincitore PARTY_NOTPLAYEDYET=non ancora giocato PARTY_NOBODY=nessuno -NEXT_ROUND=Prossimo Turno: +NEXT_ROUND=Prossimo round: -PARTY_DISMISSED=Scaricato! +PARTY_DISMISSED=Respinto! PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=vince! -PLUGIN_HDL_NAME=Tieni la linea -PLUGIN_HDL_DESC=Non far peggio di quanto ti mostra il puntatore nella barra di giudizio. +PLUGIN_HDL_NAME=Tieni la Linea +PLUGIN_HDL_DESC=Non fare peggio del puntatore che ti mostra la barra. PLUGIN_UNTIL5000_NAME=Fino a 5000 -PLUGIN_UNTIL5000_DESC=Chi raggiunge per primo 5000 punti vince la partita. +PLUGIN_UNTIL5000_DESC=Chi fa 5000 punti per primo vince. PLUGIN_DUELL_NAME=Duello -PLUGIN_DUELL_DESC=Canta un duello fino a 10000 points. +PLUGIN_DUELL_DESC=Canta in duello fino a 10000 punti. -PLUGIN_BLIND_NAME=Modalita' cieco +PLUGIN_TEAMDUELL_NAME=Duello a Team +PLUGIN_TEAMDUELL_DESC=Passa il Microfono! + +PLUGIN_BLIND_NAME=Modalità Ceca PLUGIN_BLIND_DESC=Duella senza vedere le note. STAT_MAIN=Statistiche STAT_MAIN_DESC=Generale STAT_MAIN_WHEREAMI=Statistiche -STAT_OVERVIEW_INTRO=%0:s Statistiche. \n Ultimo azzeramento alle %2:.2d.%1:.2d.%3:d -STAT_OVERVIEW_SONG=%0:d Canzoni(%3:d con Video), delle quali %1:d gia' suonate e %2:d non ancora suonate.\n La Canzone piu' popolare e' %5:s di %4:s. -STAT_OVERVIEW_PLAYER=Dall'ultimo azzeramento ci sono stati %0:d diversi giocatori.\n Il Miglior Giocatore e' %1:s con un Punteggio medio di %2:d Punti.\n %3:s ha ottenuto il punteggio piu' alto con %4:d Punti. +STAT_OVERVIEW_INTRO=%0:s Statistiche. \n Ultimo Azzeramento a %2:.2d.%1:.2d.%3:d +STAT_OVERVIEW_SONG=%0:d Canzoni(%3:d con Video), delle quali %1:d sono state già cantate e %2:d non lo sono ancora state.\n La Canzone più popolare è %5:s di %4:s. +STAT_OVERVIEW_PLAYER=Dall''ultimo Azzeramente c''è/ci sono stato/i %0:d Giocatore/i differente/i.\n Il migliore Giocatore è %1:s con un Punteggio medio di %2:d Punti.\n %3:s ha fatto il Punteggio pià alto con %4:d Punti. STAT_DETAIL=Statistiche STAT_DETAIL_WHEREAMI=Dettagli Statistiche -STAT_NEXT=Pag. Successiva -STAT_PREV=Pag. Precedente -STAT_REVERSE=Inverti Ordine -STAT_PAGE=Seite Pagina %0:d di %1:d \n (Dato %2:d di %3:d) +STAT_NEXT=Prossima Pagina +STAT_PREV=Pagina Precedente +STAT_REVERSE=Ordine Inverso +STAT_PAGE=Pagina %0:d di %1:d Pagine\n (%2:d di %3:d Inserimenti) -STAT_DESC_SCORES=Punti Massimi -STAT_DESC_SCORES_REVERSED=Punti Minimi +STAT_DESC_SCORES=PunteggiAlti +STAT_DESC_SCORES_REVERSED=PunteggiBassi STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) STAT_DESC_SINGERS=Cantanti Migliori STAT_DESC_SINGERS_REVERSED=Cantanti Peggiori STAT_FORMAT_SINGERS=%0:s \n Punteggio Medio: %1:d -STAT_DESC_SONGS=Canzoni piu' popolari -STAT_DESC_SONGS_REVERSED=Canzoni meno popolari -STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx cantate +STAT_DESC_SONGS=La Canzone più popolare +STAT_DESC_SONGS_REVERSED=La Canzone meno popolare +STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx Cantate -STAT_DESC_BANDS=Gruppi piu' popolari -STAT_DESC_BANDS_REVERSED=Gruppi meno popolari -STAT_FORMAT_BANDS=%0:s \n %1:dx cantate +STAT_DESC_BANDS=Le Bands più popolari +STAT_DESC_BANDS_REVERSED=Le Bands meno popolari +STAT_FORMAT_BANDS=%0:s \n %1:dx Cantate MSG_ERROR_TITLE=Errore MSG_QUESTION_TITLE=Domanda -MSG_QUIT_USDX=Uscire da UltraStar? -MSG_END_PARTY=Uscire da Modalita'Party? +MSG_QUIT_USDX=Vuoi davvero uscire da UltraStar? +MSG_END_PARTY=Vuoi davvero terminare la Modalità Party? ERROR_NO_SONGS=Nessuna Canzone caricata ERROR_NO_PLUGINS=Nessun Plugin caricato -ERROR_CORRUPT_SONG=Impossibile caricare la canzone. +ERROR_CORRUPT_SONG=La canzone non è stata caricata. +ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Impossibile aprire la canzone: File non trovato +ERROR_CORRUPT_SONG_NO_NOTES=Impossibile aprire la canzone: Nessuna nota trovata +ERROR_CORRUPT_SONG_NO_BREAKS=Impossibile aprire la canzone: Nessuna interruzione di linea trovata +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Impossibile aprire la canzone: Errore durante il parsing della linea %0:d
\ No newline at end of file diff --git a/unicode/game/languages/Japanese.ini b/unicode/game/languages/Japanese.ini Binary files differindex 2f6cfce5..22f39b6a 100644 --- a/unicode/game/languages/Japanese.ini +++ b/unicode/game/languages/Japanese.ini diff --git a/unicode/game/languages/Polish.ini b/unicode/game/languages/Polish.ini deleted file mode 100644 index 561a21fe..00000000 --- a/unicode/game/languages/Polish.ini +++ /dev/null @@ -1,304 +0,0 @@ -[Text] -SING_LOADING=Wczytywanie... - -SING_CHOOSE_MODE=wybierz tryb -SING_SING=śpiewaj -SING_SING_DESC=śpiewaj solo lub w kilka osób - -SING_MULTI=impreza -SING_MULTI_DESC=rozkręć imprezę! - -SING_TOOLS=narzędzia - -SING_STATS=statystyki -SING_STATS_DESC=zobacz statystyki - -SING_EDITOR=edytor -SING_EDITOR_DESC=stwórz własne piosenki - -SING_GAME_OPTIONS=opcje -SING_GAME_OPTIONS_DESC=zmień ustawienia - -SING_EXIT=wyjście -SING_EXIT_DESC=wyjdź z gry - -SING_OPTIONS=opcje -SING_OPTIONS_DESC=zmień ustawienia -SING_OPTIONS_WHEREAMI=Opcje - -SING_OPTIONS_GAME=gra -SING_OPTIONS_GRAPHICS=grafika -SING_OPTIONS_SOUND=dźwięk -SING_OPTIONS_LYRICS=słowa -SING_OPTIONS_THEMES=tematy -SING_OPTIONS_RECORD=nagrywanie -SING_OPTIONS_ADVANCED=zaawansowane -SING_OPTIONS_EXIT=wstecz - -SING_OPTIONS_GAME_WHEREAMI=Opcje Gra -SING_OPTIONS_GAME_DESC=opcje gry -SING_OPTIONS_GAME_PLAYERS=Ilość graczy -SING_OPTIONS_GAME_DIFFICULTY=Poziom trudności -SING_OPTIONS_GAME_LANGUAGE=Język -SING_OPTIONS_GAME_TABS=Zakładki -SING_OPTIONS_GAME_SORTING=Sortowanie -SING_OPTIONS_GAME_DEBUG=Debug - - -SING_OPTIONS_GRAPHICS_WHEREAMI=Opcje Grafika -SING_OPTIONS_GAME_DESC=opcje gry -SING_OPTIONS_GAME_PLAYERS=Ilość graczy -SING_OPTIONS_GAME_DIFFICULTY=Poziom trudności -SING_OPTIONS_GAME_LANGUAGE=Język -SING_OPTIONS_GAME_TABS=Zakładki -SING_OPTIONS_GAME_SORTING=Sortowanie -SING_OPTIONS_GAME_DEBUG=Debug - -SING_OPTIONS_GRAPHICS_LINEBONUS=Bonus Linii - -SING_OPTIONS_SOUND_WHEREAMI=Opcje Dźwięk -SING_OPTIONS_SOUND_DESC=opcje dźwięku -SING_OPTIONS_SOUND_MIC_BOOST=Podbicie mikrofonu -SING_OPTIONS_SOUND_CLICK_ASSIST=Pomoc kliknięciami -SING_OPTIONS_SOUND_BEAT_CLICK=Kliknięcia w rytm -SING_OPTIONS_SOUND_THRESHOLD=Próg -SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Tryb dwóch graczy -SING_OPTIONS_SOUND_PREVIEWVOLUME=Głośność w podglądzie -SING_OPTIONS_SOUND_PREVIEWFADING=Zanikanie w podglądzie - -SING_OPTIONS_LYRICS_WHEREAMI=Opcje Słowa -SING_OPTIONS_LYRICS_DESC=opcje słów -SING_OPTIONS_LYRICS_FONT=Czcionka -SING_OPTIONS_LYRICS_EFFECT=Efekt -SING_OPTIONS_LYRICS_SOLMIZATION=Solmizacja - -SING_OPTIONS_THEMES_WHEREAMI=Options Tematy -SING_OPTIONS_THEMES_DESC=opcje tematów -SING_OPTIONS_THEMES_THEME=Temat -SING_OPTIONS_THEMES_SKIN=Skóra -SING_OPTIONS_THEMES_COLOR=Kolor - -SING_OPTIONS_RECORD_WHEREAMI=Opcje Nagrywanie -SING_OPTIONS_RECORD_DESC=opcje nagrywania -SING_OPTIONS_RECORD_CARD=Karta dźwiękowa -SING_OPTIONS_RECORD_INPUT=Wejście -SING_OPTIONS_RECORD_CHANNEL=Kanał - -SING_OPTIONS_ADVANCED_WHEREAMI=Opcje Zaawansowane -SING_OPTIONS_ADVANCED_DESC=ustawienia zaawansowane -SING_OPTIONS_ADVANCED_EFFECTSING=Efekty specjalne -SING_OPTIONS_ADVANCED_SCREENFADE=Przenikanie -SING_OPTIONS_ADVANCED_LOADANIMATION=Animacja ładowania -SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Pytania przy wyjściu -SING_OPTIONS_ADVANCED_LINEBONUS=Bonus Linii -SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Licznik -SING_OPTIONS_ADVANCED_ONSONGCLICK=Po wyborze piosenki -SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto Menu Imprezy - -SING_LEGEND_SELECT=wybierz -SING_LEGEND_NAVIGATE=nawigacja -SING_LEGEND_CONTINUE=dalej -SING_LEGEND_ESC=wstecz - -SING_PLAYER_DESC=wprowadź imię gracza -SING_PLAYER_WHEREAMI=Imię -SING_PLAYER_ENTER_NAME=wpisz imię - -SING_DIFFICULTY_DESC=wybierz poziom trudności -SING_DIFFICULTY_WHEREAMI=Poziom -SING_DIFFICULTY_CONTINUE=do wyboru piosenki -SING_EASY=łatwo -SING_MEDIUM=średnio -SING_HARD=trudno - -SING_SONG_SELECTION_DESC=wybierz piosenkę -SING_SONG_SELECTION_WHEREAMI=Wybór Piosenki -SING_SONG_SELECTION_GOTO=idź do... -SING_SONG_SELECTION=wybór piosenki -SING_SONG_SELECTION_MENU=menu -SING_SONG_SELECTION_PLAYLIST=playlista -SING_SONGS_IN_CAT=Piosenki -PLAYLIST_CATTEXT=Playlista: %s - -SING_TIME=CZAS -SING_TOTAL=łącznie -SING_MODE=śpiew solo -SING_NOTES=nuty -SING_GOLDEN_NOTES=złote nuty -SING_PHRASE_BONUS=Bonus Linii - -SING_MENU=Menu Główne - -SONG_SCORE=wynik -SONG_SCORE_WHEREAMI=Wynik - -SING_SCORE_TONE_DEAF=Głuche nuty -SING_SCORE_AMATEUR=Amator -SING_SCORE_RISING_STAR=Wschodząca gwiazda -SING_SCORE_LEAD_SINGER=Niezły grajek -SING_SCORE_HIT_ARTIST=Wielki Artysta -SING_SCORE_SUPERSTAR=Supergwiazda -SING_SCORE_ULTRASTAR=Ultrastar - -SING_TOP_5_CHARTS=lista 5 najlepszych -SING_TOP_5_CHARTS_WHEREAMI=top 5 -SING_TOP_5_CHARTS_CONTINUE=do wyboru piosenki - -POPUP_PERFECT=idealnie! -POPUP_AWESOME=niesamowicie! -POPUP_GREAT=świetnie! -POPUP_GOOD=dobrze! -POPUP_NOTBAD=nieźle! -POPUP_BAD=źle! -POPUP_POOR=słabo! -POPUP_AWFUL=okropnie! - -IMPLODE_GLUE1=, -IMPLODE_GLUE2= oraz - -SONG_MENU_NAME_MAIN=menu piosenki -SONG_MENU_PLAY=Śpiewaj -SONG_MENU_CHANGEPLAYERS=Zmień graczy -SONG_MENU_EDIT=Edytuj -SONG_MENU_MODI=Śpiewaj Modi -SONG_MENU_CANCEL=Anuluj - -SONG_MENU_NAME_PLAYLIST=Menu Piosenki -SONG_MENU_PLAYLIST_ADD=Dodaj piosenkę -SONG_MENU_PLAYLIST_DEL=Usuń piosenkę - -SONG_MENU_NAME_PLAYLIST_ADD=Dodaj piosenkę -SONG_MENU_PLAYLIST_ADD_NEW=do nowej playlisty -SONG_MENU_PLAYLIST_ADD_EXISTING=do istniejącej playlisty -SONG_MENU_PLAYLIST_NOEXISTING=Brak playlist - -SONG_MENU_NAME_PLAYLIST_NEW=Nowa Playlista -SONG_MENU_PLAYLIST_NEW_CREATE=Stwórz -SONG_MENU_PLAYLIST_NEW_UNNAMED=Bez nazwy - -SONG_MENU_NAME_PLAYLIST_DEL=Usunąć? -SONG_MENU_YES=Tak -SONG_MENU_NO=Nie - -SONG_MENU_NAME_PLAYLIST_LOAD=Otwórz Playlistę -SONG_MENU_PLAYLIST_LOAD=otwórz -SONG_MENU_PLAYLIST_DELCURRENT=usuń tę playlistę - -SONG_MENU_NAME_PLAYLIST_DEL=Usunąć playlistę? - -SONG_MENU_NAME_PARTY_MAIN=Menu Imprezy -SONG_MENU_JOKER=Jokera - -SONG_MENU_NAME_PARTY_JOKER=weź jokera - -SONG_JUMPTO_DESC=szukaj -SONG_JUMPTO_TYPE_DESC=Szukaj: -SONG_JUMPTO_TYPE1=Wszędzie -SONG_JUMPTO_TYPE2=Tytuł -SONG_JUMPTO_TYPE3=Wykonawca -SONG_JUMPTO_SONGSFOUND=Znaleziono %d utworów -SONG_JUMPTO_NOSONGSFOUND=Nic nie znaleziono -SONG_JUMPTO_HELP=Wpisz tekst do wyszukania -SONG_JUMPTO_CATTEXT=Szukaj: %s - -PARTY_MODE=tryb imprezy -PARTY_DIFFICULTY=Poziom -PARTY_PLAYLIST=Tryb playlisty -PARTY_PLAYLIST_ALL=Wszystko -PARTY_PLAYLIST_CATEGORY=Folder -PARTY_PLAYLIST_PLAYLIST=Playlista -PARTY_ROUNDS=Rundy -PARTY_TEAMS=Drużyny -PARTY_TEAMS_PLAYER1=Drużyna 1 -PARTY_TEAMS_PLAYER2=Drużyna 2 -PARTY_TEAMS_PLAYER3=Drużyna 3 - -PARTY_LEGEND_CONTINUE=dalej - -PARTY_OPTIONS_DESC=ustawienia trybu imprezy -PARTY_OPTIONS_WHEREAMI=Impreza - Ustawienia - -PARTY_PLAYER_DESC=wpisz nazwy graczy i drużyn -PARTY_PLAYER_WHEREAMI=Nazwy drużyn -PARTY_PLAYER_ENTER_NAME=wpisz nazwy -PARTY_PLAYER_LEGEND_CONTINUE=start! - -PARTY_ROUND_DESC=następni do mikrofonów -PARTY_ROUND_WHEREAMI=Następna Runda -PARTY_ROUND_LEGEND_CONTINUE=rozpocznij rundę - -PARTY_SONG_WHEREAMI=Wybór piosenki -PARTY_SONG_LEGEND_CONTINUE=śpiewaj -PARTY_SONG_MENU=menu - -PARTY_SCORE_DESC=wynik ostatniej rundy -PARTY_SCORE_WHEREAMI=Punkty - -PARTY_WIN_DESC=zwycięzca gry -PARTY_WIN_WHEREAMI=Zwycięzca -PARTY_WIN_LEGEND_CONTINUE=do menu głównego - -PARTY_ROUND=Runda -PARTY_ROUND_WINNER=Zwycięzca -PARTY_NOTPLAYEDYET=jeszcze nie grał -PARTY_NOBODY=nikt -NEXT_ROUND=Następna runda: - -PARTY_DISMISSED=Odpada! -PARTY_SCORE_WINS=%s -PARTY_SCORE_WINS2=wygrywa! - -PLUGIN_HDL_NAME=Trzymaj linię -PLUGIN_HDL_DESC=Śpiewaj lepiej niż linia na wykresie. - -PLUGIN_UNTIL5000_NAME=Do 5000 -PLUGIN_UNTIL5000_DESC=Wygrywa ten, kto pierwszy uzyska 5000 punktów. - -PLUGIN_DUELL_NAME=Pojedynek -PLUGIN_DUELL_DESC=Śpiewacie w pojedynku do 10000 punktów. - -PLUGIN_TEAMDUELL_NAME=Team Duell -PLUGIN_TEAMDUELL_DESC=Pass The Mic! - -PLUGIN_BLIND_NAME=Ślepiec -PLUGIN_BLIND_DESC=Pojedynek, w którym nie widzicie nut. - -STAT_MAIN=Statystyki -STAT_MAIN_DESC=Ogólne -STAT_MAIN_WHEREAMI=Statystyki - -STAT_OVERVIEW_INTRO=Statystyki dla: %0:d. \n Ostatnio resetowane: %2:.2d.%1:.2d.%3:d -STAT_OVERVIEW_SONG=%0:d Piosenek (%3:d z filmem), z czego %1:d było granych a %2:d jeszcze nie.\n Najpopularniejszą piosenką jest %5:s z %4:s. -STAT_OVERVIEW_PLAYER=Od ostatniego resetu:%0:d różnych graczy.\n Najlepszym graczem jest %1:s ze średnim wynikiem %2:d punktów.\n %3:s ustanowił rekord wynikiem %4:d punktów. - -STAT_DETAIL=Statystyki -STAT_DETAIL_WHEREAMI=Statystyki szczegółowe - -STAT_NEXT=Następna strona -STAT_PREV=Poprzednia strona -STAT_REVERSE=Odwróć kolejność -STAT_PAGE=Strona %0:d z %1:d \n (%2:d of %3:d wpisów) - -STAT_DESC_SCORES=Najwyższe wyniki -STAT_DESC_SCORES_REVERSED=Najniższe wyniki -STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) - -STAT_DESC_SINGERS=Najlepsi -STAT_DESC_SINGERS_REVERSED=Najgorsi -STAT_FORMAT_SINGERS=%0:s \n Średni wynik: %1:d - -STAT_DESC_SONGS=Najpopularniejsze piosenki -STAT_DESC_SONGS_REVERSED=Najmniej popularne piosenki -STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx śpiewane - -STAT_DESC_BANDS=Najpopularniejsi wykonawcy -STAT_DESC_BANDS_REVERSED=Najmniej popularni wykonawcy -STAT_FORMAT_BANDS=%0:s \n %1:dx śpiewani - -MSG_ERROR_TITLE=Błąd -MSG_QUESTION_TITLE=Pytanie -MSG_QUIT_USDX=Na pewno chcesz wyjść? -MSG_END_PARTY=Na pewno chcesz zakończyć tryb imprezy? -ERROR_NO_SONGS=Brak piosenek -ERROR_NO_PLUGINS=Brak wtyczek -ERROR_CORRUPT_SONG=Piosenka nie mogła zostać załadowana.
\ No newline at end of file diff --git a/unicode/game/languages/Portuguese.ini b/unicode/game/languages/Portuguese.ini index 7c375f11..0df59011 100644 --- a/unicode/game/languages/Portuguese.ini +++ b/unicode/game/languages/Portuguese.ini @@ -3,59 +3,62 @@ SING_LOADING=A Ler... SING_CHOOSE_MODE=Escolha o Modo SING_SING=Cantar -SING_SING_DESC=Jogo Rápido: cantar a Solo ou em Dueto +SING_SING_DESC=Jogo Rápido: cantar a Solo ou em Dueto SING_MULTI=Festa SING_MULTI_DESC=Cantar em Modo Festa SING_TOOLS=Ferramentas -SING_STATS=EstatÃsticas -SING_STATS_DESC=Ver EstatÃsticas +SING_STATS=Estatísticas +SING_STATS_DESC=Ver Estatísticas SING_EDITOR=Editor -SING_EDITOR_DESC=Criar canções +SING_EDITOR_DESC=Criar canção -SING_GAME_OPTIONS=Opções de Jogo -SING_GAME_OPTIONS_DESC=Alterar configurações de Jogo +SING_GAME_OPTIONS=Opções de Jogo +SING_GAME_OPTIONS_DESC=Alterar configurações de Jogo SING_EXIT=Sair SING_EXIT_DESC=Sair do Jogo -SING_OPTIONS=Opções -SING_OPTIONS_DESC=Alterar configurações -SING_OPTIONS_WHEREAMI=Opções +SING_OPTIONS=Opções +SING_OPTIONS_DESC=Alterar configurações +SING_OPTIONS_WHEREAMI=Opções SING_OPTIONS_GAME=Jogo -SING_OPTIONS_GRAPHICS=Gráficos +SING_OPTIONS_GRAPHICS=Gráficos SING_OPTIONS_SOUND=Som SING_OPTIONS_LYRICS=Letras SING_OPTIONS_THEMES=Temas -SING_OPTIONS_RECORD=Gravação -SING_OPTIONS_ADVANCED=Avançado +SING_OPTIONS_RECORD=Gravação +SING_OPTIONS_ADVANCED=Avançado SING_OPTIONS_EXIT=Voltar -SING_OPTIONS_GAME_WHEREAMI=Opções de Jogo -SING_OPTIONS_GAME_DESC=Configurações Gerais do Jogo +SING_OPTIONS_GAME_WHEREAMI=Opções de Jogo +SING_OPTIONS_GAME_DESC=Configurações Gerais do Jogo SING_OPTIONS_GAME_PLAYERS=Jogadores SING_OPTIONS_GAME_DIFFICULTY=Dificuldade -SING_OPTIONS_GAME_LANGUAGE=Linguagem -SING_OPTIONS_GAME_TABS=Tabulatura -SING_OPTIONS_GAME_SORTING=Ordenação +SING_OPTIONS_GAME_LANGUAGE=Idioma +SING_OPTIONS_GAME_TABS=Subpastas +SING_OPTIONS_GAME_SORTING=Ordenação SING_OPTIONS_GAME_DEBUG=Modo Debug -SING_OPTIONS_GRAPHICS_WHEREAMI=Opção de Gráficos -SING_OPTIONS_GRAPHICS_DESC=configuração de Gráficos -SING_OPTIONS_GRAPHICS_RESOLUTION=Resolução -SING_OPTIONS_GRAPHICS_FULLSCREEN=Ecrã Total +SING_OPTIONS_GRAPHICS_WHEREAMI=Opção de Gráficos +SING_OPTIONS_GRAPHICS_DESC=Configuração dos Gráficos +SING_OPTIONS_GRAPHICS_RESOLUTION=Resolução +SING_OPTIONS_GRAPHICS_FULLSCREEN=Ecrã Total SING_OPTIONS_GRAPHICS_DEPTH=Profundidade -SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Osciloscópio +SING_OPTIONS_GRAPHICS_VISUALIZER=Visualizador +SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Osciloscópio SING_OPTIONS_GRAPHICS_LINEBONUS=Linha Bonus -SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Tamanho do Filme +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Tamanho do Vídeo -SING_OPTIONS_SOUND_WHEREAMI=Opções de Som -SING_OPTIONS_SOUND_DESC=configuração de Som -SING_OPTIONS_SOUND_MIC_BOOST=Microfone boost +SING_OPTIONS_SOUND_WHEREAMI=Opções de Som +SING_OPTIONS_SOUND_DESC=Configuração do Som +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Playback Microfone +SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Música de Fundo +SING_OPTIONS_SOUND_MIC_BOOST=Microfone Boost SING_OPTIONS_SOUND_CLICK_ASSIST=Click de Ajuda SING_OPTIONS_SOUND_BEAT_CLICK=Click de Batida SING_OPTIONS_SOUND_THRESHOLD=Threshold @@ -63,58 +66,71 @@ SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Modo de dois jogadores SING_OPTIONS_SOUND_PREVIEWVOLUME=Preview Volume SING_OPTIONS_SOUND_PREVIEWFADING=Preview Fading -SING_OPTIONS_LYRICS_WHEREAMI=Opções de Letras -SING_OPTIONS_LYRICS_DESC=configuração de Letras +SING_OPTIONS_LYRICS_WHEREAMI=Opções de Letras +SING_OPTIONS_LYRICS_DESC=Configuração de Letras SING_OPTIONS_LYRICS_FONT=Fonte SING_OPTIONS_LYRICS_EFFECT=Efeitos -SING_OPTIONS_LYRICS_SOLMIZATION=Solmization +SING_OPTIONS_LYRICS_SOLMIZATION=Solfejo +SING_OPTIONS_LYRICS_NOTELINES=Pauta -SING_OPTIONS_THEMES_WHEREAMI=Opção de Tema -SING_OPTIONS_THEMES_DESC=configuração de tema e skin +SING_OPTIONS_THEMES_WHEREAMI=Opção de Tema +SING_OPTIONS_THEMES_DESC=Configuração de tema e skin SING_OPTIONS_THEMES_THEME=Tema SING_OPTIONS_THEMES_SKIN=Skin -SING_OPTIONS_THEMES_COLOR=Côr +SING_OPTIONS_THEMES_COLOR=Côr -SING_OPTIONS_RECORD_WHEREAMI=Opções de Gravação -SING_OPTIONS_RECORD_DESC=configuração do microfone +SING_OPTIONS_RECORD_WHEREAMI=Opções de Gravação +SING_OPTIONS_RECORD_DESC=Configuração do Microfone SING_OPTIONS_RECORD_CARD=Placa de Som SING_OPTIONS_RECORD_INPUT=Entrada SING_OPTIONS_RECORD_CHANNEL=Canal -SING_OPTIONS_ADVANCED_WHEREAMI=Opções Avançadas -SING_OPTIONS_ADVANCED_DESC=opções avançadas +SING_OPTIONS_ADVANCED_WHEREAMI=Opções Avançadas +SING_OPTIONS_ADVANCED_DESC=Outras Opções SING_OPTIONS_ADVANCED_EFFECTSING=Efeitos -SING_OPTIONS_ADVANCED_SCREENFADE=Fade do Ecrã -SING_OPTIONS_ADVANCED_LOADANIMATION=Abrir Animação -SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Segurança -SING_OPTIONS_ADVANCED_LINEBONUS=Linha de Bónus +SING_OPTIONS_ADVANCED_SCREENFADE=Fade do Ecrã +SING_OPTIONS_ADVANCED_LOADANIMATION=Animação +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Segurança +SING_OPTIONS_ADVANCED_LINEBONUS=Linha de Bónus SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= -SING_OPTIONS_ADVANCED_ONSONGCLICK=Escolha da Canção +SING_OPTIONS_ADVANCED_ONSONGCLICK=Escolha da Canção SING_OPTIONS_ADVANCED_PARTYPOPUP=Menu de Festa -SING_LEGEND_SELECT=seleccionar -SING_LEGEND_NAVIGATE=navegar -SING_LEGEND_CONTINUE=continuar -SING_LEGEND_ESC=voltar +SING_EDIT=Editor +SING_EDIT_MENU_DESCRIPTION=Cria a tua própria canção -SING_PLAYER_DESC=introduza nome(s) de jogador(es) +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Importar texto de um arquivo MIDI +SING_EDIT_BUTTON_DESCRIPTION_EXIT=Voltar +SING_EDIT_BUTTON_CONVERT=Importar +SING_EDIT_BUTTON_EXIT=Voltar + +SING_EDIT_NAVIGATE=Navegar +SING_EDIT_SELECT=Seleccionar +SING_EDIT_EXIT=Voltar + +SING_LEGEND_SELECT=Seleccionar +SING_LEGEND_NAVIGATE=Navegar +SING_LEGEND_CONTINUE=Continuar +SING_LEGEND_ESC=Voltar + +SING_PLAYER_DESC=Introduza o(s) nome(s) do(s) jogador(es) SING_PLAYER_WHEREAMI=Nome dos Jogadores -SING_PLAYER_ENTER_NAME=introduzir nome +SING_PLAYER_ENTER_NAME=Introduzir Nome -SING_DIFFICULTY_DESC=escolha a dificuldade +SING_DIFFICULTY_DESC=Nível de Dificuldade SING_DIFFICULTY_WHEREAMI=Dificuldade -SING_DIFFICULTY_CONTINUE=para a escolha da canção -SING_EASY=Fácil -SING_MEDIUM=Médio -SING_HARD=DifÃcil - -SING_SONG_SELECTION_DESC=escolha a canção -SING_SONG_SELECTION_WHEREAMI=Escolha de Canção -SING_SONG_SELECTION_GOTO=ir para .. -SING_SONG_SELECTION=escolha de canção -SING_SONG_SELECTION_MENU=menu -SING_SONG_SELECTION_PLAYLIST=playlist -SING_SONGS_IN_CAT=Canções +SING_DIFFICULTY_CONTINUE=para a escolha da canção +SING_EASY=Fácil +SING_MEDIUM=Médio +SING_HARD=Difícil + +SING_SONG_SELECTION_DESC=Escolha a canção +SING_SONG_SELECTION_WHEREAMI=Selecção da Canção +SING_SONG_SELECTION_GOTO=Ir para .. +SING_SONG_SELECTION=Selecção da Canção +SING_SONG_SELECTION_MENU=Menu +SING_SONG_SELECTION_PLAYLIST=Playlist +SING_SONGS_IN_CAT=Canções PLAYLIST_CATTEXT=Playlist: %s SING_TIME=TEMPO @@ -122,52 +138,53 @@ SING_TOTAL=Total SING_MODE=Cantar a Solo SING_NOTES=Notas SING_GOLDEN_NOTES=Notas de Ouro -SING_PHRASE_BONUS=Linha de Bónus +SING_PHRASE_BONUS=Linha de Bónus SING_MENU=Menu Principal -SONG_SCORE=Pontuação da Canção -SONG_SCORE_WHEREAMI=Pontuação +SONG_SCORE=Pontuação da Canção +SONG_SCORE_WHEREAMI=Pontuação SING_SCORE_TONE_DEAF=Ouvido Mouco SING_SCORE_AMATEUR=Amador -SING_SCORE_RISING_STAR=Estrela em Ascenção +SING_SCORE_WANNABE=Promessa +SING_SCORE_HOPEFUL=Artista +SING_SCORE_RISING_STAR=Estrela em Ascenção SING_SCORE_LEAD_SINGER=Cantor Principal -SING_SCORE_HIT_ARTIST=Artista SING_SCORE_SUPERSTAR=SuperStar SING_SCORE_ULTRASTAR=UltraStar -SING_TOP_5_CHARTS=5 melhores Jogadores -SING_TOP_5_CHARTS_WHEREAMI=5 melhores -SING_TOP_5_CHARTS_CONTINUE=para a escolha da Canção +SING_TOP_5_CHARTS=5 Melhores Jogadores +SING_TOP_5_CHARTS_WHEREAMI=Top 5 +SING_TOP_5_CHARTS_CONTINUE=para a escolha da Canção POPUP_PERFECT=Perfeito! -POPUP_AWESOME=Fantástico! -POPUP_GREAT=Óptimo! +POPUP_AWESOME=Fantástico! +POPUP_GREAT=Óptimo! POPUP_GOOD=Bom! POPUP_NOTBAD=Nada Mal! POPUP_BAD=Mau! -POPUP_POOR=Fraco! -POPUP_AWFUL=HorrÃvel! +POPUP_POOR=Péssimo! +POPUP_AWFUL=Horrível! IMPLODE_GLUE1=, IMPLODE_GLUE2= e -SONG_MENU_NAME_MAIN=menu de canções +SONG_MENU_NAME_MAIN=Menu de canções SONG_MENU_PLAY=Cantar SONG_MENU_CHANGEPLAYERS=Mudar Jogadores SONG_MENU_EDIT=Editar SONG_MENU_MODI=Cantar uma Modi SONG_MENU_CANCEL=Cancelar -SONG_MENU_NAME_PLAYLIST=Menu de Canções -SONG_MENU_PLAYLIST_ADD=Adicionar Canção -SONG_MENU_PLAYLIST_DEL=Apagar Canção +SONG_MENU_NAME_PLAYLIST=Menu de Canções +SONG_MENU_PLAYLIST_ADD=Adicionar Canção +SONG_MENU_PLAYLIST_DEL=Apagar Canção -SONG_MENU_NAME_PLAYLIST_ADD=Adicionar Canção +SONG_MENU_NAME_PLAYLIST_ADD=Adicionar Canção SONG_MENU_PLAYLIST_ADD_NEW=a uma nova playlist SONG_MENU_PLAYLIST_ADD_EXISTING=a uma playlist existente -SONG_MENU_PLAYLIST_NOEXISTING=Sem playlist disponÃvel +SONG_MENU_PLAYLIST_NOEXISTING=Sem playlist disponível SONG_MENU_NAME_PLAYLIST_NEW=Nova Playlist SONG_MENU_PLAYLIST_NEW_CREATE=Criar @@ -175,7 +192,7 @@ SONG_MENU_PLAYLIST_NEW_UNNAMED=Sem nome SONG_MENU_NAME_PLAYLIST_DEL=Apagar mesmo? SONG_MENU_YES=Sim -SONG_MENU_NO=Não +SONG_MENU_NO=Não SONG_MENU_NAME_PLAYLIST_LOAD=Abrir Playlist SONG_MENU_PLAYLIST_LOAD=abrir @@ -186,23 +203,23 @@ SONG_MENU_NAME_PLAYLIST_DEL=Apagar Playlist? SONG_MENU_NAME_PARTY_MAIN=Menu de Festa SONG_MENU_JOKER=Joker -SONG_MENU_NAME_PARTY_JOKER=usar joker +SONG_MENU_NAME_PARTY_JOKER=Usar Joker -SONG_JUMPTO_DESC=procurar Canção +SONG_JUMPTO_DESC=Procurar SONG_JUMPTO_TYPE_DESC=Procurar por: SONG_JUMPTO_TYPE1=Todos -SONG_JUMPTO_TYPE2=TÃtulo +SONG_JUMPTO_TYPE2=Título SONG_JUMPTO_TYPE3=Artista -SONG_JUMPTO_SONGSFOUND=%d Música(s) encontrada(s) -SONG_JUMPTO_NOSONGSFOUND=Nenhuma Canção encontrada +SONG_JUMPTO_SONGSFOUND=%d Música(s) encontrada(s) +SONG_JUMPTO_NOSONGSFOUND=Nenhuma Canção encontrada SONG_JUMPTO_HELP=Escreva para procurar SONG_JUMPTO_CATTEXT=Procurar por: %s -PARTY_MODE=modo Festa +PARTY_MODE=Modo Festa PARTY_DIFFICULTY=Dificuldade PARTY_PLAYLIST=Modo Playlist -PARTY_PLAYLIST_ALL=Todas as Canções -PARTY_PLAYLIST_CATEGORY=Directório +PARTY_PLAYLIST_ALL=Todas as Canções +PARTY_PLAYLIST_CATEGORY=Directório PARTY_PLAYLIST_PLAYLIST=Playlist PARTY_ROUNDS=Rondas PARTY_TEAMS=Equipas @@ -210,89 +227,96 @@ PARTY_TEAMS_PLAYER1=Jogador Equipa1 PARTY_TEAMS_PLAYER2=Jogador Equipa2 PARTY_TEAMS_PLAYER3=Jogador Equipa3 -PARTY_LEGEND_CONTINUE=continuar +PARTY_LEGEND_CONTINUE=Continuar -PARTY_OPTIONS_DESC=configurações para o modo festa -PARTY_OPTIONS_WHEREAMI=Opções de Festa +PARTY_OPTIONS_DESC=Configurações para o Modo Festa +PARTY_OPTIONS_WHEREAMI=Opções de Festa -PARTY_PLAYER_DESC=inserir nomes de jogadores e equipas +PARTY_PLAYER_DESC=Inserir nomes de jogadores e equipas PARTY_PLAYER_WHEREAMI=Nomes de Festa -PARTY_PLAYER_ENTER_NAME=inserir nomes -PARTY_PLAYER_LEGEND_CONTINUE=iniciar Festa +PARTY_PLAYER_ENTER_NAME=Inserir nomes +PARTY_PLAYER_LEGEND_CONTINUE=Iniciar Festa -PARTY_ROUND_DESC=Jogadores seguintes para os microsfones -PARTY_ROUND_WHEREAMIFesta - Ronda seguinte -PARTY_ROUND_LEGEND_CONTINUE=inicio da Ronda +PARTY_ROUND_DESC=Jogadores seguintes para os microfones +PARTY_ROUND_WHEREAMI=Ronda seguinte +PARTY_ROUND_LEGEND_CONTINUE=Inicio da Ronda -PARTY_SONG_WHEREAMI=Escolha da Canção - Festa -PARTY_SONG_LEGEND_CONTINUE=cantar -PARTY_SONG_MENU=menu Festa +PARTY_SONG_WHEREAMI=Escolha da Canção +PARTY_SONG_LEGEND_CONTINUE=Cantar +PARTY_SONG_MENU=Menu Festa -PARTY_SCORE_DESC=pontuação da última ronda +PARTY_SCORE_DESC=Pontuação da última ronda PARTY_SCORE_WHEREAMI=Pontos da Festa -PARTY_WIN_DESC=vencedor do Jogo Festa +PARTY_WIN_DESC=Vencedor do Jogo Festa PARTY_WIN_WHEREAMI=Vencedor da Festa -PARTY_WIN_LEGEND_CONTINUE=voltar ao menu principal +PARTY_WIN_LEGEND_CONTINUE=Voltar ao Menu Principal PARTY_ROUND=Ronda PARTY_ROUND_WINNER=Vencedor -PARTY_NOTPLAYEDYET=ainda não tocadas -PARTY_NOBODY=ninguém +PARTY_NOTPLAYEDYET=Não tocada +PARTY_NOBODY=Ninguém NEXT_ROUND=Ronda seguinte: PARTY_DISMISSED=Dispensado! PARTY_SCORE_WINS=%s -PARTY_SCORE_WINS2=ganhou! +PARTY_SCORE_WINS2=Ganhou! PLUGIN_HDL_NAME=Manter a linha -PLUGIN_HDL_DESC=Não piorar o ponteiro que é mostrado na barra de pontuação +PLUGIN_HDL_DESC=Não piorar o ponteiro que é mostrado na barra de pontuação -PLUGIN_UNTIL5000_NAME=Até 5000 +PLUGIN_UNTIL5000_NAME=Até 5000 PLUGIN_UNTIL5000_DESC=Quem obter primeiro 5000 pontos ganha a partida PLUGIN_DUELL_NAME=Duelo -PLUGIN_DUELL_DESC=Fazer um Duelo até aos 10000 pontos. +PLUGIN_DUELL_DESC=Fazer um Duelo até aos 10000 pontos. + +PLUGIN_TEAMDUELL_NAME=Duelo de equipa +PLUGIN_TEAMDUELL_DESC=Passa o Microfone! PLUGIN_BLIND_NAME=Modo Cego PLUGIN_BLIND_DESC=Duelo sem ver as notas. -STAT_MAIN=EstatÃsticas +STAT_MAIN=Estatísticas STAT_MAIN_DESC=Geral -STAT_MAIN_WHEREAMI=EstatÃsticas +STAT_MAIN_WHEREAMI=Estatísticas -STAT_OVERVIEW_INTRO=%0:s Estatisticas. \n Último Reset a %2:.2d.%1:.2d.%3:d -STAT_OVERVIEW_SONG=%0:d Canções(%3:d com Video), das quais %1:d já tocaram e %2:d ainda não tocaram.\n A Canção mais popular é %5:s de %4:s. -STAT_OVERVIEW_PLAYER=Desde o último Reset houve %0:d Jogador(es) diferente(s).\n O Melhor Jogador é %1:s com a Pontuação média de %2:d Pontos.\n %3:s teve a Pontuação mais alta com %4:d Pontos. +STAT_OVERVIEW_INTRO=%0:s Estatisticas. \n Último Reset a %2:.2d.%1:.2d.%3:d +STAT_OVERVIEW_SONG=%0:d Canções(%3:d com Video), das quais %1:d já tocaram e %2:d ainda não tocaram.\n A Canção mais popular é %5:s de %4:s. +STAT_OVERVIEW_PLAYER=Desde o último Reset houve %0:d Jogador(es) diferente(s).\n O Melhor Jogador é %1:s com a Pontuação Média de %2:d Pontos.\n %3:s teve a Pontuação mais alta com %4:d Pontos. -STAT_DETAIL=EstatÃsticas -STAT_DETAIL_WHEREAMI=EstatÃsticas Detalhadas +STAT_DETAIL=Estatísticas +STAT_DETAIL_WHEREAMI=Estatísticas Detalhadas -STAT_NEXT=Página Seguinte -STAT_PREV=Página Anterior +STAT_NEXT=Página Seguinte +STAT_PREV=Página Anterior STAT_REVERSE=Ordem Inversa -STAT_PAGE=%0:d de %1:d Páginas\n (%2:d de %3:d Entradas) +STAT_PAGE=%0:d de %1:d Páginas\n (%2:d de %3:d Entradas) -STAT_DESC_SCORES=Pontuções Altas -STAT_DESC_SCORES_REVERSED=Pontuações Baixas +STAT_DESC_SCORES=Pontuções Altas +STAT_DESC_SCORES_REVERSED=Pontuações Baixas STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) STAT_DESC_SINGERS=Top Cantores STAT_DESC_SINGERS_REVERSED=Piores Cantores -STAT_FORMAT_SINGERS=%0:s \n Pontuação Média: %1:d +STAT_FORMAT_SINGERS=%0:s \n Pontuação Média: %1:d -STAT_DESC_SONGS=Top Canções -STAT_DESC_SONGS_REVERSED=Canções menos populares -STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx cantaram +STAT_DESC_SONGS=Top Canções +STAT_DESC_SONGS_REVERSED=Canções Menos Populares +STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx Cantaram STAT_DESC_BANDS=Top Bandas -STAT_DESC_BANDS_REVERSED=Bandas menos populares +STAT_DESC_BANDS_REVERSED=Bandas Menos Populares STAT_FORMAT_BANDS=%0:s \n %1:dx Cantaram MSG_ERROR_TITLE=Erro -MSG_QUESTION_TITLE=Questão +MSG_QUESTION_TITLE=Questão MSG_QUIT_USDX=Deseja mesmo sair do UltraStar? -MSG_END_PARTY=Deseja mesmo terminar o modo Festa? -ERROR_NO_SONGS=Nenhuma Canção lida +MSG_END_PARTY=Deseja mesmo terminar o Modo Festa? +ERROR_NO_SONGS=Nenhuma Canção lida ERROR_NO_PLUGINS=Nenhum Plugin lido -ERROR_CORRUPT_SONG=Canção não pôde ser lida.
\ No newline at end of file +ERROR_CORRUPT_SONG=Canção não pôde ser lida! +ERROR_CORRUPT_SONG_FILE_NOT_FOUND=A canção não foi encontrada! +ERROR_CORRUPT_SONG_NO_NOTES=A canção não tem notas! +ERROR_CORRUPT_SONG_NO_BREAKS=A canção não tem quebras de linha! +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Erro durante o parsing da linha %0:d
\ No newline at end of file diff --git a/unicode/game/languages/Slovak.ini b/unicode/game/languages/Slovak.ini deleted file mode 100644 index 3e7451e6..00000000 --- a/unicode/game/languages/Slovak.ini +++ /dev/null @@ -1,301 +0,0 @@ -[Text] -SING_LOADING=... nahráva sa hra ! - -SING_CHOOSE_MODE=vyberte si z možnostà -SING_SING=Hra -SING_SING_DESC=sólo alebo duet - -SING_MULTI=Párty -SING_MULTI_DESC=párty-mód - -SING_TOOLS=Nástroje - -SING_STATS=Å¡tatistika -SING_STATS_DESC=zobraziÅ¥ Å¡tatistiku - -SING_EDITOR=editor -SING_EDITOR_DESC=vytvorte si vlastnú skladbu - -SING_GAME_OPTIONS=nastavenia -SING_GAME_OPTIONS_DESC=nastavenia hry - -SING_EXIT=Koniec -SING_EXIT_DESC=návrat do systému - -SING_OPTIONS=nastavenia -SING_OPTIONS_DESC=zmeniÅ¥ nastavenia -SING_OPTIONS_WHEREAMI=Nastavenia - -SING_OPTIONS_GAME=hra -SING_OPTIONS_GRAPHICS=grafika -SING_OPTIONS_SOUND=zvuk -SING_OPTIONS_LYRICS=text -SING_OPTIONS_THEMES=témy -SING_OPTIONS_RECORD=mikrofón -SING_OPTIONS_ADVANCED=iné -SING_OPTIONS_EXIT=späť - -SING_OPTIONS_GAME_WHEREAMI=Nastavenia hry -SING_OPTIONS_GAME_DESC=vÅ¡eobecné nastavenia -SING_OPTIONS_GAME_PLAYERS=PoÄet hráÄov -SING_OPTIONS_GAME_DIFFICULTY=ObtiažnosÅ¥ -SING_OPTIONS_GAME_LANGUAGE=Jazyk -SING_OPTIONS_GAME_TABS=Kategórie -SING_OPTIONS_GAME_SORTING=Zoradenie -SING_OPTIONS_GAME_DEBUG=Debug mód - -SING_OPTIONS_GRAPHICS_WHEREAMI=Grafika -SING_OPTIONS_GRAPHICS_DESC=nastavenie grafických detailov -SING_OPTIONS_GRAPHICS_RESOLUTION=RozlÃÅ¡enie -SING_OPTIONS_GRAPHICS_FULLSCREEN=Celá obrazovka -SING_OPTIONS_GRAPHICS_DEPTH=Far. hĺbka -SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Osciloskop -SING_OPTIONS_GRAPHICS_LINEBONUS=ÄŒiarový Bonus -SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Zobrazenie videa - -SING_OPTIONS_SOUND_WHEREAMI=Zvuk -SING_OPTIONS_SOUND_DESC=nastavenie zvuku -SING_OPTIONS_SOUND_MIC_BOOST=Zosilnenie mikrof. -SING_OPTIONS_SOUND_CLICK_ASSIST=Pomocný klik -SING_OPTIONS_SOUND_BEAT_CLICK=Rytmický klik -SING_OPTIONS_SOUND_THRESHOLD=Prah poÄuteľ. -SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Mód dvoch hráÄov -SING_OPTIONS_SOUND_PREVIEWVOLUME=Náhľad(volume) -SING_OPTIONS_SOUND_PREVIEWFADING=Prechod skladieb - -SING_OPTIONS_LYRICS_WHEREAMI=Text -SING_OPTIONS_LYRICS_DESC=nastavenia zobrazovania textov piesnà -SING_OPTIONS_LYRICS_FONT=PÃsmo -SING_OPTIONS_LYRICS_EFFECT=Efekt zvýraznenia -SING_OPTIONS_LYRICS_SOLMIZATION=Solmizácia - -SING_OPTIONS_THEMES_WHEREAMI=Témy -SING_OPTIONS_THEMES_DESC=zmena témy -SING_OPTIONS_THEMES_THEME=Téma -SING_OPTIONS_THEMES_SKIN=Vzhľad -SING_OPTIONS_THEMES_COLOR=Farba - -SING_OPTIONS_RECORD_WHEREAMI=Mikrofón -SING_OPTIONS_RECORD_DESC=nastavenie mikrofónu -SING_OPTIONS_RECORD_CARD=Zvuková karta -SING_OPTIONS_RECORD_INPUT=Vstup -SING_OPTIONS_RECORD_CHANNEL=Kanál - -SING_OPTIONS_ADVANCED_WHEREAMI=Iné -SING_OPTIONS_ADVANCED_DESC=rozÅ¡irujúce nastavenia -SING_OPTIONS_ADVANCED_EFFECTSING=Efekty pri speve -SING_OPTIONS_ADVANCED_SCREENFADE=Jemný prechod -SING_OPTIONS_ADVANCED_LOADANIMATION=Animácia loading(u) -SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Potvrdzovanie -SING_OPTIONS_ADVANCED_LINEBONUS=Bonus za riadok -SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= -SING_OPTIONS_ADVANCED_ONSONGCLICK=Po zvolenà skladby -SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto PartyMenu - -SING_LEGEND_SELECT=výber -SING_LEGEND_NAVIGATE=navigácia -SING_LEGEND_CONTINUE=pokraÄovaÅ¥ -SING_LEGEND_ESC=späť - -SING_PLAYER_DESC=zadajte meno hráÄa(ov) -SING_PLAYER_WHEREAMI=Mená hráÄov -SING_PLAYER_ENTER_NAME=zadávanie mena - -SING_DIFFICULTY_DESC=Vyberte obtiažnosÅ¥ -SING_DIFFICULTY_WHEREAMI=ObtiažnosÅ¥ -SING_DIFFICULTY_CONTINUE=pokraÄovaÅ¥ -SING_EASY=Ľahká -SING_MEDIUM=Stredná -SING_HARD=Ťažká - -SING_SONG_SELECTION_DESC=Vyberte skladbu -SING_SONG_SELECTION_WHEREAMI=výber skladby -SING_SONG_SELECTION_GOTO=choÄ na .. -SING_SONG_SELECTION=výber skladby -SING_SONG_SELECTION_MENU=menu -SING_SONG_SELECTION_PLAYLIST=playlist -SING_SONGS_IN_CAT=Skladba -PLAYLIST_CATTEXT=Playlist: %s - -SING_TIME=ÄŒas -SING_TOTAL=celkovo -SING_MODE=spievaÅ¥ sólo -SING_NOTES=noty -SING_GOLDEN_NOTES=zlaté noty -SING_PHRASE_BONUS=bonus za riadok - -SING_MENU=Hlavné Menu - -SONG_SCORE=hodnotenie -SONG_SCORE_WHEREAMI=Skóre - -SING_SCORE_TONE_DEAF=Antitalent -SING_SCORE_AMATEUR=Amatér -SING_SCORE_RISING_STAR=Vychádzajúca hviezda -SING_SCORE_LEAD_SINGER=Spevák -SING_SCORE_HIT_ARTIST=Star -SING_SCORE_SUPERSTAR=Superstar -SING_SCORE_ULTRASTAR=Ultrastar - -SING_TOP_5_CHARTS=najlepÅ¡Ãch 5 -SING_TOP_5_CHARTS_WHEREAMI=top 5 -SING_TOP_5_CHARTS_CONTINUE=pre výber skladby - -POPUP_PERFECT=neskutoÄné! -POPUP_AWESOME=paráda! -POPUP_GREAT=super! -POPUP_GOOD=dobré! -POPUP_NOTBAD=nie zlé! -POPUP_BAD=zle! -POPUP_POOR=bieda! -POPUP_AWFUL=otrasné! - -IMPLODE_GLUE1=, -IMPLODE_GLUE2= a - -SONG_MENU_NAME_MAIN=Výber hudby -SONG_MENU_PLAY=Å tart -SONG_MENU_CHANGEPLAYERS=Iný hrÃ¡Ä -SONG_MENU_EDIT=Uprav -SONG_MENU_MODI=Sing a Modi -SONG_MENU_CANCEL=ZruÅ¡iÅ¥ - -SONG_MENU_NAME_PLAYLIST=Skladby -SONG_MENU_PLAYLIST_ADD=Pridaj skladbu -SONG_MENU_PLAYLIST_DEL=Zmaž skladbu - -SONG_MENU_NAME_PLAYLIST_ADD=Pridaj Skladbu -SONG_MENU_PLAYLIST_ADD_NEW=do nového playlistu -SONG_MENU_PLAYLIST_ADD_EXISTING=do existujúceho playlistu -SONG_MENU_PLAYLIST_NOEXISTING=Nie je dostupný žiadny playlist - -SONG_MENU_NAME_PLAYLIST_NEW=Nový Playlist -SONG_MENU_PLAYLIST_NEW_CREATE=Vytvor -SONG_MENU_PLAYLIST_NEW_UNNAMED=Bez mena - -SONG_MENU_NAME_PLAYLIST_DEL=SkutoÄne ZmazaÅ¥ ? -SONG_MENU_YES=Ãno -SONG_MENU_NO=Nie - -SONG_MENU_NAME_PLAYLIST_LOAD=NaÄÃtaj Playlist -SONG_MENU_PLAYLIST_LOAD=naÄÃtaj -SONG_MENU_PLAYLIST_DELCURRENT=zmaž tento Playlist - -SONG_MENU_NAME_PLAYLIST_DEL=ZmazaÅ¥ Playlist? - -SONG_MENU_NAME_PARTY_MAIN=Party Menu -SONG_MENU_JOKER=Joker - -SONG_MENU_NAME_PARTY_JOKER=použi jokera - -SONG_JUMPTO_DESC=hľadaj skladbu -SONG_JUMPTO_TYPE_DESC=hľadaj: -SONG_JUMPTO_TYPE1=vÅ¡ade -SONG_JUMPTO_TYPE2=v názve skladby -SONG_JUMPTO_TYPE3=v mene autora -SONG_JUMPTO_SONGSFOUND=%d skladieb vyhovuje filtru -SONG_JUMPTO_NOSONGSFOUND=Žiadna skladba -SONG_JUMPTO_HELP=NapÃÅ¡ kľúÄové slovo pre hľadanie -SONG_JUMPTO_CATTEXT=Hľadaj: %s - -PARTY_MODE=párty mód -PARTY_DIFFICULTY=ObtiažnosÅ¥ -PARTY_PLAYLIST=Skladby z playlistu -PARTY_PLAYLIST_ALL=VÅ¡etky skladby -PARTY_PLAYLIST_CATEGORY=Kategória -PARTY_PLAYLIST_PLAYLIST=Playlist -PARTY_ROUNDS=PoÄet kôl -PARTY_TEAMS=PoÄet tÃmov -PARTY_TEAMS_PLAYER1=HráÄov v TÃme 1 -PARTY_TEAMS_PLAYER2=HráÄov v TÃme 2 -PARTY_TEAMS_PLAYER3=HráÄov v TÃme 3 - -PARTY_LEGEND_CONTINUE=pokraÄovaÅ¥ - -PARTY_OPTIONS_DESC=nastavenia pre párty-mód -PARTY_OPTIONS_WHEREAMI=Párty nastavenia - -PARTY_PLAYER_DESC=Zadajte mená tÃmov a hráÄov! -PARTY_PLAYER_WHEREAMI=Párty mená -PARTY_PLAYER_ENTER_NAME=zadajte mená -PARTY_PLAYER_LEGEND_CONTINUE=PokraÄovaÅ¥ - -PARTY_ROUND_DESC=párty pre hráÄov -PARTY_ROUND_WHEREAMI=List párty disciplÃn -PARTY_ROUND_LEGEND_CONTINUE=Å tart disciplÃny - -PARTY_SONG_WHEREAMI=Párty - Výver Skladby -PARTY_SONG_LEGEND_CONTINUE=Å tart -PARTY_SONG_MENU=party menu - -PARTY_SCORE_DESC=skóre posledného kola -PARTY_SCORE_WHEREAMI=Párty skóre - -PARTY_WIN_DESC=VÃÅ¥az párty -PARTY_WIN_WHEREAMI=Stupeň vÃÅ¥azov -PARTY_WIN_LEGEND_CONTINUE=späť do hlavného menu - -PARTY_ROUND=Kolo -PARTY_ROUND_WINNER=VÃÅ¥az -PARTY_NOTPLAYEDYET=nehralo -PARTY_NOBODY=ani jedno družstvo -NEXT_ROUND=ÄŽalÅ¡ie kolo: - -PARTY_DISMISSED=UkonÄené ! -PARTY_SCORE_WINS=%s -PARTY_SCORE_WINS2=vÃÅ¥az tohto kola - -PLUGIN_HDL_NAME=Superstar -PLUGIN_HDL_DESC=nesmieÅ¡ klesnúť pod hranicu ukazovateľa úspeÅ¡nosti - -PLUGIN_UNTIL5000_NAME=Po 5000 -PLUGIN_UNTIL5000_DESC=kto prvý zÃska 5000 bodov sa stane vÃÅ¥azom - -PLUGIN_DUELL_NAME=Duel -PLUGIN_DUELL_DESC=spievaj, kým nedosiahneÅ¡ 10000 bodov - -PLUGIN_TEAMDUELL_NAME=Duel TÃmov -PLUGIN_TEAMDUELL_DESC=každý hrÃ¡Ä sa vystrieda za mikrofónom - -PLUGIN_BLIND_NAME=Slepý -PLUGIN_BLIND_DESC=neuvidÃÅ¡ noty pre hlas - -STAT_MAIN=Å tatistika -STAT_MAIN_DESC=VÅ¡eobecne -STAT_MAIN_WHEREAMI=Å tatistiky - -STAT_OVERVIEW_INTRO=%0:s Å¡tatistika \n Å tatistika od %2:.2d.%1:.2d.%3:d -STAT_OVERVIEW_SONG=SKLADBY \n Celkove: %0:d z toho %3:d s videom\n PoÄet už hraných: %1:d \n PoÄet nehraných: %2:d \n NajhranejÅ¡ia skladba: %5:s od %4:s -STAT_OVERVIEW_PLAYER=HRÃÄŒI \n Celkove: %0:d rôznych hráÄov.\n NajlepÅ¡Ã hráÄ: %1:s (%2:d - priemer bodov)\n NajvyÅ¡Å¡ie skóre: %3:s (%4:d bodov) - -STAT_DETAIL=Å tatistiky -STAT_DETAIL_WHEREAMI=Podrobná Å¡tatistika - -STAT_NEXT=ÄŽalÅ¡ia strana -STAT_PREV=PredoÅ¡lá strana -STAT_REVERSE=OtoÄ poradie -STAT_PAGE=%0:d. z %1:d strán\n (%2:d z %3:d položiek) - -STAT_DESC_SCORES=NajvyÅ¡Å¡ie skóre -STAT_DESC_SCORES_REVERSED=NajhorÅ¡ie skóre -STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) - -STAT_DESC_SINGERS=NajlepÅ¡Ã speváci -STAT_DESC_SINGERS_REVERSED=NajhorÅ¡Ã speváci -STAT_FORMAT_SINGERS=%0:s \n Priemer skóre: %1:d - -STAT_DESC_SONGS=NajhranejÅ¡ie skladby -STAT_DESC_SONGS_REVERSED=Najmenej hrané skladby -STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx spievaná - -STAT_DESC_BANDS=NajhranejÅ¡ia kapela -STAT_DESC_BANDS_REVERSED=Najmenej hraná kapela -STAT_FORMAT_BANDS=%0:s \n %1:dx spievaná - -MSG_ERROR_TITLE=Chyba -MSG_QUESTION_TITLE=Otázka -MSG_QUIT_USDX=SkutoÄne chcete skonÄiÅ¥ UltraStar? -MSG_END_PARTY=SkutoÄne chcete skonÄit Párty Mód ? -ERROR_NO_SONGS=Žiadna skladba -ERROR_NO_PLUGINS=Žiadny zásuvný modul -ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahraÅ¥. diff --git a/unicode/game/languages/Spanish.ini b/unicode/game/languages/Spanish.ini index 3f066efc..ca4690f5 100644 --- a/unicode/game/languages/Spanish.ini +++ b/unicode/game/languages/Spanish.ini @@ -1,298 +1,322 @@ -[Text] -SING_LOADING=Cargando... - -SING_CHOOSE_MODE=Escoge -SING_SING=¡Canta! -SING_SING_DESC=Cantar - -SING_MULTI=Grupo -SING_MULTI_DESC=Cantar en grupos - -SING_TOOLS=Utilidades - -SING_STATS=Estadisticas -SING_STATS_DESC=Ver las estadisticas - -SING_EDITOR=Editor -SING_EDITOR_DESC=Crea tus propias canciones - -SING_GAME_OPTIONS=Opciones -SING_GAME_OPTIONS_DESC=Cambia las opciones del juego - -SING_EXIT=Salir -SING_EXIT_DESC=Salir del juego - -SING_OPTIONS=Opciones -SING_OPTIONS_DESC=Cambia las opciones -SING_OPTIONS_WHEREAMI=Opciones - -SING_OPTIONS_GAME=Juego -SING_OPTIONS_GRAPHICS=Gráficos -SING_OPTIONS_SOUND=Sonido -SING_OPTIONS_LYRICS=Letras -SING_OPTIONS_THEMES=Temas -SING_OPTIONS_RECORD=Grabación -SING_OPTIONS_ADVANCED=Avanzadas -SING_OPTIONS_EXIT=Regresar - -SING_OPTIONS_GAME_WHEREAMI=Opciones del juego -SING_OPTIONS_GAME_DESC=Opciones generales del juego -SING_OPTIONS_GAME_PLAYERS=Jugadores -SING_OPTIONS_GAME_DIFFICULTY=Dificultad -SING_OPTIONS_GAME_LANGUAGE=Idioma -SING_OPTIONS_GAME_TABS=Etiquetas -SING_OPTIONS_GAME_SORTING=Clasificar por -SING_OPTIONS_GAME_DEBUG=Modo depuración - -SING_OPTIONS_GRAPHICS_WHEREAMI=Opciones gráficas -SING_OPTIONS_GRAPHICS_DESC=Opciones gráficas -SING_OPTIONS_GRAPHICS_RESOLUTION=Resolución -SING_OPTIONS_GRAPHICS_FULLSCREEN=Pantalla completa -SING_OPTIONS_GRAPHICS_DEPTH=Calidad de color -SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Osciloscopio -SING_OPTIONS_GRAPHICS_LINEBONUS=Bonus de lÃnea -SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Tamaño del vÃdeo - -SING_OPTIONS_SOUND_WHEREAMI=Opciones de sonido -SING_OPTIONS_SOUND_DESC=Opciones de sonido -SING_OPTIONS_SOUND_MIC_BOOST=Potenciar micro. -SING_OPTIONS_SOUND_CLICK_ASSIST=Asist. de notas -SING_OPTIONS_SOUND_BEAT_CLICK=Asist. de golpes -SING_OPTIONS_SOUND_THRESHOLD=Atenuar micro. -SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Modo dos jugadores -SING_OPTIONS_SOUND_PREVIEWVOLUME=Volum. de avance -SING_OPTIONS_SOUND_PREVIEWFADING=Desvanecimiento - -SING_OPTIONS_LYRICS_WHEREAMI=Opciones de letras -SING_OPTIONS_LYRICS_DESC=Opciones de letras -SING_OPTIONS_LYRICS_FONT=Fuente -SING_OPTIONS_LYRICS_EFFECT=Efecto -SING_OPTIONS_LYRICS_SOLMIZATION=Solfeo - -SING_OPTIONS_THEMES_WHEREAMI=Opciones de temas -SING_OPTIONS_THEMES_DESC=Opciones de temas -SING_OPTIONS_THEMES_THEME=Tema -SING_OPTIONS_THEMES_SKIN=Piel -SING_OPTIONS_THEMES_COLOR=Color - -SING_OPTIONS_RECORD_WHEREAMI=Opciones de grabación -SING_OPTIONS_RECORD_DESC=Opciones del micrófono -SING_OPTIONS_RECORD_CARD=Tarjeta de sonido -SING_OPTIONS_RECORD_INPUT=Captura +[Text] +SING_LOADING=Cargando... + +SING_CHOOSE_MODE=elige modo +SING_SING=Cantar +SING_SING_DESC=Juego rápido: cantar solo o dueto + +SING_MULTI=Grupo +SING_MULTI_DESC=cantar en modo grupo + +SING_TOOLS=Utilidades + +SING_STATS=Estadísticas +SING_STATS_DESC=Ver las estadísticas + +SING_EDITOR=Editor +SING_EDITOR_DESC=Crea tu propia canción + +SING_GAME_OPTIONS=Opciones +SING_GAME_OPTIONS_DESC=Cambia las opciones del juego + +SING_EXIT=Salir +SING_EXIT_DESC=Salir del juego + +SING_OPTIONS=Opciones +SING_OPTIONS_DESC=Cambia las opciones +SING_OPTIONS_WHEREAMI=Opciones + +SING_OPTIONS_GAME=Juego +SING_OPTIONS_GRAPHICS=Gráficos +SING_OPTIONS_SOUND=Sonido +SING_OPTIONS_LYRICS=Letras +SING_OPTIONS_THEMES=Temas +SING_OPTIONS_RECORD=Grabar +SING_OPTIONS_ADVANCED=Avanzado +SING_OPTIONS_EXIT=Atrás + +SING_OPTIONS_GAME_WHEREAMI=Opciones del juego +SING_OPTIONS_GAME_DESC=Ajustes generales del juego +SING_OPTIONS_GAME_PLAYERS=Jugadores +SING_OPTIONS_GAME_DIFFICULTY=Dificultad +SING_OPTIONS_GAME_LANGUAGE=Idioma +SING_OPTIONS_GAME_TABS=Etiquetas +SING_OPTIONS_GAME_SORTING=Clasificar por +SING_OPTIONS_GAME_DEBUG=Modo depuración + +SING_OPTIONS_GRAPHICS_WHEREAMI=Opciones gráficas +SING_OPTIONS_GRAPHICS_DESC=Opciones gráficas +SING_OPTIONS_GRAPHICS_RESOLUTION=Resolución +SING_OPTIONS_GRAPHICS_FULLSCREEN=Pantalla completa +SING_OPTIONS_GRAPHICS_DEPTH=Profundidad de color +SING_OPTIONS_GRAPHICS_VISUALIZER=Visualización +SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Osciloscopio +SING_OPTIONS_GRAPHICS_LINEBONUS=Bonus de línea +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Tamaño del vídeo + +SING_OPTIONS_SOUND_WHEREAMI=Opciones de sonido +SING_OPTIONS_SOUND_DESC=Opciones de sonido +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Playback del micrófono +SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Música de fondo +SING_OPTIONS_SOUND_MIC_BOOST=Potenciar micrófono +SING_OPTIONS_SOUND_CLICK_ASSIST=Asistente de notas +SING_OPTIONS_SOUND_BEAT_CLICK=Asistente de golpes +SING_OPTIONS_SOUND_THRESHOLD=Umbral +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Modo dos jugadores +SING_OPTIONS_SOUND_PREVIEWVOLUME=Volumen de avance +SING_OPTIONS_SOUND_PREVIEWFADING=Desvanecimiento + +SING_OPTIONS_LYRICS_WHEREAMI=Opciones de letras +SING_OPTIONS_LYRICS_DESC=Opciones de letras +SING_OPTIONS_LYRICS_FONT=Tipo de letra +SING_OPTIONS_LYRICS_EFFECT=Efecto +SING_OPTIONS_LYRICS_SOLMIZATION=Solfeo +SING_OPTIONS_LYRICS_NOTELINES=Pentagramas + +SING_OPTIONS_THEMES_WHEREAMI=Opciones de temas +SING_OPTIONS_THEMES_DESC=Opciones de temas +SING_OPTIONS_THEMES_THEME=Tema +SING_OPTIONS_THEMES_SKIN=Piel +SING_OPTIONS_THEMES_COLOR=Color + +SING_OPTIONS_RECORD_WHEREAMI=Opciones de grabación +SING_OPTIONS_RECORD_DESC=Opciones de micrófono +SING_OPTIONS_RECORD_CARD=Tarjeta de sonido +SING_OPTIONS_RECORD_INPUT=Entrada SING_OPTIONS_RECORD_CHANNEL=Canal - -SING_OPTIONS_ADVANCED_WHEREAMI=Opciones avanzadas -SING_OPTIONS_ADVANCED_DESC=Opciones avanzadas -SING_OPTIONS_ADVANCED_EFFECTSING=Efectos al cantar -SING_OPTIONS_ADVANCED_SCREENFADE=Desvanecimiento -SING_OPTIONS_ADVANCED_LOADANIMATION=Animación de carga -SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Preguntar -SING_OPTIONS_ADVANCED_LINEBONUS=Bonus de lÃnea -SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= -SING_OPTIONS_ADVANCED_ONSONGCLICK=Al selecionar canción -SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto menú de grupo - -SING_LEGEND_SELECT=Seleccionar -SING_LEGEND_NAVIGATE=Navegar -SING_LEGEND_CONTINUE=continuar -SING_LEGEND_ESC=Regresar - -SING_PLAYER_DESC=Nombre(s) de jugador(es) -SING_PLAYER_WHEREAMI=Nombre(s) de jugador(es) -SING_PLAYER_ENTER_NAME=Escribe el nombre - -SING_DIFFICULTY_DESC=Selecciona la dificultad -SING_DIFFICULTY_WHEREAMI=Dificultad -SING_DIFFICULTY_CONTINUE=Siguiente -SING_EASY=Fácil -SING_MEDIUM=Normal -SING_HARD=DifÃcil - -SING_SONG_SELECTION_DESC=Selecciona tu canción -SING_SONG_SELECTION_WHEREAMI=Selección de canción -SING_SONG_SELECTION_GOTO=Ir a... -SING_SONG_SELECTION=Selección de canción -SING_SONG_SELECTION_MENU=Menú -SING_SONG_SELECTION_PLAYLIST=Lista -SING_SONGS_IN_CAT=Canciones -PLAYLIST_CATTEXT=Lista: %s - -SING_TIME=Tiempo -SING_TOTAL=Total -SING_MODE=Solo -SING_NOTES=Notas -SING_GOLDEN_NOTES=Notas doradas -SING_PHRASE_BONUS=Bonus de lÃnea - -SING_MENU=Menú principal - -SONG_SCORE=Puntaje -SONG_SCORE_WHEREAMI= - -SING_SCORE_TONE_DEAF=Sin OÃdo -SING_SCORE_AMATEUR=Aficionado + +SING_OPTIONS_ADVANCED_WHEREAMI=Opciones avanzadas +SING_OPTIONS_ADVANCED_DESC=Opciones avanzadas +SING_OPTIONS_ADVANCED_EFFECTSING=Efectos al cantar +SING_OPTIONS_ADVANCED_SCREENFADE=Desvanecimiento +SING_OPTIONS_ADVANCED_LOADANIMATION=Animación de carga +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Preguntas de seguridad +SING_OPTIONS_ADVANCED_LINEBONUS=Bonus de línea +SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= +SING_OPTIONS_ADVANCED_ONSONGCLICK=Al seleccionar canción +SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto menú de grupo + +SING_EDIT=Editor +SING_EDIT_MENU_DESCRIPTION=Crear tu propia canción + +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Importar texto desde archivo midi +SING_EDIT_BUTTON_DESCRIPTION_EXIT=Atrás +SING_EDIT_BUTTON_CONVERT=Importar +SING_EDIT_BUTTON_EXIT=Atrás + +SING_EDIT_NAVIGATE=Navegar +SING_EDIT_SELECT=Seleccionar +SING_EDIT_EXIT=Atrás + +SING_LEGEND_SELECT=Seleccionar +SING_LEGEND_NAVIGATE=Navegar +SING_LEGEND_CONTINUE=Continuar +SING_LEGEND_ESC=Atrás + +SING_PLAYER_DESC=Nombre(s) de jugador(es) +SING_PLAYER_WHEREAMI=Nombre(s) de jugador(es) +SING_PLAYER_ENTER_NAME=Escribe el nombre + +SING_DIFFICULTY_DESC=Selecciona la dificultad +SING_DIFFICULTY_WHEREAMI=Dificultad +SING_DIFFICULTY_CONTINUE=Selección de canción +SING_EASY=Fácil +SING_MEDIUM=Normal +SING_HARD=Difícil + +SING_SONG_SELECTION_DESC=Elige tu canción +SING_SONG_SELECTION_WHEREAMI=Selección de canción +SING_SONG_SELECTION_GOTO=Ir a... +SING_SONG_SELECTION=Selección de canción +SING_SONG_SELECTION_MENU=Menú +SING_SONG_SELECTION_PLAYLIST=Lista de canciones +SING_SONGS_IN_CAT=Canciones +PLAYLIST_CATTEXT=Lista de canciones: %s + +SING_TIME=TIEMPO +SING_TOTAL=Total +SING_MODE=Solo +SING_NOTES=Notas +SING_GOLDEN_NOTES=Notas doradas +SING_PHRASE_BONUS=Bonus de línea + +SING_MENU=Menú principal + +SONG_SCORE=Puntuación +SONG_SCORE_WHEREAMI=Puntuación + +SING_SCORE_TONE_DEAF=Sin oído +SING_SCORE_AMATEUR=Aficionado SING_SCORE_WANNABE=Aspirante SING_SCORE_HOPEFUL=Promesa SING_SCORE_RISING_STAR=Prometes -SING_SCORE_LEAD_SINGER=Arista -SING_SCORE_SUPERSTAR=Superestrella -SING_SCORE_ULTRASTAR=Ultraestrella - -SING_TOP_5_CHARTS=Los mejores -SING_TOP_5_CHARTS_WHEREAMI= -SING_TOP_5_CHARTS_CONTINUE=Continuar - -POPUP_PERFECT=¡Perfecto! -POPUP_AWESOME=¡Asombroso! -POPUP_GREAT=¡Genial! -POPUP_GOOD=¡Bien! -POPUP_NOTBAD=¡No está mal! -POPUP_BAD=¡Mal! -POPUP_POOR=¡Pésimo! -POPUP_AWFUL=¡Horrible! - -IMPLODE_GLUE1=, -IMPLODE_GLUE2= y - -SONG_MENU_NAME_MAIN=Menú de canto -SONG_MENU_PLAY=Cantar -SONG_MENU_CHANGEPLAYERS=Escoger jugador -SONG_MENU_EDIT=Editar -SONG_MENU_MODI=Cantar una Modi -SONG_MENU_CANCEL=Cancelar - -SONG_MENU_NAME_PLAYLIST=Menú -SONG_MENU_PLAYLIST_ADD=Añadir Canción -SONG_MENU_PLAYLIST_DEL=Eliminar Canción - -SONG_MENU_NAME_PLAYLIST_ADD=Añadir canción -SONG_MENU_PLAYLIST_ADD_NEW=A nueva lista -SONG_MENU_PLAYLIST_ADD_EXISTING=A lista existente -SONG_MENU_PLAYLIST_NOEXISTING=No hay listas - -SONG_MENU_NAME_PLAYLIST_NEW=Nueva lista -SONG_MENU_PLAYLIST_NEW_CREATE=Crear -SONG_MENU_PLAYLIST_NEW_UNNAMED=Sin nombre - -SONG_MENU_NAME_PLAYLIST_DEL=¿Suprimir? -SONG_MENU_YES=Sà -SONG_MENU_NO=No - -SONG_MENU_NAME_PLAYLIST_LOAD=Abrir lista -SONG_MENU_PLAYLIST_LOAD=Abrir -SONG_MENU_PLAYLIST_DELCURRENT=Borrar la lista actual -SONG_MENU_NAME_PLAYLIST_DEL=¿Suprimir? - -SONG_MENU_NAME_PARTY_MAIN=Menú -SONG_MENU_JOKER=Aleatorio - -SONG_MENU_NAME_PARTY_JOKER=Aleatorio - -SONG_JUMPTO_DESC=Buscar -SONG_JUMPTO_TYPE_DESC=Buscar por: -SONG_JUMPTO_TYPE1=Todo -SONG_JUMPTO_TYPE2=TÃtulo -SONG_JUMPTO_TYPE3=Artista -SONG_JUMPTO_SONGSFOUND=%d Canción(es) encontrada(as) -SONG_JUMPTO_NOSONGSFOUND=Sin resultados -SONG_JUMPTO_HELP=Escribe palabra(s) clave(s) -SONG_JUMPTO_CATTEXT=Buscar por: %s - -PARTY_MODE=Modo Grupo -PARTY_DIFFICULTY=Dificultad -PARTY_PLAYLIST=Modo lista -PARTY_PLAYLIST_ALL=Todo -PARTY_PLAYLIST_CATEGORY=Carpeta -PARTY_PLAYLIST_PLAYLIST=Lista -PARTY_ROUNDS=Rondas -PARTY_TEAMS=Equipos -PARTY_TEAMS_PLAYER1=Miembros Eq. 1 -PARTY_TEAMS_PLAYER2=Miembros Eq .2 -PARTY_TEAMS_PLAYER3=Miembros Eq. 3 - -PARTY_LEGEND_CONTINUE=Continuar - -PARTY_OPTIONS_DESC=Opciones del modo grupo -PARTY_OPTIONS_WHEREAMI= - -PARTY_PLAYER_DESC=Escribe los nombre de jugadores y de equipos -PARTY_PLAYER_WHEREAMI=Nombre equipos -PARTY_PLAYER_ENTER_NAME=Digita un nombre -PARTY_PLAYER_LEGEND_CONTINUE=Comenzar - -PARTY_ROUND_DESC=Siguientes jugadores -PARTY_ROUND_WHEREAMI=Siguiente ronda -PARTY_ROUND_LEGEND_CONTINUE=Iniciar ronda - -PARTY_SONG_WHEREAMI=Selección de cacnión -PARTY_SONG_LEGEND_CONTINUE=Cantar -PARTY_SONG_MENU=Menú - -PARTY_SCORE_DESC=Puntaje de la última ronda -PARTY_SCORE_WHEREAMI= - -PARTY_WIN_DESC=Equipo ganador -PARTY_WIN_WHEREAMI= -PARTY_WIN_LEGEND_CONTINUE=Regresar al menú principal - -PARTY_ROUND=Ronda -PARTY_ROUND_WINNER=Ganador -PARTY_NOTPLAYEDYET=Aún no jugado -PARTY_NOBODY=Nadie -NEXT_ROUND=Siguiente ronda: - -PARTY_DISMISSED=¡Perdió! -PARTY_SCORE_WINS=%s -PARTY_SCORE_WINS2=¡Ganó! - -PLUGIN_HDL_NAME=Mantén la lÃnea -PLUGIN_HDL_DESC=¡No bajes tu puntaje del mostrado en pantalla! - -PLUGIN_UNTIL5000_NAME=Hasta 5000 -PLUGIN_UNTIL5000_DESC=Gana quién obtenga 5000 puntos. - -PLUGIN_DUELL_NAME=Duelo -PLUGIN_DUELL_DESC=Canta un duelo hasta 10000 puntos. - -PLUGIN_BLIND_NAME=Modo a ciegas -PLUGIN_BLIND_DESC=Duelo sin mirar las notas. - -STAT_MAIN=Estadisticas -STAT_MAIN_DESC=General -STAT_MAIN_WHEREAMI=Estadisticas - -STAT_OVERVIEW_INTRO=%0:s Estadisticas. \n Último reinicio el %2:.2d.%1:.2d.%3:d -STAT_OVERVIEW_SONG=Hay %0:d canciones (%3:d con VÃdeo), de las cuales %1:d han sido cantadas y %2:d aún no.\n La canción más popular es "%5:s" de %4:s. -STAT_OVERVIEW_PLAYER=Hay registrados %0:d diferentes jugador(es).\n El mejor es %1:s con un puntaje promedio de %2:d puntos.\n %3:s ha hecho el mejor puntaje: %4:d puntos. - -STAT_DETAIL=Estadisticas -STAT_DETAIL_WHEREAMI=Estadisticas detalladas - -STAT_NEXT=Siguiente -STAT_PREV=Anterior -STAT_REVERSE=Invertir -STAT_PAGE=Página %0:d de %1:d \n (%2:d of %3:d Entrys) - -STAT_DESC_SCORES=Mejores puntajes -STAT_DESC_SCORES_REVERSED=Peores puntajes -STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) - -STAT_DESC_SINGERS=Mejores jugadores -STAT_DESC_SINGERS_REVERSED=Peores jugadores -STAT_FORMAT_SINGERS=%0:s \n Puntaje promedio: %1:d - -STAT_DESC_SONGS=Canciones más populares -STAT_DESC_SONGS_REVERSED=Canciones menos populares -STAT_FORMAT_SONGS=%0:s - %1:s \n %2:d veces cantada - -STAT_DESC_BANDS=Bandas más populares -STAT_DESC_BANDS_REVERSED=Bandas menos populares -STAT_FORMAT_BANDS=%0:s \n %1:d veces cantada - -MSG_ERROR_TITLE=Error -MSG_QUESTION_TITLE=Pregunta -MSG_QUIT_USDX=¿Realmente quieres salir? -MSG_END_PARTY=¿Realmente quieres terminar? -ERROR_NO_SONGS=Sin canciones -ERROR_NO_PLUGINS=Sin plugins -ERROR_CORRUPT_SONG=Imposible cargar canciones
\ No newline at end of file +SING_SCORE_LEAD_SINGER=Artista +SING_SCORE_SUPERSTAR=Superestrella +SING_SCORE_ULTRASTAR=Ultraestrella + +SING_TOP_5_CHARTS=Los 5 mejores +SING_TOP_5_CHARTS_WHEREAMI=Los 5 mejores +SING_TOP_5_CHARTS_CONTINUE=A selección de canción + +POPUP_PERFECT=¡Perfecto! +POPUP_AWESOME=¡Asombroso! +POPUP_GREAT=¡Genial! +POPUP_GOOD=¡Bien! +POPUP_NOTBAD=¡No está mal! +POPUP_BAD=¡Mal! +POPUP_POOR=¡Pésimo! +POPUP_AWFUL=¡Horrible! + +IMPLODE_GLUE1=, +IMPLODE_GLUE2= y + +SONG_MENU_NAME_MAIN=Menú canciones +SONG_MENU_PLAY=Cantar +SONG_MENU_CHANGEPLAYERS=Escoger jugadores +SONG_MENU_EDIT=Editar +SONG_MENU_MODI=Cantar una Modi +SONG_MENU_CANCEL=Cancelar + +SONG_MENU_NAME_PLAYLIST=Menú canciones +SONG_MENU_PLAYLIST_ADD=Añadir canción +SONG_MENU_PLAYLIST_DEL=Borrar canción + +SONG_MENU_NAME_PLAYLIST_ADD=Añadir canción +SONG_MENU_PLAYLIST_ADD_NEW=A nueva lista de canciones +SONG_MENU_PLAYLIST_ADD_EXISTING=A lista existente +SONG_MENU_PLAYLIST_NOEXISTING=No hay listas de canciones + +SONG_MENU_NAME_PLAYLIST_NEW=Nueva lista de canciones +SONG_MENU_PLAYLIST_NEW_CREATE=Crear +SONG_MENU_PLAYLIST_NEW_UNNAMED=Sin nombre + +SONG_MENU_NAME_PLAYLIST_DELITEM=¿Borrar? +SONG_MENU_YES=Sí +SONG_MENU_NO=No + +SONG_MENU_NAME_PLAYLIST_LOAD=Abrir lista +SONG_MENU_PLAYLIST_LOAD=Abrir +SONG_MENU_PLAYLIST_DELCURRENT=Borrar la lista actual + +SONG_MENU_NAME_PLAYLIST_DEL=¿Borrar la lista? + +SONG_MENU_NAME_PARTY_MAIN=Menú grupo +SONG_MENU_JOKER=Aleatorio + +SONG_MENU_NAME_PARTY_JOKER=Aleatorio + +SONG_JUMPTO_DESC=Buscar canción +SONG_JUMPTO_TYPE_DESC=Buscar por: +SONG_JUMPTO_TYPE1=Todo +SONG_JUMPTO_TYPE2=Título +SONG_JUMPTO_TYPE3=Artista +SONG_JUMPTO_SONGSFOUND=%d canción(es) encontrada(s) +SONG_JUMPTO_NOSONGSFOUND=No se han encontrado canciones +SONG_JUMPTO_HELP=Escribe el texto a buscar +SONG_JUMPTO_CATTEXT=Buscar por: %s + +PARTY_MODE=Modo grupo +PARTY_DIFFICULTY=Dificultad +PARTY_PLAYLIST=Modo lista +PARTY_PLAYLIST_ALL=Todas las canciones +PARTY_PLAYLIST_CATEGORY=Carpeta +PARTY_PLAYLIST_PLAYLIST=Lista de canciones +PARTY_ROUNDS=Rondas +PARTY_TEAMS=Equipos +PARTY_TEAMS_PLAYER1=Miembros del equipo 1 +PARTY_TEAMS_PLAYER2=Miembros del equipo 2 +PARTY_TEAMS_PLAYER3=Miembros del equipo 3 + +PARTY_LEGEND_CONTINUE=Continuar + +PARTY_OPTIONS_DESC=Opciones del modo grupo +PARTY_OPTIONS_WHEREAMI=Opciones del modo grupo + +PARTY_PLAYER_DESC=¡Escribe los nombres de jugadores y equipos! +PARTY_PLAYER_WHEREAMI=Nombre de los equipos +PARTY_PLAYER_ENTER_NAME=Escribe los nombres +PARTY_PLAYER_LEGEND_CONTINUE=Empezar + +PARTY_ROUND_DESC=Siguientes jugadores +PARTY_ROUND_WHEREAMI=Siguiente ronda +PARTY_ROUND_LEGEND_CONTINUE=Iniciar ronda + +PARTY_SONG_WHEREAMI=Selección de canción +PARTY_SONG_LEGEND_CONTINUE=Cantar +PARTY_SONG_MENU=Menú grupo + +PARTY_SCORE_DESC=Puntuación de la última ronda +PARTY_SCORE_WHEREAMI=Puntuación + +PARTY_WIN_DESC=Equipo ganador +PARTY_WIN_WHEREAMI=Ganador +PARTY_WIN_LEGEND_CONTINUE=Al menú principal + +PARTY_ROUND=Ronda +PARTY_ROUND_WINNER=Ganador +PARTY_NOTPLAYEDYET=Aún no jugado +PARTY_NOBODY=Nadie +NEXT_ROUND=Siguiente ronda: + +PARTY_DISMISSED=¡Perdió! +PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS2=¡Ganó! + +PLUGIN_HDL_NAME=Mantén la línea +PLUGIN_HDL_DESC=No bajes tu puntuación de lo indicado en pantalla + +PLUGIN_UNTIL5000_NAME=Hasta 5000 +PLUGIN_UNTIL5000_DESC=Gana quien obtenga 5000 puntos. + +PLUGIN_DUELL_NAME=Duelo +PLUGIN_DUELL_DESC=Canta un duelo hasta 10000 puntos. + +PLUGIN_TEAMDUELL_NAME=Duelo de equipos +PLUGIN_TEAMDUELL_DESC=¡Pasa el micro! + +PLUGIN_BLIND_NAME=Modo a ciegas +PLUGIN_BLIND_DESC=Duelo sin ver las notas. + +STAT_MAIN=Estadísticas +STAT_MAIN_DESC=General +STAT_MAIN_WHEREAMI=Estadísticas + +STAT_OVERVIEW_INTRO=%0:s Estadísticas. \n Último reinicio el %2:.2d.%1:.2d.%3:d +STAT_OVERVIEW_SONG=%0:d Canciones(%3:d con vídeo), de las cuales %1:d han sido cantadas y %2:d aún no.\n La canción más popular es %5:s de %4:s. +STAT_OVERVIEW_PLAYER=Hay registrados %0:d jugador(es) diferente(s).\n El mejor es %1:s con una puntuación promedio de %2:d puntos.\n %3:s ha hecho la mejor puntuación con %4:d puntos. + +STAT_DETAIL=Estadísticas +STAT_DETAIL_WHEREAMI=Estadísticas detalladas + +STAT_NEXT=Siguiente +STAT_PREV=Anterior +STAT_REVERSE=Invertir el orden +STAT_PAGE=Página %0:d de %1:d \n (%2:d de %3:d entradas) + +STAT_DESC_SCORES=Mejores puntuaciones +STAT_DESC_SCORES_REVERSED=Peores puntuaciones +STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) + +STAT_DESC_SINGERS=Mejores cantantes +STAT_DESC_SINGERS_REVERSED=Peores cantantes +STAT_FORMAT_SINGERS=%0:s \n Puntuación media: %1:d + +STAT_DESC_SONGS=Canciones más populares +STAT_DESC_SONGS_REVERSED=Canciones menos populares +STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx veces cantada + +STAT_DESC_BANDS=Grupos más populares +STAT_DESC_BANDS_REVERSED=Grupos menos populares +STAT_FORMAT_BANDS=%0:s \n %1:dx veces cantado + +MSG_ERROR_TITLE=Error +MSG_QUESTION_TITLE=Pregunta +MSG_QUIT_USDX=¿Seguro que quieres salir? +MSG_END_PARTY=¿Seguro que quieres salir del modo grupo? +ERROR_NO_SONGS=Sin canciones +ERROR_NO_PLUGINS=Sin plugins +ERROR_CORRUPT_SONG=Imposible cargar la canción. +ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Imposible cargar la canción: Archivo no encontrado +ERROR_CORRUPT_SONG_NO_NOTES=Imposible cargar la canción: No se encuentran notas +ERROR_CORRUPT_SONG_NO_BREAKS=Imposible cargar la canción: No se encuentran interrupciones de línea +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Imposible cargar la canción: Error durante el parsing de la línea %0:d
\ No newline at end of file diff --git a/unicode/game/languages/Swedish.ini b/unicode/game/languages/Swedish.ini index 3d17a748..446899d0 100644 --- a/unicode/game/languages/Swedish.ini +++ b/unicode/game/languages/Swedish.ini @@ -1,30 +1,30 @@ [Text] SING_LOADING=Laddar... -SING_CHOOSE_MODE=välj spelläge +SING_CHOOSE_MODE=välj läge SING_SING=sjung -SING_SING_DESC=snabb-spel: sjung solo eller duett +SING_SING_DESC=snabbspel: sjung solo eller duett SING_MULTI=party -SING_MULTI_DESC=sjung i party-läge +SING_MULTI_DESC=sjung i partyläge SING_TOOLS=verktyg SING_STATS=statistik -SING_STATS_DESC=visa statistiken +SING_STATS_DESC=kolla statistiken -SING_EDITOR=redigerare -SING_EDITOR_DESC=skapa egna lÃ¥tar +SING_EDITOR=editor +SING_EDITOR_DESC=skapa din egen låt -SING_GAME_OPTIONS=spelinställningar -SING_GAME_OPTIONS_DESC=ändra spelinställningarna +SING_GAME_OPTIONS=spelinställningar +SING_GAME_OPTIONS_DESC=ändra spelets inställningar SING_EXIT=avsluta -SING_EXIT_DESC=avsluta spelet +SING_EXIT_DESC=sluta spela -SING_OPTIONS=inställningar -SING_OPTIONS_DESC=ändra inställningarna -SING_OPTIONS_WHEREAMI=Inställningar +SING_OPTIONS=inställningar +SING_OPTIONS_DESC=ändra inställningar +SING_OPTIONS_WHEREAMI=Inställningar SING_OPTIONS_GAME=spel SING_OPTIONS_GRAPHICS=grafik @@ -35,150 +35,167 @@ SING_OPTIONS_RECORD=inspelning SING_OPTIONS_ADVANCED=avancerat SING_OPTIONS_EXIT=tillbaka -SING_OPTIONS_GAME_WHEREAMI=Inställningar Spel -SING_OPTIONS_GAME_DESC=allmänna spelinställningar +SING_OPTIONS_GAME_WHEREAMI=Inställningar Spel +SING_OPTIONS_GAME_DESC=vanliga spelinställningar SING_OPTIONS_GAME_PLAYERS=Spelare -SING_OPTIONS_GAME_DIFFICULTY=SvÃ¥righetsgrad -SING_OPTIONS_GAME_LANGUAGE=SprÃ¥k -SING_OPTIONS_GAME_TABS=Flikar -SING_OPTIONS_GAME_SORTING=Sortering efter -SING_OPTIONS_GAME_DEBUG=Debug - -SING_OPTIONS_GRAPHICS_WHEREAMI=Inställningar Grafik -SING_OPTIONS_GRAPHICS_DESC=grafikinställningar -SING_OPTIONS_GRAPHICS_RESOLUTION=Upplösning -SING_OPTIONS_GRAPHICS_FULLSCREEN=Fullskärm -SING_OPTIONS_GRAPHICS_DEPTH=Färgdjup -SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=OscilloskÃ¥p +SING_OPTIONS_GAME_DIFFICULTY=Svårighetsnivå +SING_OPTIONS_GAME_LANGUAGE=Språk +SING_OPTIONS_GAME_TABS=Tabbar +SING_OPTIONS_GAME_SORTING=Sortering +SING_OPTIONS_GAME_DEBUG=Debuggning + +SING_OPTIONS_GRAPHICS_WHEREAMI=Inställningar Grafik +SING_OPTIONS_GRAPHICS_DESC=grafikinställningar +SING_OPTIONS_GRAPHICS_RESOLUTION=Upplösning +SING_OPTIONS_GRAPHICS_FULLSCREEN=Fullskärm +SING_OPTIONS_GRAPHICS_DEPTH=Färgdjup +SING_OPTIONS_GRAPHICS_VISUALIZER=Visualisering +SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Oscilloskåp SING_OPTIONS_GRAPHICS_LINEBONUS=Radbonus SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Filmstorlek -SING_OPTIONS_SOUND_WHEREAMI=Inställningar Ljud -SING_OPTIONS_SOUND_DESC=ljudinställningar -SING_OPTIONS_SOUND_MIC_BOOST=Öka mikrofonljudet -SING_OPTIONS_SOUND_CLICK_ASSIST=Hjälpljud +SING_OPTIONS_SOUND_WHEREAMI=Inställningar Ljud +SING_OPTIONS_SOUND_DESC=ljudinställningar +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Mikrofonuppspelning +SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Bakgrundsmusik +SING_OPTIONS_SOUND_MIC_BOOST=Mikrofonförstärkning +SING_OPTIONS_SOUND_CLICK_ASSIST=Hjälpljud SING_OPTIONS_SOUND_BEAT_CLICK=Taktljud -SING_OPTIONS_SOUND_THRESHOLD=Ljudtröskel -SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=TvÃ¥spelarläge -SING_OPTIONS_SOUND_PREVIEWVOLUME=Volym i lÃ¥tvalsmeny -SING_OPTIONS_SOUND_PREVIEWFADING=Toning i lÃ¥tvalsmeny - -SING_OPTIONS_LYRICS_WHEREAMI=Inställningar SÃ¥ngtext -SING_OPTIONS_LYRICS_DESC=sÃ¥ngtextsinställningar -SING_OPTIONS_LYRICS_FONT=Textstil +SING_OPTIONS_SOUND_THRESHOLD=Ljudtröskel +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Tvåspelarläge +SING_OPTIONS_SOUND_PREVIEWVOLUME=Volym i låtvalsmenyn +SING_OPTIONS_SOUND_PREVIEWFADING=Toning i låtvalsmenyn + +SING_OPTIONS_LYRICS_WHEREAMI=Inställningar Text +SING_OPTIONS_LYRICS_DESC=sångtextinställningar +SING_OPTIONS_LYRICS_FONT=Typsnitt SING_OPTIONS_LYRICS_EFFECT=Effekt SING_OPTIONS_LYRICS_SOLMIZATION=Solmisation +SING_OPTIONS_LYRICS_NOTELINES=Notlinjer -SING_OPTIONS_THEMES_WHEREAMI=Inställningar Teman -SING_OPTIONS_THEMES_DESC=tema- och skalinställningar +SING_OPTIONS_THEMES_WHEREAMI=Inställningar Teman +SING_OPTIONS_THEMES_DESC=temainställningar SING_OPTIONS_THEMES_THEME=Tema -SING_OPTIONS_THEMES_SKIN=Skal -SING_OPTIONS_THEMES_COLOR=Färg +SING_OPTIONS_THEMES_SKIN=Skin +SING_OPTIONS_THEMES_COLOR=Färg -SING_OPTIONS_RECORD_WHEREAMI=Inställningar Inspelning -SING_OPTIONS_RECORD_DESC=mikrofoninställningar +SING_OPTIONS_RECORD_WHEREAMI=Inställningar Inspelning +SING_OPTIONS_RECORD_DESC=Mikrofoninställningar SING_OPTIONS_RECORD_CARD=Ljudkort -SING_OPTIONS_RECORD_INPUT=IngÃ¥ng +SING_OPTIONS_RECORD_INPUT=Ingång SING_OPTIONS_RECORD_CHANNEL=Kanal -SING_OPTIONS_ADVANCED_WHEREAMI=Inställningar Avancerat -SING_OPTIONS_ADVANCED_DESC=avancerade inställningar -SING_OPTIONS_ADVANCED_EFFECTSING=SÃ¥ngeffekt -SING_OPTIONS_ADVANCED_SCREENFADE=Rutblekning -SING_OPTIONS_ADVANCED_LOADANIMATION=Ladda animation -SING_OPTIONS_ADVANCED_ASKBEFOREDEL=SäkerhetsfrÃ¥ga +SING_OPTIONS_ADVANCED_WHEREAMI=Inställningar Avancerat +SING_OPTIONS_ADVANCED_DESC=Avancerade inställningar +SING_OPTIONS_ADVANCED_EFFECTSING=Sångeffekter +SING_OPTIONS_ADVANCED_SCREENFADE=Skärmtoning +SING_OPTIONS_ADVANCED_LOADANIMATION=Laddningsanimering +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Säkerhetsfråga SING_OPTIONS_ADVANCED_LINEBONUS=Radbonus SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= -SING_OPTIONS_ADVANCED_ONSONGCLICK=Vid lÃ¥tval -SING_OPTIONS_ADVANCED_PARTYPOPUP=Automatisk partymeny +SING_OPTIONS_ADVANCED_ONSONGCLICK=Vid Låtval +SING_OPTIONS_ADVANCED_PARTYPOPUP=Automatisk Partymeny -SING_LEGEND_SELECT=välj +SING_EDIT=Editor +SING_EDIT_MENU_DESCRIPTION=skapa din egen låt + +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Importera text från midifil +SING_EDIT_BUTTON_DESCRIPTION_EXIT=tillbaka +SING_EDIT_BUTTON_CONVERT=Importera +SING_EDIT_BUTTON_EXIT=tillbaka + +SING_EDIT_NAVIGATE=navigera +SING_EDIT_SELECT=välj +SING_EDIT_EXIT=tillbaka + +SING_LEGEND_SELECT=välj SING_LEGEND_NAVIGATE=navigera -SING_LEGEND_CONTINUE=fortsätt +SING_LEGEND_CONTINUE=fortsätt SING_LEGEND_ESC=tillbaka -SING_PLAYER_DESC=skriv spelarens/nas namn +SING_PLAYER_DESC=skriv in spelarnamn SING_PLAYER_WHEREAMI=Spelarnamn SING_PLAYER_ENTER_NAME=skriv namn -SING_DIFFICULTY_DESC=välj svÃ¥righetsgrad -SING_DIFFICULTY_WHEREAMI=SvÃ¥righetsgrad -SING_DIFFICULTY_CONTINUE=fortsätt till lÃ¥tval -SING_EASY=Lätt -SING_MEDIUM=Medel -SING_HARD=SvÃ¥r - -SING_SONG_SELECTION_DESC=välj lÃ¥t -SING_SONG_SELECTION_WHEREAMI=LÃ¥tval -SING_SONG_SELECTION_GOTO=gÃ¥ till .. -SING_SONG_SELECTION=lÃ¥tval +SING_DIFFICULTY_DESC=välj svårighetsnivå +SING_DIFFICULTY_WHEREAMI=Svårighetsnivå +SING_DIFFICULTY_CONTINUE=till låtval +SING_EASY=Lätt +SING_MEDIUM=Normal +SING_HARD=Svår + +SING_SONG_SELECTION_DESC=välj din låt +SING_SONG_SELECTION_WHEREAMI=Låtval +SING_SONG_SELECTION_GOTO=gå till... +SING_SONG_SELECTION=Låtval SING_SONG_SELECTION_MENU=meny SING_SONG_SELECTION_PLAYLIST=spellista -SING_SONGS_IN_CAT=LÃ¥tar +SING_SONGS_IN_CAT=Låtar PLAYLIST_CATTEXT=Spellista: %s -SING_TIME=Tid -SING_TOTAL=total -SING_MODE=sing solo -SING_NOTES=noter -SING_GOLDEN_NOTES=gyllene noter +SING_TIME=TID +SING_TOTAL=totalt +SING_MODE=sjung solo +SING_NOTES=toner +SING_GOLDEN_NOTES=gyllene toner SING_PHRASE_BONUS=radbonus -SING_MENU=Huvudmenyn +SING_MENU=Huvudmeny -SONG_SCORE=sÃ¥ngpoäng -SONG_SCORE_WHEREAMI=Poäng +SONG_SCORE=Låtpoäng +SONG_SCORE_WHEREAMI=Poäng -SING_SCORE_TONE_DEAF=Tondöv -SING_SCORE_AMATEUR=Amatör -SING_SCORE_RISING_STAR=Stigande stjärna -SING_SCORE_LEAD_SINGER=Lead Singer -SING_SCORE_HIT_ARTIST=Hitartist -SING_SCORE_SUPERSTAR=Superstjärna -SING_SCORE_ULTRASTAR=Ultrastar +SING_SCORE_TONE_DEAF=Tondöv +SING_SCORE_AMATEUR=Amatör +SING_SCORE_WANNABE=Wannabe +SING_SCORE_HOPEFUL=Potential +SING_SCORE_RISING_STAR=Stigande stjärna +SING_SCORE_LEAD_SINGER=Hitartist +SING_SCORE_SUPERSTAR=Superstjärna +SING_SCORE_ULTRASTAR=Ultrastar! SING_TOP_5_CHARTS=topp 5 Spelare SING_TOP_5_CHARTS_WHEREAMI=topp 5 -SING_TOP_5_CHARTS_CONTINUE=till lÃ¥tval +SING_TOP_5_CHARTS_CONTINUE=till låtval POPUP_PERFECT=perfekt! POPUP_AWESOME=storartat! POPUP_GREAT=riktigt bra! POPUP_GOOD=bra! -POPUP_NOTBAD=godkänt! -POPUP_BAD=dÃ¥ligt! -POPUP_POOR=usel! -POPUP_AWFUL=avskyvärt! +POPUP_NOTBAD=godkänt! +POPUP_BAD=dåligt! +POPUP_POOR=uselt! +POPUP_AWFUL=avskyvärt! IMPLODE_GLUE1=, IMPLODE_GLUE2= och -SONG_MENU_NAME_MAIN=lÃ¥tmeny +SONG_MENU_NAME_MAIN=låtmeny SONG_MENU_PLAY=Sjung -SONG_MENU_CHANGEPLAYERS=Ändra spelare +SONG_MENU_CHANGEPLAYERS=Ändra spelare SONG_MENU_EDIT=Redigera SONG_MENU_MODI=Sjung en mod -SONG_MENU_CANCEL=Ã…ngra +SONG_MENU_CANCEL=Ångra -SONG_MENU_NAME_PLAYLIST=LÃ¥tmeny -SONG_MENU_PLAYLIST_ADD=Lägg till en lÃ¥t -SONG_MENU_PLAYLIST_DEL=Ta bort en lÃ¥t +SONG_MENU_NAME_PLAYLIST=Låtmeny +SONG_MENU_PLAYLIST_ADD=Lägg till låt +SONG_MENU_PLAYLIST_DEL=Ta bort låt -SONG_MENU_NAME_PLAYLIST_ADD=Lägg till en lÃ¥t -SONG_MENU_PLAYLIST_ADD_NEW=till en ny spellista -SONG_MENU_PLAYLIST_ADD_EXISTING=till en existerande spellista -SONG_MENU_PLAYLIST_NOEXISTING=Ingen spellista tillgänglig +SONG_MENU_NAME_PLAYLIST_ADD=Lägg till låt +SONG_MENU_PLAYLIST_ADD_NEW=till ny spellista +SONG_MENU_PLAYLIST_ADD_EXISTING=till exsisterande spellista +SONG_MENU_PLAYLIST_NOEXISTING=Ingen spellista tillgänglig -SONG_MENU_NAME_PLAYLIST_NEW=Ny spellist +SONG_MENU_NAME_PLAYLIST_NEW=Ny spellista SONG_MENU_PLAYLIST_NEW_CREATE=Skapa -SONG_MENU_PLAYLIST_NEW_UNNAMED=Namnlös +SONG_MENU_PLAYLIST_NEW_UNNAMED=Namnlös -SONG_MENU_NAME_PLAYLIST_DEL=Vill du verkligen ta bort? +SONG_MENU_NAME_PLAYLIST_DELITEM=Vill du verkligen bort? SONG_MENU_YES=Ja SONG_MENU_NO=Nej -SONG_MENU_NAME_PLAYLIST_LOAD=Öppna spellista -SONG_MENU_PLAYLIST_LOAD=öppna +SONG_MENU_NAME_PLAYLIST_LOAD=Öppna spellista +SONG_MENU_PLAYLIST_LOAD=öppna SONG_MENU_PLAYLIST_DELCURRENT=ta bort nuvarande spellista SONG_MENU_NAME_PLAYLIST_DEL=Ta bort spellista? @@ -188,111 +205,117 @@ SONG_MENU_JOKER=Joker SONG_MENU_NAME_PARTY_JOKER=ta joker -SONG_JUMPTO_DESC=sök lÃ¥t -SONG_JUMPTO_TYPE_DESC=Sök efter: +SONG_JUMPTO_DESC=sök låt +SONG_JUMPTO_TYPE_DESC=Sök efter: SONG_JUMPTO_TYPE1=Alla SONG_JUMPTO_TYPE2=Titel SONG_JUMPTO_TYPE3=Artist -SONG_JUMPTO_SONGSFOUND=%d LÃ¥t(ar) hittade -SONG_JUMPTO_NOSONGSFOUND=Inga lÃ¥tar hittade -SONG_JUMPTO_HELP=Skriv text för att söka -SONG_JUMPTO_CATTEXT=Sök efter: %s - -PARTY_MODE=partyläge -PARTY_DIFFICULTY=SvÃ¥righestagrad -PARTY_PLAYLIST=Spellistsläge -PARTY_PLAYLIST_ALL=Alla lÃ¥tar +SONG_JUMPTO_SONGSFOUND=%d Låt(ar) hittade +SONG_JUMPTO_NOSONGSFOUND=Ingen låt hittad +SONG_JUMPTO_HELP=Skriv text att söka efter +SONG_JUMPTO_CATTEXT=Sök efter: %s + +PARTY_MODE=partyläge +PARTY_DIFFICULTY=Svårighetsnivå +PARTY_PLAYLIST=Spellistläge +PARTY_PLAYLIST_ALL=Alla låtar PARTY_PLAYLIST_CATEGORY=Mapp PARTY_PLAYLIST_PLAYLIST=Spellista -PARTY_ROUNDS=OmgÃ¥ngar +PARTY_ROUNDS=Omgångar PARTY_TEAMS=Lag PARTY_TEAMS_PLAYER1=Spelare Lag1 PARTY_TEAMS_PLAYER2=Spelare Lag2 PARTY_TEAMS_PLAYER3=Spelare Lag3 -PARTY_LEGEND_CONTINUE=fortsätt +PARTY_LEGEND_CONTINUE=fortsätt -PARTY_OPTIONS_DESC=inställningar för partyspel -PARTY_OPTIONS_WHEREAMI=Partyinställningar +PARTY_OPTIONS_DESC=inställningar för partyspel +PARTY_OPTIONS_WHEREAMI=Partyinställningar -PARTY_PLAYER_DESC=skriv spelar- och lagnamn +PARTY_PLAYER_DESC=skriv spelar- och lagnamn! PARTY_PLAYER_WHEREAMI=Partynamn PARTY_PLAYER_ENTER_NAME=skriv namn PARTY_PLAYER_LEGEND_CONTINUE=starta partyspel -PARTY_ROUND_DESC=nästa spelare till mikrofonerna -PARTY_ROUND_WHEREAMI=Party Nästa omgÃ¥ng -PARTY_ROUND_LEGEND_CONTINUE=starta omgÃ¥ng +PARTY_ROUND_DESC=nästa spelare till mikrofonerna +PARTY_ROUND_WHEREAMI=Party Nästa omgång +PARTY_ROUND_LEGEND_CONTINUE=starta omgång -PARTY_SONG_WHEREAMI=Party LÃ¥tval +PARTY_SONG_WHEREAMI=Party Låtval PARTY_SONG_LEGEND_CONTINUE=sjung PARTY_SONG_MENU=partymeny -PARTY_SCORE_DESC=poäng frÃ¥n senaste omgÃ¥ngen -PARTY_SCORE_WHEREAMI=Partypoäng +PARTY_SCORE_DESC=poäng från förra omgången +PARTY_SCORE_WHEREAMI=Partypoäng PARTY_WIN_DESC=vinnare av partyspelet PARTY_WIN_WHEREAMI=Partyvinnare PARTY_WIN_LEGEND_CONTINUE=tillbaka till huvudmenyn -PARTY_ROUND=OmgÃ¥ng +PARTY_ROUND=Omgång PARTY_ROUND_WINNER=Vinnare -PARTY_NOTPLAYEDYET=inte spelad än +PARTY_NOTPLAYEDYET=inte spelad än PARTY_NOBODY=ingen -NEXT_ROUND=Nästa omgÃ¥ng: +NEXT_ROUND=Nästa runda: -PARTY_DISMISSED=Avbröt! +PARTY_DISMISSED=Avbröt! PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=vann! -PLUGIN_HDL_NAME=HÃ¥ll stÃ¥nd -PLUGIN_HDL_DESC=Bli inte sämre än vad omdömesmätaren visar - -PLUGIN_UNTIL5000_NAME=Tills 5000 -PLUGIN_UNTIL5000_DESC=Den som först fÃ¥r 5000 poäng vinner matchen +PLUGIN_HDL_NAME=Håll god ton +PLUGIN_HDL_DESC=Bli inte sämre än vad markeringen på omdömesmätaren visar. +PLUGIN_UNTIL5000_NAME=Till 5000 +PLUGIN_UNTIL5000_DESC=Den som först får 5000 poäng vinner matchen. PLUGIN_DUELL_NAME=Duell -PLUGIN_DUELL_DESC=Sjung en duell tills 10000 poäng +PLUGIN_DUELL_DESC=Sjung en duett till 10000 poäng. + +PLUGIN_TEAMDUELL_NAME=Lagduell +PLUGIN_TEAMDUELL_DESC=Skicka micken! -PLUGIN_BLIND_NAME=Blindläge -PLUGIN_BLIND_DESC=Duell utan att se noterna. +PLUGIN_BLIND_NAME=Blindläge +PLUGIN_BLIND_DESC=Duell utan att se tonerna. STAT_MAIN=Statistik -STAT_MAIN_DESC=Allmän +STAT_MAIN_DESC=Allmänn STAT_MAIN_WHEREAMI=Statistik -STAT_OVERVIEW_INTRO=%0:s Statistik. \n Senast Ã¥terställd %2:.2d.%1:.2d.%3:d -STAT_OVERVIEW_SONG=%0:d LÃ¥tar (%3:d med Video), varav %1:d redan har spelats och %2:d inte har spelats än.\n Den mest populära LÃ¥ten är %5:s av %4:s. -STAT_OVERVIEW_PLAYER=Sedan den senaste Ã¥terställningen har %0:d olika spelare sjungit.\n Den bästa spelaren är %1:s med ett genomsnitt pÃ¥ %2:d poäng.\n %3:s har sjungit bäst med %4:d poäng. +STAT_OVERVIEW_INTRO=%0:s Statistik. \n Senast återställd %2:.2d.%1:.2d.%3:d +STAT_OVERVIEW_SONG=%0:d Låtar(%3:d med Video), varav %1:d redan har spelats och %2:d inte har spelats än.\n Den mest populära låten är %5:s med %4:s. +STAT_OVERVIEW_PLAYER=Sedan den senaste återställningen har %0:d olika spelare sjungit.\n Den bästa spelaren är %1:s med ett genomsnitt på %2:d poäng.\n %3:s har sjungit bäst med %4:d poäng. STAT_DETAIL=Statistik STAT_DETAIL_WHEREAMI=Detaljerad statistik -STAT_NEXT=Nästa sida -STAT_PREV=FöregÃ¥ende sida -STAT_REVERSE=Omvänd ordning -STAT_PAGE=Sida %0:d av %1:d Sidor\n (%2:d av %3:d Poster) +STAT_NEXT=Nästa sida +STAT_PREV=Föregående sida +STAT_REVERSE=Omvänd ordning +STAT_PAGE=Sida %0:d av %1:d sidor\n (%2:d av %3:d poster) -STAT_DESC_SCORES=Högst resultat -STAT_DESC_SCORES_REVERSED=Lägsta resultaten +STAT_DESC_SCORES=Högsta resultat +STAT_DESC_SCORES_REVERSED=Lägsta resultat STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) -STAT_DESC_SINGERS=Bästa LÃ¥tarna -STAT_DESC_SINGERS_REVERSED=Sämsta LÃ¥tarna -STAT_FORMAT_SINGERS=%0:s \n Genomsnittlig poäng: %1:d +STAT_DESC_SINGERS=Bästa sångare +STAT_DESC_SINGERS_REVERSED=Sämsta sångare +STAT_FORMAT_SINGERS=%0:s \n genomsnittlig poäng: %1:d -STAT_DESC_SONGS=Populäraste LÃ¥tarna -STAT_DESC_SONGS_REVERSED=Minst populära LÃ¥tarna -STAT_FORMAT_SONGS=%0:s - %1:s \n Sjungen %2:d gÃ¥nger +STAT_DESC_SONGS=Populäraste låtarna +STAT_DESC_SONGS_REVERSED=Minst populära låtarna +STAT_FORMAT_SONGS=%0:s - %1:s \n Sjungen %2:dx gånger -STAT_DESC_BANDS=Populäraste Artisterna -STAT_DESC_BANDS_REVERSED=Minst populära arrtisterna +STAT_DESC_BANDS=Populäraste artisterna +STAT_DESC_BANDS_REVERSED=Minst populära artisterna STAT_FORMAT_BANDS=%0:s \n %1:dx sjungna -MSG_ERROR_TITLE=Error -MSG_QUESTION_TITLE=FrÃ¥ga +MSG_ERROR_TITLE=Fel +MSG_QUESTION_TITLE=Fråga MSG_QUIT_USDX=Vill du verkligen avsluta UltraStar? -MSG_END_PARTY=Vill du verkligen avsluta party-läge? -ERROR_NO_SONGS=Inga LÃ¥tar laddade -ERROR_NO_PLUGINS=No Plugins loaded -ERROR_CORRUPT_SONG=Song could not be loaded.
\ No newline at end of file +MSG_END_PARTY=Vill du verkligen avsluta partyläge? +ERROR_NO_SONGS=Inga låtar laddade +ERROR_NO_PLUGINS=Inga insticksprogram laddade +ERROR_CORRUPT_SONG=Låten kunde inte laddas. +ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Låten kunde inte laddas: Filen kunde inte hittas +ERROR_CORRUPT_SONG_NO_NOTES=Låten kunde inte laddas: Kan inte hitta toner +ERROR_CORRUPT_SONG_NO_BREAKS=Låten kunde inte laddas: Kan inte hitta radbrytningar +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Låten kunde inte laddas: Fel på rad %0:d
\ No newline at end of file diff --git a/unicode/game/languages/Danish.ini b/unicode/game/languages/old/Danish.ini index e94c5b98..1ba880e6 100644 --- a/unicode/game/languages/Danish.ini +++ b/unicode/game/languages/old/Danish.ini @@ -1,14 +1,15 @@ [Text] SING_LOADING=Loader... -SING_CHOOSE_MODE=Vælg modus +SING_CHOOSE_MODE=Vælg modus +SING_CHOOSE_MODE=Vælg modus SING_SING=Syng SING_SING_DESC=Hurtigt spil: Syng solo eller duet SING_MULTI=Fest SING_MULTI_DESC=Syng i fest modus -SING_TOOLS=Værktøjer +SING_TOOLS=Værktøjer SING_STATS=stats SING_STATS_DESC=Se statestikker @@ -16,13 +17,13 @@ SING_STATS_DESC=Se statestikker SING_EDITOR=editor SING_EDITOR_DESC=Lav dine egne sange SING_GAME_OPTIONS=Spil Indstillinger -SING_GAME_OPTIONS_DESC=Ændre spil Indstillinger +SING_GAME_OPTIONS_DESC=Ændre spil Indstillinger SING_EXIT=Forlad SING_EXIT_DESC=Forlad spillet SING_OPTIONS=Indstillinger -SING_OPTIONS_DESC=Ændre Instillinger +SING_OPTIONS_DESC=Ændre Instillinger SING_OPTIONS_WHEREAMI=Indstillinger SING_OPTIONS_GAME=Spil @@ -37,7 +38,7 @@ SING_OPTIONS_EXIT=Tilbage SING_OPTIONS_GAME_WHEREAMI=Spil Indstillinger SING_OPTIONS_GAME_DESC=Generelle Spil Indstillinger SING_OPTIONS_GAME_PLAYERS=Spillere -SING_OPTIONS_GAME_DIFFICULTY=Sværhedsgrad +SING_OPTIONS_GAME_DIFFICULTY=Sværhedsgrad SING_OPTIONS_GAME_LANGUAGE=Sprog SING_OPTIONS_GAME_TABS=Tabs SING_OPTIONS_GAME_SORTING=Sorting @@ -45,19 +46,19 @@ SING_OPTIONS_GAME_DEBUG=Debug SING_OPTIONS_GRAPHICS_WHEREAMI=Grafik Indstillinger SING_OPTIONS_GRAPHICS_DESC=Grafik Indstillinger -SING_OPTIONS_GRAPHICS_RESOLUTION=Opløsning -SING_OPTIONS_GRAPHICS_FULLSCREEN=Fuldskærm +SING_OPTIONS_GRAPHICS_RESOLUTION=Opløsning +SING_OPTIONS_GRAPHICS_FULLSCREEN=Fuldskærm SING_OPTIONS_GRAPHICS_DEPTH=Farve dybte SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Oscilloskop SING_OPTIONS_GRAPHICS_LINEBONUS=Linie Bonus -SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Film Størrelse +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Film Størrelse SING_OPTIONS_SOUND_WHEREAMI=Lyd Indstillinger SING_OPTIONS_SOUND_DESC=Lyd Indstillinger SING_OPTIONS_SOUND_MIC_BOOST=Mikrofon Boost SING_OPTIONS_SOUND_CLICK_ASSIST=Click assist SING_OPTIONS_SOUND_BEAT_CLICK=Beat click -SING_OPTIONS_SOUND_THRESHOLD=Tærskel +SING_OPTIONS_SOUND_THRESHOLD=Tærskel SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=2 Spiller modus SING_OPTIONS_SOUND_PREVIEWVOLUME=Frosmag Volume SING_OPTIONS_SOUND_PREVIEWFADING=Forsmag Fader @@ -83,7 +84,7 @@ SING_OPTIONS_RECORD_CHANNEL=Kanal SING_OPTIONS_ADVANCED_WHEREAMI=Advancerede Indstillinger SING_OPTIONS_ADVANCED_DESC=Advancerede Indstillinger SING_OPTIONS_ADVANCED_EFFECTSING=Sang Effekter -SING_OPTIONS_ADVANCED_SCREENFADE=Skærm Fading +SING_OPTIONS_ADVANCED_SCREENFADE=Skærm Fading SING_OPTIONS_ADVANCED_LOADANIMATION=Load Animation SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Savety Questions SING_OPTIONS_ADVANCED_LINEBONUS=Linie Bonus @@ -91,25 +92,25 @@ SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Efter sang valg SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto Festmodus -SING_LEGEND_SELECT=Vælg +SING_LEGEND_SELECT=Vælg SING_LEGEND_NAVIGATE=Naviger -SING_LEGEND_CONTINUE=Fortsæt +SING_LEGEND_CONTINUE=Fortsæt SING_LEGEND_ESC=Tilbage SING_PLAYER_DESC=Skriv Spiller Navn/e SING_PLAYER_WHEREAMI=Spiller Navne SING_PLAYER_ENTER_NAME=Skriv navn -SING_DIFFICULTY_DESC=Vælg Sværhedsgrad -SING_DIFFICULTY_WHEREAMI=Sværhedsgrad +SING_DIFFICULTY_DESC=Vælg Sværhedsgrad +SING_DIFFICULTY_WHEREAMI=Sværhedsgrad SING_DIFFICULTY_CONTINUE=Til sang valg SING_EASY=Let SING_MEDIUM=Normal -SING_HARD=Svær +SING_HARD=Svær -SING_SONG_SELECTION_DESC=Vælg Din Sang +SING_SONG_SELECTION_DESC=Vælg Din Sang SING_SONG_SELECTION_WHEREAMI=Sang Valg -SING_SONG_SELECTION_GOTO=GÃ¥ Til .. +SING_SONG_SELECTION_GOTO=Gå Til .. SING_SONG_SELECTION=Sang Valg SING_SONG_SELECTION_MENU=Menu SING_SONG_SELECTION_PLAYLIST=Afspilningsliste @@ -128,8 +129,8 @@ SING_MENU=Hoved Menu SONG_SCORE=Sang score SONG_SCORE_WHEREAMI=Score -SING_SCORE_TONE_DEAF=Tone Døv! -SING_SCORE_AMATEUR=Amatør! +SING_SCORE_TONE_DEAF=Tone Døv! +SING_SCORE_AMATEUR=Amatør! SING_SCORE_RISING_STAR=Aspirende Stjerne SING_SCORE_LEAD_SINGER=Forsanger SING_SCORE_HIT_ARTIST=Etableret Stjerne @@ -144,9 +145,9 @@ POPUP_PERFECT=Perfekt! POPUP_AWESOME=Utroligt! POPUP_GREAT=Meget Godt! POPUP_GOOD=Godt! -POPUP_NOTBAD=Ikke dÃ¥rligt! -POPUP_BAD=DÃ¥rligt! -POPUP_POOR=Meget DÃ¥rligt! +POPUP_NOTBAD=Ikke dårligt! +POPUP_BAD=Dårligt! +POPUP_POOR=Meget Dårligt! POPUP_AWFUL=Ringe! IMPLODE_GLUE1=, @@ -155,30 +156,30 @@ IMPLODE_GLUE2= og SONG_MENU_NAME_MAIN=Sang Menu SONG_MENU_PLAY=Syng SONG_MENU_CHANGEPLAYERS=Skift Spillere -SONG_MENU_EDIT=Ændre +SONG_MENU_EDIT=Ændre SONG_MENU_MODI=Sing a Modi SONG_MENU_CANCEL=Annuller SONG_MENU_NAME_PLAYLIST=Sang Menu -SONG_MENU_PLAYLIST_ADD=Tilføj Sang +SONG_MENU_PLAYLIST_ADD=Tilføj Sang SONG_MENU_PLAYLIST_DEL=Slet Sang -SONG_MENU_NAME_PLAYLIST_ADD=Tilføj Song +SONG_MENU_NAME_PLAYLIST_ADD=Tilføj Song SONG_MENU_PLAYLIST_ADD_NEW=Til Ny Afspilningsliste SONG_MENU_PLAYLIST_ADD_EXISTING=Til Eksisterende Afspilningsliste -SONG_MENU_PLAYLIST_NOEXISTING=Ingen Tilgængelige Afspilningslister +SONG_MENU_PLAYLIST_NOEXISTING=Ingen Tilgængelige Afspilningslister SONG_MENU_NAME_PLAYLIST_NEW=Ny Afspilningsliste SONG_MENU_PLAYLIST_NEW_CREATE=Skab SONG_MENU_PLAYLIST_NEW_UNNAMED=Unavngiven -SONG_MENU_NAME_PLAYLIST_DEL=Vil Du Virkelig Slette? +SONG_MENU_NAME_PLAYLIST_DELITEM=Vil Du Virkelig Slette? SONG_MENU_YES=Ja SONG_MENU_NO=Nej -SONG_MENU_NAME_PLAYLIST_LOAD=Ã…ben Afspilningsliste -SONG_MENU_PLAYLIST_LOAD=Ã…ben -SONG_MENU_PLAYLIST_DELCURRENT=Slet Nuværende Afspilningsliste +SONG_MENU_NAME_PLAYLIST_LOAD=Åben Afspilningsliste +SONG_MENU_PLAYLIST_LOAD=Åben +SONG_MENU_PLAYLIST_DELCURRENT=Slet Nuværende Afspilningsliste SONG_MENU_NAME_PLAYLIST_DEL=Slet Afspilningslisten? @@ -187,18 +188,18 @@ SONG_MENU_JOKER=Joker SONG_MENU_NAME_PARTY_JOKER=Brug Jokeren -SONG_JUMPTO_DESC=Søg Sang -SONG_JUMPTO_TYPE_DESC=Søg Efter: +SONG_JUMPTO_DESC=Søg Sang +SONG_JUMPTO_TYPE_DESC=Søg Efter: SONG_JUMPTO_TYPE1=Alle SONG_JUMPTO_TYPE2=Titel SONG_JUMPTO_TYPE3=Kunstner SONG_JUMPTO_SONGSFOUND=%d Sang(e) fundet! SONG_JUMPTO_NOSONGSFOUND=Ingen Sange Fundet -SONG_JUMPTO_HELP=Skriv Teksten Du Vil Søge Efter -SONG_JUMPTO_CATTEXT=Søg Efter: %s +SONG_JUMPTO_HELP=Skriv Teksten Du Vil Søge Efter +SONG_JUMPTO_CATTEXT=Søg Efter: %s PARTY_MODE=Fest modus -PARTY_DIFFICULTY=Sværhedsgrad +PARTY_DIFFICULTY=Sværhedsgrad PARTY_PLAYLIST=Afspilningsliste modus PARTY_PLAYLIST_ALL=Alle sange PARTY_PLAYLIST_CATEGORY=Mappe @@ -209,7 +210,7 @@ PARTY_TEAMS_PLAYER1=Spiller Team 1 PARTY_TEAMS_PLAYER2=Spiller Team 2 PARTY_TEAMS_PLAYER3=Spiller Team 3 -PARTY_LEGEND_CONTINUE=Fortsæt +PARTY_LEGEND_CONTINUE=Fortsæt PARTY_OPTIONS_DESC=Indstillinger for Fest spil PARTY_OPTIONS_WHEREAMI=Fest Indstillinger @@ -219,8 +220,8 @@ PARTY_PLAYER_WHEREAMI=Fest navne PARTY_PLAYER_ENTER_NAME=Skriv Navne PARTY_PLAYER_LEGEND_CONTINUE=Start Fest Spil -PARTY_ROUND_DESC=Næste spillere til mikrofonerne -PARTY_ROUND_WHEREAMI=Fest Næste runde +PARTY_ROUND_DESC=Næste spillere til mikrofonerne +PARTY_ROUND_WHEREAMI=Fest Næste runde PARTY_ROUND_LEGEND_CONTINUE=Start runde PARTY_SONG_WHEREAMI=Fest Sang-Valg @@ -238,17 +239,17 @@ PARTY_ROUND=Runde PARTY_ROUND_WINNER=vinder PARTY_NOTPLAYEDYET=Ikke spillet endnu PARTY_NOBODY=Ingen -NEXT_ROUND=Næste Runde: +NEXT_ROUND=Næste Runde: PARTY_DISMISSED=Afsluttet! PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=Vinder! PLUGIN_HDL_NAME=Hold Linien -PLUGIN_HDL_DESC=FÃ¥ ikke værrer end pilen pÃ¥ skalaen peger pÃ¥ +PLUGIN_HDL_DESC=Få ikke værrer end pilen på skalaen peger på PLUGIN_UNTIL5000_NAME=Until 5000 -PLUGIN_UNTIL5000_DESC=Hvem fÃ¥r 5000 point først vinder the kampen. +PLUGIN_UNTIL5000_DESC=Hvem får 5000 point først vinder the kampen. PLUGIN_DUELL_NAME=Duell PLUGIN_DUELL_DESC=Syng en duel intil 10000 point. @@ -267,7 +268,7 @@ STAT_OVERVIEW_PLAYER=Since the last Reset there were/was %0:d different Player(s STAT_DETAIL=Statestikker STAT_DETAIL_WHEREAMI=Detaljerede Statestikker -STAT_NEXT=Næste Side +STAT_NEXT=Næste Side STAT_PREV=Tidligere Side STAT_REVERSE=Omvendt Orden STAT_PAGE=Seite %0:d of %1:d Pages\n (%2:d of %3:d Entrys) @@ -277,19 +278,19 @@ STAT_DESC_SCORES_REVERSED=LowScore STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) STAT_DESC_SINGERS=Bedste Sangere -STAT_DESC_SINGERS_REVERSED=Værste Sangere +STAT_DESC_SINGERS_REVERSED=Værste Sangere STAT_FORMAT_SINGERS=%0:s \n Average Score: %1:d -STAT_DESC_SONGS=Mest Populære Sange -STAT_DESC_SONGS_REVERSED=Mindst Populære Sange +STAT_DESC_SONGS=Mest Populære Sange +STAT_DESC_SONGS_REVERSED=Mindst Populære Sange STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx sung -STAT_DESC_BANDS=Mest Populære Bands -STAT_DESC_BANDS_REVERSED=Mindst Populære Bands +STAT_DESC_BANDS=Mest Populære Bands +STAT_DESC_BANDS_REVERSED=Mindst Populære Bands STAT_FORMAT_BANDS=%0:s \n %1:dx Sung MSG_ERROR_TITLE=Fejl -MSG_QUESTION_TITLE=SpørgsmÃ¥l +MSG_QUESTION_TITLE=Spørgsmål MSG_QUIT_USDX=Vil du virkelig forlade UltraStar? MSG_END_PARTY=Vil du virkelig forlade fest Modus? ERROR_NO_SONGS=Ingen Sange hentet diff --git a/unicode/game/languages/old/French.ini b/unicode/game/languages/old/French.ini new file mode 100644 index 00000000..8a841fab --- /dev/null +++ b/unicode/game/languages/old/French.ini @@ -0,0 +1,310 @@ +[Text] +SING_LOADING=Chargement... + +SING_CHOOSE_MODE=Choisir un mode +SING_SING=Solo +SING_SING_DESC=Chanter + +SING_MULTI=Multi +SING_MULTI_DESC=Chanter à plusieurs + +SING_TOOLS=Outils + +SING_STATS=Statistiques +SING_STATS_DESC=Consulter les statistiques + +SING_EDITOR=Éditeur +SING_EDITOR_DESC=Créer vos propre chansons + +SING_GAME_OPTIONS=Options +SING_GAME_OPTIONS_DESC=Modifier les paramètres du jeu + +SING_EXIT=Quitter +SING_EXIT_DESC=Quitter le jeu + +SING_OPTIONS=Options +SING_OPTIONS_DESC=Changer les paramètres +SING_OPTIONS_WHEREAMI=Options + +SING_OPTIONS_GAME=Jeu +SING_OPTIONS_GRAPHICS=Graphismes +SING_OPTIONS_SOUND=Audio +SING_OPTIONS_LYRICS=Paroles +SING_OPTIONS_THEMES=Thèmes +SING_OPTIONS_RECORD=Micros +SING_OPTIONS_ADVANCED=Avancé +SING_OPTIONS_EXIT=Retour + +SING_OPTIONS_GAME_WHEREAMI=Options de jeu +SING_OPTIONS_GAME_DESC=Options générales de jeu +SING_OPTIONS_GAME_PLAYERS=Joueurs +SING_OPTIONS_GAME_DIFFICULTY=Difficulté +SING_OPTIONS_GAME_LANGUAGE=Langue +SING_OPTIONS_GAME_TABS=Dossier +SING_OPTIONS_GAME_SORTING=Tri +SING_OPTIONS_GAME_DEBUG=Débogage + +SING_OPTIONS_GRAPHICS_WHEREAMI=Options graphiques +SING_OPTIONS_GRAPHICS_DESC=Paramètres des graphismes +SING_OPTIONS_GRAPHICS_RESOLUTION=Résolution +SING_OPTIONS_GRAPHICS_FULLSCREEN=Plein écran +SING_OPTIONS_GRAPHICS_DEPTH=Couleurs +SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Oscilloscope +SING_OPTIONS_GRAPHICS_LINEBONUS=Bonus de phrases +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Taille vidéo + +SING_OPTIONS_SOUND_WHEREAMI=Options de son +SING_OPTIONS_SOUND_DESC=Paramètres de son +SING_OPTIONS_SOUND_MIC_BOOST=Amplif. mic. +SING_OPTIONS_SOUND_CLICK_ASSIST=Clics d'aide +SING_OPTIONS_SOUND_BEAT_CLICK=Métronome +SING_OPTIONS_SOUND_THRESHOLD=Suppression bruit +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Mode 2 joueurs +SING_OPTIONS_SOUND_PREVIEWVOLUME=Prévis. volume +SING_OPTIONS_SOUND_PREVIEWFADING=Prévis. baisse + +SING_OPTIONS_LYRICS_WHEREAMI=Options de paroles +SING_OPTIONS_LYRICS_DESC=Paramètres de paroles +SING_OPTIONS_LYRICS_FONT=Caractères +SING_OPTIONS_LYRICS_EFFECT=Effet +SING_OPTIONS_LYRICS_SOLMIZATION=Afficher gamme + +SING_OPTIONS_THEMES_WHEREAMI=Options des thèmes +SING_OPTIONS_THEMES_DESC=Paramètres des thèmes +SING_OPTIONS_THEMES_THEME=Thèmes +SING_OPTIONS_THEMES_SKIN=Aspect +SING_OPTIONS_THEMES_COLOR=Couleur + +SING_OPTIONS_RECORD_WHEREAMI=Options d'enregistrement +SING_OPTIONS_RECORD_DESC=Paramètres des micros +SING_OPTIONS_RECORD_CARD=Carte son +SING_OPTIONS_RECORD_INPUT=Entrée +SING_OPTIONS_RECORD_CHANNEL=Canal + +SING_OPTIONS_ADVANCED_WHEREAMI=Options avancées +SING_OPTIONS_ADVANCED_DESC=Paramètres avancés +SING_OPTIONS_ADVANCED_EFFECTSING=Effet de chant +SING_OPTIONS_ADVANCED_SCREENFADE=Fondu écran +SING_OPTIONS_ADVANCED_LOADANIMATION=Charge animation +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Confirm sup. +SING_OPTIONS_ADVANCED_LINEBONUS=Bonus de phrases +SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Compteur de titres chantés +SING_OPTIONS_ADVANCED_ONSONGCLICK=Choix ap. chanson +SING_OPTIONS_ADVANCED_PARTYPOPUP=Menu multi auto + +SING_EDIT=Éditeur +SING_EDIT_MENU_DESCRIPTION=Créer vos propre chansons + +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Importer texte à une dossier de midi file +SING_EDIT_BUTTON_DESCRIPTION_EXIT=Retour +SING_EDIT_BUTTON_CONVERT=Importer +SING_EDIT_BUTTON_EXIT=Retour + +SING_EDIT_NAVIGATE=Naviguer +SING_EDIT_SELECT=Valider +SING_EDIT_EXIT=Retour + +SING_LEGEND_SELECT=Valider +SING_LEGEND_NAVIGATE=Naviguer +SING_LEGEND_CONTINUE=Valider +SING_LEGEND_ESC=Retour + +SING_PLAYER_DESC=Entrer le nom du joueur +SING_PLAYER_WHEREAMI=Nom du joueur +SING_PLAYER_ENTER_NAME=Modifier + +SING_DIFFICULTY_DESC=Choisir le niveau de difficulté +SING_DIFFICULTY_WHEREAMI=Difficulté +SING_DIFFICULTY_CONTINUE=Valider +SING_EASY=Facile +SING_MEDIUM=Moyen +SING_HARD=Difficile + +SING_SONG_SELECTION_DESC=Choisir une chanson +SING_SONG_SELECTION_WHEREAMI=Sélection du titre +SING_SONG_SELECTION_GOTO=Atteindre +SING_SONG_SELECTION=Choix de chanson +SING_SONG_SELECTION_MENU=Menu +SING_SONG_SELECTION_PLAYLIST=Playlist +SING_SONGS_IN_CAT=Chansons +PLAYLIST_CATTEXT=Playlist: %s + +SING_TIME=TEMPS +SING_TOTAL=Total +SING_MODE=Mode +SING_NOTES=Notes +SING_GOLDEN_NOTES=Notes en or +SING_PHRASE_BONUS=Bonus de phrases + +SING_MENU=Menu principal + +SONG_SCORE=Score +SONG_SCORE_WHEREAMI=Points + +SING_SCORE_TONE_DEAF=Casserole +SING_SCORE_AMATEUR=Amateur +SING_SCORE_RISING_STAR=Star en herbe +SING_SCORE_LEAD_SINGER=Artiste +SING_SCORE_HIT_ARTIST=Révélation +SING_SCORE_SUPERSTAR=Superstar +SING_SCORE_ULTRASTAR=Ultrastar + +SING_TOP_5_CHARTS=Top 5 +SING_TOP_5_CHARTS_WHEREAMI=Meilleurs joueurs +SING_TOP_5_CHARTS_CONTINUE=Continuer + +POPUP_PERFECT=Parfait ! +POPUP_AWESOME=Cool ! +POPUP_GREAT=Grandiose ! +POPUP_GOOD=Bien ! +POPUP_NOTBAD=O.K. ! +POPUP_BAD=Pas terrible ! +POPUP_POOR=Mauvais ! +POPUP_AWFUL=Nul ! + +IMPLODE_GLUE1=, +IMPLODE_GLUE2= et + +SONG_MENU_NAME_MAIN=Menu +SONG_MENU_PLAY=Chanter +SONG_MENU_CHANGEPLAYERS=Changer de joueur +SONG_MENU_EDIT=Éditeur +SONG_MENU_MODI=Chanter un mode +SONG_MENU_CANCEL=Annuler + +SONG_MENU_NAME_PLAYLIST=Menu +SONG_MENU_PLAYLIST_ADD=Ajouter une chanson +SONG_MENU_PLAYLIST_DEL=Supprimer la chanson + +SONG_MENU_NAME_PLAYLIST_ADD=Ajouter chanson +SONG_MENU_PLAYLIST_ADD_NEW=À la nouvelle playlist +SONG_MENU_PLAYLIST_ADD_EXISTING=Ajouter à la playlist +SONG_MENU_PLAYLIST_NOEXISTING=Pas de playlist + +SONG_MENU_NAME_PLAYLIST_NEW=Nouvelle playlist +SONG_MENU_PLAYLIST_NEW_CREATE=Créer +SONG_MENU_PLAYLIST_NEW_UNNAMED=Sans-nom + +SONG_MENU_NAME_PLAYLIST_DELITEM=Supprimer ? +SONG_MENU_YES=Oui +SONG_MENU_NO=Non + +SONG_MENU_NAME_PLAYLIST_DEL=Supprimer la playlist ? + +SONG_MENU_NAME_PLAYLIST_LOAD=Ouvrir une playlist +SONG_MENU_PLAYLIST_LOAD=Ouvrir +SONG_MENU_PLAYLIST_DELCURRENT=Supprimer la playlist actuel + +SONG_MENU_NAME_PARTY_MAIN=Menu +SONG_MENU_JOKER=Joker + +SONG_MENU_NAME_PARTY_JOKER=Joker + +SONG_JUMPTO_DESC=Rechercher +SONG_JUMPTO_TYPE_DESC=Recherche : +SONG_JUMPTO_TYPE1=Tout +SONG_JUMPTO_TYPE2=Titre +SONG_JUMPTO_TYPE3=Artiste +SONG_JUMPTO_SONGSFOUND=%d Chanson(s) trouvée(s) +SONG_JUMPTO_NOSONGSFOUND=Aucune chanson trouvée +SONG_JUMPTO_HELP=Entrer le texte à rechercher +SONG_JUMPTO_CATTEXT=Recherche: %s + +PARTY_MODE=Mode multi +PARTY_DIFFICULTY=Difficulté +PARTY_PLAYLIST=Playlist +PARTY_PLAYLIST_ALL=Toutes les chansons +PARTY_PLAYLIST_CATEGORY=Dossier +PARTY_PLAYLIST_PLAYLIST=Playlist +PARTY_ROUNDS=Nbre manches +PARTY_TEAMS=Nbre équipes +PARTY_TEAMS_PLAYER1=Joueur(s) équipe 1 +PARTY_TEAMS_PLAYER2=Joueur(s) équipe 2 +PARTY_TEAMS_PLAYER3=Joueur(s) équipe 3 + +PARTY_LEGEND_CONTINUE=Suivant + +PARTY_OPTIONS_DESC=Paramètres du mode multi +PARTY_OPTIONS_WHEREAMI=Options du mode multi + +PARTY_PLAYER_DESC=Entrer le nom des équipes et des joueurs +PARTY_PLAYER_WHEREAMI=Mode multi: Equipes +PARTY_PLAYER_ENTER_NAME=Modifier +PARTY_PLAYER_LEGEND_CONTINUE=Valider + +PARTY_ROUND_DESC=Joueurs suivants à vos micros ! +PARTY_ROUND_WHEREAMI=Mode multi: Manche suivante +PARTY_ROUND_LEGEND_CONTINUE=Commencer + +PARTY_SONG_WHEREAMI=Mode multi: Choix de la chanson +PARTY_SONG_LEGEND_CONTINUE=Chanter +PARTY_SONG_MENU=Menu + +PARTY_SCORE_DESC=Score de la manche +PARTY_SCORE_WHEREAMI=Mode multi: Score + +PARTY_WIN_DESC=Gagnant de la partie +PARTY_WIN_WHEREAMI=Mode multi: Gagnant +PARTY_WIN_LEGEND_CONTINUE=Retour au menu principal + +PARTY_ROUND=Manche +PARTY_ROUND_WINNER=Gagnant +PARTY_NOTPLAYEDYET=- +PARTY_NOBODY=Personne ne +NEXT_ROUND=Manche suivante: + +PARTY_DISMISSED=Rétrogradé +PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS2=l'emporte ! + +PLUGIN_HDL_NAME=Tiens la barre +PLUGIN_HDL_DESC=Maintiens la jauge dans le secteur indiqué + +PLUGIN_UNTIL5000_NAME=A 5000 +PLUGIN_UNTIL5000_DESC=Le 1er qui atteint 5000 points remporte la manche + +PLUGIN_DUELL_NAME=Duel +PLUGIN_DUELL_DESC=Le meilleur score remporte la manche + +PLUGIN_BLIND_NAME=A l'aveugle +PLUGIN_BLIND_DESC=Obtiens le meilleur score sans regarder l'écran. + +STAT_MAIN=Statistiques +STAT_MAIN_DESC=Général +STAT_MAIN_WHEREAMI=Statistiques + +STAT_OVERVIEW_INTRO=Statistiques d'%0:s \n Dernière réinitialisation le %1:.2d.%2:.2d.%3:d +STAT_OVERVIEW_SONG=%0:d chansons (%3:d avec vidéo)\n%1:d ont déjà été chantées une fois, %2:d pas encore. \n\n La chanson la plus chantée est %5:s de %4:s. +STAT_OVERVIEW_PLAYER=%0:d joueurs différents ont chantés depuis la dernière réinitialisation . \n\n Le meilleur joueur est %1:s avec %2:d points. \n Meilleur score, %4:d, atteint par %3:s. + +STAT_DETAIL=Statistiques +STAT_DETAIL_WHEREAMI=Statistiques détaillées + +STAT_NEXT=Page suiv. +STAT_PREV=Page préc. +STAT_REVERSE=Inverser +STAT_PAGE=Page %0:d de %1:d \n (%2:d entrées sur %3:d) + +STAT_DESC_SCORES=Score +STAT_DESC_SCORES_REVERSED=Pires scores +STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) + +STAT_DESC_SINGERS=Chanteurs +STAT_DESC_SINGERS_REVERSED=Pires chanteurs +STAT_FORMAT_SINGERS=%0:s \n Score moyen: %1:d + +STAT_DESC_SONGS=Chansons +STAT_DESC_SONGS_REVERSED=Chansons impopulaires +STAT_FORMAT_SONGS=%0:s - %1:s \n Chanté %2:dx + +STAT_DESC_BANDS=Artistes +STAT_DESC_BANDS_REVERSED=Artistes impopulaires +STAT_FORMAT_BANDS=%0:s \n Chansons chantées: %1:d + +MSG_ERROR_TITLE=Erreur +MSG_QUESTION_TITLE=Confirmation +MSG_QUIT_USDX=Quitter le jeu ? +MSG_END_PARTY=Quitter la partie ? +ERROR_NO_SONGS=Aucune chanson. +ERROR_NO_PLUGINS=Aucun plugin. +ERROR_CORRUPT_SONG=Impossible de charger la chanson.
\ No newline at end of file diff --git a/unicode/game/languages/Norwegian.ini b/unicode/game/languages/old/Norwegian.ini index 3740dfdf..ddd97322 100644 --- a/unicode/game/languages/Norwegian.ini +++ b/unicode/game/languages/old/Norwegian.ini @@ -8,7 +8,7 @@ SING_SING_DESC=hurtigspill: syng solo eller duett SING_MULTI=party SING_MULTI_DESC=syng i party-modus -SING_TOOLS=verktøy +SING_TOOLS=verktøy SING_STATS=statistikk SING_STATS_DESC=vis statistikk @@ -38,19 +38,19 @@ SING_OPTIONS_GAME_WHEREAMI=Innstillinger Spill SING_OPTIONS_GAME_DESC=hovedspillinnstillinger SING_OPTIONS_GAME_PLAYERS=Spillere SING_OPTIONS_GAME_DIFFICULTY=Vanskelighet -SING_OPTIONS_GAME_LANGUAGE=SprÃ¥k +SING_OPTIONS_GAME_LANGUAGE=Språk SING_OPTIONS_GAME_TABS=Mappeinndeling SING_OPTIONS_GAME_SORTING=Sortering -SING_OPTIONS_GAME_DEBUG=Feilsøking +SING_OPTIONS_GAME_DEBUG=Feilsøking SING_OPTIONS_GRAPHICS_WHEREAMI=Innstillinger Grafikk SING_OPTIONS_GRAPHICS_DESC=Grafiske innstillinger -SING_OPTIONS_GRAPHICS_RESOLUTION=Oppløsning +SING_OPTIONS_GRAPHICS_RESOLUTION=Oppløsning SING_OPTIONS_GRAPHICS_FULLSCREEN=Fullskjerm SING_OPTIONS_GRAPHICS_DEPTH=Fargedybde SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Oscilloskop SING_OPTIONS_GRAPHICS_LINEBONUS=Linjebonus -SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Filmstørrelse +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Filmstørrelse SING_OPTIONS_SOUND_WHEREAMI=Innstillinger Lyd SING_OPTIONS_SOUND_DESC=lydinnstillinger @@ -85,7 +85,7 @@ SING_OPTIONS_ADVANCED_DESC=avanserte innstillinger SING_OPTIONS_ADVANCED_EFFECTSING=Sangeffekter SING_OPTIONS_ADVANCED_SCREENFADE=Skjermfading SING_OPTIONS_ADVANCED_LOADANIMATION=Animasjonslasting -SING_OPTIONS_ADVANCED_ASKBEFOREDEL=SikkerhetsspørsmÃ¥l +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Sikkerhetsspørsmål SING_OPTIONS_ADVANCED_LINEBONUS=Linjebonus SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Etter sang: @@ -109,7 +109,7 @@ SING_HARD=Vanskelig SING_SONG_SELECTION_DESC=velg sang SING_SONG_SELECTION_WHEREAMI=Sangvalg -SING_SONG_SELECTION_GOTO=gÃ¥ til .. +SING_SONG_SELECTION_GOTO=gå til .. SING_SONG_SELECTION=Sangvalg SING_SONG_SELECTION_MENU=meny SING_SONG_SELECTION_PLAYLIST=spilleliste @@ -128,8 +128,8 @@ SING_MENU=Hovedmeny SONG_SCORE=sangscore SONG_SCORE_WHEREAMI=Score -SING_SCORE_TONE_DEAF=Tonedøv -SING_SCORE_AMATEUR=Amatør +SING_SCORE_TONE_DEAF=Tonedøv +SING_SCORE_AMATEUR=Amatør SING_SCORE_RISING_STAR=Stigende stjerne SING_SCORE_LEAD_SINGER=Toppvokalist SING_SCORE_HIT_ARTIST=Hitartist @@ -145,7 +145,7 @@ POPUP_AWESOME=fantastisk! POPUP_GREAT=kjempebra! POPUP_GOOD=bra! POPUP_NOTBAD=brukbart! -POPUP_BAD=dÃ¥rlig! +POPUP_BAD=dårlig! POPUP_POOR=elendig! POPUP_AWFUL=grusomt! @@ -172,13 +172,13 @@ SONG_MENU_NAME_PLAYLIST_NEW=Ny spilleliste SONG_MENU_PLAYLIST_NEW_CREATE=Opprett SONG_MENU_PLAYLIST_NEW_UNNAMED=Uten navn -SONG_MENU_NAME_PLAYLIST_DEL=Virkelig slette? +SONG_MENU_NAME_PLAYLIST_DELITEM=Virkelig slette? SONG_MENU_YES=Ja SONG_MENU_NO=Nei -SONG_MENU_NAME_PLAYLIST_LOAD=Ã…pne spilleliste -SONG_MENU_PLAYLIST_LOAD=Ã¥pne -SONG_MENU_PLAYLIST_DELCURRENT=slett nÃ¥værende spilleliste +SONG_MENU_NAME_PLAYLIST_LOAD=Åpne spilleliste +SONG_MENU_PLAYLIST_LOAD=åpne +SONG_MENU_PLAYLIST_DELCURRENT=slett nåværende spilleliste SONG_MENU_NAME_PLAYLIST_DEL=Slett spilleliste? @@ -187,15 +187,15 @@ SONG_MENU_JOKER=Joker SONG_MENU_NAME_PARTY_JOKER=bruk joker -SONG_JUMPTO_DESC=søk etter sang -SONG_JUMPTO_TYPE_DESC=Søk etter: +SONG_JUMPTO_DESC=søk etter sang +SONG_JUMPTO_TYPE_DESC=Søk etter: SONG_JUMPTO_TYPE1=Alt SONG_JUMPTO_TYPE2=Tittel SONG_JUMPTO_TYPE3=Artist SONG_JUMPTO_SONGSFOUND=%d Sang(er) funnet SONG_JUMPTO_NOSONGSFOUND=Ingen funnet -SONG_JUMPTO_HELP=Skriv inn tekst Ã¥ lete etter -SONG_JUMPTO_CATTEXT=Søk etter: %s +SONG_JUMPTO_HELP=Skriv inn tekst å lete etter +SONG_JUMPTO_CATTEXT=Søk etter: %s PARTY_MODE=Partymodus PARTY_DIFFICULTY=Vanskelighetsgrad @@ -236,7 +236,7 @@ PARTY_WIN_LEGEND_CONTINUE=tilbake til hovedmenyen PARTY_ROUND=Runde PARTY_ROUND_WINNER=Vinner -PARTY_NOTPLAYEDYET=Ikke spilt ennÃ¥ +PARTY_NOTPLAYEDYET=Ikke spilt ennå PARTY_NOBODY=ingen NEXT_ROUND=Neste runde: @@ -245,13 +245,13 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=Vinner! PLUGIN_HDL_NAME=Hold linja -PLUGIN_HDL_DESC=Ikke syng dÃ¥rligere enn hva markøren pÃ¥ statuslinja viser. +PLUGIN_HDL_DESC=Ikke syng dårligere enn hva markøren på statuslinja viser. -PLUGIN_UNTIL5000_NAME=Først til 5000 -PLUGIN_UNTIL5000_DESC=Førstemann til 5000 poeng vinner. +PLUGIN_UNTIL5000_NAME=Først til 5000 +PLUGIN_UNTIL5000_DESC=Førstemann til 5000 poeng vinner. PLUGIN_DUELL_NAME=Duell -PLUGIN_DUELL_DESC=Syng en duell - først til 10000. +PLUGIN_DUELL_DESC=Syng en duell - først til 10000. PLUGIN_BLIND_NAME=Blindemodus PLUGIN_BLIND_DESC=Duell der notene ikke vises @@ -261,15 +261,15 @@ STAT_MAIN_DESC=Hoved STAT_MAIN_WHEREAMI=Statistikk STAT_OVERVIEW_INTRO=%0:s Statistikk. \n Siste avslutning ved %2:.2d.%1:.2d.%3:d -STAT_OVERVIEW_SONG=%0:d Sanger(%3:d med video), hvorav %1:d allerede har vært sunget og %2:d ennÃ¥ ikke har vært sunget.\n Den mest populære sangen er %5:s av %4:s. -STAT_OVERVIEW_PLAYER=Siden den siste avlutningen var det %0:d ulike spillere.\n Den beste spilleren er %1:s med en gjennomsnitts-score pÃ¥ %2:d poeng.\n %3:s fikk høyeste score med %4:d poeng. +STAT_OVERVIEW_SONG=%0:d Sanger(%3:d med video), hvorav %1:d allerede har vært sunget og %2:d ennå ikke har vært sunget.\n Den mest populære sangen er %5:s av %4:s. +STAT_OVERVIEW_PLAYER=Siden den siste avlutningen var det %0:d ulike spillere.\n Den beste spilleren er %1:s med en gjennomsnitts-score på %2:d poeng.\n %3:s fikk høyeste score med %4:d poeng. STAT_DETAIL=Statistikk STAT_DETAIL_WHEREAMI=Detaljert statistikk STAT_NEXT=Neste side STAT_PREV=Forrige side -STAT_REVERSE=Bytt rekkefølge +STAT_REVERSE=Bytt rekkefølge STAT_PAGE=Side %0:d av %1:d Sider\n (%2:d av %3:d ) STAT_DESC_SCORES=Toppscore @@ -277,19 +277,19 @@ STAT_DESC_SCORES_REVERSED=Bunnscore STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) STAT_DESC_SINGERS=Beste sangere -STAT_DESC_SINGERS_REVERSED=DÃ¥rligste sangere +STAT_DESC_SINGERS_REVERSED=Dårligste sangere STAT_FORMAT_SINGERS=%0:s \n Gjennomsnitts-score: %1:d -STAT_DESC_SONGS=Mest populære sang -STAT_DESC_SONGS_REVERSED=Minst populære sang +STAT_DESC_SONGS=Mest populære sang +STAT_DESC_SONGS_REVERSED=Minst populære sang STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx sunget -STAT_DESC_BANDS=Mest populære artist -STAT_DESC_BANDS_REVERSED=Minst populære artist +STAT_DESC_BANDS=Mest populære artist +STAT_DESC_BANDS_REVERSED=Minst populære artist STAT_FORMAT_BANDS=%0:s \n %1:dx Sunget MSG_ERROR_TITLE=Feil -MSG_QUESTION_TITLE=SpørsmÃ¥l +MSG_QUESTION_TITLE=Spørsmål MSG_QUIT_USDX=Vil du virkelig avslutte UltraStar? MSG_END_PARTY=Vil du virkelig forlate party-modusen? ERROR_NO_SONGS=Ingen sanger lastet diff --git a/unicode/game/languages/old/Polish.ini b/unicode/game/languages/old/Polish.ini new file mode 100644 index 00000000..74ced1d0 --- /dev/null +++ b/unicode/game/languages/old/Polish.ini @@ -0,0 +1,304 @@ +[Text] +SING_LOADING=Wczytywanie... + +SING_CHOOSE_MODE=wybierz tryb +SING_SING=œpiewaj +SING_SING_DESC=œpiewaj solo lub w kilka osób + +SING_MULTI=impreza +SING_MULTI_DESC=rozkrêæ imprezê! + +SING_TOOLS=narzêdzia + +SING_STATS=statystyki +SING_STATS_DESC=zobacz statystyki + +SING_EDITOR=edytor +SING_EDITOR_DESC=stwórz w³asne piosenki + +SING_GAME_OPTIONS=opcje +SING_GAME_OPTIONS_DESC=zmieñ ustawienia + +SING_EXIT=wyjœcie +SING_EXIT_DESC=wyjdŸ z gry + +SING_OPTIONS=opcje +SING_OPTIONS_DESC=zmieñ ustawienia +SING_OPTIONS_WHEREAMI=Opcje + +SING_OPTIONS_GAME=gra +SING_OPTIONS_GRAPHICS=grafika +SING_OPTIONS_SOUND=dŸwiêk +SING_OPTIONS_LYRICS=s³owa +SING_OPTIONS_THEMES=tematy +SING_OPTIONS_RECORD=nagrywanie +SING_OPTIONS_ADVANCED=zaawansowane +SING_OPTIONS_EXIT=wstecz + +SING_OPTIONS_GAME_WHEREAMI=Opcje Gra +SING_OPTIONS_GAME_DESC=opcje gry +SING_OPTIONS_GAME_PLAYERS=Iloœæ graczy +SING_OPTIONS_GAME_DIFFICULTY=Poziom trudnoœci +SING_OPTIONS_GAME_LANGUAGE=Jêzyk +SING_OPTIONS_GAME_TABS=Zak³adki +SING_OPTIONS_GAME_SORTING=Sortowanie +SING_OPTIONS_GAME_DEBUG=Debug + + +SING_OPTIONS_GRAPHICS_WHEREAMI=Opcje Grafika +SING_OPTIONS_GAME_DESC=opcje gry +SING_OPTIONS_GAME_PLAYERS=Iloœæ graczy +SING_OPTIONS_GAME_DIFFICULTY=Poziom trudnoœci +SING_OPTIONS_GAME_LANGUAGE=Jêzyk +SING_OPTIONS_GAME_TABS=Zak³adki +SING_OPTIONS_GAME_SORTING=Sortowanie +SING_OPTIONS_GAME_DEBUG=Debug + +SING_OPTIONS_GRAPHICS_LINEBONUS=Bonus Linii + +SING_OPTIONS_SOUND_WHEREAMI=Opcje DŸwiêk +SING_OPTIONS_SOUND_DESC=opcje dŸwiêku +SING_OPTIONS_SOUND_MIC_BOOST=Podbicie mikrofonu +SING_OPTIONS_SOUND_CLICK_ASSIST=Pomoc klikniêciami +SING_OPTIONS_SOUND_BEAT_CLICK=Klikniêcia w rytm +SING_OPTIONS_SOUND_THRESHOLD=Próg +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Tryb dwóch graczy +SING_OPTIONS_SOUND_PREVIEWVOLUME=G³oœnoœæ w podgl¹dzie +SING_OPTIONS_SOUND_PREVIEWFADING=Zanikanie w podgl¹dzie + +SING_OPTIONS_LYRICS_WHEREAMI=Opcje S³owa +SING_OPTIONS_LYRICS_DESC=opcje s³ów +SING_OPTIONS_LYRICS_FONT=Czcionka +SING_OPTIONS_LYRICS_EFFECT=Efekt +SING_OPTIONS_LYRICS_SOLMIZATION=Solmizacja + +SING_OPTIONS_THEMES_WHEREAMI=Options Tematy +SING_OPTIONS_THEMES_DESC=opcje tematów +SING_OPTIONS_THEMES_THEME=Temat +SING_OPTIONS_THEMES_SKIN=Skóra +SING_OPTIONS_THEMES_COLOR=Kolor + +SING_OPTIONS_RECORD_WHEREAMI=Opcje Nagrywanie +SING_OPTIONS_RECORD_DESC=opcje nagrywania +SING_OPTIONS_RECORD_CARD=Karta dŸwiêkowa +SING_OPTIONS_RECORD_INPUT=Wejœcie +SING_OPTIONS_RECORD_CHANNEL=Kana³ + +SING_OPTIONS_ADVANCED_WHEREAMI=Opcje Zaawansowane +SING_OPTIONS_ADVANCED_DESC=ustawienia zaawansowane +SING_OPTIONS_ADVANCED_EFFECTSING=Efekty specjalne +SING_OPTIONS_ADVANCED_SCREENFADE=Przenikanie +SING_OPTIONS_ADVANCED_LOADANIMATION=Animacja ³adowania +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Pytania przy wyjœciu +SING_OPTIONS_ADVANCED_LINEBONUS=Bonus Linii +SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Licznik +SING_OPTIONS_ADVANCED_ONSONGCLICK=Po wyborze piosenki +SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto Menu Imprezy + +SING_LEGEND_SELECT=wybierz +SING_LEGEND_NAVIGATE=nawigacja +SING_LEGEND_CONTINUE=dalej +SING_LEGEND_ESC=wstecz + +SING_PLAYER_DESC=wprowadŸ imiê gracza +SING_PLAYER_WHEREAMI=Imiê +SING_PLAYER_ENTER_NAME=wpisz imiê + +SING_DIFFICULTY_DESC=wybierz poziom trudnoœci +SING_DIFFICULTY_WHEREAMI=Poziom +SING_DIFFICULTY_CONTINUE=do wyboru piosenki +SING_EASY=³atwo +SING_MEDIUM=œrednio +SING_HARD=trudno + +SING_SONG_SELECTION_DESC=wybierz piosenkê +SING_SONG_SELECTION_WHEREAMI=Wybór Piosenki +SING_SONG_SELECTION_GOTO=idŸ do... +SING_SONG_SELECTION=wybór piosenki +SING_SONG_SELECTION_MENU=menu +SING_SONG_SELECTION_PLAYLIST=playlista +SING_SONGS_IN_CAT=Piosenki +PLAYLIST_CATTEXT=Playlista: %s + +SING_TIME=CZAS +SING_TOTAL=³¹cznie +SING_MODE=œpiew solo +SING_NOTES=nuty +SING_GOLDEN_NOTES=z³ote nuty +SING_PHRASE_BONUS=Bonus Linii + +SING_MENU=Menu G³ówne + +SONG_SCORE=wynik +SONG_SCORE_WHEREAMI=Wynik + +SING_SCORE_TONE_DEAF=G³uche nuty +SING_SCORE_AMATEUR=Amator +SING_SCORE_RISING_STAR=Wschodz¹ca gwiazda +SING_SCORE_LEAD_SINGER=Niez³y grajek +SING_SCORE_HIT_ARTIST=Wielki Artysta +SING_SCORE_SUPERSTAR=Supergwiazda +SING_SCORE_ULTRASTAR=Ultrastar + +SING_TOP_5_CHARTS=lista 5 najlepszych +SING_TOP_5_CHARTS_WHEREAMI=top 5 +SING_TOP_5_CHARTS_CONTINUE=do wyboru piosenki + +POPUP_PERFECT=idealnie! +POPUP_AWESOME=niesamowicie! +POPUP_GREAT=œwietnie! +POPUP_GOOD=dobrze! +POPUP_NOTBAD=nieŸle! +POPUP_BAD=Ÿle! +POPUP_POOR=s³abo! +POPUP_AWFUL=okropnie! + +IMPLODE_GLUE1=, +IMPLODE_GLUE2= oraz + +SONG_MENU_NAME_MAIN=menu piosenki +SONG_MENU_PLAY=Œpiewaj +SONG_MENU_CHANGEPLAYERS=Zmieñ graczy +SONG_MENU_EDIT=Edytuj +SONG_MENU_MODI=Œpiewaj Modi +SONG_MENU_CANCEL=Anuluj + +SONG_MENU_NAME_PLAYLIST=Menu Piosenki +SONG_MENU_PLAYLIST_ADD=Dodaj piosenkê +SONG_MENU_PLAYLIST_DEL=Usuñ piosenkê + +SONG_MENU_NAME_PLAYLIST_ADD=Dodaj piosenkê +SONG_MENU_PLAYLIST_ADD_NEW=do nowej playlisty +SONG_MENU_PLAYLIST_ADD_EXISTING=do istniej¹cej playlisty +SONG_MENU_PLAYLIST_NOEXISTING=Brak playlist + +SONG_MENU_NAME_PLAYLIST_NEW=Nowa Playlista +SONG_MENU_PLAYLIST_NEW_CREATE=Stwórz +SONG_MENU_PLAYLIST_NEW_UNNAMED=Bez nazwy + +SONG_MENU_NAME_PLAYLIST_DELITEM=Usun¹æ? +SONG_MENU_YES=Tak +SONG_MENU_NO=Nie + +SONG_MENU_NAME_PLAYLIST_LOAD=Otwórz Playlistê +SONG_MENU_PLAYLIST_LOAD=otwórz +SONG_MENU_PLAYLIST_DELCURRENT=usuñ tê playlistê + +SONG_MENU_NAME_PLAYLIST_DEL=Usun¹æ playlistê? + +SONG_MENU_NAME_PARTY_MAIN=Menu Imprezy +SONG_MENU_JOKER=Jokera + +SONG_MENU_NAME_PARTY_JOKER=weŸ jokera + +SONG_JUMPTO_DESC=szukaj +SONG_JUMPTO_TYPE_DESC=Szukaj: +SONG_JUMPTO_TYPE1=Wszêdzie +SONG_JUMPTO_TYPE2=Tytu³ +SONG_JUMPTO_TYPE3=Wykonawca +SONG_JUMPTO_SONGSFOUND=Znaleziono %d utworów +SONG_JUMPTO_NOSONGSFOUND=Nic nie znaleziono +SONG_JUMPTO_HELP=Wpisz tekst do wyszukania +SONG_JUMPTO_CATTEXT=Szukaj: %s + +PARTY_MODE=tryb imprezy +PARTY_DIFFICULTY=Poziom +PARTY_PLAYLIST=Tryb playlisty +PARTY_PLAYLIST_ALL=Wszystko +PARTY_PLAYLIST_CATEGORY=Folder +PARTY_PLAYLIST_PLAYLIST=Playlista +PARTY_ROUNDS=Rundy +PARTY_TEAMS=Dru¿yny +PARTY_TEAMS_PLAYER1=Dru¿yna 1 +PARTY_TEAMS_PLAYER2=Dru¿yna 2 +PARTY_TEAMS_PLAYER3=Dru¿yna 3 + +PARTY_LEGEND_CONTINUE=dalej + +PARTY_OPTIONS_DESC=ustawienia trybu imprezy +PARTY_OPTIONS_WHEREAMI=Impreza - Ustawienia + +PARTY_PLAYER_DESC=wpisz nazwy graczy i dru¿yn +PARTY_PLAYER_WHEREAMI=Nazwy dru¿yn +PARTY_PLAYER_ENTER_NAME=wpisz nazwy +PARTY_PLAYER_LEGEND_CONTINUE=start! + +PARTY_ROUND_DESC=nastêpni do mikrofonów +PARTY_ROUND_WHEREAMI=Nastêpna Runda +PARTY_ROUND_LEGEND_CONTINUE=rozpocznij rundê + +PARTY_SONG_WHEREAMI=Wybór piosenki +PARTY_SONG_LEGEND_CONTINUE=œpiewaj +PARTY_SONG_MENU=menu + +PARTY_SCORE_DESC=wynik ostatniej rundy +PARTY_SCORE_WHEREAMI=Punkty + +PARTY_WIN_DESC=zwyciêzca gry +PARTY_WIN_WHEREAMI=Zwyciêzca +PARTY_WIN_LEGEND_CONTINUE=do menu g³ównego + +PARTY_ROUND=Runda +PARTY_ROUND_WINNER=Zwyciêzca +PARTY_NOTPLAYEDYET=jeszcze nie gra³ +PARTY_NOBODY=nikt +NEXT_ROUND=Nastêpna runda: + +PARTY_DISMISSED=Odpada! +PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS2=wygrywa! + +PLUGIN_HDL_NAME=Trzymaj liniê +PLUGIN_HDL_DESC=Œpiewaj lepiej ni¿ linia na wykresie. + +PLUGIN_UNTIL5000_NAME=Do 5000 +PLUGIN_UNTIL5000_DESC=Wygrywa ten, kto pierwszy uzyska 5000 punktów. + +PLUGIN_DUELL_NAME=Pojedynek +PLUGIN_DUELL_DESC=Œpiewacie w pojedynku do 10000 punktów. + +PLUGIN_TEAMDUELL_NAME=Team Duell +PLUGIN_TEAMDUELL_DESC=Pass The Mic! + +PLUGIN_BLIND_NAME=Œlepiec +PLUGIN_BLIND_DESC=Pojedynek, w którym nie widzicie nut. + +STAT_MAIN=Statystyki +STAT_MAIN_DESC=Ogólne +STAT_MAIN_WHEREAMI=Statystyki + +STAT_OVERVIEW_INTRO=Statystyki dla: %0:d. \n Ostatnio resetowane: %2:.2d.%1:.2d.%3:d +STAT_OVERVIEW_SONG=%0:d Piosenek (%3:d z filmem), z czego %1:d by³o granych a %2:d jeszcze nie.\n Najpopularniejsz¹ piosenk¹ jest %5:s z %4:s. +STAT_OVERVIEW_PLAYER=Od ostatniego resetu:%0:d ró¿nych graczy.\n Najlepszym graczem jest %1:s ze œrednim wynikiem %2:d punktów.\n %3:s ustanowi³ rekord wynikiem %4:d punktów. + +STAT_DETAIL=Statystyki +STAT_DETAIL_WHEREAMI=Statystyki szczegó³owe + +STAT_NEXT=Nastêpna strona +STAT_PREV=Poprzednia strona +STAT_REVERSE=Odwróæ kolejnoœæ +STAT_PAGE=Strona %0:d z %1:d \n (%2:d of %3:d wpisów) + +STAT_DESC_SCORES=Najwy¿sze wyniki +STAT_DESC_SCORES_REVERSED=Najni¿sze wyniki +STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) + +STAT_DESC_SINGERS=Najlepsi +STAT_DESC_SINGERS_REVERSED=Najgorsi +STAT_FORMAT_SINGERS=%0:s \n Œredni wynik: %1:d + +STAT_DESC_SONGS=Najpopularniejsze piosenki +STAT_DESC_SONGS_REVERSED=Najmniej popularne piosenki +STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx œpiewane + +STAT_DESC_BANDS=Najpopularniejsi wykonawcy +STAT_DESC_BANDS_REVERSED=Najmniej popularni wykonawcy +STAT_FORMAT_BANDS=%0:s \n %1:dx œpiewani + +MSG_ERROR_TITLE=B³¹d +MSG_QUESTION_TITLE=Pytanie +MSG_QUIT_USDX=Na pewno chcesz wyjœæ? +MSG_END_PARTY=Na pewno chcesz zakoñczyæ tryb imprezy? +ERROR_NO_SONGS=Brak piosenek +ERROR_NO_PLUGINS=Brak wtyczek +ERROR_CORRUPT_SONG=Piosenka nie mog³a zostaæ za³adowana.
\ No newline at end of file diff --git a/unicode/game/languages/Serbian.ini b/unicode/game/languages/old/Serbian.ini index 3c58dffb..1896c6de 100644 --- a/unicode/game/languages/Serbian.ini +++ b/unicode/game/languages/old/Serbian.ini @@ -173,7 +173,7 @@ SONG_MENU_NAME_PLAYLIST_NEW=Nova Lista SONG_MENU_PLAYLIST_NEW_CREATE=Napravi SONG_MENU_PLAYLIST_NEW_UNNAMED=BezNaziva -SONG_MENU_NAME_PLAYLIST_DEL=Zaista Obrisati? +SONG_MENU_NAME_PLAYLIST_DELITEM=Zaista Obrisati? SONG_MENU_YES=Da SONG_MENU_NO=Ne diff --git a/unicode/game/languages/old/Slovak.ini b/unicode/game/languages/old/Slovak.ini new file mode 100644 index 00000000..c7a7fb2e --- /dev/null +++ b/unicode/game/languages/old/Slovak.ini @@ -0,0 +1,301 @@ +[Text] +SING_LOADING=... nahráva sa hra ! + +SING_CHOOSE_MODE=vyberte si z možností +SING_SING=Hra +SING_SING_DESC=sólo alebo duet + +SING_MULTI=Párty +SING_MULTI_DESC=párty-mód + +SING_TOOLS=Nástroje + +SING_STATS=štatistika +SING_STATS_DESC=zobrazi štatistiku + +SING_EDITOR=editor +SING_EDITOR_DESC=vytvorte si vlastnú skladbu + +SING_GAME_OPTIONS=nastavenia +SING_GAME_OPTIONS_DESC=nastavenia hry + +SING_EXIT=Koniec +SING_EXIT_DESC=návrat do systému + +SING_OPTIONS=nastavenia +SING_OPTIONS_DESC=zmeni nastavenia +SING_OPTIONS_WHEREAMI=Nastavenia + +SING_OPTIONS_GAME=hra +SING_OPTIONS_GRAPHICS=grafika +SING_OPTIONS_SOUND=zvuk +SING_OPTIONS_LYRICS=text +SING_OPTIONS_THEMES=témy +SING_OPTIONS_RECORD=mikrofón +SING_OPTIONS_ADVANCED=iné +SING_OPTIONS_EXIT=spä + +SING_OPTIONS_GAME_WHEREAMI=Nastavenia hry +SING_OPTIONS_GAME_DESC=všeobecné nastavenia +SING_OPTIONS_GAME_PLAYERS=Poèet hráèov +SING_OPTIONS_GAME_DIFFICULTY=Obtiažnos +SING_OPTIONS_GAME_LANGUAGE=Jazyk +SING_OPTIONS_GAME_TABS=Kategórie +SING_OPTIONS_GAME_SORTING=Zoradenie +SING_OPTIONS_GAME_DEBUG=Debug mód + +SING_OPTIONS_GRAPHICS_WHEREAMI=Grafika +SING_OPTIONS_GRAPHICS_DESC=nastavenie grafických detailov +SING_OPTIONS_GRAPHICS_RESOLUTION=Rozlíšenie +SING_OPTIONS_GRAPHICS_FULLSCREEN=Celá obrazovka +SING_OPTIONS_GRAPHICS_DEPTH=Far. håbka +SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Osciloskop +SING_OPTIONS_GRAPHICS_LINEBONUS=Èiarový Bonus +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Zobrazenie videa + +SING_OPTIONS_SOUND_WHEREAMI=Zvuk +SING_OPTIONS_SOUND_DESC=nastavenie zvuku +SING_OPTIONS_SOUND_MIC_BOOST=Zosilnenie mikrof. +SING_OPTIONS_SOUND_CLICK_ASSIST=Pomocný klik +SING_OPTIONS_SOUND_BEAT_CLICK=Rytmický klik +SING_OPTIONS_SOUND_THRESHOLD=Prah poèute¾. +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Mód dvoch hráèov +SING_OPTIONS_SOUND_PREVIEWVOLUME=Náh¾ad(volume) +SING_OPTIONS_SOUND_PREVIEWFADING=Prechod skladieb + +SING_OPTIONS_LYRICS_WHEREAMI=Text +SING_OPTIONS_LYRICS_DESC=nastavenia zobrazovania textov piesní +SING_OPTIONS_LYRICS_FONT=Písmo +SING_OPTIONS_LYRICS_EFFECT=Efekt zvýraznenia +SING_OPTIONS_LYRICS_SOLMIZATION=Solmizácia + +SING_OPTIONS_THEMES_WHEREAMI=Témy +SING_OPTIONS_THEMES_DESC=zmena témy +SING_OPTIONS_THEMES_THEME=Téma +SING_OPTIONS_THEMES_SKIN=Vzh¾ad +SING_OPTIONS_THEMES_COLOR=Farba + +SING_OPTIONS_RECORD_WHEREAMI=Mikrofón +SING_OPTIONS_RECORD_DESC=nastavenie mikrofónu +SING_OPTIONS_RECORD_CARD=Zvuková karta +SING_OPTIONS_RECORD_INPUT=Vstup +SING_OPTIONS_RECORD_CHANNEL=Kanál + +SING_OPTIONS_ADVANCED_WHEREAMI=Iné +SING_OPTIONS_ADVANCED_DESC=rozširujúce nastavenia +SING_OPTIONS_ADVANCED_EFFECTSING=Efekty pri speve +SING_OPTIONS_ADVANCED_SCREENFADE=Jemný prechod +SING_OPTIONS_ADVANCED_LOADANIMATION=Animácia loading(u) +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Potvrdzovanie +SING_OPTIONS_ADVANCED_LINEBONUS=Bonus za riadok +SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= +SING_OPTIONS_ADVANCED_ONSONGCLICK=Po zvolení skladby +SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto PartyMenu + +SING_LEGEND_SELECT=výber +SING_LEGEND_NAVIGATE=navigácia +SING_LEGEND_CONTINUE=pokraèova +SING_LEGEND_ESC=spä + +SING_PLAYER_DESC=zadajte meno hráèa(ov) +SING_PLAYER_WHEREAMI=Mená hráèov +SING_PLAYER_ENTER_NAME=zadávanie mena + +SING_DIFFICULTY_DESC=Vyberte obtiažnos +SING_DIFFICULTY_WHEREAMI=Obtiažnos +SING_DIFFICULTY_CONTINUE=pokraèova +SING_EASY=¼ahká +SING_MEDIUM=Stredná +SING_HARD=ažká + +SING_SONG_SELECTION_DESC=Vyberte skladbu +SING_SONG_SELECTION_WHEREAMI=výber skladby +SING_SONG_SELECTION_GOTO=choï na .. +SING_SONG_SELECTION=výber skladby +SING_SONG_SELECTION_MENU=menu +SING_SONG_SELECTION_PLAYLIST=playlist +SING_SONGS_IN_CAT=Skladba +PLAYLIST_CATTEXT=Playlist: %s + +SING_TIME=Èas +SING_TOTAL=celkovo +SING_MODE=spieva sólo +SING_NOTES=noty +SING_GOLDEN_NOTES=zlaté noty +SING_PHRASE_BONUS=bonus za riadok + +SING_MENU=Hlavné Menu + +SONG_SCORE=hodnotenie +SONG_SCORE_WHEREAMI=Skóre + +SING_SCORE_TONE_DEAF=Antitalent +SING_SCORE_AMATEUR=Amatér +SING_SCORE_RISING_STAR=Vychádzajúca hviezda +SING_SCORE_LEAD_SINGER=Spevák +SING_SCORE_HIT_ARTIST=Star +SING_SCORE_SUPERSTAR=Superstar +SING_SCORE_ULTRASTAR=Ultrastar + +SING_TOP_5_CHARTS=najlepších 5 +SING_TOP_5_CHARTS_WHEREAMI=top 5 +SING_TOP_5_CHARTS_CONTINUE=pre výber skladby + +POPUP_PERFECT=neskutoèné! +POPUP_AWESOME=paráda! +POPUP_GREAT=super! +POPUP_GOOD=dobré! +POPUP_NOTBAD=nie zlé! +POPUP_BAD=zle! +POPUP_POOR=bieda! +POPUP_AWFUL=otrasné! + +IMPLODE_GLUE1=, +IMPLODE_GLUE2= a + +SONG_MENU_NAME_MAIN=Výber hudby +SONG_MENU_PLAY=Štart +SONG_MENU_CHANGEPLAYERS=Iný hráè +SONG_MENU_EDIT=Uprav +SONG_MENU_MODI=Sing a Modi +SONG_MENU_CANCEL=Zruši + +SONG_MENU_NAME_PLAYLIST=Skladby +SONG_MENU_PLAYLIST_ADD=Pridaj skladbu +SONG_MENU_PLAYLIST_DEL=Zmaž skladbu + +SONG_MENU_NAME_PLAYLIST_ADD=Pridaj Skladbu +SONG_MENU_PLAYLIST_ADD_NEW=do nového playlistu +SONG_MENU_PLAYLIST_ADD_EXISTING=do existujúceho playlistu +SONG_MENU_PLAYLIST_NOEXISTING=Nie je dostupný žiadny playlist + +SONG_MENU_NAME_PLAYLIST_NEW=Nový Playlist +SONG_MENU_PLAYLIST_NEW_CREATE=Vytvor +SONG_MENU_PLAYLIST_NEW_UNNAMED=Bez mena + +SONG_MENU_NAME_PLAYLIST_DELITEM=Skutoène Zmaza ? +SONG_MENU_YES=Áno +SONG_MENU_NO=Nie + +SONG_MENU_NAME_PLAYLIST_LOAD=Naèítaj Playlist +SONG_MENU_PLAYLIST_LOAD=naèítaj +SONG_MENU_PLAYLIST_DELCURRENT=zmaž tento Playlist + +SONG_MENU_NAME_PLAYLIST_DEL=Zmaza Playlist? + +SONG_MENU_NAME_PARTY_MAIN=Party Menu +SONG_MENU_JOKER=Joker + +SONG_MENU_NAME_PARTY_JOKER=použi jokera + +SONG_JUMPTO_DESC=h¾adaj skladbu +SONG_JUMPTO_TYPE_DESC=h¾adaj: +SONG_JUMPTO_TYPE1=všade +SONG_JUMPTO_TYPE2=v názve skladby +SONG_JUMPTO_TYPE3=v mene autora +SONG_JUMPTO_SONGSFOUND=%d skladieb vyhovuje filtru +SONG_JUMPTO_NOSONGSFOUND=Žiadna skladba +SONG_JUMPTO_HELP=Napíš k¾úèové slovo pre h¾adanie +SONG_JUMPTO_CATTEXT=H¾adaj: %s + +PARTY_MODE=párty mód +PARTY_DIFFICULTY=Obtiažnos +PARTY_PLAYLIST=Skladby z playlistu +PARTY_PLAYLIST_ALL=Všetky skladby +PARTY_PLAYLIST_CATEGORY=Kategória +PARTY_PLAYLIST_PLAYLIST=Playlist +PARTY_ROUNDS=Poèet kôl +PARTY_TEAMS=Poèet tímov +PARTY_TEAMS_PLAYER1=Hráèov v Tíme 1 +PARTY_TEAMS_PLAYER2=Hráèov v Tíme 2 +PARTY_TEAMS_PLAYER3=Hráèov v Tíme 3 + +PARTY_LEGEND_CONTINUE=pokraèova + +PARTY_OPTIONS_DESC=nastavenia pre párty-mód +PARTY_OPTIONS_WHEREAMI=Párty nastavenia + +PARTY_PLAYER_DESC=Zadajte mená tímov a hráèov! +PARTY_PLAYER_WHEREAMI=Párty mená +PARTY_PLAYER_ENTER_NAME=zadajte mená +PARTY_PLAYER_LEGEND_CONTINUE=Pokraèova + +PARTY_ROUND_DESC=párty pre hráèov +PARTY_ROUND_WHEREAMI=List párty disciplín +PARTY_ROUND_LEGEND_CONTINUE=Štart disciplíny + +PARTY_SONG_WHEREAMI=Párty - Výver Skladby +PARTY_SONG_LEGEND_CONTINUE=Štart +PARTY_SONG_MENU=party menu + +PARTY_SCORE_DESC=skóre posledného kola +PARTY_SCORE_WHEREAMI=Párty skóre + +PARTY_WIN_DESC=Víaz párty +PARTY_WIN_WHEREAMI=Stupeò víazov +PARTY_WIN_LEGEND_CONTINUE=spä do hlavného menu + +PARTY_ROUND=Kolo +PARTY_ROUND_WINNER=Víaz +PARTY_NOTPLAYEDYET=nehralo +PARTY_NOBODY=ani jedno družstvo +NEXT_ROUND=Ïalšie kolo: + +PARTY_DISMISSED=Ukonèené ! +PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS2=víaz tohto kola + +PLUGIN_HDL_NAME=Superstar +PLUGIN_HDL_DESC=nesmieš klesnú pod hranicu ukazovate¾a úspešnosti + +PLUGIN_UNTIL5000_NAME=Po 5000 +PLUGIN_UNTIL5000_DESC=kto prvý získa 5000 bodov sa stane víazom + +PLUGIN_DUELL_NAME=Duel +PLUGIN_DUELL_DESC=spievaj, kým nedosiahneš 10000 bodov + +PLUGIN_TEAMDUELL_NAME=Duel Tímov +PLUGIN_TEAMDUELL_DESC=každý hráè sa vystrieda za mikrofónom + +PLUGIN_BLIND_NAME=Slepý +PLUGIN_BLIND_DESC=neuvidíš noty pre hlas + +STAT_MAIN=Štatistika +STAT_MAIN_DESC=Všeobecne +STAT_MAIN_WHEREAMI=Štatistiky + +STAT_OVERVIEW_INTRO=%0:s štatistika \n Štatistika od %2:.2d.%1:.2d.%3:d +STAT_OVERVIEW_SONG=SKLADBY \n Celkove: %0:d z toho %3:d s videom\n Poèet už hraných: %1:d \n Poèet nehraných: %2:d \n Najhranejšia skladba: %5:s od %4:s +STAT_OVERVIEW_PLAYER=HRÁÈI \n Celkove: %0:d rôznych hráèov.\n Najlepší hráè: %1:s (%2:d - priemer bodov)\n Najvyššie skóre: %3:s (%4:d bodov) + +STAT_DETAIL=Štatistiky +STAT_DETAIL_WHEREAMI=Podrobná štatistika + +STAT_NEXT=Ïalšia strana +STAT_PREV=Predošlá strana +STAT_REVERSE=Otoè poradie +STAT_PAGE=%0:d. z %1:d strán\n (%2:d z %3:d položiek) + +STAT_DESC_SCORES=Najvyššie skóre +STAT_DESC_SCORES_REVERSED=Najhoršie skóre +STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) + +STAT_DESC_SINGERS=Najlepší speváci +STAT_DESC_SINGERS_REVERSED=Najhorší speváci +STAT_FORMAT_SINGERS=%0:s \n Priemer skóre: %1:d + +STAT_DESC_SONGS=Najhranejšie skladby +STAT_DESC_SONGS_REVERSED=Najmenej hrané skladby +STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx spievaná + +STAT_DESC_BANDS=Najhranejšia kapela +STAT_DESC_BANDS_REVERSED=Najmenej hraná kapela +STAT_FORMAT_BANDS=%0:s \n %1:dx spievaná + +MSG_ERROR_TITLE=Chyba +MSG_QUESTION_TITLE=Otázka +MSG_QUIT_USDX=Skutoène chcete skonèi UltraStar? +MSG_END_PARTY=Skutoène chcete skonèit Párty Mód ? +ERROR_NO_SONGS=Žiadna skladba +ERROR_NO_PLUGINS=Žiadny zásuvný modul +ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahra. diff --git a/unicode/game/languages/Slovenian.ini b/unicode/game/languages/old/Slovenian.ini index 57bab695..2fd50c9d 100644 --- a/unicode/game/languages/Slovenian.ini +++ b/unicode/game/languages/old/Slovenian.ini @@ -1,322 +1,322 @@ -[Text]
-SING_LOADING=Nalaganje...
-
-SING_CHOOSE_MODE=izberi nacin
-SING_SING=poj
-SING_SING_DESC=poj sam ali v duetu
-
-SING_MULTI=zabava
-SING_MULTI_DESC=poj v nacinu zabave
-
-SING_TOOLS=orodja
-
-SING_STATS=statistika
-SING_STATS_DESC=poglej statistiko
-
-SING_EDITOR=urednik
-SING_EDITOR_DESC=izdelaj svoje pesmi
-
-SING_GAME_OPTIONS=nastavitve igre
-SING_GAME_OPTIONS_DESC=spremeni nastavitve igre
-
-SING_EXIT=izhod
-SING_EXIT_DESC=izhod iz igre
-
-SING_OPTIONS=nastavitve
-SING_OPTIONS_DESC=spremeni nastavitve
-SING_OPTIONS_WHEREAMI=Nastavitve
-
-SING_OPTIONS_GAME=igra
-SING_OPTIONS_GRAPHICS=izgled
-SING_OPTIONS_SOUND=zvok
-SING_OPTIONS_LYRICS=besedilo
-SING_OPTIONS_THEMES=tema
-SING_OPTIONS_RECORD=snemanje
-SING_OPTIONS_ADVANCED=napredno
-SING_OPTIONS_EXIT=nazaj
-
-SING_OPTIONS_GAME_WHEREAMI=Nastavitve Igre
-SING_OPTIONS_GAME_DESC=osnovne nastavitve
-SING_OPTIONS_GAME_PLAYERS=Igralci
-SING_OPTIONS_GAME_DIFFICULTY=Težavnost
-SING_OPTIONS_GAME_LANGUAGE=Jezik
-SING_OPTIONS_GAME_TABS=Mape
-SING_OPTIONS_GAME_SORTING=Sortiranje
-SING_OPTIONS_GAME_DEBUG=Odpravljanje hrošcev
-
-SING_OPTIONS_GRAPHICS_WHEREAMI=Nastavitve prikaza
-SING_OPTIONS_GRAPHICS_DESC=nastavitve prikaza
-SING_OPTIONS_GRAPHICS_RESOLUTION=Locljivost
-SING_OPTIONS_GRAPHICS_FULLSCREEN=Celozaslonski nacin
-SING_OPTIONS_GRAPHICS_DEPTH=Globina
-SING_OPTIONS_GRAPHICS_VISUALIZER=Vizualizacija
-SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Osciloskop
-SING_OPTIONS_GRAPHICS_LINEBONUS=Vrsticni bonus
-SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Velikost videa
-
-SING_OPTIONS_SOUND_WHEREAMI=Nastavitve zvoka
-SING_OPTIONS_SOUND_DESC=nastavitve zvoka
-SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Mikrofonski Playback
-SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Glasbena podlaga
-SING_OPTIONS_SOUND_MIC_BOOST=Ojacitev mikrofona
-SING_OPTIONS_SOUND_CLICK_ASSIST=Asistent klikanja
-SING_OPTIONS_SOUND_BEAT_CLICK=Klikanje po ritmu
-SING_OPTIONS_SOUND_THRESHOLD=Prag
-SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Nacin za dva igralca
-SING_OPTIONS_SOUND_PREVIEWVOLUME=Glasnost predogleda
-SING_OPTIONS_SOUND_PREVIEWFADING=narašcanje glasnosti
-
-SING_OPTIONS_LYRICS_WHEREAMI=Nastavitve besedila
-SING_OPTIONS_LYRICS_DESC=nastavitve besedila
-SING_OPTIONS_LYRICS_FONT=Pisava
-SING_OPTIONS_LYRICS_EFFECT=Ucinek
-SING_OPTIONS_LYRICS_SOLMIZATION=Solmizacija
-SING_OPTIONS_LYRICS_NOTELINES=Notno crtovje
-
-SING_OPTIONS_THEMES_WHEREAMI=Nastavitve tem
-SING_OPTIONS_THEMES_DESC=nastavitve teme
-SING_OPTIONS_THEMES_THEME=Tema
-SING_OPTIONS_THEMES_SKIN=Izgled
-SING_OPTIONS_THEMES_COLOR=Barva
-
-SING_OPTIONS_RECORD_WHEREAMI=Nastavitve snemanja
-SING_OPTIONS_RECORD_DESC=nastavitve mikrofona
-SING_OPTIONS_RECORD_CARD=Vir zvoka
-SING_OPTIONS_RECORD_INPUT=Vhod
-SING_OPTIONS_RECORD_CHANNEL=Kanal
-
-SING_OPTIONS_ADVANCED_WHEREAMI=Napredne nastavitve
-SING_OPTIONS_ADVANCED_DESC=Napredne nastavitve
-SING_OPTIONS_ADVANCED_EFFECTSING=Pevski efekt
-SING_OPTIONS_ADVANCED_SCREENFADE=Zamegljevanje prikaza
-SING_OPTIONS_ADVANCED_LOADANIMATION=Zacetna animacija
-SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Zašcitno vprašanje
-SING_OPTIONS_ADVANCED_LINEBONUS=Bonus za vrstico
-SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=
-SING_OPTIONS_ADVANCED_ONSONGCLICK=Po izboru pesmi
-SING_OPTIONS_ADVANCED_PARTYPOPUP=Samodejni nacin Zabava
-
-SING_EDIT=Urednik
-SING_EDIT_MENU_DESCRIPTION=Izdelaj lastno pesem
-
-SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Izvozi besedilo iz midi datoteke
-SING_EDIT_BUTTON_DESCRIPTION_EXIT=Nazaj
-SING_EDIT_BUTTON_CONVERT=Uvozi
-SING_EDIT_BUTTON_EXIT=Nazaj
-
-SING_EDIT_NAVIGATE=Navigacija
-SING_EDIT_SELECT=Izberi
-SING_EDIT_EXIT=Nazaj
-
-SING_LEGEND_SELECT=izberi
-SING_LEGEND_NAVIGATE=premik
-SING_LEGEND_CONTINUE=nadaljuj
-SING_LEGEND_ESC=nazaj
-
-SING_PLAYER_DESC=vpiši imena igralcev
-SING_PLAYER_WHEREAMI=Imena igralcev
-SING_PLAYER_ENTER_NAME=vnesi ime
-
-SING_DIFFICULTY_DESC=izberi težavnost
-SING_DIFFICULTY_WHEREAMI=Težavnost
-SING_DIFFICULTY_CONTINUE=k izbiri pesmi
-SING_EASY=Enostavno
-SING_MEDIUM=Srednje
-SING_HARD=Težko
-
-SING_SONG_SELECTION_DESC=izberi svojo pesem
-SING_SONG_SELECTION_WHEREAMI=Izbira pesmi
-SING_SONG_SELECTION_GOTO=pojdi na...
-SING_SONG_SELECTION=izbira pesmi
-SING_SONG_SELECTION_MENU=meni
-SING_SONG_SELECTION_PLAYLIST=seznam predvajanja
-SING_SONGS_IN_CAT=Pesmi
-PLAYLIST_CATTEXT=Lista: %s
-
-SING_TIME=CAS
-SING_TOTAL=skupaj
-SING_MODE=Petje
-SING_NOTES=note
-SING_GOLDEN_NOTES=zlate note
-SING_PHRASE_BONUS=bonus za vrstico
-
-SING_MENU=Glavni meni
-
-SONG_SCORE=rezultat petja
-SONG_SCORE_WHEREAMI=Rezultat
-
-SING_SCORE_TONE_DEAF=Gluhonem
-SING_SCORE_AMATEUR=Amater
-SING_SCORE_WANNABE=Igralec
-SING_SCORE_HOPEFUL=Nadebudnež
-SING_SCORE_RISING_STAR=Vzhajajoca zvezda
-SING_SCORE_LEAD_SINGER=Vodilni pevec
-SING_SCORE_SUPERSTAR=Superzvezda
-SING_SCORE_ULTRASTAR=Ultrazvezda
-
-SING_TOP_5_CHARTS=najboljših 5 pevcev
-SING_TOP_5_CHARTS_WHEREAMI=najboljših 5
-SING_TOP_5_CHARTS_CONTINUE=k izbiri pesmi
-
-POPUP_PERFECT=popolno!
-POPUP_AWESOME=odlicno!
-POPUP_GREAT=zelo dobro!
-POPUP_GOOD=dobro!
-POPUP_NOTBAD=ni slabo!
-POPUP_BAD=slabo!
-POPUP_POOR=zelo slabo!
-POPUP_AWFUL=obupno!
-
-IMPLODE_GLUE1=,
-IMPLODE_GLUE2= in
-
-SONG_MENU_NAME_MAIN=meni pesmi
-SONG_MENU_PLAY=Poj
-SONG_MENU_CHANGEPLAYERS=Spremeni igralca
-SONG_MENU_EDIT=Uredi
-SONG_MENU_MODI=Poj "a Modi"
-SONG_MENU_CANCEL=Preklici
-
-SONG_MENU_NAME_PLAYLIST=Meni Pesem
-SONG_MENU_PLAYLIST_ADD=Dodaj pesem
-SONG_MENU_PLAYLIST_DEL=Izbriši pesem
-
-SONG_MENU_NAME_PLAYLIST_ADD=Dodaj pesem
-SONG_MENU_PLAYLIST_ADD_NEW=dodaj nov seznam
-SONG_MENU_PLAYLIST_ADD_EXISTING=dodaj shranjen seznam
-SONG_MENU_PLAYLIST_NOEXISTING=Ni seznamov
-
-SONG_MENU_NAME_PLAYLIST_NEW=Nov seznam
-SONG_MENU_PLAYLIST_NEW_CREATE=Ustvari
-SONG_MENU_PLAYLIST_NEW_UNNAMED=Neimenovan
-
-SONG_MENU_NAME_PLAYLIST_DEL=Res izbrišem?
-SONG_MENU_YES=Da
-SONG_MENU_NO=Ne
-
-SONG_MENU_NAME_PLAYLIST_LOAD=Odpri seznam
-SONG_MENU_PLAYLIST_LOAD=odpri
-SONG_MENU_PLAYLIST_DELCURRENT=izbriši trenuten seznam
-
-SONG_MENU_NAME_PLAYLIST_DEL=Izbrišem seznam?
-
-SONG_MENU_NAME_PARTY_MAIN=Meni Zabava
-SONG_MENU_JOKER=Joker
-
-SONG_MENU_NAME_PARTY_JOKER=izkoristi jokerja
-
-SONG_JUMPTO_DESC=poišci pesem
-SONG_JUMPTO_TYPE_DESC=Isci po:
-SONG_JUMPTO_TYPE1=Vse
-SONG_JUMPTO_TYPE2=Naslov
-SONG_JUMPTO_TYPE3=Avtor
-SONG_JUMPTO_SONGSFOUND=%d pesmi najdenih
-SONG_JUMPTO_NOSONGSFOUND=Ne najdem
-SONG_JUMPTO_HELP=Vpiši besedilo za iskanje
-SONG_JUMPTO_CATTEXT=IÅ¡ci po: %s
-
-PARTY_MODE=zabava
-PARTY_DIFFICULTY=Težavnost
-PARTY_PLAYLIST=Izbor
-PARTY_PLAYLIST_ALL=Vse pesmi
-PARTY_PLAYLIST_CATEGORY=Mapa
-PARTY_PLAYLIST_PLAYLIST=Seznam
-PARTY_ROUNDS=Å tevilo rund
-PARTY_TEAMS=Ekipe
-PARTY_TEAMS_PLAYER1=Igralec Ekipa1
-PARTY_TEAMS_PLAYER2=Igralec Ekipa2
-PARTY_TEAMS_PLAYER3=Igralec Ekipa3
-
-PARTY_LEGEND_CONTINUE=nadaljuj
-
-PARTY_OPTIONS_DESC=nastavitve za nacin zabave
-PARTY_OPTIONS_WHEREAMI=nastavitve zabave
-
-PARTY_PLAYER_DESC=vpiši igralce in imena ekip!
-PARTY_PLAYER_WHEREAMI=Imena
-PARTY_PLAYER_ENTER_NAME=vpiši imena
-PARTY_PLAYER_LEGEND_CONTINUE=zacni zabavo
-
-PARTY_ROUND_DESC=naslednji igralec k mikrofonu
-PARTY_ROUND_WHEREAMI=Naslednja runda
-PARTY_ROUND_LEGEND_CONTINUE=zacni rundo
-
-PARTY_SONG_WHEREAMI=Izbor pesmi - Zabava
-PARTY_SONG_LEGEND_CONTINUE=poj
-PARTY_SONG_MENU=meni Zabava
-
-PARTY_SCORE_DESC=tocke zadnje runde
-PARTY_SCORE_WHEREAMI=Tocke v zabavi
-
-PARTY_WIN_DESC=Zmagovalec
-PARTY_WIN_WHEREAMI=Zmagovalec
-PARTY_WIN_LEGEND_CONTINUE=nazaj k glavnemu meniju
-
-PARTY_ROUND=Runda
-PARTY_ROUND_WINNER=Zmagovalec
-PARTY_NOTPLAYEDYET=neizvedeno
-PARTY_NOBODY=nobeden
-NEXT_ROUND=Naslednja runda:
-
-PARTY_DISMISSED=Zakljucena!
-PARTY_SCORE_WINS=%s
-PARTY_SCORE_WINS2=zmaga!
-
-PLUGIN_HDL_NAME=Zdrži nivo
-PLUGIN_HDL_DESC=Ne poj slabše, kot kaže kazalnik na števcu za ocenjevanje.
-
-PLUGIN_UNTIL5000_NAME=Do 5000
-PLUGIN_UNTIL5000_DESC=Kdor prvi doseže 5000 tock, zmaga.
-
-PLUGIN_DUELL_NAME=Dvoboj
-PLUGIN_DUELL_DESC=Tekmovanje do 10000 tock.
-
-PLUGIN_TEAMDUELL_NAME=Ekipni dvoboj
-PLUGIN_TEAMDUELL_DESC=Podaj mikrofon!
-
-PLUGIN_BLIND_NAME=Slepi dvoboj
-PLUGIN_BLIND_DESC=Dvoboj brez prikaza not.
-
-STAT_MAIN=Statika
-STAT_MAIN_DESC=Splošno
-STAT_MAIN_WHEREAMI=Statistika
-
-STAT_OVERVIEW_INTRO=%0:s Statistika. \n Nazadnje ponastavljeno %2:.2d.%1:.2d.%3:d
-STAT_OVERVIEW_SONG=%0:d Pesmi(%3:d z videom), od katerih je bilo %1:d že zapetih in %2:d ne.\n Najbolj priljubljena pesem je %5:s od %4:s.
-STAT_OVERVIEW_PLAYER=Od zadnje ponastavitve statistike je igro igralo %0:d igralcev.\n Najboljši/a je %1:s s povprecnim rezultatom %2:d tock.\n %3:s je dosegel/la najboljši rezultat s %4:d tockami.
-
-STAT_DETAIL=Statistika
-STAT_DETAIL_WHEREAMI=Podrobna statistika
-
-STAT_NEXT=Naslednja stran
-STAT_PREV=Prejšnja stran
-STAT_REVERSE=Obratni vrstni red
-STAT_PAGE=Stran %0:d od %1:d strani\n (%2:d od %3:d zapisov)
-
-STAT_DESC_SCORES=Najboljši rezultati
-STAT_DESC_SCORES_REVERSED=Najslabši rezultati
-STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s)
-
-STAT_DESC_SINGERS=Najboljši igralec
-STAT_DESC_SINGERS_REVERSED=Najslabši igralec
-STAT_FORMAT_SINGERS=%0:s \n povprecni rezultat: %1:d
-
-STAT_DESC_SONGS=Najbolj popularne pesmi
-STAT_DESC_SONGS_REVERSED=Najmanj popularne pesmi
-STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx igrano
-
-STAT_DESC_BANDS=Najbolj popularen izvajalec
-STAT_DESC_BANDS_REVERSED=Najmanj popularen izvajalec
-STAT_FORMAT_BANDS=%0:s \n %1:dx igrano
-
-MSG_ERROR_TITLE=Napaka
-MSG_QUESTION_TITLE=Vprašanje
-MSG_QUIT_USDX=Želite zapustiti Ultrastar?
-MSG_END_PARTY=Koncam zabavo?
-ERROR_NO_SONGS=Ni pesmi: Naloži jih v mapo Songs
-ERROR_NO_PLUGINS=Ni vkljuckov
-ERROR_CORRUPT_SONG=Ne morem naložiti pesmi.
-ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Ne morem naložiti pesmi: Ne najdem datoteke
-ERROR_CORRUPT_SONG_NO_NOTES=Ne morem naloziti pesmi: Ne najdem not.
-ERROR_CORRUPT_SONG_NO_BREAKS=Ne morem naložiti pesmi: Ne najdem prelomov vrstic.
-ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ne morem naložiti pesmi: Napaka v parsanju vrstice %0:d
\ No newline at end of file +[Text] +SING_LOADING=Nalaganje... + +SING_CHOOSE_MODE=izberi nacin +SING_SING=poj +SING_SING_DESC=poj sam ali v duetu + +SING_MULTI=zabava +SING_MULTI_DESC=poj v nacinu zabave + +SING_TOOLS=orodja + +SING_STATS=statistika +SING_STATS_DESC=poglej statistiko + +SING_EDITOR=urednik +SING_EDITOR_DESC=izdelaj svoje pesmi + +SING_GAME_OPTIONS=nastavitve igre +SING_GAME_OPTIONS_DESC=spremeni nastavitve igre + +SING_EXIT=izhod +SING_EXIT_DESC=izhod iz igre + +SING_OPTIONS=nastavitve +SING_OPTIONS_DESC=spremeni nastavitve +SING_OPTIONS_WHEREAMI=Nastavitve + +SING_OPTIONS_GAME=igra +SING_OPTIONS_GRAPHICS=izgled +SING_OPTIONS_SOUND=zvok +SING_OPTIONS_LYRICS=besedilo +SING_OPTIONS_THEMES=tema +SING_OPTIONS_RECORD=snemanje +SING_OPTIONS_ADVANCED=napredno +SING_OPTIONS_EXIT=nazaj + +SING_OPTIONS_GAME_WHEREAMI=Nastavitve Igre +SING_OPTIONS_GAME_DESC=osnovne nastavitve +SING_OPTIONS_GAME_PLAYERS=Igralci +SING_OPTIONS_GAME_DIFFICULTY=Težavnost +SING_OPTIONS_GAME_LANGUAGE=Jezik +SING_OPTIONS_GAME_TABS=Mape +SING_OPTIONS_GAME_SORTING=Sortiranje +SING_OPTIONS_GAME_DEBUG=Odpravljanje hrošcev + +SING_OPTIONS_GRAPHICS_WHEREAMI=Nastavitve prikaza +SING_OPTIONS_GRAPHICS_DESC=nastavitve prikaza +SING_OPTIONS_GRAPHICS_RESOLUTION=Locljivost +SING_OPTIONS_GRAPHICS_FULLSCREEN=Celozaslonski nacin +SING_OPTIONS_GRAPHICS_DEPTH=Globina +SING_OPTIONS_GRAPHICS_VISUALIZER=Vizualizacija +SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Osciloskop +SING_OPTIONS_GRAPHICS_LINEBONUS=Vrsticni bonus +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Velikost videa + +SING_OPTIONS_SOUND_WHEREAMI=Nastavitve zvoka +SING_OPTIONS_SOUND_DESC=nastavitve zvoka +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Mikrofonski Playback +SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Glasbena podlaga +SING_OPTIONS_SOUND_MIC_BOOST=Ojacitev mikrofona +SING_OPTIONS_SOUND_CLICK_ASSIST=Asistent klikanja +SING_OPTIONS_SOUND_BEAT_CLICK=Klikanje po ritmu +SING_OPTIONS_SOUND_THRESHOLD=Prag +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Nacin za dva igralca +SING_OPTIONS_SOUND_PREVIEWVOLUME=Glasnost predogleda +SING_OPTIONS_SOUND_PREVIEWFADING=narašcanje glasnosti + +SING_OPTIONS_LYRICS_WHEREAMI=Nastavitve besedila +SING_OPTIONS_LYRICS_DESC=nastavitve besedila +SING_OPTIONS_LYRICS_FONT=Pisava +SING_OPTIONS_LYRICS_EFFECT=Ucinek +SING_OPTIONS_LYRICS_SOLMIZATION=Solmizacija +SING_OPTIONS_LYRICS_NOTELINES=Notno crtovje + +SING_OPTIONS_THEMES_WHEREAMI=Nastavitve tem +SING_OPTIONS_THEMES_DESC=nastavitve teme +SING_OPTIONS_THEMES_THEME=Tema +SING_OPTIONS_THEMES_SKIN=Izgled +SING_OPTIONS_THEMES_COLOR=Barva + +SING_OPTIONS_RECORD_WHEREAMI=Nastavitve snemanja +SING_OPTIONS_RECORD_DESC=nastavitve mikrofona +SING_OPTIONS_RECORD_CARD=Vir zvoka +SING_OPTIONS_RECORD_INPUT=Vhod +SING_OPTIONS_RECORD_CHANNEL=Kanal + +SING_OPTIONS_ADVANCED_WHEREAMI=Napredne nastavitve +SING_OPTIONS_ADVANCED_DESC=Napredne nastavitve +SING_OPTIONS_ADVANCED_EFFECTSING=Pevski efekt +SING_OPTIONS_ADVANCED_SCREENFADE=Zamegljevanje prikaza +SING_OPTIONS_ADVANCED_LOADANIMATION=Zacetna animacija +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Zašcitno vprašanje +SING_OPTIONS_ADVANCED_LINEBONUS=Bonus za vrstico +SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= +SING_OPTIONS_ADVANCED_ONSONGCLICK=Po izboru pesmi +SING_OPTIONS_ADVANCED_PARTYPOPUP=Samodejni nacin Zabava + +SING_EDIT=Urednik +SING_EDIT_MENU_DESCRIPTION=Izdelaj lastno pesem + +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Izvozi besedilo iz midi datoteke +SING_EDIT_BUTTON_DESCRIPTION_EXIT=Nazaj +SING_EDIT_BUTTON_CONVERT=Uvozi +SING_EDIT_BUTTON_EXIT=Nazaj + +SING_EDIT_NAVIGATE=Navigacija +SING_EDIT_SELECT=Izberi +SING_EDIT_EXIT=Nazaj + +SING_LEGEND_SELECT=izberi +SING_LEGEND_NAVIGATE=premik +SING_LEGEND_CONTINUE=nadaljuj +SING_LEGEND_ESC=nazaj + +SING_PLAYER_DESC=vpiši imena igralcev +SING_PLAYER_WHEREAMI=Imena igralcev +SING_PLAYER_ENTER_NAME=vnesi ime + +SING_DIFFICULTY_DESC=izberi težavnost +SING_DIFFICULTY_WHEREAMI=Težavnost +SING_DIFFICULTY_CONTINUE=k izbiri pesmi +SING_EASY=Enostavno +SING_MEDIUM=Srednje +SING_HARD=Težko + +SING_SONG_SELECTION_DESC=izberi svojo pesem +SING_SONG_SELECTION_WHEREAMI=Izbira pesmi +SING_SONG_SELECTION_GOTO=pojdi na... +SING_SONG_SELECTION=izbira pesmi +SING_SONG_SELECTION_MENU=meni +SING_SONG_SELECTION_PLAYLIST=seznam predvajanja +SING_SONGS_IN_CAT=Pesmi +PLAYLIST_CATTEXT=Lista: %s + +SING_TIME=CAS +SING_TOTAL=skupaj +SING_MODE=Petje +SING_NOTES=note +SING_GOLDEN_NOTES=zlate note +SING_PHRASE_BONUS=bonus za vrstico + +SING_MENU=Glavni meni + +SONG_SCORE=rezultat petja +SONG_SCORE_WHEREAMI=Rezultat + +SING_SCORE_TONE_DEAF=Gluhonem +SING_SCORE_AMATEUR=Amater +SING_SCORE_WANNABE=Igralec +SING_SCORE_HOPEFUL=Nadebudnež +SING_SCORE_RISING_STAR=Vzhajajoca zvezda +SING_SCORE_LEAD_SINGER=Vodilni pevec +SING_SCORE_SUPERSTAR=Superzvezda +SING_SCORE_ULTRASTAR=Ultrazvezda + +SING_TOP_5_CHARTS=najboljših 5 pevcev +SING_TOP_5_CHARTS_WHEREAMI=najboljših 5 +SING_TOP_5_CHARTS_CONTINUE=k izbiri pesmi + +POPUP_PERFECT=popolno! +POPUP_AWESOME=odlicno! +POPUP_GREAT=zelo dobro! +POPUP_GOOD=dobro! +POPUP_NOTBAD=ni slabo! +POPUP_BAD=slabo! +POPUP_POOR=zelo slabo! +POPUP_AWFUL=obupno! + +IMPLODE_GLUE1=, +IMPLODE_GLUE2= in + +SONG_MENU_NAME_MAIN=meni pesmi +SONG_MENU_PLAY=Poj +SONG_MENU_CHANGEPLAYERS=Spremeni igralca +SONG_MENU_EDIT=Uredi +SONG_MENU_MODI=Poj "a Modi" +SONG_MENU_CANCEL=Preklici + +SONG_MENU_NAME_PLAYLIST=Meni Pesem +SONG_MENU_PLAYLIST_ADD=Dodaj pesem +SONG_MENU_PLAYLIST_DEL=Izbriši pesem + +SONG_MENU_NAME_PLAYLIST_ADD=Dodaj pesem +SONG_MENU_PLAYLIST_ADD_NEW=dodaj nov seznam +SONG_MENU_PLAYLIST_ADD_EXISTING=dodaj shranjen seznam +SONG_MENU_PLAYLIST_NOEXISTING=Ni seznamov + +SONG_MENU_NAME_PLAYLIST_NEW=Nov seznam +SONG_MENU_PLAYLIST_NEW_CREATE=Ustvari +SONG_MENU_PLAYLIST_NEW_UNNAMED=Neimenovan + +SONG_MENU_NAME_PLAYLIST_DELITEM=Res izbrišem? +SONG_MENU_YES=Da +SONG_MENU_NO=Ne + +SONG_MENU_NAME_PLAYLIST_LOAD=Odpri seznam +SONG_MENU_PLAYLIST_LOAD=odpri +SONG_MENU_PLAYLIST_DELCURRENT=izbriši trenuten seznam + +SONG_MENU_NAME_PLAYLIST_DEL=Izbrišem seznam? + +SONG_MENU_NAME_PARTY_MAIN=Meni Zabava +SONG_MENU_JOKER=Joker + +SONG_MENU_NAME_PARTY_JOKER=izkoristi jokerja + +SONG_JUMPTO_DESC=poišci pesem +SONG_JUMPTO_TYPE_DESC=Isci po: +SONG_JUMPTO_TYPE1=Vse +SONG_JUMPTO_TYPE2=Naslov +SONG_JUMPTO_TYPE3=Avtor +SONG_JUMPTO_SONGSFOUND=%d pesmi najdenih +SONG_JUMPTO_NOSONGSFOUND=Ne najdem +SONG_JUMPTO_HELP=Vpiši besedilo za iskanje +SONG_JUMPTO_CATTEXT=Išci po: %s + +PARTY_MODE=zabava +PARTY_DIFFICULTY=Težavnost +PARTY_PLAYLIST=Izbor +PARTY_PLAYLIST_ALL=Vse pesmi +PARTY_PLAYLIST_CATEGORY=Mapa +PARTY_PLAYLIST_PLAYLIST=Seznam +PARTY_ROUNDS=Število rund +PARTY_TEAMS=Ekipe +PARTY_TEAMS_PLAYER1=Igralec Ekipa1 +PARTY_TEAMS_PLAYER2=Igralec Ekipa2 +PARTY_TEAMS_PLAYER3=Igralec Ekipa3 + +PARTY_LEGEND_CONTINUE=nadaljuj + +PARTY_OPTIONS_DESC=nastavitve za nacin zabave +PARTY_OPTIONS_WHEREAMI=nastavitve zabave + +PARTY_PLAYER_DESC=vpiši igralce in imena ekip! +PARTY_PLAYER_WHEREAMI=Imena +PARTY_PLAYER_ENTER_NAME=vpiši imena +PARTY_PLAYER_LEGEND_CONTINUE=zacni zabavo + +PARTY_ROUND_DESC=naslednji igralec k mikrofonu +PARTY_ROUND_WHEREAMI=Naslednja runda +PARTY_ROUND_LEGEND_CONTINUE=zacni rundo + +PARTY_SONG_WHEREAMI=Izbor pesmi - Zabava +PARTY_SONG_LEGEND_CONTINUE=poj +PARTY_SONG_MENU=meni Zabava + +PARTY_SCORE_DESC=tocke zadnje runde +PARTY_SCORE_WHEREAMI=Tocke v zabavi + +PARTY_WIN_DESC=Zmagovalec +PARTY_WIN_WHEREAMI=Zmagovalec +PARTY_WIN_LEGEND_CONTINUE=nazaj k glavnemu meniju + +PARTY_ROUND=Runda +PARTY_ROUND_WINNER=Zmagovalec +PARTY_NOTPLAYEDYET=neizvedeno +PARTY_NOBODY=nobeden +NEXT_ROUND=Naslednja runda: + +PARTY_DISMISSED=Zakljucena! +PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS2=zmaga! + +PLUGIN_HDL_NAME=Zdrži nivo +PLUGIN_HDL_DESC=Ne poj slabše, kot kaže kazalnik na števcu za ocenjevanje. + +PLUGIN_UNTIL5000_NAME=Do 5000 +PLUGIN_UNTIL5000_DESC=Kdor prvi doseže 5000 tock, zmaga. + +PLUGIN_DUELL_NAME=Dvoboj +PLUGIN_DUELL_DESC=Tekmovanje do 10000 tock. + +PLUGIN_TEAMDUELL_NAME=Ekipni dvoboj +PLUGIN_TEAMDUELL_DESC=Podaj mikrofon! + +PLUGIN_BLIND_NAME=Slepi dvoboj +PLUGIN_BLIND_DESC=Dvoboj brez prikaza not. + +STAT_MAIN=Statika +STAT_MAIN_DESC=Splošno +STAT_MAIN_WHEREAMI=Statistika + +STAT_OVERVIEW_INTRO=%0:s Statistika. \n Nazadnje ponastavljeno %2:.2d.%1:.2d.%3:d +STAT_OVERVIEW_SONG=%0:d Pesmi(%3:d z videom), od katerih je bilo %1:d že zapetih in %2:d ne.\n Najbolj priljubljena pesem je %5:s od %4:s. +STAT_OVERVIEW_PLAYER=Od zadnje ponastavitve statistike je igro igralo %0:d igralcev.\n Najboljši/a je %1:s s povprecnim rezultatom %2:d tock.\n %3:s je dosegel/la najboljši rezultat s %4:d tockami. + +STAT_DETAIL=Statistika +STAT_DETAIL_WHEREAMI=Podrobna statistika + +STAT_NEXT=Naslednja stran +STAT_PREV=Prejšnja stran +STAT_REVERSE=Obratni vrstni red +STAT_PAGE=Stran %0:d od %1:d strani\n (%2:d od %3:d zapisov) + +STAT_DESC_SCORES=Najboljši rezultati +STAT_DESC_SCORES_REVERSED=Najslabši rezultati +STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) + +STAT_DESC_SINGERS=Najboljši igralec +STAT_DESC_SINGERS_REVERSED=Najslabši igralec +STAT_FORMAT_SINGERS=%0:s \n povprecni rezultat: %1:d + +STAT_DESC_SONGS=Najbolj popularne pesmi +STAT_DESC_SONGS_REVERSED=Najmanj popularne pesmi +STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx igrano + +STAT_DESC_BANDS=Najbolj popularen izvajalec +STAT_DESC_BANDS_REVERSED=Najmanj popularen izvajalec +STAT_FORMAT_BANDS=%0:s \n %1:dx igrano + +MSG_ERROR_TITLE=Napaka +MSG_QUESTION_TITLE=Vprašanje +MSG_QUIT_USDX=Želite zapustiti Ultrastar? +MSG_END_PARTY=Koncam zabavo? +ERROR_NO_SONGS=Ni pesmi: Naloži jih v mapo Songs +ERROR_NO_PLUGINS=Ni vkljuckov +ERROR_CORRUPT_SONG=Ne morem naložiti pesmi. +ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Ne morem naložiti pesmi: Ne najdem datoteke +ERROR_CORRUPT_SONG_NO_NOTES=Ne morem naloziti pesmi: Ne najdem not. +ERROR_CORRUPT_SONG_NO_BREAKS=Ne morem naložiti pesmi: Ne najdem prelomov vrstic. +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ne morem naložiti pesmi: Napaka v parsanju vrstice %0:d
\ No newline at end of file diff --git a/unicode/game/languages/readme.txt b/unicode/game/languages/old/readme.txt index 83ba6cd6..83ba6cd6 100644 --- a/unicode/game/languages/readme.txt +++ b/unicode/game/languages/old/readme.txt diff --git a/unicode/game/themes/Classic.ini b/unicode/game/themes/Classic.ini index 144448f2..1ea83f5e 100644 --- a/unicode/game/themes/Classic.ini +++ b/unicode/game/themes/Classic.ini @@ -7457,4 +7457,19 @@ H =44 Z =1 Int=1 Color =Black -Type=Font Black
\ No newline at end of file +Type=Font Black + + +[SingLyricsUpperBar] +X = 80 +W = 640 +Y = 493 +H = 41 +;YOffSet (+/-) for the Sing-Indicator +IndicatorYOffset = 3 + +[SingLyricsLowerBar] +X = 80 +W = 640 +Y = 535 +H = 41
\ No newline at end of file diff --git a/unicode/game/themes/Deluxe.ini b/unicode/game/themes/Deluxe.ini index 5f47c215..e128ae54 100644 --- a/unicode/game/themes/Deluxe.ini +++ b/unicode/game/themes/Deluxe.ini @@ -1072,7 +1072,7 @@ Align = 0 X = 680 Y = 136 W = 100 -H = 13 +H = 8 #Player Two [SingP2RStatic] @@ -8150,7 +8150,6 @@ Text = OK Align = 1 Z = 1 - [PausePopUpStatic] Tex = Pause X = 0 @@ -8159,4 +8158,18 @@ W = 800 H = 600 Z = 0.95 Color = White -Type = Colorized
\ No newline at end of file +Type = Colorized + +[SingLyricsUpperBar] +X = 80 +W = 640 +Y = 493 +H = 41 +;YOffSet (+/-) for the Sing-Indicator +IndicatorYOffset = 3 + +[SingLyricsLowerBar] +X = 80 +W = 640 +Y = 535 +H = 41
\ No newline at end of file diff --git a/unicode/game/themes/Deluxe/Blue.ini b/unicode/game/themes/Deluxe/Blue.ini index 30c68e3e..10017fb3 100644 --- a/unicode/game/themes/Deluxe/Blue.ini +++ b/unicode/game/themes/Deluxe/Blue.ini @@ -15,6 +15,9 @@ Color=Blue interface_selectbg_search = interface/selectbg_search.png interface_dialog_background = interface/dialog_background.png +Cursor = interface/cursor.png +Cursor_Pressed = interface/cursor_pressed.png + /** * Icons */ @@ -29,6 +32,9 @@ ButtonF = [main]buttonf.jpg MainBar = [main]mainBar.png SelectBG = [main]selectbg.png +Select_ArrowLeft = interface/select_arrow_left.png +Select_ArrowRight = interface/select_arrow_right.png + #Backgrounds LoadingBG = [bg-load]blue.jpg MainBG = [bg-main]blue.jpg @@ -43,8 +49,7 @@ PartyBG = [bg-main]blue.jpg SongCD = [icon]cd.png MainIcon = [icon]main.png IconOption = [icon]options.png -IconEdit = [icon]options.png - +IconEdit = [icon]options.png ScoreIcon = [icon]score.png PartyIcon = [icon]party.png StatIcon = [icon]stats.png @@ -52,6 +57,7 @@ StatIcon = [icon]stats.png IconError = [icon]error.png IconQuestion = [icon]question.png + # # # S O N G S E L E C E T # # # SongSelection1 = [main]songSelection1.png SongSelection2 = [main]songSelection2.png @@ -88,11 +94,12 @@ P = [sing]p.png #Pointer for lyrics Ball = [sing]LyricsBall.png + # # # S C O R E / T O P 5 # # # ScoreBox = [score]box.png -ScoreGlassBox = [score]glass_box.png +ScoreGlassBox = [score]glass_box.png ScoreLevel = [score]level.png -ScoreLevelRound = [score]levelround.png +ScoreLevelRound = [score]levelRound.png ScoreLevel_Dark = [score]level_dark.png ScoreLevel_Dark_Round = [score]level_dark_round.png @@ -132,6 +139,7 @@ Rating_6 = [score]rating_6.png Rating_7 = [score]rating_7.png # thank you girls and guys!!! + # # # P A R T Y # # # Joker =[party]Joker.png PartyPlayerButton =[party]playerButton.png @@ -153,6 +161,7 @@ PartyWinDeco1 =[party]winDecoration.png PartyWinDeco2 =[party]winDecoration.png PartyWinDeco3 =[party]winDecoration.png + # # # S T A T S # # # StatMainBG1 = [stat]mainBG1.png StatMainBG2 = [stat]mainBG2.png @@ -205,6 +214,7 @@ Rectangle = [helper]rectangle.jpg ButtonFade = [helper]buttonFade.png BGFade = [special]bg_fade.png + # # # D U E T # # # LyricIcon_P1 = [sing.player1]lyric_active.png LyricIconD_P1 = [sing.player1]lyric_inactive.png @@ -217,4 +227,4 @@ LyricIconD_P4 = [sing.player4]lyric_inactive.png LyricIcon_P5 = [sing.player5]lyric_active.png LyricIconD_P5 = [sing.player5]lyric_inactive.png LyricIcon_P6 = [sing.player6]lyric_active.png -LyricIconD_P6 = [sing.player6]lyric_inactive.png +LyricIconD_P6 = [sing.player6]lyric_inactive.png
\ No newline at end of file diff --git a/unicode/game/themes/Deluxe/Fall.ini b/unicode/game/themes/Deluxe/Fall.ini index 72d9021b..38f25cdb 100644 --- a/unicode/game/themes/Deluxe/Fall.ini +++ b/unicode/game/themes/Deluxe/Fall.ini @@ -9,12 +9,32 @@ Name=Fall Color=Orange [Textures] +/** + * Interface + */ +interface_selectbg_search = interface/selectbg_search.png +interface_dialog_background = interface/dialog_background.png + +Cursor = interface/cursor.png +Cursor_Pressed = interface/cursor_pressed.png + +/** + * Icons + */ +icon_song_menu = icon/song_menu.png +icon_song_search = icon/song_search.png +icon_song_video = icon/song_video.png + + # # # M A I N # # # Button = [main]button.png ButtonF = [main]buttonf.jpg MainBar = [main]mainBar.png SelectBG = [main]selectbg.png +Select_ArrowLeft = interface/select_arrow_left.png +Select_ArrowRight = interface/select_arrow_right.png + #Backgrounds LoadingBG = [bg-load]fall.jpg MainBG = [bg-main]fall.jpg @@ -28,18 +48,16 @@ PartyBG = [bg-main]fall.jpg #Icons on screen SongCD = [icon]cd.png MainIcon = [icon]main.png -MainSearch = [icon]search.png IconOption = [icon]options.png IconEdit = [icon]options.png -IconSongMenu = [icon]songmenu.png ScoreIcon = [icon]score.png PartyIcon = [icon]party.png StatIcon = [icon]stats.png -VideoIcon = [icon]video.png IconError = [icon]error.png IconQuestion = [icon]question.png + # # # S O N G S E L E C E T # # # SongSelection1 = [main]songSelection1.png SongSelection2 = [main]songSelection2.png @@ -76,9 +94,10 @@ P = [sing]p.png #Pointer for lyrics Ball = [sing]LyricsBall.png + # # # S C O R E / T O P 5 # # # ScoreBox = [score]box.png -ScoreGlassBox = [score]glass_box.png +ScoreGlassBox = [score]glass_box.png ScoreLevel = [score]level.png ScoreLevelRound = [score]levelRound.png @@ -120,6 +139,7 @@ Rating_6 = [score]rating_6.png Rating_7 = [score]rating_7.png # thank you girls and guys!!! + # # # P A R T Y # # # Joker =[party]Joker.png PartyPlayerButton =[party]playerButton.png @@ -141,6 +161,7 @@ PartyWinDeco1 =[party]winDecoration.png PartyWinDeco2 =[party]winDecoration.png PartyWinDeco3 =[party]winDecoration.png + # # # S T A T S # # # StatMainBG1 = [stat]mainBG1.png StatMainBG2 = [stat]mainBG2.png @@ -165,7 +186,6 @@ Leiste2 = [special]bar2.png JumpToBG = [menu]jumpToBg.png SongMenuBG = [menu]songMenuBg.png SongMenuSelectBG = [menu]songMenuSelectBg.png -PopUpBG = [menu]popUpBG.png # # # N O T E S # # # @@ -183,6 +203,7 @@ NoteBGMid = [sing]notesBgMid.png NoteBGRight = [sing]notesBgRight.png Pause = [sing]pause.png + # # # E F F E C T S # # # NoteStar = [effect]goldenNoteStar.png NotePerfectStar = [effect]perfectNoteStar.png @@ -192,3 +213,18 @@ NotePerfectStar = [effect]perfectNoteStar.png Rectangle = [helper]rectangle.jpg ButtonFade = [helper]buttonFade.png BGFade = [special]bg_fade.png + + +# # # D U E T # # # +LyricIcon_P1 = [sing.player1]lyric_active.png +LyricIconD_P1 = [sing.player1]lyric_inactive.png +LyricIcon_P2 = [sing.player2]lyric_active.png +LyricIconD_P2 = [sing.player2]lyric_inactive.png +LyricIcon_P3 = [sing.player3]lyric_active.png +LyricIconD_P3 = [sing.player3]lyric_inactive.png +LyricIcon_P4 = [sing.player4]lyric_active.png +LyricIconD_P4 = [sing.player4]lyric_inactive.png +LyricIcon_P5 = [sing.player5]lyric_active.png +LyricIconD_P5 = [sing.player5]lyric_inactive.png +LyricIcon_P6 = [sing.player6]lyric_active.png +LyricIconD_P6 = [sing.player6]lyric_inactive.png
\ No newline at end of file diff --git a/unicode/game/themes/Deluxe/Ribbon.ini b/unicode/game/themes/Deluxe/Ribbon.ini index 1631183e..73cae2ab 100644 --- a/unicode/game/themes/Deluxe/Ribbon.ini +++ b/unicode/game/themes/Deluxe/Ribbon.ini @@ -1,4 +1,4 @@ -never;0.5.1
+;0.5.1
;experimental version
;if you are using this as a sample for your theme
;don't be suprised it doesn't work good with newer releases
@@ -6,9 +6,25 @@ never;0.5.1 [Skin]
Theme=Deluxe
Name=Ribbon
-Color=Ani
+Color=Any
[Textures]
+/**
+ * Interface
+ */
+interface_selectbg_search = interface/selectbg_search.png
+interface_dialog_background = interface/dialog_background.png
+
+Cursor = interface/cursor.png
+Cursor_Pressed = interface/cursor_pressed.png
+
+/**
+ * Icons
+ */
+icon_song_menu = icon/song_menu.png
+icon_song_search = icon/song_search.png
+icon_song_video = icon/song_video.png
+
# # # M A I N # # #
Button = [main]button.png
@@ -16,6 +32,9 @@ ButtonF = [main]buttonf.jpg MainBar = [main]mainBar.png
SelectBG = [main]selectbg.png
+Select_ArrowLeft = interface/select_arrow_left.png
+Select_ArrowRight = interface/select_arrow_right.png
+
#Backgrounds
LoadingBG = [bg-video]ribbon.mov
MainBG = [bg-video]ribbon.mov
@@ -29,18 +48,16 @@ PartyBG = [bg-video]ribbon.mov #Icons on screen
SongCD = [icon]cd.png
MainIcon = [icon]main.png
-MainSearch = [icon]search.png
IconOption = [icon]options.png
IconEdit = [icon]options.png
-IconSongMenu = [icon]songmenu.png
ScoreIcon = [icon]score.png
PartyIcon = [icon]party.png
StatIcon = [icon]stats.png
-VideoIcon = [icon]video.png
IconError = [icon]error.png
IconQuestion = [icon]question.png
+
# # # S O N G S E L E C E T # # #
SongSelection1 = [main]songSelection1.png
SongSelection2 = [main]songSelection2.png
@@ -80,9 +97,9 @@ Ball = [sing]LyricsBall.png # # # S C O R E / T O P 5 # # #
ScoreBox = [score]box.png
-ScoreGlassBox = [score]glass_box.png
+ScoreGlassBox = [score]glass_box.png
ScoreLevel = [score]level.png
-ScoreLevelRound = [score]levelround.png
+ScoreLevelRound = [score]levelRound.png
ScoreLevel_Dark = [score]level_dark.png
ScoreLevel_Dark_Round = [score]level_dark_round.png
@@ -122,6 +139,7 @@ Rating_6 = [score]rating_6.png Rating_7 = [score]rating_7.png
# thank you girls and guys!!!
+
# # # P A R T Y # # #
Joker =[party]Joker.png
PartyPlayerButton =[party]playerButton.png
@@ -143,6 +161,7 @@ PartyWinDeco1 =[party]winDecoration.png PartyWinDeco2 =[party]winDecoration.png
PartyWinDeco3 =[party]winDecoration.png
+
# # # S T A T S # # #
StatMainBG1 = [stat]mainBG1.png
StatMainBG2 = [stat]mainBG2.png
@@ -167,7 +186,6 @@ Leiste2 = [special]bar2.png JumpToBG = [menu]jumpToBg.png
SongMenuBG = [menu]songMenuBg.png
SongMenuSelectBG = [menu]songMenuSelectBg.png
-PopUpBG = [menu]popUpBG.png
# # # N O T E S # # #
@@ -183,6 +201,7 @@ NotePlainRight = [sing]notesPlainRight.png NoteBGLeft = [sing]notesBgLeft.png
NoteBGMid = [sing]notesBgMid.png
NoteBGRight = [sing]notesBgRight.png
+Pause = [sing]pause.png
# # # E F F E C T S # # #
@@ -194,3 +213,18 @@ NotePerfectStar = [effect]perfectNoteStar.png Rectangle = [helper]rectangle.jpg
ButtonFade = [helper]buttonFade.png
BGFade = [special]bg_fade.png
+
+
+# # # D U E T # # #
+LyricIcon_P1 = [sing.player1]lyric_active.png
+LyricIconD_P1 = [sing.player1]lyric_inactive.png
+LyricIcon_P2 = [sing.player2]lyric_active.png
+LyricIconD_P2 = [sing.player2]lyric_inactive.png
+LyricIcon_P3 = [sing.player3]lyric_active.png
+LyricIconD_P3 = [sing.player3]lyric_inactive.png
+LyricIcon_P4 = [sing.player4]lyric_active.png
+LyricIconD_P4 = [sing.player4]lyric_inactive.png
+LyricIcon_P5 = [sing.player5]lyric_active.png
+LyricIconD_P5 = [sing.player5]lyric_inactive.png
+LyricIcon_P6 = [sing.player6]lyric_active.png
+LyricIconD_P6 = [sing.player6]lyric_inactive.png
\ No newline at end of file diff --git a/unicode/game/themes/Deluxe/Summer.ini b/unicode/game/themes/Deluxe/Summer.ini index 3d40c2f8..36e9f5d7 100644 --- a/unicode/game/themes/Deluxe/Summer.ini +++ b/unicode/game/themes/Deluxe/Summer.ini @@ -9,12 +9,32 @@ Name=Summer Color=Blue [Textures] +/** + * Interface + */ +interface_selectbg_search = interface/selectbg_search.png +interface_dialog_background = interface/dialog_background.png + +Cursor = interface/cursor.png +Cursor_Pressed = interface/cursor_pressed.png + +/** + * Icons + */ +icon_song_menu = icon/song_menu.png +icon_song_search = icon/song_search.png +icon_song_video = icon/song_video.png + + # # # M A I N # # # Button = [main]button.png ButtonF = [main]buttonf.jpg MainBar = [main]mainBar.png SelectBG = [main]selectbg.png +Select_ArrowLeft = interface/select_arrow_left.png +Select_ArrowRight = interface/select_arrow_right.png + #Backgrounds LoadingBG = [bg-load]summer.jpg MainBG = [bg-main]summer.jpg @@ -28,18 +48,16 @@ PartyBG = [bg-main]summer.jpg #Icons on screen SongCD = [icon]cd.png MainIcon = [icon]main.png -MainSearch = [icon]search.png IconOption = [icon]options.png IconEdit = [icon]options.png -IconSongMenu = [icon]songmenu.png ScoreIcon = [icon]score.png PartyIcon = [icon]party.png StatIcon = [icon]stats.png -VideoIcon = [icon]video.png IconError = [icon]error.png IconQuestion = [icon]question.png + # # # S O N G S E L E C E T # # # SongSelection1 = [main]songSelection1.png SongSelection2 = [main]songSelection2.png @@ -76,9 +94,10 @@ P = [sing]p.png #Pointer for lyrics Ball = [sing]LyricsBall.png + # # # S C O R E / T O P 5 # # # ScoreBox = [score]box.png -ScoreGlassBox = [score]glass_box.png +ScoreGlassBox = [score]glass_box.png ScoreLevel = [score]level.png ScoreLevelRound = [score]levelRound.png @@ -120,6 +139,7 @@ Rating_6 = [score]rating_6.png Rating_7 = [score]rating_7.png # thank you girls and guys!!! + # # # P A R T Y # # # Joker =[party]Joker.png PartyPlayerButton =[party]playerButton.png @@ -141,6 +161,7 @@ PartyWinDeco1 =[party]winDecoration.png PartyWinDeco2 =[party]winDecoration.png PartyWinDeco3 =[party]winDecoration.png + # # # S T A T S # # # StatMainBG1 = [stat]mainBG1.png StatMainBG2 = [stat]mainBG2.png @@ -165,7 +186,6 @@ Leiste2 = [special]bar2.png JumpToBG = [menu]jumpToBg.png SongMenuBG = [menu]songMenuBg.png SongMenuSelectBG = [menu]songMenuSelectBg.png -PopUpBG = [menu]popUpBG.png # # # N O T E S # # # @@ -183,6 +203,7 @@ NoteBGMid = [sing]notesBgMid.png NoteBGRight = [sing]notesBgRight.png Pause = [sing]pause.png + # # # E F F E C T S # # # NoteStar = [effect]goldenNoteStar.png NotePerfectStar = [effect]perfectNoteStar.png @@ -192,3 +213,18 @@ NotePerfectStar = [effect]perfectNoteStar.png Rectangle = [helper]rectangle.jpg ButtonFade = [helper]buttonFade.png BGFade = [special]bg_fade.png + + +# # # D U E T # # # +LyricIcon_P1 = [sing.player1]lyric_active.png +LyricIconD_P1 = [sing.player1]lyric_inactive.png +LyricIcon_P2 = [sing.player2]lyric_active.png +LyricIconD_P2 = [sing.player2]lyric_inactive.png +LyricIcon_P3 = [sing.player3]lyric_active.png +LyricIconD_P3 = [sing.player3]lyric_inactive.png +LyricIcon_P4 = [sing.player4]lyric_active.png +LyricIconD_P4 = [sing.player4]lyric_inactive.png +LyricIcon_P5 = [sing.player5]lyric_active.png +LyricIconD_P5 = [sing.player5]lyric_inactive.png +LyricIcon_P6 = [sing.player6]lyric_active.png +LyricIconD_P6 = [sing.player6]lyric_inactive.png
\ No newline at end of file diff --git a/unicode/game/themes/Deluxe/Winter.ini b/unicode/game/themes/Deluxe/Winter.ini index 32c37a02..72514a15 100644 --- a/unicode/game/themes/Deluxe/Winter.ini +++ b/unicode/game/themes/Deluxe/Winter.ini @@ -9,12 +9,32 @@ Name=Winter Color=Blue [Textures] +/** + * Interface + */ +interface_selectbg_search = interface/selectbg_search.png +interface_dialog_background = interface/dialog_background.png + +Cursor = interface/cursor.png +Cursor_Pressed = interface/cursor_pressed.png + +/** + * Icons + */ +icon_song_menu = icon/song_menu.png +icon_song_search = icon/song_search.png +icon_song_video = icon/song_video.png + + # # # M A I N # # # Button = [main]button.png ButtonF = [main]buttonf.jpg MainBar = [main]mainBar.png SelectBG = [main]selectbg.png +Select_ArrowLeft = interface/select_arrow_left.png +Select_ArrowRight = interface/select_arrow_right.png + #Backgrounds LoadingBG = [bg-load]winter.jpg MainBG = [bg-main]winter.jpg @@ -28,18 +48,16 @@ PartyBG = [bg-main]winter.jpg #Icons on screen SongCD = [icon]cd.png MainIcon = [icon]main.png -MainSearch = [icon]search.png IconOption = [icon]options.png IconEdit = [icon]options.png -IconSongMenu = [icon]songmenu.png ScoreIcon = [icon]score.png PartyIcon = [icon]party.png StatIcon = [icon]stats.png -VideoIcon = [icon]video.png IconError = [icon]error.png IconQuestion = [icon]question.png + # # # S O N G S E L E C E T # # # SongSelection1 = [main]songSelection1.png SongSelection2 = [main]songSelection2.png @@ -79,7 +97,7 @@ Ball = [sing]LyricsBall.png # # # S C O R E / T O P 5 # # # ScoreBox = [score]box.png -ScoreGlassBox = [score]glass_box.png +ScoreGlassBox = [score]glass_box.png ScoreLevel = [score]level.png ScoreLevelRound = [score]levelRound.png @@ -121,6 +139,7 @@ Rating_6 = [score]rating_6.png Rating_7 = [score]rating_7.png # thank you girls and guys!!! + # # # P A R T Y # # # Joker =[party]Joker.png PartyPlayerButton =[party]playerButton.png @@ -142,6 +161,7 @@ PartyWinDeco1 =[party]winDecoration.png PartyWinDeco2 =[party]winDecoration.png PartyWinDeco3 =[party]winDecoration.png + # # # S T A T S # # # StatMainBG1 = [stat]mainBG1.png StatMainBG2 = [stat]mainBG2.png @@ -166,7 +186,6 @@ Leiste2 = [special]bar2.png JumpToBG = [menu]jumpToBg.png SongMenuBG = [menu]songMenuBg.png SongMenuSelectBG = [menu]songMenuSelectBg.png -PopUpBG = [menu]popUpBG.png # # # N O T E S # # # @@ -184,6 +203,7 @@ NoteBGMid = [sing]notesBgMid.png NoteBGRight = [sing]notesBgRight.png Pause = [sing]pause.png + # # # E F F E C T S # # # NoteStar = [effect]goldenNoteStar.png NotePerfectStar = [effect]perfectNoteStar.png @@ -193,3 +213,18 @@ NotePerfectStar = [effect]perfectNoteStar.png Rectangle = [helper]rectangle.jpg ButtonFade = [helper]buttonFade.png BGFade = [special]bg_fade.png + + +# # # D U E T # # # +LyricIcon_P1 = [sing.player1]lyric_active.png +LyricIconD_P1 = [sing.player1]lyric_inactive.png +LyricIcon_P2 = [sing.player2]lyric_active.png +LyricIconD_P2 = [sing.player2]lyric_inactive.png +LyricIcon_P3 = [sing.player3]lyric_active.png +LyricIconD_P3 = [sing.player3]lyric_inactive.png +LyricIcon_P4 = [sing.player4]lyric_active.png +LyricIconD_P4 = [sing.player4]lyric_inactive.png +LyricIcon_P5 = [sing.player5]lyric_active.png +LyricIconD_P5 = [sing.player5]lyric_inactive.png +LyricIcon_P6 = [sing.player6]lyric_active.png +LyricIconD_P6 = [sing.player6]lyric_inactive.png
\ No newline at end of file diff --git a/unicode/game/themes/Deluxe/[main]selectbg.png b/unicode/game/themes/Deluxe/[main]selectbg.png Binary files differindex 093be9a5..f1b69eca 100644 --- a/unicode/game/themes/Deluxe/[main]selectbg.png +++ b/unicode/game/themes/Deluxe/[main]selectbg.png diff --git a/unicode/game/themes/Deluxe/interface/cursor.png b/unicode/game/themes/Deluxe/interface/cursor.png Binary files differnew file mode 100644 index 00000000..6c222732 --- /dev/null +++ b/unicode/game/themes/Deluxe/interface/cursor.png diff --git a/unicode/game/themes/Deluxe/interface/cursor_pressed.png b/unicode/game/themes/Deluxe/interface/cursor_pressed.png Binary files differnew file mode 100644 index 00000000..3fc36a5a --- /dev/null +++ b/unicode/game/themes/Deluxe/interface/cursor_pressed.png diff --git a/unicode/game/themes/Deluxe/interface/select_arrow_left.png b/unicode/game/themes/Deluxe/interface/select_arrow_left.png Binary files differnew file mode 100644 index 00000000..e4a32d2d --- /dev/null +++ b/unicode/game/themes/Deluxe/interface/select_arrow_left.png diff --git a/unicode/game/themes/Deluxe/interface/select_arrow_right.png b/unicode/game/themes/Deluxe/interface/select_arrow_right.png Binary files differnew file mode 100644 index 00000000..b2a29793 --- /dev/null +++ b/unicode/game/themes/Deluxe/interface/select_arrow_right.png diff --git a/unicode/installer/UltraStar Deluxe.nsi b/unicode/installer/UltraStar Deluxe.nsi index c8df95dd..a6f37e2a 100644 --- a/unicode/installer/UltraStar Deluxe.nsi +++ b/unicode/installer/UltraStar Deluxe.nsi @@ -6,6 +6,7 @@ !include WinVer.nsh
!include LogicLib.nsh
!include InstallOptions.nsh
+!include nsDialogs.nsh
; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~
; Variables
@@ -42,9 +43,9 @@ OutFile "ultrastardx-${version}-installer-full.exe" InstallDir "$PROGRAMFILES\${name}"
-; Windows Vista:
+; Windows Vista / Windows 7:
-RequestExecutionLevel user
+RequestExecutionLevel admin
; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~
; Interface Settings
@@ -82,6 +83,7 @@ RequestExecutionLevel user !define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_WELCOMEPAGE_TITLE "$(page_welcome_title)"
+
!define MUI_WELCOMEPAGE_TEXT "$(page_welcome_txt)"
; License Page:
@@ -148,6 +150,9 @@ Function Settings ; Get all the variables:
+Var /GLOBAL CHECKBOX
+Var /GLOBAL checkbox_state
+
var /GLOBAL fullscreen
var /GLOBAL language2
var /GLOBAL resolution
@@ -192,18 +197,35 @@ ${WriteToConfig} "Resolution=$resolution$\r$\n" "$INSTDIR\config.ini" ${EndIf}
-${WriteToConfig} "[Advanced]$\r$\n" "$INSTDIR\config.ini"
+${WriteToConfig} "[Sound]$\r$\n" "$INSTDIR\config.ini"
+${WriteToConfig} "PreviewFading=3 Secs$\r$\n" "$INSTDIR\config.ini"
; Animations On / Off Tasks
${If} $animations == "Off"
+${WriteToConfig} "[Advanced]$\r$\n" "$INSTDIR\config.ini"
+
${WriteToConfig} "LoadAnimation=Off$\r$\n" "$INSTDIR\config.ini"
${WriteToConfig} "EffectSing=Off$\r$\n" "$INSTDIR\config.ini"
${WriteToConfig} "ScreenFade=Off$\r$\n" "$INSTDIR\config.ini"
+${WriteToConfig} "LineBonus=At Notes$\r$\n" "$INSTDIR\config.ini"
+
+${EndIf}
+
+${WriteToConfig} "[Lyrics]$\r$\n" "$INSTDIR\config.ini"
+${WriteToConfig} "LyricsFont=Plain$\r$\n" "$INSTDIR\config.ini"
+${WriteToConfig} "LyricsEffect=Slide$\r$\n" "$INSTDIR\config.ini"
+
+${If} $animations != "Off"
+
+${WriteToConfig} "[Advanced]$\r$\n" "$INSTDIR\config.ini"
+
+${WriteToConfig} "LineBonus=At Notes$\r$\n" "$INSTDIR\config.ini"
+
${EndIf}
@@ -216,8 +238,46 @@ FunctionEnd ; Settings page End ; Pages UnInstallation Routine
; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~
+!define MUI_WELCOMEPAGE_TITLE "$(page_un_welcome_title)"
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
+
+UninstPage custom un.AskDelete un.DeleteAll
+
+Function un.AskDelete
+
+nsDialogs::Create /NOUNLOAD 1018
+
+ ${NSD_CreateCheckbox} 0 -150 100% 8u "$(delete_all)"
+ Pop $CHECKBOX
+
+ nsDialogs::OnClick /NOUNLOAD $CHECKBOX $0
+
+
+nsDialogs::Show
+
+FunctionEnd
+
+Function un.DeleteAll
+
+${NSD_GetState} $CHECKBOX $checkbox_state
+
+${If} $checkbox_state == "1"
+
+ RMDir /r "$INSTDIR\Songs"
+ RMDir /r "$INSTDIR\Covers"
+ Delete "$INSTDIR\Ultrastar.db"
+
+${Else}
+
+; If checkbox_state = 0
+
+
+${EndIf}
+
+
+FunctionEnd
+
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
@@ -307,25 +367,47 @@ SectionEnd SectionGroup $(name_section2) Section2
+Section /o "Bodo Wartke - Liebeslied (Love Song)" g2Section1
+
+ AddSize 10342
+ SetOverwrite try
+ SetOutPath "$INSTDIR\Songs\"
+
+; Download song:
+ NSISdl::download /TIMEOUT=50000 ${download_song1} $TEMP\Song-BodoWartke-LoveSong.zip
+
+ Pop $R0
+ StrCmp $R0 "success" dlok
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
+ dlok:
+ ZipDLL::extractall "$TEMP\Song-BodoWartke-LoveSong.zip" "$INSTDIR\Songs\"
+
+ Delete "$TEMP\Song-BodoWartke-LoveSong.zip"
+
+ SetOutPath "$INSTDIR"
+
+
+SectionEnd
+
;
; Dead Smiling Pirates - I 18
;
-Section /o "Dead Smiling Pirates - I 18" g2Section1
-; AddSize 1400
+Section /o "Dead Smiling Pirates - I 18" g2Section2
+ AddSize 2816
SetOverwrite try
SetOutPath "$INSTDIR"
CreateDirectory "$INSTDIR\Songs\Dead Smiling Pirates - I 18"
SetOutPath "$INSTDIR\Songs\Dead Smiling Pirates - I 18\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_song1} $TEMP\Song-I-18.zip
+ NSISdl::download /TIMEOUT=50000 ${download_song2} $TEMP\Song-I-18.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-I-18.zip" "$INSTDIR\Songs\Dead Smiling Pirates - I 18\"
+ ZipDLL::extractall "$TEMP\Song-I-18.zip" "$INSTDIR\Songs\Dead Smiling Pirates - I 18\"
Delete "$TEMP\Song-I-18.zip"
@@ -341,18 +423,18 @@ SectionGroup $(name_s2_sub1) s2_sub1 Section /o "Monkey Shines" s2_sub1_Section1
-; AddSize 1400
+ AddSize 1455
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song1} $TEMP\Song-JC-MS.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song1} $TEMP\Song-JC-MS.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-MS.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-MS.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-MS.zip"
@@ -362,18 +444,18 @@ SectionEnd Section /o "I Crush Everything" s2_sub1_Section2
-; AddSize 1400
+ AddSize 7127
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song2} $TEMP\Song-JC-ICE.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song2} $TEMP\Song-JC-ICE.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-ICE.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-ICE.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-ICE.zip"
@@ -383,18 +465,18 @@ SectionEnd Section /o "Not About You" s2_sub1_Section3
-; AddSize 1400
+ AddSize 3492
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song3} $TEMP\Song-JC-NAY.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song3} $TEMP\Song-JC-NAY.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-NAY.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-NAY.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-NAY.zip"
@@ -405,18 +487,18 @@ SectionEnd Section /o "Mr. Fancy Pants" s2_sub1_Section4
-; AddSize 1400
+ AddSize 2427
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song4} $TEMP\Song-JC-MFP.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song4} $TEMP\Song-JC-MFP.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-MFP.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-MFP.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-MFP.zip"
@@ -426,18 +508,18 @@ SectionEnd Section /o "Big Bad World One" s2_sub1_Section5
-; AddSize 1400
+ AddSize 4424
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song5} $TEMP\Song-JC-BBWO.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song5} $TEMP\Song-JC-BBWO.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-BBWO.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-BBWO.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-BBWO.zip"
@@ -447,18 +529,18 @@ SectionEnd Section /o "Flickr" s2_sub1_Section6
-; AddSize 1400
+ AddSize 21607
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song6} $TEMP\Song-JC-Flickr.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song6} $TEMP\Song-JC-Flickr.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-Flickr.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-Flickr.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-Flickr.zip"
@@ -468,18 +550,18 @@ SectionEnd Section /o "My Beige Bear" s2_sub1_Section7
-; AddSize 1400
+ AddSize 4926
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song7} $TEMP\Song-JC-MBB.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song7} $TEMP\Song-JC-MBB.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-MBB.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-MBB.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-MBB.zip"
@@ -489,18 +571,18 @@ SectionEnd Section /o "The Future Soon" s2_sub1_Section8
-; AddSize 1400
+ AddSize 5612
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song8} $TEMP\Song-JC-TFS.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song8} $TEMP\Song-JC-TFS.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-TFS.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-TFS.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-TFS.zip"
@@ -510,18 +592,18 @@ SectionEnd Section /o "Ikea" s2_sub1_Section9
-; AddSize 1400
+ AddSize 4608
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song9} $TEMP\Song-JC-Ikea.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song9} $TEMP\Song-JC-Ikea.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-Ikea.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-Ikea.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-Ikea.zip"
@@ -531,18 +613,18 @@ SectionEnd Section /o "Furry Old Lobster" s2_sub1_Section10
-; AddSize 1400
+ AddSize 3288
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song10} $TEMP\Song-JC-FOL.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song10} $TEMP\Song-JC-FOL.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-FOL.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-FOL.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-FOL.zip"
@@ -552,18 +634,18 @@ SectionEnd Section /o "Code Monkey" s2_sub1_Section11
-; AddSize 1400
+ AddSize 21402
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song11} $TEMP\Song-JC-CM.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song11} $TEMP\Song-JC-CM.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-CM.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-CM.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-CM.zip"
@@ -573,18 +655,18 @@ SectionEnd Section /o "I´m Your Moon" s2_sub1_Section12
-; AddSize 1400
+ AddSize 4916
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song12} $TEMP\Song-JC-IYM.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song12} $TEMP\Song-JC-IYM.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-IYM.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-IYM.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-IYM.zip"
@@ -594,18 +676,18 @@ SectionEnd Section /o "First Of May" s2_sub1_Section13
-; AddSize 1400
+ AddSize 6257
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song13} $TEMP\Song-JC-FOM.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song13} $TEMP\Song-JC-FOM.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-FOM.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-FOM.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-FOM.zip"
@@ -615,18 +697,18 @@ SectionEnd Section /o "Dance, Soterious Johnson, Dance" s2_sub1_Section14
-; AddSize 1400
+ AddSize 5929
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song14} $TEMP\Song-JC-DSJD.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song14} $TEMP\Song-JC-DSJD.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-DSJD.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-DSJD.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-DSJD.zip"
@@ -634,22 +716,22 @@ Section /o "Dance, Soterious Johnson, Dance" s2_sub1_Section14 SectionEnd
-Section /o "A Walk With George" s2_sub1_Section15
+Section /o "A Talk With George" s2_sub1_Section15
-; AddSize 1400
+ AddSize 4076
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song15} $TEMP\Song-JC-AWWG.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song15} $TEMP\Song-JC-ATWG.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-AWWG.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-ATWG.zip" "$INSTDIR\Songs\"
- Delete "$TEMP\Song-JC-AWWG.zip"
+ Delete "$TEMP\Song-JC-ATWG.zip"
SetOutPath "$INSTDIR"
@@ -657,18 +739,18 @@ SectionEnd Section /o "Creepy Doll" s2_sub1_Section16
-; AddSize 1400
+ AddSize 66560
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song16} $TEMP\Song-JC-CD.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song16} $TEMP\Song-JC-CD.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-CD.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-CD.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-CD.zip"
@@ -678,18 +760,18 @@ SectionEnd Section /o "That Spells DNA" s2_sub1_Section17
-; AddSize 1400
+ AddSize 4158
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song17} $TEMP\Song-JC-TSDNA.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song17} $TEMP\Song-JC-TSDNA.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-TSDNA.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-TSDNA.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-TSDNA.zip"
@@ -699,18 +781,18 @@ SectionEnd Section /o "When You Go" s2_sub1_Section18
-; AddSize 1400
+ AddSize 5755
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song18} $TEMP\Song-JC-WYG.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song18} $TEMP\Song-JC-WYG.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-WYG.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-WYG.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-WYG.zip"
@@ -720,18 +802,18 @@ SectionEnd Section /o "Better" s2_sub1_Section19
-; AddSize 1400
+ AddSize 4199
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song19} $TEMP\Song-JC-Better.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song19} $TEMP\Song-JC-Better.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-Better.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-Better.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-Better.zip"
@@ -741,18 +823,18 @@ SectionEnd Section /o "Shop Vac" s2_sub1_Section20
-; AddSize 1400
+ AddSize 5448
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song20} $TEMP\Song-JC-SV.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song20} $TEMP\Song-JC-SV.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-SV.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-SV.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-SV.zip"
@@ -762,18 +844,18 @@ SectionEnd Section /o "I Feel Fantastic" s2_sub1_Section21
-; AddSize 1400
+ AddSize 3851
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song21} $TEMP\Song-JC-IFF.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song21} $TEMP\Song-JC-IFF.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-IFF.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-IFF.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-IFF.zip"
@@ -783,18 +865,18 @@ SectionEnd Section /o "Re: Your Brains" s2_sub1_Section22
-; AddSize 1400
+ AddSize 7087
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song22} $TEMP\Song-JC-ReYB.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song22} $TEMP\Song-JC-ReYB.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-ReYB.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-ReYB.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-ReYB.zip"
@@ -804,18 +886,18 @@ SectionEnd Section /o "Skullcrusher Mountain" s2_sub1_Section23
-; AddSize 1400
+ AddSize 6298
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song23} $TEMP\Song-JC-SCM.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song23} $TEMP\Song-JC-SCM.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-SCM.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-SCM.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-SCM.zip"
@@ -825,18 +907,18 @@ SectionEnd Section /o "Chiron Beta Prime" s2_sub1_Section24
-; AddSize 1400
+ AddSize 38298
SetOverwrite try
SetOutPath "$INSTDIR\Songs\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_sub1_song24} $TEMP\Song-JC-CBP.zip
+ NSISdl::download /TIMEOUT=50000 ${download_sub1_song24} $TEMP\Song-JC-CBP.zip
Pop $R0
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-JC-CBP.zip" "$INSTDIR\Songs\"
+ ZipDLL::extractall "$TEMP\Song-JC-CBP.zip" "$INSTDIR\Songs\"
Delete "$TEMP\Song-JC-CBP.zip"
@@ -851,21 +933,21 @@ SectionGroupEnd ; Joshua Morin - On The Run
;
-Section /o "Joshua Morin - On The Run" g2Section2
-; AddSize 2200
+Section /o "Joshua Morin - On The Run" g2Section3
+ AddSize 3881
SetOverwrite try
SetOutPath "$INSTDIR"
CreateDirectory "$INSTDIR\Songs\Joshua Morin - On The Run"
SetOutPath "$INSTDIR\Songs\Joshua Morin - On The Run\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_song3} $TEMP\Song-On-the-run.zip
+ NSISdl::download /TIMEOUT=50000 ${download_song3} $TEMP\Song-On-the-run.zip
Pop $R0 ;Get the return value
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-On-the-run.zip" "$INSTDIR\Songs\Joshua Morin - On The Run\"
+ ZipDLL::extractall "$TEMP\Song-On-the-run.zip" "$INSTDIR\Songs\Joshua Morin - On The Run\"
Delete "$TEMP\Song-On-the-run.zip"
@@ -873,21 +955,21 @@ Section /o "Joshua Morin - On The Run" g2Section2 SectionEnd
-Section /o "Pornophonique - Space Invaders" g2Section3
-; AddSize 2200
+Section /o "Pornophonique - Space Invaders" g2Section4
+ AddSize 3646
SetOverwrite try
SetOutPath "$INSTDIR"
CreateDirectory "$INSTDIR\Songs\Pornophonique - Space Invaders"
SetOutPath "$INSTDIR\Songs\Pornophonique - Space Invaders\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_song3} $TEMP\Song-Space-Invaders.zip
+ NSISdl::download /TIMEOUT=50000 ${download_song4} $TEMP\Song-Space-Invaders.zip
Pop $R0 ;Get the return value
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-Space-Invaders.zip" "$INSTDIR\Songs\Pornophonique - Space Invaders\"
+ ZipDLL::extractall "$TEMP\Song-Space-Invaders.zip" "$INSTDIR\Songs\Pornophonique - Space Invaders\"
Delete "$TEMP\Song-Space-Invaders.zip"
@@ -895,21 +977,216 @@ Section /o "Pornophonique - Space Invaders" g2Section3 SectionEnd
-Section /o "Steven Dunston - Northern Star" g2Section4
-; AddSize 1500
+SectionGroup $(name_s2_sub2) s2_sub2
+
+Section /o "Shearer - 69" s2_sub2_Section1
+
+ AddSize 4557
+ SetOverwrite try
+ SetOutPath "$INSTDIR\Songs\"
+
+; Download song:
+ NSISdl::download /TIMEOUT=50000 ${download_sub2_song1} $TEMP\Song-Shearer-69.zip
+
+ Pop $R0
+ StrCmp $R0 "success" dlok
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
+ dlok:
+ ZipDLL::extractall "$TEMP\Song-Shearer-69.zip" "$INSTDIR\Songs\"
+
+ Delete "$TEMP\Song-Shearer-69.zip"
+
+ SetOutPath "$INSTDIR"
+
+SectionEnd
+
+Section /o "Shearer - 69 (Karaoke)" s2_sub2_Section2
+
+ AddSize 4772
+ SetOverwrite try
+ SetOutPath "$INSTDIR\Songs\"
+
+; Download song:
+ NSISdl::download /TIMEOUT=50000 ${download_sub2_song2} $TEMP\Song-Shearer-69-Kar.zip
+
+ Pop $R0
+ StrCmp $R0 "success" dlok
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
+ dlok:
+ ZipDLL::extractall "$TEMP\Song-Shearer-69-Kar.zip" "$INSTDIR\Songs\"
+
+ Delete "$TEMP\Song-Shearer-69-Kar.zip"
+
+ SetOutPath "$INSTDIR"
+
+SectionEnd
+
+Section /o "Shearer - Can't stop it" s2_sub2_Section3
+
+ AddSize 5510
+ SetOverwrite try
+ SetOutPath "$INSTDIR\Songs\"
+
+; Download song:
+ NSISdl::download /TIMEOUT=50000 ${download_sub2_song3} $TEMP\Song-Shearer-CSI.zip
+
+ Pop $R0
+ StrCmp $R0 "success" dlok
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
+ dlok:
+ ZipDLL::extractall "$TEMP\Song-Shearer-CSI.zip" "$INSTDIR\Songs\"
+
+ Delete "$TEMP\Song-Shearer-CSI.zip"
+
+ SetOutPath "$INSTDIR"
+
+SectionEnd
+
+Section /o "Shearer - Can't stop it (Karaoke)" s2_sub2_Section4
+
+ AddSize 4178
+ SetOverwrite try
+ SetOutPath "$INSTDIR\Songs\"
+
+; Download song:
+ NSISdl::download /TIMEOUT=50000 ${download_sub2_song4} $TEMP\Song-Shearer-CSI-Kar.zip
+
+ Pop $R0
+ StrCmp $R0 "success" dlok
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
+ dlok:
+ ZipDLL::extractall "$TEMP\Song-Shearer-CSI-Kar.zip" "$INSTDIR\Songs\"
+
+ Delete "$TEMP\Song-Shearer-CSI-Kar.zip"
+
+ SetOutPath "$INSTDIR"
+
+SectionEnd
+
+Section /o "Shearer - In My Hand" s2_sub2_Section5
+
+ AddSize 5960
+ SetOverwrite try
+ SetOutPath "$INSTDIR\Songs\"
+
+; Download song:
+ NSISdl::download /TIMEOUT=50000 ${download_sub2_song5} $TEMP\Song-Shearer-IMH.zip
+
+ Pop $R0
+ StrCmp $R0 "success" dlok
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
+ dlok:
+ ZipDLL::extractall "$TEMP\Song-Shearer-IMH.zip" "$INSTDIR\Songs\"
+
+ Delete "$TEMP\Song-Shearer-IMH.zip"
+
+ SetOutPath "$INSTDIR"
+
+SectionEnd
+
+Section /o "Shearer - Man Song" s2_sub2_Section6
+
+ AddSize 7270
+ SetOverwrite try
+ SetOutPath "$INSTDIR\Songs\"
+
+; Download song:
+ NSISdl::download /TIMEOUT=50000 ${download_sub2_song6} $TEMP\Song-Shearer-MS.zip
+
+ Pop $R0
+ StrCmp $R0 "success" dlok
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
+ dlok:
+ ZipDLL::extractall "$TEMP\Song-Shearer-MS.zip" "$INSTDIR\Songs\"
+
+ Delete "$TEMP\Song-Shearer-MS.zip"
+
+ SetOutPath "$INSTDIR"
+
+SectionEnd
+
+Section /o "Shearer - Man Song (Karaoke)" s2_sub2_Section7
+
+ AddSize 5807
+ SetOverwrite try
+ SetOutPath "$INSTDIR\Songs\"
+
+; Download song:
+ NSISdl::download /TIMEOUT=50000 ${download_sub2_song7} $TEMP\Song-Shearer-MS-Kar.zip
+
+ Pop $R0
+ StrCmp $R0 "success" dlok
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
+ dlok:
+ ZipDLL::extractall "$TEMP\Song-Shearer-MS-Kar.zip" "$INSTDIR\Songs\"
+
+ Delete "$TEMP\Song-Shearer-MS-Kar.zip"
+
+ SetOutPath "$INSTDIR"
+
+SectionEnd
+
+Section /o "Shearer - Stay With Me" s2_sub2_Section8
+
+ AddSize 6400
+ SetOverwrite try
+ SetOutPath "$INSTDIR\Songs\"
+
+; Download song:
+ NSISdl::download /TIMEOUT=50000 ${download_sub2_song8} $TEMP\Song-Shearer-SWM.zip
+
+ Pop $R0
+ StrCmp $R0 "success" dlok
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
+ dlok:
+ ZipDLL::extractall "$TEMP\Song-Shearer-SWM.zip" "$INSTDIR\Songs\"
+
+ Delete "$TEMP\Song-Shearer-SWM.zip"
+
+ SetOutPath "$INSTDIR"
+
+SectionEnd
+
+Section /o "Shearer - Stay With Me (Karaoke)" s2_sub2_Section9
+
+ AddSize 5417
+ SetOverwrite try
+ SetOutPath "$INSTDIR\Songs\"
+
+; Download song:
+ NSISdl::download /TIMEOUT=50000 ${download_sub2_song9} $TEMP\Song-Shearer-SWM-Kar.zip
+
+ Pop $R0
+ StrCmp $R0 "success" dlok
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
+ dlok:
+
+ ZipDLL::extractall "$TEMP\Song-Shearer-SWM-Kar.zip" "$INSTDIR\Songs\"
+
+ Delete "$TEMP\Song-Shearer-SWM-Kar.zip"
+
+ SetOutPath "$INSTDIR"
+
+SectionEnd
+
+SectionGroupEnd
+
+Section /o "Steven Dunston - Northern Star" g2Section5
+ AddSize 2427
SetOverwrite try
SetOutPath "$INSTDIR"
CreateDirectory "$INSTDIR\Songs\Steven Dunston - Northern Star"
SetOutPath "$INSTDIR\Songs\Steven Dunston - Northern Star\"
; Download song:
- NSISdl::download /TIMEOUT=30000 ${download_song2} $TEMP\Song-Northern-Star.zip
+ NSISdl::download /TIMEOUT=50000 ${download_song5} $TEMP\Song-Northern-Star.zip
Pop $R0 ;Get the return value
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Song-Northern-Star.zip" "$INSTDIR\Songs\Steven Dunston - Northern Star\"
+
+ ZipDLL::extractall "$TEMP\Song-Northern-Star.zip" "$INSTDIR\Songs\Steven Dunston - Northern Star\"
Delete "$TEMP\Song-Northern-Star.zip"
@@ -917,6 +1194,54 @@ Section /o "Steven Dunston - Northern Star" g2Section4 SectionEnd
+SectionGroup $(name_s2_sub3) s2_sub3
+
+Section /o "Wise Guys - Lebendig und kräftig und schärfer" s2_sub3_Section1
+
+ AddSize 4015
+ SetOverwrite try
+ SetOutPath "$INSTDIR\Songs\"
+
+; Download song:
+ NSISdl::download /TIMEOUT=50000 ${download_sub3_song1} $TEMP\Song-WiseGuys-LUKUS.zip
+
+ Pop $R0
+ StrCmp $R0 "success" dlok
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
+ dlok:
+
+ ZipDLL::extractall "$TEMP\Song-WiseGuys-LUKUS.zip" "$INSTDIR\Songs\"
+
+ Delete "$TEMP\Song-WiseGuys-LUKUS.zip"
+
+ SetOutPath "$INSTDIR"
+
+SectionEnd
+
+Section /o "Wise Guys - Mensch, wo bist du?" s2_sub3_Section2
+
+ AddSize 5335
+ SetOverwrite try
+ SetOutPath "$INSTDIR\Songs\"
+
+; Download song:
+ NSISdl::download /TIMEOUT=50000 ${download_sub3_song2} $TEMP\Song-WiseGuys-MWBD.zip
+
+ Pop $R0
+ StrCmp $R0 "success" dlok
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
+ dlok:
+
+ ZipDLL::extractall "$TEMP\Song-WiseGuys-MWBD.zip" "$INSTDIR\Songs\"
+
+ Delete "$TEMP\Song-WiseGuys-MWBD.zip"
+
+ SetOutPath "$INSTDIR"
+
+SectionEnd
+
+SectionGroupEnd
+
SectionGroupEnd
;------------------------------------
@@ -926,16 +1251,16 @@ SectionGroupEnd SectionGroup $(name_section3) Section3
Section /o "Orange" g3Section1
-; AddSize 700
+ AddSize 1291
; Download theme orange:
- NSISdl::download /TIMEOUT=30000 ${download_theme1} $TEMP\Theme-Orange.zip
+ NSISdl::download /TIMEOUT=50000 ${download_theme1} $TEMP\Theme-Orange.zip
Pop $R0 ;Get the return value
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Theme-Orange.zip" "$INSTDIR\"
+ ZipDLL::extractall "$TEMP\Theme-Orange.zip" "$INSTDIR\"
Delete "$TEMP\Theme-Orange.zip"
@@ -944,16 +1269,16 @@ SectionGroup $(name_section3) Section3 SectionEnd
Section /o "Streetlight" g3Section2
-; AddSize 1000
+ AddSize 1905
; Download theme Streetlight:
- NSISdl::download /TIMEOUT=30000 ${download_theme2} $TEMP\Theme-Streetlight.zip
+ NSISdl::download /TIMEOUT=50000 ${download_theme2} $TEMP\Theme-Streetlight.zip
Pop $R0 ;Get the return value
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Theme-Streetlight.zip" "$INSTDIR\"
+ ZipDLL::extractall "$TEMP\Theme-Streetlight.zip" "$INSTDIR\"
Delete "$TEMP\Theme-Streetlight.zip"
@@ -962,17 +1287,17 @@ SectionEnd SectionEnd
Section /o "Vistar" g3Section3
-; AddSize 1000
+ AddSize 1936
; Download theme Vistar:
- NSISdl::download /TIMEOUT=30000 ${download_theme3} $TEMP\Theme-Vistar.zip
+ NSISdl::download /TIMEOUT=50000 ${download_theme3} $TEMP\Theme-Vistar.zip
Pop $R0 ;Get the return value
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Theme-Vistar.zip" "$INSTDIR\"
+ ZipDLL::extractall "$TEMP\Theme-Vistar.zip" "$INSTDIR\"
Delete "$TEMP\Theme-Vistar.zip"
@@ -981,17 +1306,17 @@ SectionEnd SectionEnd
Section /o "BlueSensation" g3Section4
-; AddSize 1000
+ AddSize 2109
; Download theme BlueSensation:
- NSISdl::download /TIMEOUT=30000 ${download_theme4} $TEMP\Theme-BlueSensation.zip
+ NSISdl::download /TIMEOUT=50000 ${download_theme4} $TEMP\Theme-BlueSensation.zip
Pop $R0 ;Get the return value
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Theme-BlueSensation.zip" "$INSTDIR\"
+ ZipDLL::extractall "$TEMP\Theme-BlueSensation.zip" "$INSTDIR\"
Delete "$TEMP\Theme-BlueSensation.zip"
@@ -999,18 +1324,38 @@ SectionEnd SectionEnd
- Section /o "WiiStar" g3Section5
-; AddSize 1000
+
+ Section /o "WhiteSensation" g3Section5
+ AddSize 1168
+
+; Download theme WhiteSensation:
+
+ NSISdl::download /TIMEOUT=50000 ${download_theme7} $TEMP\Theme-WhiteSensation.zip
+
+ Pop $R0 ;Get the return value
+ StrCmp $R0 "success" dlok
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
+ dlok:
+ ZipDLL::extractall "$TEMP\Theme-WhiteSensation.zip" "$INSTDIR\"
+
+ Delete "$TEMP\Theme-WhiteSensation.zip"
+
+ SetOutPath "$INSTDIR"
+
+SectionEnd
+
+ Section /o "WiiStar" g3Section6
+ AddSize 850
; Download theme WiiStar:
- NSISdl::download /TIMEOUT=30000 ${download_theme5} $TEMP\Theme-WiiStar.zip
+ NSISdl::download /TIMEOUT=50000 ${download_theme5} $TEMP\Theme-WiiStar.zip
Pop $R0 ;Get the return value
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Theme-WiiStar.zip" "$INSTDIR\"
+ ZipDLL::extractall "$TEMP\Theme-WiiStar.zip" "$INSTDIR\"
Delete "$TEMP\Theme-WiiStar.zip"
@@ -1018,18 +1363,18 @@ SectionEnd SectionEnd
- Section /o "iStar" g3Section6
-; AddSize 1000
+ Section /o "iStar" g3Section7
+ AddSize 1588
; Download theme iStar:
- NSISdl::download /TIMEOUT=30000 ${download_theme6} $TEMP\Theme-iStar.zip
+ NSISdl::download /TIMEOUT=50000 ${download_theme6} $TEMP\Theme-iStar.zip
Pop $R0 ;Get the return value
StrCmp $R0 "success" dlok
MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK
dlok:
- nsisunz::Unzip "$TEMP\Theme-iStar.zip" "$INSTDIR\"
+ ZipDLL::extractall "$TEMP\Theme-iStar.zip" "$INSTDIR\"
Delete "$TEMP\Theme-iStar.zip"
@@ -1073,12 +1418,15 @@ SectionEnd !insertmacro MUI_DESCRIPTION_TEXT ${Section1} $(DESC_Section1)
!insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
!insertmacro MUI_DESCRIPTION_TEXT ${s2_sub1} $(DESC_Section2_sub1)
+ !insertmacro MUI_DESCRIPTION_TEXT ${s2_sub2} $(DESC_Section2_sub2)
+ !insertmacro MUI_DESCRIPTION_TEXT ${s2_sub3} $(DESC_Section2_sub3)
!insertmacro MUI_DESCRIPTION_TEXT ${Section3} $(DESC_Section3)
!insertmacro MUI_DESCRIPTION_TEXT ${g2Section1} $(DESC_g2Section1)
!insertmacro MUI_DESCRIPTION_TEXT ${g2Section2} $(DESC_g2Section2)
!insertmacro MUI_DESCRIPTION_TEXT ${g2Section3} $(DESC_g2Section3)
!insertmacro MUI_DESCRIPTION_TEXT ${g2Section4} $(DESC_g2Section4)
+ !insertmacro MUI_DESCRIPTION_TEXT ${g2Section5} $(DESC_g2Section5)
!insertmacro MUI_DESCRIPTION_TEXT ${s2_sub1_Section1} $(DESC_s2_sub1_Section1)
!insertmacro MUI_DESCRIPTION_TEXT ${s2_sub1_Section2} $(DESC_s2_sub1_Section2)
@@ -1105,12 +1453,26 @@ SectionEnd !insertmacro MUI_DESCRIPTION_TEXT ${s2_sub1_Section23} $(DESC_s2_sub1_Section23)
!insertmacro MUI_DESCRIPTION_TEXT ${s2_sub1_Section24} $(DESC_s2_sub1_Section24)
+ !insertmacro MUI_DESCRIPTION_TEXT ${s2_sub2_Section1} $(DESC_s2_sub2_Section1)
+ !insertmacro MUI_DESCRIPTION_TEXT ${s2_sub2_Section2} $(DESC_s2_sub2_Section2)
+ !insertmacro MUI_DESCRIPTION_TEXT ${s2_sub2_Section3} $(DESC_s2_sub2_Section3)
+ !insertmacro MUI_DESCRIPTION_TEXT ${s2_sub2_Section4} $(DESC_s2_sub2_Section4)
+ !insertmacro MUI_DESCRIPTION_TEXT ${s2_sub2_Section5} $(DESC_s2_sub2_Section5)
+ !insertmacro MUI_DESCRIPTION_TEXT ${s2_sub2_Section6} $(DESC_s2_sub2_Section6)
+ !insertmacro MUI_DESCRIPTION_TEXT ${s2_sub2_Section7} $(DESC_s2_sub2_Section7)
+ !insertmacro MUI_DESCRIPTION_TEXT ${s2_sub2_Section8} $(DESC_s2_sub2_Section8)
+ !insertmacro MUI_DESCRIPTION_TEXT ${s2_sub2_Section9} $(DESC_s2_sub2_Section9)
+
+ !insertmacro MUI_DESCRIPTION_TEXT ${s2_sub3_Section1} $(DESC_s2_sub3_Section1)
+ !insertmacro MUI_DESCRIPTION_TEXT ${s2_sub3_Section2} $(DESC_s2_sub3_Section2)
+
!insertmacro MUI_DESCRIPTION_TEXT ${g3Section1} $(DESC_g3Section1)
!insertmacro MUI_DESCRIPTION_TEXT ${g3Section2} $(DESC_g3Section2)
!insertmacro MUI_DESCRIPTION_TEXT ${g3Section3} $(DESC_g3Section3)
!insertmacro MUI_DESCRIPTION_TEXT ${g3Section4} $(DESC_g3Section4)
!insertmacro MUI_DESCRIPTION_TEXT ${g3Section5} $(DESC_g3Section5)
!insertmacro MUI_DESCRIPTION_TEXT ${g3Section6} $(DESC_g3Section6)
+ !insertmacro MUI_DESCRIPTION_TEXT ${g3Section7} $(DESC_g3Section7)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
diff --git a/unicode/installer/Update.nsi b/unicode/installer/Update.nsi index b8e5a458..e916d3e9 100644 --- a/unicode/installer/Update.nsi +++ b/unicode/installer/Update.nsi @@ -46,9 +46,9 @@ OutFile "ultrastardx-update.exe" InstallDir "$PROGRAMFILES\${name}"
-; Windows Vista:
+; Windows Vista / Windows 7:
-RequestExecutionLevel user
+RequestExecutionLevel admin
; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~
; Interface Settings
diff --git a/unicode/installer/languages/English.nsh b/unicode/installer/languages/English.nsh index e5d8dccf..63901b87 100644 --- a/unicode/installer/languages/English.nsh +++ b/unicode/installer/languages/English.nsh @@ -15,6 +15,8 @@ LangString button_next ${LANG_ENGLISH} "Next >" LangString button_close ${LANG_ENGLISH} "Close"
LangString update_information ${LANG_ENGLISH} "You can check if a new version of 'UltraStar Deluxe' is available. Thereto an internet connection will be established. If a new version is found, it can be installed afterwards."
+LangString delete_all ${LANG_ENGLISH} "Also delete Songs, Highscores and Covers ?"
+
LangString update_check_older ${LANG_ENGLISH} "Your version $R0 is outdated. The new version $1 of UltraStar Deluxe is available. Do you want to update?"
LangString update_check_equal ${LANG_ENGLISH} "Your currently installed version $R0 is up-to-date. No update needed."
LangString update_check_newer ${LANG_ENGLISH} "Your installed version $R0 is newer than the $\n$\rcurrent release version $1 of UltraStar Deluxe. No update needed."
@@ -28,6 +30,8 @@ LangString page_welcome_txt_update ${LANG_ENGLISH} "This wizard will guide you t LangString page_welcome_title ${LANG_ENGLISH} "Welcome to the UltraStar Deluxe Setup Wizard"
LangString page_welcome_txt ${LANG_ENGLISH} "This wizard will guide you through the Installation of UltraStar Deluxe. UltraStar Deluxe is a free open source Karaoke game, which can be compared with Singstar.$\n$\r$\n$\rThe UltraStar Deluxe Team wishes you fun.$\n$\rProject website: http://www.ultrastardeluxe.org$\n$\rSupport Forum: http://forum.ultrastardeluxe.org"
+LangString page_un_welcome_title ${LANG_ENGLISH} "Welcome to the UltraStar Deluxe uninstall wizard"
+
; Components Page:
LangString page_components_info ${LANG_ENGLISH} "Hover the component to get details"
@@ -58,36 +62,41 @@ LangString sc_desktop ${LANG_ENGLISH} "Create Desktop Shortcut?" ; Sections and SectionGroups
LangString name_section1 ${LANG_ENGLISH} "Main components"
-LangString name_section2 ${LANG_ENGLISH} "Optional songs"
+LangString name_section2 ${LANG_ENGLISH} "Songs"
LangString name_s2_sub1 ${LANG_ENGLISH} "Jonathan Coulton"
-LangString name_section3 ${LANG_ENGLISH} "Optional themes"
+LangString name_s2_sub2 ${LANG_ENGLISH} "Shearer"
+LangString name_s2_sub3 ${LANG_ENGLISH} "Wise Guys"
+LangString name_section3 ${LANG_ENGLISH} "Themes"
LangString DESC_Section1 ${LANG_ENGLISH} "These are the basic files needed by UltraStar Deluxe"
LangString DESC_Section2 ${LANG_ENGLISH} "You can choose which songs should be installed."
-LangString DESC_Section2_sub1 ${LANG_ENGLISH} "You can choose which Jonathan Coulton Songs (CC by-nc 3.0) should be installed."
+LangString DESC_Section2_sub1 ${LANG_ENGLISH} "You can choose which Jonathan Coulton songs (CC by-nc 3.0) should be installed."
+LangString DESC_Section2_sub2 ${LANG_ENGLISH} "You can choose which Shearer songs (CC by-nc-sa 2.0 / 3.0) should be installed."
+LangString DESC_Section2_sub3 ${LANG_ENGLISH} "You can choose which Wise Guys songs should be installed."
LangString DESC_Section3 ${LANG_ENGLISH} "You can choose which optional themes should be installed."
-LangString DESC_g2Section1 ${LANG_ENGLISH} "This will install the song 'Dead Smiling Pirates - I 18' (CC by-nc-nd 2.5)."
-LangString DESC_g2Section2 ${LANG_ENGLISH} "This will install the song 'Joshua Morin - On The Run' (CC by-sa 2.5)."
-LangString DESC_g2Section3 ${LANG_ENGLISH} "This will install the song 'Pornophonique - Space Invaders' (CC by-nc-nd 2.0)."
-LangString DESC_g2Section4 ${LANG_ENGLISH} "This will install the song 'Steven Dunston - Northern Star' (CC by-nc-sa 2.5)."
+LangString DESC_g2Section2 ${LANG_ENGLISH} "This will install the song 'Dead Smiling Pirates - I 18' (CC by-nc-nd 2.5)."
+LangString DESC_g2Section3 ${LANG_ENGLISH} "This will install the song 'Joshua Morin - On The Run' (CC by-sa 2.5)."
+LangString DESC_g2Section4 ${LANG_ENGLISH} "This will install the song 'Pornophonique - Space Invaders' (CC by-nc-nd 2.0)."
+LangString DESC_g2Section5 ${LANG_ENGLISH} "This will install the song 'Steven Dunston - Northern Star' (CC by-nc-sa 2.5)."
+LangString DESC_g2Section1 ${LANG_ENGLISH} "This will install the song 'Bodo Wartke - Liebeslied (Love Song)'."
LangString DESC_s2_sub1_Section1 ${LANG_ENGLISH} "This will install the song 'Monkey Shines'."
LangString DESC_s2_sub1_Section2 ${LANG_ENGLISH} "This will install the song 'I Crush Everything'."
LangString DESC_s2_sub1_Section3 ${LANG_ENGLISH} "This will install the song 'Not About You'."
LangString DESC_s2_sub1_Section4 ${LANG_ENGLISH} "This will install the song 'Mr. Fancy Pants'."
LangString DESC_s2_sub1_Section5 ${LANG_ENGLISH} "This will install the song 'Big Bad World One'."
-LangString DESC_s2_sub1_Section6 ${LANG_ENGLISH} "This will install the song 'Flickr'."
+LangString DESC_s2_sub1_Section6 ${LANG_ENGLISH} "This will install the song 'Flickr [incl. video]'."
LangString DESC_s2_sub1_Section7 ${LANG_ENGLISH} "This will install the song 'My Beige Bear'."
LangString DESC_s2_sub1_Section8 ${LANG_ENGLISH} "This will install the song 'The Future Soon'."
LangString DESC_s2_sub1_Section9 ${LANG_ENGLISH} "This will install the song 'Ikea'."
LangString DESC_s2_sub1_Section10 ${LANG_ENGLISH} "This will install the song 'Furry Old Lobster'."
-LangString DESC_s2_sub1_Section11 ${LANG_ENGLISH} "This will install the song 'Code Monkey'."
+LangString DESC_s2_sub1_Section11 ${LANG_ENGLISH} "This will install the song 'Code Monkey [incl. video]'."
LangString DESC_s2_sub1_Section12 ${LANG_ENGLISH} "This will install the song 'I´m Your Moon'."
LangString DESC_s2_sub1_Section13 ${LANG_ENGLISH} "This will install the song 'First Of May'."
LangString DESC_s2_sub1_Section14 ${LANG_ENGLISH} "This will install the song 'Dance, Soterios Johnson, Dance'."
LangString DESC_s2_sub1_Section15 ${LANG_ENGLISH} "This will install the song 'A Talk With George'."
-LangString DESC_s2_sub1_Section16 ${LANG_ENGLISH} "This will install the song 'Creepy Doll'."
+LangString DESC_s2_sub1_Section16 ${LANG_ENGLISH} "This will install the song 'Creepy Doll [incl. video]'."
LangString DESC_s2_sub1_Section17 ${LANG_ENGLISH} "This will install the song 'That Spells DNA'."
LangString DESC_s2_sub1_Section18 ${LANG_ENGLISH} "This will install the song 'When You Go'."
LangString DESC_s2_sub1_Section19 ${LANG_ENGLISH} "This will install the song 'Better'."
@@ -95,13 +104,25 @@ LangString DESC_s2_sub1_Section20 ${LANG_ENGLISH} "This will install the song 'S LangString DESC_s2_sub1_Section21 ${LANG_ENGLISH} "This will install the song 'I Feel Fantastic'."
LangString DESC_s2_sub1_Section22 ${LANG_ENGLISH} "This will install the song 'Re: Your Brains'."
LangString DESC_s2_sub1_Section23 ${LANG_ENGLISH} "This will install the song 'Skullcrusher Mountain'."
-LangString DESC_s2_sub1_Section24 ${LANG_ENGLISH} "This will install the song 'Chiron Beta Prime'."
+LangString DESC_s2_sub1_Section24 ${LANG_ENGLISH} "This will install the song 'Chiron Beta Prime [incl. video]'."
+
+LangString DESC_s2_sub2_Section1 ${LANG_ENGLISH} "This will install the song '69'."
+LangString DESC_s2_sub2_Section2 ${LANG_ENGLISH} "This will install the song '69 (Karaoke)'."
+LangString DESC_s2_sub2_Section3 ${LANG_ENGLISH} "This will install the song 'Can't stop it'."
+LangString DESC_s2_sub2_Section4 ${LANG_ENGLISH} "This will install the song 'Can't stop it (Karaoke)'."
+LangString DESC_s2_sub2_Section5 ${LANG_ENGLISH} "This will install the song 'In My Hand'."
+LangString DESC_s2_sub2_Section6 ${LANG_ENGLISH} "This will install the song 'Man Song'."
+LangString DESC_s2_sub2_Section7 ${LANG_ENGLISH} "This will install the song 'Man Song (Karaoke)'."
+LangString DESC_s2_sub2_Section8 ${LANG_ENGLISH} "This will install the song 'Stay with me'."
+LangString DESC_s2_sub2_Section9 ${LANG_ENGLISH} "This will install the song 'Stay with me (Karaoke)'."
+
+LangString DESC_s2_sub3_Section1 ${LANG_ENGLISH} "This will install the song 'Lebendig und kräftig und schärfer'."
+LangString DESC_s2_sub3_Section2 ${LANG_ENGLISH} "This will install the song 'Mensch, wo bist du?'."
LangString DESC_g3Section1 ${LANG_ENGLISH} "This will install the optional theme 'Orange' by Skar"
LangString DESC_g3Section2 ${LANG_ENGLISH} "This will install the optional theme 'Streetlight' by Skar"
LangString DESC_g3Section3 ${LANG_ENGLISH} "This will install the optional theme 'Vistar' by Skar"
-LangString DESC_g3Section4 ${LANG_ENGLISH} "This will install the optional theme 'BlueSensation v5' by Charis"
-LangString DESC_g3Section5 ${LANG_ENGLISH} "This will install the optional theme 'WiiStar' by MasterPhW"
-LangString DESC_g3Section6 ${LANG_ENGLISH} "This will install the optional theme 'iStar' by MezzoX"
-
-
+LangString DESC_g3Section4 ${LANG_ENGLISH} "This will install the optional theme 'BlueSensation v5.1' by Charis"
+LangString DESC_g3Section6 ${LANG_ENGLISH} "This will install the optional theme 'WiiStar' by MasterPhW"
+LangString DESC_g3Section7 ${LANG_ENGLISH} "This will install the optional theme 'iStar' by MezzoX"
+LangString DESC_g3Section5 ${LANG_ENGLISH} "This will install the optional theme 'WhiteSensation' by Charis"
\ No newline at end of file diff --git a/unicode/installer/languages/German.nsh b/unicode/installer/languages/German.nsh index 642257ee..7f438e9d 100644 --- a/unicode/installer/languages/German.nsh +++ b/unicode/installer/languages/German.nsh @@ -15,6 +15,8 @@ LangString button_next ${LANG_GERMAN} "Weiter >" LangString button_close ${LANG_GERMAN} "Beenden"
LangString update_information ${LANG_GERMAN} "Du kannst nach einer aktuelleren Version von 'UltraStar Deluxe' suchen. Dazu wird eine Verbindung mit dem Internet hergestellt. Wurde eine aktuellere Version gefunden, kann diese anschließend installiert werden."
+LangString delete_all ${LANG_GERMAN} "Lieder, Highscores und Cover auch löschen?"
+
LangString update_check_older ${LANG_GERMAN} "Deine aktuelle Version $R0 ist veraltet. Die neue Version $1 von UltraStar Deluxe ist verfügbar. Möchtest du sie runterladen?"
LangString update_check_equal ${LANG_GERMAN} "Deine aktuelle Version $R0 ist auf dem neusten Stand.$\n$\rKein Update benötigt."
LangString update_check_newer ${LANG_GERMAN} "Deine aktuelle Version $R0 ist neuer als die zurzeit veröffentlichte$\n$\rVersion $1 von UltraStar Deluxe. Kein Update benötigt."
@@ -28,6 +30,8 @@ LangString page_welcome_txt_update ${LANG_GERMAN} "Dieser Assistent wird Sie dur LangString page_welcome_title ${LANG_GERMAN} "Willkommen zur Installationsroutine von UltraStar Deluxe"
LangString page_welcome_txt ${LANG_GERMAN} "Dieser Assistent wird Sie durch die Installation von UltraStar Deluxe begleiten. UltraStar Deluxe ist ein kostenloses quelloffenes Karaokespiel, welches Singstar ähnelt. $\n$\r$\n$\rDas UltraStar Deluxe Team wünscht viel Spaß.$\n$\rProjekthomepage: http://www.ultrastardeluxe.org$\n$\rSupport Forum: http://forum.ultrastardeluxe.org"
+LangString page_un_welcome_title ${LANG_GERMAN} "Willkommen zur Deinstallation von UltraStar Deluxe"
+
; Components Page:
LangString page_components_info ${LANG_GERMAN} "Schieben Sie den Mauszeiger über die Komponente um Details einzusehen"
@@ -58,49 +62,67 @@ LangString sc_desktop ${LANG_GERMAN} "Verknüpfung auf dem Desktop erstellen?" ; Sections and SectionGroups
LangString name_section1 ${LANG_GERMAN} "Hauptkomponenten"
-LangString name_section2 ${LANG_GERMAN} "Optionale Songs"
+LangString name_section2 ${LANG_GERMAN} "Songs"
LangString name_s2_sub1 ${LANG_GERMAN} "Jonathan Coulton"
-LangString name_section3 ${LANG_GERMAN} "Optionale Themen"
+LangString name_s2_sub2 ${LANG_GERMAN} "Shearer"
+LangString name_s2_sub3 ${LANG_GERMAN} "Wise Guys"
+LangString name_section3 ${LANG_GERMAN} "Designs"
LangString DESC_Section1 ${LANG_GERMAN} "Dies sind die von UltraStar Deluxe benötigten Grunddateien"
LangString DESC_Section2 ${LANG_GERMAN} "Hier können Songs zum Installieren gewählt werden."
LangString DESC_Section2_sub1 ${LANG_GERMAN} "Hier können Jonathan Coulton Songs (CC by-nc 3.0) zum Installieren gewählt werden."
+LangString DESC_Section2_sub2 ${LANG_GERMAN} "Hier können Shearer Songs (CC by-nc-sa 2.0 / 3.0) zum Installieren gewählt werden."
+LangString DESC_Section2_sub3 ${LANG_GERMAN} "Hier können Wise Guys Songs zum Installieren gewählt werden."
LangString DESC_Section3 ${LANG_GERMAN} "Hier können alternative Motive zum Installieren gewählt werden."
-LangString DESC_g2Section1 ${LANG_GERMAN} "Installiert das Beispiellied 'Dead Smiling Pirates - I 18' (CC by-nc-nd 2.5)."
-LangString DESC_g2Section2 ${LANG_GERMAN} "Installiert das Beispiellied 'Joshua Morin - On The Run' (CC by-sa 2.5)."
-LangString DESC_g2Section3 ${LANG_GERMAN} "Installiert das Beispiellied 'Pornophonique - Space Invaders' (CC by-nc-nd 2.0)."
-LangString DESC_g2Section4 ${LANG_GERMAN} "Installiert das Beispiellied 'Steven Dunston - Northern Star' (CC by-nc-sa 2.5)."
-
-LangString DESC_s2_sub1_Section1 ${LANG_GERMAN} "Installiert das Beispiellied 'Monkey Shines'."
-LangString DESC_s2_sub1_Section2 ${LANG_GERMAN} "Installiert das Beispiellied 'I Crush Everything'."
-LangString DESC_s2_sub1_Section3 ${LANG_GERMAN} "Installiert das Beispiellied 'Not About You'."
-LangString DESC_s2_sub1_Section4 ${LANG_GERMAN} "Installiert das Beispiellied 'Mr. Fancy Pants'."
-LangString DESC_s2_sub1_Section5 ${LANG_GERMAN} "Installiert das Beispiellied 'Big Bad World One'."
-LangString DESC_s2_sub1_Section6 ${LANG_GERMAN} "Installiert das Beispiellied 'Flickr'."
-LangString DESC_s2_sub1_Section7 ${LANG_GERMAN} "Installiert das Beispiellied 'My Beige Bear'."
-LangString DESC_s2_sub1_Section8 ${LANG_GERMAN} "Installiert das Beispiellied 'The Future Soon'."
-LangString DESC_s2_sub1_Section9 ${LANG_GERMAN} "Installiert das Beispiellied 'Ikea'."
-LangString DESC_s2_sub1_Section10 ${LANG_GERMAN} "Installiert das Beispiellied 'Furry Old Lobster'."
-LangString DESC_s2_sub1_Section11 ${LANG_GERMAN} "Installiert das Beispiellied 'Code Monkey'."
-LangString DESC_s2_sub1_Section12 ${LANG_GERMAN} "Installiert das Beispiellied 'I´m Your Moon'."
-LangString DESC_s2_sub1_Section13 ${LANG_GERMAN} "Installiert das Beispiellied 'First Of May'."
-LangString DESC_s2_sub1_Section14 ${LANG_GERMAN} "Installiert das Beispiellied 'Dance, Soterios Johnson, Dance'."
-LangString DESC_s2_sub1_Section15 ${LANG_GERMAN} "Installiert das Beispiellied 'A Talk With George'."
-LangString DESC_s2_sub1_Section16 ${LANG_GERMAN} "Installiert das Beispiellied 'Creepy Doll'."
-LangString DESC_s2_sub1_Section17 ${LANG_GERMAN} "Installiert das Beispiellied 'That Spells DNA'."
-LangString DESC_s2_sub1_Section18 ${LANG_GERMAN} "Installiert das Beispiellied 'When You Go'."
-LangString DESC_s2_sub1_Section19 ${LANG_GERMAN} "Installiert das Beispiellied 'Better'."
-LangString DESC_s2_sub1_Section20 ${LANG_GERMAN} "Installiert das Beispiellied 'Shop Vac'."
-LangString DESC_s2_sub1_Section21 ${LANG_GERMAN} "Installiert das Beispiellied 'I Feel Fantastic'."
-LangString DESC_s2_sub1_Section22 ${LANG_GERMAN} "Installiert das Beispiellied 'Re: Your Brains'."
-LangString DESC_s2_sub1_Section23 ${LANG_GERMAN} "Installiert das Beispiellied 'Skullcrusher Mountain'."
-LangString DESC_s2_sub1_Section24 ${LANG_GERMAN} "Installiert das Beispiellied 'Chiron Beta Prime'."
+LangString DESC_g2Section2 ${LANG_GERMAN} "Installiert das Lied 'Dead Smiling Pirates - I 18' (CC by-nc-nd 2.5)."
+LangString DESC_g2Section3 ${LANG_GERMAN} "Installiert das Lied 'Joshua Morin - On The Run' (CC by-sa 2.5)."
+LangString DESC_g2Section4 ${LANG_GERMAN} "Installiert das Lied 'Pornophonique - Space Invaders' (CC by-nc-nd 2.0)."
+LangString DESC_g2Section5 ${LANG_GERMAN} "Installiert das Lied 'Steven Dunston - Northern Star' (CC by-nc-sa 2.5)."
+LangString DESC_g2Section1 ${LANG_GERMAN} "Installiert das Lied 'Bodo Wartke - Liebeslied (Love Song)'."
+
+LangString DESC_s2_sub1_Section1 ${LANG_GERMAN} "Installiert das Lied 'Monkey Shines'."
+LangString DESC_s2_sub1_Section2 ${LANG_GERMAN} "Installiert das Lied 'I Crush Everything'."
+LangString DESC_s2_sub1_Section3 ${LANG_GERMAN} "Installiert das Lied 'Not About You'."
+LangString DESC_s2_sub1_Section4 ${LANG_GERMAN} "Installiert das Lied 'Mr. Fancy Pants'."
+LangString DESC_s2_sub1_Section5 ${LANG_GERMAN} "Installiert das Lied 'Big Bad World One'."
+LangString DESC_s2_sub1_Section6 ${LANG_GERMAN} "Installiert das Lied 'Flickr [inkl. Video]'."
+LangString DESC_s2_sub1_Section7 ${LANG_GERMAN} "Installiert das Lied 'My Beige Bear'."
+LangString DESC_s2_sub1_Section8 ${LANG_GERMAN} "Installiert das Lied 'The Future Soon'."
+LangString DESC_s2_sub1_Section9 ${LANG_GERMAN} "Installiert das Lied 'Ikea'."
+LangString DESC_s2_sub1_Section10 ${LANG_GERMAN} "Installiert das Lied 'Furry Old Lobster'."
+LangString DESC_s2_sub1_Section11 ${LANG_GERMAN} "Installiert das Lied 'Code Monkey [inkl. Video]'."
+LangString DESC_s2_sub1_Section12 ${LANG_GERMAN} "Installiert das Lied 'I´m Your Moon'."
+LangString DESC_s2_sub1_Section13 ${LANG_GERMAN} "Installiert das Lied 'First Of May'."
+LangString DESC_s2_sub1_Section14 ${LANG_GERMAN} "Installiert das Lied 'Dance, Soterios Johnson, Dance'."
+LangString DESC_s2_sub1_Section15 ${LANG_GERMAN} "Installiert das Lied 'A Talk With George'."
+LangString DESC_s2_sub1_Section16 ${LANG_GERMAN} "Installiert das Lied 'Creepy Doll [inkl. Video]'."
+LangString DESC_s2_sub1_Section17 ${LANG_GERMAN} "Installiert das Lied 'That Spells DNA'."
+LangString DESC_s2_sub1_Section18 ${LANG_GERMAN} "Installiert das Lied 'When You Go'."
+LangString DESC_s2_sub1_Section19 ${LANG_GERMAN} "Installiert das Lied 'Better'."
+LangString DESC_s2_sub1_Section20 ${LANG_GERMAN} "Installiert das Lied 'Shop Vac'."
+LangString DESC_s2_sub1_Section21 ${LANG_GERMAN} "Installiert das Lied 'I Feel Fantastic'."
+LangString DESC_s2_sub1_Section22 ${LANG_GERMAN} "Installiert das Lied 'Re: Your Brains'."
+LangString DESC_s2_sub1_Section23 ${LANG_GERMAN} "Installiert das Lied 'Skullcrusher Mountain'."
+LangString DESC_s2_sub1_Section24 ${LANG_GERMAN} "Installiert das Lied 'Chiron Beta Prime [inkl. Video]'."
+
+LangString DESC_s2_sub2_Section1 ${LANG_GERMAN} "Installiert das Lied '69'."
+LangString DESC_s2_sub2_Section2 ${LANG_GERMAN} "Installiert das Lied '69 (Karaoke)'."
+LangString DESC_s2_sub2_Section3 ${LANG_GERMAN} "Installiert das Lied 'Can't stop it'."
+LangString DESC_s2_sub2_Section4 ${LANG_GERMAN} "Installiert das Lied 'Can't stop it (Karaoke)'."
+LangString DESC_s2_sub2_Section5 ${LANG_GERMAN} "Installiert das Lied 'In My Hand'."
+LangString DESC_s2_sub2_Section6 ${LANG_GERMAN} "Installiert das Lied 'Man Song'."
+LangString DESC_s2_sub2_Section7 ${LANG_GERMAN} "Installiert das Lied 'Man Song (Karaoke)'."
+LangString DESC_s2_sub2_Section8 ${LANG_GERMAN} "Installiert das Lied 'Stay with me'."
+LangString DESC_s2_sub2_Section9 ${LANG_GERMAN} "Installiert das Lied 'Stay with me (Karaoke)'."
+
+LangString DESC_s2_sub3_Section1 ${LANG_GERMAN} "Installiert das Lied 'Lebendig und kräftig und schärfer'."
+LangString DESC_s2_sub3_Section2 ${LANG_GERMAN} "Installiert das Lied 'Mensch, wo bist du?'."
LangString DESC_g3Section1 ${LANG_GERMAN} "Installiert das Motiv 'Orange' von Skar"
LangString DESC_g3Section2 ${LANG_GERMAN} "Installiert das Motiv 'Streetlight' von Skar"
LangString DESC_g3Section3 ${LANG_GERMAN} "Installiert das Motiv 'Vistar' von Skar"
-LangString DESC_g3Section4 ${LANG_GERMAN} "Installiert das Motiv 'BlueSensation v5' von Charis"
-LangString DESC_g3Section5 ${LANG_GERMAN} "Installiert das Motiv 'WiiStar' von MasterPhW"
-LangString DESC_g3Section6 ${LANG_GERMAN} "Installiert das Motiv 'iStar' von MezzoX"
-
+LangString DESC_g3Section4 ${LANG_GERMAN} "Installiert das Motiv 'BlueSensation v5.1' von Charis"
+LangString DESC_g3Section6 ${LANG_GERMAN} "Installiert das Motiv 'WiiStar' von MasterPhW"
+LangString DESC_g3Section7 ${LANG_GERMAN} "Installiert das Motiv 'iStar' von MezzoX"
+LangString DESC_g3Section5 ${LANG_GERMAN} "Installiert das Motiv 'WhiteSensation' von Charis"
\ No newline at end of file diff --git a/unicode/installer/settings/files_main_install.nsh b/unicode/installer/settings/files_main_install.nsh index 605725aa..c2cdf727 100644 --- a/unicode/installer/settings/files_main_install.nsh +++ b/unicode/installer/settings/files_main_install.nsh @@ -4,25 +4,26 @@ ; Create Directories:
-CreateDirectory $INSTDIR\plugins
-CreateDirectory $INSTDIR\songs
-CreateDirectory $INSTDIR\screenshots
-CreateDirectory $INSTDIR\playlists
+CreateDirectory $INSTDIR\Plugins
+CreateDirectory $INSTDIR\Songs
+CreateDirectory $INSTDIR\Screenshots
+CreateDirectory $INSTDIR\Playlists
+CreateDirectory $INSTDIR\Covers
SetOutPath "$INSTDIR"
-; themes, languages, sounds, visuals dir
+; themes, languages, sounds, fonts, visuals dir
File /r ..\game\themes
File /r ..\game\languages
File /r ..\game\sounds
+File /r ..\game\fonts
File /r ..\installerdependencies\visuals
; Root dir:
File ..\installerdependencies\dll\*.dll
-
File ..\ChangeLog.txt
File ..\ChangeLog.german.txt
File ..\README.txt
@@ -34,7 +35,7 @@ File "..\${exe}.exe" ; Covers dir:
-SetOutPath "$INSTDIR\covers"
+SetOutPath "$INSTDIR\Covers"
IfFileExists $INSTDIR\covers\covers.ini +2 0
File ..\game\covers\Covers.ini
diff --git a/unicode/installer/settings/files_main_uninstall.nsh b/unicode/installer/settings/files_main_uninstall.nsh index b3d69da2..af61cb0b 100644 --- a/unicode/installer/settings/files_main_uninstall.nsh +++ b/unicode/installer/settings/files_main_uninstall.nsh @@ -18,6 +18,7 @@ RMDir /r "$INSTDIR\plugins"
RMDir /r "$INSTDIR\themes"
+ RMDir /r "$INSTDIR\fonts"
RMDir /r "$INSTDIR\languages"
RMDir /r "$INSTDIR\visuals"
RMDir /r "$INSTDIR\sounds"
@@ -34,6 +35,7 @@ Delete "$INSTDIR\README.txt"
Delete "$INSTDIR\Error.log"
Delete "$INSTDIR\covers.cache"
+ Delete "$INSTDIR\cover.db"
Delete "$INSTDIR\avcodec-51.dll"
Delete "$INSTDIR\avformat-50.dll"
diff --git a/unicode/installer/settings/settings-1031.ini b/unicode/installer/settings/settings-1031.ini index 642f577e..9e588fcb 100644 --- a/unicode/installer/settings/settings-1031.ini +++ b/unicode/installer/settings/settings-1031.ini @@ -44,6 +44,7 @@ Bottom=132 [Field 6]
Type=Droplist
ListItems=On|Off
+State=On
Left=71
Right=161
Top=25
@@ -52,6 +53,7 @@ Bottom=38 [Field 7]
Type=Droplist
ListItems=Catalan|Croatian|Danish|Dutch|English|Euskara|French|German|Italian|Norwegian|Polish|Portuguese|Serbian|Slovak|Spanish|Swedish
+State=German
Left=71
Right=161
Top=48
@@ -60,6 +62,7 @@ Bottom=62 [Field 8]
Type=Droplist
ListItems=320x200|640x480|800x600|1024x768|1280x1024|1440x900|1680x1050|1920x1200
+State=800x600
Left=71
Right=161
Top=72
@@ -68,6 +71,7 @@ Bottom=86 [Field 9]
Type=Droplist
ListItems=On|Off
+State=Off
Left=71
Right=161
Top=96
@@ -76,6 +80,7 @@ Bottom=110 [Field 10]
Type=Droplist
ListItems=On|Off
+State=On
Left=71
Right=161
Top=121
diff --git a/unicode/installer/settings/settings-1033.ini b/unicode/installer/settings/settings-1033.ini index 2a3dfdba..17a08a8c 100644 --- a/unicode/installer/settings/settings-1033.ini +++ b/unicode/installer/settings/settings-1033.ini @@ -44,6 +44,7 @@ Bottom=132 [Field 6]
Type=Droplist
ListItems=On|Off
+State=On
Left=70
Right=160
Top=24
@@ -52,6 +53,7 @@ Bottom=36 [Field 7]
Type=Droplist
ListItems=Catalan|Croatian|Danish|Dutch|English|Euskara|French|German|Italian|Norwegian|Polish|Portuguese|Serbian|Slovak|Spanish|Swedish
+State=English
Left=70
Right=160
Top=48
@@ -60,6 +62,7 @@ Bottom=60 [Field 8]
Type=Droplist
ListItems=320x200|640x480|800x600|1024x768|1280x1024|1440x900|1680x1050|1920x1200
+State=800x600
Left=70
Right=160
Top=72
@@ -68,6 +71,7 @@ Bottom=86 [Field 9]
Type=Droplist
ListItems=On|Off
+State=Off
Left=70
Right=160
Top=99
@@ -76,6 +80,7 @@ Bottom=113 [Field 10]
Type=Droplist
ListItems=On|Off
+State=On
Left=70
Right=160
Top=123
diff --git a/unicode/installer/settings/variables.nsh b/unicode/installer/settings/variables.nsh index bf5668d7..db98d89f 100644 --- a/unicode/installer/settings/variables.nsh +++ b/unicode/installer/settings/variables.nsh @@ -14,7 +14,7 @@ !define exe "USdx"
-!define license "license.txt"
+!define license "..\installerdependencies\documents\license.txt"
; Icons
@@ -38,10 +38,11 @@ ; Download URLs for Songs and Themes:
-!define download_song1 "http://downloads.sourceforge.net/ultrastardx/usdx_song-dead_smiling_pirates_-_i_18.zip"
-!define download_song2 "http://downloads.sourceforge.net/ultrastardx/usdx_song-joshua_morin_-_on_the_run.zip"
-!define download_song3 "http://downloads.sourceforge.net/ultrastardx/usdx_song-pornophonique_-_space_-_invaders.zip"
-!define download_song4 "http://downloads.sourceforge.net/ultrastardx/usdx_song-steven_dunston_-_northern_star.zip"
+!define download_song2 "http://downloads.sourceforge.net/ultrastardx/usdx_song-dead_smiling_pirates_-_i_18.zip"
+!define download_song3 "http://downloads.sourceforge.net/ultrastardx/usdx_song-joshua_morin_-_on_the_run.zip"
+!define download_song4 "http://downloads.sourceforge.net/ultrastardx/usdx_song-pornophonique_-_space_-_invaders.zip"
+!define download_song5 "http://downloads.sourceforge.net/ultrastardx/usdx_song-steven_dunston_-_northern_star.zip"
+!define download_song1 "http://downloads.sourceforge.net/ultrastardx/usdx_song-bodo_wartke_-_liebeslied.zip"
!define download_sub1_song1 "http://downloads.sourceforge.net/ultrastardx/usdx_song-jonathan_coulton_-_monkey_shines.zip"
!define download_sub1_song2 "http://downloads.sourceforge.net/ultrastardx/usdx_song-jonathan_coulton_-_i_crush_everything.zip"
@@ -68,9 +69,23 @@ !define download_sub1_song23 "http://downloads.sourceforge.net/ultrastardx/usdx_song-jonathan_coulton_-_skullcrusher_mountain.zip"
!define download_sub1_song24 "http://downloads.sourceforge.net/ultrastardx/usdx_song-jonathan_coulton_-_chiron_beta_prime.zip"
+!define download_sub2_song1 "http://downloads.sourceforge.net/ultrastardx/usdx_song-shearer_-_69.zip"
+!define download_sub2_song2 "http://downloads.sourceforge.net/ultrastardx/usdx_song-shearer_-_69_kar.zip"
+!define download_sub2_song3 "http://downloads.sourceforge.net/ultrastardx/usdx_song-shearer_-_cant_stop_it.zip"
+!define download_sub2_song4 "http://downloads.sourceforge.net/ultrastardx/usdx_song-shearer_-_cant_stop_it_kar.zip"
+!define download_sub2_song5 "http://downloads.sourceforge.net/ultrastardx/usdx_song-shearer_-_in_my_hand.zip"
+!define download_sub2_song6 "http://downloads.sourceforge.net/ultrastardx/usdx_song-shearer_-_man_song.zip"
+!define download_sub2_song7 "http://downloads.sourceforge.net/ultrastardx/usdx_song-shearer_-_man_song_kar.zip"
+!define download_sub2_song8 "http://downloads.sourceforge.net/ultrastardx/usdx_song-shearer_-_stay_with_me.zip"
+!define download_sub2_song9 "http://downloads.sourceforge.net/ultrastardx/usdx_song-shearer_-_stay_with_me_kar.zip"
+
+!define download_sub3_song1 "http://downloads.sourceforge.net/ultrastardx/usdx_song-wise_guys_-_lebendig_und_kraeftig_und_schaerfer.zip"
+!define download_sub3_song2 "http://downloads.sourceforge.net/ultrastardx/usdx_song-wise_guys_-_mensch_wo_bist_du.zip"
+
!define download_theme1 "http://downloads.sourceforge.net/ultrastardx/usdx_skin-orange_by_Skar.zip"
!define download_theme2 "http://downloads.sourceforge.net/ultrastardx/usdx_skin-Streetlight_by_Skar.zip"
!define download_theme3 "http://downloads.sourceforge.net/ultrastardx/usdx_skin-Vistar_by_Skar.zip"
-!define download_theme4 "http://downloads.sourceforge.net/ultrastardx/usdx_skin-bluesensationV5_by_Charis.zip"
-!define download_theme5 "http://downloads.sourceforge.net/ultrastardx/usdx_skin-WiiStar_by_MasterPhW.zip"
-!define download_theme6 "http://downloads.sourceforge.net/ultrastardx/usdx_skin-istar_by_MezzoX.zip"
\ No newline at end of file +!define download_theme4 "http://downloads.sourceforge.net/ultrastardx/usdx_skin-bluesensationV5.1_by_Charis.zip"
+!define download_theme6 "http://downloads.sourceforge.net/ultrastardx/usdx_skin-WiiStar_by_MasterPhW.zip"
+!define download_theme7 "http://downloads.sourceforge.net/ultrastardx/usdx_skin-istar_by_MezzoX.zip"
+!define download_theme5 "http://downloads.sourceforge.net/ultrastardx/usdx_skin-whitesensationV101_by_Charis.zip"
\ No newline at end of file diff --git a/unicode/installerdependencies/plugins/ZipDLL.dll b/unicode/installerdependencies/plugins/ZipDLL.dll Binary files differnew file mode 100644 index 00000000..5925d591 --- /dev/null +++ b/unicode/installerdependencies/plugins/ZipDLL.dll diff --git a/unicode/installerdependencies/plugins/nsisunz.dll b/unicode/installerdependencies/plugins/nsisunz.dll Binary files differdeleted file mode 100644 index 5466f156..00000000 --- a/unicode/installerdependencies/plugins/nsisunz.dll +++ /dev/null diff --git a/unicode/plugins/5000Points/Until5000.dpr b/unicode/plugins/5000Points/Until5000.dpr index df79bfe2..83bc1007 100644 --- a/unicode/plugins/5000Points/Until5000.dpr +++ b/unicode/plugins/5000Points/Until5000.dpr @@ -7,81 +7,87 @@ library Until5000; uses ModiSDK in '..\SDK\ModiSDK.pas'; -//Gave the Plugins Info +// give the plugin's info procedure PluginInfo (var Info: TPluginInfo); {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} begin - Info.Name := 'PLUGIN_UNTIL5000_NAME'; + Info.Name := 'PLUGIN_UNTIL5000_NAME'; Info.Creator := 'Whiteshark'; Info.PluginDesc := 'PLUGIN_UNTIL5000_DESC'; - //Set to Party Modi Plugin - Info.Typ := 8; + // set to party modus plugin + Info.Typ := 8; Info.NumPlayers := 31; - //Options - Info.LoadSong := True; //Whether or not a Song should be Loaded - //Only When Song is Loaded: - Info.ShowScore := True; //Whether or not the Score should be shown - Info.ShowNotes := True; //Whether the Note Lines should be displayed - Info.LoadVideo := True; //Should the Video be loaded ? - Info.LoadBack := True; //Should the Background be loaded ? - - Info.BGShowFull := False; //Whether the Background or the Video should be shown Fullsize - Info.BGShowFull_O := True; //Whether the Background or the Video should be shown Fullsize - - Info.ShowRateBar:= True; //Whether the Bar that shows how good the player was sould be displayed - Info.ShowRateBar_O := True; //Load from Ini whether the Bar should be Displayed - - Info.EnLineBonus := False; //Whether LineBonus Should be enabled - Info.EnLineBonus_O := True; //Load from Ini whether LineBonus Should be enabled - - //Options even when song is Not loaded - Info.ShowBars := False; //Whether the White Bars on Top and Bottom should be Drawn - Info.TeamModeOnly := False; //If True the Plugin can only be Played in Team Mode - Info.GetSoundData := False; //If True the RData Procedure is called when new SoundData is available - Info.Dummy := False; //Should be Set to False... for Updateing Plugin Interface + // options + Info.LoadSong := true; // whether or not a song should be loaded + // only when song is loaded: + Info.ShowScore := true; // whether or not the score should be shown + Info.ShowNotes := true; // whether the note lines should be displayed + Info.LoadVideo := true; // should the video be loaded? + Info.LoadBack := true; // should the background be loaded? + + Info.BGShowFull := false; // whether the background or the video should be shown full size + Info.BGShowFull_O := true; // whether the background or the video should be shown full size + + Info.ShowRateBar := true; // whether the bar that shows how good the player was should be displayed + Info.ShowRateBar_O := true; // load from ini whether the bar should be displayed + + Info.EnLineBonus := false; // whether line bonus should be enabled + Info.EnLineBonus_O := true; // load from ini whether line bonus should be enabled + + // options even when song is not loaded + Info.ShowBars := false; // whether the white bars on top and bottom should be drawn + Info.TeamModeOnly := false; // if true the plugin can only be played in team mode + Info.GetSoundData := false; // if true the rdata procedure is called when new sound data is available + Info.Dummy := false; // should be set to false... for updateing plugin interface end; -//Executed on Game Start //If True Game begins, else Failure -function Init (const TeamInfo: TTeamInfo; var Playerinfo: TPlayerinfo; const Sentences: TSentences; const Methods: TMethodRec): boolean; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} +// executed on game start; if true game begins, else failure +function Init (const TeamInfo: TTeamInfo; + var Playerinfo: TPlayerinfo; + const Sentences: TSentences; + const Methods: TMethodRec) + : boolean; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} begin -Result := True; + Result := true; end; -//Executed everytime the Screen is Drawed //If False The Game finishes -function Draw (var Playerinfo: TPlayerinfo; const CurSentence: Cardinal): boolean; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} +// executed everytime the screen is drawn; if false the game finishes +function Draw (var Playerinfo: TPlayerinfo; + const CurSentence: cardinal) + : boolean; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} var -I: Integer; + Index: integer; begin -Result := False; - for I := 0 to PlayerInfo.NumPlayers-1 do + Result := false; + for Index := 0 to PlayerInfo.NumPlayers-1 do begin - PlayerInfo.Playerinfo[I].Bar := PlayerInfo.Playerinfo[I].Score div 50; - PlayerInfo.Playerinfo[I].Percentage := PlayerInfo.Playerinfo[I].Bar; - if (PlayerInfo.Playerinfo[I].Score >=5000) then + PlayerInfo.Playerinfo[Index].Bar := PlayerInfo.Playerinfo[Index].Score div 50; + PlayerInfo.Playerinfo[Index].Percentage := PlayerInfo.Playerinfo[Index].Bar; + if (PlayerInfo.Playerinfo[Index].Score >= 5000) then Exit; end; -Result := True; + Result := true; end; -//Is Executed on Finish, Returns the Playernum of the Winner +// is executed on finish, returns the player number of the winner function Finish (var Playerinfo: TPlayerinfo): byte; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} var - I:Integer; + Index: integer; begin -Result := 0; -for I := 0 to PlayerInfo.NumPlayers-1 do + Result := 0; + for Index := 0 to PlayerInfo.NumPlayers-1 do begin - if (PlayerInfo.Playerinfo[I].Score >=5000) then + if (PlayerInfo.Playerinfo[Index].Score >= 5000) then begin - Case I of - 0: Result := Result OR 1; - 1: Result := Result OR 2; - 2: Result := Result OR 4; - 3: Result := Result OR 8; - 4: Result := Result OR 16; - 5: Result := Result OR 32; + case Index of + 0: Result := Result or 1; + 1: Result := Result or 2; + 2: Result := Result or 4; + 3: Result := Result or 8; + 4: Result := Result or 16; + 5: Result := Result or 32; end; end; end; diff --git a/unicode/plugins/Blind/Blind.dpr b/unicode/plugins/Blind/Blind.dpr index d2824587..3c68374c 100644 --- a/unicode/plugins/Blind/Blind.dpr +++ b/unicode/plugins/Blind/Blind.dpr @@ -7,72 +7,75 @@ library Blind; uses ModiSDK in '..\SDK\ModiSDK.pas'; -//Gave the Plugins Info -procedure PluginInfo (var Info: TPluginInfo); stdcall; +// give the plugin's info +procedure PluginInfo (var Info: TPluginInfo); {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} begin - Info.Name := 'PLUGIN_BLIND_NAME'; - + Info.Name := 'PLUGIN_BLIND_NAME'; Info.Creator := 'Whiteshark'; Info.PluginDesc := 'PLUGIN_BLIND_DESC'; - //Set to Party Modi Plugin - Info.Typ := 8; + // set to party modus plugin + Info.Typ := 8; Info.NumPlayers := 31; - //Options - Info.LoadSong := True; //Whether or not a Song should be Loaded - //Only When Song is Loaded: - Info.ShowScore := True; //Whether or not the Score should be shown - Info.ShowNotes := False; //Whether the Note Lines should be displayed - Info.LoadVideo := True; //Should the Video be loaded ? - Info.LoadBack := True; //Should the Background be loaded ? + // options + Info.LoadSong := true; // whether or not a song should be loaded + // only when song is loaded: + Info.ShowScore := true; // whether or not the score should be shown + Info.ShowNotes := false; // whether the note lines should be displayed + Info.LoadVideo := true; // should the video be loaded? + Info.LoadBack := true; // should the background be loaded? - Info.BGShowFull := False; //Whether the Background or the Video should be shown Fullsize - Info.BGShowFull_O := True; //Whether the Background or the Video should be shown Fullsize + Info.BGShowFull := false; // whether the background or the video should be shown in full size + Info.BGShowFull_O := true; // whether the background or the video should be shown in full size - Info.ShowRateBar:= False; //Whether the Bar that shows how good the player was sould be displayed - Info.ShowRateBar_O := True; //Load from Ini whether the Bar should be Displayed + Info.ShowRateBar := false; // whether the bar that shows how good the player was should be displayed + Info.ShowRateBar_O := true; // load from ini whether the bar should be displayed - Info.EnLineBonus := False; //Whether LineBonus Should be enabled - Info.EnLineBonus_O := True; //Load from Ini whether LineBonus Should be enabled + Info.EnLineBonus := false; // whether line bonus should be enabled + Info.EnLineBonus_O := true; // load from ini whether line bonus should be enabled - //Options even when song is Not loaded - Info.ShowBars := False; //Whether the White Bars on Top and Bottom should be Drawn - Info.TeamModeOnly := False; //If True the Plugin can only be Played in Team Mode - Info.GetSoundData := False; //If True the RData Procedure is called when new SoundData is available - Info.Dummy := False; //Should be Set to False... for Updateing Plugin Interface + // options even when song is not loaded + Info.ShowBars := false; // whether the white bars on top and bottom should be drawn + Info.TeamModeOnly := false; // if true the plugin can only be played in team mode + Info.GetSoundData := false; // if true the rdata procedure is called when new sound data is available + Info.Dummy := false; // should be set to false... for updating plugin interface end; -//Executed on Game Start //If True Game begins, else Failure -function Init (const TeamInfo: TTeamInfo; var Playerinfo: TPlayerinfo; const Sentences: TSentences; const Methods: TMethodRec): boolean; stdcall; +// executed on game start. if true game begins, else failure +function Init (const TeamInfo: TTeamInfo; + var Playerinfo: TPlayerinfo; + const Sentences: TSentences; + const Methods: TMethodRec) + : boolean; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} begin -Result := True; + Result := true; end; -//Executed everytime the Screen is Drawed //If False The Game finishes -function Draw (var Playerinfo: TPlayerinfo; const CurSentence: Cardinal): boolean; stdcall; -var -I: Integer; +// executed every time the screen is drawn. if false the game finishes +function Draw (var Playerinfo: TPlayerinfo; + const CurSentence: cardinal) + : boolean; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} begin -Result := True; + Result := true; end; -//Is Executed on Finish, Returns the Playernum of the Winner -function Finish (var Playerinfo: TPlayerinfo): byte; stdcall; +// is executed on finish, returns the player number of the winner +function Finish (var Playerinfo: TPlayerinfo): byte; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} var - I:Integer; - MaxScore: Word; + Index: integer; + MaxScore: word; begin - Result := 0; + Result := 0; MaxScore := 0; - for I := 0 to PlayerInfo.NumPlayers-1 do + for Index := 0 to PlayerInfo.NumPlayers - 1 do begin - PlayerInfo.Playerinfo[I].Percentage := PlayerInfo.Playerinfo[I].Score div 9999; - if (PlayerInfo.Playerinfo[I].Score > MaxScore) then + PlayerInfo.Playerinfo[Index].Percentage := PlayerInfo.Playerinfo[Index].Score div 9999; + if (PlayerInfo.Playerinfo[Index].Score > MaxScore) then begin - MaxScore := PlayerInfo.Playerinfo[I].Score; - Case I of + MaxScore := PlayerInfo.Playerinfo[Index].Score; + case Index of 0: Result := 1; 1: Result := 2; 2: Result := 4; @@ -81,20 +84,20 @@ begin 5: Result := 32; end; end - else if (PlayerInfo.Playerinfo[I].Score = MaxScore) AND (PlayerInfo.Playerinfo[I].Score <> 0) then + else if (PlayerInfo.Playerinfo[Index].Score = MaxScore) and (PlayerInfo.Playerinfo[Index].Score <> 0) then begin - Case I of - 0: Result := Result OR 1; - 1: Result := Result OR 2; - 2: Result := Result OR 4; - 3: Result := Result OR 8; - 4: Result := Result OR 16; - 5: Result := Result OR 32; + case Index of + 0: Result := Result or 1; + 1: Result := Result or 2; + 2: Result := Result or 4; + 3: Result := Result or 8; + 4: Result := Result or 16; + 5: Result := Result or 32; end; end; end; - //If everybody has 0 Points nobody Wins - If (MaxScore = 0) then + // if everybody has 0 points nobody wins + if (MaxScore = 0) then Result := 0; end; diff --git a/unicode/plugins/Don't_Get_Worse/Hold_The_Line.dpr b/unicode/plugins/Don't_Get_Worse/Hold_The_Line.dpr index 8bfb292c..a7828f8e 100644 --- a/unicode/plugins/Don't_Get_Worse/Hold_The_Line.dpr +++ b/unicode/plugins/Don't_Get_Worse/Hold_The_Line.dpr @@ -5,67 +5,74 @@ library Hold_The_Line; {$ENDIF} uses - ModiSDK in '..\SDK\ModiSDK.pas', - StrUtils in '..\SDK\StrUtils.pas', - sdl in '..\..\src\lib\JEDI-SDL\SDL\Pas\sdl.pas', - moduleloader in '..\..\src\lib\JEDI-SDL\SDL\Pas\moduleloader.pas', - gl in '..\..\src\lib\JEDI-SDL\OpenGL\Pas\gl.pas'; + SysUtils, + ModiSDK in '..\SDK\ModiSDK.pas', + gl in '..\..\src\lib\JEDI-SDL\OpenGL\Pas\gl.pas'; var - PointerTex: TSmallTexture; - CountSentences: Cardinal; - Limit: Byte; - MethodRec: TMethodRec; - Frame: Integer; - PlayerTimes: array[0..5] of Integer; - LastTick: Cardinal; - PointerVisible: Boolean; - - DismissedSound: Cardinal; - -//Gave the Plugins Info -procedure PluginInfo (var Info: TPluginInfo); stdcall; + PointerTex: TSmallTexture; + CountSentences: cardinal; + Limit: byte; + MethodRec: TMethodRec; +// Frame: integer; + PlayerTimes: array[0..5] of integer; + LastTick: cardinal; + PointerVisible: boolean; + + DismissedSound: cardinal; + +// Give the plugin's info +procedure PluginInfo (var Info: TPluginInfo); {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} begin - Info.Name := 'PLUGIN_HDL_NAME'; + Info.Name := 'PLUGIN_HDL_NAME'; Info.Creator := 'Whiteshark'; Info.PluginDesc := 'PLUGIN_HDL_DESC'; - //Set to Party Modi Plugin - Info.Typ := 8; + // Set to Party Modi Plugin + Info.Typ := 8; Info.NumPlayers := 31; - //Options - Info.LoadSong := True; //Whether or not a Song should be Loaded - //Only When Song is Loaded: - Info.ShowScore := True; //Whether or not the Score should be shown - Info.ShowNotes := True; //Whether the Note Lines should be displayed - Info.LoadVideo := True; //Should the Video be loaded ? - Info.LoadBack := True; //Should the Background be loaded ? - - Info.BGShowFull := False; //Whether the Background or the Video should be shown Fullsize - Info.BGShowFull_O := True; //Whether the Background or the Video should be shown Fullsize - - Info.ShowRateBar:= True; //Whether the Bar that shows how good the player was sould be displayed - Info.ShowRateBar_O := False; //Load from Ini whether the Bar should be Displayed - - Info.EnLineBonus := False; //Whether LineBonus Should be enabled - Info.EnLineBonus_O := True; //Load from Ini whether LineBonus Should be enabled - - //Options even when song is Not loaded - Info.ShowBars := False; //Whether the White Bars on Top and Bottom should be Drawn - Info.TeamModeOnly := False; //If True the Plugin can only be Played in Team Mode - Info.GetSoundData := False; //If True the RData Procedure is called when new SoundData is available - Info.Dummy := False; //Should be Set to False... for Updateing Plugin Interface + // Options + Info.LoadSong := true; // Whether or not a song should be loaded + // Only when song is loaded: + Info.ShowScore := true; // Whether or not the score should be shown + Info.ShowNotes := true; // Whether the note lines should be displayed + Info.LoadVideo := true; // Should the video be loaded? + Info.LoadBack := true; // Should the background be loaded? + + Info.BGShowFull := false; // Whether the background or the video should be shown full size + Info.BGShowFull_O := true; // Whether the Background or the Video should be shown full size + + Info.ShowRateBar := true; // Whether the bar that shows how good the player was should be displayed + Info.ShowRateBar_O := false; // Load from ini whether the bar should be displayed + + Info.EnLineBonus := false; // Whether line bonus should be enabled + Info.EnLineBonus_O := true; // Load from ini whether line bonus should be enabled + + // Options even when song is not loaded + Info.ShowBars := false; // Whether the white bars on top and bottom should be drawn + Info.TeamModeOnly := false; // if true the plugin can only be played in team mode + Info.GetSoundData := false; // if true the rdata procedure is called when new sound data is available + Info.Dummy := false; // Should be set to false... for updating plugin interface end; -//Executed on Game Start //If True Game begins, else Failure -function Init (const TeamInfo: TTeamInfo; var Playerinfo: TPlayerinfo; const Sentences: TSentences; const Methods: TMethodRec): boolean; stdcall; +// executed on game start. if true game begins, else failure +function Init (const TeamInfo: TTeamInfo; + var Playerinfo: TPlayerinfo; + const Sentences: TSentences; + const Methods: TMethodRec) + : boolean; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} + +const + TextureName : PChar = 'HDL_Pointer'; + SoundName : PChar = 'dismissed.mp3'; var - I: Integer; - Texname: PChar; + Index: integer; +// Texname: PChar; TexType: TTextureType; begin +{ TexName := CreateStr(PChar('HDL_Pointer')); TexType := TEXTURE_TYPE_TRANSPARENT; PointerTex := Methods.LoadTex(TexName, TexType); @@ -75,50 +82,56 @@ begin TexName := CreateStr(PChar('dismissed.mp3')); DismissedSound := Methods.LoadSound (TexName); FreeStr(TexName); +} + TexType := TEXTURE_TYPE_TRANSPARENT; + PointerTex := Methods.LoadTex(TextureName, TexType); + + DismissedSound := Methods.LoadSound (SoundName); CountSentences := Sentences.High; Limit := 0; - Frame := 0; +// Frame := 0; MethodRec := Methods; - for I := 0 to PlayerInfo.NumPlayers-1 do + for Index := 0 to PlayerInfo.NumPlayers-1 do begin - PlayerInfo.Playerinfo[I].Enabled := True; - PlayerInfo.Playerinfo[I].Percentage := 100; - PlayerTimes[I] := 0; + PlayerInfo.Playerinfo[Index].Enabled := true; + PlayerInfo.Playerinfo[Index].Percentage := 100; + PlayerTimes[Index] := 0; end; - Result := True; + Result := true; end; -//Executed everytime the Screen is Drawed //If False The Game finishes -function Draw (var Playerinfo: TPlayerinfo; const CurSentence: Cardinal): boolean; stdcall; +function Draw (var Playerinfo: TPlayerinfo; + const CurSentence: cardinal) + : boolean; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} +const + SoundName : PChar = 'PARTY_DISMISSED'; var - I: Integer; - L: Byte; - C: Byte; - Text: PChar; - Blink: Boolean; - tick: Cardinal; + Index: integer; + L: byte; + C: byte; + Tick: cardinal; begin - //Aktivate Blink - If (CurSentence = CountSentences div 5 * 2 - 1) OR (CurSentence = CountSentences div 3 * 2 - 1) then + // activate blink + if (CurSentence = CountSentences div 5 * 2 - 1) or (CurSentence = CountSentences div 3 * 2 - 1) then begin - Tick := SDL_GetTicks() div 400; - If (Tick <> LastTick) then + Tick := round(TimeStampToMSecs(DateTimeToTimeStamp(Now))) div 400; + if (Tick <> LastTick) then begin LastTick := Tick; - PointerVisible := Not PointerVisible; + PointerVisible := not PointerVisible; end; end else - PointerVisible := True; + PointerVisible := true; - //Inc Limit - if (Limit = 0) And (CurSentence >= CountSentences div 5 * 2) then + // inc limit + if (Limit = 0) and (CurSentence >= CountSentences div 5 * 2) then Inc(Limit) - else if (Limit = 1) And (CurSentence >= CountSentences div 3 * 2) then + else if (Limit = 1) and (CurSentence >= CountSentences div 3 * 2) then Inc(Limit); case Limit of @@ -129,22 +142,22 @@ begin C:= 0; - Result := True; + Result := true; - for I := 0 to PlayerInfo.NumPlayers-1 do + for Index := 0 to PlayerInfo.NumPlayers-1 do begin - if PlayerInfo.Playerinfo[I].Enabled then + if PlayerInfo.Playerinfo[Index].Enabled then begin - if PlayerInfo.Playerinfo[I].Bar < L then + if PlayerInfo.Playerinfo[Index].Bar < L then begin - PlayerInfo.Playerinfo[I].Enabled := False; + PlayerInfo.Playerinfo[Index].Enabled := false; Inc(C); - PlayerTimes[I] := CurSentence; //Save Time of Dismission - //PlaySound + PlayerTimes[Index] := CurSentence; // Save Time of Dismission + // PlaySound MethodRec.PlaySound (DismissedSound); end; - //Draw Pointer + // Draw pointer if (PointerVisible) then begin glColor4f (0.2, 0.8, 0.1, 1); @@ -156,10 +169,10 @@ begin glBindTexture(GL_TEXTURE_2D, PointerTex.TexNum); glBegin(GL_QUADS); - glTexCoord2f(1/32, 0); glVertex2f(PlayerInfo.Playerinfo[I].PosX + L - 3, PlayerInfo.Playerinfo[I].PosY - 4); - glTexCoord2f(1/32, 1); glVertex2f(PlayerInfo.Playerinfo[I].PosX + L - 3, PlayerInfo.Playerinfo[I].PosY + 12); - glTexCoord2f(31/32, 1); glVertex2f(PlayerInfo.Playerinfo[I].PosX+ L + 3, PlayerInfo.Playerinfo[I].PosY + 12); - glTexCoord2f(31/32, 0); glVertex2f(PlayerInfo.Playerinfo[I].PosX+ L + 3, PlayerInfo.Playerinfo[I].PosY - 4); + glTexCoord2f(1/32, 0); glVertex2f(PlayerInfo.Playerinfo[Index].PosX + L - 3, PlayerInfo.Playerinfo[Index].PosY - 4); + glTexCoord2f(1/32, 1); glVertex2f(PlayerInfo.Playerinfo[Index].PosX + L - 3, PlayerInfo.Playerinfo[Index].PosY + 12); + glTexCoord2f(31/32, 1); glVertex2f(PlayerInfo.Playerinfo[Index].PosX+ L + 3, PlayerInfo.Playerinfo[Index].PosY + 12); + glTexCoord2f(31/32, 0); glVertex2f(PlayerInfo.Playerinfo[Index].PosX+ L + 3, PlayerInfo.Playerinfo[Index].PosY - 4); glEnd; glDisable(GL_TEXTURE_2D); @@ -170,45 +183,44 @@ begin else begin Inc(C); - //Draw Dismissed - Text := CreateStr(PChar('PARTY_DISMISSED')); - + // Draw dismissed glColor4f (0.8, 0.8, 0.8, 1); - - MethodRec.Print (1, 18, PlayerInfo.Playerinfo[I].PosX, PlayerInfo.Playerinfo[I].PosY-8, Text); - FreeStr(Text); + MethodRec.Print (1, 18, PlayerInfo.Playerinfo[Index].PosX, PlayerInfo.Playerinfo[Index].PosY-8, SoundName); end; end; if (C >= PlayerInfo.NumPlayers-1) then - Result := False; + Result := false; end; -//Is Executed on Finish, Returns the Playernum of the Winner -function Finish (var Playerinfo: TPlayerinfo): byte; stdcall; +// is executed on finish, returns the player number of the winner +function Finish (var Playerinfo: TPlayerinfo): byte; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} var - I:Integer; + Index: integer; begin -Result := 0; -for I := 0 to PlayerInfo.NumPlayers-1 do + Result := 0; + for Index := 0 to PlayerInfo.NumPlayers-1 do begin - PlayerInfo.Playerinfo[I].Percentage := (PlayerTimes[I] * 100) div CountSentences; - if (PlayerInfo.Playerinfo[I].Enabled) then + PlayerInfo.Playerinfo[Index].Percentage := (PlayerTimes[Index] * 100) div CountSentences; + if (PlayerInfo.Playerinfo[Index].Enabled) then begin - PlayerInfo.Playerinfo[I].Percentage := 100; - Case I of - 0: Result := Result OR 1; - 1: Result := Result OR 2; - 2: Result := Result OR 4; - 3: Result := Result OR 8; - 4: Result := Result OR 16; - 5: Result := Result OR 32; + PlayerInfo.Playerinfo[Index].Percentage := 100; + case Index of + 0: Result := Result or 1; + 1: Result := Result or 2; + 2: Result := Result or 4; + 3: Result := Result or 8; + 4: Result := Result or 16; + 5: Result := Result or 32; end; end; end; end; exports -PluginInfo, Init, Draw, Finish; + PluginInfo, + Init, + Draw, + Finish; begin diff --git a/unicode/plugins/Duell/Duell.dpr b/unicode/plugins/Duell/Duell.dpr index 93c87d0e..f54edea8 100644 --- a/unicode/plugins/Duell/Duell.dpr +++ b/unicode/plugins/Duell/Duell.dpr @@ -8,56 +8,56 @@ uses ModiSDK in '..\SDK\ModiSDK.pas'; //Gave the Plugins Info -procedure PluginInfo (var Info: TPluginInfo); stdcall; +procedure PluginInfo (var Info: TPluginInfo); {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} begin - Info.Name := 'PLUGIN_DUELL_NAME'; + Info.Name := 'PLUGIN_DUELL_NAME'; Info.Creator := 'Whiteshark'; Info.PluginDesc := 'PLUGIN_DUELL_DESC'; - Info.Typ := 8; + Info.Typ := 8; Info.NumPlayers := 31; //Options - Info.LoadSong := True; //Whether or not a Song should be Loaded + Info.LoadSong := True; //Whether or not a Song should be Loaded //Only When Song is Loaded: - Info.ShowScore := True; //Whether or not the Score should be shown - Info.ShowNotes := True; //Whether the Note Lines should be displayed - Info.LoadVideo := True; //Should the Video be loaded ? - Info.LoadBack := True; //Should the Background be loaded ? + Info.ShowScore := True; //Whether or not the Score should be shown + Info.ShowNotes := True; //Whether the Note Lines should be displayed + Info.LoadVideo := True; //Should the Video be loaded ? + Info.LoadBack := True; //Should the Background be loaded ? - Info.BGShowFull := False; //Whether the Background or the Video should be shown Fullsize - Info.BGShowFull_O := True; //Whether the Background or the Video should be shown Fullsize + Info.BGShowFull := False; //Whether the Background or the Video should be shown Fullsize + Info.BGShowFull_O := True; //Whether the Background or the Video should be shown Fullsize - Info.ShowRateBar:= False; //Whether the Bar that shows how good the player was sould be displayed + Info.ShowRateBar := False; //Whether the Bar that shows how good the player was sould be displayed Info.ShowRateBar_O := True; //Load from Ini whether the Bar should be Displayed - Info.EnLineBonus := False; //Whether LineBonus Should be enabled + Info.EnLineBonus := False; //Whether LineBonus Should be enabled Info.EnLineBonus_O := True; //Load from Ini whether LineBonus Should be enabled //Options even when song is Not loaded - Info.ShowBars := False; //Whether the White Bars on Top and Bottom should be Drawn - Info.TeamModeOnly := False; //If True the Plugin can only be Played in Team Mode - Info.GetSoundData := False; //If True the RData Procedure is called when new SoundData is available - Info.Dummy := False; //Should be Set to False... for Updateing Plugin Interface + Info.ShowBars := False; //Whether the White Bars on Top and Bottom should be Drawn + Info.TeamModeOnly := False; //If True the Plugin can only be Played in Team Mode + Info.GetSoundData := False; //If True the RData Procedure is called when new SoundData is available + Info.Dummy := False; //Should be Set to False... for Updateing Plugin Interface end; //Executed on Game Start //If True Game begins, else Failure -function Init (const TeamInfo: TTeamInfo; var Playerinfo: TPlayerinfo; const Sentences: TSentences; const Methods: TMethodRec): boolean; stdcall; +function Init (const TeamInfo: TTeamInfo; var Playerinfo: TPlayerinfo; const Sentences: TSentences; const Methods: TMethodRec): boolean; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} begin -Result := True; + Result := True; end; //Executed everytime the Screen is Drawed //If False The Game finishes -function Draw (var Playerinfo: TPlayerinfo; const CurSentence: Cardinal): boolean; stdcall; +function Draw (var Playerinfo: TPlayerinfo; const CurSentence: Cardinal): boolean; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} begin -Result := True; + Result := True; end; //Is Executed on Finish, Returns the Playernum of the Winner -function Finish (var Playerinfo: TPlayerinfo): byte; stdcall; +function Finish (var Playerinfo: TPlayerinfo): byte; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} var - I:Integer; + I: Integer; MaxScore: Word; begin Result := 0; diff --git a/unicode/plugins/Makefile.in b/unicode/plugins/Makefile.in new file mode 100644 index 00000000..0fc49745 --- /dev/null +++ b/unicode/plugins/Makefile.in @@ -0,0 +1,146 @@ +################################################# +# @PACKAGE_STRING@ +# @configure_input@ +################################################# + +@SET_MAKE@ +SHELL = /bin/sh + +################################################# +# Standard definitions +################################################# + +top_srcdir ?= @top_srcdir@ +srcdir ?= @srcdir@ + +################################################# +# Tools +################################################# + +RM ?= rm -f + +################################################# +# USDX Paths +################################################# + +USDX_SRC_DIR := $(top_srcdir)/src +USDX_BUILD_DIR := $(top_srcdir)/build +USDX_LIB_DIR := $(USDX_SRC_DIR)/lib + +################################################# +# FPC config +################################################# + +# Free Pascal compiler binary +PPC := @PPC@ +# FPC target platform and processor +PPLATFORM := @FPC_PLATFORM@ +PPROCESSOR := @FPC_PROCESSOR@ + +# Directories added to the unit path +PUNIT_FLAGS := -FE../game/plugins -Fu../build/fpc-$(PPROCESSOR)-$(PPLATFORM) + +# Directory where compiled units (.ppu, .o and library files) are stored +PCUNIT_DIR := $(USDX_BUILD_DIR)/fpc-$(PPROCESSOR)-$(PPLATFORM) +PCUNIT_FLAGS := -FU$(PCUNIT_DIR) + +## +# PFLAGS +## + +# Defined on debug mode +ENABLE_DEBUG := @ENABLE_DEBUG@ + +# Note: +# - PFLAGS/PFLAGS_* defaults to $(PFLAGS_XYZ_DEFAULT) if not set by the user +# - if PFLAGS is defined, PFLAGS_* will be ignored on "make all" +PFLAGS ?= @PFLAGS@ +PFLAGS_BASE ?= @PFLAGS_BASE@ +PFLAGS_DEBUG ?= @PFLAGS_DEBUG@ +PFLAGS_RELEASE ?= @PFLAGS_RELEASE@ + +# Do not overwrite, just add extra flags +PFLAGS_EXTRA += @PFLAGS_EXTRA@ + +# Default PFLAGS, used if PFLAGS/PFLAGS_* was not set by the user +# - Do not use -dDEBUG because it will enable unwanted features +# - Do not strip executable (-Xs, set by fpc.cfg) to be GNU make conformant +# - Use DEBUG_MODE instead of DEBUG to avoid enabling the fpc.cfg DEBUG preset +# - The flag -vB appends the full path to filenames +# - Note that fpc.cfg already defines -vinw, so add -v0 first +# - The stack check (-Ct) might not work with enabled threading +# - Do we need -Coi? +PFLAGS_BASE_DEFAULT := -Si -Sg- -Sc- -v0Binwe +PFLAGS_DEBUG_DEFAULT := -Xs- -g -gl -dDEBUG_MODE +PFLAGS_RELEASE_DEFAULT := -Xs- -O2 +PFLAGS_EXTRA_DEFAULT := + +# Debug/Release mode flags +# Note that flags will overwrite previously specified flags, +# e.g. "-vinwe -vi-" is the same as "-vnwe" +PFLAGS_DEBUG_ALL := $(PFLAGS_BASE) $(PFLAGS_DEBUG) $(PFLAGS_EXTRA) +PFLAGS_RELEASE_ALL := $(PFLAGS_BASE) $(PFLAGS_RELEASE) $(PFLAGS_EXTRA) + +# Choose default PFLAGS, depending on debug mode. +# Only used if PFLAGS was not set by the user. +ifdef ENABLE_DEBUG +PFLAGS_DEFAULT := $(PFLAGS_DEBUG_ALL) +else +PFLAGS_DEFAULT := $(PFLAGS_RELEASE_ALL) +endif + +PFLAGS_ALL = $(PFLAGS) $(PDEFINES) $(PINC_FLAGS) $(PUNIT_FLAGS) $(PCUNIT_FLAGS) + +.PHONY: all +all: SDK 5000Points Blind Dont_Get_Worse Duell Team_Duell + +.PHONY: SDK +SDK: clean-SDK + $(PPC) $(strip $(PFLAGS_ALL)) SDK/ModiSDK.pas + +.PHONY: 5000Points +5000Points: SDK clean-5000Points + $(PPC) $(strip $(PFLAGS_ALL)) 5000Points/Until5000.dpr + +.PHONY: Blind +Blind: SDK clean-Blind + $(PPC) $(strip $(PFLAGS_ALL)) Blind/Blind.dpr + +.PHONY: Duell +Duell: SDK clean-Duell + $(PPC) $(strip $(PFLAGS_ALL)) Duell/Duell.dpr + +.PHONY: Team_Duell +Team_Duell: SDK clean-Team_Duell + $(PPC) $(strip $(PFLAGS_ALL)) Team_Duell/TeamDuell.dpr + +.PHONY: Dont_Get_Worse +Dont_Get_Worse: SDK clean-Dont_Get_Worse + $(PPC) $(strip $(PFLAGS_ALL)) Don\'t_Get_Worse/Hold_The_Line.dpr + +.PHONY: clean-plugins +clean-plugins: clean-SDK clean-5000Points clean-Blind clean-Dont_Get_Worse clean-Duell clean-Team_Duell + +.PHONY: clean-SDK +clean-SDK: + $(RM) $(PCUNIT_DIR)/ModiSDK.o $(PCUNIT_DIR)/ModiSDK.ppu + +.PHONY: clean-5000Points +clean-5000Points: + $(RM) $(PCUNIT_DIR)/Until5000.o $(PCUNIT_DIR)/libUntil5000.* + +.PHONY: clean-Blind +clean-Blind: + $(RM) $(PCUNIT_DIR)/Blind.o $(PCUNIT_DIR)/libBlind.* + +.PHONY: clean-Duell +clean-Duell: + $(RM) $(PCUNIT_DIR)/Duell.o $(PCUNIT_DIR)/libDuell.* + +.PHONY: clean-Team_Duell +clean-Team_Duell: + $(RM) $(PCUNIT_DIR)/TeamDuell.o $(PCUNIT_DIR)/libTeamDuell.* + +.PHONY: clean-Dont_Get_Worse +clean-Dont_Get_Worse: + $(RM) $(PCUNIT_DIR)/Hold_The_Line.o $(PCUNIT_DIR)/libHold_The_Line.* diff --git a/unicode/plugins/README(Plugins Status).txt b/unicode/plugins/README(Plugins Status).txt new file mode 100644 index 00000000..a6756832 --- /dev/null +++ b/unicode/plugins/README(Plugins Status).txt @@ -0,0 +1,12 @@ +All plugins are cleared off the SDL stuff (basically SDL_GetTicks), the StrUtils and moduleloader unit and should work on all platforms. +2009-May-23 KMS + +Mac OS X: +The following plugins can be compiled and used after being put in to the plugins folder: Blind, 5000Points, Duell + +2009-Apr-8 KMS + +The plugins are currently disabled until the party mode is working again. +This applies to all platforms supported (Windows, Linux, Mac OS X, FreeBSD). + +2009-Jan-20 Karl-Michael Schindler aka Mischi. diff --git a/unicode/plugins/SDK/Hooks.txt b/unicode/plugins/SDK/Hooks.txt deleted file mode 100644 index 999f552f..00000000 --- a/unicode/plugins/SDK/Hooks.txt +++ /dev/null @@ -1,20 +0,0 @@ -Ultrastar Deluxe Hook List ------------------------------------ -Here you can find the Events the Core offers to you: - --------------------- -Core: --------------------- -Core/LoadingFinished <- Hook is called after all Modules and Plugins are loaded completely, before MainLoop -Core/MainLoop <- Hook is called once in MainLoop before Drawing -Core/Translate <- Hook is called when Strings should be translated. If this is Retranslating lParam is Non Zero -Core/LoadTextures <- Hook is called when Textures should be Loaded. This will be called in Ogl Thread. If Textures are Reloaded (e.g. on Display ReInit) LParam is non Zero. -Core/ExitQuery <- Hook is called if someone querys an exit. (e.g. X is pressed). Not called on ForcedExit. If Chain is breaked the exit will be aborted. -Core/Exit <- Hook is called before Module a. Plugin unload. -Core/NewDebugInfo <- Hook is called everytime there is Debug Info to Output(only if Debug Mode is enabled). wParam: Pchar(Message), lParam: PChar(Reportername) -Core/NewError <- Hook is called everytime an error is reported. wParam: Pchar(Message), lParam: PChar(Reportername) - --------------------- -Display --------------------- -Display/onScreenChange <-Hook is called when there is an attemp to change Screen. wParam is address to Screens Name(Null Terminated). If Chain is breaked Screenchange will be aborted.
\ No newline at end of file diff --git a/unicode/plugins/SDK/ModiSDK.pas b/unicode/plugins/SDK/ModiSDK.pas index c0e66387..e0b52a81 100644 --- a/unicode/plugins/SDK/ModiSDK.pas +++ b/unicode/plugins/SDK/ModiSDK.pas @@ -6,94 +6,93 @@ interface {$MODE Delphi} {$ENDIF} -type //PluginInfo, for Init +type // PluginInfo, for init TPluginInfo = record - //Info - Name : Array [0..32] of Char; //Modi to Register for the Plugin - Creator : Array [0..32] of Char; //Name of the Author - PluginDesc : Array [0..64] of Char; //Plugin Description + // Info + Name: array [0..32] of char; // modus to register for the plugin + Creator: array [0..32] of char; // name of the author + PluginDesc: array [0..64] of char; // plugin description - //Plugin Typ, atm: 8 only for PartyMode Modi + // plugin type, atm: 8 only for partymode modus Case Typ: byte of 8: ( - //Options - LoadSong: boolean; //Whether or not a Song should be Loaded - //Only When Song is Loaded: - ShowNotes: boolean; //Whether the Note Lines should be displayed - LoadVideo: boolean; //Should the Video be loaded ? - LoadBack: boolean; //Should the Background be loaded ? - - ShowRateBar: boolean; //Whether the Bar that shows how good the player was sould be displayed - ShowRateBar_O: boolean; //Load from Ini whether the Bar should be Displayed - - EnLineBonus: boolean; //Whether LineBonus Should be enabled - EnLineBonus_O: boolean; //Load from Ini whether LineBonus Should be enabled - - BGShowFull: boolean; //Whether the Background or the Video should be shown Fullsize - BGShowFull_O: boolean; //Whether the Background or the Video should be shown Fullsize - - //Options -> everytime - ShowScore: boolean; //Whether or not the Score should be shown - ShowBars: boolean; //Whether the White Bars on Top and Bottom should be Drawn - TeamModeOnly: boolean; //If True the Plugin can only be Played in Team Mode - GetSoundData: boolean; //If True the RData Procedure is called when new SoundData is available - Dummy: boolean; //Should be Set to False... for Updateing Plugin Interface - - NumPlayers: Byte //Number of Available Players for Modi - //Set different Bits - //1 -> One Player - //2 -> Two Players - //4 -> Three Players - //8 -> Four Players - //16-> Six Players - //e.g. : 10 -> Playable with 2 and 4 Players + // Options + LoadSong: boolean; // Whether or not a song should be loaded + // Only when song is loaded: + ShowNotes: boolean; // Whether the note lines should be displayed + LoadVideo: boolean; // Should the video be loaded? + LoadBack: boolean; // Should the background be loaded? + + ShowRateBar: boolean; // Whether the bar that shows how good the player was sould be displayed + ShowRateBar_O: boolean; // Load from ini whether the bar should be displayed + + EnLineBonus: boolean; // Whether line bonus should be enabled + EnLineBonus_O: boolean; // Load from ini whether line bonus should be enabled + + BGShowFull: boolean; // Whether the background or the video should be shown full size + BGShowFull_O: boolean; // Whether the background or the video should be shown full size + + // Options -> everytime + ShowScore: boolean; // Whether or not the score should be shown + ShowBars: boolean; // Whether the white bars on top and bottom should be drawn + TeamModeOnly: boolean; // If true the plugin can only be played in team mode + GetSoundData: boolean; // If true the rdata procedure is called when new sound data is available + Dummy: boolean; // Should be set to false... for updating plugin interface + + NumPlayers: byte // Number of available players for modus + // Set different bits + // 1 -> one player + // 2 -> two players + // 4 -> three players + // 8 -> four players + // 16-> six players + // e.g. : 10 -> playable with 2 and 4 players ); end; TPlayerInfo = record - NumPlayers: Byte; + NumPlayers: byte; Playerinfo: array[0..5] of record - Name: PChar; //Name of the Player - Score:Word; //Players Score - Bar: Byte; //Percentage of the SingBar filled - PosX: Real; //PosX of Players SingBar - PosY: Real; //PosY " - Enabled: Boolean; //Whether the Player could get Points - Percentage: Byte; //Percentage Shown on the Score Screen + Name: PChar; // Name of the player + Score: word; // Player's score + Bar: byte; // Percentage of the singbar filled + PosX: real; // PosX of player's singbar + PosY: real; // PosY " + Enabled: boolean; // Whether the player could get points + Percentage: byte; // Percentage shown on the score screen end; end; TTeamInfo = record - NumTeams: Byte; + NumTeams: byte; Teaminfo: array[0..5] of record - Name: PChar; - Score: Word; - Joker: Byte; - CurPlayer: Byte; - NumPlayers: Byte; + Name: PChar; + Score: word; + Joker: byte; + CurPlayer: byte; + NumPlayers: byte; Playerinfo: array[0..3] of record - Name: PChar; - TimesPlayed: Byte; - + Name: PChar; + TimesPlayed: byte; end; end; end; TsmallTexture = record - TexNum: integer; - W: real; - H: real; + TexNum: integer; + W: real; + H: real; end; TSentences = record - Current: integer; // aktualna czesc utworu do rysowania - High: integer; - Number: integer; - Resolution: integer; - NotesGAP: integer; - TotalLength:integer; - Sentence: array of record + Current: integer; // current part of a line + High: integer; + Number: integer; + Resolution: integer; + NotesGAP: integer; + TotalLength: integer; + Sentence: array of record Start: integer; StartNote: integer; Lyric: string; @@ -109,14 +108,14 @@ type //PluginInfo, for Init Length: integer; Tone: integer; //Text: string; - FreeStyle: boolean; - Typ: integer; // zwykla nuta x1, zlota nuta x2 + FreeStyle: boolean; + Typ: integer; // normal note x1, golden note x2 end; end; end; - DWORD = Longword; - HSTREAM = DWORD; + dword = longword; + hstream = dword; TTextureType = ( TEXTURE_TYPE_PLAIN, // Plain (alpha = 1) @@ -124,12 +123,18 @@ type //PluginInfo, for Init TEXTURE_TYPE_COLORIZED // Alpha is used; Hue of the HSV color-model will be replaced by a new value ); - //Routines to gave to the Plugin - fModi_LoadTex = function (const Name: PChar; Typ: TTextureType): TsmallTexture; stdcall; //Pointer to Texture Loader - //fModi_Translate = function (const Name, Translation: AChar): Integer; stdcall; //Pointer to Translator - fModi_Print = procedure (const Style, Size: Byte; const X, Y: Real; const Text: PChar); stdcall; //Procedure to Print Text //Now translated automatically - fModi_LoadSound = function (const Name: PChar): Cardinal; stdcall; //Procedure that loads a Custom Sound - pModi_PlaySound = procedure (const Index: Cardinal); stdcall; //Plays a Custom Sound + // Routines to give to the plugin + fModi_LoadTex = function (const Name: PChar; Typ: TTextureType): TsmallTexture; // Pointer to texture loader + {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} + //fModi_Translate = function (const Name, Translation: AChar): integer; // Pointer to translator + // {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} + + fModi_Print = procedure (const Style, Size: byte; const X, Y: real; const Text: PChar); // Procedure to print text // Now translated automatically + {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} + fModi_LoadSound = function (const Name: PChar): cardinal; // Procedure that loads a custom sound + {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} + pModi_PlaySound = procedure (const Index: cardinal); // Plays a custom sound + {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} TMethodRec = record LoadTex: fModi_LoadTex; @@ -137,17 +142,22 @@ type //PluginInfo, for Init LoadSound: fModi_LoadSound; PlaySound: pModi_PlaySound; end; - //DLL Funktionen - //Gave the Plugins Info - pModi_PluginInfo = procedure (var Info: TPluginInfo); stdcall; - //Executed on Game Start //If True Game begins, else Failure - fModi_Init = function (const TeamInfo: TTeamInfo; var Playerinfo: TPlayerinfo; const Sentences: TSentences; const Methods: TMethodRec): boolean; stdcall; - //Executed everytime the Screen is Drawed //If False The Game finishes - fModi_Draw = function (var Playerinfo: TPlayerinfo; const CurSentence: Cardinal): boolean; stdcall; - //Is Executed on Finish, Returns the Playernum of the Winner - fModi_Finish = function (var Playerinfo: TPlayerinfo): byte; stdcall; - //Procedure called when new Sound Data is available - pModi_RData = procedure (handle: HSTREAM; buffer: Pointer; len: DWORD; user: DWORD); stdcall; + // DLL functions + // Give the plugins info + pModi_PluginInfo = procedure (var Info: TPluginInfo); + {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} + // Executed on game start // if true game begins, else failure + fModi_Init = function (const TeamInfo: TTeamInfo; var Playerinfo: TPlayerinfo; const Sentences: TSentences; const Methods: TMethodRec): boolean; + {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} + // Executed everytime the screen is drawn // if false the game finishes + fModi_Draw = function (var Playerinfo: TPlayerinfo; const CurSentence: cardinal): boolean; + {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} + // Is executed on finish, returns the player num of the winner + fModi_Finish = function (var Playerinfo: TPlayerinfo): byte; + {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} + // Procedure called when new sound data is available + pModi_RData = procedure (handle: hstream; buffer: pointer; len: dword; user: dword); + {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} implementation diff --git a/unicode/plugins/SDK/Plugin DLL Exports.txt b/unicode/plugins/SDK/Plugin DLL Exports.txt deleted file mode 100644 index 930e18ac..00000000 --- a/unicode/plugins/SDK/Plugin DLL Exports.txt +++ /dev/null @@ -1,11 +0,0 @@ -Ultrastar Plugin DLL(Libary) Exports ------------------------------------ -This are the Procedurs and Functions that a UsDx Plugin has to export to get Loaded. - - -USPlugin_Info(PInfo: PUS_PluginInfo); stdcall; ------------------------------------ -Ultrastar uses this Procedure to identify the Plugins. -At the given Address there is a PUS_PluginInfo Record. cbSize -attribut is already set. Please asure not to overwrite this assigned -memory amount. diff --git a/unicode/plugins/SDK/Services.txt b/unicode/plugins/SDK/Services.txt deleted file mode 100644 index 8db031d8..00000000 --- a/unicode/plugins/SDK/Services.txt +++ /dev/null @@ -1,22 +0,0 @@ -Ultrastar Deluxe Service List ------------------------------------ -Here you can find the Services the Core offers to you: - --------------------- -Core: --------------------- -Core/ReportError <- Calls the 'Core/NewError' Chain. wParam: Pchar(Message), lParam: PChar(Reportername) -Core/ReportDebug <- Calls the 'Core/NewDebugInfo' Chain. wParam: Pchar(Message), lParam: PChar(Reportername) -Core/ShowMessage <- Shows a Message Dialog. (lParam: PChar Text, wParam: Symbol) -Core/Retranslate <- Calls Translate Hook -Core/ReloadTextures <- Calls LoadTextures Hook -Core/GetModuleInfo <- If lParam = nil then get length of Moduleinfo Array. If lparam <> nil then write array of TModuleInfo to address at lparam -Core/GetApplicationHandle <- Returns Main-Applications Handle (Win32 Only) - --------------------- -PluginLoader --------------------- -PluginLoader/GetPluginInfo <- If wParam = -1 then (If lParam = nil then get length of Moduleinfo Array. If lparam <> nil then write array of TUS_PluginInfo to address at lparam) Else (Get PluginInfo of Plugin with Index(wParam) to Address at lParam) -PluginLoader/GetPluginState <- If wParam = -1 then (If lParam = nil then get length of Moduleinfo Array. If lparam <> nil then write array of TUS_PluginInfo to address at lparam) Else (Return PluginInfo of Plugin with Index(wParam)) -PluginLoader/LoadPlugin <- wParam PChar(PluginName/PluginPath) | lParam (if wParam = nil) ID of the Plugin -PluginLoader/UnloadPlugin <- wParam PChar(PluginName/PluginPath) | lParam (if wParam = nil) ID of the Plugin
\ No newline at end of file diff --git a/unicode/plugins/SDK/StrUtils.pas b/unicode/plugins/SDK/StrUtils.pas deleted file mode 100644 index 069c89c3..00000000 --- a/unicode/plugins/SDK/StrUtils.pas +++ /dev/null @@ -1,79 +0,0 @@ -unit StrUtils; - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -uses ModiSDK; - -//function StrToAChar(Str: String): AChar; -function CreateStr(Str: PChar): PChar; -procedure FreeStr(Str: PChar); - -implementation - -{$IFDEF FPC} - {$ASMMODE Intel} -{$ENDIF} - -{function StrToAChar(Str: String): AChar; -var - L, I: Integer; -begin - L := Length(Str); - For I := 0 to L-1 do - AChar[I] := Str[I+1]; - - For I := L to 254 do - AChar[I] := #0; -end; } - -function StrCopy(Dest, Source: PChar): PChar; assembler; -asm - PUSH EDI - PUSH ESI - MOV ESI,EAX - MOV EDI,EDX - MOV ECX,0FFFFFFFFH - XOR AL,AL - REPNE SCASB - NOT ECX - MOV EDI,ESI - MOV ESI,EDX - MOV EDX,ECX - MOV EAX,EDI - SHR ECX,2 - REP MOVSD - MOV ECX,EDX - AND ECX,3 - REP MOVSB - POP ESI - POP EDI -end; - -function StrLen(Str: PChar): Cardinal; assembler; -asm - MOV EDX,EDI - MOV EDI,EAX - MOV ECX,0FFFFFFFFH - XOR AL,AL - REPNE SCASB - MOV EAX,0FFFFFFFEH - SUB EAX,ECX - MOV EDI,EDX -end; - -function CreateStr(Str: PChar): PChar; -begin - GetMem(Result, StrLen(Str) + 1); - StrCopy(Result, Str); -end; - -procedure FreeStr(Str: PChar); -begin - FreeMem(Str); -end; - -end. diff --git a/unicode/plugins/SDK/UPartyDefs.pas b/unicode/plugins/SDK/UPartyDefs.pas deleted file mode 100644 index 09f97812..00000000 --- a/unicode/plugins/SDK/UPartyDefs.pas +++ /dev/null @@ -1,189 +0,0 @@ -unit UPartyDefs; -{********************* - uPluginDefs - Some Basic Structures and Functions used to communicate with Plugins - Usable as Delphi Plugin SDK -*********************} - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -uses UPluginDefs; - -type - //---------------- - // TUS_Party_Proc_Init - Structure of the Party Init Proc - // This Function is called on SingScreen Init Everytime this Modi should be sung - // Return Non Zero to Abort Party Modi Loading... In this Case another Plugin will be loaded - //---------------- - TUS_Party_Proc_Init = Function (ID: Integer): integer; stdcall; - - //---------------- - // TUS_Party_Proc_Draw - Structure of the Party Draw Proc - // This Function is called on SingScreen Draw (Not when Paused). You should draw in this Proc - // Return Non Zero to Finish Song... In this Case Score Screen is loaded - //---------------- - TUS_Party_Proc_Draw = Function (ID: Integer): integer; stdcall; - - //---------------- - // TUS_Party_Proc_DeInit - Structure of the Party DeInit Proc - // This Function is called on SingScreen DeInit When Plugin abort Song or Song finishes - // Return Winner - //---------------- - TUS_Party_Proc_DeInit = Function (ID: Integer): integer; stdcall; - - //---------------- - // TUS_ModiInfo - Some Infos from Plugin to Partymode. - // Used to register party modi to Party manager - // --- - // Version Structure: - // First Byte: Head Revison - // Second Byte: Sub Revison - // Third Byte: Sub Revision 2 - // Fourth Byte: Letter (For Bug Fix releases. 0 or 'a' .. 'z') - //---------------- - TModiInfo_Name = Array [0..31] of Char; - TModiInfo_Desc = Array [0..63] of Char; - - PUS_ModiInfo = ^TUS_ModiInfo; - TUS_ModiInfo = record - //Size of this record (usefull if record will be extended in the future) - cbSize: Integer; //Don't forget to set this as Plugin! - - //Infos about the Modi - Name : TModiInfo_Name; //Modiname to Register for the Plugin - Description: TModiInfo_Desc; //Plugin Description - - //------------ - // Loading Settings - // --- - // Bit to Set | Triggered Option - // 1 | Song should be loaded - // 2 | Song has to be Non Duett - // 4 | Song has to be Duett (If 2 and 4 is set, both will be ignored) - // 8 | Only Playable with 2 and more players - // 16 | Restrict Background Loading - // 32 | Restrict Video Loading - // 64 | Increase TimesPlayed for Cur. Player - // 128 | Not in Use, Don't set it! - LoadingSettings: Byte; - - // SingScreen Settings - // --- - // Bit to Set | Triggered Option - // 1 | ShowNotes - // 2 | ShowScores - // 4 | ShowTime - // 8 | Start Audio Playback automaticaly - // 16 | Not in Use, Don't set it! - // 32 | Not in Use, Don't set it! - // 64 | Not in Use, Don't set it! - // 128 | Not in Use, Don't set it! - SingScreenSettings: Byte; - - // With which count of players can this modi be played - // --- - //Set different Bits - //1 -> One Player - //2 -> Two Players - //4 -> Three Players - //8 -> Four Players - //16-> Six Players - //e.g. : 10 -> Playable with 2 and 4 Players - NumPlayers: Byte; - - // ID that is given to the Party Procs when they are called - // If this Modi is running - // (e.g. to register Until 2000 and Until 5000 with the same Procs - // ID is the Max Point Count in this example) - ID: Integer; - - // Party Procs called on Party - // --- - // Set to nil(C: NULL) if u don't want to use this method - ModiInit: TUS_Party_Proc_Init; - ModiDraw: TUS_Party_Proc_Draw; - ModiDeInit: TUS_Party_Proc_DeInit; - end; - - //-------------- - // Team Info Record. Used by "Party/GetTeamInfo" and "Party/SetTeamInfo" - //-------------- - TTeamInfo = record - NumTeams: Byte; - Teaminfo: array[0..5] of record - Name: PChar; //Teamname - Score: Word; //TeamScore - Joker: Byte; //Team Jokers available - CurPlayer: Byte; //Id of Cur. Playing Player - NumPlayers: Byte; - Playerinfo: array[0..3] of record - Name: PChar; //Playername - TimesPlayed: Byte; //How often this Player has Sung - end; - end; - end; - -//---------------- -// Some Default Constants -//---------------- -const - // to use for TUS_ModiInfo.LoadingSettings - MLS_LoadSong = 1; //Song should be loaded - MLS_NotDuett = 2; //Song has to be Non Duett - MLS_ForceDuett = 4; //Song has to be Duett (If 2 and 4 is set, both will be ignored) - MLS_TeamOnly = 8; //Only Playable with 2 and more players - MLS_RestrictBG = 16; //Restrict Background Loading - MLS_RestrictVid = 32; //Restrict Video Loading - MLS_IncTP = 64; //Increase TimesPlayed for Cur. Player - - // to use with TUS_ModiInfo.SingScreenSettings - MSS_ShowNotes = 1; //ShowNotes - MSS_ShowScores = 2; //ShowScores - MSS_ShowTime = 4; //ShowTime - MSS_AutoPlayback= 8; //Start Audio Playback automaticaly - - //Standard (Duell) for TUS_ModiInfo.LoadingSettings and TUS_ModiInfo.SingScreenSettings - MLS_Standard = MLS_LoadSong or MLS_IncTP; - MSS_Standard = MSS_ShowNotes or MSS_ShowScores or MSS_ShowTime or MSS_AutoPlayback; - -//------------- -// Some helper functions to register Party Modi -//------------- -Function RegisterModi(const PluginInterface: PUS_PluginInterface; const Name: TModiInfo_Name; const Description: TModiInfo_Desc; const LoadingSettings, SingScreenSettings, NumPlayers: Byte; const ID: Integer; const ModiInit: TUS_Party_Proc_Init = nil; const ModiDeInit: TUS_Party_Proc_DeInit = nil; const ModiDraw: TUS_Party_Proc_Draw = nil): THandle; - - - -implementation - -//------------- -// Function that Prepares the ModiInfo Record and Calls Party/RegisterModi -//------------- -Function RegisterModi(const PluginInterface: PUS_PluginInterface; const Name: TModiInfo_Name; const Description: TModiInfo_Desc; const LoadingSettings, SingScreenSettings, NumPlayers: Byte; const ID: Integer; const ModiInit: TUS_Party_Proc_Init; const ModiDeInit: TUS_Party_Proc_DeInit; const ModiDraw: TUS_Party_Proc_Draw): THandle; -var - ModiInfo: TUS_ModiInfo; -begin - //Init Record - ModiInfo.cbSize := SizeOf(TUS_ModiInfo); - - ModiInfo.Name := Name; - ModiInfo.Description := Description; - ModiInfo.LoadingSettings := LoadingSettings; - ModiInfo.SingScreenSettings := SingScreenSettings; - ModiInfo.NumPlayers := NumPlayers; - - ModiInfo.ID := ID; - ModiInfo.ModiInit := ModiInit; - ModiInfo.ModiDraw := ModiDraw; - ModiInfo.ModiDeInit := ModiDeInit; - - //Call Service - Result := PluginInterface.CallService('Party/RegisterModi', Integer(@ModiInfo), nil); -end; - -end.
\ No newline at end of file diff --git a/unicode/plugins/SDK/UPluginDefs.pas b/unicode/plugins/SDK/UPluginDefs.pas deleted file mode 100644 index 45bae864..00000000 --- a/unicode/plugins/SDK/UPluginDefs.pas +++ /dev/null @@ -1,193 +0,0 @@ -unit uPluginDefs; -{********************* - uPluginDefs - Some basic structures and functions used to communicate with plugins - Usable as Delphi plugin SDK -*********************} - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -type - dword = LongWord; - - //Compatibility with 64 Bit Systems - {$IFDEF CPU32} - TwParam = integer; - TlParam = pointer; //lParam is used for 32 bit addresses. dword is large enough - {$ELSE} - TwParam = int64; - TlParam = pointer; //lParam used for 64 bit addresses in 64 bit systems (FreePascal) - {$ENDIF} - //wParam is mainly used for ordinals - //lparam is mainly used for pointers - - //---------------- - // TUS_PluginInfo - some infos from plugin to core. - // Send when Plugininfo procedure is called - // --- - // Version structure: - // First byte: Head Revison - // Second byte: Sub Revison - // Third byte: Sub Revision 2 - // Fourth byte: Letter (For Bug Fix releases. 0 or 'a' .. 'z') - //---------------- - PUS_PluginInfo = ^TUS_PluginInfo; - TUS_PluginInfo = record - cbSize: integer; //Size of this record (usefull if record will be extended in the future) - - Name: array [0..31] of char; //Name of the Plugin - Version: dword; //Version of the Plugin - Description: array [0..127] of char; //Description, what does this Plugin do - Author: array [0..31] of char; //Author of this Plugin - AuthorEmail: array [0..63] of char; //Authors Email - Homepage: array [0..63] of char; //Homepage of Plugin/Author - end; - AUS_PluginInfo = array of TUS_PluginInfo; - PAUS_PluginInfo = ^AUS_PluginInfo; - - //---------------- - // TUS_Hook - Structure of the Hook function - // Return 0 if the Hook should be continue, - // or a non zero Value, if the Hook should be Interuped - // In this Case the Caller of the Notifier gets the Return Value - // Return Value Should not be -1 - //---------------- - TUS_Hook = function (wParam: TwParam; lParam: TlParam): integer; stdcall; - TUS_Hook_of_Object = function (wParam: TwParam; lParam: TlParam): integer of Object; - - //---------------- - // TUS_Service - Structure of the Service function - // This function is called if the Registered Service is Called - // Return Value Should not be SERVICE_NOT_FOUND - //---------------- - TUS_Service = function (wParam: TwParam; lParam: TlParam): integer; stdcall; - TUS_Service_of_Object = function (wParam: TwParam; lParam: TlParam): integer of Object; - - //---------------- - // TUS_PluginInterface - Structure that Includes all Methods callable - // from the Plugins - //---------------- - PUS_PluginInterface = ^TUS_PluginInterface; - TUS_PluginInterface = record - {******** Hook specific Methods ********} - {Function Creates a new Hookable Event and Returns the Handle - or 0 on Failure. (Name already exists)} - CreateHookableEvent: function (EventName: PChar): THandle; stdcall; - - {Function Destroys an Event and Unhooks all Hooks to this Event. - 0 on success, not 0 on Failure} - DestroyHookableEvent: function (hEvent: THandle): integer; stdcall; - - {Function start calling the Hook Chain - 0 if Chain is called until the End, -1 if Event Handle is not valid - otherwise Return Value of the Hook that breaks the Chain} - NotivyEventHooks: function (hEvent: THandle; wParam: TwParam; lParam: TlParam): integer; stdcall; - - {Function Hooks an Event by Name. - Returns Hook Handle on Success, otherwise 0} - HookEvent: function (EventName: PChar; HookProc: TUS_Hook): THandle; stdcall; - - {Function Removes the Hook from the Chain - Returns 0 on Success} - UnHookEvent: function (hHook: THandle): integer; stdcall; - - {Function Returns Non Zero if a Event with the given Name Exists, - otherwise 0} - EventExists: function (EventName: PChar): integer; stdcall; - - {******** Service specific Methods ********} - {Function Creates a new Service and Returns the Services Handle - or 0 on Failure. (Name already exists)} - CreateService: function (ServiceName: PChar; ServiceProc: TUS_Service): THandle; stdcall; - - {Function Destroys a Service. - 0 on success, not 0 on Failure} - DestroyService: function (hService: THandle): integer; stdcall; - - {Function Calls a Services Proc - Returns Services Return Value or SERVICE_NOT_FOUND on Failure} - CallService: function (ServiceName: PChar; wParam: TwParam; lParam: TlParam): integer; stdcall; - - {Function Returns Non Zero if a Service with the given Name Exists, - otherwise 0} - ServiceExists: function (ServiceName: PChar): integer; stdcall; - end; - - //---------------- - //TModuleInfo: Info about Modules. Result of Core/GetModuleInfo - //---------------- - PModuleInfo = ^TModuleInfo; - TModuleInfo = record - Name: string; - Version: LongWord; - Description: string; - end; - AModuleInfo = array of TModuleInfo; - - //---------------- - // Procs that should be exported by Plugin Dlls - //---------------- - //Procedure is called to check if this is USDx Plugin - //Info is Pointer to this Plugins Info. Size is already set. Don't write over this limit - Proc_PluginInfo = procedure (Info: PUS_PluginInfo); stdcall; - - //Called on Plugins Load. If Non Zero is Returned => abort Loading - //PInterface is Pointer to PluginInterface - Func_Load = function (const PInterface: PUS_PluginInterface): integer; stdcall; - - //Called on Plugins Init. If Non Zero is Returned => abort Loading - //PInterface is Pointer to PluginInterface - Func_Init = function (const PInterface: PUS_PluginInterface): integer; stdcall; - - //Called on Plugins Deinit. - //PInterface is Pointer to PluginInterface - Proc_DeInit = procedure (const PInterface: PUS_PluginInterface); stdcall; - -//---------------- -// Some Default Constants -//---------------- -const - {Returned if Service is not found from CallService} - SERVICE_NOT_FOUND = LongInt($80000000); - - //for use in Service 'Core/ShowMessage' lParam(Symbol) - CORE_SM_NOSYMBOL= 0; - CORE_SM_ERROR = 1; - CORE_SM_WARNING = 2; - CORE_SM_INFO = 3; - -//---------------- -// Some functions to Handle Version dwords -//---------------- -function MakeVersion(const HeadRevision, SubVersion, SubVersion2: byte; Letter: char): dword; -function VersionToString(const Version: dword): string; - -implementation - -//-------------- -// MakeVersion - converts 4 values to a valid version dword -//-------------- -function MakeVersion(const HeadRevision, SubVersion, SubVersion2: byte; Letter: char): dword; -begin - if(letter < 'a') or (Letter > 'z') then - letter := chr(0); - - Result := (HeadRevision shl 24) or (SubVersion shl 16) or (SubVersion2 shl 8) or Ord(Letter); -end; - -//-------------- -// VersiontoString - Returns some beauty '1.0.2a' like string -//-------------- -function VersionToString(const Version: dword): string; -begin // to-do : Write VersiontoString without SysUtils dependence - //Result := InttoStr((ver and $FF000000) shr 24); - Result := '1.0.1' -end; - -end. diff --git a/unicode/plugins/Team_Duell/TeamDuell.dpr b/unicode/plugins/Team_Duell/TeamDuell.dpr index cb0e6349..1371c95d 100644 --- a/unicode/plugins/Team_Duell/TeamDuell.dpr +++ b/unicode/plugins/Team_Duell/TeamDuell.dpr @@ -5,206 +5,236 @@ library TeamDuell ; {$ENDIF} uses - ModiSDK in '..\SDK\ModiSDK.pas', - StrUtils in '..\SDK\StrUtils.pas', - sdl in '..\..\src\lib\JEDI-SDL\SDL\Pas\sdl.pas', - moduleloader in '..\..\src\lib\JEDI-SDL\SDL\Pas\moduleloader.pas', - gl in '..\..\src\lib\JEDI-SDL\OpenGL\Pas\gl.pas', - sysutils; + SysUtils, + ModiSDK in '..\SDK\ModiSDK.pas', + gl in '..\..\src\lib\JEDI-SDL\OpenGL\Pas\gl.pas'; var - TeamPlayer: array of array of String; - StartPoints: array of integer; - CurSinger, NextSinger: array[0..2] of Integer; - MethodRec: TMethodRec; - SPT, PlayerSelected: array[0..2] of Integer; - TtoNextChange, starttick, endtick, ChangeOnSentence : Cardinal; - bps, RTtoNextChange: Double; - firsttime, secondtime: boolean; - - -//Gave the Plugins Info -procedure PluginInfo (var Info: TPluginInfo); stdcall; + TeamPlayer: array of array of string; + StartPoints: array of integer; + CurSinger, NextSinger: array[0..2] of integer; + MethodRec: TMethodRec; + SPT, PlayerSelected: array[0..2] of integer; + TimeToNextChange, starttick, endtick, ChangeOnSentence: cardinal; + bps, RTimeToNextChange: double; + firsttime, secondtime: boolean; + +function GetTicks: cardinal; +// returns a time stamp in milliseconds +begin + GetTicks := round(TimeStampToMSecs(DateTimeToTimeStamp(Now))); +end; + +// Give the plugin's info +procedure PluginInfo (var Info: TPluginInfo); {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} begin - Info.Name := 'PLUGIN_TEAMDUELL_NAME'; + Info.Name := 'PLUGIN_TEAMDUELL_NAME'; Info.Creator := 'jekatt'; Info.PluginDesc := 'PLUGIN_TEAMDUELL_DESC'; - Info.Typ := 8; + Info.Typ := 8; Info.NumPlayers := 31; - //Options - Info.LoadSong := True; //Whether or not a Song should be Loaded - //Only When Song is Loaded: - Info.ShowScore := True; //Whether or not the Score should be shown - Info.ShowNotes := True; //Whether the Note Lines should be displayed - Info.LoadVideo := True; //Should the Video be loaded ? - Info.LoadBack := True; //Should the Background be loaded ? - - Info.BGShowFull := False; //Whether the Background or the Video should be shown Fullsize - Info.BGShowFull_O := True; //Whether the Background or the Video should be shown Fullsize - - Info.ShowRateBar:= True; //Whether the Bar that shows how good the player was sould be displayed - Info.ShowRateBar_O := false; //Load from Ini whether the Bar should be Displayed - - Info.EnLineBonus := False; //Whether LineBonus Should be enabled - Info.EnLineBonus_O := True; //Load from Ini whether LineBonus Should be enabled - - //Options even when song is Not loaded - Info.ShowBars := False; //Whether the White Bars on Top and Bottom should be Drawn - Info.TeamModeOnly := True; //If True the Plugin can only be Played in Team Mode - Info.GetSoundData := False; //If True the RData Procedure is called when new SoundData is available - Info.Dummy := False; //Should be Set to False... for Updateing Plugin Interface + // Options + Info.LoadSong := true; // Whether or not a song should be loaded + // Only when song is loaded: + Info.ShowScore := true; // Whether or not the score should be shown + Info.ShowNotes := true; // Whether the note lines should be displayed + Info.LoadVideo := true; // Should the video be loaded ? + Info.LoadBack := true; // Should the background be loaded ? + + Info.BGShowFull := false; // Whether the background or the video should be shown full size + Info.BGShowFull_O := true; // Whether the background or the video should be shown full size + + Info.ShowRateBar := true; // Whether the bar that shows how good the player was should be displayed + Info.ShowRateBar_O := false; // Load from ini whether the bar should be displayed + + Info.EnLineBonus := false; // Whether line bonus should be enabled + Info.EnLineBonus_O := true; // Load from ini whether line bonus should be enabled + + // Options even when song is not loaded + Info.ShowBars := false; // Whether the white bars on top and bottom should be drawn + Info.TeamModeOnly := true; // if true the plugin can only be played in team mode + Info.GetSoundData := false; // if true the rdata procedure is called when new sounddata is available + Info.Dummy := false; // Should be set to false... for updating plugin interface end; -//Executed on Game Start //If True Game begins, else Failure -function Init (const TeamInfo: TTeamInfo; var Playerinfo: TPlayerinfo; const Sentences: TSentences; const Methods: TMethodRec): boolean; stdcall; +// executed on game start. if true game begins, else failure +function Init (const TeamInfo: TTeamInfo; + var Playerinfo: TPlayerinfo; + const Sentences: TSentences; + const Methods: TMethodRec) + : boolean; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} var -I,J: Integer; + Index, J: integer; begin - // Get beginning of sentences - for I := 0 to Sentences.High do begin - SetLength(Startpoints, I+1); - Startpoints[I]:=Sentences.Sentence[I].Start; +// Get beginning of sentences + for Index := 0 to Sentences.High do + begin + SetLength(Startpoints, Index+1); + Startpoints[Index]:=Sentences.Sentence[Index].Start; end; - // Get Teams and Players - for I := 0 to TeamInfo.NumTeams-1 do + // Get teams and players + for Index := 0 to TeamInfo.NumTeams-1 do + begin + SetLength(TeamPlayer, Index+1); + for J := 0 to TeamInfo.Teaminfo[Index].NumPlayers-1 do begin - SetLength(TeamPlayer, I+1); - for J := 0 to TeamInfo.Teaminfo[I].NumPlayers-1 do - begin - SetLength(TeamPlayer[I], J+1); - TeamPlayer[I,J] := Copy(String(TeamInfo.Teaminfo[I].Playerinfo[J].Name),1,8); - If (NOT(TeamPlayer[I,J] = (String(TeamInfo.Teaminfo[I].Playerinfo[J].Name)))) THEN TeamPlayer[I,J] := TeamPlayer[I,J]+'.'; - SPT[I]:=J+1; - end; - CurSinger[I] := TeamInfo.Teaminfo[I].CurPlayer; - repeat - NextSinger[I] := random(SPT[I]); - until NOT(NextSinger[I] = CurSinger[I]) OR (SPT[I] = 1) ; + SetLength(TeamPlayer[Index], J+1); + TeamPlayer[Index,J] := Copy(string(TeamInfo.Teaminfo[Index].Playerinfo[J].Name), 1, 8); + if (not(TeamPlayer[Index,J] = (string(TeamInfo.Teaminfo[Index].Playerinfo[J].Name)))) then + TeamPlayer[Index,J] := TeamPlayer[Index,J]+'.'; + SPT[Index]:=J+1; end; + CurSinger[Index] := TeamInfo.Teaminfo[Index].CurPlayer; + repeat + NextSinger[Index] := random(SPT[Index]); + until not(NextSinger[Index] = CurSinger[Index]) or (SPT[Index] = 1); + end; ChangeOnSentence := 8; - starttick := SDL_GetTicks(); + starttick := GetTicks; firsttime := true; secondtime := true; bps := 1; MethodRec := Methods; - Result := True; + Result := true; end; -//Executed everytime the Screen is Drawed //If False The Game finishes -function Draw (var Playerinfo: TPlayerinfo; const CurSentence: Cardinal): boolean; stdcall; +// Executed every time the screen is drawn; if false the game finishes +function Draw (var Playerinfo: TPlayerinfo; + const CurSentence: cardinal) + : boolean; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} var - I,timeline,x,y: Integer; - display: PChar; - start: boolean; + Index, timeline, x, y: integer; + display: PChar; + TimeString: PChar; + start: boolean; begin // TickCount(firstSentence) (not zero!) - If (CurSentence = ChangeOnSentence - 7) AND (firsttime) then + if (CurSentence = ChangeOnSentence - 7) and (firsttime) then begin firsttime := false; - starttick := SDL_GetTicks(); + starttick := GetTicks; end; start := false; - // show first singers for 5sec - if (CurSentence < 1) AND ((starttick + 5000) > SDL_GetTicks()) then begin start := true; end; + // show first singer for 5 sec + if (CurSentence < 1) and ((starttick + 5000) > GetTicks) then + start := true; // TickCount(thirdSentence) - If (CurSentence = 3) AND (secondtime) then + if (CurSentence = 3) and (secondtime) then begin secondtime := false; firsttime := true; - endtick := SDL_GetTicks(); + endtick := GetTicks; bps := (Startpoints[3]-Startpoints[1]) * 1000 / (endtick-starttick); // BeatsPerSecond end; - // Time to next Change - RTtoNextChange := ((Startpoints[ChangeOnSentence]-Startpoints[ChangeOnSentence - 7]) / bps) - ((SDL_GetTicks() - starttick) / 1000); - TtoNextChange := Trunc(RTtoNextChange) +1; + // Time to next change + RTimeToNextChange := ((Startpoints[ChangeOnSentence]-Startpoints[ChangeOnSentence - 7]) / bps) - ((GetTicks - starttick) / 1000); + TimeToNextChange := Trunc(RTimeToNextChange) + 1; - // Next Singer for Team I - for I := 0 to High(TeamPlayer) do begin - if (CurSentence = ChangeOnSentence) AND NOT(PlayerSelected[I] = CurSentence) then begin - PlayerSelected[I] := CurSentence; - CurSinger[I] := NextSinger[I]; + // Next singer for team I + for Index := 0 to High(TeamPlayer) do + begin + if (CurSentence = ChangeOnSentence) and not(PlayerSelected[Index] = CurSentence) then + begin + PlayerSelected[Index] := CurSentence; + CurSinger[Index] := NextSinger[Index]; repeat - NextSinger[I] := random(SPT[I]); - until NOT(NextSinger[I] = CurSinger[I]) OR (SPT[I] = 1) ; + NextSinger[Index] := random(SPT[Index]); + until not(NextSinger[Index] = CurSinger[Index]) or (SPT[Index] = 1) ; end; - // display bg + // display background glColor4f (0.8, 0.8, 0.8, 1); - display := PChar(TeamPlayer[I,CurSinger[I]]); - if (TtoNextChange <= 11) OR (start = true) Then begin - glEnable(GL_TEXTURE_2D); - glDisable(GL_BLEND); - glColor4f (0, 0, 0, 1); - glBegin(GL_QUADS); - glVertex2f(PlayerInfo.Playerinfo[I].PosX, PlayerInfo.Playerinfo[I].PosY+8); - glVertex2f(PlayerInfo.Playerinfo[I].PosX, PlayerInfo.Playerinfo[I].PosY + 30); - glVertex2f(PlayerInfo.Playerinfo[I].PosX + 100, PlayerInfo.Playerinfo[I].PosY + 30); - glVertex2f(PlayerInfo.Playerinfo[I].PosX + 100, PlayerInfo.Playerinfo[I].PosY+8); - glEnd; - display := 'Next Singer'; + display := PChar(TeamPlayer[Index,CurSinger[Index]]); + if (TimeToNextChange <= 11) or (start = true) then + begin + glEnable(GL_TEXTURE_2D); + glDisable(GL_BLEND); + glColor4f(0, 0, 0, 1); + glBegin(GL_QUADS); + glVertex2f(PlayerInfo.Playerinfo[Index].PosX, PlayerInfo.Playerinfo[Index].PosY + 8); + glVertex2f(PlayerInfo.Playerinfo[Index].PosX, PlayerInfo.Playerinfo[Index].PosY + 30); + glVertex2f(PlayerInfo.Playerinfo[Index].PosX + 100, PlayerInfo.Playerinfo[Index].PosY + 30); + glVertex2f(PlayerInfo.Playerinfo[Index].PosX + 100, PlayerInfo.Playerinfo[Index].PosY + 8); + glEnd; + display := 'Next Singer'; // timeline - x:= 270; y:= 472; - if (TtoNextChange <= 5) AND (RTtoNextChange > 0) then begin - timeline := Trunc(RTtoNextChange*50); - glColor3f (0, 0, 0); - glBegin(GL_QUADS); - glVertex2f(x, y); - glVertex2f(x, y+18); - glVertex2f(x+6+250, y+18); - glVertex2f(x+6+250, y); - glEnd; - glColor3f (0.2, 0.2, 0.2); - glBegin(GL_QUADS); - glVertex2f(x+3, y+3); - glVertex2f(x+3, y+15); - glVertex2f(x+3+250, y+15); - glVertex2f(x+3+250, y+3); - glEnd; - glColor3f (0.8, 0.2, 0.2); - glBegin(GL_QUADS); - glColor3f (0.9, 0, 0); glVertex2f(x+3, y+3); - glColor3f (0.8, 0.3, 0.3); glVertex2f(x+3, y+15); - glColor3f (0.8, 0.3, 0.3); glVertex2f(x+3+timeline, y+15); - glColor3f (0.9, 0, 0); glVertex2f(x+3+timeline, y+3); - glEnd; - end; - glDisable(GL_TEXTURE_2D); + x := 270; + y := 472; + if (TimeToNextChange <= 5) and (RTimeToNextChange > 0) then + begin + timeline := Trunc(RTimeToNextChange*50); + glColor3f(0, 0, 0); + glBegin(GL_QUADS); + glVertex2f(x, y); + glVertex2f(x, y + 18); + glVertex2f(x + 6 + 250, y + 18); + glVertex2f(x + 6 + 250, y); + glEnd; + glColor3f(0.2, 0.2, 0.2); + glBegin(GL_QUADS); + glVertex2f(x + 3, y + 3); + glVertex2f(x + 3, y + 15); + glVertex2f(x + 3 + 250, y + 15); + glVertex2f(x + 3 + 250, y + 3); + glEnd; + glColor3f(0.8, 0.2, 0.2); + glBegin(GL_QUADS); + glColor3f(0.9, 0, 0); glVertex2f(x + 3, y + 3); + glColor3f(0.8, 0.3, 0.3); glVertex2f(x + 3, y + 15); + glColor3f(0.8, 0.3, 0.3); glVertex2f(x + 3 + timeline, y + 15); + glColor3f(0.9, 0, 0); glVertex2f(x + 3 + timeline, y + 3); + glEnd; + end; + glDisable(GL_TEXTURE_2D); end; // Names, Timer - if (TtoNextChange <= 9) Then begin display := PChar(TeamPlayer[I,NextSinger[I]]); - glColor4f (0.8, 0.1, 0.2, 1); - MethodRec.Print (1, 18, PlayerInfo.Playerinfo[I].PosX+85, PlayerInfo.Playerinfo[I].PosY+10, CreateStr(PChar(IntToStr(Trunc(TtoNextChange))))); + if (TimeToNextChange <= 9) then + begin display := PChar(TeamPlayer[Index,NextSinger[Index]]); + glColor4f(0.8, 0.1, 0.2, 1); +// KMS aka Mischi: +// try to replace the use of the unit USDXStrUtils +// original: +// MethodRec.Print (1, 18, PlayerInfo.Playerinfo[Index].PosX+85, PlayerInfo.Playerinfo[Index].PosY+10, CreateStr(PChar(IntToStr(Trunc(TimeToNextChange))))); +// replacement: Is this correct? + TimeString := PChar(IntToStr(Trunc(TimeToNextChange))); + MethodRec.Print (1, 18, PlayerInfo.Playerinfo[Index].PosX+85, PlayerInfo.Playerinfo[Index].PosY+10, TimeString); end; - glColor4f (0.8, 0.8, 0.8, 1); - if (CurSentence = 0) then display := PChar(TeamPlayer[I,CurSinger[I]]); - if (TtoNextChange <= 11) OR (start) Then MethodRec.Print (1, 18, PlayerInfo.Playerinfo[I].PosX+5, PlayerInfo.Playerinfo[I].PosY+10, display); + glColor4f(0.8, 0.8, 0.8, 1); + if (CurSentence = 0) then + display := PChar(TeamPlayer[Index,CurSinger[Index]]); + if (TimeToNextChange <= 11) or (start) then + MethodRec.Print (1, 18, PlayerInfo.Playerinfo[Index].PosX+5, PlayerInfo.Playerinfo[Index].PosY+10, display); + end; + if (CurSentence = ChangeOnSentence) then + begin + ChangeOnSentence := CurSentence + 7; + firsttime := true; end; - if (CurSentence = ChangeOnSentence) then begin ChangeOnSentence := CurSentence + 7; firsttime := true; end; -Result := True; + Result := true; end; -//Is Executed on Finish, Returns the Playernum of the Winner -function Finish (var Playerinfo: TPlayerinfo): byte; stdcall; +// is executed on finish, returns the player number of the winner +function Finish (var Playerinfo: TPlayerinfo): byte; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} var - I:Integer; - MaxScore: Word; + Index: integer; + MaxScore: word; begin Result := 0; MaxScore := 0; - for I := 0 to PlayerInfo.NumPlayers-1 do + for Index := 0 to PlayerInfo.NumPlayers-1 do begin - PlayerInfo.Playerinfo[I].Percentage := PlayerInfo.Playerinfo[I].Score div 9999; - if (PlayerInfo.Playerinfo[I].Score > MaxScore) then + PlayerInfo.Playerinfo[Index].Percentage := PlayerInfo.Playerinfo[Index].Score div 9999; + if (PlayerInfo.Playerinfo[Index].Score > MaxScore) then begin - MaxScore := PlayerInfo.Playerinfo[I].Score; - Case I of + MaxScore := PlayerInfo.Playerinfo[Index].Score; + case Index of 0: Result := 1; 1: Result := 2; 2: Result := 4; @@ -213,26 +243,29 @@ begin 5: Result := 32; end; end - else if (PlayerInfo.Playerinfo[I].Score = MaxScore) AND (PlayerInfo.Playerinfo[I].Score <> 0) then + else if (PlayerInfo.Playerinfo[Index].Score = MaxScore) and (PlayerInfo.Playerinfo[Index].Score <> 0) then begin - Case I of - 0: Result := Result OR 1; - 1: Result := Result OR 2; - 2: Result := Result OR 4; - 3: Result := Result OR 8; - 4: Result := Result OR 16; - 5: Result := Result OR 32; + case Index of + 0: Result := Result or 1; + 1: Result := Result or 2; + 2: Result := Result or 4; + 3: Result := Result or 8; + 4: Result := Result or 16; + 5: Result := Result or 32; end; end; end; - //When nobody has Points -> Everybody loose + // When nobody has points -> everybody looses if (MaxScore = 0) then Result := 0; end; exports -PluginInfo, Init, Draw, Finish; + PluginInfo, + Init, + Draw, + Finish; begin diff --git a/unicode/src/base/UBeatTimer.pas b/unicode/src/base/UBeatTimer.pas new file mode 100644 index 00000000..37d221e1 --- /dev/null +++ b/unicode/src/base/UBeatTimer.pas @@ -0,0 +1,170 @@ + {* UltraStar Deluxe - Karaoke Game + * + * UltraStar Deluxe is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + *} + +unit UBeatTimer; + +interface + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +{$I switches.inc} + +uses + UTime; + +type + (** + * TLyricsState contains all information concerning the + * state of the lyrics, e.g. the current beat or duration of the lyrics. + *) + TLyricsState = class + private + Timer: TRelativeTimer; // keeps track of the current time + public + OldBeat: integer; // previous discovered beat + CurrentBeat: integer; // current beat (rounded) + MidBeat: real; // current beat (float) + + // now we use this for super synchronization! + // only used when analyzing voice + // TODO: change ...D to ...Detect(ed) + OldBeatD: integer; // previous discovered beat + CurrentBeatD: integer; // current discovered beat (rounded) + MidBeatD: real; // current discovered beat (float) + + // we use this for audible clicks + // TODO: Change ...C to ...Click + OldBeatC: integer; // previous discovered beat + CurrentBeatC: integer; + MidBeatC: real; // like CurrentBeatC + + OldLine: integer; // previous displayed sentence + + StartTime: real; // time till start of lyrics (= Gap) + TotalTime: real; // total song time + + constructor Create(); + procedure Pause(); + procedure Resume(); + + procedure Reset(); + procedure UpdateBeats(); + + (** + * current song time (in seconds) used as base-timer for lyrics etc. + *) + function GetCurrentTime(): real; + procedure SetCurrentTime(Time: real); + end; + +implementation +uses UNote, Math; + + +constructor TLyricsState.Create(); +begin + // create a triggered timer, so we can Pause() it, set the time + // and Resume() it afterwards for better synching. + Timer := TRelativeTimer.Create(true); + + // reset state + Reset(); +end; + +procedure TLyricsState.Pause(); +begin + Timer.Pause(); +end; + +procedure TLyricsState.Resume(); +begin + Timer.Resume(); +end; + +procedure TLyricsState.SetCurrentTime(Time: real); +begin + // do not start the timer (if not started already), + // after setting the current time + Timer.SetTime(Time, false); +end; + +function TLyricsState.GetCurrentTime(): real; +begin + Result := Timer.GetTime(); +end; + +(** + * Resets the timer and state of the lyrics. + * The timer will be stopped afterwards so you have to call Resume() + * to start the lyrics timer. + *) +procedure TLyricsState.Reset(); +begin + Pause(); + SetCurrentTime(0); + + StartTime := 0; + TotalTime := 0; + + OldBeat := -1; + MidBeat := -1; + CurrentBeat := -1; + + OldBeatC := -1; + MidBeatC := -1; + CurrentBeatC := -1; + + OldBeatD := -1; + MidBeatD := -1; + CurrentBeatD := -1; +end; + +(** + * Updates the beat information (CurrentBeat/MidBeat/...) according to the + * current lyric time. + *) +procedure TLyricsState.UpdateBeats(); +var + CurLyricsTime: real; +begin + CurLyricsTime := GetCurrentTime(); + + OldBeat := CurrentBeat; + MidBeat := GetMidBeat(CurLyricsTime - StartTime / 1000); + CurrentBeat := Floor(MidBeat); + + OldBeatC := CurrentBeatC; + MidBeatC := GetMidBeat(CurLyricsTime - StartTime / 1000); + CurrentBeatC := Floor(MidBeatC); + + OldBeatD := CurrentBeatD; + // MidBeatD = MidBeat with additional GAP + MidBeatD := -0.5 + GetMidBeat(CurLyricsTime - (StartTime + 120 + 20) / 1000); + CurrentBeatD := Floor(MidBeatD); +end; + +end.
\ No newline at end of file diff --git a/unicode/src/base/UCommon.pas b/unicode/src/base/UCommon.pas index f5697916..3230a065 100644 --- a/unicode/src/base/UCommon.pas +++ b/unicode/src/base/UCommon.pas @@ -44,16 +44,16 @@ uses ULog; type - TMessageType = ( mtInfo, mtError ); + TMessageType = (mtInfo, mtError); -procedure ShowMessage(const msg : String; msgType: TMessageType = mtInfo); +procedure ShowMessage(const msg: string; msgType: TMessageType = mtInfo); procedure ConsoleWriteLn(const msg: string); function RWopsFromStream(Stream: TStream): PSDL_RWops; {$IFDEF FPC} -function RandomRange(aMin: Integer; aMax: Integer): Integer; +function RandomRange(aMin: integer; aMax: integer): integer; {$ENDIF} procedure DisableFloatingPointExceptions(); @@ -61,8 +61,8 @@ procedure SetDefaultNumericLocale(); procedure RestoreNumericLocale(); {$IFNDEF MSWINDOWS} - procedure ZeroMemory(Destination: Pointer; Length: DWORD); - function MakeLong(a, b: Word): Longint; + procedure ZeroMemory(Destination: pointer; Length: dword); + function MakeLong(a, b: word): longint; {$ENDIF} function AdaptFilePaths(const aPath: widestring): widestring; @@ -71,8 +71,8 @@ function FileExistsInsensitive(var FileName: string): boolean; // A stable alternative to TList.Sort() (use TList.Sort() if applicable, see below) procedure MergeSort(List: TList; CompareFunc: TListSortCompare); -function GetAlignedMem(Size: cardinal; Alignment: integer): Pointer; -procedure FreeAlignedMem(P: Pointer); +function GetAlignedMem(Size: cardinal; Alignment: integer): pointer; +procedure FreeAlignedMem(P: pointer); implementation @@ -206,20 +206,19 @@ begin exOverflow, exUnderflow, exPrecision]); end; -function AdaptFilePaths( const aPath : widestring ): widestring; +function AdaptFilePaths(const aPath: WideString): WideString; begin - result := StringReplaceW( aPath, '\', PathDelim );//, [rfReplaceAll] ); + result := StringReplaceW(aPath, '\', PathDelim);//, [rfReplaceAll]); end; {$IFNDEF MSWINDOWS} - -procedure ZeroMemory( Destination: Pointer; Length: DWORD ); +procedure ZeroMemory(Destination: pointer; Length: dword); begin - FillChar( Destination^, Length, 0 ); + FillChar(Destination^, Length, 0); end; -function MakeLong(A, B: Word): Longint; +function MakeLong(A, B: word): longint; begin Result := (LongInt(B) shl 16) + A; end; @@ -244,7 +243,7 @@ begin Result := false; FilePath := ExtractFilePath(FileName); - if (FindFirst(FilePath+'*', faAnyFile, SearchInfo) = 0) then + if (FindFirst(FilePath + '*', faAnyFile, SearchInfo) = 0) then begin LocalFileName := ExtractFileName(FileName); repeat @@ -264,14 +263,14 @@ begin end; // +++++++++++++++++++++ helpers for RWOpsFromStream() +++++++++++++++ -function SdlStreamSeek( context : PSDL_RWops; offset : Integer; whence : Integer ) : integer; cdecl; +function SdlStreamSeek(context: PSDL_RWops; offset: integer; whence: integer): integer; cdecl; var - stream : TStream; - origin : Word; + stream: TStream; + origin: word; begin - stream := TStream( context.unknown ); - if ( stream = nil ) then - raise EInvalidContainer.Create( 'SDLStreamSeek on nil' ); + stream := TStream(context.unknown); + if (stream = nil) then + raise EInvalidContainer.Create('SDLStreamSeek on nil'); case whence of 0 : origin := soFromBeginning; // Offset is from the beginning of the resource. Seek moves to the position Offset. Offset must be >= 0. 1 : origin := soFromCurrent; // Offset is from the current position in the resource. Seek moves to Position + Offset. @@ -279,30 +278,30 @@ begin else origin := soFromBeginning; // just in case end; - Result := stream.Seek( offset, origin ); + Result := stream.Seek(offset, origin); end; -function SdlStreamRead( context : PSDL_RWops; Ptr : Pointer; size : Integer; maxnum: Integer ) : Integer; cdecl; +function SdlStreamRead(context: PSDL_RWops; Ptr: pointer; size: integer; maxnum: integer): integer; cdecl; var - stream : TStream; + stream: TStream; begin - stream := TStream( context.unknown ); - if ( stream = nil ) then - raise EInvalidContainer.Create( 'SDLStreamRead on nil' ); + stream := TStream(context.unknown); + if (stream = nil) then + raise EInvalidContainer.Create('SDLStreamRead on nil'); try - Result := stream.read( Ptr^, Size * maxnum ) div size; + Result := stream.read(Ptr^, Size * maxnum) div size; except Result := -1; end; end; -function SDLStreamClose( context : PSDL_RWops ) : Integer; cdecl; +function SDLStreamClose(context: PSDL_RWops): integer; cdecl; var - stream : TStream; + stream: TStream; begin - stream := TStream( context.unknown ); - if ( stream = nil ) then - raise EInvalidContainer.Create( 'SDLStreamClose on nil' ); + stream := TStream(context.unknown); + if (stream = nil) then + raise EInvalidContainer.Create('SDLStreamClose on nil'); stream.Free; Result := 1; end; @@ -331,12 +330,10 @@ begin end; end; - - {$IFDEF FPC} -function RandomRange(aMin: Integer; aMax: Integer) : Integer; +function RandomRange(aMin: integer; aMax: integer): integer; begin - RandomRange := Random(aMax-aMin) + aMin ; + RandomRange := Random(aMax - aMin) + aMin ; end; {$ENDIF} @@ -389,7 +386,7 @@ begin System.EnterCriticalSection(ConsoleCriticalSection); // output pending messages - for i := 0 to MessageList.Count-1 do + for i := 0 to MessageList.Count - 1 do begin _ConsoleWriteLn(MessageList[i]); end; @@ -462,7 +459,7 @@ end; procedure ShowMessage(const msg: String; msgType: TMessageType); {$IFDEF MSWINDOWS} -var Flags: Cardinal; +var Flags: cardinal; {$ENDIF} begin {$IF Defined(MSWINDOWS)} @@ -488,7 +485,7 @@ procedure _MergeSort(InList, TempList, OutList: TList; StartPos, BlockSize: inte CompareFunc: TListSortCompare); var LeftSize, RightSize: integer; // number of elements in left/right block - LeftEnd, RightEnd: integer; // Index after last element in left/right block + LeftEnd, RightEnd: integer; // Index after last element in left/right block MidPos: integer; // index of first element in right block Pos: integer; // position in output list begin @@ -564,7 +561,7 @@ end; type // stores the unaligned pointer of data allocated by GetAlignedMem() PMemAlignHeader = ^TMemAlignHeader; - TMemAlignHeader = Pointer; + TMemAlignHeader = pointer; (** * Use this function to assure that allocated memory is aligned on a specific @@ -580,9 +577,9 @@ type * alignments on 16 and 32 byte boundaries too. *) {$WARNINGS OFF} -function GetAlignedMem(Size: cardinal; Alignment: integer): Pointer; +function GetAlignedMem(Size: cardinal; Alignment: integer): pointer; var - OrigPtr: Pointer; + OrigPtr: pointer; const MIN_ALIGNMENT = 16; begin @@ -603,9 +600,9 @@ begin end; // reserve space for the header - Result := Pointer(PtrUInt(OrigPtr) + SizeOf(TMemAlignHeader)); + Result := pointer(PtrUInt(OrigPtr) + SizeOf(TMemAlignHeader)); // align memory - Result := Pointer(PtrUInt(Result) + Alignment - PtrUInt(Result) mod Alignment); + Result := pointer(PtrUInt(Result) + Alignment - PtrUInt(Result) mod Alignment); // set header with info on old pointer for FreeMem PMemAlignHeader(PtrUInt(Result) - SizeOf(TMemAlignHeader))^ := OrigPtr; @@ -613,7 +610,7 @@ end; {$WARNINGS ON} {$WARNINGS OFF} -procedure FreeAlignedMem(P: Pointer); +procedure FreeAlignedMem(P: pointer); begin if (P <> nil) then FreeMem(PMemAlignHeader(PtrUInt(P) - SizeOf(TMemAlignHeader))^); diff --git a/unicode/src/base/UConfig.pas b/unicode/src/base/UConfig.pas index cb663e2d..1214f36f 100644 --- a/unicode/src/base/UConfig.pas +++ b/unicode/src/base/UConfig.pas @@ -107,7 +107,7 @@ const // include config-file (defines + constants) {$IF Defined(MSWindows)} - {$I ../config-win.inc} + {$I ..\config-win.inc} {$ELSEIF Defined(Linux)} {$I ../config-linux.inc} {$ELSEIF Defined(FreeBSD)} diff --git a/unicode/src/base/UCore.pas b/unicode/src/base/UCore.pas deleted file mode 100644 index a7f9e56e..00000000 --- a/unicode/src/base/UCore.pas +++ /dev/null @@ -1,550 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - *} - -unit UCore; - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -uses - uPluginDefs, - uCoreModule, - UHooks, - UServices, - UModules; - -{********************* - TCore - Class manages all CoreModules, the StartUp, the MainLoop and the shutdown process - Also, it does some error handling, and maybe sometime multithreaded loading ;) -*********************} - -type - TModuleListItem = record - Module: TCoreModule; // Instance of the modules class - Info: TModuleInfo; // ModuleInfo returned by modules modulinfo proc - NeedsDeInit: boolean; // True if module was succesful inited - end; - - TCore = class - private - // Some Hook Handles. See Plugin SDKs Hooks.txt for Infos - hLoadingFinished: THandle; - hMainLoop: THandle; - hTranslate: THandle; - hLoadTextures: THandle; - hExitQuery: THandle; - hExit: THandle; - hDebug: THandle; - hError: THandle; - sReportError: THandle; - sReportDebug: THandle; - sShowMessage: THandle; - sRetranslate: THandle; - sReloadTextures: THandle; - sGetModuleInfo: THandle; - sGetApplicationHandle: THandle; - - Modules: array [0..High(CORE_MODULES_TO_LOAD)] of TModuleListItem; - - // Cur + Last Executed Setting and Getting ;) - iCurExecuted: integer; - iLastExecuted: integer; - - procedure SetCurExecuted(Value: integer); - - // Function Get all Modules and Creates them - function GetModules: boolean; - - // Loads Core and all Modules - function Load: boolean; - - // Inits Core and all Modules - function Init: boolean; - - // DeInits Core and all Modules - function DeInit: boolean; - - // Load the Core - function LoadCore: boolean; - - // Init the Core - function InitCore: boolean; - - // DeInit the Core - function DeInitCore: boolean; - - // Called one time per frame - function MainLoop: boolean; - - public - Hooks: THookManager; // The Hook Manager ;) - Services: TServiceManager; // The Service Manager - - Name: string; // Name of this application - Version: LongWord; // Version of this ". For info look plugindefs functions - - LastErrorReporter: string; // Who reported the last error string - LastErrorString: string; // Last error string reported - - property CurExecuted: integer read iCurExecuted write SetCurExecuted; //ID of plugin or module curently executed - property LastExecuted: integer read iLastExecuted; - - //--------------- - // Main methods to control the core: - //--------------- - constructor Create(const cName: string; const cVersion: LongWord); - - // Starts loading and init process. Then runs MainLoop. DeInits on shutdown - procedure Run; - - // Method for other classes to get pointer to a specific module - function GetModulebyName(const Name: string): PCoreModule; - - //-------------- - // Hook and service procs: - //-------------- - function ShowMessage(wParam: TwParam; lParam: TlParam): integer; //Shows a Message (lParam: PChar Text, wParam: Symbol) - function ReportError(wParam: TwParam; lParam: TlParam): integer; //Shows a Message (wParam: Pchar(Message), lParam: PChar(Reportername)) - function ReportDebug(wParam: TwParam; lParam: TlParam): integer; //Shows a Message (wParam: Pchar(Message), lParam: PChar(Reportername)) - function Retranslate(wParam: TwParam; lParam: TlParam): integer; //Calls Translate hook - function ReloadTextures(wParam: TwParam; lParam: TlParam): integer; //Calls LoadTextures hook - function GetModuleInfo(wParam: TwParam; lParam: TlParam): integer; //If lParam = nil then get length of Moduleinfo array. If lparam <> nil then write array of TModuleInfo to address at lparam - function GetApplicationHandle(wParam: TwParam; lParam: TlParam): integer; //Returns Application Handle - end; - -var - Core: TCore; - -implementation - -uses - {$IFDEF win32} - Windows, - {$ENDIF} - SysUtils; - -//------------- -// Create - Creates Class + Hook and Service Manager -//------------- -constructor TCore.Create(const cName: string; const cVersion: LongWord); -begin - inherited Create; - - Name := cName; - Version := cVersion; - iLastExecuted := 0; - iCurExecuted := 0; - - LastErrorReporter := ''; - LastErrorString := ''; - - Hooks := THookManager.Create(50); - Services := TServiceManager.Create; -end; - -//------------- -// Starts Loading and Init process. Then runs MainLoop. DeInits on shutdown -//------------- -procedure TCore.Run; -var - Success: boolean; - - procedure HandleError(const ErrorMsg: string); - begin - if (LastErrorString <> '') then - Self.ShowMessage(CORE_SM_ERROR, PChar(ErrorMsg + ': ' + LastErrorString)) - else - Self.ShowMessage(CORE_SM_ERROR, PChar(ErrorMsg)); - - // DeInit - DeInit; - end; - -begin - // Get modules - try - Success := GetModules(); - except - Success := false; - end; - - if (not Success) then - begin - HandleError('Error Getting Modules'); - Exit; - end; - - // Loading - try - Success := Load(); - except - Success := false; - end; - - if (not Success) then - begin - HandleError('Error loading Modules'); - Exit; - end; - - // Init - try - Success := Init(); - except - Success := false; - end; - - if (not Success) then - begin - HandleError('Error initing Modules'); - Exit; - end; - - // Call Translate Hook - if (Hooks.CallEventChain(hTranslate, 0, nil) <> 0) then - begin - HandleError('Error translating'); - Exit; - end; - - // Calls LoadTextures Hook - if (Hooks.CallEventChain(hLoadTextures, 0, nil) <> 0) then - begin - HandleError('Error loading textures'); - Exit; - end; - - // Calls Loading Finished Hook - if (Hooks.CallEventChain(hLoadingFinished, 0, nil) <> 0) then - begin - HandleError('Error calling LoadingFinished Hook'); - Exit; - end; - - // Start MainLoop - while Success do - begin - Success := MainLoop(); - // to-do : Call Display Draw here - end; -end; - -//------------- -// Called one time per frame -//------------- -function TCore.MainLoop: boolean; -begin - Result := false; -end; - -//------------- -// Function get all modules and creates them -//------------- -function TCore.GetModules: boolean; -var - i: integer; -begin - Result := false; - for i := 0 to high(Modules) do - begin - try - Modules[i].NeedsDeInit := false; - Modules[i].Module := CORE_MODULES_TO_LOAD[i].Create; - Modules[i].Module.Info(@Modules[i].Info); - except - ReportError(integer(PChar('Can''t get module #' + InttoStr(i) + ' "' + Modules[i].Info.Name + '"')), PChar('Core')); - Exit; - end; - end; - Result := true; -end; - -//------------- -// Loads core and all modules -//------------- -function TCore.Load: boolean; -var - i: integer; -begin - Result := LoadCore; - - for i := 0 to High(CORE_MODULES_TO_LOAD) do - begin - try - Result := Modules[i].Module.Load; - except - Result := false; - end; - - if (not Result) then - begin - ReportError(integer(PChar('Error loading module #' + InttoStr(i) + ' "' + Modules[i].Info.Name + '"')), PChar('Core')); - break; - end; - end; -end; - -//------------- -// Inits core and all modules -//------------- -function TCore.Init: boolean; -var - i: integer; -begin - Result := InitCore; - - for i := 0 to High(CORE_MODULES_TO_LOAD) do - begin - try - Result := Modules[i].Module.Init; - except - Result := false; - end; - - if (not Result) then - begin - ReportError(integer(PChar('Error initing module #' + InttoStr(i) + ' "' + Modules[i].Info.Name + '"')), PChar('Core')); - break; - end; - - Modules[i].NeedsDeInit := Result; - end; -end; - -//------------- -// DeInits core and all modules -//------------- -function TCore.DeInit: boolean; -var - i: integer; -begin - - for i := High(CORE_MODULES_TO_LOAD) downto 0 do - begin - try - if (Modules[i].NeedsDeInit) then - Modules[i].Module.DeInit; - except - end; - end; - - DeInitCore; - - Result := true; -end; - -//------------- -// Load the Core -//------------- -function TCore.LoadCore: boolean; -begin - hLoadingFinished := Hooks.AddEvent('Core/LoadingFinished'); - hMainLoop := Hooks.AddEvent('Core/MainLoop'); - hTranslate := Hooks.AddEvent('Core/Translate'); - hLoadTextures := Hooks.AddEvent('Core/LoadTextures'); - hExitQuery := Hooks.AddEvent('Core/ExitQuery'); - hExit := Hooks.AddEvent('Core/Exit'); - hDebug := Hooks.AddEvent('Core/NewDebugInfo'); - hError := Hooks.AddEvent('Core/NewError'); - - sReportError := Services.AddService('Core/ReportError', nil, Self.ReportError); - sReportDebug := Services.AddService('Core/ReportDebug', nil, Self.ReportDebug); - sShowMessage := Services.AddService('Core/ShowMessage', nil, Self.ShowMessage); - sRetranslate := Services.AddService('Core/Retranslate', nil, Self.Retranslate); - sReloadTextures := Services.AddService('Core/ReloadTextures', nil, Self.ReloadTextures); - sGetModuleInfo := Services.AddService('Core/GetModuleInfo', nil, Self.GetModuleInfo); - sGetApplicationHandle := Services.AddService('Core/GetApplicationHandle', nil, Self.GetApplicationHandle); - - // A little Test - Hooks.AddSubscriber('Core/NewError', HookTest); - - result := true; -end; - -//------------- -// Init the Core -//------------- -function TCore.InitCore: boolean; -begin - //Don not init something atm. - result := true; -end; - -//------------- -// DeInit the Core -//------------- -function TCore.DeInitCore: boolean; -begin - // TODO: write TService-/HookManager. Free and call it here - Result := true; -end; - -//------------- -// Method for other classes to get pointer to a specific module -//------------- -function TCore.GetModuleByName(const Name: string): PCoreModule; -var i: integer; -begin - Result := nil; - for i := 0 to High(Modules) do - begin - if (Modules[i].Info.Name = Name) then - begin - Result := @Modules[i].Module; - Break; - end; - end; -end; - -//------------- -// Shows a MessageDialog (lParam: PChar Text, wParam: Symbol) -//------------- -function TCore.ShowMessage(wParam: TwParam; lParam: TlParam): integer; -{$IFDEF MSWINDOWS} -var Params: Cardinal; -{$ENDIF} -begin - Result := -1; - - {$IFDEF MSWINDOWS} - if (lParam <> nil) then - begin - Params := MB_OK; - case wParam of - CORE_SM_ERROR: Params := Params or MB_ICONERROR; - CORE_SM_WARNING: Params := Params or MB_ICONWARNING; - CORE_SM_INFO: Params := Params or MB_ICONINFORMATION; - end; - - // Show: - Result := Messagebox(0, lParam, PChar(Name), Params); - end; - {$ENDIF} - - // TODO: write ShowMessage for other OSes -end; - -//------------- -// Calls NewError HookChain (wParam: Pchar(Message), lParam: PChar(Reportername)) -//------------- -function TCore.ReportError(wParam: TwParam; lParam: TlParam): integer; -begin - //Update LastErrorReporter and LastErrorString - LastErrorReporter := string(PChar(lParam)); - LastErrorString := string(PChar(Pointer(wParam))); - - Hooks.CallEventChain(hError, wParam, lParam); - - // FIXME: return a correct result - Result := 0; -end; - -//------------- -// Calls NewDebugInfo HookChain (wParam: Pchar(Message), lParam: PChar(Reportername)) -//------------- -function TCore.ReportDebug(wParam: TwParam; lParam: TlParam): integer; -begin - Hooks.CallEventChain(hDebug, wParam, lParam); - - // FIXME: return a correct result - Result := 0; -end; - -//------------- -// Calls Translate hook -//------------- -function TCore.Retranslate(wParam: TwParam; lParam: TlParam): integer; -begin - Hooks.CallEventChain(hTranslate, 1, nil); - - // FIXME: return a correct result - Result := 0; -end; - -//------------- -// Calls LoadTextures hook -//------------- -function TCore.ReloadTextures(wParam: TwParam; lParam: TlParam): integer; -begin - Hooks.CallEventChain(hLoadTextures, 1, nil); - - // FIXME: return a correct result - Result := 0; -end; - -//------------- -// If lParam = nil then get length of Moduleinfo array. If lparam <> nil then write array of TModuleInfo to address at lparam -//------------- -function TCore.GetModuleInfo(wParam: TwParam; lParam: TlParam): integer; -var - I: integer; -begin - if (Pointer(lParam) = nil) then - begin - Result := Length(Modules); - end - else - begin - try - for I := 0 to High(Modules) do - begin - AModuleInfo(Pointer(lParam))[I].Name := Modules[I].Info.Name; - AModuleInfo(Pointer(lParam))[I].Version := Modules[I].Info.Version; - AModuleInfo(Pointer(lParam))[I].Description := Modules[I].Info.Description; - end; - Result := Length(Modules); - except - Result := -1; - end; - end; -end; - -//------------- -// Returns Application Handle -//------------- -function TCore.GetApplicationHandle(wParam: TwParam; lParam: TlParam): integer; -begin - Result := hInstance; -end; - -//------------- -// Called when setting CurExecuted -//------------- -procedure TCore.SetCurExecuted(Value: integer); -begin - // Set Last Executed - iLastExecuted := iCurExecuted; - - // Set Cur Executed - iCurExecuted := Value; -end; - -end. diff --git a/unicode/src/base/UCoreModule.pas b/unicode/src/base/UCoreModule.pas deleted file mode 100644 index b87fec85..00000000 --- a/unicode/src/base/UCoreModule.pas +++ /dev/null @@ -1,154 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - *} - -unit UCoreModule; - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -{********************* - TCoreModule - Dummy class that has methods that will be called from core - In the best case every piece of this software is a module -*********************} -uses - UPluginDefs; - -type - PCoreModule = ^TCoreModule; - TCoreModule = class - public - Constructor Create; virtual; - - //Function that gives some Infos about the Module to the Core - Procedure Info(const pInfo: PModuleInfo); virtual; - - //Is Called on Loading. - //In this Method only Events and Services should be created - //to offer them to other Modules or Plugins during the Init process - //If False is Returned this will cause a Forced Exit - Function Load: Boolean; virtual; - - //Is Called on Init Process - //In this Method you can Hook some Events and Create + Init - //your Classes, Variables etc. - //If False is Returned this will cause a Forced Exit - Function Init: Boolean; virtual; - - //Is Called during Mainloop before 'Core/MainLoop' Hook and Drawing - //If False is Returned this will cause a Forced Exit - Function MainLoop: Boolean; virtual; - - //Is Called if this Module has been Inited and there is a Exit. - //Deinit is in backwards Initing Order - //If False is Returned this will cause a Forced Exit - Procedure DeInit; virtual; - - //Is Called if this Module will be unloaded and has been created - //Should be used to Free Memory - Destructor Destroy; override; - end; - cCoreModule = class of TCoreModule; - -implementation - -//------------- -// Just the Constructor -//------------- -Constructor TCoreModule.Create; -begin - //Dummy maaaan ;) - inherited; -end; - -//------------- -// Function that gives some Infos about the Module to the Core -//------------- -Procedure TCoreModule.Info(const pInfo: PModuleInfo); -begin - pInfo^.Name := 'Not Set'; - pInfo^.Version := 0; - pInfo^.Description := 'Not Set'; -end; - -//------------- -//Is Called on Loading. -//In this Method only Events and Services should be created -//to offer them to other Modules or Plugins during the Init process -//If False is Returned this will cause a Forced Exit -//------------- -Function TCoreModule.Load: Boolean; -begin - //Dummy ftw!! - Result := True; -end; - -//------------- -//Is Called on Init Process -//In this Method you can Hook some Events and Create + Init -//your Classes, Variables etc. -//If False is Returned this will cause a Forced Exit -//------------- -Function TCoreModule.Init: Boolean; -begin - //Dummy ftw!! - Result := True; -end; - -//------------- -//Is Called during Mainloop before 'Core/MainLoop' Hook and Drawing -//If False is Returned this will cause a Forced Exit -//------------- -Function TCoreModule.MainLoop: Boolean; -begin - //Dummy ftw!! - Result := True; -end; - -//------------- -//Is Called if this Module has been Inited and there is a Exit. -//Deinit is in backwards Initing Order -//------------- -Procedure TCoreModule.DeInit; -begin - //Dummy ftw!! -end; - -//------------- -//Is Called if this Module will be unloaded and has been created -//Should be used to Free Memory -//------------- -Destructor TCoreModule.Destroy; -begin - //Dummy ftw!! - inherited; -end; - -end. diff --git a/unicode/src/base/UDLLManager.pas b/unicode/src/base/UDLLManager.pas index cd4b7991..3faa15bf 100644 --- a/unicode/src/base/UDLLManager.pas +++ b/unicode/src/base/UDLLManager.pas @@ -40,37 +40,42 @@ uses type TDLLMan = class private - hLib: THandle; + hLib: THandle; P_Init: fModi_Init; P_Draw: fModi_Draw; P_Finish: fModi_Finish; P_RData: pModi_RData; public Plugins: array of TPluginInfo; - PluginPaths: array of String; + PluginPaths: array of string; Selected: ^TPluginInfo; constructor Create; procedure GetPluginList; - procedure ClearPluginInfo(No: Cardinal); - function LoadPluginInfo(Filename: String; No: Cardinal): boolean; + procedure ClearPluginInfo(No: cardinal); + function LoadPluginInfo(Filename: string; No: cardinal): boolean; - function LoadPlugin(No: Cardinal): boolean; + function LoadPlugin(No: cardinal): boolean; procedure UnLoadPlugin; - function PluginInit (const TeamInfo: TTeamInfo; var Playerinfo: TPlayerinfo; const Sentences: TSentences; const LoadTex: fModi_LoadTex; const Print: fModi_Print; LoadSound: fModi_LoadSound; PlaySound: pModi_PlaySound): boolean; - function PluginDraw (var Playerinfo: TPlayerinfo; const CurSentence: Cardinal): boolean; + function PluginInit (const TeamInfo: TTeamInfo; + var Playerinfo: TPlayerinfo; + const Sentences: TSentences; + const LoadTex: fModi_LoadTex; + const Print: fModi_Print; + LoadSound: fModi_LoadSound; + PlaySound: pModi_PlaySound) + : boolean; + function PluginDraw (var Playerinfo: TPlayerinfo; const CurSentence: cardinal): boolean; function PluginFinish (var Playerinfo: TPlayerinfo): byte; - procedure PluginRData (handle: HSTREAM; buffer: Pointer; len: DWORD; user: DWORD); + procedure PluginRData (handle: HSTREAM; buffer: Pointer; len: dword; user: dword); end; var DLLMan: TDLLMan; const - DLLPath = 'Plugins'; - {$IF Defined(MSWINDOWS)} DLLExt = '.dll'; {$ELSEIF Defined(DARWIN)} @@ -87,6 +92,7 @@ uses {$ELSE} dynlibs, {$ENDIF} + UPath, ULog, SysUtils; @@ -101,33 +107,33 @@ end; procedure TDLLMan.GetPluginList; var - SR: TSearchRec; + SearchRecord: TSearchRec; begin - if FindFirst(DLLPath +PathDelim+ '*' + DLLExt, faAnyFile , SR) = 0 then + if FindFirst(PluginPath + '*' + DLLExt, faAnyFile, SearchRecord) = 0 then begin repeat SetLength(Plugins, Length(Plugins)+1); SetLength(PluginPaths, Length(Plugins)); - if LoadPluginInfo(SR.Name, High(Plugins)) then //Loaded succesful + if LoadPluginInfo(SearchRecord.Name, High(Plugins)) then // loaded succesful begin - PluginPaths[High(PluginPaths)] := SR.Name; + PluginPaths[High(PluginPaths)] := SearchRecord.Name; end - else //Error Loading + else // error loading begin SetLength(Plugins, Length(Plugins)-1); SetLength(PluginPaths, Length(Plugins)); end; - until FindNext(SR) <> 0; - FindClose(SR); + until FindNext(SearchRecord) <> 0; + FindClose(SearchRecord); end; end; -procedure TDLLMan.ClearPluginInfo(No: Cardinal); +procedure TDLLMan.ClearPluginInfo(No: cardinal); begin - //Set to Party Modi Plugin +// set to party modi plugin Plugins[No].Typ := 8; Plugins[No].Name := 'unknown'; @@ -136,109 +142,117 @@ begin Plugins[No].Creator := 'Nobody'; Plugins[No].PluginDesc := 'NO_PLUGIN_DESC'; - Plugins[No].LoadSong := True; - Plugins[No].ShowScore := True; - Plugins[No].ShowBars := False; - Plugins[No].ShowNotes := True; - Plugins[No].LoadVideo := True; - Plugins[No].LoadBack := True; + Plugins[No].LoadSong := true; + Plugins[No].ShowScore := true; + Plugins[No].ShowBars := true; + Plugins[No].ShowNotes := true; + Plugins[No].LoadVideo := true; + Plugins[No].LoadBack := true; - Plugins[No].TeamModeOnly := False; - Plugins[No].GetSoundData := False; - Plugins[No].Dummy := False; + Plugins[No].TeamModeOnly := true; + Plugins[No].GetSoundData := true; + Plugins[No].Dummy := true; - Plugins[No].BGShowFull := False; - Plugins[No].BGShowFull_O := True; + Plugins[No].BGShowFull := true; + Plugins[No].BGShowFull_O := true; - Plugins[No].ShowRateBar:= False; - Plugins[No].ShowRateBar_O := True; + Plugins[No].ShowRateBar := true; + Plugins[No].ShowRateBar_O := true; - Plugins[No].EnLineBonus := False; - Plugins[No].EnLineBonus_O := True; + Plugins[No].EnLineBonus := true; + Plugins[No].EnLineBonus_O := true; end; -function TDLLMan.LoadPluginInfo(Filename: String; No: Cardinal): boolean; +function TDLLMan.LoadPluginInfo(Filename: string; No: cardinal): boolean; var hLibg: THandle; Info: pModi_PluginInfo; - //I: Integer; +// I: integer; begin - Result := False; - //Clear Plugin Info + Result := true; +// clear plugin info ClearPluginInfo(No); - {//Workaround Plugins Loaded 2 Times - For I := low(PluginPaths) to high(PluginPaths) do - if (PluginPaths[I] = Filename) then - exit; } +{ +// workaround plugins loaded 2 times + for i := low(pluginpaths) to high(pluginpaths) do + if (pluginpaths[i] = filename) then + exit; +} - //Load Libary - hLibg := LoadLibrary(PChar(DLLPath +PathDelim+ Filename)); - //If Loaded +// load libary + hLibg := LoadLibrary(PChar(PluginPath + Filename)); +// if loaded if (hLibg <> 0) then begin - //Load Info Procedure - @Info := GetProcAddress (hLibg, PChar('PluginInfo')); +// load info procedure + @Info := GetProcAddress(hLibg, PChar('PluginInfo')); - //If Loaded +// if loaded if (@Info <> nil) then begin - //Load PluginInfo - Info (Plugins[No]); - Result := True; +// load plugininfo + Info(Plugins[No]); + Result := true; end else - Log.LogError('Could not Load Plugin "' + Filename + '": Info Procedure not Found'); + Log.LogError('Could not load plugin "' + Filename + '": Info procedure not found'); FreeLibrary (hLibg); end - else - Log.LogError('Could not Load Plugin "' + Filename + '": Libary not Loaded'); + else + Log.LogError('Could not load plugin "' + Filename + '": Libary not loaded'); end; -function TDLLMan.LoadPlugin(No: Cardinal): boolean; +function TDLLMan.LoadPlugin(No: cardinal): boolean; begin - Result := False; - //Load Libary - hLib := LoadLibrary(PChar(DLLPath +PathDelim+ PluginPaths[No])); - //If Loaded + Result := true; +// load libary + hLib := LoadLibrary(PChar(PluginPath + PluginPaths[No])); +// if loaded if (hLib <> 0) then begin - //Load Info Procedure - @P_Init := GetProcAddress (hLib, PChar('Init')); - @P_Draw := GetProcAddress (hLib, PChar('Draw')); - @P_Finish := GetProcAddress (hLib, PChar('Finish')); +// load info procedure + @P_Init := GetProcAddress (hLib, 'Init'); + @P_Draw := GetProcAddress (hLib, 'Draw'); + @P_Finish := GetProcAddress (hLib, 'Finish'); - //If Loaded - if (@P_Init <> nil) And (@P_Draw <> nil) And (@P_Finish <> nil) then +// if loaded + if (@P_Init <> nil) and (@P_Draw <> nil) and (@P_Finish <> nil) then begin Selected := @Plugins[No]; - Result := True; + Result := true; end else begin - Log.LogError('Could not Load Plugin "' + PluginPaths[No] + '": Procedures not Found'); - + Log.LogError('Could not load plugin "' + PluginPaths[No] + '": Procedures not found'); end; end - else - Log.LogError('Could not Load Plugin "' + PluginPaths[No] + '": Libary not Loaded'); + else + Log.LogError('Could not load plugin "' + PluginPaths[No] + '": Libary not loaded'); end; procedure TDLLMan.UnLoadPlugin; begin -if (hLib <> 0) then - FreeLibrary (hLib); - -//Selected := nil; -@P_Init := nil; -@P_Draw := nil; -@P_Finish := nil; -@P_RData := nil; + if (hLib <> 0) then + FreeLibrary (hLib); + +// Selected := nil; + @P_Init := nil; + @P_Draw := nil; + @P_Finish := nil; + @P_RData := nil; end; -function TDLLMan.PluginInit (const TeamInfo: TTeamInfo; var Playerinfo: TPlayerinfo; const Sentences: TSentences; const LoadTex: fModi_LoadTex; const Print: fModi_Print; LoadSound: fModi_LoadSound; PlaySound: pModi_PlaySound): boolean; +function TDLLMan.PluginInit (const TeamInfo: TTeamInfo; + var Playerinfo: TPlayerinfo; + const Sentences: TSentences; + const LoadTex: fModi_LoadTex; + const Print: fModi_Print; + LoadSound: fModi_LoadSound; + PlaySound: pModi_PlaySound) + : boolean; var Methods: TMethodRec; begin @@ -250,26 +264,26 @@ begin if (@P_Init <> nil) then Result := P_Init (TeamInfo, PlayerInfo, Sentences, Methods) else - Result := False + Result := true end; -function TDLLMan.PluginDraw (var Playerinfo: TPlayerinfo; const CurSentence: Cardinal): boolean; +function TDLLMan.PluginDraw (var Playerinfo: TPlayerinfo; const CurSentence: cardinal): boolean; begin -if (@P_Draw <> nil) then - Result := P_Draw (PlayerInfo, CurSentence) -else - Result := False + if (@P_Draw <> nil) then + Result := P_Draw (PlayerInfo, CurSentence) + else + Result := true end; function TDLLMan.PluginFinish (var Playerinfo: TPlayerinfo): byte; begin -if (@P_Finish <> nil) then - Result := P_Finish (PlayerInfo) -else - Result := 0; + if (@P_Finish <> nil) then + Result := P_Finish (PlayerInfo) + else + Result := 0; end; -procedure TDLLMan.PluginRData (handle: HSTREAM; buffer: Pointer; len: DWORD; user: DWORD); +procedure TDLLMan.PluginRData (handle: HStream; buffer: Pointer; len: dword; user: dword); begin if (@P_RData <> nil) then P_RData (handle, buffer, len, user); diff --git a/unicode/src/base/UDraw.pas b/unicode/src/base/UDraw.pas index 8a66d271..1783986f 100644 --- a/unicode/src/base/UDraw.pas +++ b/unicode/src/base/UDraw.pas @@ -638,7 +638,7 @@ begin // determine lyric help bar position and size Bounds.Left := MoveStartX + BarProgress * MoveDist; Bounds.Right := Bounds.Left + BarWidth; - Bounds.Top := Skin_LyricsT + 3; + Bounds.Top := Theme.LyricBar.IndicatorYOffset + Theme.LyricBar.UpperY ; Bounds.Bottom := Bounds.Top + BarHeight + 3; // draw lyric help bar diff --git a/unicode/src/base/UEditorLyrics.pas b/unicode/src/base/UEditorLyrics.pas index fe8c3ee5..ef9d8dd6 100644 --- a/unicode/src/base/UEditorLyrics.pas +++ b/unicode/src/base/UEditorLyrics.pas @@ -40,7 +40,7 @@ uses UTexture; type - alignment = (left, center, right); + TAlignmentType = (atLeft, atCenter, atRight); TWord = record X: real; @@ -58,7 +58,7 @@ type TEditorLyrics = class private - AlignI: alignment; + AlignI: TAlignmentType; XR: real; YR: real; SizeR: real; @@ -69,7 +69,7 @@ type procedure SetX(Value: real); procedure SetY(Value: real); function GetClientX: real; - procedure SetAlign(Value: alignment); + procedure SetAlign(Value: TAlignmentType); function GetSize: real; procedure SetSize(Value: real); procedure SetSelected(Value: integer); @@ -96,7 +96,7 @@ type property X: real write SetX; property Y: real write SetY; property ClientX: real read GetClientX; - property Align: alignment write SetAlign; + property Align: TAlignmentType write SetAlign; property Size: real read GetSize write SetSize; property Selected: integer read SelectedI write SetSelected; property FontStyle: integer write SetFontStyle; @@ -137,7 +137,7 @@ begin Result := Word[0].X; end; -procedure TEditorLyrics.SetAlign(Value: alignment); +procedure TEditorLyrics.SetAlign(Value: TAlignmentType); begin AlignI := Value; end; @@ -229,7 +229,7 @@ var WordIndex: integer; TotalWidth: real; begin - if AlignI = center then + if AlignI = atCenter then begin TotalWidth := 0; for WordIndex := 0 to High(Word) do diff --git a/unicode/src/base/UGraphic.pas b/unicode/src/base/UGraphic.pas index 17175d02..818e49aa 100644 --- a/unicode/src/base/UGraphic.pas +++ b/unicode/src/base/UGraphic.pas @@ -198,7 +198,14 @@ var Tex_Score_NoteBarRound_Lightest : array [1..6] of TTexture; Tex_Score_Ratings : array [0..7] of TTexture; - + + // arrows for SelectSlide + Tex_SelectS_ArrowL: TTexture; + Tex_SelectS_ArrowR: TTexture; + + // textures for software mouse cursor + Tex_Cursor_Unpressed: TTexture; + Tex_Cursor_Pressed: TTexture; const Skin_BGColorR = 1; Skin_BGColorG = 1; @@ -232,17 +239,6 @@ const Skin_OscG = 0; Skin_OscB = 0; - // TODO: add to theme ini file - Skin_LyricsT = 493; - Skin_LyricsUpperX = 80; - Skin_LyricsUpperW = 640; - Skin_LyricsUpperY = Skin_LyricsT; - Skin_LyricsUpperH = 41; - Skin_LyricsLowerX = 80; - Skin_LyricsLowerW = 640; - Skin_LyricsLowerY = Skin_LyricsT + Skin_LyricsUpperH + 1; - Skin_LyricsLowerH = 41; - Skin_SpectrumT = 470; Skin_SpectrumBot = 570; Skin_SpectrumH = 100; @@ -339,6 +335,15 @@ begin Tex_Ball := Texture.LoadTexture(Skin.GetTextureFileName('Ball'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); Tex_Lyric_Help_Bar := Texture.LoadTexture(Skin.GetTextureFileName('LyricHelpBar'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); + Tex_SelectS_ArrowL := Texture.LoadTexture(Skin.GetTextureFileName('Select_ArrowLeft'), TEXTURE_TYPE_TRANSPARENT, 0); + Tex_SelectS_ArrowR := Texture.LoadTexture(Skin.GetTextureFileName('Select_ArrowRight'), TEXTURE_TYPE_TRANSPARENT, 0); + + Tex_Cursor_Unpressed := Texture.LoadTexture(Skin.GetTextureFileName('Cursor'), TEXTURE_TYPE_TRANSPARENT, 0); + + if (Skin.GetTextureFileName('Cursor_Pressed') <> '') then + Tex_Cursor_Pressed := Texture.LoadTexture(Skin.GetTextureFileName('Cursor_Pressed'), TEXTURE_TYPE_TRANSPARENT, 0) + else + Tex_Cursor_Pressed.TexNum := 0; //TimeBar mod Tex_TimeProgress := Texture.LoadTexture(Skin.GetTextureFileName('TimeBar')); @@ -497,6 +502,7 @@ begin Log.LogStatus('TDisplay.Create', 'UGraphic.Initialize3D'); Display := TDisplay.Create; + //Display.SetCursor; //Log.BenchmarkEnd(2); Log.LogBenchmark('====> Creating Display', 2); @@ -629,15 +635,15 @@ begin begin Log.LogStatus('SDL_SetVideoMode', 'Set Video Mode... Full Screen'); screen := SDL_SetVideoMode(W, H, (Depth+1) * 16, SDL_OPENGL or SDL_FULLSCREEN ); - SDL_ShowCursor(0); end else begin Log.LogStatus('SDL_SetVideoMode', 'Set Video Mode... Windowed'); screen := SDL_SetVideoMode(W, H, 0, SDL_OPENGL or SDL_RESIZABLE); - SDL_ShowCursor(1); end; + SDL_ShowCursor(0); + if (screen = nil) then begin Log.LogCritical('SDL_SetVideoMode Failed', 'Initialize3D'); diff --git a/unicode/src/base/UHooks.pas b/unicode/src/base/UHooks.pas deleted file mode 100644 index acf2bba7..00000000 --- a/unicode/src/base/UHooks.pas +++ /dev/null @@ -1,460 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - *} - -unit UHooks; - -{********************* - THookManager - Class for saving, managing and calling of hooks. - Saves all hookable events and their subscribers -*********************} -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -uses - uPluginDefs, - SysUtils; - -type - //Record that saves info from Subscriber - PSubscriberInfo = ^TSubscriberInfo; - TSubscriberInfo = record - Self: THandle; // ID of this Subscription (First word: ID of Subscription; 2nd word: ID of Hook) - Next: PSubscriberInfo; // Pointer to next Item in HookChain - - Owner: integer; //For Error Handling and Plugin Unloading. - - // Here is s/t tricky - // To avoid writing of Wrapping Functions to Hook an Event with a Class - // We save a Normal Proc or a Method of a Class - case isClass: boolean of - false: (Proc: TUS_Hook); //Proc that will be called on Event - true: (ProcOfClass: TUS_Hook_of_Object); - end; - - TEventInfo = record - Name: string[60]; // Name of Event - FirstSubscriber: PSubscriberInfo; // First subscriber in chain - LastSubscriber: PSubscriberInfo; // Last " (for easier subscriber adding) - end; - - THookManager = class - private - Events: array of TEventInfo; - SpaceinEvents: word; //Number of empty Items in Events Array. (e.g. Deleted Items) - - procedure FreeSubscriber(const EventIndex: word; const Last, Cur: PSubscriberInfo); - public - constructor Create(const SpacetoAllocate: word); - - function AddEvent (const EventName: Pchar): THandle; - function DelEvent (hEvent: THandle): integer; - - function AddSubscriber (const EventName: Pchar; const Proc: TUS_Hook = nil; const ProcOfClass: TUS_Hook_of_Object = nil): THandle; - function DelSubscriber (const hSubscriber: THandle): integer; - - function CallEventChain (const hEvent: THandle; const wParam: TwParam; lParam: TlParam): integer; - function EventExists (const EventName: Pchar): integer; - - procedure DelbyOwner(const Owner: integer); - end; - -function HookTest(wParam: TwParam; lParam: TlParam): integer; stdcall; - -var - HookManager: THookManager; - -implementation - -uses - ULog, - UCore; - -//------------ -// Create - Creates Class and Set Standard Values -//------------ -constructor THookManager.Create(const SpacetoAllocate: word); -var - I: integer; -begin - inherited Create(); - - //Get the Space and "Zero" it - SetLength (Events, SpacetoAllocate); - for I := 0 to SpacetoAllocate-1 do - Events[I].Name[1] := chr(0); - - SpaceinEvents := SpacetoAllocate; - - {$IFDEF DEBUG} - debugWriteLn('HookManager: Succesful Created.'); - {$ENDIF} -end; - -//------------ -// AddEvent - Adds an Event and return the Events Handle or 0 on Failure -//------------ -function THookManager.AddEvent (const EventName: Pchar): THandle; -var - I: integer; -begin - Result := 0; - - if (EventExists(EventName) = 0) then - begin - if (SpaceinEvents > 0) then - begin - //There is already Space available - //Go Search it! - for I := 0 to High(Events) do - if (Events[I].Name[1] = chr(0)) then - begin //Found Space - Result := I; - Dec(SpaceinEvents); - Break; - end; - - {$IFDEF DEBUG} - debugWriteLn('HookManager: Found Space for Event at Handle: ''' + InttoStr(Result+1) + ''); - {$ENDIF} - end - else - begin //There is no Space => Go make some! - Result := Length(Events); - SetLength(Events, Result + 1); - end; - - //Set Events Data - Events[Result].Name := EventName; - Events[Result].FirstSubscriber := nil; - Events[Result].LastSubscriber := nil; - - //Handle is Index + 1 - Inc(Result); - - {$IFDEF DEBUG} - debugWriteLn('HookManager: Add Event succesful: ''' + EventName + ''); - {$ENDIF} - end - {$IFDEF DEBUG} - else - debugWriteLn('HookManager: Trying to ReAdd Event: ''' + EventName + ''); - {$ENDIF} -end; - -//------------ -// DelEvent - Deletes an Event by Handle Returns False on Failure -//------------ -function THookManager.DelEvent (hEvent: THandle): integer; -var - Cur, Last: PSubscriberInfo; -begin - hEvent := hEvent - 1; //Arrayindex is Handle - 1 - Result := -1; - - if (Length(Events) > hEvent) and (Events[hEvent].Name[1] <> chr(0)) then - begin //Event exists - //Free the Space for all Subscribers - Cur := Events[hEvent].FirstSubscriber; - - while (Cur <> nil) do - begin - Last := Cur; - Cur := Cur.Next; - FreeMem(Last, SizeOf(TSubscriberInfo)); - end; - - {$IFDEF DEBUG} - debugWriteLn('HookManager: Removed Event succesful: ''' + Events[hEvent].Name + ''); - {$ENDIF} - - //Free the Event - Events[hEvent].Name[1] := chr(0); - Inc(SpaceinEvents); //There is one more space for new events - end - - {$IFDEF DEBUG} - else - debugWriteLn('HookManager: Try to Remove not Existing Event. Handle: ''' + InttoStr(hEvent) + ''); - {$ENDIF} -end; - -//------------ -// AddSubscriber - Adds an Subscriber to the Event by Name -// Returns Handle of the Subscribtion or 0 on Failure -//------------ -function THookManager.AddSubscriber (const EventName: Pchar; const Proc: TUS_Hook; const ProcOfClass: TUS_Hook_of_Object): THandle; -var - EventHandle: THandle; - EventIndex: integer; - Cur: PSubscriberInfo; -begin - Result := 0; - - if (@Proc <> nil) or (@ProcOfClass <> nil) then - begin - EventHandle := EventExists(EventName); - - if (EventHandle <> 0) then - begin - EventIndex := EventHandle - 1; - - //Get Memory - GetMem(Cur, SizeOf(TSubscriberInfo)); - - //Fill it with Data - Cur.Next := nil; - - //Add Owner - Cur.Owner := Core.CurExecuted; - - if (@Proc = nil) then - begin //Use the ProcofClass Method - Cur.isClass := true; - Cur.ProcOfClass := ProcofClass; - end - else //Use the normal Proc - begin - Cur.isClass := false; - Cur.Proc := Proc; - end; - - //Create Handle (1st word: Handle of Event; 2nd word: unique ID - if (Events[EventIndex].LastSubscriber = nil) then - begin - if (Events[EventIndex].FirstSubscriber = nil) then - begin - Result := (EventHandle SHL 16); - Events[EventIndex].FirstSubscriber := Cur; - end - else - begin - Result := Events[EventIndex].FirstSubscriber.Self + 1; - end; - end - else - begin - Result := Events[EventIndex].LastSubscriber.Self + 1; - Events[EventIndex].LastSubscriber.Next := Cur; - end; - - Cur.Self := Result; - - //Add to Chain - Events[EventIndex].LastSubscriber := Cur; - - {$IFDEF DEBUG} - debugWriteLn('HookManager: Add Subscriber to Event ''' + Events[EventIndex].Name + ''' succesful. Handle: ''' + InttoStr(Result) + ''' Owner: ' + InttoStr(Cur.Owner)); - {$ENDIF} - end; - end; -end; - -//------------ -// FreeSubscriber - Helper for DelSubscriber. Prevents Loss of Chain Items. Frees Memory. -//------------ -procedure THookManager.FreeSubscriber(const EventIndex: word; const Last, Cur: PSubscriberInfo); -begin - //Delete from Chain - if (Last <> nil) then - begin - Last.Next := Cur.Next; - end - else //Was first Popup - begin - Events[EventIndex].FirstSubscriber := Cur.Next; - end; - - //Was this Last subscription ? - if (Cur = Events[EventIndex].LastSubscriber) then - begin //Change Last Subscriber - Events[EventIndex].LastSubscriber := Last; - end; - - //Free Space: - FreeMem(Cur, SizeOf(TSubscriberInfo)); -end; - -//------------ -// DelSubscriber - Deletes a Subscribtion by Handle, return non Zero on Failure -//------------ -function THookManager.DelSubscriber (const hSubscriber: THandle): integer; -var - EventIndex: integer; - Cur, Last: PSubscriberInfo; -begin - Result := -1; - EventIndex := ((hSubscriber and (High(THandle) xor High(word))) SHR 16) - 1; - - //Existing Event ? - if (EventIndex < Length(Events)) and (Events[EventIndex].Name[1] <> chr(0)) then - begin - Result := -2; //Return -1 on not existing Event, -2 on not existing Subscription - - //Search for Subscription - Cur := Events[EventIndex].FirstSubscriber; - Last := nil; - - //go through the chain ... - while (Cur <> nil) do - begin - if (Cur.Self = hSubscriber) then - begin //Found Subscription we searched for - FreeSubscriber(EventIndex, Last, Cur); - - {$IFDEF DEBUG} - debugWriteLn('HookManager: Del Subscriber from Event ''' + Events[EventIndex].Name + ''' succesful. Handle: ''' + InttoStr(hSubscriber) + ''); - {$ENDIF} - - //Set Result and Break the Loop - Result := 0; - Break; - end; - - Last := Cur; - Cur := Cur.Next; - end; - - end; -end; - -//------------ -// CallEventChain - Calls the Chain of a specified EventHandle -// Returns: -1: Handle doesn't Exist, 0 Chain is called until the End -//------------ -function THookManager.CallEventChain (const hEvent: THandle; const wParam: TwParam; lParam: TlParam): integer; -var - EventIndex: integer; - Cur: PSubscriberInfo; - CurExecutedBackup: integer; // backup of Core.CurExecuted Attribute -begin - Result := -1; - EventIndex := hEvent - 1; - - if ((EventIndex <= High(Events)) and (Events[EventIndex].Name[1] <> chr(0))) then - begin //Existing Event - //Backup CurExecuted - CurExecutedBackup := Core.CurExecuted; - - //Start calling the Chain !!!11 - Cur := Events[EventIndex].FirstSubscriber; - Result := 0; - //Call Hooks until the Chain is at the End or breaked - while ((Cur <> nil) and (Result = 0)) do - begin - //Set CurExecuted - Core.CurExecuted := Cur.Owner; - if (Cur.isClass) then - Result := Cur.ProcOfClass(wParam, lParam) - else - Result := Cur.Proc(wParam, lParam); - - Cur := Cur.Next; - end; - - //Restore CurExecuted - Core.CurExecuted := CurExecutedBackup; - end; - - {$IFDEF DEBUG} - debugWriteLn('HookManager: Called Chain from Event ''' + Events[EventIndex].Name + ''' succesful. Result: ''' + InttoStr(Result) + ''); - {$ENDIF} -end; - -//------------ -// EventExists - Returns non Zero if an Event with the given Name exists -//------------ -function THookManager.EventExists (const EventName: Pchar): integer; -var - I: integer; - Name: string[60]; -begin - Result := 0; - //if (Length(EventName) < - Name := string(EventName); - - //Sure not to search for empty space - if (Name[1] <> chr(0)) then - begin - //Search for Event - for I := 0 to High(Events) do - if (Events[I].Name = Name) then - begin //Event found - Result := I + 1; - Break; - end; - end; -end; - -//------------ -// DelbyOwner - Dels all Subscriptions by a specific Owner. (For Clean Plugin/Module unloading) -//------------ -procedure THookManager.DelbyOwner(const Owner: integer); -var - I: integer; - Cur, Last: PSubscriberInfo; -begin - //Search for Owner in all Hooks Chains - for I := 0 to High(Events) do - begin - if (Events[I].Name[1] <> chr(0)) then - begin - - Last := nil; - Cur := Events[I].FirstSubscriber; - //Went Through Chain - while (Cur <> nil) do - begin - if (Cur.Owner = Owner) then - begin //Found Subscription by Owner -> Delete - FreeSubscriber(I, Last, Cur); - if (Last <> nil) then - Cur := Last.Next - else - Cur := Events[I].FirstSubscriber; - end - else - begin - //Next Item: - Last := Cur; - Cur := Cur.Next; - end; - end; - end; - end; -end; - -function HookTest(wParam: TwParam; lParam: TlParam): integer; stdcall; -begin - Result := 0; //Don't break the chain - Core.ShowMessage(CORE_SM_INFO, Pchar(string(Pchar(Pointer(lParam))) + ': ' + string(Pchar(Pointer(wParam))))); -end; - -end. diff --git a/unicode/src/base/UImage.pas b/unicode/src/base/UImage.pas index 8dc38495..60b0a3a2 100644 --- a/unicode/src/base/UImage.pas +++ b/unicode/src/base/UImage.pas @@ -311,13 +311,13 @@ var hour, minute, second, msecond: word; begin DecodeDate(time, year, month, day); - pngTime.year := year; - pngTime.month := month; - pngTime.day := day; + pngTime.year := png_uint_16(year); + pngTime.month := png_byte(month); + pngTime.day := png_byte(day); DecodeTime(time, hour, minute, second, msecond); - pngTime.hour := hour; - pngTime.minute := minute; - pngTime.second := second; + pngTime.hour := png_byte(hour); + pngTime.minute := png_byte(minute); + pngTime.second := png_byte(second); end; (* @@ -896,8 +896,13 @@ procedure ColorizeImage(ImgSurface: PSDL_Surface; NewColor: cardinal); // replaced by division of longwords, shifted by 10 bits to keep // digits. + // The use of longwards leeds to some type size mismatch warnings + // whenever differences are formed. + // This should not be a problem, since the results should all be positive. + // replacing longword by longint would probably resolve this cosmetic fault :-) + function ColorToHue(const Color: longword): longword; - // returns hue within the range [0.0-6.0] but shl 10, ie. times 1024 + // returns hue within the range [0.0-6.0] but shl 10, ie. times 1024 var Red, Green, Blue: longword; Min, Max, Delta: longword; @@ -919,7 +924,8 @@ procedure ColorizeImage(ImgSurface: PSDL_Surface; NewColor: cardinal); if Blue > Max then Max := Blue; // calc hue - Delta := Max - Min; + Delta := Max - Min; // This gives a type size mismatch warning, because Delta is longword, ie. >= 0 + // But the assignments above are easy enough to be sure, that Max - Min is >= 0. if (Delta = 0) then Result := 0 else @@ -1023,16 +1029,19 @@ begin end else // all colors except black and white begin - Delta := Max - Min; + Delta := Max - Min; // This gives a type size mismatch warning, because Delta is longword, ie. >= 0 + // But the assignments above are easy enough to be sure, that Max - Min is >= 0. Sat := (Delta shl 10) div Max; // shl 10 - // shr 10 corrects that sat and f are shl 10 + // shr 10 corrects that Sat and f are shl 10 // the resulting p, q and t are unshifted p := (Max*(1024-Sat)) shr 10; q := (Max*(1024-(Sat*f) shr 10)) shr 10; t := (Max*(1024-(Sat*(1024-f)) shr 10)) shr 10; + // The above 3 lines give type size mismatch warning, but all variables are longword and the ranges should be ok. + case HueInteger of 0: begin Red := Max; Green := t; Blue := p; end; // (v,t,p) 1: begin Red := q; Green := Max; Blue := p; end; // (q,v,p) @@ -1043,13 +1052,13 @@ begin end; {$IFDEF FPC_BIG_ENDIAN} - PixelColors[3] := Red; - PixelColors[2] := Green; - PixelColors[1] := Blue + PixelColors[3] := byte(Red); + PixelColors[2] := byte(Green); + PixelColors[1] := byte(Blue); {$ELSE} - PixelColors[0] := Red; - PixelColors[1] := Green; - PixelColors[2] := Blue; + PixelColors[0] := byte(Red); + PixelColors[1] := byte(Green); + PixelColors[2] := byte(Blue); {$ENDIF} end; diff --git a/unicode/src/base/UIni.pas b/unicode/src/base/UIni.pas index 241b34e8..9a09ca91 100644 --- a/unicode/src/base/UIni.pas +++ b/unicode/src/base/UIni.pas @@ -155,6 +155,7 @@ type // Controller Joypad: integer; + Mouse: integer; // default encoding for texts (lyrics, song-name, ...) EncodingDefault: TEncoding; @@ -198,14 +199,13 @@ const IBackgroundMusic: array[0..1] of string = ('Off', 'On'); - ITextureSize: array[0..2] of string = ('128', '256', '512'); - ITextureSizeVals: array[0..2] of integer = ( 128, 256, 512); + ITextureSize: array[0..3] of string = ('64', '128', '256', '512'); + ITextureSizeVals: array[0..3] of integer = ( 64, 128, 256, 512); ISingWindow: array[0..1] of string = ('Small', 'Big'); //SingBar Mod - IOscilloscope: array[0..2] of string = ('Off', 'Osci', 'Bar'); -//IOscilloscope: array[0..1] of string = ('Off', 'On'); + IOscilloscope: array[0..1] of string = ('Off', 'On'); ISpectrum: array[0..1] of string = ('Off', 'On'); ISpectrograph: array[0..1] of string = ('Off', 'On'); @@ -246,10 +246,11 @@ const IScreenFade: array[0..1] of string = ('Off', 'On'); IAskbeforeDel: array[0..1] of string = ('Off', 'On'); IOnSongClick: array[0..2] of string = ('Sing', 'Select Players', 'Open Menu'); - ILineBonus: array[0..2] of string = ('Off', 'At Score', 'At Notes'); + ILineBonus: array[0..1] of string = ('Off', 'On'); IPartyPopup: array[0..1] of string = ('Off', 'On'); IJoypad: array[0..1] of string = ('Off', 'On'); + IMouse: array[0..2] of string = ('Off', 'Hardware Cursor', 'Software Cursor'); // Recording options IChannelPlayer: array[0..6] of string = ('Off', '1', '2', '3', '4', '5', '6'); @@ -686,7 +687,7 @@ begin SingWindow := GetArrayIndex(ISingWindow, IniFile.ReadString('Graphics', 'SingWindow', 'Big')); // Oscilloscope - Oscilloscope := GetArrayIndex(IOscilloscope, IniFile.ReadString('Graphics', 'Oscilloscope', 'Bar')); + Oscilloscope := GetArrayIndex(IOscilloscope, IniFile.ReadString('Graphics', 'Oscilloscope', IOscilloscope[0])); // Spectrum Spectrum := GetArrayIndex(ISpectrum, IniFile.ReadString('Graphics', 'Spectrum', 'Off')); @@ -713,16 +714,16 @@ begin PreviewVolume := GetArrayIndex(IPreviewVolume, IniFile.ReadString('Sound', 'PreviewVolume', IPreviewVolume[7])); //Preview Fading - PreviewFading := GetArrayIndex(IPreviewFading, IniFile.ReadString('Sound', 'PreviewFading', IPreviewFading[1])); + PreviewFading := GetArrayIndex(IPreviewFading, IniFile.ReadString('Sound', 'PreviewFading', IPreviewFading[3])); //AudioRepeat aka VoicePassthrough VoicePassthrough := GetArrayIndex(IVoicePassthrough, IniFile.ReadString('Sound', 'VoicePassthrough', IVoicePassthrough[0])); // Lyrics Font - LyricsFont := GetArrayIndex(ILyricsFont, IniFile.ReadString('Lyrics', 'LyricsFont', ILyricsFont[1])); + LyricsFont := GetArrayIndex(ILyricsFont, IniFile.ReadString('Lyrics', 'LyricsFont', ILyricsFont[0])); // Lyrics Effect - LyricsEffect := GetArrayIndex(ILyricsEffect, IniFile.ReadString('Lyrics', 'LyricsEffect', ILyricsEffect[1])); + LyricsEffect := GetArrayIndex(ILyricsEffect, IniFile.ReadString('Lyrics', 'LyricsEffect', ILyricsEffect[2])); // Solmization Solmization := GetArrayIndex(ISolmization, IniFile.ReadString('Lyrics', 'Solmization', ISolmization[0])); @@ -770,7 +771,7 @@ begin OnSongClick := GetArrayIndex(IOnSongClick, IniFile.ReadString('Advanced', 'OnSongClick', 'Sing')); // Linebonus - LineBonus := GetArrayIndex(ILineBonus, IniFile.ReadString('Advanced', 'LineBonus', 'At Score')); + LineBonus := GetArrayIndex(ILineBonus, IniFile.ReadString('Advanced', 'LineBonus', ILineBonus[1])); // PartyPopup PartyPopup := GetArrayIndex(IPartyPopup, IniFile.ReadString('Advanced', 'PartyPopup', 'On')); @@ -778,6 +779,9 @@ begin // Joypad Joypad := GetArrayIndex(IJoypad, IniFile.ReadString('Controller', 'Joypad', IJoypad[0])); + // Mouse + Mouse := GetArrayIndex(IMouse, IniFile.ReadString('Controller', 'Mouse', IMouse[2])); + LoadPaths(IniFile); IniFile.Free; @@ -920,6 +924,9 @@ begin // Joypad IniFile.WriteString('Controller', 'Joypad', IJoypad[Joypad]); + // Mouse + IniFile.WriteString('Controller', 'Mouse', IMouse[Mouse]); + // Directories (add a template if section is missing) // Note: Value must be ' ' and not '', otherwise no key is generated on Linux if (not IniFile.SectionExists('Directories')) then diff --git a/unicode/src/base/UMain.pas b/unicode/src/base/UMain.pas index 8d11b91d..1962e953 100644 --- a/unicode/src/base/UMain.pas +++ b/unicode/src/base/UMain.pas @@ -66,11 +66,6 @@ implementation uses Math, gl, -{ - SDL_ttf, - UParty, - UCore, -} UCatCovers, UCommandLine, UCommon, @@ -88,10 +83,12 @@ uses UPath, UPlaylist, UMusic, + UBeatTimer, UPlatform, USkins, USongs, UThemes, + UParty, UTime; procedure Main; @@ -236,14 +233,12 @@ begin Log.BenchmarkEnd(1); Log.LogBenchmark('Loading PluginManager', 1); -{ // Party Mode Manager Log.BenchmarkStart(1); Log.LogStatus('PartySession Manager', 'Initialization'); PartySession := TPartySession.Create; //Load PartySession Log.BenchmarkEnd(1); Log.LogBenchmark('Loading PartySession Manager', 1); -} // Graphics Log.BenchmarkStart(1); @@ -364,9 +359,11 @@ begin CountMidTime; Delay := Floor(1000 / MAX_FPS - 1000 * TimeMid); + Log.LogError ('MainLoop', 'Delay: ' + intToStr(Delay)); if Delay >= 1 then SDL_Delay(Delay); // dynamic, maximum is 100 fps + Log.LogError ('MainLoop', 'Delay: ok ' + intToStr(Delay)); CountSkipTime; @@ -380,9 +377,26 @@ begin end; end; +procedure DoQuit; +begin + // if question option is enabled then show exit popup + if (Ini.AskbeforeDel = 1) then + begin + Display.CurrentScreen^.CheckFadeTo(nil,'MSG_QUIT_USDX'); + end + else // if ask-for-exit is disabled then simply exit + begin + Display.Fade := 0; + Display.NextScreenWithCheck := nil; + Display.CheckOK := true; + end; +end; + procedure CheckEvents; var - Event: TSDL_event; + Event: TSDL_event; + mouseDown: boolean; + mouseBtn: integer; begin if Assigned(Display.NextScreen) then Exit; @@ -396,17 +410,46 @@ begin Display.NextScreenWithCheck := nil; Display.CheckOK := true; end; - SDL_MOUSEBUTTONDOWN: + + SDL_MOUSEMOTION, SDL_MOUSEBUTTONDOWN, SDL_MOUSEBUTTONUP: begin -{ - with Event.button do + if (Ini.Mouse > 0) then begin - if State = SDL_BUTTON_LEFT then + case Event.type_ of + SDL_MOUSEMOTION: + begin + mouseDown := false; + mouseBtn := 0; + end; + SDL_MOUSEBUTTONDOWN: + begin + mouseDown := true; + mouseBtn := Event.button.button; + end; + SDL_MOUSEBUTTONUP: + begin + mouseDown := false; + mouseBtn := Event.button.button; + end; + end; + + Display.MoveCursor(Event.button.X * 800 / Screen.w, + Event.button.Y * 600 / Screen.h, + mouseDown and ((mouseBtn <> SDL_BUTTON_WHEELDOWN) or (mouseBtn <> SDL_BUTTON_WHEELUP))); + + if (ScreenPopupError <> nil) and (ScreenPopupError.Visible) then + done := not ScreenPopupError.ParseMouse(mouseBtn, mouseDown, Event.button.x, Event.button.y) + else if (ScreenPopupCheck <> nil) and (ScreenPopupCheck.Visible) then + done := not ScreenPopupCheck.ParseMouse(mouseBtn, mouseDown, Event.button.x, Event.button.y) + else begin - // + done := not Display.CurrentScreen^.ParseMouse(mouseBtn, mouseDown, Event.button.x, Event.button.y); + + // if screen wants to exit + if done then + DoQuit; end; end; -} end; SDL_VIDEORESIZE: begin @@ -442,14 +485,14 @@ begin if boolean( Ini.FullScreen ) then begin SDL_SetVideoMode(ScreenW, ScreenH, (Ini.Depth+1) * 16, SDL_OPENGL or SDL_FULLSCREEN); - SDL_ShowCursor(0); end else begin SDL_SetVideoMode(ScreenW, ScreenH, (Ini.Depth+1) * 16, SDL_OPENGL or SDL_RESIZABLE); - SDL_ShowCursor(1); end; + Display.SetCursor; + glViewPort(0, 0, ScreenW, ScreenH); {$IFEND} end @@ -469,19 +512,7 @@ begin // if screen wants to exit if Done then - begin - // if question option is enabled then show exit popup - if (Ini.AskbeforeDel = 1) then - begin - Display.CurrentScreen^.CheckFadeTo(nil,'MSG_QUIT_USDX'); - end - else // if ask-for-exit is disabled then simply exit - begin - Display.Fade := 0; - Display.NextScreenWithCheck := nil; - Display.CheckOK := true; - end; - end; + DoQuit; end; end; diff --git a/unicode/src/base/UModules.pas b/unicode/src/base/UModules.pas deleted file mode 100644 index 97494180..00000000 --- a/unicode/src/base/UModules.pas +++ /dev/null @@ -1,55 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - *} - -unit UModules; - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -{********************* - UModules - Unit Contains all used Modules in its uses clausel - and a const with an array of all Modules to load -*********************} - -uses - UCoreModule, - UPluginLoader; - -const - CORE_MODULES_TO_LOAD: Array[0..2] of cCoreModule = ( - TPluginLoader, //First because it has to look if there are Module replacements (Feature o/t Future) - TCoreModule, //Remove this later, just a dummy - TtehPlugins //Represents the Plugins. Last because they may use CoreModules Services etc. - ); - -implementation - -end.
\ No newline at end of file diff --git a/unicode/src/base/UMusic.pas b/unicode/src/base/UMusic.pas index 19c3b942..5fc9805f 100644 --- a/unicode/src/base/UMusic.pas +++ b/unicode/src/base/UMusic.pas @@ -36,7 +36,8 @@ interface uses UTime, SysUtils, - Classes; + Classes, + UBeatTimer; type TNoteType = (ntFreestyle, ntNormal, ntGolden); @@ -99,51 +100,6 @@ type Line: array of TLine; end; - (** - * TLyricsState contains all information concerning the - * state of the lyrics, e.g. the current beat or duration of the lyrics. - *) - TLyricsState = class - private - Timer: TRelativeTimer; // keeps track of the current time - public - OldBeat: integer; // previous discovered beat - CurrentBeat: integer; // current beat (rounded) - MidBeat: real; // current beat (float) - - // now we use this for super synchronization! - // only used when analyzing voice - // TODO: change ...D to ...Detect(ed) - OldBeatD: integer; // previous discovered beat - CurrentBeatD: integer; // current discovered beat (rounded) - MidBeatD: real; // current discovered beat (float) - - // we use this for audible clicks - // TODO: Change ...C to ...Click - OldBeatC: integer; // previous discovered beat - CurrentBeatC: integer; - MidBeatC: real; // like CurrentBeatC - - OldLine: integer; // previous displayed sentence - - StartTime: real; // time till start of lyrics (= Gap) - TotalTime: real; // total song time - - constructor Create(); - procedure Pause(); - procedure Resume(); - - procedure Reset(); - procedure UpdateBeats(); - - (** - * current song time (in seconds) used as base-timer for lyrics etc. - *) - function GetCurrentTime(): real; - procedure SetCurrentTime(Time: real); - end; - - const FFTSize = 512; // size of FFT data (output: FFTSize/2 values) type @@ -977,92 +933,6 @@ begin end; end; - -{ TVoiceRemoval } - -constructor TLyricsState.Create(); -begin - // create a triggered timer, so we can Pause() it, set the time - // and Resume() it afterwards for better synching. - Timer := TRelativeTimer.Create(true); - - // reset state - Reset(); -end; - -procedure TLyricsState.Pause(); -begin - Timer.Pause(); -end; - -procedure TLyricsState.Resume(); -begin - Timer.Resume(); -end; - -procedure TLyricsState.SetCurrentTime(Time: real); -begin - // do not start the timer (if not started already), - // after setting the current time - Timer.SetTime(Time, false); -end; - -function TLyricsState.GetCurrentTime(): real; -begin - Result := Timer.GetTime(); -end; - -(** - * Resets the timer and state of the lyrics. - * The timer will be stopped afterwards so you have to call Resume() - * to start the lyrics timer. - *) -procedure TLyricsState.Reset(); -begin - Pause(); - SetCurrentTime(0); - - StartTime := 0; - TotalTime := 0; - - OldBeat := -1; - MidBeat := -1; - CurrentBeat := -1; - - OldBeatC := -1; - MidBeatC := -1; - CurrentBeatC := -1; - - OldBeatD := -1; - MidBeatD := -1; - CurrentBeatD := -1; -end; - -(** - * Updates the beat information (CurrentBeat/MidBeat/...) according to the - * current lyric time. - *) -procedure TLyricsState.UpdateBeats(); -var - CurLyricsTime: real; -begin - CurLyricsTime := GetCurrentTime(); - - OldBeat := CurrentBeat; - MidBeat := GetMidBeat(CurLyricsTime - StartTime / 1000); - CurrentBeat := Floor(MidBeat); - - OldBeatC := CurrentBeatC; - MidBeatC := GetMidBeat(CurLyricsTime - StartTime / 1000); - CurrentBeatC := Floor(MidBeatC); - - OldBeatD := CurrentBeatD; - // MidBeatD = MidBeat with additional GAP - MidBeatD := -0.5 + GetMidBeat(CurLyricsTime - (StartTime + 120 + 20) / 1000); - CurrentBeatD := Floor(MidBeatD); -end; - - { TAudioConverter } function TAudioConverter.Init(SrcFormatInfo: TAudioFormatInfo; DstFormatInfo: TAudioFormatInfo): boolean; diff --git a/unicode/src/base/UNote.pas b/unicode/src/base/UNote.pas index 5e70bfe1..6da4cf07 100644 --- a/unicode/src/base/UNote.pas +++ b/unicode/src/base/UNote.pas @@ -126,12 +126,10 @@ uses UDLLManager, UParty, UConfig, - UCore, UCommon, UGraphic, UGraphicClasses, UPath, - UPluginDefs, UPlatform, UThemes; diff --git a/unicode/src/base/UParty.pas b/unicode/src/base/UParty.pas index 937aab78..b02d13be 100644 --- a/unicode/src/base/UParty.pas +++ b/unicode/src/base/UParty.pas @@ -34,208 +34,85 @@ interface {$I switches.inc} uses - UPartyDefs, - UCoreModule, - UPluginDefs; + ModiSDK; type - ARounds = array [0..252] of integer; //0..252 needed for - PARounds = ^ARounds; - TRoundInfo = record - Modi: cardinal; + Plugin: word; Winner: byte; end; TeamOrderEntry = record - Teamnum: byte; - Score: byte; + TeamNum: byte; + Score: byte; end; TeamOrderArray = array[0..5] of byte; - TUS_ModiInfoEx = record - Info: TUS_ModiInfo; - Owner: integer; - TimesPlayed: byte; //Helper for setting round plugins + TPartyPlugin = record + ID: byte; + TimesPlayed: byte; end; - TPartySession = class (TCoreModule) + TPartySession = class private - bPartyMode: boolean; //Is this party or single player - CurRound: byte; - - Modis: array of TUS_ModiInfoEx; - Teams: TTeamInfo; - + function GetRandomPlayer(Team: byte): byte; + function GetRandomPlugin(Plugins: array of TPartyPlugin): byte; function IsWinner(Player, Winner: byte): boolean; procedure GenScores; - function GetRandomPlugin(TeamMode: boolean): cardinal; - function GetRandomPlayer(Team: byte): byte; public - //Teams: TTeamInfo; - Rounds: array of TRoundInfo; - - //TCoreModule methods to inherit - constructor Create; override; - procedure Info(const pInfo: PModuleInfo); override; - function Load: boolean; override; - function Init: boolean; override; - procedure DeInit; override; - destructor Destroy; override; - - //Register modus service - function RegisterModi(nothin: TwParam; pModiInfo: TlParam): integer; //Registers a new modus. wParam: Pointer to TUS_ModiInfo - - //Start new Party - function StartParty(NumRounds: TwParam; PAofIRounds: TlParam): integer; //Starts new party mode. Returns non zero on success - function GetCurModi(wParam: TwParam; lParam: TlParam): integer; //Returns pointer to cur. Modis TUS_ModiInfo (to Use with Singscreen) - function StopParty(wParam: TwParam; lParam: TlParam): integer; //Stops party mode. Returns 1 if party mode was enabled before. - function NextRound(wParam: TwParam; lParam: TlParam): integer; //Increases curround by 1; Returns num of round or -1 if last round is already played - - function CallModiInit(wParam: TwParam; lParam: TlParam): integer; //Calls curmodis init proc. If an error occurs, returns nonzero. In this case a new plugin was selected. Please renew loading - function CallModiDeInit(wParam: TwParam; lParam: TlParam): integer; //Calls DeInitProc and ends the round - - function GetTeamInfo(wParam: TwParam; pTeamInfo: TlParam): integer; //Writes TTeamInfo record to pointer at lParam. Returns zero on success - function SetTeamInfo(wParam: TwParam; pTeamInfo: TlParam): integer; //Read TTeamInfo record from pointer at lParam. Returns zero on success - - function GetTeamOrder(wParam: TwParam; lParam: TlParam): integer; //Returns team order. Structure: Bits 1..3: Team at place1; Bits 4..6: Team at place2 ... - function GetWinnerString(wParam: TwParam; lParam: TlParam): integer; //wParam is roundnum. If (Pointer = nil) then return length of the string. Otherwise write the string to address at lParam + Teams: TTeamInfo; + Rounds: array of TRoundInfo; + CurRound: byte; + + constructor Create; + + procedure StartNewParty(NumRounds: byte); + procedure StartRound; + procedure EndRound; + function GetTeamOrder: TeamOrderArray; + function GetWinnerString(Round: byte): string; end; -const - StandardModus = 0; //Modus ID that will be played in non-party mode +var + PartySession: TPartySession; implementation uses - UCore, + UDLLManager, UGraphic, - ULanguage, - ULog, UNote, - SysUtils; - -{********************* - TPluginLoader - Implentation -*********************} - -//------------- -// function that gives some infos about the module to the core -//------------- -procedure TPartySession.Info(const pInfo: PModuleInfo); -begin - pInfo^.Name := 'TPartySession'; - pInfo^.Version := MakeVersion(1,0,0,chr(0)); - pInfo^.Description := 'Manages party modi and party game'; -end; + ULanguage, + ULog; -//------------- -// Just the constructor -//------------- constructor TPartySession.Create; begin inherited; - //UnSet PartyMode - bPartyMode := false; -end; - -//------------- -//Is called on loading. -//In this method only events and services should be created -//to offer them to other modules or plugins during the init process -//If false is returned this will cause a forced exit -//------------- -function TPartySession.Load: boolean; -begin - //Add register party modus service - Result := true; - Core.Services.AddService('Party/RegisterModi', nil, Self.RegisterModi); - Core.Services.AddService('Party/StartParty', nil, Self.StartParty); - Core.Services.AddService('Party/GetCurModi', nil, Self.GetCurModi); -end; - -//------------- -//Is called on init process -//In this method you can hook some events and create + init -//your classes, variables etc. -//If false is returned this will cause a forced exit -//------------- -function TPartySession.Init: boolean; -begin - //Just set private var to true. - Result := true; -end; - -//------------- -//Is called if this module has been inited and there is an exit. -//Deinit is in reverse initing order -//------------- -procedure TPartySession.DeInit; -begin - //Force DeInit -end; - -//------------- -//Is called if this module will be unloaded and has been created -//Should be used to free memory -//------------- -destructor TPartySession.Destroy; -begin - //Just save some memory if it wasn't done now.. - SetLength(Modis, 0); - inherited; -end; - -//------------- -// Registers a new modus. wParam: Pointer to TUS_ModiInfo -// Service for plugins -//------------- -function TPartySession.RegisterModi(nothin: TwParam; pModiInfo: TlParam): integer; -var - Len: integer; - Info: PUS_ModiInfo; -begin - Info := PModiInfo; - //Copy Info if cbSize is correct - if (Info.cbSize = SizeOf(TUS_ModiInfo)) then - begin - Len := Length(Modis); - SetLength(Modis, Len + 1); - - Modis[Len].Info := Info^; - end - else - Core.ReportError(integer(PChar('Plugins try to register modus with wrong pointer, or wrong TUS_ModiInfo record.')), PChar('TPartySession')); - - // FIXME: return a valid result - Result := 0; end; //---------- // Returns a number of a random plugin //---------- -function TPartySession.GetRandomPlugin(TeamMode: boolean): cardinal; +function TPartySession.GetRandomPlugin(Plugins: array of TPartyPlugin): byte; var - LowestTP: byte; + LowestTP: byte; NumPwithLTP: word; - I: integer; - R: word; + I: integer; + R: word; begin - Result := StandardModus; //If there are no matching modi, play standard modus LowestTP := high(byte); NumPwithLTP := 0; //Search for Plugins not often played yet - for I := 0 to high(Modis) do + for I := 0 to high(Plugins) do begin - if (Modis[I].TimesPlayed < lowestTP) and (((Modis[I].Info.LoadingSettings and MLS_TeamOnly) <> 0) = TeamMode) then + if (Plugins[I].TimesPlayed < lowestTP) then begin - lowestTP := Modis[I].TimesPlayed; + lowestTP := Plugins[I].TimesPlayed; NumPwithLTP := 1; end - else if (Modis[I].TimesPlayed = lowestTP) and (((Modis[I].Info.LoadingSettings and MLS_TeamOnly) <> 0) = TeamMode) then + else if (Plugins[I].TimesPlayed = lowestTP) then begin Inc(NumPwithLTP); end; @@ -245,118 +122,97 @@ begin R := Random(NumPwithLTP); //Search for random plugin - for I := 0 to high(Modis) do + for I := 0 to high(Plugins) do begin - if (Modis[I].TimesPlayed = lowestTP) and (((Modis[I].Info.LoadingSettings and MLS_TeamOnly) <> 0) = TeamMode) then + if Plugins[I].TimesPlayed = LowestTP then begin //Plugin found if (R = 0) then begin - Result := I; - Inc(Modis[I].TimesPlayed); + Result := Plugins[I].ID; + Inc(Plugins[I].TimesPlayed); Break; end; - Dec(R); end; end; end; //---------- -// Starts new party mode. Returns non zero on success +//StartNewParty - Reset and prepares for new party //---------- -function TPartySession.StartParty(NumRounds: TwParam; PAofIRounds: TlParam): integer; +procedure TPartySession.StartNewParty(NumRounds: byte); var - I: integer; - aiRounds: PARounds; + Plugins: array of TPartyPlugin; TeamMode: boolean; + Len: integer; + I, J: integer; begin - Result := 0; - if (Teams.NumTeams >= 1) and (NumRounds < High(byte)-1) then - begin - bPartyMode := false; - aiRounds := PAofIRounds; - - try - //Is this team mode (More than one player per team) ? - TeamMode := true; - for I := 0 to Teams.NumTeams-1 do - TeamMode := TeamMode and (Teams.Teaminfo[I].NumPlayers > 1); - - //Set Rounds - SetLength(Rounds, NumRounds); - - for I := 0 to High(Rounds) do - begin //Set plugins - if (aiRounds[I] = -1) then - Rounds[I].Modi := GetRandomPlugin(TeamMode) - else if (aiRounds[I] >= 0) and (aiRounds[I] <= High(Modis)) and (TeamMode or ((Modis[aiRounds[I]].Info.LoadingSettings and MLS_TeamOnly) = 0)) then - Rounds[I].Modi := aiRounds[I] - else - Rounds[I].Modi := StandardModus; - - Rounds[I].Winner := High(byte); //Set winner to not played - end; - - CurRound := High(byte); //Set CurRound to not defined + //Set current round to 1 + CurRound := 255; - //Return true and set party mode - bPartyMode := true; - Result := 1; + PlayersPlay := Teams.NumTeams; - except - Core.ReportError(integer(PChar('Can''t start party mode.')), PChar('TPartySession')); + //Get team-mode and set joker, also set TimesPlayed + TeamMode := true; + for I := 0 to Teams.NumTeams - 1 do + begin + if Teams.Teaminfo[I].NumPlayers < 2 then + begin + TeamMode := false; end; + //Set player attributes + for J := 0 to Teams.TeamInfo[I].NumPlayers-1 do + begin + Teams.TeamInfo[I].Playerinfo[J].TimesPlayed := 0; + end; + Teams.Teaminfo[I].Joker := Round(NumRounds * 0.7); + Teams.Teaminfo[I].Score := 0; end; -end; -//---------- -// Returns pointer to Cur. ModiInfoEx (to use with sing screen) -//---------- -function TPartySession.GetCurModi(wParam: TwParam; lParam: TlParam): integer; -begin - if (bPartyMode) and (CurRound <= High(Rounds)) then - begin //If PartyMode is enabled: - //Return the Plugin of the Cur Round - Result := integer(@Modis[Rounds[CurRound].Modi]); - end - else - begin //Return standard modus - Result := integer(@Modis[StandardModus]); + //Fill plugin array + SetLength(Plugins, 0); + for I := 0 to high(DLLMan.Plugins) do + begin + if TeamMode or (not DLLMan.Plugins[I].TeamModeOnly) then + begin + //Add only those plugins playable with current PlayerConfiguration + Len := Length(Plugins); + SetLength(Plugins, Len + 1); + Plugins[Len].ID := I; + Plugins[Len].TimesPlayed := 0; + end; end; -end; -//---------- -// Stops party mode. Returns 1 if party mode was enabled before and -1 if change was not possible -//---------- -function TPartySession.StopParty(wParam: TwParam; lParam: TlParam): integer; -begin - Result := -1; - if (bPartyMode) then + //Set rounds + if (Length(Plugins) >= 1) then begin - // to-do : Whitü: Check here if sing screen is not shown atm. - bPartyMode := false; - Result := 1; + SetLength (Rounds, NumRounds); + for I := 0 to NumRounds - 1 do + begin + PartySession.Rounds[I].Plugin := GetRandomPlugin(Plugins); + PartySession.Rounds[I].Winner := 255; + end; end else - Result := 0; + SetLength (Rounds, 0); end; -//---------- -//GetRandomPlayer - gives back a random player to play next round -//---------- +{** + * Returns a random player to play next round + *} function TPartySession.GetRandomPlayer(Team: byte): byte; var - I, R: integer; - lowestTP: byte; + I, R: integer; + LowestTP: byte; NumPwithLTP: byte; begin - LowestTP := high(byte); + LowestTP := high(byte); NumPwithLTP := 0; - Result := 0; + Result := 0; //Search for players that have not often played yet - for I := 0 to Teams.Teaminfo[Team].NumPlayers-1 do + for I := 0 to Teams.Teaminfo[Team].NumPlayers - 1 do begin if (Teams.Teaminfo[Team].Playerinfo[I].TimesPlayed < lowestTP) then begin @@ -369,11 +225,11 @@ begin end; end; - //Create random no + //Create random number R := Random(NumPwithLTP); //Search for random player - for I := 0 to Teams.Teaminfo[Team].NumPlayers-1 do + for I := 0 to Teams.Teaminfo[Team].NumPlayers - 1 do begin if Teams.Teaminfo[Team].Playerinfo[I].TimesPlayed = lowestTP then begin @@ -389,212 +245,93 @@ begin end; end; -//---------- -// NextRound - Increases CurRound by 1; Returns num of round or -1 if last round is already played -//---------- -function TPartySession.NextRound(wParam: TwParam; lParam: TlParam): integer; +{** + * Prepares ScreenSingModi for next round and loads plugin + *} +procedure TPartySession.StartRound; var I: integer; begin if ((CurRound < high(Rounds)) or (CurRound = high(CurRound))) then - begin //everythings OK! -> Start the Round, maaaaan + begin + //Increase Current Round Inc(CurRound); - //Set Players to play this Round - for I := 0 to Teams.NumTeams-1 do - Teams.Teaminfo[I].CurPlayer := GetRandomPlayer(I); - - // FIXME: return a valid result - Result := 0; - end - else - Result := -1; -end; - -//---------- -//IsWinner - returns true if the players bit is set in the winner byte -//---------- -function TPartySession.IsWinner(Player, Winner: byte): boolean; -var - Bit: byte; -begin - Bit := 1 shl Player; - - Result := ((Winner and Bit) = Bit); -end; - -//---------- -//GenScores - inc scores for cur. round -//---------- -procedure TPartySession.GenScores; -var - I: byte; -begin - for I := 0 to Teams.NumTeams-1 do - begin - if isWinner(I, Rounds[CurRound].Winner) then - Inc(Teams.Teaminfo[I].Score); - end; -end; + Rounds[CurRound].Winner := 255; + DllMan.LoadPlugin(Rounds[CurRound].Plugin); -//---------- -// CallModiInit - calls CurModis Init Proc. If an error occurs, returns nonzero. In this case a new plugin was selected. Please renew loading -//---------- -function TPartySession.CallModiInit(wParam: TwParam; lParam: TlParam): integer; -begin - if (not bPartyMode) then - begin //Set rounds if not in party mode - SetLength(Rounds, 1); - Rounds[0].Modi := StandardModus; - Rounds[0].Winner := High(byte); - CurRound := 0; - end; + //Select Players + for I := 0 to Teams.NumTeams - 1 do + Teams.Teaminfo[I].CurPlayer := GetRandomPlayer(I); - try - //Core. - except - on E : Exception do - begin - Core.ReportError(integer(PChar('Error starting modus: ' + Modis[Rounds[CurRound].Modi].Info.Name + ' ErrorStr: ' + E.Message)), PChar('TPartySession')); - if (Rounds[CurRound].Modi = StandardModus) then - begin - Core.ReportError(integer(PChar('Can''t start standard modus, will exit now!')), PChar('TPartySession')); - Halt; - end - else //Select standard modus - begin - Rounds[CurRound].Modi := StandardModus - end; - end; + //Set ScreenSingModie Variables + ScreenSingModi.TeamInfo := Teams; end; - - // FIXME: return a valid result - Result := 0; end; //---------- -// CallModiDeInit - calls DeInitProc and ends the round +//EndRound - Get Winner from ScreenSingModi and Save Data to RoundArray //---------- -function TPartySession.CallModiDeInit(wParam: TwParam; lParam: TlParam): integer; +procedure TPartySession.EndRound; var - I: integer; - MaxScore: word; + I: Integer; begin - if (bPartyMode) then - begin - //Get Winner Byte! - if (@Modis[Rounds[CurRound].Modi].Info.ModiDeInit <> nil) then //get winners from plugin - Rounds[CurRound].Winner := Modis[Rounds[CurRound].Modi].Info.ModiDeInit(Modis[Rounds[CurRound].Modi].Info.ID) - else - begin //Create winners by score :/ - Rounds[CurRound].Winner := 0; - MaxScore := 0; - for I := 0 to Teams.NumTeams-1 do - begin - // to-do : recode percentage stuff - //PlayerInfo.Playerinfo[I].Percentage := PlayerInfo.Playerinfo[I].Score div 9999; - if (Player[I].ScoreTotalInt > MaxScore) then - begin - MaxScore := Player[I].ScoreTotalInt; - Rounds[CurRound].Winner := 1 shl I; - end - else if (Player[I].ScoreTotalInt = MaxScore) and (Player[I].ScoreTotalInt <> 0) then - begin - Rounds[CurRound].Winner := Rounds[CurRound].Winner or (1 shl I); - end; - end; - - - //When nobody has points -> everybody looses - if (MaxScore = 0) then - Rounds[CurRound].Winner := 0; - - end; + //Copy Winner + Rounds[CurRound].Winner := ScreenSingModi.Winner; + //Set Scores + GenScores; - //Generate the scores - GenScores; + //Increase TimesPlayed 4 all Players + For I := 0 to Teams.NumTeams-1 do + Inc(Teams.Teaminfo[I].Playerinfo[Teams.Teaminfo[I].CurPlayer].TimesPlayed); - //Inc players TimesPlayed - if ((Modis[Rounds[CurRound-1].Modi].Info.LoadingSettings and MLS_IncTP) = MLS_IncTP) then - begin - for I := 0 to Teams.NumTeams-1 do - Inc(Teams.TeamInfo[I].Playerinfo[Teams.TeamInfo[I].CurPlayer].TimesPlayed); - end; - end - else if (@Modis[Rounds[CurRound].Modi].Info.ModiDeInit <> nil) then - Modis[Rounds[CurRound].Modi].Info.ModiDeInit(Modis[Rounds[CurRound].Modi].Info.ID); - - // FIXME: return a valid result - Result := 0; end; //---------- -// GetTeamInfo - writes TTeamInfo record to pointer at lParam. Returns zero on success +//IsWinner - returns true if the player's bit is set in the winner byte //---------- -function TPartySession.GetTeamInfo(wParam: TwParam; pTeamInfo: TlParam): integer; +function TPartySession.IsWinner(Player, Winner: byte): boolean; var - Info: ^TTeamInfo; + Mask: byte; begin - Result := -1; - Info := pTeamInfo; - if (Info <> nil) then - begin - try - // to - do : Check Delphi memory management in this case - //Not sure if i had to copy PChars to a new address or if delphi manages this o0 - Info^ := Teams; - Result := 0; - except - Result := -2; - end; - end; + Mask := 1 shl Player; + Result := (Winner and Mask) <> 0; end; //---------- -// SetTeamInfo - read TTeamInfo record from pointer at lParam. Returns zero on success +//GenScores - increase scores for current round //---------- -function TPartySession.SetTeamInfo(wParam: TwParam; pTeamInfo: TlParam): integer; +procedure TPartySession.GenScores; var - TeamInfobackup: TTeamInfo; - Info: ^TTeamInfo; + I: byte; begin - Result := -1; - Info := pTeamInfo; - if (Info <> nil) then + for I := 0 to Teams.NumTeams - 1 do begin - try - TeamInfoBackup := Teams; - // to - do : Check Delphi memory management in this case - //Not sure if i had to copy PChars to a new address or if delphi manages this o0 - Teams := Info^; - Result := 0; - except - Teams := TeamInfoBackup; - Result := -2; - end; + if isWinner(I, Rounds[CurRound].Winner) then + Inc(Teams.Teaminfo[I].Score); end; end; //---------- -// GetTeamOrder - returns team order. Structure: Bits 1..3: Team at place1; Bits 4..6: Team at place2 ... +//GetTeamOrder - returns the placement of each Team [First Position of Array is Teamnum of first placed Team, ...] //---------- -function TPartySession.GetTeamOrder(wParam: TwParam; lParam: TlParam): integer; +function TPartySession.GetTeamOrder: TeamOrderArray; var - I, J: integer; - ATeams: array [0..5] of TeamOrderEntry; + I, J: integer; + ATeams: array [0..5] of TeamOrderEntry; TempTeam: TeamOrderEntry; begin - // to-do : PartyMode: Write this in another way, so that teams with the same score get the same place + // TODO: PartyMode: Write this in another way, so that teams with the same score get the same place //Fill Team array - for I := 0 to Teams.NumTeams-1 do + for I := 0 to Teams.NumTeams - 1 do begin ATeams[I].Teamnum := I; ATeams[I].Score := Teams.Teaminfo[I].Score; end; //Sort teams - for J := 0 to Teams.NumTeams-1 do - for I := 1 to Teams.NumTeams-1 do + for J := 0 to Teams.NumTeams - 1 do + for I := 1 to Teams.NumTeams - 1 do if ATeams[I].Score > ATeams[I-1].Score then begin TempTeam := ATeams[I-1]; @@ -603,63 +340,44 @@ begin end; //Copy to Result - Result := 0; for I := 0 to Teams.NumTeams-1 do - Result := Result or (ATeams[I].TeamNum Shl I*3); + Result[I] := ATeams[I].TeamNum; end; //---------- -// GetWinnerString - wParam is Roundnum. If (pointer = nil) then return length of the string. Otherwise write the string to address at lParam +//GetWinnerString - Get string with WinnerTeam Name, when there is more than one Winner than Connect with and or , //---------- -function TPartySession.GetWinnerString(wParam: TwParam; lParam: TlParam): integer; +function TPartySession.GetWinnerString(Round: byte): string; var Winners: array of UTF8String; - I: integer; - ResultStr: String; - S: ^String; + I: integer; begin - ResultStr := Language.Translate('PARTY_NOBODY'); + Result := Language.Translate('PARTY_NOBODY'); + + if (Round > High(Rounds)) then + exit; - if (wParam <= High(Rounds)) then + if (Rounds[Round].Winner = 0) then begin - if (Rounds[wParam].Winner <> 0) then - begin - if (Rounds[wParam].Winner = 255) then - begin - ResultStr := Language.Translate('PARTY_NOTPLAYEDYET'); - end - else - begin - SetLength(Winners, 0); - for I := 0 to Teams.NumTeams-1 do - begin - if isWinner(I, Rounds[wParam].Winner) then - begin - SetLength(Winners, Length(Winners) + 1); - Winners[high(Winners)] := Teams.TeamInfo[I].Name; - end; - end; - ResultStr := Language.Implode(Winners); - end; - end; + exit; end; - //Now return what we have got - if (lParam = nil) then - begin //Return string length - Result := Length(ResultStr); - end - else - begin //Return string - try - S := lParam; - S^ := ResultStr; - Result := 0; - except - Result := -1; + if (Rounds[Round].Winner = 255) then + begin + Result := Language.Translate('PARTY_NOTPLAYEDYET'); + exit; + end; + SetLength(Winners, 0); + for I := 0 to Teams.NumTeams - 1 do + begin + if isWinner(I, Rounds[Round].Winner) then + begin + SetLength(Winners, Length(Winners) + 1); + Winners[high(Winners)] := Teams.TeamInfo[I].Name; end; end; + Result := Language.Implode(Winners); end; end. diff --git a/unicode/src/base/UPlatform.pas b/unicode/src/base/UPlatform.pas index e4cb6f0c..6f13481c 100644 --- a/unicode/src/base/UPlatform.pas +++ b/unicode/src/base/UPlatform.pas @@ -43,9 +43,9 @@ uses type TDirectoryEntry = record - Name : WideString; - IsDirectory : boolean; - IsFile : boolean; + Name: WideString; + IsDirectory: boolean; + IsFile: boolean; end; TDirectoryEntryArray = array of TDirectoryEntry; @@ -54,12 +54,12 @@ type function GetExecutionDir(): string; procedure Init; virtual; function DirectoryFindFiles(Dir, Filter: WideString; ReturnAllSubDirs: boolean): TDirectoryEntryArray; virtual; abstract; - function TerminateIfAlreadyRunning(var WndTitle : string): boolean; virtual; + function TerminateIfAlreadyRunning(var WndTitle: string): boolean; virtual; function FindSongFile(Dir, Mask: WideString): WideString; virtual; procedure Halt; virtual; - function GetLogPath : WideString; virtual; abstract; - function GetGameSharedPath : WideString; virtual; abstract; - function GetGameUserPath : WideString; virtual; abstract; + function GetLogPath: WideString; virtual; abstract; + function GetGameSharedPath: WideString; virtual; abstract; + function GetGameUserPath: WideString; virtual; abstract; function CopyFile(const Source, Target: WideString; FailIfExists: boolean): boolean; virtual; end; @@ -79,13 +79,13 @@ uses ULog; -// I have modified it to use the Platform_singleton in this location ( in the implementaiton ) +// I modified it to use the Platform_singleton in this location (in the implementation) // so that this variable can NOT be overwritten from anywhere else in the application. // the accessor function platform, emulates all previous calls to work the same way. var - Platform_singleton : TPlatform; + Platform_singleton: TPlatform; -function Platform : TPlatform; +function Platform: TPlatform; begin Result := Platform_singleton; end; @@ -117,7 +117,7 @@ end; (** * Default TerminateIfAlreadyRunning() implementation *) -function TPlatform.TerminateIfAlreadyRunning(var WndTitle : string): Boolean; +function TPlatform.TerminateIfAlreadyRunning(var WndTitle: string): boolean; begin Result := false; end; @@ -143,7 +143,7 @@ const var SourceFile, TargetFile: TFileStream; FileCopyBuffer: array [0..COPY_BUFFER_SIZE-1] of byte; // temporary copy-buffer. - NumberOfBytes: integer; // number of bytes read from SourceFile + NumberOfBytes: integer; // number of bytes read from SourceFile begin Result := false; SourceFile := nil; diff --git a/unicode/src/base/UPluginInterface.pas b/unicode/src/base/UPluginInterface.pas deleted file mode 100644 index f299796f..00000000 --- a/unicode/src/base/UPluginInterface.pas +++ /dev/null @@ -1,186 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - *} - -unit uPluginInterface; -{********************* - uPluginInterface - Unit fills a TPluginInterface structure with method pointers - Unit contains all functions called directly by plugins -*********************} - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -uses - uPluginDefs; - -//--------------- -// Methods for Plugin -//--------------- - {******** Hook specific Methods ********} - {Function Creates a new Hookable Event and Returns the Handle - or 0 on Failure. (Name already exists)} - Function CreateHookableEvent (EventName: PChar): THandle; stdcall; - - {Function Destroys an Event and Unhooks all Hooks to this Event. - 0 on success, not 0 on Failure} - Function DestroyHookableEvent (hEvent: THandle): integer; stdcall; - - {Function start calling the Hook Chain - 0 if Chain is called until the End, -1 if Event Handle is not valid - otherwise Return Value of the Hook that breaks the Chain} - Function NotivyEventHooks (hEvent: THandle; wParam: TwParam; lParam: TlParam): integer; stdcall; - - {Function Hooks an Event by Name. - Returns Hook Handle on Success, otherwise 0} - Function HookEvent (EventName: PChar; HookProc: TUS_Hook): THandle; stdcall; - - {Function Removes the Hook from the Chain - Returns 0 on Success} - Function UnHookEvent (hHook: THandle): Integer; stdcall; - - {Function Returns Non Zero if a Event with the given Name Exists, - otherwise 0} - Function EventExists (EventName: PChar): Integer; stdcall; - - {******** Service specific Methods ********} - {Function Creates a new Service and Returns the Services Handle - or 0 on Failure. (Name already exists)} - Function CreateService (ServiceName: PChar; ServiceProc: TUS_Service): THandle; stdcall; - - {Function Destroys a Service. - 0 on success, not 0 on Failure} - Function DestroyService (hService: THandle): integer; stdcall; - - {Function Calls a Services Proc - Returns Services Return Value or SERVICE_NOT_FOUND on Failure} - Function CallService (ServiceName: PChar; wParam: TwParam; lParam: TlParam): integer; stdcall; - - {Function Returns Non Zero if a Service with the given Name Exists, - otherwise 0} - Function ServiceExists (ServiceName: PChar): Integer; stdcall; - -implementation -uses UCore; - -{******** Hook specific Methods ********} -//--------------- -// Function Creates a new Hookable Event and Returns the Handle -// or 0 on Failure. (Name already exists) -//--------------- -Function CreateHookableEvent (EventName: PChar): THandle; stdcall; -begin - Result := Core.Hooks.AddEvent(EventName); -end; - -//--------------- -// Function Destroys an Event and Unhooks all Hooks to this Event. -// 0 on success, not 0 on Failure -//--------------- -Function DestroyHookableEvent (hEvent: THandle): integer; stdcall; -begin - Result := Core.Hooks.DelEvent(hEvent); -end; - -//--------------- -// Function start calling the Hook Chain -// 0 if Chain is called until the End, -1 if Event Handle is not valid -// otherwise Return Value of the Hook that breaks the Chain -//--------------- -Function NotivyEventHooks (hEvent: THandle; wParam: TwParam; lParam: TlParam): integer; stdcall; -begin - Result := Core.Hooks.CallEventChain(hEvent, wParam, lParam); -end; - -//--------------- -// Function Hooks an Event by Name. -// Returns Hook Handle on Success, otherwise 0 -//--------------- -Function HookEvent (EventName: PChar; HookProc: TUS_Hook): THandle; stdcall; -begin - Result := Core.Hooks.AddSubscriber(EventName, HookProc); -end; - -//--------------- -// Function Removes the Hook from the Chain -// Returns 0 on Success -//--------------- -Function UnHookEvent (hHook: THandle): Integer; stdcall; -begin - Result := Core.Hooks.DelSubscriber(hHook); -end; - -//--------------- -// Function Returns Non Zero if a Event with the given Name Exists, -// otherwise 0 -//--------------- -Function EventExists (EventName: PChar): Integer; stdcall; -begin - Result := Core.Hooks.EventExists(EventName); -end; - - {******** Service specific Methods ********} -//--------------- -// Function Creates a new Service and Returns the Services Handle -// or 0 on Failure. (Name already exists) -//--------------- -Function CreateService (ServiceName: PChar; ServiceProc: TUS_Service): THandle; stdcall; -begin - Result := Core.Services.AddService(ServiceName, ServiceProc); -end; - -//--------------- -// Function Destroys a Service. -// 0 on success, not 0 on Failure -//--------------- -Function DestroyService (hService: THandle): integer; stdcall; -begin - Result := Core.Services.DelService(hService); -end; - -//--------------- -// Function Calls a Services Proc -// Returns Services Return Value or SERVICE_NOT_FOUND on Failure -//--------------- -Function CallService (ServiceName: PChar; wParam: TwParam; lParam: TlParam): integer; stdcall; -begin - Result := Core.Services.CallService(ServiceName, wParam, lParam); -end; - -//--------------- -// Function Returns Non Zero if a Service with the given Name Exists, -// otherwise 0 -//--------------- -Function ServiceExists (ServiceName: PChar): Integer; stdcall; -begin - Result := Core.Services.ServiceExists(ServiceName); -end; - -end. diff --git a/unicode/src/base/UPluginLoader.pas b/unicode/src/base/UPluginLoader.pas deleted file mode 100644 index 8836cb78..00000000 --- a/unicode/src/base/UPluginLoader.pas +++ /dev/null @@ -1,794 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/uPluginLoader.pas $ - * $Id: uPluginLoader.pas 1403 2008-09-23 21:17:22Z k-m_schindler $ - *} - -unit UPluginLoader; -{********************* - UPluginLoader - Unit contains two classes - TPluginLoader: Class searching for and loading the plugins - TtehPlugins: Class representing the plugins in modules chain -*********************} - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -uses - UPluginDefs, - UCoreModule, - UPath; - -type - TPluginListItem = record - Info: TUS_PluginInfo; - State: byte; // State of this plugin: 0 - undefined; 1 - loaded; 2 - inited / running; 4 - unloaded; 254 - loading aborted by plugin; 255 - unloaded because of error - Path: string; // path to this plugin - NeedsDeInit: boolean; // if this is inited correctly this should be true - hLib: THandle; // handle of loaded libary - Procs: record // procs offered by plugin. Don't call this directly use wrappers of TPluginLoader - Load: Func_Load; - Init: Func_Init; - DeInit: Proc_DeInit; - end; - end; - {********************* - TPluginLoader - Class searches for plugins and manages loading and unloading - *********************} - PPluginLoader = ^TPluginLoader; - TPluginLoader = class (TCoreModule) - private - LoadingProcessFinished: boolean; - sUnloadPlugin: THandle; - sLoadPlugin: THandle; - sGetPluginInfo: THandle; - sGetPluginState: THandle; - - procedure FreePlugin(Index: integer); - public - PluginInterface: TUS_PluginInterface; - Plugins: array of TPluginListItem; - - // TCoreModule methods to inherit - constructor Create; override; - procedure Info(const pInfo: PModuleInfo); override; - function Load: boolean; override; - function Init: boolean; override; - procedure DeInit; override; - Destructor Destroy; override; - - // New methods - procedure BrowseDir(Path: string); // browses the path at _Path_ for plugins - function PluginExists(Name: string): integer; // if plugin exists: Index of plugin, else -1 - procedure AddPlugin(Filename: string); // adds plugin to the array - - function CallLoad(Index: integer): integer; - function CallInit(Index: integer): integer; - procedure CallDeInit(Index: integer); - - //Services offered - function LoadPlugin(wParam: TwParam; lParam: TlParam): integer; //wParam PChar(PluginName/PluginPath) | lParam (if wParam = nil) ID of the Plugin - function UnloadPlugin(wParam: TwParam; lParam: TlParam): integer; //wParam PChar(PluginName/PluginPath) | lParam (if wParam = nil) ID of the Plugin - function GetPluginInfo(wParam: TwParam; lParam: TlParam): integer; //If wParam = -1 then (If lParam = nil then get length of Moduleinfo Array. If lparam <> nil then write array of TUS_PluginInfo to address at lparam) else (Get PluginInfo of Plugin with Index(wParam) to Address at lParam) - function GetPluginState(wParam: TwParam; lParam: TlParam): integer; //If wParam = -1 then (If lParam = nil then get length of Moduleinfo Array. If lparam <> nil then write array of TUS_PluginInfo to address at lparam) else (Return PluginInfo of Plugin with Index(wParam)) - - end; - - {********************* - TtehPlugins - Class represents the plugins in module chain. - It calls the plugins procs and funcs - *********************} - TtehPlugins = class (TCoreModule) - private - PluginLoader: PPluginLoader; - public - // TCoreModule methods to inherit - constructor Create; override; - - procedure Info(const pInfo: PModuleInfo); override; - function Load: boolean; override; - function Init: boolean; override; - procedure DeInit; override; - end; - -const -{$IF Defined(MSWINDOWS)} - PluginFileExtension = '.dll'; -{$ELSEIF Defined(DARWIN)} - PluginFileExtension = '.dylib'; -{$ELSEIF Defined(UNIX)} - PluginFileExtension = '.so'; -{$IFEND} - -implementation - -uses - UCore, - UPluginInterface, -{$IFDEF MSWINDOWS} - windows, -{$ELSE} - dynlibs, -{$ENDIF} - UMain, - SysUtils; - -{********************* - TPluginLoader - Implementation -*********************} - -//------------- -// function that gives some infos about the module to the core -//------------- -procedure TPluginLoader.Info(const pInfo: PModuleInfo); -begin - pInfo^.Name := 'TPluginLoader'; - pInfo^.Version := MakeVersion(1,0,0,chr(0)); - pInfo^.Description := 'Searches for plugins, loads and unloads them'; -end; - -//------------- -// Just the constructor -//------------- -constructor TPluginLoader.Create; -begin - inherited; - - // Init PluginInterface - // Using methods from UPluginInterface - PluginInterface.CreateHookableEvent := CreateHookableEvent; - PluginInterface.DestroyHookableEvent := DestroyHookableEvent; - PluginInterface.NotivyEventHooks := NotivyEventHooks; - PluginInterface.HookEvent := HookEvent; - PluginInterface.UnHookEvent := UnHookEvent; - PluginInterface.EventExists := EventExists; - - PluginInterface.CreateService := @CreateService; - PluginInterface.DestroyService := DestroyService; - PluginInterface.CallService := CallService; - PluginInterface.ServiceExists := ServiceExists; - - // UnSet private var - LoadingProcessFinished := false; -end; - -//------------- -// Is called on loading. -// In this method only events and services should be created -// to offer them to other modules or plugins during the init process -// if false is returned this will cause a forced exit -//------------- -function TPluginLoader.Load: boolean; -begin - Result := true; - - try - // Start searching for plugins - BrowseDir(PluginPath); - except - Result := false; - Core.ReportError(integer(PChar('Error browsing and loading.')), PChar('TPluginLoader')); - end; -end; - -//------------- -// Is called on init process -// In this method you can hook some events and create + init -// your classes, variables etc. -// If false is returned this will cause a forced exit -//------------- -function TPluginLoader.Init: boolean; -begin - // Just set private var to true. - LoadingProcessFinished := true; - Result := true; -end; - -//------------- -// Is called if this module has been inited and there is a exit. -// Deinit is in backwards initing order -//------------- -procedure TPluginLoader.DeInit; -var - I: integer; -begin - // Force deinit - // if some plugins aren't deinited for some reason o0 - for I := 0 to High(Plugins) do - begin - if (Plugins[I].State < 4) then - FreePlugin(I); - end; - - // Nothing to do here. Core will remove the hooks -end; - -//------------- -// Is called if this module will be unloaded and has been created -// Should be used to free memory -//------------- -Destructor TPluginLoader.Destroy; -begin - // Just save some memory if it wasn't done now.. - SetLength(Plugins, 0); - inherited; -end; - -//-------------- -// Browses the path at _Path_ for plugins -//-------------- -procedure TPluginLoader.BrowseDir(Path: string); -var - SR: TSearchRec; -begin - // Search for other dirs to browse - if FindFirst(Path + '*', faDirectory, SR) = 0 then begin - repeat - if (SR.Name <> '.') and (SR.Name <> '..') then - BrowseDir(Path + Sr.Name + PathDelim); - until FindNext(SR) <> 0; - end; - FindClose(SR); - - // Search for plugins at path - if FindFirst(Path + '*' + PluginFileExtension, 0, SR) = 0 then - begin - repeat - AddPlugin(Path + SR.Name); - until FindNext(SR) <> 0; - end; - FindClose(SR); -end; - -//-------------- -// If plugin exists: Index of plugin, else -1 -//-------------- -function TPluginLoader.PluginExists(Name: string): integer; -var - I: integer; -begin - Result := -1; - - if (Length(Name) <= 32 { =>Length(TUS_PluginInfo.Name)}) then - begin - for I := 0 to High(Plugins) do - if (Plugins[I].Info.Name = Name) then - begin //Found the Plugin - Result := I; - Break; - end; - end; -end; - -//-------------- -// Adds plugin to the array -//-------------- -procedure TPluginLoader.AddPlugin(Filename: string); -var - hLib: THandle; - PInfo: Proc_PluginInfo; - Info: TUS_PluginInfo; - PluginID: integer; -begin - if (FileExists(Filename)) then - begin //Load Libary - hLib := LoadLibrary(PChar(Filename)); - if (hLib <> 0) then - begin // Try to get address of the info proc - PInfo := GetProcAddress (hLib, PChar('USPlugin_Info')); - if (@PInfo <> nil) then - begin - Info.cbSize := SizeOf(TUS_PluginInfo); - - try // Call info proc - PInfo(@Info); - except - Info.Name := ''; - Core.ReportError(integer(PChar('Error getting plugin info: ' + Filename)), PChar('TPluginLoader')); - end; - - // Is name set ? - if (Trim(Info.Name) <> '') then - begin - PluginID := PluginExists(Info.Name); - - if (PluginID > 0) and (Plugins[PluginID].State >=4) then - PluginID := -1; - - if (PluginID = -1) then - begin - // Add new item to array - PluginID := Length(Plugins); - SetLength(Plugins, PluginID + 1); - - // Fill with info: - Plugins[PluginID].Info := Info; - Plugins[PluginID].State := 0; - Plugins[PluginID].Path := Filename; - Plugins[PluginID].NeedsDeInit := false; - Plugins[PluginID].hLib := hLib; - - // Try to get procs - Plugins[PluginID].Procs.Load := GetProcAddress (hLib, PChar('USPlugin_Load')); - Plugins[PluginID].Procs.Init := GetProcAddress (hLib, PChar('USPlugin_Init')); - Plugins[PluginID].Procs.DeInit := GetProcAddress (hLib, PChar('USPlugin_DeInit')); - - if (@Plugins[PluginID].Procs.Load = nil) or (@Plugins[PluginID].Procs.Init = nil) or (@Plugins[PluginID].Procs.DeInit = nil) then - begin - Plugins[PluginID].State := 255; - FreeLibrary(hLib); - Core.ReportError(integer(PChar('Can''t get plugin procs from libary: "' + Info.Name + '" ' + Filename)), PChar('TPluginLoader')); - end; - - // Emulate loading process if this plugin is loaded too late - if (LoadingProcessFinished) then - begin - CallLoad(PluginID); - CallInit(PluginID); - end; - end - else if (LoadingProcessFinished = false) then - begin - if (Plugins[PluginID].Info.Version < Info.Version) then - begin // Found newer version of this plugin - Core.ReportDebug(integer(PChar('Found a newer version of plugin: ' + string(Info.Name))), PChar('TPluginLoader')); - - // Unload old plugin - UnloadPlugin(PluginID, nil); - - // Fill with new info - Plugins[PluginID].Info := Info; - Plugins[PluginID].State := 0; - Plugins[PluginID].Path := Filename; - Plugins[PluginID].NeedsDeInit := false; - Plugins[PluginID].hLib := hLib; - - // Try to get procs - Plugins[PluginID].Procs.Load := GetProcAddress (hLib, PChar('USPlugin_Load')); - Plugins[PluginID].Procs.Init := GetProcAddress (hLib, PChar('USPlugin_Init')); - Plugins[PluginID].Procs.DeInit := GetProcAddress (hLib, PChar('USPlugin_DeInit')); - - if (@Plugins[PluginID].Procs.Load = nil) or (@Plugins[PluginID].Procs.Init = nil) or (@Plugins[PluginID].Procs.DeInit = nil) then - begin - FreeLibrary(hLib); - Plugins[PluginID].State := 255; - Core.ReportError(integer(PChar('Can''t get plugin procs from libary: "' + Info.Name + '" ' + Filename)), PChar('TPluginLoader')); - end; - end - else - begin // Newer Version already loaded - FreeLibrary(hLib); - end; - end - else - begin - FreeLibrary(hLib); - Core.ReportError(integer(PChar('Plugin with this name already exists: ' + string(Info.Name))), PChar('TPluginLoader')); - end; - end - else - begin - FreeLibrary(hLib); - Core.ReportError(integer(PChar('No name reported: ' + Filename)), PChar('TPluginLoader')); - end; - end - else - begin - FreeLibrary(hLib); - Core.ReportError(integer(PChar('Can''t find info procedure: ' + Filename)), PChar('TPluginLoader')); - end; - end - else - Core.ReportError(integer(PChar('Can''t load plugin libary: ' + Filename)), PChar('TPluginLoader')); - end; -end; - -//-------------- -// Calls load func of plugin with the given index -//-------------- -function TPluginLoader.CallLoad(Index: integer): integer; -begin - Result := -2; - if(Index < Length(Plugins)) then - begin - if (@Plugins[Index].Procs.Load <> nil) and (Plugins[Index].State = 0) then - begin - try - Result := Plugins[Index].Procs.Load(@PluginInterface); - except - Result := -3; - end; - - if (Result = 0) then - Plugins[Index].State := 1 - else - begin - FreePlugin(Index); - Plugins[Index].State := 255; - Core.ReportError(integer(PChar('Error calling load function from plugin: ' + string(Plugins[Index].Info.Name))), PChar('TPluginLoader')); - end; - end; - end; -end; - -//-------------- -// Calls init func of plugin with the given index -//-------------- -function TPluginLoader.CallInit(Index: integer): integer; -begin - Result := -2; - if(Index < Length(Plugins)) then - begin - if (@Plugins[Index].Procs.Init <> nil) and (Plugins[Index].State = 1) then - begin - try - Result := Plugins[Index].Procs.Init(@PluginInterface); - except - Result := -3; - end; - - if (Result = 0) then - begin - Plugins[Index].State := 2; - Plugins[Index].NeedsDeInit := true; - end - else - begin - FreePlugin(Index); - Plugins[Index].State := 255; - Core.ReportError(integer(PChar('Error calling init function from plugin: ' + string(Plugins[Index].Info.Name))), PChar('TPluginLoader')); - end; - end; - end; -end; - -//-------------- -// Calls deinit proc of plugin with the given index -//-------------- -procedure TPluginLoader.CallDeInit(Index: integer); -begin - if(Index < Length(Plugins)) then - begin - if (Plugins[Index].State < 4) then - begin - if (@Plugins[Index].Procs.DeInit <> nil) and (Plugins[Index].NeedsDeInit) then - try - Plugins[Index].Procs.DeInit(@PluginInterface); - except - - end; - - // Don't forget to remove services and subscriptions by this plugin - Core.Hooks.DelbyOwner(-1 - Index); - - FreePlugin(Index); - end; - end; -end; - -//-------------- -// Frees all plugin sources (procs and handles) - helper for deiniting functions -//-------------- -procedure TPluginLoader.FreePlugin(Index: integer); -begin - Plugins[Index].State := 4; - Plugins[Index].Procs.Load := nil; - Plugins[Index].Procs.Init := nil; - Plugins[Index].Procs.DeInit := nil; - - if (Plugins[Index].hLib <> 0) then - FreeLibrary(Plugins[Index].hLib); -end; - -//-------------- -// wParam PChar(PluginName/PluginPath) | wParam (if lParam = nil) ID of the plugin -//-------------- -function TPluginLoader.LoadPlugin(wParam: TwParam; lParam: TlParam): integer; -var - Index: integer; - sFile: string; -begin - Result := -1; - sFile := ''; - // lParam is ID - if (lParam = nil) then - begin - Index := wParam; - end - else - begin //lParam is PChar - try - sFile := string(PChar(lParam)); - Index := PluginExists(sFile); - if (Index < 0) and FileExists(sFile) then - begin // Is filename - AddPlugin(sFile); - Result := Plugins[High(Plugins)].State; - end; - except - Index := -2; - end; - end; - - if (Index >= 0) and (Index < Length(Plugins)) then - begin - AddPlugin(Plugins[Index].Path); - Result := Plugins[Index].State; - end; -end; - -//-------------- -// wParam PChar(PluginName/PluginPath) | wParam (if lParam = nil) ID of the plugin -//-------------- -function TPluginLoader.UnloadPlugin(wParam: TwParam; lParam: TlParam): integer; -var - Index: integer; - sName: string; -begin - Result := -1; - // lParam is ID - if (lParam = nil) then - begin - Index := wParam; - end - else - begin // wParam is PChar - try - sName := string(PChar(lParam)); - Index := PluginExists(sName); - except - Index := -2; - end; - end; - - if (Index >= 0) and (Index < Length(Plugins)) then - CallDeInit(Index) -end; - -//-------------- -// if wParam = -1 then (if lParam = nil then get length of moduleinfo array. if lparam <> nil then write array of TUS_PluginInfo to address at lparam) else (Get PluginInfo of plugin with Index(wParam) to address at lParam) -//-------------- -function TPluginLoader.GetPluginInfo(wParam: TwParam; lParam: TlParam): integer; -var I: integer; -begin - Result := 0; - if (wParam > 0) then - begin // Get info of 1 plugin - if (lParam <> nil) and (wParam < Length(Plugins)) then - begin - try - Result := 1; - PUS_PluginInfo(lParam)^ := Plugins[wParam].Info; - except - - end; - end; - end - else if (lParam = nil) then - begin // Get length of plugin (info) array - Result := Length(Plugins); - end - else //Write PluginInfo Array to Address in lParam - begin - try - for I := 0 to high(Plugins) do - PAUS_PluginInfo(lParam)^[I] := Plugins[I].Info; - Result := Length(Plugins); - except - Core.ReportError(integer(PChar('Could not write PluginInfo Array')), PChar('TPluginLoader')); - end; - end; - -end; - -//-------------- -// if wParam = -1 then (if lParam = nil then get length of plugin state array. if lparam <> nil then write array of byte to address at lparam) else (return state of plugin with index(wParam)) -//-------------- -function TPluginLoader.GetPluginState(wParam: TwParam; lParam: TlParam): integer; -var I: integer; -begin - Result := -1; - if (wParam > 0) then - begin // Get state of 1 plugin - if (wParam < Length(Plugins)) then - begin - Result := Plugins[wParam].State; - end; - end - else if (lParam = nil) then - begin // Get length of plugin (info) array - Result := Length(Plugins); - end - else // Write plugininfo array to address in lParam - begin - try - for I := 0 to high(Plugins) do - byte(Pointer(integer(lParam) + I)^) := Plugins[I].State; - Result := Length(Plugins); - except - Core.ReportError(integer(PChar('Could not write pluginstate array')), PChar('TPluginLoader')); - end; - end; -end; - -{********************* - TtehPlugins - Implementation -*********************} - -//------------- -// function that gives some infos about the module to the core -//------------- -procedure TtehPlugins.Info(const pInfo: PModuleInfo); -begin - pInfo^.Name := 'TtehPlugins'; - pInfo^.Version := MakeVersion(1,0,0,chr(0)); - pInfo^.Description := 'Module executing the Plugins!'; -end; - -//------------- -// Just the constructor -//------------- -constructor TtehPlugins.Create; -begin - inherited; - PluginLoader := nil; -end; - -//------------- -// Is called on loading. -// In this method only events and services should be created -// to offer them to other modules or plugins during the init process -// if false is returned this will cause a forced exit -//------------- -function TtehPlugins.Load: boolean; -var - i: integer; // Counter - CurExecutedBackup: integer; //backup of Core.CurExecuted Attribute -begin - // Get pointer to pluginloader - PluginLoader := PPluginLoader(Core.GetModulebyName('TPluginLoader')); - if (PluginLoader = nil) then - begin - Result := false; - Core.ReportError(integer(PChar('Could not get pointer to pluginLoader')), PChar('TtehPlugins')); - end - else - begin - Result := true; - - // Backup curexecuted - CurExecutedBackup := Core.CurExecuted; - - // Start loading the plugins - for i := 0 to High(PluginLoader.Plugins) do - begin - Core.CurExecuted := -1 - i; - - try - // Unload plugin if not correctly executed - if (PluginLoader.CallLoad(i) <> 0) then - begin - PluginLoader.CallDeInit(i); - PluginLoader.Plugins[i].State := 254; // Plugin asks for unload - Core.ReportDebug(integer(PChar('Plugin selfabort during loading process: ' + string(PluginLoader.Plugins[i].Info.Name))), PChar('TtehPlugins')); - end - else - begin - Core.ReportDebug(integer(PChar('Plugin loaded succesfully: ' + string(PluginLoader.Plugins[i].Info.Name))), PChar('TtehPlugins')); - end; - except - // Plugin could not be loaded. - // => Show error message, then shutdown plugin - on E: Exception do - begin - PluginLoader.CallDeInit(i); - PluginLoader.Plugins[i].State := 255; // Plugin causes error - Core.ReportError(integer(PChar('Plugin causes error during loading process: ' + PluginLoader.Plugins[i].Info.Name + ', ErrorMsg: "' + E.Message + '"')), PChar('TtehPlugins')); - end; - end; - end; - - // Reset CurExecuted - Core.CurExecuted := CurExecutedBackup; - end; -end; - -//------------- -// Is called on init process -// in this method you can hook some events and create + init -// your classes, variables etc. -// if false is returned this will cause a forced exit -//------------- -function TtehPlugins.Init: boolean; -var - i: integer; // Counter - CurExecutedBackup: integer; // backup of Core.CurExecuted attribute -begin - Result := true; - - // Backup CurExecuted - CurExecutedBackup := Core.CurExecuted; - - // Start loading the plugins - for i := 0 to High(PluginLoader.Plugins) do - try - Core.CurExecuted := -1 - i; - - // Unload plugin if not correctly executed - if (PluginLoader.CallInit(i) <> 0) then - begin - PluginLoader.CallDeInit(i); - PluginLoader.Plugins[i].State := 254; //Plugin asks for unload - Core.ReportDebug(integer(PChar('Plugin selfabort during init process: ' + string(PluginLoader.Plugins[i].Info.Name))), PChar('TtehPlugins')); - end - else - Core.ReportDebug(integer(PChar('Plugin inited succesfully: ' + string(PluginLoader.Plugins[i].Info.Name))), PChar('TtehPlugins')); - except - // Plugin could not be loaded. - // => Show error message, then shut down plugin - PluginLoader.CallDeInit(i); - PluginLoader.Plugins[i].State := 255; //Plugin causes Error - Core.ReportError(integer(PChar('Plugin causes error during init process: ' + string(PluginLoader.Plugins[i].Info.Name))), PChar('TtehPlugins')); - end; - - // Reset CurExecuted - Core.CurExecuted := CurExecutedBackup; -end; - -//------------- -// Is called if this module has been inited and there is a exit. -// Deinit is in backwards initing order -//------------- -procedure TtehPlugins.DeInit; -var - i: integer; // Counter - CurExecutedBackup: integer; // backup of Core.CurExecuted attribute -begin - // Backup CurExecuted - CurExecutedBackup := Core.CurExecuted; - - // Start loop - - for i := 0 to High(PluginLoader.Plugins) do - begin - try - // DeInit plugin - PluginLoader.CallDeInit(i); - except - end; - end; - - // Reset CurExecuted - Core.CurExecuted := CurExecutedBackup; -end; - -end. diff --git a/unicode/src/base/URecord.pas b/unicode/src/base/URecord.pas index 8f37262d..2c2093a0 100644 --- a/unicode/src/base/URecord.pas +++ b/unicode/src/base/URecord.pas @@ -54,7 +54,7 @@ type function GetToneString: string; // converts a tone to its string represenatation; - procedure BoostBuffer(Buffer: PByteArray; Size: cardinal); + procedure BoostBuffer(Buffer: PByteArray; Size: integer); procedure ProcessNewBuffer(Buffer: PByteArray; BufferSize: integer); // we call it to analyze sound by checking Autocorrelation @@ -135,7 +135,7 @@ type procedure UpdateInputDeviceConfig; // handle microphone input - procedure HandleMicrophoneData(Buffer: PByteArray; Size: cardinal; + procedure HandleMicrophoneData(Buffer: PByteArray; Size: integer; InputDevice: TAudioInputDevice); end; @@ -459,7 +459,7 @@ begin Result := '-'; end; -procedure TCaptureBuffer.BoostBuffer(Buffer: PByteArray; Size: cardinal); +procedure TCaptureBuffer.BoostBuffer(Buffer: PByteArray; Size: integer); var i: integer; Value: longint; @@ -602,7 +602,7 @@ end; * Length - number of bytes in Buffer * Input - Soundcard-Input used for capture *} -procedure TAudioInputProcessor.HandleMicrophoneData(Buffer: PByteArray; Size: cardinal; InputDevice: TAudioInputDevice); +procedure TAudioInputProcessor.HandleMicrophoneData(Buffer: PByteArray; Size: integer; InputDevice: TAudioInputDevice); var MultiChannelBuffer: PByteArray; // buffer handled as array of bytes (offset relative to channel) SingleChannelBuffer: PByteArray; // temporary buffer for new samples per channel @@ -611,13 +611,11 @@ var CaptureChannel: TCaptureBuffer; AudioFormat: TAudioFormatInfo; SampleSize: integer; - SampleCount: integer; SamplesPerChannel: integer; i: integer; begin AudioFormat := InputDevice.AudioFormat; SampleSize := AudioSampleSize[AudioFormat.Format]; - SampleCount := Size div SampleSize; SamplesPerChannel := Size div AudioFormat.FrameSize; SingleChannelBufferSize := SamplesPerChannel * SampleSize; diff --git a/unicode/src/base/UServices.pas b/unicode/src/base/UServices.pas deleted file mode 100644 index 3783c543..00000000 --- a/unicode/src/base/UServices.pas +++ /dev/null @@ -1,384 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - *} - -unit UServices; - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -uses - uPluginDefs, - SysUtils; -{********************* - TServiceManager - Class for saving, managing and calling of Services. - Saves all Services and their Procs -*********************} - -type - TServiceName = String[60]; - PServiceInfo = ^TServiceInfo; - TServiceInfo = record - Self: THandle; //Handle of this Service - Hash: Integer; //4 Bit Hash of the Services Name - Name: TServiceName; //Name of this Service - - Owner: Integer; //If < 0 [-(DLLMan Pluginindex + 1)]; 0 - undefined, On Error Full shutdown, If < 0 [ModuleIndex - 1] - - Next: PServiceInfo; //Pointer to the Next Service in teh list - - //Here is s/t tricky - //To avoid writing of Wrapping Functions to offer a Service from a Class - //We save a Normal Proc or a Method of a Class - Case isClass: boolean of - False: (Proc: TUS_Service); //Proc that will be called on Event - True: (ProcOfClass: TUS_Service_of_Object); - end; - - TServiceManager = class - private - //Managing Service List - FirstService: PServiceInfo; - LastService: PServiceInfo; - - //Some Speed improvement by caching the last 4 called Services - //Most of the time a Service is called multiple times - ServiceCache: Array[0..3] of PServiceInfo; - NextCacheItem: Byte; - - //Next Service added gets this Handle: - NextHandle: THandle; - public - Constructor Create; - - Function AddService(const ServiceName: PChar; const Proc: TUS_Service = nil; const ProcofClass: TUS_Service_of_Object = nil): THandle; - Function DelService(const hService: THandle): integer; - - Function CallService(const ServiceName: PChar; const wParam: TwParam; lParam: TlParam): integer; - - Function NametoHash(const ServiceName: TServiceName): Integer; - Function ServiceExists(const ServiceName: PChar): Integer; - end; - -var - ServiceManager: TServiceManager; - -implementation -uses - ULog, - UCore; - -//------------ -// Create - Creates Class and Set Standard Values -//------------ -Constructor TServiceManager.Create; -begin - inherited; - - FirstService := nil; - LastService := nil; - - ServiceCache[0] := nil; - ServiceCache[1] := nil; - ServiceCache[2] := nil; - ServiceCache[3] := nil; - - NextCacheItem := 0; - - NextHandle := 1; - - {$IFDEF DEBUG} - debugWriteln('ServiceManager: Succesful created!'); - {$ENDIF} -end; - -//------------ -// Function Creates a new Service and Returns the Services Handle, -// 0 on Failure. (Name already exists) -//------------ -Function TServiceManager.AddService(const ServiceName: PChar; const Proc: TUS_Service; const ProcofClass: TUS_Service_of_Object): THandle; -var - Cur: PServiceInfo; -begin - Result := 0; - - If (@Proc <> nil) or (@ProcOfClass <> nil) then - begin - If (ServiceExists(ServiceName) = 0) then - begin //There is a Proc and the Service does not already exist - //Ok Add it! - - //Get Memory - GetMem(Cur, SizeOf(TServiceInfo)); - - //Fill it with Data - Cur.Next := nil; - - If (@Proc = nil) then - begin //Use the ProcofClass Method - Cur.isClass := True; - Cur.ProcOfClass := ProcofClass; - end - else //Use the normal Proc - begin - Cur.isClass := False; - Cur.Proc := Proc; - end; - - Cur.Self := NextHandle; - //Zero Name - Cur.Name := #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0; - Cur.Name := String(ServiceName); - Cur.Hash := NametoHash(Cur.Name); - - //Add Owner to Service - Cur.Owner := Core.CurExecuted; - - //Add Service to the List - If (FirstService = nil) then - FirstService := Cur; - - If (LastService <> nil) then - LastService.Next := Cur; - - LastService := Cur; - - {$IFDEF DEBUG} - debugWriteln('ServiceManager: Service added: ''' + ServiceName + ''', Handle: ' + InttoStr(Cur.Self)); - {$ENDIF} - - //Inc Next Handle - Inc(NextHandle); - end - {$IFDEF DEBUG} - else debugWriteln('ServiceManager: Try to readd Service: ' + ServiceName); - {$ENDIF} - end; -end; - -//------------ -// Function Destroys a Service, 0 on success, not 0 on Failure -//------------ -Function TServiceManager.DelService(const hService: THandle): integer; -var - Last, Cur: PServiceInfo; - I: Integer; -begin - Result := -1; - - Last := nil; - Cur := FirstService; - - //Search for Service to Delete - While (Cur <> nil) do - begin - If (Cur.Self = hService) then - begin //Found Service => Delete it - - //Delete from List - If (Last = nil) then //Found first Service - FirstService := Cur.Next - Else //Service behind the first - Last.Next := Cur.Next; - - //IF this is the LastService, correct LastService - If (Cur = LastService) then - LastService := Last; - - //Search for Service in Cache and delete it if found - For I := 0 to High(ServiceCache) do - If (ServiceCache[I] = Cur) then - begin - ServiceCache[I] := nil; - end; - - {$IFDEF DEBUG} - debugWriteln('ServiceManager: Removed Service succesful: ' + Cur.Name); - {$ENDIF} - - //Free Memory - Freemem(Cur, SizeOf(TServiceInfo)); - - //Break the Loop - Break; - end; - - //Go to Next Service - Last := Cur; - Cur := Cur.Next; - end; -end; - -//------------ -// Function Calls a Services Proc -// Returns Services Return Value or SERVICE_NOT_FOUND on Failure -//------------ -Function TServiceManager.CallService(const ServiceName: PChar; const wParam: TwParam; lParam: TlParam): integer; -var - SExists: Integer; - Service: PServiceInfo; - CurExecutedBackup: Integer; //backup of Core.CurExecuted Attribute -begin - Result := SERVICE_NOT_FOUND; - SExists := ServiceExists(ServiceName); - If (SExists <> 0) then - begin - //Backup CurExecuted - CurExecutedBackup := Core.CurExecuted; - - Service := Pointer(SExists); - - If (Service.isClass) then - //Use Proc of Class - Result := Service.ProcOfClass(wParam, lParam) - Else - //Use normal Proc - Result := Service.Proc(wParam, lParam); - - //Restore CurExecuted - Core.CurExecuted := CurExecutedBackup; - end; - - {$IFDEF DEBUG} - debugWriteln('ServiceManager: Service ''' + ServiceName + ''' called. Result: ' + InttoStr(Result)); - {$ENDIF} -end; - -//------------ -// Generates the Hash for the given Name -//------------ -Function TServiceManager.NametoHash(const ServiceName: TServiceName): Integer; -// FIXME: check if the non-asm version is fast enough and use it by default if so -{$IF Defined(CPUX86_64)} -{$IFDEF FPC} - {$ASMMODE Intel} -{$ENDIF} -asm - { CL: Counter; RAX: Result; RDX: Current Memory Address } - Mov RCX, 14 - Mov RDX, ServiceName {Save Address of String that should be "Hashed"} - Mov RAX, [RDX] - @FoldLoop: ADD RDX, 4 {jump 4 Byte(32 Bit) to the next tile } - ADD RAX, [RDX] {Add the Value of the next 4 Byte of the String to the Hash} - LOOP @FoldLoop {Fold again if there are Chars Left} -end; -{$ELSEIF Defined(CPU386) or Defined(CPUI386)} -{$IFDEF FPC} - {$ASMMODE Intel} -{$ENDIF} -asm - { CL: Counter; EAX: Result; EDX: Current Memory Address } - Mov ECX, 14 {Init Counter, Fold 14 Times to get 4 Bytes out of 60} - Mov EDX, ServiceName {Save Address of String that should be "Hashed"} - Mov EAX, [EDX] - @FoldLoop: ADD EDX, 4 {jump 4 Byte(32 Bit) to the next tile } - ADD EAX, [EDX] {Add the Value of the next 4 Byte of the String to the Hash} - LOOP @FoldLoop {Fold again if there are Chars Left} -end; -{$ELSE} -var - i: integer; - ptr: ^integer; -begin - ptr := @ServiceName; - Result := 0; - for i := 1 to 14 do - begin - Result := Result + ptr^; - Inc(ptr); - end; -end; -{$IFEND} - - -//------------ -// Function Returns Non Zero if a Service with the given Name Exists, otherwise 0 -//------------ -Function TServiceManager.ServiceExists(const ServiceName: PChar): Integer; -var - Name: TServiceName; - Hash: Integer; - Cur: PServiceInfo; - I: Byte; -begin - Result := 0; - // to-do : Write a Metbod (in ASM) to Zero and Add in one turn (faster then this dirty hack ;) - //Zero Name: - Name := #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0 + #0; - //Add Service Name - Name := String(ServiceName); - Hash := NametoHash(Name); - - //First of all Look for the Service in Cache - For I := 0 to High(ServiceCache) do - begin - If (ServiceCache[I] <> nil) AND (ServiceCache[I].Hash = Hash) then - begin - If (ServiceCache[I].Name = Name) then - begin //Found Service in Cache - Result := Integer(ServiceCache[I]); - - {$IFDEF DEBUG} - debugWriteln('ServiceManager: Found Service in Cache: ''' + ServiceName + ''''); - {$ENDIF} - - Break; - end; - end; - end; - - If (Result = 0) then - begin - Cur := FirstService; - While (Cur <> nil) do - begin - If (Cur.Hash = Hash) then - begin - If (Cur.Name = Name) then - begin //Found the Service - Result := Integer(Cur); - - {$IFDEF DEBUG} - debugWriteln('ServiceManager: Found Service in List: ''' + ServiceName + ''''); - {$ENDIF} - - //Add to Cache - ServiceCache[NextCacheItem] := Cur; - NextCacheItem := (NextCacheItem + 1) AND 3; - Break; - end; - end; - - Cur := Cur.Next; - end; - end; -end; - -end. diff --git a/unicode/src/base/USingScores.pas b/unicode/src/base/USingScores.pas index 2d9b1e5e..89896d2d 100644 --- a/unicode/src/base/USingScores.pas +++ b/unicode/src/base/USingScores.pas @@ -34,211 +34,211 @@ interface {$I switches.inc} uses - UThemes, gl, + UThemes, UTexture; ////////////////////////////////////////////////////////////// // ATTENTION: // -// Enabled Flag does not Work atm. This should cause Popups // -// Not to Move and Scores to stay until Renenabling. // -// To use e.g. in Pause Mode // -// Also InVisible Flag causes Attributes not to change. // -// This should be fixed after next Draw when Visible = True,// -// but not testet yet // +// Enabled flag does not work atm. This should cause popups // +// not to move and scores to stay until re-enabling. // +// To use e.g. in pause mode // +// also invisible flag causes attributes not to change. // +// This should be fixed after next draw when visible = true,// +// but not tested yet // ////////////////////////////////////////////////////////////// -//Some constants containing options that could change by time +// some constants containing options that could change by time const - MaxPlayers = 6; //Maximum of Players that could be added - MaxPositions = 6; //Maximum of Score Positions that could be added + MaxPlayers = 6; // maximum of players that could be added + MaxPositions = 6; // maximum of score positions that could be added type //----------- - // TScorePlayer - Record Containing Information about a Players Score + // TScorePlayer - record containing information about a players score //----------- TScorePlayer = record - Position: Byte; //Index of the Position where the Player should be Drawn - Enabled: Boolean; //Is the Score Display Enabled - Visible: Boolean; //Is the Score Display Visible - Score: Word; //Current Score of the Player - ScoreDisplayed: Word; //Score cur. Displayed(for counting up) - ScoreBG: TTexture;//Texture of the Players Scores BG - Color: TRGB; //Teh Players Color - RBPos: Real; //Cur. Percentille of the Rating Bar - RBTarget: Real; //Target Position of Rating Bar - RBVisible:Boolean; //Is Rating bar Drawn + Position: byte; // index of the position where the player should be drawn + Enabled: boolean; // is the score display enabled + Visible: boolean; // is the score display visible + Score: word; // current score of the player + ScoreDisplayed: word; // score cur. displayed (for counting up) + ScoreBG: TTexture; // texture of the players scores bg + Color: TRGB; // the players color + RBPos: real; // cur. percentille of the rating bar + RBTarget: real; // target position of rating bar + RBVisible: boolean; // is rating bar drawn end; - aScorePlayer = array[0..MaxPlayers-1] of TScorePlayer; + aScorePlayer = array [0..MaxPlayers-1] of TScorePlayer; //----------- - // TScorePosition - Record Containing Information about a Score Position, that can be used + // TScorePosition - record containing information about a score position, that can be used //----------- PScorePosition = ^TScorePosition; TScorePosition = record - //The Position is Used for Which Playercount - PlayerCount: Byte; - // 1 - One Player per Screen - // 2 - 2 Players per Screen - // 4 - 3 Players per Screen - // 6 would be 2 and 3 Players per Screen - - BGX: Real; //X Position of the Score BG - BGY: Real; //Y Position of the Score BG - BGW: Real; //Width of the Score BG - BGH: Real; //Height of the Score BG - - RBX: Real; //X Position of the Rating Bar - RBY: Real; //Y Position of the Rating Bar - RBW: Real; //Width of the Rating Bar - RBH: Real; //Height of the Rating Bar - - TextX: Real; //X Position of the Score Text - TextY: Real; //Y Position of the Score Text - TextFont: Byte; //Font of the Score Text - TextSize: integer; //Size of the Score Text - - PUW: Real; //Width of the LineBonus Popup - PUH: Real; //Height of the LineBonus Popup - PUFont: Byte; //Font for the PopUps - PUFontSize: integer; //FontSize for the PopUps - PUStartX: Real; //X Start Position of the LineBonus Popup - PUStartY: Real; //Y Start Position of the LineBonus Popup - PUTargetX: Real; //X Target Position of the LineBonus Popup - PUTargetY: Real; //Y Target Position of the LineBonus Popup + // the position is used for which playercount + PlayerCount: byte; + // 1 - 1 player per screen + // 2 - 2 players per screen + // 4 - 3 players per screen + // 6 would be 2 and 3 players per screen + + BGX: real; // x position of the score bg + BGY: real; // y position of the score bg + BGW: real; // width of the score bg + BGH: real; // height of the score bg + + RBX: real; // x position of the rating bar + RBY: real; // y position of the rating bar + RBW: real; // width of the rating bar + RBH: real; // height of the rating bar + + TextX: real; // x position of the score text + TextY: real; // y position of the score text + TextFont: byte; // font of the score text + TextSize: integer; // size of the score text + + PUW: real; // width of the line bonus popup + PUH: real; // height of the line bonus popup + PUFont: byte; // font for the popups + PUFontSize: integer; // font size for the popups + PUStartX: real; // x start position of the line bonus popup + PUStartY: real; // y start position of the line bonus popup + PUTargetX: real; // x target position of the line bonus popup + PUTargetY: real; // y target position of the line bonus popup end; - aScorePosition = array[0..MaxPositions-1] of TScorePosition; + aScorePosition = array [0..MaxPositions-1] of TScorePosition; //----------- - // TScorePopUp - Record Containing Information about a LineBonus Popup - // List, Next Item is Saved in Next attribute + // TScorePopUp - record containing information about a line bonus popup + // list, next item is saved in next attribute //----------- PScorePopUp = ^TScorePopUp; TScorePopUp = record - Player: Byte; //Index of the PopUps Player - TimeStamp: Cardinal; //Timestamp of Popups Spawn - Rating: Byte; //0 to 8, Type of Rating (Cool, bad, etc.) - ScoreGiven:Word; //Score that has already been given to the Player - ScoreDiff: Word; //Difference Between Cur Score at Spawn and Old Score - Next: PScorePopUp; //Next Item in List + Player: byte; // index of the popups player + TimeStamp: cardinal; // timestamp of popups spawn + Rating: byte; // 0 to 8, type of rating (cool, bad, etc.) + ScoreGiven: word; // score that has already been given to the player + ScoreDiff: word; // difference between cur score at spawn and old score + Next: PScorePopUp; // next item in list end; aScorePopUp = array of TScorePopUp; //----------- - // TSingScores - Class containing Scores Positions and Drawing Scores, Rating Bar + Popups + // TSingScores - class containing scores positions and drawing scores, rating bar + popups //----------- TSingScores = class private Positions: aScorePosition; - aPlayers: aScorePlayer; - oPositionCount: Byte; - oPlayerCount: Byte; + aPlayers: aScorePlayer; + oPositionCount: byte; + oPlayerCount: byte; - //Saves the First and Last Popup of the List + // saves the first and last popup of the list FirstPopUp: PScorePopUp; LastPopUp: PScorePopUp; - // Draws a Popup by Pointer + // draws a popup by pointer procedure DrawPopUp(const PopUp: PScorePopUp); - // Draws a Score by Playerindex - procedure DrawScore(const Index: Integer); + // draws a score by playerindex + procedure DrawScore(const Index: integer); - // Draws the RatingBar by Playerindex - procedure DrawRatingBar(const Index: Integer); + // draws the rating bar by playerindex + procedure DrawRatingBar(const Index: integer); - // Removes a PopUp w/o destroying the List + // removes a popup w/o destroying the list procedure KillPopUp(const last, cur: PScorePopUp); public - Settings: record //Record containing some Displaying Options - Phase1Time: Real; //time for Phase 1 to complete (in msecs) - //The Plop Up of the PopUp - Phase2Time: Real; //time for Phase 2 to complete (in msecs) - //The Moving (mainly Upwards) of the Popup - Phase3Time: Real; //time for Phase 3 to complete (in msecs) - //The Fade out and Score adding + Settings: record // Record containing some Displaying Options + Phase1Time: real; // time for phase 1 to complete (in msecs) + // the plop up of the popup + Phase2Time: real; // time for phase 2 to complete (in msecs) + // the moving (mainly upwards) of the popup + Phase3Time: real; // time for phase 3 to complete (in msecs) + // the fade out and score adding - PopUpTex: array [0..8] of TTexture; //Textures for every Popup Rating + PopUpTex: array [0..8] of TTexture; // textures for every popup rating - RatingBar_BG_Tex: TTexture; //Rating Bar Texs - RatingBar_FG_Tex: TTexture; - RatingBar_Bar_Tex: TTexture; + RatingBar_BG_Tex: TTexture; // rating bar texs + RatingBar_FG_Tex: TTexture; + RatingBar_Bar_Tex: TTexture; end; - Visible: Boolean; //Visibility of all Scores - Enabled: Boolean; //Scores are changed, PopUps are Moved etc. - RBVisible: Boolean; //Visibility of all Rating Bars + Visible: boolean; // visibility of all scores + Enabled: boolean; // scores are changed, popups are moved etc. + RBVisible: boolean; // visibility of all rating bars - //Propertys for Reading Position and Playercount - property PositionCount: Byte read oPositionCount; - property PlayerCount: Byte read oPlayerCount; - property Players: aScorePlayer read aPlayers; + // properties for reading position and playercount + property PositionCount: byte read oPositionCount; + property PlayerCount: byte read oPlayerCount; + property Players: aScorePlayer read aPlayers; - //Constructor just sets some standard Settings + // constructor just sets some standard settings constructor Create; - // Adds a Position to Array and Increases Position Count + // adds a position to array and increases position count procedure AddPosition(const pPosition: PScorePosition); - // Adds a Player to Array and Increases Player Count - procedure AddPlayer(const ScoreBG: TTexture; const Color: TRGB; const Score: Word = 0; const Enabled: Boolean = True; const Visible: Boolean = True); + // adds a player to array and increases player count + procedure AddPlayer(const ScoreBG: TTexture; const Color: TRGB; const Score: word = 0; const Enabled: boolean = true; const Visible: boolean = true); - //Change a Players Visibility, Enable - procedure ChangePlayerVisibility(const Index: Byte; const pVisible: Boolean); - procedure ChangePlayerEnabled(const Index: Byte; const pEnabled: Boolean); + // change a players visibility, enable + procedure ChangePlayerVisibility(const Index: byte; const pVisible: boolean); + procedure ChangePlayerEnabled(const Index: byte; const pEnabled: boolean); - // Deletes all Player Information + // deletes all player information procedure ClearPlayers; - // Deletes Positions and Playerinformation + // deletes positions and playerinformation procedure Clear; - // Loads some Settings and the Positions from Theme + // loads some settings and the positions from theme procedure LoadfromTheme; - // has to be called after Positions and Players have been added, before first call of Draw - //It gives every Player a Score Position + // has to be called after positions and players have been added, before first call of draw + // it gives every player a score position procedure Init; - //Spawns a new Line Bonus PopUp for the Player - procedure SpawnPopUp(const PlayerIndex: Byte; const Rating: Byte; const Score: Word); + // spawns a new line bonus popup for the player + procedure SpawnPopUp(const PlayerIndex: byte; const Rating: byte; const Score: word); - //Removes all PopUps from Mem + // removes all popups from mem procedure KillAllPopUps; - // Draws Scores and Linebonus PopUps + // draws scores and line bonus popups procedure Draw; end; - implementation -uses SDL, - SysUtils, - ULog, - UGraphic, - TextGL; +uses + SysUtils, + SDL, + TextGL, + ULog, + UGraphic; {** - * Sets some standard Settings + * sets some standard settings *} -Constructor TSingScores.Create; +constructor TSingScores.Create; begin inherited; - //Clear PopupList Pointers + // clear popuplist pointers FirstPopUp := nil; LastPopUp := nil; - //Clear Variables - Visible := True; - Enabled := True; - RBVisible := True; + // clear variables + Visible := true; + Enabled := true; + RBVisible := true; - //Clear Position Index - oPositionCount := 0; - oPlayerCount := 0; + // clear position index + oPositionCount := 0; + oPlayerCount := 0; Settings.Phase1Time := 350; // plop it up . -> [ ] Settings.Phase2Time := 550; // shift it up ^[ ]^ @@ -260,22 +260,21 @@ begin end; {** - * Adds a Position to Array and Increases Position Count + * adds a position to array and increases position count *} -Procedure TSingScores.AddPosition(const pPosition: PScorePosition); +procedure TSingScores.AddPosition(const pPosition: PScorePosition); begin if (PositionCount < MaxPositions) then begin Positions[PositionCount] := pPosition^; - Inc(oPositionCount); end; end; {** - * Adds a Player to Array and Increases Player Count + * adds a player to array and increases player count *} -Procedure TSingScores.AddPlayer(const ScoreBG: TTexture; const Color: TRGB; const Score: Word; const Enabled: Boolean; const Visible: Boolean); +procedure TSingScores.AddPlayer(const ScoreBG: TTexture; const Color: TRGB; const Score: word; const Enabled: boolean; const Visible: boolean); begin if (PlayerCount < MaxPlayers) then begin @@ -283,48 +282,48 @@ begin aPlayers[PlayerCount].Enabled := Enabled; aPlayers[PlayerCount].Visible := Visible; aPlayers[PlayerCount].Score := Score; - aPlayers[PlayerCount].ScoreDisplayed := Score; + aPlayers[PlayerCount].ScoreDisplayed := Score; aPlayers[PlayerCount].ScoreBG := ScoreBG; aPlayers[PlayerCount].Color := Color; aPlayers[PlayerCount].RBPos := 0.5; aPlayers[PlayerCount].RBTarget := 0.5; - aPlayers[PlayerCount].RBVisible := True; + aPlayers[PlayerCount].RBVisible := true; Inc(oPlayerCount); end; end; {** - * Change a Players Visibility + * change a players visibility *} -Procedure TSingScores.ChangePlayerVisibility(const Index: Byte; const pVisible: Boolean); +procedure TSingScores.ChangePlayerVisibility(const Index: byte; const pVisible: boolean); begin if (Index < MaxPlayers) then aPlayers[Index].Visible := pVisible; end; {** - * Change Player Enabled + * change player enabled *} -Procedure TSingScores.ChangePlayerEnabled(const Index: Byte; const pEnabled: Boolean); +procedure TSingScores.ChangePlayerEnabled(const Index: byte; const pEnabled: boolean); begin if (Index < MaxPlayers) then aPlayers[Index].Enabled := pEnabled; end; {** - * Procedure Deletes all Player Information + * procedure deletes all player information *} -Procedure TSingScores.ClearPlayers; +procedure TSingScores.ClearPlayers; begin KillAllPopUps; oPlayerCount := 0; end; {** - * Procedure Deletes Positions and Playerinformation + * procedure deletes positions and playerinformation *} -Procedure TSingScores.Clear; +procedure TSingScores.Clear; begin KillAllPopUps; oPlayerCount := 0; @@ -332,14 +331,16 @@ begin end; {** - * Procedure Loads some Settings and the Positions from Theme + * procedure loads some settings and the positions from theme *} -Procedure TSingScores.LoadfromTheme; -var I: Integer; - Procedure AddbyStatics(const PC: Byte; const ScoreStatic, SingBarStatic: TThemeStatic; ScoreText: TThemeText); - var nPosition: TScorePosition; +procedure TSingScores.LoadfromTheme; +var + I: integer; + procedure AddbyStatics(const PC: byte; const ScoreStatic, SingBarStatic: TThemeStatic; ScoreText: TThemeText); + var + nPosition: TScorePosition; begin - nPosition.PlayerCount := PC; //Only for one Player Playing + nPosition.PlayerCount := PC; // only for one player playing nPosition.BGX := ScoreStatic.X; nPosition.BGY := ScoreStatic.Y; @@ -373,54 +374,55 @@ var I: Integer; begin Clear; - //Set Textures - //Popup Tex - For I := 0 to 8 do + // set textures + // popup tex + for I := 0 to 8 do Settings.PopUpTex[I] := Tex_SingLineBonusBack[I]; - //Rating Bar Tex + // rating bar tex Settings.RatingBar_BG_Tex := Tex_SingBar_Back; Settings.RatingBar_FG_Tex := Tex_SingBar_Front; Settings.RatingBar_Bar_Tex := Tex_SingBar_Bar; - //Load Positions from Theme + // load positions from theme - // Player1: + // player 1: AddByStatics(1, Theme.Sing.StaticP1ScoreBG, Theme.Sing.StaticP1SingBar, Theme.Sing.TextP1Score); AddByStatics(2, Theme.Sing.StaticP1TwoPScoreBG, Theme.Sing.StaticP1TwoPSingBar, Theme.Sing.TextP1TwoPScore); AddByStatics(4, Theme.Sing.StaticP1ThreePScoreBG, Theme.Sing.StaticP1ThreePSingBar, Theme.Sing.TextP1ThreePScore); - // Player2: + // player 2: AddByStatics(2, Theme.Sing.StaticP2RScoreBG, Theme.Sing.StaticP2RSingBar, Theme.Sing.TextP2RScore); AddByStatics(4, Theme.Sing.StaticP2MScoreBG, Theme.Sing.StaticP2MSingBar, Theme.Sing.TextP2MScore); - // Player3: + // player 3: AddByStatics(4, Theme.Sing.StaticP3RScoreBG, Theme.Sing.StaticP3SingBar, Theme.Sing.TextP3RScore); end; {** - * Spawns a new Line Bonus PopUp for the Player + * spawns a new line bonus popup for the player *} -Procedure TSingScores.SpawnPopUp(const PlayerIndex: Byte; const Rating: Byte; const Score: Word); -var Cur: PScorePopUp; +procedure TSingScores.SpawnPopUp(const PlayerIndex: byte; const Rating: byte; const Score: word); +var + Cur: PScorePopUp; begin if (PlayerIndex < PlayerCount) then begin - //Get Memory and Add Data + // get memory and add data GetMem(Cur, SizeOf(TScorePopUp)); - Cur.Player := PlayerIndex; + Cur.Player := PlayerIndex; Cur.TimeStamp := SDL_GetTicks; - //limit rating value to 8 - //a higher value would cause a crash when selecting the bg textur + // limit rating value to 8 + // a higher value would cause a crash when selecting the bg texture if (Rating > 8) then Cur.Rating := 8 else Cur.Rating := Rating; Cur.ScoreGiven:= 0; - If (Players[PlayerIndex].Score < Score) then + if (Players[PlayerIndex].Score < Score) then begin Cur.ScoreDiff := Score - Players[PlayerIndex].Score; aPlayers[PlayerIndex].Score := Score; @@ -429,77 +431,77 @@ begin Cur.ScoreDiff := 0; Cur.Next := nil; - //Log.LogError('TSingScores.SpawnPopUp| Player: ' + InttoStr(PlayerIndex) + ', Score: ' + InttoStr(Score) + ', ScoreDiff: ' + InttoStr(Cur.ScoreDiff)); + // Log.LogError('TSingScores.SpawnPopUp| Player: ' + InttoStr(PlayerIndex) + ', Score: ' + InttoStr(Score) + ', ScoreDiff: ' + InttoStr(Cur.ScoreDiff)); - //Add it to the Chain + // add it to the chain if (FirstPopUp = nil) then - //the first PopUp in the List + // the first popup in the list FirstPopUp := Cur else - //second or earlier popup + // second or earlier popup LastPopUp.Next := Cur; - //Set new Popup to Last PopUp in the List + // set new popup to last popup in the list LastPopUp := Cur; end else - Log.LogError('TSingScores: Try to add PopUp for not existing player'); + Log.LogError('TSingScores: Try to add popup for non-existing player'); end; {** - * Removes a PopUp w/o destroying the List + * removes a popup w/o destroying the list *} -Procedure TSingScores.KillPopUp(const last, cur: PScorePopUp); +procedure TSingScores.KillPopUp(const last, cur: PScorePopUp); begin - //Give Player the Last Points that missing till now + // give player the last points that missing till now aPlayers[Cur.Player].ScoreDisplayed := aPlayers[Cur.Player].ScoreDisplayed + Cur.ScoreDiff - Cur.ScoreGiven; - //Change Bars Position + // change bars position if (Cur.ScoreDiff > 0) THEN - begin //Popup w/ scorechange -> give missing Percentille + begin // popup w/ scorechange -> give missing percentille aPlayers[Cur.Player].RBTarget := aPlayers[Cur.Player].RBTarget + (Cur.ScoreDiff - Cur.ScoreGiven) / Cur.ScoreDiff * (Cur.Rating / 20 - 0.26); end else - begin //Popup w/o scorechange -> give complete Percentille + begin // popup w/o scorechange -> give complete percentille aPlayers[Cur.Player].RBTarget := aPlayers[Cur.Player].RBTarget + (Cur.Rating / 20 - 0.26); end; - If (aPlayers[Cur.Player].RBTarget > 1) then + if (aPlayers[Cur.Player].RBTarget > 1) then aPlayers[Cur.Player].RBTarget := 1 else - If (aPlayers[Cur.Player].RBTarget < 0) then + if (aPlayers[Cur.Player].RBTarget < 0) then aPlayers[Cur.Player].RBTarget := 0; - //If this is the First PopUp => Make Next PopUp the First - If (Cur = FirstPopUp) then + // if this is the first popup => make next popup the first + if (Cur = FirstPopUp) then FirstPopUp := Cur.Next - //Else => Remove Curent Popup from Chain + // else => remove curent popup from chain else Last.Next := Cur.Next; - //If this is the Last PopUp, Make PopUp before the Last - If (Cur = LastPopUp) then + // if this is the last popup, make popup before the last + if (Cur = LastPopUp) then LastPopUp := Last; - //Free the Memory + // free the memory FreeMem(Cur, SizeOf(TScorePopUp)); end; {** - * Removes all PopUps from Mem + * removes all popups from mem *} -Procedure TSingScores.KillAllPopUps; +procedure TSingScores.KillAllPopUps; var Cur: PScorePopUp; Last: PScorePopUp; begin Cur := FirstPopUp; - //Remove all PopUps: - While (Cur <> nil) do + // remove all popups: + while (Cur <> nil) do begin Last := Cur; Cur := Cur.Next; @@ -511,40 +513,42 @@ begin end; {** - * Has to be called after Positions and Players have been added, before first call of Draw - * It gives every Player a Score Position + * has to be called after positions and players have been added, before first call of draw + * it gives each player a score position *} -Procedure TSingScores.Init; +procedure TSingScores.Init; var - PlC: Array [0..1] of Byte; //Playercount First Screen and Second Screen - I, J: Integer; - MaxPlayersperScreen: Byte; - CurPlayer: Byte; - - Function GetPositionCountbyPlayerCount(bPlayerCount: Byte): Byte; - var I: Integer; + PlC: array [0..1] of byte; // playercount first screen and second screen + I, J: integer; + MaxPlayersperScreen: byte; + CurPlayer: byte; + + function GetPositionCountbyPlayerCount(bPlayerCount: byte): byte; + var + I: integer; begin Result := 0; bPlayerCount := 1 shl (bPlayerCount - 1); - For I := 0 to PositionCount-1 do + for I := 0 to PositionCount - 1 do begin - If ((Positions[I].PlayerCount AND bPlayerCount) <> 0) then + if ((Positions[I].PlayerCount and bPlayerCount) <> 0) then Inc(Result); end; end; - Function GetPositionbyPlayernum(bPlayerCount, bPlayer: Byte): Byte; - var I: Integer; + function GetPositionbyPlayernum(bPlayerCount, bPlayer: byte): byte; + var + I: integer; begin bPlayerCount := 1 shl (bPlayerCount - 1); - Result := High(Byte); + Result := High(byte); - For I := 0 to PositionCount-1 do + for I := 0 to PositionCount - 1 do begin - If ((Positions[I].PlayerCount AND bPlayerCount) <> 0) then + if ((Positions[I].PlayerCount and bPlayerCount) <> 0) then begin - If (bPlayer = 0) then + if (bPlayer = 0) then begin Result := I; Break; @@ -558,17 +562,16 @@ var begin MaxPlayersPerScreen := 0; - For I := 1 to 6 do + for I := 1 to 6 do begin - //If there are enough Positions -> Write to MaxPlayers - If (GetPositionCountbyPlayerCount(I) = I) then + // if there are enough positions -> write to maxplayers + if (GetPositionCountbyPlayerCount(I) = I) then MaxPlayersPerScreen := I else Break; end; - - //Split Players to both Screen or Display on One Screen + // split players to both screens or display on one screen if (Screens = 2) and (MaxPlayersPerScreen < PlayerCount) then begin PlC[0] := PlayerCount div 2 + PlayerCount mod 2; @@ -580,9 +583,8 @@ begin PlC[1] := 0; end; - - //Check if there are enough Positions for all Players - For I := 0 to Screens - 1 do + // check if there are enough positions for all players + for I := 0 to Screens - 1 do begin if (PlC[I] > MaxPlayersperScreen) then begin @@ -592,34 +594,34 @@ begin end; CurPlayer := 0; - //Give every Player a Position - For I := 0 to Screens - 1 do - For J := 0 to PlC[I]-1 do + // give every player a position + for I := 0 to Screens - 1 do + for J := 0 to PlC[I]-1 do begin - aPlayers[CurPlayer].Position := GetPositionbyPlayernum(PlC[I], J) OR (I shl 7); - //Log.LogError('Player ' + InttoStr(CurPlayer) + ' gets Position: ' + InttoStr(aPlayers[CurPlayer].Position)); + aPlayers[CurPlayer].Position := GetPositionbyPlayernum(PlC[I], J) or (I shl 7); + // Log.LogError('Player ' + InttoStr(CurPlayer) + ' gets Position: ' + InttoStr(aPlayers[CurPlayer].Position)); Inc(CurPlayer); end; end; {** - * Draws Scores and Linebonus PopUps + * draws scores and linebonus popups *} -Procedure TSingScores.Draw; +procedure TSingScores.Draw; var - I: Integer; - CurTime: Cardinal; + I: integer; + CurTime: cardinal; CurPopUp, LastPopUp: PScorePopUp; begin CurTime := SDL_GetTicks; - If Visible then + if Visible then begin - //Draw Popups + // draw popups LastPopUp := nil; CurPopUp := FirstPopUp; - While (CurPopUp <> nil) do + while (CurPopUp <> nil) do begin if (CurTime - CurPopUp.TimeStamp > Settings.Phase1Time + Settings.Phase2Time + Settings.Phase3Time) then begin @@ -638,64 +640,64 @@ begin end; - IF (RBVisible) then - //Draw Players w/ Rating Bar - For I := 0 to PlayerCount-1 do + if (RBVisible) then + // draw players w/ rating bar + for I := 0 to PlayerCount-1 do begin DrawScore(I); DrawRatingBar(I); end else - //Draw Players w/o Rating Bar - For I := 0 to PlayerCount-1 do + // draw players w/o rating bar + for I := 0 to PlayerCount-1 do begin DrawScore(I); end; - end; //eo Visible + end; // eo visible end; {** - * Draws a Popup by Pointer + * draws a popup by pointer *} -Procedure TSingScores.DrawPopUp(const PopUp: PScorePopUp); +procedure TSingScores.DrawPopUp(const PopUp: PScorePopUp); var - Progress: Real; - CurTime: Cardinal; - X, Y, W, H, Alpha: Real; - FontSize: integer; - FontOffset: Real; - TimeDiff: Cardinal; - PIndex: Byte; - TextLen: Real; - ScoretoAdd: Word; - PosDiff: Real; + Progress: real; + CurTime: cardinal; + X, Y, W, H, Alpha: real; + FontSize: integer; + FontOffset: real; + TimeDiff: cardinal; + PIndex: byte; + TextLen: real; + ScoretoAdd: word; + PosDiff: real; begin if (PopUp <> nil) then begin - //Only Draw if Player has a Position + // only draw if player has a position PIndex := Players[PopUp.Player].Position; - If PIndex <> high(byte) then + if PIndex <> High(byte) then begin - //Only Draw if Player is on Cur Screen - If ((Players[PopUp.Player].Position AND 128) = 0) = (ScreenAct = 1) then + // only draw if player is on cur screen + if ((Players[PopUp.Player].Position and 128) = 0) = (ScreenAct = 1) then begin CurTime := SDL_GetTicks; - If Not (Enabled AND Players[PopUp.Player].Enabled) then - //Increase Timestamp with TIem where there is no Movement ... + if not (Enabled and Players[PopUp.Player].Enabled) then + // increase timestamp with tiem where there is no movement ... begin - //Inc(PopUp.TimeStamp, LastRender); + // Inc(PopUp.TimeStamp, LastRender); end; TimeDiff := CurTime - PopUp.TimeStamp; - //Get Position of PopUp - PIndex := PIndex AND 127; + // get position of popup + PIndex := PIndex and 127; - //Check for Phase ... - If (TimeDiff <= Settings.Phase1Time) then + // check for phase ... + if (TimeDiff <= Settings.Phase1Time) then begin - //Phase 1 - The Ploping up + // phase 1 - the ploping up Progress := TimeDiff / Settings.Phase1Time; @@ -706,25 +708,25 @@ begin Y := Positions[PIndex].PUStartY + (Positions[PIndex].PUH - H)/2; FontSize := Round(Progress * Positions[PIndex].PUFontSize); - FontOffset := (H - FontSize) / 2; + FontOffset := (H - FontSize) / 2; Alpha := 1; end - Else If (TimeDiff <= Settings.Phase2Time + Settings.Phase1Time) then + else if (TimeDiff <= Settings.Phase2Time + Settings.Phase1Time) then begin - //Phase 2 - The Moving + // phase 2 - the moving Progress := (TimeDiff - Settings.Phase1Time) / Settings.Phase2Time; W := Positions[PIndex].PUW; H := Positions[PIndex].PUH; PosDiff := Positions[PIndex].PUTargetX - Positions[PIndex].PUStartX; - If PosDiff > 0 then + if PosDiff > 0 then PosDiff := PosDiff + W; X := Positions[PIndex].PUStartX + PosDiff * sqr(Progress); PosDiff := Positions[PIndex].PUTargetY - Positions[PIndex].PUStartY; - If PosDiff < 0 then + if PosDiff < 0 then PosDiff := PosDiff + Positions[PIndex].BGH; Y := Positions[PIndex].PUStartY + PosDiff * sqr(Progress); @@ -735,65 +737,68 @@ begin else begin - //Phase 3 - The Fading out + Score adding + // phase 3 - the fading out + score adding Progress := (TimeDiff - Settings.Phase1Time - Settings.Phase2Time) / Settings.Phase3Time; - If (PopUp.Rating > 0) then + if (PopUp.Rating > 0) then begin - //Add Scores if Player Enabled - If (Enabled AND Players[PopUp.Player].Enabled) then + // add scores if player enabled + if (Enabled and Players[PopUp.Player].Enabled) then begin ScoreToAdd := Round(PopUp.ScoreDiff * Progress) - PopUp.ScoreGiven; Inc(PopUp.ScoreGiven, ScoreToAdd); aPlayers[PopUp.Player].ScoreDisplayed := Players[PopUp.Player].ScoreDisplayed + ScoreToAdd; - //Change Bars Position - aPlayers[PopUp.Player].RBTarget := aPlayers[PopUp.Player].RBTarget + ScoreToAdd/PopUp.ScoreDiff * (PopUp.Rating / 20 - 0.26); - If (aPlayers[PopUp.Player].RBTarget > 1) then + // change bar positions + if PopUp.ScoreDiff = 0 then + Log.LogError('TSingScores.DrawPopUp', 'PopUp.ScoreDiff is 0 and we want to divide by it. No idea how this happens.') + else + aPlayers[PopUp.Player].RBTarget := aPlayers[PopUp.Player].RBTarget + ScoreToAdd/PopUp.ScoreDiff * (PopUp.Rating / 20 - 0.26); + if (aPlayers[PopUp.Player].RBTarget > 1) then aPlayers[PopUp.Player].RBTarget := 1 - else If (aPlayers[PopUp.Player].RBTarget < 0) then + else if (aPlayers[PopUp.Player].RBTarget < 0) then aPlayers[PopUp.Player].RBTarget := 0; end; - //Set Positions etc. - Alpha := 0.7 - 0.7 * Progress; + // set positions etc. + Alpha := 0.7 - 0.7 * Progress; W := Positions[PIndex].PUW; H := Positions[PIndex].PUH; PosDiff := Positions[PIndex].PUTargetX - Positions[PIndex].PUStartX; - If (PosDiff > 0) then + if (PosDiff > 0) then PosDiff := W else PosDiff := 0; X := Positions[PIndex].PUTargetX + PosDiff * Progress; PosDiff := Positions[PIndex].PUTargetY - Positions[PIndex].PUStartY; - If (PosDiff < 0) then + if (PosDiff < 0) then PosDiff := -Positions[PIndex].BGH else PosDiff := 0; - Y := Positions[PIndex].PUTargetY - PosDiff * (1-Progress); + Y := Positions[PIndex].PUTargetY - PosDiff * (1 - Progress); FontSize := Positions[PIndex].PUFontSize; FontOffset := (H - FontSize) / 2; end else begin - //Here the Effect that Should be shown if a PopUp without Score is Drawn - //And or Spawn with the GraphicObjects etc. - //Some Work for Blindy to do :P + // here the effect that should be shown if a popup without score is drawn + // and or spawn with the graphicobjects etc. + // some work for blindy to do :p - //ATM: Just Let it Slide in the Scores just like the Normal PopUp + // atm: just let it slide in the scores just like the normal popup Alpha := 0; end; end; - //Draw PopUp + // draw popup - if (Alpha > 0) AND (Players[PopUp.Player].Visible) then + if (Alpha > 0) and (Players[PopUp.Player].Visible) then begin - //Draw BG: + // draw bg: glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -811,45 +816,46 @@ begin glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); - //Set FontStyle and Size + // set font style and size SetFontStyle(Positions[PIndex].PUFont); - SetFontItalic(False); + SetFontItalic(false); SetFontSize(FontSize); + SetFontReflection(false, 0); - //Draw Text + // draw text TextLen := glTextWidth(Theme.Sing.LineBonusText[PopUp.Rating]); - //Color and Pos + // color and pos SetFontPos (X + (W - TextLen) / 2, Y + FontOffset); glColor4f(1, 1, 1, Alpha); - //Draw + // draw glPrint(Theme.Sing.LineBonusText[PopUp.Rating]); - end; //eo Alpha check - end; //eo Right Screen - end; //eo Player has Position + end; // eo alpha check + end; // eo right screen + end; // eo player has position end else - Log.LogError('TSingScores: Try to Draw a not existing PopUp'); + Log.LogError('TSingScores: Try to draw a non-existing popup'); end; {** - * Draws a Score by Playerindex + * draws a score by playerindex *} -Procedure TSingScores.DrawScore(const Index: Integer); +procedure TSingScores.DrawScore(const Index: integer); var Position: PScorePosition; ScoreStr: String; begin - //Only Draw if Player has a Position - If Players[Index].Position <> high(byte) then + // only draw if player has a position + if Players[Index].Position <> High(byte) then begin - //Only Draw if Player is on Cur Screen - If (((Players[Index].Position AND 128) = 0) = (ScreenAct = 1)) AND Players[Index].Visible then + // only draw if player is on cur screen + if (((Players[Index].Position and 128) = 0) = (ScreenAct = 1)) and Players[Index].Visible then begin Position := @Positions[Players[Index].Position and 127]; - //Draw ScoreBG + // draw scorebg glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -867,50 +873,51 @@ begin glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); - //Draw Score Text + // draw score text SetFontStyle(Position.TextFont); - SetFontItalic(False); + SetFontItalic(false); SetFontSize(Position.TextSize); SetFontPos(Position.TextX, Position.TextY); + SetFontReflection(false, 0); ScoreStr := InttoStr(Players[Index].ScoreDisplayed div 10) + '0'; - While (Length(ScoreStr) < 5) do + while (Length(ScoreStr) < 5) do ScoreStr := '0' + ScoreStr; glPrint(ScoreStr); - end; //eo Right Screen - end; //eo Player has Position + end; // eo right screen + end; // eo player has position end; -Procedure TSingScores.DrawRatingBar(const Index: Integer); +procedure TSingScores.DrawRatingBar(const Index: integer); var - Position: PScorePosition; - R,G,B, Size: Real; - Diff: Real; + Position: PScorePosition; + R, G, B: real; + Size, Diff: real; begin - //Only Draw if Player has a Position - if Players[Index].Position <> high(byte) then + // only draw if player has a position + if Players[Index].Position <> High(byte) then begin - //Only Draw if Player is on Cur Screen + // only draw if player is on cur screen if (((Players[Index].Position and 128) = 0) = (ScreenAct = 1) and Players[index].RBVisible and Players[index].Visible) then begin Position := @Positions[Players[Index].Position and 127]; - if (Enabled AND Players[Index].Enabled) then + if (Enabled and Players[Index].Enabled) then begin - //Move Position if Enabled + // move position if enabled Diff := Players[Index].RBTarget - Players[Index].RBPos; - If(Abs(Diff) < 0.02) then + if (Abs(Diff) < 0.02) then aPlayers[Index].RBPos := aPlayers[Index].RBTarget else aPlayers[Index].RBPos := aPlayers[Index].RBPos + Diff*0.1; end; - //Get Colors for RatingBar + // get colors for rating bar if (Players[index].RBPos <= 0.22) then begin R := 1; @@ -920,7 +927,7 @@ begin else if (Players[index].RBPos <= 0.42) then begin R := 1; - G := Players[index].RBPos*5; + G := Players[index].RBPos * 5; B := 0; end else if (Players[index].RBPos <= 0.57) then @@ -931,7 +938,7 @@ begin end else if (Players[index].RBPos <= 0.77) then begin - R := 1-(Players[index].RBPos-0.57)*5; + R := 1 - (Players[index].RBPos - 0.57) * 5; G := 1; B := 0; end @@ -942,12 +949,12 @@ begin B := 0; end; - //Enable all glFuncs Needed + // enable all glfuncs needed glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - //Draw RatingBar BG + // draw rating bar bg glColor4f(1, 1, 1, 0.8); glBindTexture(GL_TEXTURE_2D, Settings.RatingBar_BG_Tex.TexNum); @@ -965,7 +972,7 @@ begin glVertex2f(Position.RBX+Position.RBW, Position.RBY); glEnd; - //Draw Rating bar itself + // draw rating bar itself Size := Position.RBX + Position.RBW * Players[Index].RBPos; glColor4f(R, G, B, 1); glBindTexture(GL_TEXTURE_2D, Settings.RatingBar_Bar_Tex.TexNum); @@ -983,7 +990,7 @@ begin glVertex2f(Size, Position.RBY); glEnd; - //Draw Ratingbar FG (Teh thing with the 3 lines to get better readability) + // draw rating bar fg (the thing with the 3 lines to get better readability) glColor4f(1, 1, 1, 0.6); glBindTexture(GL_TEXTURE_2D, Settings.RatingBar_FG_Tex.TexNum); glBegin(GL_QUADS); @@ -1000,11 +1007,11 @@ begin glVertex2f(Position.RBX + Position.RBW, Position.RBY); glEnd; - //Disable all Enabled glFuncs + // disable all enabled glfuncs glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); - end; //eo Right Screen - end; //eo Player has Position + end; // eo Right Screen + end; // eo Player has Position end; end. diff --git a/unicode/src/base/USongs.pas b/unicode/src/base/USongs.pas index 852ccfc4..7a996262 100644 --- a/unicode/src/base/USongs.pas +++ b/unicode/src/base/USongs.pas @@ -73,35 +73,35 @@ type ); TBPM = record - BPM: real; - StartBeat: real; + BPM: real; + StartBeat: real; end; TScore = record - Name: widestring; - Score: integer; - Length: string; + Name: widestring; + Score: integer; + Length: string; end; {$IFDEF USE_PSEUDO_THREAD} - TSongs = class( TPseudoThread ) + TSongs = class(TPseudoThread) {$ELSE} - TSongs = class( TThread ) + TSongs = class(TThread) {$ENDIF} private - fNotify, fWatch : longint; - fParseSongDirectory : boolean; - fProcessing : boolean; + fNotify, fWatch: longint; + fParseSongDirectory: boolean; + fProcessing: boolean; {$ifdef MSWINDOWS} - fDirWatch : TDirectoryWatch; + fDirWatch: TDirectoryWatch; {$endif} procedure int_LoadSongList; procedure DoDirChanged(Sender: TObject); protected procedure Execute; override; public - SongList : TList; // array of songs - Selected : integer; // selected song index + SongList: TList; // array of songs + Selected: integer; // selected song index constructor Create(); destructor Destroy(); override; @@ -112,7 +112,7 @@ type procedure BrowseXMLFiles(Dir: widestring); procedure Sort(Order: integer); function FindSongFile(Dir, Mask: widestring): widestring; - property Processing : boolean read fProcessing; + property Processing: boolean read fProcessing; end; @@ -121,24 +121,24 @@ type Selected: integer; // selected song index Order: integer; // order type (0=title) CatNumShow: integer; // Category Number being seen - CatCount: integer; //Number of Categorys + CatCount: integer; // Number of Categorys procedure SortSongs(); - procedure Refresh; // refreshes arrays by recreating them from Songs array - procedure ShowCategory(Index: integer); // expands all songs in category - procedure HideCategory(Index: integer); // hides all songs in category - procedure ClickCategoryButton(Index: integer); // uses ShowCategory and HideCategory when needed - procedure ShowCategoryList; //Hides all Songs And Show the List of all Categorys - function FindNextVisible(SearchFrom:integer): integer; //Find Next visible Song - function VisibleSongs: integer; // returns number of visible songs (for tabs) - function VisibleIndex(Index: integer): integer; // returns visible song index (skips invisible) - - function SetFilter(FilterStr: UTF8String; Filter: TSongFilter): Cardinal; + procedure Refresh; // refreshes arrays by recreating them from Songs array + procedure ShowCategory(Index: integer); // expands all songs in category + procedure HideCategory(Index: integer); // hides all songs in category + procedure ClickCategoryButton(Index: integer); // uses ShowCategory and HideCategory when needed + procedure ShowCategoryList; // Hides all Songs And Show the List of all Categorys + function FindNextVisible(SearchFrom: integer): integer; // Find Next visible Song + function VisibleSongs: integer; // returns number of visible songs (for tabs) + function VisibleIndex(Index: integer): integer; // returns visible song index (skips invisible) + + function SetFilter(FilterStr: UTF8String; Filter: TSongFilter): cardinal; end; var - Songs: TSongs; // all songs - CatSongs: TCatSongs; // categorized songs + Songs: TSongs; // all songs + CatSongs: TCatSongs; // categorized songs const IN_ACCESS = $00000001; //* File was accessed */ @@ -177,7 +177,7 @@ begin // FIXME: threaded loading does not work this way. // It will just cause crashes but nothing else at the moment. - (* +(* {$ifdef MSWINDOWS} fDirWatch := TDirectoryWatch.create(nil); fDirWatch.OnChange := DoDirChanged; @@ -188,7 +188,7 @@ begin // now we can start the thread Resume(); - *) +*) // until it is fixed, simply load the song-list int_LoadSongList(); @@ -196,7 +196,7 @@ end; destructor TSongs.Destroy(); begin - FreeAndNil( SongList ); + FreeAndNil(SongList); inherited; end; @@ -207,7 +207,7 @@ end; procedure TSongs.Execute(); var - fChangeNotify : THandle; + fChangeNotify: THandle; begin {$IFDEF USE_PSEUDO_THREAD} int_LoadSongList(); @@ -241,13 +241,13 @@ begin for I := 0 to SongPaths.Count-1 do BrowseDir(SongPaths[I]); - if assigned( CatSongs ) then + if assigned(CatSongs) then CatSongs.Refresh; - if assigned( CatCovers ) then + if assigned(CatCovers) then CatCovers.Load; - //if assigned( Covers ) then + //if assigned(Covers) then // Covers.Load; if assigned(ScreenSong) then @@ -273,81 +273,81 @@ end; procedure TSongs.BrowseDir(Dir: widestring); begin - BrowseTXTFiles(Dir); - BrowseXMLFiles(Dir); + BrowseTXTFiles(Dir); + BrowseXMLFiles(Dir); end; procedure TSongs.BrowseTXTFiles(Dir: widestring); var - i : integer; - Files : TDirectoryEntryArray; - lSong : TSong; + i: integer; + Files: TDirectoryEntryArray; + lSong: TSong; begin try - Files := Platform.DirectoryFindFiles( Dir, '.txt', true) + Files := Platform.DirectoryFindFiles(Dir, '.txt', true) except Log.LogError('Couldn''t deal with directory/file: ' + Dir + ' in TSongs.BrowseTXTFiles') end; - for i := 0 to Length(Files)-1 do + for i := 0 to Length(Files) - 1 do begin if Files[i].IsDirectory then begin - BrowseTXTFiles( Dir + Files[i].Name + PathDelim ); //Recursive Call + BrowseTXTFiles(Dir + Files[i].Name + PathDelim); //Recursive Call end else begin - lSong := TSong.create( Dir + Files[i].Name ); + lSong := TSong.create(Dir + Files[i].Name); if lSong.Analyse then - SongList.add( lSong ) + SongList.add(lSong) else begin Log.LogError('AnalyseFile failed for "' + Files[i].Name + '".'); - freeandnil( lSong ); + freeandnil(lSong); end; end; end; - SetLength( Files, 0); + SetLength(Files, 0); end; procedure TSongs.BrowseXMLFiles(Dir: widestring); var - i : integer; - Files : TDirectoryEntryArray; - lSong : TSong; + i: integer; + Files: TDirectoryEntryArray; + lSong: TSong; begin try - Files := Platform.DirectoryFindFiles( Dir, '.xml', true) + Files := Platform.DirectoryFindFiles(Dir, '.xml', true) except Log.LogError('Couldn''t deal with directory/file: ' + Dir + ' in TSongs.BrowseXMLFiles') end; - for i := 0 to Length(Files)-1 do + for i := 0 to Length(Files) - 1 do begin if Files[i].IsDirectory then begin - BrowseXMLFiles( Dir + Files[i].Name + PathDelim ); //Recursive Call + BrowseXMLFiles(Dir + Files[i].Name + PathDelim); // Recursive Call end else begin - lSong := TSong.create( Dir + Files[i].Name ); + lSong := TSong.create(Dir + Files[i].Name); if lSong.AnalyseXML then - SongList.add( lSong ) + SongList.add(lSong) else begin Log.LogError('AnalyseFile failed for "' + Files[i].Name + '".'); - freeandnil( lSong ); + freeandnil(lSong); end; end; end; - SetLength( Files, 0); + SetLength(Files, 0); end; @@ -421,7 +421,7 @@ end; function TSongs.FindSongFile(Dir, Mask: widestring): widestring; var - SR: TSearchRec; // for parsing song directory + SR: TSearchRec; // for parsing song directory begin Result := ''; if FindFirst(Dir + Mask, faDirectory, SR) = 0 then @@ -490,13 +490,13 @@ var Inc(Order); CatIndex := Length(Song); SetLength(Song, CatIndex+1); - Song[CatIndex] := TSong.Create(); - Song[CatIndex].Artist := '[' + CategoryName + ']'; - Song[CatIndex].Main := true; + Song[CatIndex] := TSong.Create(); + Song[CatIndex].Artist := '[' + CategoryName + ']'; + Song[CatIndex].Main := true; Song[CatIndex].OrderTyp := 0; Song[CatIndex].OrderNum := Order; - Song[CatIndex].Cover := CatCovers.GetCover(Ini.Sorting, CategoryName); - Song[CatIndex].Visible := true; + Song[CatIndex].Cover := CatCovers.GetCover(Ini.Sorting, CategoryName); + Song[CatIndex].Visible := true; // set number of songs in previous category PrevCatBtnIndex := CatIndex - CatNumber - 1; @@ -507,21 +507,21 @@ var end; begin - CatNumShow := -1; + CatNumShow := -1; SortSongs(); CurCategory := ''; - Order := 0; - CatNumber := 0; + Order := 0; + CatNumber := 0; // Note: do NOT set Letter to ' ', otherwise no category-button will be // created for songs beginning with ' ' if songs of this category exist. // TODO: trim song-properties so ' ' will not occur as first chararcter. - Letter := 0; + Letter := 0; // clear song-list - for SongIndex := 0 to Songs.SongList.Count-1 do + for SongIndex := 0 to Songs.SongList.Count - 1 do begin // free category buttons // Note: do NOT delete songs, they are just references to Songs.SongList entries @@ -531,7 +531,7 @@ begin end; SetLength(Song, 0); - for SongIndex := 0 to Songs.SongList.Count-1 do + for SongIndex := 0 to Songs.SongList.Count - 1 do begin CurSong := TSong(Songs.SongList[SongIndex]); // if tabs are on, add section buttons for each new section @@ -545,11 +545,11 @@ begin // TODO: remove this block if it is not needed anymore { - if CurSection = 'Singstar Part 2' then CoverName := 'Singstar'; - if CurSection = 'Singstar German' then CoverName := 'Singstar'; - if CurSection = 'Singstar Spanish' then CoverName := 'Singstar'; - if CurSection = 'Singstar Italian' then CoverName := 'Singstar'; - if CurSection = 'Singstar French' then CoverName := 'Singstar'; + if CurSection = 'Singstar Part 2' then CoverName := 'Singstar'; + if CurSection = 'Singstar German' then CoverName := 'Singstar'; + if CurSection = 'Singstar Spanish' then CoverName := 'Singstar'; + if CurSection = 'Singstar Italian' then CoverName := 'Singstar'; + if CurSection = 'Singstar French' then CoverName := 'Singstar'; if CurSection = 'Singstar 80s Polish' then CoverName := 'Singstar 80s'; } @@ -668,15 +668,14 @@ begin CurSong.Visible := true else if (Ini.Tabs = 1) then CurSong.Visible := false; - - { +{ if (Ini.Tabs = 1) and (Order = 1) then begin //open first tab CurSong.Visible := true; end; CurSong.Visible := true; - } +} end; // set CatNumber of last category @@ -694,7 +693,7 @@ end; procedure TCatSongs.ShowCategory(Index: integer); var - S: integer; // song + S: integer; // song begin CatNumShow := Index; for S := 0 to high(CatSongs.Song) do @@ -706,13 +705,13 @@ begin CatSongs.Song[S].Visible := false; } // KMS: This should be the same, but who knows :-) - CatSongs.Song[S].Visible := ( (CatSongs.Song[S].OrderNum = Index) and (not CatSongs.Song[S].Main) ); + CatSongs.Song[S].Visible := ((CatSongs.Song[S].OrderNum = Index) and (not CatSongs.Song[S].Main)); end; end; procedure TCatSongs.HideCategory(Index: integer); // hides all songs in category var - S: integer; // song + S: integer; // song begin for S := 0 to high(CatSongs.Song) do begin @@ -723,7 +722,7 @@ end; procedure TCatSongs.ClickCategoryButton(Index: integer); var - Num: integer; + Num: integer; begin Num := CatSongs.Song[Index].OrderNum; if Num <> CatNumShow then @@ -739,7 +738,7 @@ end; //Hide Categorys when in Category Hack procedure TCatSongs.ShowCategoryList; var - S: integer; + S: integer; begin // Hide All Songs Show All Cats for S := 0 to high(CatSongs.Song) do @@ -749,8 +748,8 @@ begin end; //Hide Categorys when in Category Hack End -//Wrong song selected when tabs on bug -function TCatSongs.FindNextVisible(SearchFrom:integer): integer;//Find next Visible Song +// Wrong song selected when tabs on bug +function TCatSongs.FindNextVisible(SearchFrom:integer): integer;// Find next Visible Song var I: integer; begin @@ -761,11 +760,11 @@ begin Inc (I); if (I>high(CatSongs.Song)) then I := low(CatSongs.Song); - if (I = SearchFrom) then //Make One Round and no song found->quit + if (I = SearchFrom) then // Make One Round and no song found->quit break; end; end; -//Wrong song selected when tabs on bug End +// Wrong song selected when tabs on bug End (** * Returns the number of visible songs. @@ -791,16 +790,16 @@ var SongIndex: integer; begin Result := 0; - for SongIndex := 0 to Index-1 do + for SongIndex := 0 to Index - 1 do begin if (CatSongs.Song[SongIndex].Visible) then Inc(Result); end; end; -function TCatSongs.SetFilter(FilterStr: UTF8String; Filter: TSongFilter): Cardinal; +function TCatSongs.SetFilter(FilterStr: UTF8String; Filter: TSongFilter): cardinal; var - I, J: integer; + I, J: integer; TmpString: UTF8String; WordArray: array of UTF8String; begin @@ -838,8 +837,8 @@ begin fltArtist: TmpString := Song[I].Artist; end; - Song[i].Visible:=True; - // Look for every Searched Word + Song[i].Visible := true; + // Look for every searched word for J := 0 to High(WordArray) do begin Song[i].Visible := Song[i].Visible and @@ -849,7 +848,7 @@ begin Inc(Result); end else - Song[i].Visible := False; + Song[i].Visible := false; end; CatNumShow := -2; end diff --git a/unicode/src/base/UTexture.pas b/unicode/src/base/UTexture.pas index 962bd2b0..97f244fe 100644 --- a/unicode/src/base/UTexture.pas +++ b/unicode/src/base/UTexture.pas @@ -336,8 +336,8 @@ begin X := 0; Y := 0; Z := 0; - W := 0; - H := 0; + W := oldWidth; + H := oldHeight; ScaleW := 1; ScaleH := 1; Rot := 0; diff --git a/unicode/src/base/UThemes.pas b/unicode/src/base/UThemes.pas index 9bf858ed..3fd77853 100644 --- a/unicode/src/base/UThemes.pas +++ b/unicode/src/base/UThemes.pas @@ -42,13 +42,13 @@ uses type TRGB = record - R: single; - G: single; - B: single; + R: single; + G: single; + B: single; end; TRGBA = record - R, G, B, A: Double; + R, G, B, A: double; end; type @@ -175,11 +175,12 @@ type W: integer; H: integer; Z: real; + SBGW: integer; TextSize: integer; - //SBGW Mod - SBGW: integer; + showArrows:boolean; + oneItemOnly:boolean; Text: string; ColR, ColG, ColB, Int: real; @@ -359,6 +360,11 @@ type PausePopUp: TThemeStatic; end; + TThemeLyricBar = record + IndicatorYOffset, UpperX, UpperW, UpperY, UpperH, + LowerX, LowerW, LowerY, LowerH : integer; + end; + TThemeScore = class(TThemeBasic) TextArtist: TThemeText; TextTitle: TThemeText; @@ -723,6 +729,7 @@ type Level: TThemeLevel; Song: TThemeSong; Sing: TThemeSing; + LyricBar: TThemeLyricBar; Score: TThemeScore; Top5: TThemeTop5; Options: TThemeOptions; @@ -1031,9 +1038,19 @@ begin ThemeLoadStatic(Song.StaticTeam3Joker5, 'SongStaticTeam3Joker5'); + //LyricBar asd + LyricBar.UpperX := ThemeIni.ReadInteger('SingLyricsUpperBar', 'X', 0); + LyricBar.UpperW := ThemeIni.ReadInteger('SingLyricsUpperBar', 'W', 0); + LyricBar.UpperY := ThemeIni.ReadInteger('SingLyricsUpperBar', 'Y', 0); + LyricBar.UpperH := ThemeIni.ReadInteger('SingLyricsUpperBar', 'H', 0); + LyricBar.IndicatorYOffset := ThemeIni.ReadInteger('SingLyricsUpperBar', 'IndicatorYOffset', 0); + LyricBar.LowerX := ThemeIni.ReadInteger('SingLyricsLowerBar', 'X', 0); + LyricBar.LowerW := ThemeIni.ReadInteger('SingLyricsLowerBar', 'W', 0); + LyricBar.LowerY := ThemeIni.ReadInteger('SingLyricsLowerBar', 'Y', 0); + LyricBar.LowerH := ThemeIni.ReadInteger('SingLyricsLowerBar', 'H', 0); + // Sing ThemeLoadBasic(Sing, 'Sing'); - //TimeBar mod ThemeLoadStatic(Sing.StaticTimeProgress, 'SingTimeProgress'); ThemeLoadText(Sing.TextTimeText, 'SingTimeText'); @@ -1769,7 +1786,7 @@ begin ThemeSelectS.SkipX := ThemeIni.ReadInteger(Name, 'SkipX', 0); - ThemeSelectS.SBGW := ThemeIni.ReadInteger(Name, 'SBGW', 450); + ThemeSelectS.SBGW := ThemeIni.ReadInteger(Name, 'SBGW', 400); LoadColor(ThemeSelectS.ColR, ThemeSelectS.ColG, ThemeSelectS.ColB, ThemeIni.ReadString(Name, 'Color', '')); ThemeSelectS.Int := ThemeIni.ReadFloat(Name, 'Int', 1); diff --git a/unicode/src/base/UTime.pas b/unicode/src/base/UTime.pas index 3f35dffd..83844cb5 100644 --- a/unicode/src/base/UTime.pas +++ b/unicode/src/base/UTime.pas @@ -61,20 +61,20 @@ procedure CountSkipTime; procedure CountMidTime; var - USTime : TTime; + USTime: TTime; VideoBGTimer: TRelativeTimer; - TimeNew : int64; - TimeOld : int64; - TimeSkip : real; - TimeMid : real; - TimeMidTemp : int64; + TimeNew: int64; + TimeOld: int64; + TimeSkip: real; + TimeMid: real; + TimeMidTemp: int64; implementation uses sdl, - ucommon; + UCommon; const cSDLCorrectionRatio = 1000; @@ -91,14 +91,14 @@ http://www.gamedev.net/community/forums/topic.asp?topic_id=466145&whichpage=1%EE procedure CountSkipTimeSet; begin - TimeNew := SDL_GetTicks(); + TimeNew := SDL_GetTicks(); end; procedure CountSkipTime; begin - TimeOld := TimeNew; - TimeNew := SDL_GetTicks(); - TimeSkip := (TimeNew-TimeOld) / cSDLCorrectionRatio; + TimeOld := TimeNew; + TimeNew := SDL_GetTicks(); + TimeSkip := (TimeNew-TimeOld) / cSDLCorrectionRatio; end; procedure CountMidTime; @@ -127,10 +127,10 @@ end; **} (* - * Creates a new timer. - * If TriggerMode is false (default), the timer + * creates a new timer. + * if triggermode is false (default), the timer * will immediately begin with counting. - * If TriggerMode is true, it will wait until Get/SetTime() or Pause() is called + * if triggermode is true, it will wait until get/settime() or pause() is called * for the first time. *) constructor TRelativeTimer.Create(TriggerMode: boolean); diff --git a/unicode/src/lib/ffmpeg/avcodec.pas b/unicode/src/lib/ffmpeg/avcodec.pas index 6039835c..ceb1b7f0 100644 --- a/unicode/src/lib/ffmpeg/avcodec.pas +++ b/unicode/src/lib/ffmpeg/avcodec.pas @@ -29,6 +29,11 @@ * Min. version: 51.16.0, revision 6577, Sat Oct 7 15:30:46 2006 UTC * Max. version: 52.11.0, revision 16912, Sun Feb 1 02:00:19 2009 UTC *) +{ + * update to + * Max. version: 52.31.2, Sar Jun 13 22:05:00 2009 UTC + * MiSchi +} unit avcodec; @@ -60,8 +65,8 @@ uses const (* Max. supported version by this header *) LIBAVCODEC_MAX_VERSION_MAJOR = 52; - LIBAVCODEC_MAX_VERSION_MINOR = 11; - LIBAVCODEC_MAX_VERSION_RELEASE = 0; + LIBAVCODEC_MAX_VERSION_MINOR = 31; + LIBAVCODEC_MAX_VERSION_RELEASE = 2; LIBAVCODEC_MAX_VERSION = (LIBAVCODEC_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBAVCODEC_MAX_VERSION_MINOR * VERSION_MINOR) + (LIBAVCODEC_MAX_VERSION_RELEASE * VERSION_RELEASE); @@ -85,9 +90,9 @@ const {$IFEND} const - AV_NOPTS_VALUE: cint64 = $8000000000000000; + AV_NOPTS_VALUE: cint64 = $8000000000000000; AV_TIME_BASE = 1000000; - AV_TIME_BASE_Q : TAVRational = (num: 1; den: AV_TIME_BASE); + AV_TIME_BASE_Q: TAVRational = (num: 1; den: AV_TIME_BASE); (** * Identifies the syntax and semantics of the bitstream. @@ -233,6 +238,28 @@ type CODEC_ID_MOTIONPIXELS, CODEC_ID_TGV, CODEC_ID_TGQ, +{$IF LIBAVCODEC_VERSION >= 52012000} // >= 52.12.0 + CODEC_ID_TQI, +{$IFEND} +{$IF LIBAVCODEC_VERSION >= 52022002} // >= 52.22.2 + CODEC_ID_AURA, + CODEC_ID_AURA2, +{$IFEND} +{$IF LIBAVCODEC_VERSION >= 52027000} // >= 52.27.0 + CODEC_ID_V210X, +{$IFEND} +{$IF LIBAVCODEC_VERSION >= 52028000} // >= 52.28.0 + CODEC_ID_TMV, +{$IFEND} +{$IF LIBAVCODEC_VERSION >= 52029000} // >= 52.29.0 + CODEC_ID_V210, +{$IFEND} +{$IF LIBAVCODEC_VERSION >= 52030002} // >= 52.30.2 + CODEC_ID_DPX, +{$IFEND} +{$IF LIBAVCODEC_VERSION >= 52031002} // >= 52.31.2 + CODEC_ID_MAD, +{$IFEND} //* various PCM "codecs" */ CODEC_ID_PCM_S16LE= $10000, @@ -308,7 +335,7 @@ type CODEC_ID_MP2= $15000, CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 CODEC_ID_AAC, - {$IF LIBAVCODEC_VERSION < 52000000} // 52.0.0 + {$IF LIBAVCODEC_VERSION < 52000000} // < 52.0.0 _CODEC_ID_MPEG4AAC, // will be redefined to CODEC_ID_AAC below {$IFEND} CODEC_ID_AC3, @@ -354,6 +381,15 @@ type CODEC_ID_EAC3, CODEC_ID_SIPR, CODEC_ID_MP1, +{$IF LIBAVCODEC_VERSION >= 52020000} // >= 52.20.0 + CODEC_ID_TWINVQ, +{$IFEND} +{$IF LIBAVCODEC_VERSION >= 52022000} // >= 52.22.0 + CODEC_ID_TRUEHD, +{$IFEND} +{$IF LIBAVCODEC_VERSION >= 52026000} // >= 52.26.0 + CODEC_ID_MP4ALS, +{$IFEND} //* subtitle codecs */ CODEC_ID_DVD_SUBTITLE= $17000, @@ -369,11 +405,11 @@ type CODEC_ID_PROBE= $19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it CODEC_ID_MPEG2TS= $20000, {*< _FAKE_ codec to indicate a raw MPEG-2 TS - * stream (only used by libavformat) *} + * stream (only used by libavformat) *} __CODEC_ID_4BYTE = $FFFFF // ensure 4-byte enum ); -{$IF LIBAVCODEC_VERSION < 52000000} // 52.0.0 +{$IF LIBAVCODEC_VERSION < 52000000} // < 52.0.0 {* CODEC_ID_MP3LAME is obsolete *} const CODEC_ID_MP3LAME = CODEC_ID_MP3; @@ -407,7 +443,7 @@ type _TSampleFormatArray = array [0 .. MaxInt div SizeOf(TSampleFormat)-1] of TSampleFormat; PSampleFormatArray = ^_TSampleFormatArray; -const +const {* Audio channel masks *} CH_FRONT_LEFT = $00000001; CH_FRONT_RIGHT = $00000002; @@ -434,13 +470,28 @@ const CH_LAYOUT_MONO = (CH_FRONT_CENTER); CH_LAYOUT_STEREO = (CH_FRONT_LEFT or CH_FRONT_RIGHT); CH_LAYOUT_SURROUND = (CH_LAYOUT_STEREO or CH_FRONT_CENTER); +{$IF LIBAVCODEC_VERSION >= 52027000} // >= 52.27.0 + CH_LAYOUT_2_1 = (CH_LAYOUT_STEREO or CH_BACK_CENTER); + CH_LAYOUT_4POINT0 = (CH_LAYOUT_SURROUND or CH_BACK_CENTER); + CH_LAYOUT_2_2 = (CH_LAYOUT_STEREO or CH_SIDE_LEFT or CH_SIDE_RIGHT); +{$IFEND} CH_LAYOUT_QUAD = (CH_LAYOUT_STEREO or CH_BACK_LEFT or CH_BACK_RIGHT); CH_LAYOUT_5POINT0 = (CH_LAYOUT_SURROUND or CH_SIDE_LEFT or CH_SIDE_RIGHT); CH_LAYOUT_5POINT1 = (CH_LAYOUT_5POINT0 or CH_LOW_FREQUENCY); +{$IF LIBAVCODEC_VERSION >= 52025000} // >= 52.25.0 + CH_LAYOUT_5POINT0_BACK = (CH_LAYOUT_SURROUND or CH_BACK_LEFT or + CH_BACK_RIGHT); + CH_LAYOUT_5POINT1_BACK = (CH_LAYOUT_5POINT0_BACK or CH_LOW_FREQUENCY); +{$IFEND} CH_LAYOUT_7POINT1 = (CH_LAYOUT_5POINT1 or CH_BACK_LEFT or CH_BACK_RIGHT); +{$IF LIBAVCODEC_VERSION < 52025000} // < 52.25.0 CH_LAYOUT_7POINT1_WIDE = (CH_LAYOUT_SURROUND or CH_LOW_FREQUENCY or - CH_BACK_LEFT or CH_BACK_RIGHT or - CH_FRONT_LEFT_OF_CENTER or CH_FRONT_RIGHT_OF_CENTER); + CH_BACK_LEFT or CH_BACK_RIGHT or +{$ELSE} + CH_LAYOUT_7POINT1_WIDE = (CH_LAYOUT_5POINT1_BACK or +{$IFEND} + CH_FRONT_LEFT_OF_CENTER or + CH_FRONT_RIGHT_OF_CENTER); CH_LAYOUT_STEREO_DOWNMIX = (CH_STEREO_LEFT or CH_STEREO_RIGHT); @@ -482,20 +533,76 @@ type TAVDiscard = ( {* We leave some space between them for extensions (drop some - * keyframes for intra-only or drop just some bidir frames). *} - AVDISCARD_NONE =-16, ///< discard nothing - AVDISCARD_DEFAULT= 0, ///< discard useless packets like 0 size packets in avi - AVDISCARD_NONREF = 8, ///< discard all non reference - AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames - AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes - AVDISCARD_ALL = 48 ///< discard all + * keyframes for intra-only or drop just some bidir frames). + *} + AVDISCARD_NONE = -16, ///< discard nothing + AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi + AVDISCARD_NONREF = 8, ///< discard all non reference + AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames + AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes + AVDISCARD_ALL = 48 ///< discard all + ); + +{$IF LIBAVCODEC_VERSION >= 52028000} // >= 52.28.0 + TAVColorPrimaries = ( + AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B + AVCOL_PRI_UNSPECIFIED = 2, + AVCOL_PRI_BT470M = 4, + AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM + AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC + AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above + AVCOL_PRI_FILM = 8, + AVCOL_PRI_NB ///< Not part of ABI + ); + + TAVColorTransferCharacteristic = ( + AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 + AVCOL_TRC_UNSPECIFIED = 2, + AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM + AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG + AVCOL_TRC_NB ///< Not part of ABI + ); + + TAVColorSpace = ( + AVCOL_SPC_RGB = 0, + AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B + AVCOL_SPC_UNSPECIFIED = 2, + AVCOL_SPC_FCC = 4, + AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 + AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above + AVCOL_SPC_SMPTE240M = 7, + AVCOL_SPC_NB ///< Not part of ABI ); + TAVColorRange = ( + AVCOL_RANGE_UNSPECIFIED = 0, + AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges + AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges + AVCOL_RANGE_NB ///< Not part of ABI + ); + +(** + * X X 3 4 X X are luma samples, + * 1 2 1-6 are possible chroma positions + * X X 5 6 X 0 is undefined/unknown position + *) + TAVChromaLocation = ( + AVCHROMA_LOC_UNSPECIFIED = 0, + AVCHROMA_LOC_LEFT = 1, ///< mpeg2/4, h264 default + AVCHROMA_LOC_CENTER = 2, ///< mpeg1, jpeg, h263 + AVCHROMA_LOC_TOPLEFT = 3, ///< DV + AVCHROMA_LOC_TOP = 4, + AVCHROMA_LOC_BOTTOMLEFT = 5, + AVCHROMA_LOC_BOTTOM = 6, + AVCHROMA_LOC_NB ///< Not part of ABI + ); +{$IFEND} + PRcOverride = ^TRcOverride; TRcOverride = record {16} - start_frame: cint; - end_frame: cint; - qscale: cint; // if this is 0 then quality_factor will be used instead + start_frame: cint; + end_frame: cint; + qscale: cint; // if this is 0 then quality_factor will be used instead quality_factor: cfloat; end; @@ -655,8 +762,8 @@ type end; const - FF_QSCALE_TYPE_MPEG1 = 0; - FF_QSCALE_TYPE_MPEG2 = 1; + FF_QSCALE_TYPE_MPEG1 = 0; + FF_QSCALE_TYPE_MPEG2 = 1; FF_QSCALE_TYPE_H264 = 2; FF_BUFFER_TYPE_INTERNAL = 1; @@ -678,7 +785,311 @@ const FF_BUFFER_HINTS_PRESERVE = $04; // User must not alter buffer content FF_BUFFER_HINTS_REUSABLE = $08; // Codec will reuse the buffer (update) +const + {$IF LIBAVCODEC_VERSION < 52000000} // < 52.0.0 + DEFAULT_FRAME_RATE_BASE = 1001000; + {$IFEND} + + FF_ASPECT_EXTENDED = 15; + + FF_RC_STRATEGY_XVID = 1; + + FF_BUG_AUTODETECT = 1; ///< autodetection + FF_BUG_OLD_MSMPEG4 = 2; + FF_BUG_XVID_ILACE = 4; + FF_BUG_UMP4 = 8; + FF_BUG_NO_PADDING = 16; + FF_BUG_AMV = 32; + FF_BUG_AC_VLC = 0; ///< will be removed, libavcodec can now handle these non compliant files by default + FF_BUG_QPEL_CHROMA = 64; + FF_BUG_STD_QPEL = 128; + FF_BUG_QPEL_CHROMA2 = 256; + FF_BUG_DIRECT_BLOCKSIZE = 512; + FF_BUG_EDGE = 1024; + FF_BUG_HPEL_CHROMA = 2048; + FF_BUG_DC_CLIP = 4096; + FF_BUG_MS = 8192; ///< workaround various bugs in microsofts broken decoders + //FF_BUG_FAKE_SCALABILITY = 16 //Autodetection should work 100%. + + FF_COMPLIANCE_VERY_STRICT = 2; ///< strictly conform to a older more strict version of the spec or reference software + FF_COMPLIANCE_STRICT = 1; ///< strictly conform to all the things in the spec no matter what consequences + FF_COMPLIANCE_NORMAL = 0; + FF_COMPLIANCE_INOFFICIAL = -1; ///< allow inofficial extensions + FF_COMPLIANCE_EXPERIMENTAL = -2; ///< allow non standarized experimental things + + FF_ER_CAREFUL = 1; + FF_ER_COMPLIANT = 2; + FF_ER_AGGRESSIVE = 3; + FF_ER_VERY_AGGRESSIVE = 4; + + FF_DCT_AUTO = 0; + FF_DCT_FASTINT = 1; + FF_DCT_INT = 2; + FF_DCT_MMX = 3; + FF_DCT_MLIB = 4; + FF_DCT_ALTIVEC = 5; + FF_DCT_FAAN = 6; + + FF_IDCT_AUTO = 0; + FF_IDCT_INT = 1; + FF_IDCT_SIMPLE = 2; + FF_IDCT_SIMPLEMMX = 3; + FF_IDCT_LIBMPEG2MMX = 4; + FF_IDCT_PS2 = 5; + FF_IDCT_MLIB = 6; + FF_IDCT_ARM = 7; + FF_IDCT_ALTIVEC = 8; + FF_IDCT_SH4 = 9; + FF_IDCT_SIMPLEARM = 10; + FF_IDCT_H264 = 11; + FF_IDCT_VP3 = 12; + FF_IDCT_IPP = 13; + FF_IDCT_XVIDMMX = 14; + FF_IDCT_CAVS = 15; + FF_IDCT_SIMPLEARMV5TE= 16; + FF_IDCT_SIMPLEARMV6 = 17; + FF_IDCT_SIMPLEVIS = 18; + FF_IDCT_WMV2 = 19; + FF_IDCT_FAAN = 20; + FF_IDCT_EA = 21; + FF_IDCT_SIMPLENEON = 22; + FF_IDCT_SIMPLEALPHA = 23; + + FF_EC_GUESS_MVS = 1; + FF_EC_DEBLOCK = 2; + + FF_MM_FORCE = $80000000; (* force usage of selected flags (OR) *) + (* lower 16 bits - CPU features *) + FF_MM_MMX = $0001; ///< standard MMX + FF_MM_3DNOW = $0004; ///< AMD 3DNOW + {$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53} + FF_MM_MMXEXT = $0002; ///< SSE integer functions or AMD MMX ext + {$IFEND} + {$IF LIBAVCODEC_VERSION >= 52024000} // >= 52.24.0 + FF_MM_MMX2 = $0002; ///< SSE integer functions or AMD MMX ext + {$IFEND} + FF_MM_SSE = $0008; ///< SSE functions + FF_MM_SSE2 = $0010; ///< PIV SSE2 functions + FF_MM_3DNOWEXT = $0020; ///< AMD 3DNowExt + FF_MM_SSE3 = $0040; ///< Prescott SSE3 functions + FF_MM_SSSE3 = $0080; ///< Conroe SSSE3 functions + {$IF LIBAVCODEC_VERSION >= 52022003} // >= 52.22.3 + FF_MM_SSE4 = $0100; ///< Penryn SSE4.1 functions + FF_MM_SSE42 = $0200; ///< Nehalem SSE4.2 functions + {$IFEND} + FF_MM_IWMMXT = $0100; ///< XScale IWMMXT + FF_MM_ALTIVEC = $0001; ///< standard AltiVec + + FF_PRED_LEFT = 0; + FF_PRED_PLANE = 1; + FF_PRED_MEDIAN = 2; + + FF_DEBUG_PICT_INFO = 1; + FF_DEBUG_RC = 2; + FF_DEBUG_BITSTREAM = 4; + FF_DEBUG_MB_TYPE = 8; + FF_DEBUG_QP = 16; + FF_DEBUG_MV = 32; + FF_DEBUG_DCT_COEFF = $00000040; + FF_DEBUG_SKIP = $00000080; + FF_DEBUG_STARTCODE = $00000100; + FF_DEBUG_PTS = $00000200; + FF_DEBUG_ER = $00000400; + FF_DEBUG_MMCO = $00000800; + FF_DEBUG_BUGS = $00001000; + FF_DEBUG_VIS_QP = $00002000; + FF_DEBUG_VIS_MB_TYPE = $00004000; + FF_DEBUG_BUFFERS = $00008000; + + FF_DEBUG_VIS_MV_P_FOR = $00000001; //visualize forward predicted MVs of P frames + FF_DEBUG_VIS_MV_B_FOR = $00000002; //visualize forward predicted MVs of B frames + FF_DEBUG_VIS_MV_B_BACK = $00000004; //visualize backward predicted MVs of B frames + + FF_CMP_SAD = 0; + FF_CMP_SSE = 1; + FF_CMP_SATD = 2; + FF_CMP_DCT = 3; + FF_CMP_PSNR = 4; + FF_CMP_BIT = 5; + FF_CMP_RD = 6; + FF_CMP_ZERO = 7; + FF_CMP_VSAD = 8; + FF_CMP_VSSE = 9; + FF_CMP_NSSE = 10; + FF_CMP_W53 = 11; + FF_CMP_W97 = 12; + FF_CMP_DCTMAX = 13; + FF_CMP_DCT264 = 14; + FF_CMP_CHROMA = 256; + + FF_DTG_AFD_SAME = 8; + FF_DTG_AFD_4_3 = 9; + FF_DTG_AFD_16_9 = 10; + FF_DTG_AFD_14_9 = 11; + FF_DTG_AFD_4_3_SP_14_9 = 13; + FF_DTG_AFD_16_9_SP_14_9 = 14; + FF_DTG_AFD_SP_4_3 = 15; + + FF_DEFAULT_QUANT_BIAS = 999999; + + FF_LAMBDA_SHIFT = 7; + FF_LAMBDA_SCALE = (1 shl FF_LAMBDA_SHIFT); + FF_QP2LAMBDA = 118; ///< factor to convert from H.263 QP to lambda + FF_LAMBDA_MAX = (256 * 128 - 1); + + FF_QUALITY_SCALE = FF_LAMBDA_SCALE; //FIXME maybe remove + + FF_CODER_TYPE_VLC = 0; + FF_CODER_TYPE_AC = 1; + FF_CODER_TYPE_RAW = 2; + FF_CODER_TYPE_RLE = 3; + FF_CODER_TYPE_DEFLATE = 4; + + SLICE_FLAG_CODED_ORDER = $0001; ///< draw_horiz_band() is called in coded order instead of display + SLICE_FLAG_ALLOW_FIELD = $0002; ///< allow draw_horiz_band() with field slices (MPEG2 field pics) + SLICE_FLAG_ALLOW_PLANE = $0004; ///< allow draw_horiz_band() with 1 component at a time (SVQ1) + + FF_MB_DECISION_SIMPLE = 0; ///< uses mb_cmp + FF_MB_DECISION_BITS = 1; ///< chooses the one which needs the fewest bits + FF_MB_DECISION_RD = 2; ///< rate distortion + + FF_AA_AUTO = 0; + FF_AA_FASTINT = 1; //not implemented yet + FF_AA_INT = 2; + FF_AA_FLOAT = 3; + + FF_PROFILE_UNKNOWN = -99; + FF_PROFILE_AAC_MAIN = 0; + FF_PROFILE_AAC_LOW = 1; + FF_PROFILE_AAC_SSR = 2; + FF_PROFILE_AAC_LTP = 3; + + FF_LEVEL_UNKNOWN = -99; + + X264_PART_I4X4 = $001; (* Analyse i4x4 *) + X264_PART_I8X8 = $002; (* Analyse i8x8 (requires 8x8 transform) *) + X264_PART_P8X8 = $010; (* Analyse p16x8, p8x16 and p8x8 *) + X264_PART_P4X4 = $020; (* Analyse p8x4, p4x8, p4x4 *) + X264_PART_B8X8 = $100; (* Analyse b16x8, b8x16 and b8x8 *) + + FF_COMPRESSION_DEFAULT = -1; + +const + AVPALETTE_SIZE = 1024; + AVPALETTE_COUNT = 256; + +{$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53} +type +(** + * AVPaletteControl + * This structure defines a method for communicating palette changes + * between and demuxer and a decoder. + * + * @deprecated Use AVPacket to send palette changes instead. + * This is totally broken. + *) + PAVPaletteControl = ^TAVPaletteControl; + TAVPaletteControl = record + (* demuxer sets this to 1 to indicate the palette has changed; + * decoder resets to 0 *) + palette_changed: cint; + + (* 4-byte ARGB palette entries, stored in native byte order; note that + * the individual palette components should be on a 8-bit scale; if + * the palette data comes from a IBM VGA native format, the component + * data is probably 6 bits in size and needs to be scaled *) + palette: array [0..AVPALETTE_COUNT - 1] of cuint; + end; {deprecated;} +{$IFEND} + +{$IF LIBAVCODEC_VERSION >= 52023000} // >= 52.23.0 +type + PAVPacket = ^TAVPacket; + TAVPacket = record +(* + * Presentation timestamp in AVStream->time_base units; the time at which + * the decompressed packet will be presented to the user. + * Can be AV_NOPTS_VALUE if it is not stored in the file. + * pts MUST be larger or equal to dts as presentation cannot happen before + * decompression, unless one wants to view hex dumps. Some formats misuse + * the terms dts and pts/cts to mean something different. Such timestamps + * must be converted to true pts/dts before they are stored in AVPacket. + *) + pts: cint64; +(* + * Decompression timestamp in AVStream->time_base units; the time at which + * the packet is decompressed. + * Can be AV_NOPTS_VALUE if it is not stored in the file. + *) + dts: cint64; + data: PByteArray; + size: cint; + stream_index: cint; + flags: cint; +(* + * Duration of this packet in AVStream->time_base units, 0 if unknown. + * Equals next_pts - this_pts in presentation order. + *) + duration: cint; + destruct: procedure (para1: PAVPacket); cdecl; + priv: pointer; + pos: cint64; // byte position in stream, -1 if unknown + +(* + * Time difference in AVStream->time_base units from the pts of this + * packet to the point at which the output from the decoder has converged + * independent from the availability of previous frames. That is, the + * frames are virtually identical no matter if decoding started from + * the very first frame or from this keyframe. + * Is AV_NOPTS_VALUE if unknown. + * This field is not the display duration of the current packet. + * + * The purpose of this field is to allow seeking in streams that have no + * keyframes in the conventional sense. It corresponds to the + * recovery point SEI in H.264 and match_time_delta in NUT. It is also + * essential for some types of subtitle streams to ensure that all + * subtitles are correctly displayed after seeking. + *) + convergence_duration: cint64; + end; + +const + {$IF LIBAVCODEC_VERSION >= 52030002} // >= 52.30.2 + PKT_FLAG_KEY = $0001; + {$ELSE} + AV_PKT_FLAG_KEY = $0001; + {$IF LIBAVCODEC_VERSION_MAJOR < 53} + PKT_FLAG_KEY = AV_PKT_FLAG_KEY; + {$IFEND} + {$IFEND} +{$IFEND} + type + PAVClass = ^TAVClass; {const} + PAVCodecContext = ^TAVCodecContext; + + PAVCodec = ^TAVCodec; + +{$IF LIBAVCODEC_VERSION >= 52018000} // >= 52.18.0 + PAVHWAccel = ^TAVHWAccel; +{$IFEND} + + // int[4] + PQuadIntArray = ^TQuadIntArray; + TQuadIntArray = array[0..3] of cint; + // int (*func)(struct AVCodecContext *c2, void *arg) + TExecuteFunc = function(c2: PAVCodecContext; arg: Pointer): cint; cdecl; + + TAVClass = record + class_name: PAnsiChar; + (* actually passing a pointer to an AVCodecContext + or AVFormatContext, which begin with an AVClass. + Needed because av_log is in libavcodec and has no visibility + of AVIn/OutputFormat *) + item_name: function(): PAnsiChar; cdecl; + option: PAVOption; + end; + {** * Audio Video Frame. * New fields can be added to the end of FF_COMMON_FRAME with minor version @@ -724,7 +1135,7 @@ type * - decoding: Set by libavcodec. *) pts: cint64; - (**\ + (** * picture number in bitstream order * - encoding: set by * - decoding: Set by libavcodec. @@ -753,6 +1164,7 @@ type * is this picture used as reference * The values for this are the same as the MpegEncContext.picture_structure * variable, that is 1->top field, 2->bottom field, 3->frame/both fields. + * Set to 4 for delayed, non-reference frames. * - encoding: unused * - decoding: Set by libavcodec. (before get_buffer() call)). *) @@ -877,7 +1289,7 @@ type *) ref_index: array [0..1] of PShortint; - {$IF LIBAVCODEC_VERSION >= 51068000} // 51.68.0 + {$IF LIBAVCODEC_VERSION >= 51068000} // >= 51.68.0 (** * reordered opaque 64bit number (generally a PTS) from AVCodecContext.reordered_opaque * output in AVFrame.reordered_opaque @@ -886,8 +1298,20 @@ type *) reordered_opaque: cint64; {$IFEND} + + {$IF LIBAVCODEC_VERSION = 52021000} // = 52.21.0 + (** + * hardware accelerator private data (FFmpeg allocated) + * - encoding: unused + * - decoding: Set by libavcodec + *) + hwaccel_data_private: pointer; + {$IFEND} + {$IF LIBAVCODEC_VERSION >= 52022000} // >= 52.22.0 + hwaccel_picture_private: pointer; + {$IFEND} - {$IF LIBAVCODEC_VERSION >= 51070000} // 51.70.0 + {$IF LIBAVCODEC_VERSION >= 51070000} // >= 51.70.0 (** * Bits per sample/pixel of internal libavcodec pixel/sample format. * This field is applicable only when sample_fmt is SAMPLE_FMT_S32. @@ -897,7 +1321,7 @@ type bits_per_raw_sample: cint; {$IFEND} - {$IF LIBAVCODEC_VERSION >= 52002000} // 52.2.0 + {$IF LIBAVCODEC_VERSION >= 52002000} // >= 52.2.0 (** * Audio channel layout. * - encoding: set by user. @@ -913,7 +1337,7 @@ type request_channel_layout: cint64; {$IFEND} - {$IF LIBAVCODEC_VERSION >= 52004000} // 52.4.0 + {$IF LIBAVCODEC_VERSION >= 52004000} // >= 52.4.0 (** * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow. * - encoding: Set by user. @@ -928,234 +1352,73 @@ type *) rc_min_vbv_overflow_use: cfloat; {$IFEND} - end; - -const - {$IF LIBAVCODEC_VERSION < 52000000} // < 52.0.0 - DEFAULT_FRAME_RATE_BASE = 1001000; - {$IFEND} - - FF_ASPECT_EXTENDED = 15; - - FF_RC_STRATEGY_XVID = 1; - - FF_BUG_AUTODETECT = 1; ///< autodetection - FF_BUG_OLD_MSMPEG4 = 2; - FF_BUG_XVID_ILACE = 4; - FF_BUG_UMP4 = 8; - FF_BUG_NO_PADDING = 16; - FF_BUG_AMV = 32; - FF_BUG_AC_VLC = 0; ///< will be removed, libavcodec can now handle these non compliant files by default - FF_BUG_QPEL_CHROMA = 64; - FF_BUG_STD_QPEL = 128; - FF_BUG_QPEL_CHROMA2 = 256; - FF_BUG_DIRECT_BLOCKSIZE = 512; - FF_BUG_EDGE = 1024; - FF_BUG_HPEL_CHROMA = 2048; - FF_BUG_DC_CLIP = 4096; - FF_BUG_MS = 8192; ///< workaround various bugs in microsofts broken decoders - //FF_BUG_FAKE_SCALABILITY = 16 //Autodetection should work 100%. - - FF_COMPLIANCE_VERY_STRICT = 2; ///< strictly conform to a older more strict version of the spec or reference software - FF_COMPLIANCE_STRICT = 1; ///< strictly conform to all the things in the spec no matter what consequences - FF_COMPLIANCE_NORMAL = 0; - FF_COMPLIANCE_INOFFICIAL = -1; ///< allow inofficial extensions - FF_COMPLIANCE_EXPERIMENTAL = -2; ///< allow non standarized experimental things - - FF_ER_CAREFUL = 1; - FF_ER_COMPLIANT = 2; - FF_ER_AGGRESSIVE = 3; - FF_ER_VERY_AGGRESSIVE = 4; - - FF_DCT_AUTO = 0; - FF_DCT_FASTINT = 1; - FF_DCT_INT = 2; - FF_DCT_MMX = 3; - FF_DCT_MLIB = 4; - FF_DCT_ALTIVEC = 5; - FF_DCT_FAAN = 6; - - FF_IDCT_AUTO = 0; - FF_IDCT_INT = 1; - FF_IDCT_SIMPLE = 2; - FF_IDCT_SIMPLEMMX = 3; - FF_IDCT_LIBMPEG2MMX = 4; - FF_IDCT_PS2 = 5; - FF_IDCT_MLIB = 6; - FF_IDCT_ARM = 7; - FF_IDCT_ALTIVEC = 8; - FF_IDCT_SH4 = 9; - FF_IDCT_SIMPLEARM = 10; - FF_IDCT_H264 = 11; - FF_IDCT_VP3 = 12; - FF_IDCT_IPP = 13; - FF_IDCT_XVIDMMX = 14; - FF_IDCT_CAVS = 15; - FF_IDCT_SIMPLEARMV5TE= 16; - FF_IDCT_SIMPLEARMV6 = 17; - FF_IDCT_SIMPLEVIS = 18; - FF_IDCT_WMV2 = 19; - FF_IDCT_FAAN = 20; - FF_IDCT_EA = 21; - FF_IDCT_SIMPLENEON = 22; - FF_IDCT_SIMPLEALPHA = 23; - - FF_EC_GUESS_MVS = 1; - FF_EC_DEBLOCK = 2; - - FF_MM_FORCE = $80000000; (* force usage of selected flags (OR) *) - (* lower 16 bits - CPU features *) - FF_MM_MMX = $0001; ///< standard MMX - FF_MM_3DNOW = $0004; ///< AMD 3DNOW - FF_MM_MMXEXT = $0002; ///< SSE integer functions or AMD MMX ext - FF_MM_SSE = $0008; ///< SSE functions - FF_MM_SSE2 = $0010; ///< PIV SSE2 functions - FF_MM_3DNOWEXT = $0020; ///< AMD 3DNowExt - FF_MM_SSE3 = $0040; ///< Prescott SSE3 functions - FF_MM_SSSE3 = $0080; ///< Conroe SSSE3 functions - FF_MM_IWMMXT = $0100; ///< XScale IWMMXT - FF_MM_ALTIVEC = $0001; ///< standard AltiVec - - FF_PRED_LEFT = 0; - FF_PRED_PLANE = 1; - FF_PRED_MEDIAN = 2; - - FF_DEBUG_PICT_INFO = 1; - FF_DEBUG_RC = 2; - FF_DEBUG_BITSTREAM = 4; - FF_DEBUG_MB_TYPE = 8; - FF_DEBUG_QP = 16; - FF_DEBUG_MV = 32; - FF_DEBUG_DCT_COEFF = $00000040; - FF_DEBUG_SKIP = $00000080; - FF_DEBUG_STARTCODE = $00000100; - FF_DEBUG_PTS = $00000200; - FF_DEBUG_ER = $00000400; - FF_DEBUG_MMCO = $00000800; - FF_DEBUG_BUGS = $00001000; - FF_DEBUG_VIS_QP = $00002000; - FF_DEBUG_VIS_MB_TYPE = $00004000; - FF_DEBUG_BUFFERS = $00008000; - - FF_DEBUG_VIS_MV_P_FOR = $00000001; //visualize forward predicted MVs of P frames - FF_DEBUG_VIS_MV_B_FOR = $00000002; //visualize forward predicted MVs of B frames - FF_DEBUG_VIS_MV_B_BACK = $00000004; //visualize backward predicted MVs of B frames - - FF_CMP_SAD = 0; - FF_CMP_SSE = 1; - FF_CMP_SATD = 2; - FF_CMP_DCT = 3; - FF_CMP_PSNR = 4; - FF_CMP_BIT = 5; - FF_CMP_RD = 6; - FF_CMP_ZERO = 7; - FF_CMP_VSAD = 8; - FF_CMP_VSSE = 9; - FF_CMP_NSSE = 10; - FF_CMP_W53 = 11; - FF_CMP_W97 = 12; - FF_CMP_DCTMAX = 13; - FF_CMP_DCT264 = 14; - FF_CMP_CHROMA = 256; - - FF_DTG_AFD_SAME = 8; - FF_DTG_AFD_4_3 = 9; - FF_DTG_AFD_16_9 = 10; - FF_DTG_AFD_14_9 = 11; - FF_DTG_AFD_4_3_SP_14_9 = 13; - FF_DTG_AFD_16_9_SP_14_9 = 14; - FF_DTG_AFD_SP_4_3 = 15; - - FF_DEFAULT_QUANT_BIAS = 999999; - - FF_LAMBDA_SHIFT = 7; - FF_LAMBDA_SCALE = (1 shl FF_LAMBDA_SHIFT); - FF_QP2LAMBDA = 118; ///< factor to convert from H.263 QP to lambda - FF_LAMBDA_MAX = (256 * 128 - 1); - - FF_QUALITY_SCALE = FF_LAMBDA_SCALE; //FIXME maybe remove - - FF_CODER_TYPE_VLC = 0; - FF_CODER_TYPE_AC = 1; - FF_CODER_TYPE_RAW = 2; - FF_CODER_TYPE_RLE = 3; - FF_CODER_TYPE_DEFLATE = 4; - - SLICE_FLAG_CODED_ORDER = $0001; ///< draw_horiz_band() is called in coded order instead of display - SLICE_FLAG_ALLOW_FIELD = $0002; ///< allow draw_horiz_band() with field slices (MPEG2 field pics) - SLICE_FLAG_ALLOW_PLANE = $0004; ///< allow draw_horiz_band() with 1 component at a time (SVQ1) - - FF_MB_DECISION_SIMPLE = 0; ///< uses mb_cmp - FF_MB_DECISION_BITS = 1; ///< chooses the one which needs the fewest bits - FF_MB_DECISION_RD = 2; ///< rate distortion - - FF_AA_AUTO = 0; - FF_AA_FASTINT = 1; //not implemented yet - FF_AA_INT = 2; - FF_AA_FLOAT = 3; - - FF_PROFILE_UNKNOWN = -99; - FF_PROFILE_AAC_MAIN = 0; - FF_PROFILE_AAC_LOW = 1; - FF_PROFILE_AAC_SSR = 2; - FF_PROFILE_AAC_LTP = 3; - - FF_LEVEL_UNKNOWN = -99; - - X264_PART_I4X4 = $001; (* Analyse i4x4 *) - X264_PART_I8X8 = $002; (* Analyse i8x8 (requires 8x8 transform) *) - X264_PART_P8X8 = $010; (* Analyse p16x8, p8x16 and p8x8 *) - X264_PART_P4X4 = $020; (* Analyse p8x4, p4x8, p4x4 *) - X264_PART_B8X8 = $100; (* Analyse b16x8, b8x16 and b8x8 *) - - FF_COMPRESSION_DEFAULT = -1; - -const - AVPALETTE_SIZE = 1024; - AVPALETTE_COUNT = 256; - -type -(** - * AVPaletteControl - * This structure defines a method for communicating palette changes - * between and demuxer and a decoder. - * - * @deprecated Use AVPacket to send palette changes instead. - * This is totally broken. - *) - PAVPaletteControl = ^TAVPaletteControl; - TAVPaletteControl = record - (* demuxer sets this to 1 to indicate the palette has changed; - * decoder resets to 0 *) - palette_changed: cint; - - (* 4-byte ARGB palette entries, stored in native byte order; note that - * the individual palette components should be on a 8-bit scale; if - * the palette data comes from a IBM VGA native format, the component - * data is probably 6 bits in size and needs to be scaled *) - palette: array [0..AVPALETTE_COUNT - 1] of cuint; - end; {deprecated;} + {$IF LIBAVCODEC_VERSION >= 52018000} // >= 52.18.0 + (** + * Hardware accelerator in use + * - encoding: unused. + * - decoding: Set by libavcodec + *) + hwaccel: PAVHWAccel; + {$IFEND} + {$IF LIBAVCODEC_VERSION >= 52020000} // >= 52.20.0 + (** + * For some codecs, the time base is closer to the field rate than the frame rate. + * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration + * if no telecine is used ... + * + * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. + *) + ticks_per_frame: cint; + {$IFEND} + {$IF LIBAVCODEC_VERSION >= 52021000} // >= 52.21.0 + (** + * Hardware accelerator context. + * For some hardware accelerators, a global context needs to be + * provided by the user. In that case, this holds display-dependent + * data FFmpeg cannot instantiate itself. Please refer to the + * FFmpeg HW accelerator documentation to know how to fill this + * is. e.g. for VA API, this is a struct vaapi_context. + * - encoding: unused + * - decoding: Set by user + *) + hwaccel_context: pointer; + {$IFEND} + {$IF LIBAVCODEC_VERSION >= 52028000} // >= 52.28.0 + (** + * Chromaticity coordinates of the source primaries. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + color_primaries: TAVColorPrimaries; -type - PAVClass = ^TAVClass; {const} - PAVCodecContext = ^TAVCodecContext; + (** + * Color Transfer Characteristic. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + color_trc: TAVColorTransferCharacteristic; - PAVCodec = ^TAVCodec; + (** + * YUV colorspace type. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + colorspace: TAVColorSpace; - // int[4] - PQuadIntArray = ^TQuadIntArray; - TQuadIntArray = array[0..3] of cint; - // int (*func)(struct AVCodecContext *c2, void *arg) - TExecuteFunc = function(c2: PAVCodecContext; arg: Pointer): cint; cdecl; + (** + * MPEG vs JPEG YUV range. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + color_range: TAVColorRange; - TAVClass = record - class_name: PAnsiChar; - (* actually passing a pointer to an AVCodecContext - or AVFormatContext, which begin with an AVClass. - Needed because av_log is in libavcodec and has no visibility - of AVIn/OutputFormat *) - item_name: function(): PAnsiChar; cdecl; - option: PAVOption; + (** + * This defines the location of chroma samples. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + chroma_sample_location: TAVChromaLocation; + {$IFEND} end; (** @@ -1273,6 +1536,13 @@ type * decoder to draw a horizontal band. It improves cache usage. Not * all codecs can do that. You must check the codec capabilities * beforehand. + * The function is also used by hardware acceleration APIs. + * It is called at least once during frame decoding to pass + * the data needed for hardware render. + * In that mode instead of pixel data, AVFrame points to + * a structure specific to the acceleration API. The application + * reads the structure and can change some fields to indicate progress + * or mark state. * - encoding: unused * - decoding: Set by user. * @param height the height of the slice @@ -1301,7 +1571,9 @@ type *) frame_size: cint; frame_number: cint; ///< audio or video frame number +{$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53} real_pict_num: cint; ///< returns the real picture number of previous encoded frame +{$IFEND} (** * Number of frames the decoded output will be delayed relative to @@ -1490,6 +1762,9 @@ type * If pic.reference is set then the frame will be read later by libavcodec. * avcodec_align_dimensions() should be used to find the required width and * height, as they normally need to be rounded up to the next multiple of 16. + * if CODEC_CAP_DR1 is not set then get_buffer() must call + * avcodec_default_get_buffer() instead of providing buffers allocated by + * some other means. * - encoding: unused * - decoding: Set by libavcodec., user can override. *) @@ -1505,7 +1780,8 @@ type release_buffer: procedure (c: PAVCodecContext; pic: PAVFrame); cdecl; (** - * If 1 the stream has a 1 frame delay during decoding. + * Size of the frame reordering buffer in the decoder. + * For MPEG-2 it is 1 IPB or 0 low delay IP. * - encoding: Set by libavcodec. * - decoding: Set by libavcodec. *) @@ -2012,6 +2288,9 @@ type * libavcodec will pass previous buffer in pic, function should return * same buffer or new buffer with old frame "painted" into it. * If pic.data[0] == NULL must behave like get_buffer(). + * if CODEC_CAP_DR1 is not set then reget_buffer() must call + * avcodec_default_reget_buffer() instead of providing buffers allocated by + * some other means. * - encoding: unused * - decoding: Set by libavcodec., user can override *) @@ -2465,6 +2744,15 @@ type *) reordered_opaque: cint64; {$IFEND} + + {$IF LIBAVCODEC_VERSION >= 52028000} // 52.28.0 + (** + * This defines the location of chroma samples. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + chroma_sample_location: TAVChromaLocation; + {$IFEND} end; (** @@ -2479,7 +2767,11 @@ type encode: function (avctx: PAVCodecContext; buf: PByteArray; buf_size: cint; data: pointer): cint; cdecl; close: function (avctx: PAVCodecContext): cint; cdecl; decode: function (avctx: PAVCodecContext; outdata: pointer; var outdata_size: cint; + {$IF LIBAVCODEC_VERSION < 52025000} // 52.25.0 buf: {const} PByteArray; buf_size: cint): cint; cdecl; + {$ELSE} + avpkt: PAVPacket): cint; cdecl; + {$IFEND} (** * Codec capabilities. * see CODEC_CAP_* @@ -2495,8 +2787,8 @@ type pix_fmts: {const} PAVPixelFormat; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 {$IF LIBAVCODEC_VERSION >= 51055000} // 51.55.0 (** - * Descriptive name for the codec, meant to be more human readable than \p name. - * You \e should use the NULL_IF_CONFIG_SMALL() macro to define it. + * Descriptive name for the codec, meant to be more human readable than name. + * You should use the NULL_IF_CONFIG_SMALL() macro to define it. *) long_name: {const} PAnsiChar; {$IFEND} @@ -2511,6 +2803,105 @@ type {$IFEND} end; +{$IF LIBAVCODEC_VERSION >= 52018000} // 52.18.0 +(** + * AVHWAccel. + *) + TAVHWAccel = record + (** + * Name of the hardware accelerated codec. + * The name is globally unique among encoders and among decoders (but an + * encoder and a decoder can share the same name). + *) + name: PAnsiChar; + + (** + * Type of codec implemented by the hardware accelerator. + * + * See CODEC_TYPE_xxx + *) + type_: TCodecType; + + (** + * Codec implemented by the hardware accelerator. + * + * See CODEC_ID_xxx + *) + id: TCodecID; + + (** + * Supported pixel format. + * + * Only hardware accelerated formats are supported here. + *) + pix_fmt: {const} PAVPixelFormat; + + (** + * Hardware accelerated codec capabilities. + * see FF_HWACCEL_CODEC_CAP_* + *) + capabilities: cint; + + next: PAVCodec; + + (** + * Called at the beginning of each frame or field picture. + * + * Meaningful frame information (codec specific) is guaranteed to + * be parsed at this point. This function is mandatory. + * + * Note that buf can be NULL along with buf_size set to 0. + * Otherwise, this means the whole frame is available at this point. + * + * @param avctx the codec context + * @param buf the frame data buffer base + * @param buf_size the size of the frame in bytes + * @return zero if successful, a negative value otherwise + *) + start_frame: function (avctx: PAVCodecContext; + buf: PByteArray; + buf_size: cint): cint; cdecl; + + (** + * Callback for each slice. + * + * Meaningful slice information (codec specific) is guaranteed to + * be parsed at this point. This function is mandatory. + * + * @param avctx the codec context + * @param buf the slice data buffer base + * @param buf_size the size of the slice in bytes + * @return zero if successful, a negative value otherwise + *) + decode_slice: function (avctx: PAVCodecContext; + buf: PByteArray; + buf_size: cint): cint; cdecl; + + (** + * Called at the end of each frame or field picture. + * + * The whole picture is parsed at this point and can now be sent + * to the hardware accelerator. This function is mandatory. + * + * @param avctx the codec context + * @return zero if successful, a negative value otherwise + *) + end_frame: function (avctx: PAVCodecContext): cint; cdecl; + +{$IF LIBAVCODEC_VERSION >= 52021000} // >= 52.21.0 + (** + * Size of HW accelerator private data. + * + * Private data is allocated with av_mallocz() before + * AVCodecContext.get_buffer() and deallocated after + * AVCodecContext.release_buffer(). + *) + priv_data_size: cint; +{$IFEND} + + end; +{$IFEND} + (** * four components are given, that's all. * the last component is alpha @@ -2594,9 +2985,69 @@ type {$IFEND} end; +{$IF LIBAVCODEC_VERSION >= 52025000} // 52.25.0 +{ packet functions } -(* resample.c *) +(** + * @deprecated use NULL instead + *) +procedure av_destruct_packet_nofree(pkt: PAVPacket); + cdecl; external av__codec; +(* + * Default packet destructor. + *) +procedure av_destruct_packet(pkt: PAVPacket); + cdecl; external av__codec; + +(* + * Initialize optional fields of a packet with default values. + * + * @param pkt packet + *) +procedure av_init_packet(pkt: PAVPacket); + cdecl; external av__codec; + +(* + * Allocate the payload of a packet and initialize its fields with + * default values. + * + * @param pkt packet + * @param size wanted payload size + * @return 0 if OK, AVERROR_xxx otherwise + *) +function av_new_packet(pkt: PAVPacket; size: cint): cint; + cdecl; external av__codec; + +(* + * Reduce packet size, correctly zeroing padding + * + * @param pkt packet + * @param size new size + *) +procedure av_shrink_packet(pkt: PAVPacket; size: cint); + cdecl; external av__codec; + +(* + * @warning This is a hack - the packet memory allocation stuff is broken. The + * packet is allocated if it was not really allocated. + *) +function av_dup_packet(pkt: PAVPacket): cint; + cdecl; external av__codec; + +(* + * Free a packet. + * + * @param pkt packet to free + *) +procedure av_free_packet(pkt: PAVPacket); +{$IF LIBAVCODEC_VERSION >= 52028000} // 52.28.0 + cdecl; external av__codec; +{$IFEND} +{$IFEND} + +(* resample.c *) +type PReSampleContext = pointer; PAVResampleContext = pointer; PImgReSampleContext = pointer; @@ -2611,15 +3062,44 @@ function audio_resample (s: PReSampleContext; output: PSmallint; input: PSmallin procedure audio_resample_close (s: PReSampleContext); cdecl; external av__codec; - +(** + * Initializes an audio resampler. + * Note, if either rate is not an integer then simply scale both rates up so they are. + * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq + * @param log2_phase_count log2 of the number of entries in the polyphase filterbank + * @param linear If 1 then the used FIR filter will be linearly interpolated + between the 2 closest, if 0 the closest will be used + * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate + *) function av_resample_init (out_rate: cint; in_rate: cint; filter_length: cint; log2_phase_count: cint; linear: cint; cutoff: cdouble): PAVResampleContext; cdecl; external av__codec; +(** + * resamples. + * @param src an array of unconsumed samples + * @param consumed the number of samples of src which have been consumed are returned here + * @param src_size the number of unconsumed samples available + * @param dst_size the amount of space in samples available in dst + * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context. + * @return the number of samples written in dst or -1 if an error occurred + *) function av_resample (c: PAVResampleContext; dst: PSmallint; src: PSmallint; var consumed: cint; src_size: cint; dst_size: cint; update_ctx: cint): cint; cdecl; external av__codec; +(** + * Compensates samplerate/timestamp drift. The compensation is done by changing + * the resampler parameters, so no audible clicks or similar distortions occur + * @param compensation_distance distance in output samples over which the compensation should be performed + * @param sample_delta number of output samples which should be output less + * + * example: av_resample_compensate(c, 10, 500) + * here instead of 510 samples only 500 samples would be output + * + * note, due to rounding the actual compensation might be slightly different, + * especially if the compensation_distance is large and the in_rate used during init is small + *) procedure av_resample_compensate (c: PAVResampleContext; sample_delta: cint; compensation_distance: cint); cdecl; external av__codec; @@ -2627,7 +3107,6 @@ procedure av_resample_compensate (c: PAVResampleContext; sample_delta: cint; procedure av_resample_close (c: PAVResampleContext); cdecl; external av__codec; - {$IF LIBAVCODEC_VERSION < 52000000} // 52.0.0 (* YUV420 format is assumed ! *) @@ -2660,7 +3139,6 @@ procedure img_resample (s: PImgReSampleContext; output: PAVPicture; input: {cons *) procedure img_resample_close (s: PImgReSampleContext); cdecl; external av__codec; deprecated; - {$IFEND} (** @@ -2692,6 +3170,7 @@ procedure avpicture_free (picture: PAVPicture); * If a planar format is specified, several pointers will be set pointing to * the different picture planes and the line sizes of the different planes * will be stored in the lines_sizes array. + * Call with ptr == NULL to get the required size for the ptr buffer. * * @param picture AVPicture whose fields are to be filled in * @param ptr Buffer which will contain or contains the actual image data @@ -2712,11 +3191,14 @@ function avpicture_layout (src: {const} PAVPicture; pix_fmt: TAVPixelFormat; (** * Calculate the size in bytes that a picture of the given width and height * would occupy if stored in the given picture format. + * Note that this returns the size of a compact representation as generated + * by avpicture_layout, which can be smaller than the size required for e.g. + * avpicture_fill. * * @param pix_fmt the given picture format * @param width the width of the image * @param height the height of the image - * @return Image data size in bytes + * @return Image data size in bytes or -1 on error (e.g. too large dimensions). *) function avpicture_get_size (pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; cdecl; external av__codec; @@ -2724,12 +3206,34 @@ function avpicture_get_size (pix_fmt: TAVPixelFormat; width: cint; height: cint) procedure avcodec_get_chroma_sub_sample (pix_fmt: TAVPixelFormat; var h_shift: cint; var v_shift: cint); cdecl; external av__codec; +(** + * Returns the pixel format corresponding to the name \p name. + * + * If there is no pixel format with name \p name, then looks for a + * pixel format with the name corresponding to the native endian + * format of \p name. + * For example in a little-endian system, first looks for "gray16", + * then for "gray16le". + * + * Finally if no pixel format has been found, returns \c PIX_FMT_NONE. + *) function avcodec_get_pix_fmt_name(pix_fmt: TAVPixelFormat): PAnsiChar; cdecl; external av__codec; procedure avcodec_set_dimensions(s: PAVCodecContext; width: cint; height: cint); cdecl; external av__codec; +(** + * Returns the pixel format corresponding to the name name. + * + * If there is no pixel format with name name, then looks for a + * pixel format with the name corresponding to the native endian + * format of name. + * For example in a little-endian system, first looks for "gray16", + * then for "gray16le". + * + * Finally if no pixel format has been found, returns PIX_FMT_NONE. + *) function avcodec_get_pix_fmt(name: {const} PAnsiChar): TAVPixelFormat; cdecl; external av__codec; @@ -2773,7 +3277,7 @@ function avcodec_get_pix_fmt_loss (dst_pix_fmt: TAVPixelFormat; src_pix_fmt: TAV * some formats to other formats. avcodec_find_best_pix_fmt() searches which of * the given pixel formats should be used to suffer the least amount of loss. * The pixel formats from which it chooses one, are determined by the - * \p pix_fmt_mask parameter. + * pix_fmt_mask parameter. * * @code * src_pix_fmt = PIX_FMT_YUV420P; @@ -2791,10 +3295,14 @@ function avcodec_get_pix_fmt_loss (dst_pix_fmt: TAVPixelFormat; src_pix_fmt: TAV function avcodec_find_best_pix_fmt(pix_fmt_mask: cint64; src_pix_fmt: TAVPixelFormat; has_alpha: cint; loss_ptr: PCint): cint; cdecl; external av__codec; -{$ELSE} +{$ELSEIF LIBAVCODEC_VERSION < 52022001} function avcodec_find_best_pix_fmt(pix_fmt_mask: cint; src_pix_fmt: TAVPixelFormat; has_alpha: cint; loss_ptr: PCint): cint; cdecl; external av__codec; +{$ELSE} +function avcodec_find_best_pix_fmt(pix_fmt_mask: cint; src_pix_fmt: TAVPixelFormat; + has_alpha: cint; loss_ptr: PCint): TAVPixelFormat; + cdecl; external av__codec; {$IFEND} {$IF LIBAVCODEC_VERSION >= 51041000} // 51.41.0 @@ -2808,8 +3316,13 @@ function avcodec_find_best_pix_fmt(pix_fmt_mask: cint; src_pix_fmt: TAVPixelForm * a negative value to print the corresponding header. * Meaningful values for obtaining a pixel format info vary from 0 to PIX_FMT_NB -1. *) +{$IF LIBAVCODEC_VERSION < 52022001} // 52.22.1 procedure avcodec_pix_fmt_string (buf: PAnsiChar; buf_size: cint; pix_fmt: cint); cdecl; external av__codec; +{$ELSE} +procedure avcodec_pix_fmt_string (buf: PAnsiChar; buf_size: cint; pix_fmt: TAVPixelFormat); + cdecl; external av__codec; +{$IFEND} {$IFEND} const @@ -2822,7 +3335,8 @@ const *) function img_get_alpha_info (src: {const} PAVPicture; pix_fmt: TAVPixelFormat; - width: cint; height: cint): cint; + width: cint; + height: cint): cint; cdecl; external av__codec; {$IF LIBAVCODEC_VERSION < 52000000} // 52.0.0 @@ -2838,8 +3352,11 @@ function img_convert (dst: PAVPicture; dst_pix_fmt: TAVPixelFormat; (* deinterlace a picture *) (* deinterlace - if not supported return -1 *) -function avpicture_deinterlace (dst: PAVPicture; src: {const} PAVPicture; - pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; +function avpicture_deinterlace (dst: PAVPicture; + src: {const} PAVPicture; + pix_fmt: TAVPixelFormat; + width: cint; + height: cint): cint; cdecl; external av__codec; {* external high level API *} @@ -2852,6 +3369,11 @@ var {$IFEND} {$IF LIBAVCODEC_VERSION >= 51049000} // 51.49.0 +(** + * If c is NULL, returns the first registered codec, + * if c is non-NULL, returns the next registered codec after c, + * or NULL if c is the last one. + *) function av_codec_next(c: PAVCodec): PAVCodec; cdecl; external av__codec; {$IFEND} @@ -2871,20 +3393,27 @@ function avcodec_build(): cuint; (** * Initializes libavcodec. * - * @warning This function \e must be called before any other libavcodec + * @warning This function must be called before any other libavcodec * function. *) procedure avcodec_init(); cdecl; external av__codec; (** - * Register the codec \p codec and initialize libavcodec. + * Register the codec codec and initialize libavcodec. * * @see avcodec_init() *) +{$IF LIBAVCODEC_VERSION >= 52014000} // 52.14.0 +procedure avcodec_register(codec: PAVCodec); + cdecl; external av__codec; +// Deprecated in favor of avcodec_register. +procedure register_avcodec(codec: PAVCodec); + cdecl; external av__codec; deprecated; +{$ELSEIF LIBAVCODEC_VERSION_MAJOR < 53} procedure register_avcodec(codec: PAVCodec); cdecl; external av__codec; - +{$IFEND} (** * Finds a registered encoder with a matching codec ID. * @@ -3050,125 +3579,189 @@ function avcodec_open(avctx: PAVCodecContext; codec: PAVCodec): cint; {$IF LIBAVCODEC_VERSION < 52000000} // < 52.0.0 (** - * @deprecated Use avcodec_decode_audio2() instead. + * @deprecated Use avcodec_decode_audio2 instead. *) function avcodec_decode_audio(avctx: PAVCodecContext; samples: PSmallint; var frame_size_ptr: cint; buf: {const} PByteArray; buf_size: cint): cint; - cdecl; external av__codec; + cdecl; external av__codec; {deprecated;} {$IFEND} +{$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53} {$IF LIBAVCODEC_VERSION >= 51030000} // 51.30.0 (** - * Decodes an audio frame from \p buf into \p samples. - * The avcodec_decode_audio2() function decodes an audio frame from the input - * buffer \p buf of size \p buf_size. To decode it, it makes use of the - * audio codec which was coupled with \p avctx using avcodec_open(). The - * resulting decoded frame is stored in output buffer \p samples. If no frame - * could be decompressed, \p frame_size_ptr is zero. Otherwise, it is the - * decompressed frame size in \e bytes. + * Decodes an audio frame from buf into samples. + * Wrapper function which calls avcodec_decode_audio3. + * + * @deprecated Use avcodec_decode_audio3 instead. + * @param avctx the codec context + * @param[out] samples the output buffer + * @param[in,out] frame_size_ptr the output buffer size in bytes + * @param[in] buf the input buffer + * @param[in] buf_size the input buffer size in bytes + * @return On error a negative value is returned, otherwise the number of bytes + * used or zero if no frame could be decompressed. + *) +function avcodec_decode_audio2(avctx: PAVCodecContext; samples: PSmallint; + var frame_size_ptr: cint; + buf: {const} PByteArray; buf_size: cint): cint; + cdecl; external av__codec; {deprecated;} +{$IFEND} +{$IFEND} + +{$IF LIBAVCODEC_VERSION >= 52025000} // 52.25.0 +(** + * Decodes the audio frame of size avpkt->size from avpkt->data into samples. + * Some decoders may support multiple frames in a single AVPacket, such + * decoders would then just decode the first frame. + * If no frame + * could be decompressed, frame_size_ptr is zero. Otherwise, it is the + * decompressed frame size in bytes. * - * @warning You \e must set \p frame_size_ptr to the allocated size of the - * output buffer before calling avcodec_decode_audio2(). + * @warning You must set frame_size_ptr to the allocated size of the + * output buffer before calling avcodec_decode_audio3(). * - * @warning The input buffer must be \c FF_INPUT_BUFFER_PADDING_SIZE larger than + * @warning The input buffer must be FF_INPUT_BUFFER_PADDING_SIZE larger than * the actual read bytes because some optimized bitstream readers read 32 or 64 * bits at once and could read over the end. * - * @warning The end of the input buffer \p buf should be set to 0 to ensure that + * @warning The end of the input buffer avpkt->data should be set to 0 to ensure that * no overreading happens for damaged MPEG streams. * - * @note You might have to align the input buffer \p buf and output buffer \p + * @note You might have to align the input buffer avpkt->data and output buffer * samples. The alignment requirements depend on the CPU: On some CPUs it isn't * necessary at all, on others it won't work at all if not aligned and on others - * it will work but it will have an impact on performance. In practice, the - * bitstream should have 4 byte alignment at minimum and all sample data should - * be 16 byte aligned unless the CPU doesn't need it (AltiVec and SSE do). If - * the linesize is not a multiple of 16 then there's no sense in aligning the - * start of the buffer to 16. + * * it will work but it will have an impact on performance. + * + * In practice, avpkt->data should have 4 byte alignment at minimum and + * samples should be 16 byte aligned unless the CPU doesn't need it + * (AltiVec and SSE do). * * @note Some codecs have a delay between input and output, these need to be - * feeded with buf=NULL, buf_size=0 at the end to return the remaining frames. + * feeded with avpkt->data=NULL, avpkt->size=0 at the end to return the remaining frames. * * @param avctx the codec context * @param[out] samples the output buffer * @param[in,out] frame_size_ptr the output buffer size in bytes - * @param[in] buf the input buffer - * @param[in] buf_size the input buffer size in bytes + * @param[in] avpkt The input AVPacket containing the input buffer. + * You can create such packet with av_init_packet() and by then setting + * data and size, some decoders might in addition need other fields. + * All decoders are designed to use the least fields possible though. * @return On error a negative value is returned, otherwise the number of bytes * used or zero if no frame could be decompressed. *) -function avcodec_decode_audio2(avctx: PAVCodecContext; samples: PSmallint; +function avcodec_decode_audio3(avctx: PAVCodecContext; samples: PSmallint; var frame_size_ptr: cint; - buf: {const} PByteArray; buf_size: cint): cint; + avpkt: PAVPacket): cint; cdecl; external av__codec; {$IFEND} +{$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53} (** - * Decodes a video frame from \p buf into \p picture. - * The avcodec_decode_video() function decodes a video frame from the input - * buffer \p buf of size \p buf_size. To decode it, it makes use of the - * video codec which was coupled with \p avctx using avcodec_open(). The - * resulting decoded frame is stored in \p picture. + * Decodes a video frame from buf into picture. + * Wrapper function which calls avcodec_decode_video2. * - * @warning The input buffer must be \c FF_INPUT_BUFFER_PADDING_SIZE larger than + * @deprecated Use avcodec_decode_video2 instead. + * @param avctx the codec context + * @param[out] picture The AVFrame in which the decoded video frame will be stored. + * @param[in] buf the input buffer + * @param[in] buf_size the size of the input buffer in bytes + * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. + * @return On error a negative value is returned, otherwise the number of bytes + * used or zero if no frame could be decompressed. + *) +function avcodec_decode_video(avctx: PAVCodecContext; picture: PAVFrame; + var got_picture_ptr: cint; + buf: {const} PByteArray; buf_size: cint): cint; + cdecl; external av__codec; {deprecated;} +{$IFEND} + +{$IF LIBAVCODEC_VERSION >= 52025000} // 52.25.0 +(** + * Decodes the video frame of size avpkt->size from avpkt->data into picture. + * Some decoders may support multiple frames in a single AVPacket, such + * decoders would then just decode the first frame. + * + * @warning The input buffer must be FF_INPUT_BUFFER_PADDING_SIZE larger than * the actual read bytes because some optimized bitstream readers read 32 or 64 * bits at once and could read over the end. * - * @warning The end of the input buffer \p buf should be set to 0 to ensure that + * @warning The end of the input buffer buf should be set to 0 to ensure that * no overreading happens for damaged MPEG streams. * - * @note You might have to align the input buffer \p buf and output buffer \p - * samples. The alignment requirements depend on the CPU: on some CPUs it isn't + * @note You might have to align the input buffer avpkt->data. + * The alignment requirements depend on the CPU: on some CPUs it isn't * necessary at all, on others it won't work at all if not aligned and on others - * it will work but it will have an impact on performance. In practice, the - * bitstream should have 4 byte alignment at minimum and all sample data should - * be 16 byte aligned unless the CPU doesn't need it (AltiVec and SSE do). If - * the linesize is not a multiple of 16 then there's no sense in aligning the - * start of the buffer to 16. + * it will work but it will have an impact on performance. + * + * In practice, avpkt->data should have 4 byte alignment at minimum. * * @param avctx the codec context * @param[out] picture The AVFrame in which the decoded video frame will be stored. - * @param[in] buf the input buffer - * @param[in] buf_size the size of the input buffer in bytes + * @param[in] avpkt The input AVpacket containing the input buffer. + * You can create such packet with av_init_packet() and by then setting + * data and size, some decoders might in addition need other fields like + * flags&PKT_FLAG_KEY. All decoders are designed to use the least + * fields possible. * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. * @return On error a negative value is returned, otherwise the number of bytes * used or zero if no frame could be decompressed. *) -function avcodec_decode_video(avctx: PAVCodecContext; picture: PAVFrame; +function avcodec_decode_video2(avctx: PAVCodecContext; picture: PAVFrame; var got_picture_ptr: cint; - buf: {const} PByteArray; buf_size: cint): cint; + avpkt: PAVPacket): cint; cdecl; external av__codec; +{$IFEND} +{$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53} (* Decode a subtitle message. Return -1 if error, otherwise return the * number of bytes used. If no subtitle could be decompressed, - * got_sub_ptr is zero. Otherwise, the subtitle is stored in *sub. *) + * got_sub_ptr is zero. Otherwise, the subtitle is stored in*sub. + *) function avcodec_decode_subtitle(avctx: PAVCodecContext; sub: PAVSubtitle; var got_sub_ptr: cint; buf: {const} PByteArray; buf_size: cint): cint; cdecl; external av__codec; +{$IFEND} + +{$IF LIBAVCODEC_VERSION >= 52025000} // 52.25.0 +(* Decodes a subtitle message. + * Returns a negative value on error, otherwise returns the number of bytes used. + * If no subtitle could be decompressed, got_sub_ptr is zero. + * Otherwise, the subtitle is stored in sub. + * + * @param avctx the codec context + * @param[out] sub The AVSubtitle in which the decoded subtitle will be stored. + * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. + * @param[in] avpkt The input AVPacket containing the input buffer. + *) +function avcodec_decode_subtitle2(avctx: PAVCodecContext; sub: PAVSubtitle; + var got_sub_ptr: cint; + avpkt: PAVPacket): cint; + cdecl; external av__codec; +{$IFEND} + function avcodec_parse_frame(avctx: PAVCodecContext; pdata: PPointer; data_size_ptr: PCint; buf: PByteArray; buf_size: cint): cint; cdecl; external av__codec; (** - * Encodes an audio frame from \p samples into \p buf. - * The avcodec_encode_audio() function encodes an audio frame from the input - * buffer \p samples. To encode it, it makes use of the audio codec which was - * coupled with \p avctx using avcodec_open(). The resulting encoded frame is - * stored in output buffer \p buf. + * Encodes an audio frame from samples into buf. * - * @note The output buffer should be at least \c FF_MIN_BUFFER_SIZE bytes large. + * @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large. + * However, for PCM audio the user will know how much space is needed + * because it depends on the value passed in buf_size as described + * below. In that case a lower value can be used. * * @param avctx the codec context * @param[out] buf the output buffer * @param[in] buf_size the output buffer size * @param[in] samples the input buffer containing the samples * The number of samples read from this buffer is frame_size*channels, - * both of which are defined in \p avctx. - * For PCM audio the number of samples read from \p samples is equal to - * \p buf_size * input_sample_size / output_sample_size. + * both of which are defined in avctx. + * For PCM audio the number of samples read from samples is equal to + * buf_size * input_sample_size / output_sample_size. * @return On error a negative value is returned, on success zero or the number * of bytes used to encode the data read from the input buffer. *) @@ -3177,12 +3770,9 @@ function avcodec_encode_audio(avctx: PAVCodecContext; buf: PByte; cdecl; external av__codec; (** - * Encodes a video frame from \p pict into \p buf. - * The avcodec_encode_video() function encodes a video frame from the input - * \p pict. To encode it, it makes use of the video codec which was coupled with - * \p avctx using avcodec_open(). The resulting encoded bytes representing the - * frame are stored in the output buffer \p buf. The input picture should be - * stored using a specific format, namely \c avctx.pix_fmt. + * Encodes a video frame from pict into buf. + * The input picture should be + * stored using a specific format, namely avctx.pix_fmt. * * @param avctx the codec context * @param[out] buf the output buffer for the bitstream of encoded frame @@ -3208,6 +3798,7 @@ function avcodec_close(avctx: PAVCodecContext): cint; * functions. * * @see register_avcodec + * @see avcodec_register * @see av_register_codec_parser * @see av_register_bitstream_filter *) @@ -3226,7 +3817,7 @@ procedure avcodec_default_free_buffers(s: PAVCodecContext); (* misc useful functions *) (** - * Returns a single letter to describe the given picture type \p pict_type. + * Returns a single letter to describe the given picture type pict_type. * * @param[in] pict_type the picture type * @return A single character representing the picture type. @@ -3271,6 +3862,15 @@ type next_frame_offset: cint64; (* offset of the next frame *) (* video info *) pict_type: cint; (* XXX: put it back in AVCodecContext *) + (** + * This field is used for proper frame duration computation in lavf. + * It signals, how much longer the frame duration of the current frame + * is compared to normal frame duration. + * + * frame_duration = (1 + repeat_pict) * time_base + * + * It is used by codecs like H.264 to display telecined material. + *) repeat_pict: cint; (* XXX: put it back in AVCodecContext *) pts: cint64; (* pts of the current frame *) dts: cint64; (* dts of the current frame *) @@ -3293,6 +3893,94 @@ type {$IF LIBAVCODEC_VERSION >= 51057001} // 51.57.1 cur_frame_end: array [0..AV_PARSER_PTS_NB - 1] of cint64; {$IFEND} + {$IF LIBAVCODEC_VERSION >= 52016000} // 52.16.0 + (*! + * Set by parser to 1 for key frames and 0 for non-key frames. + * It is initialized to -1, so if the parser doesn't set this flag, + * old-style fallback using FF_I_TYPE picture type as key frames + * will be used. + *) + key_frame: cint; + {$IFEND} + {$IF LIBAVCODEC_VERSION >= 52018000} // 52.18.0 + (** + * Time difference in stream time base units from the pts of this + * packet to the point at which the output from the decoder has converged + * independent from the availability of previous frames. That is, the + * frames are virtually identical no matter if decoding started from + * the very first frame or from this keyframe. + * Is AV_NOPTS_VALUE if unknown. + * This field is not the display duration of the current frame. + * + * The purpose of this field is to allow seeking in streams that have no + * keyframes in the conventional sense. It corresponds to the + * recovery point SEI in H.264 and match_time_delta in NUT. It is also + * essential for some types of subtitle streams to ensure that all + * subtitles are correctly displayed after seeking. + *) + convergence_duration: cint64; + {$IFEND} + {$IF LIBAVCODEC_VERSION >= 52019000} // 52.19.0 + // Timestamp generation support: + (** + * Synchronization point for start of timestamp generation. + * + * Set to >0 for sync point, 0 for no sync point and <0 for undefined + * (default). + * + * For example, this corresponds to presence of H.264 buffering period + * SEI message. + *) + dts_sync_point: cint; + + (** + * Offset of the current timestamp against last timestamp sync point in + * units of AVCodecContext.time_base. + * + * Set to INT_MIN when dts_sync_point unused. Otherwise, it must + * contain a valid timestamp offset. + * + * Note that the timestamp of sync point has usually a nonzero + * dts_ref_dts_delta, which refers to the previous sync point. Offset of + * the next frame after timestamp sync point will be usually 1. + * + * For example, this corresponds to H.264 cpb_removal_delay. + *) + dts_ref_dts_delta: cint; + + (** + * Presentation delay of current frame in units of AVCodecContext.time_base. + * + * Set to INT_MIN when dts_sync_point unused. Otherwise, it must + * contain valid non-negative timestamp delta (presentation time of a frame + * must not lie in the past). + * + * This delay represents the difference between decoding and presentation + * time of the frame. + * + * For example, this corresponds to H.264 dpb_output_delay. + *) + pts_dts_delta: cint; + {$IFEND} + + {$IF LIBAVCODEC_VERSION >= 52021000} // 52.21.0 + (** + * Position of the packet in file. + * + * Analogous to cur_frame_pts/dts + *) + cur_frame_pos: array [0..AV_PARSER_PTS_NB - 1] of cint64; + + (** + * Byte position of currently parsed frame in stream. + *) + pos: cint64; + + (** + * Previous frame byte position. + *) + last_pos: cint64; + {$IFEND} end; TAVCodecParser = record @@ -3327,12 +4015,60 @@ procedure av_register_codec_parser(parser: PAVCodecParser); function av_parser_init(codec_id: cint): PAVCodecParserContext; cdecl; external av__codec; +{$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53} function av_parser_parse(s: PAVCodecParserContext; avctx: PAVCodecContext; - poutbuf: PPointer; poutbuf_size: PCint; - buf: {const} PByteArray; buf_size: cint; - pts: cint64; dts: cint64): cint; - cdecl; external av__codec; + poutbuf: PPointer; + poutbuf_size: PCint; + buf: {const} PByteArray; + buf_size: cint; + pts: cint64; + dts: cint64): cint; + cdecl; external av__codec; deprecated; +{$IFEND} + +{$IF LIBAVCODEC_VERSION >= 52021000} // 52.21.0 +(** + * Parse a packet. + * + * @param s parser context. + * @param avctx codec context. + * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished. + * @param poutbuf_size set to size of parsed buffer or zero if not yet finished. + * @param buf input buffer. + * @param buf_size input length, to signal EOF, this should be 0 (so that the last frame can be output). + * @param pts input presentation timestamp. + * @param dts input decoding timestamp. + * @param pos input byte position in stream. + * @return the number of bytes of the input bitstream used. + * + * Example: + * @code + * while (in_len) do + * begin + * len := av_parser_parse2(myparser, AVCodecContext, data, size, + * in_data, in_len, + * pts, dts, pos); + * in_data := in_data + len; + * in_len := in_len - len; + * + * if (size) then + * decode_frame(data, size); + * end; + * @endcode + *) +function av_parser_parse2(s: PAVCodecParserContext; + avctx: PAVCodecContext; + poutbuf: PPointer; + poutbuf_size: PCint; + buf: {const} PByteArray; + buf_size: cint; + pts: cint64; + dts: cint64; + pos: cint64): cint; + cdecl; external av__codec; +{$IFEND} + function av_parser_change(s: PAVCodecParserContext; avctx: PAVCodecContext; poutbuf: PPointer; poutbuf_size: PCint; @@ -3395,6 +4131,22 @@ function av_bitstream_filter_next(f: PAVBitStreamFilter): PAVBitStreamFilter; procedure av_fast_realloc(ptr: pointer; size: PCuint; min_size: cuint); cdecl; external av__codec; +{$IF LIBAVCODEC_VERSION >= 52025000} // >= 52.25.0 +(** + * Allocates a buffer, reusing the given one if large enough. + * + * Contrary to av_fast_realloc the current buffer contents might not be + * preserved and on error the old buffer is freed, thus no special + * handling to avoid memleaks is necessary. + * + * @param ptr pointer to pointer to already allocated buffer, overwritten with pointer to new buffer + * @param size size of the buffer *ptr points to + * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and + * *size 0 if an error occurred. + *) +procedure av_fast_malloc(ptr: pointer; size: PCuint; min_size: cuint); + cdecl; external av__codec; +{$IFEND} {$IF LIBAVCODEC_VERSION < 51057000} // 51.57.0 (* for static data only *) @@ -3407,7 +4159,7 @@ procedure av_fast_realloc(ptr: pointer; size: PCuint; min_size: cuint); * and should correctly use static arrays * *) -procedure av_free_static(); +procedure av_free_static(); cdecl; external av__codec; deprecated; (** @@ -3433,22 +4185,49 @@ procedure av_realloc_static(ptr: pointer; size: cuint); (** * Copy image 'src' to 'dst'. *) -procedure av_picture_copy(dst: PAVPicture; src: {const} PAVPicture; - pix_fmt: cint; width: cint; height: cint); +procedure av_picture_copy(dst: PAVPicture; + src: {const} PAVPicture; +{$IF LIBAVCODEC_VERSION < 52022001} // 52.22.1 + pix_fmt: cint; +{$ELSE} + pix_fmt: TAVPixelFormat; +{$IFEND} + width: cint; + height: cint); cdecl; external av__codec; (** * Crop image top and left side. *) -function av_picture_crop(dst: PAVPicture; src: {const} PAVPicture; - pix_fmt: cint; top_band: cint; left_band: cint): cint; +function av_picture_crop(dst: PAVPicture; + src: {const} PAVPicture; +{$IF LIBAVCODEC_VERSION < 52022001} // 52.22.1 + pix_fmt: cint; +{$ELSE} + pix_fmt: TAVPixelFormat; +{$IFEND} + top_band: cint; + left_band: cint): cint; cdecl; external av__codec; (** * Pad image. *) -function av_picture_pad(dst: PAVPicture; src: {const} PAVPicture; height: cint; width: cint; pix_fmt: cint; - padtop: cint; padbottom: cint; padleft: cint; padright: cint; color: PCint): cint; +function av_picture_pad(dst: PAVPicture; + src: {const} PAVPicture; + height: cint; + width: cint; +{$IF LIBAVCODEC_VERSION < 52022001} // 52.22.1 + pix_fmt: cint; +{$ELSE} + pix_fmt: TAVPixelFormat; +{$IFEND} + padtop: cint; + padbottom: cint; + padleft: cint; + padright: + cint; + color: PCint): cint; cdecl; external av__codec; {$IFEND} @@ -3481,7 +4260,7 @@ function av_xiphlacing(s: PByte; v: cuint): cuint; {$IF LIBAVCODEC_VERSION >= 51041000} // 51.41.0 (** - * Parses \p str and put in \p width_ptr and \p height_ptr the detected values. + * Parses str and put in width_ptr and height_ptr the detected values. * * @return 0 in case of a successful parsing, a negative value otherwise * @param[in] str the string to parse: it has to be a string in the format @@ -3495,11 +4274,11 @@ function av_parse_video_frame_size(width_ptr: PCint; height_ptr: PCint; str: {co cdecl; external av__codec; (** - * Parses \p str and put in \p frame_rate the detected values. + * Parses str and put in frame_rate the detected values. * * @return 0 in case of a successful parsing, a negative value otherwise * @param[in] str the string to parse: it has to be a string in the format - * <frame_rate_nom>/<frame_rate_den>, a float number or a valid video rate abbreviation + * <frame_rate_num>/<frame_rate_den>, a float number or a valid video rate abbreviation * @param[in,out] frame_rate pointer to the AVRational which will contain the detected * frame rate *) @@ -3518,11 +4297,13 @@ const EDOM = ESysEDOM; ENOSYS = ESysENOSYS; EILSEQ = ESysEILSEQ; + EPIPE = ESysEPIPE; {$ELSE} ENOENT = 2; EIO = 5; ENOMEM = 12; EINVAL = 22; + EPIPE = 32; // just an assumption. needs to be checked. EDOM = 33; {$IFDEF MSWINDOWS} // Note: we assume that ffmpeg was compiled with MinGW. @@ -3559,11 +4340,76 @@ const AVERROR_NOMEM = AVERROR_SIGN * ENOMEM; (**< not enough memory *) AVERROR_NOFMT = AVERROR_SIGN * EILSEQ; (**< unknown format *) AVERROR_NOTSUPP = AVERROR_SIGN * ENOSYS; (**< Operation not supported. *) - AVERROR_NOENT = AVERROR_SIGN * ENOENT; {**< No such file or directory. *} + AVERROR_NOENT = AVERROR_SIGN * ENOENT; (**< No such file or directory. *) +{$IF LIBAVCODEC_VERSION >= 52017000} // 52.17.0 + AVERROR_EOF = AVERROR_SIGN * EPIPE; (**< End of file. *) +{$IFEND} // Note: function calls as constant-initializers are invalid //AVERROR_PATCHWELCOME = -MKTAG('P','A','W','E'); {**< Not yet implemented in FFmpeg. Patches welcome. *} AVERROR_PATCHWELCOME = -(ord('P') or (ord('A') shl 8) or (ord('W') shl 16) or (ord('E') shl 24)); +{$IF LIBAVCODEC_VERSION >= 52018000} // 52.18.0 +(** + * Registers the hardware accelerator hwaccel. + *) +procedure av_register_hwaccel (hwaccel: PAVHWAccel) + cdecl; external av__codec; + +(** + * If hwaccel is NULL, returns the first registered hardware accelerator, + * if hwaccel is non-NULL, returns the next registered hardware accelerator + * after hwaccel, or NULL if hwaccel is the last one. + *) +function av_hwaccel_next (hwaccel: PAVHWAccel): PAVHWAccel; + cdecl; external av__codec; +{$IFEND} + +{$IF LIBAVCODEC_VERSION >= 52030000} // 52.30.0 +(** + * Lock operation used by lockmgr + *) +type + TAVLockOp = ( + AV_LOCK_CREATE, ///< Create a mutex + AV_LOCK_OBTAIN, ///< Lock the mutex + AV_LOCK_RELEASE, ///< Unlock the mutex + AV_LOCK_DESTROY ///< Free mutex resources + ); + +(** + * Register a user provided lock manager supporting the operations + * specified by AVLockOp. mutex points to a (void) where the + * lockmgr should store/get a pointer to a user allocated mutex. It's + * NULL upon AV_LOCK_CREATE and != NULL for all other ops. + * + * @param cb User defined callback. Note: FFmpeg may invoke calls to this + * callback during the call to av_lockmgr_register(). + * Thus, the application must be prepared to handle that. + * If cb is set to NULL the lockmgr will be unregistered. + * Also note that during unregistration the previously registered + * lockmgr callback may also be invoked. + *) +// ToDo: Implement and test this +//function av_lockmgr_register(cb: function (mutex: pointer; op: TAVLockOp)): cint; +// cdecl; external av__codec; +{$IFEND} + implementation +{$IF (LIBAVCODEC_VERSION >= 52025000) and (LIBAVCODEC_VERSION <= 5202700)} // 52.25.0 +procedure av_free_packet(pkt: PAVPacket);{$IFDEF HASINLINE} inline; {$ENDIF} +begin + if (pkt <> nil) then + begin + if (pkt.destruct <> nil) then + pkt.destruct(pkt) + else + begin + pkt.data = NULL; + pkt.size = 0; + end; + end; +end; +{$IFEND} + end. diff --git a/unicode/src/lib/ffmpeg/avformat.pas b/unicode/src/lib/ffmpeg/avformat.pas index 62df8a83..0ec2c118 100644 --- a/unicode/src/lib/ffmpeg/avformat.pas +++ b/unicode/src/lib/ffmpeg/avformat.pas @@ -29,6 +29,11 @@ * Min. version: 50.5.0 , revision 6577, Sat Oct 7 15:30:46 2006 UTC * Max. version: 52.25.0, revision 16986, Wed Feb 4 05:56:39 2009 UTC *) +{ + * update to + * Max. version: 52.34.0, Sat Jun 13 00:37:00 2009 UTC + * MiSchi +} unit avformat; @@ -60,7 +65,7 @@ uses const (* Max. supported version by this header *) LIBAVFORMAT_MAX_VERSION_MAJOR = 52; - LIBAVFORMAT_MAX_VERSION_MINOR = 25; + LIBAVFORMAT_MAX_VERSION_MINOR = 34; LIBAVFORMAT_MAX_VERSION_RELEASE = 0; LIBAVFORMAT_MAX_VERSION = (LIBAVFORMAT_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBAVFORMAT_MAX_VERSION_MINOR * VERSION_MINOR) + @@ -92,13 +97,11 @@ function avformat_version(): cuint; cdecl; external av__format; {$IFEND} - type PAVFile = Pointer; (* * Public Metadata API. - * !!WARNING!! This is a work in progress. Don't use outside FFmpeg for now. * The metadata API allows libavformat to export metadata tags to a client * application using a sequence of key/value pairs. * Important concepts to keep in mind: @@ -111,7 +114,7 @@ type * want to store, e.g., the email address of the child of producer Alice * and actor Bob, that could have key=alice_and_bobs_childs_email_address. * 3. A tag whose value is localized for a particular language is appended - * with a dash character ('-') and the ISO 639 3-letter language code. + * with a dash character ('-') and the ISO 639-2/B 3-letter language code. * For example: Author-ger=Michael, Author-eng=Mike * The original/default language is in the unqualified "Author" tag. * A demuxer should set a default if it sets any translated tag. @@ -130,53 +133,51 @@ type PAVMetadata = Pointer; {$IF LIBAVFORMAT_VERSION > 52024001} // > 52.24.1 - (** - * gets a metadata element with matching key. - * @param prev set to the previous matching element to find the next. - * @param flags allows case as well as suffix insensitive comparisons. - * @return found tag or NULL, changing key or value leads to undefined behavior. + * Gets a metadata element with matching key. + * @param prev Set to the previous matching element to find the next. + * @param flags Allows case as well as suffix-insensitive comparisons. + * @return Found tag or NULL, changing key or value leads to undefined behavior. *) function av_metadata_get(m: PAVMetadata; key: {const} PAnsiChar; prev: {const} PAVMetadataTag ; flags: cint): PAVMetadataTag; cdecl; external av__format; (** - * sets the given tag in m, overwriting an existing tag. - * @param key tag key to add to m (will be av_strduped). - * @param value tag value to add to m (will be av_strduped). - * @return >= 0 if success otherwise error code that is <0. + * Sets the given tag in m, overwriting an existing tag. + * @param key tag key to add to m (will be av_strduped) + * @param value tag value to add to m (will be av_strduped) + * @return >= 0 on success otherwise an error code <0 *) function av_metadata_set(var pm: PAVMetadata; key: {const} PAnsiChar; value: {const} PAnsiChar): cint; cdecl; external av__format; (** - * Free all the memory allocated for an AVMetadata struct. + * Frees all the memory allocated for an AVMetadata struct. *) procedure av_metadata_free(var m: PAVMetadata); cdecl; external av__format; - {$IFEND} (* packet functions *) +{$IF LIBAVCODEC_VERSION < 52032000} // < 52.32.0 type PAVPacket = ^TAVPacket; TAVPacket = record (** - * Presentation time stamp in time_base units. - * This is the time at which the decompressed packet will be presented - * to the user. + * Presentation timestamp in time_base units; the time at which the + * decompressed packet will be presented to the user. * Can be AV_NOPTS_VALUE if it is not stored in the file. * pts MUST be larger or equal to dts as presentation can not happen before * decompression, unless one wants to view hex dumps. Some formats misuse - * the terms dts and pts/cts to mean something different, these timestamps + * the terms dts and pts/cts to mean something different. Such timestamps * must be converted to true pts/dts before they are stored in AVPacket. *) pts: cint64; (** - * Decompression time stamp in time_base units. - * This is the time at which the packet is decompressed. + * Decompression timestamp in time_base units; the time at which the + * packet is decompressed. * Can be AV_NOPTS_VALUE if it is not stored in the file. *) dts: cint64; @@ -245,6 +246,7 @@ procedure av_init_packet(var pkt: TAVPacket); *) function av_new_packet(var pkt: TAVPacket; size: cint): cint; cdecl; external av__format; +{$IFEND} (** * Allocate and read the payload of a packet and initialize its fields with @@ -257,6 +259,7 @@ function av_new_packet(var pkt: TAVPacket; size: cint): cint; function av_get_packet(s: PByteIOContext; var pkt: TAVPacket; size: cint): cint; cdecl; external av__format; +{$IF LIBAVCODEC_VERSION < 52032000} // < 52.32.0 (** * @warning This is a hack - the packet memory allocation stuff is broken. The * packet is allocated if it was not really allocated. @@ -270,6 +273,7 @@ function av_dup_packet(pkt: PAVPacket): cint; * @param pkt packet to free *) procedure av_free_packet(pkt: PAVPacket); {$IFDEF HasInline}inline;{$ENDIF} +{$IFEND} (*************************************************) (* fractional numbers for exact pts handling *) @@ -278,7 +282,6 @@ type (** * The exact value of the fractional number is: 'val + num / den'. * num is assumed to be 0 <= num < den. - * @deprecated Use AVRational instead. *) PAVFrac = ^TAVFrac; TAVFrac = record @@ -297,7 +300,7 @@ type end; const - AVPROBE_SCORE_MAX = 100; ///< Maximum score, half of that is used for file-extension-based detection. + AVPROBE_SCORE_MAX = 100; ///< Maximum score, half of that is used for file-extension-based detection AVPROBE_PADDING_SIZE = 32; ///< extra allocated bytes at the end of the probe buffer //! Demuxer will use url_fopen, no opened file should be provided by the caller. @@ -310,6 +313,9 @@ const AVFMT_NOTIMESTAMPS = $0080; (**< Format does not need / have any timestamps. *) AVFMT_GENERIC_INDEX = $0100; (**< Use generic index building code. *) AVFMT_TS_DISCONT = $0200; (**< Format allows timestamp discontinuities. *) + {$IF LIBAVFORMAT_VERSION >= 52029002} // 52.29.2 + AVFMT_VARIABLE_FPS = $0400; (**< Format allows variable fps. *) + {$IFEND} // used by AVIndexEntry AVINDEX_KEYFRAME = $0001; @@ -320,7 +326,7 @@ const AVFMT_NOOUTPUTLOOP = -1; AVFMT_INFINITEOUTPUTLOOP = 0; - AVFMT_FLAG_GENPTS = $0001; ///< Generate pts if missing even if it requires parsing future frames. + AVFMT_FLAG_GENPTS = $0001; ///< Generate missing pts even if it requires parsing future frames. AVFMT_FLAG_IGNIDX = $0002; ///< Ignore index. AVFMT_FLAG_NONBLOCK = $0004; ///< Do not block when reading packets from input. @@ -339,7 +345,11 @@ const AV_DISPOSITION_KARAOKE = $0020; // used by TAVFormatContext.debug - FF_FDEBUG_TS = 0001; + FF_FDEBUG_TS = 0001; + + {$IF LIBAVFORMAT_VERSION >= 52034000} // > 52.34.0 + MAX_PROBE_PACKETS = 100; + {$IFEND} type PPAVCodecTag = ^PAVCodecTag; @@ -367,12 +377,29 @@ type PAVImageInfo = ^TAVImageInfo; {$IFEND} +{$IF LIBAVFORMAT_VERSION >= 52030001} // >= 52.30.1 +(** + * Convert all the metadata sets from ctx according to the source and + * destination conversion tables. + * @param d_conv destination tags format conversion table + * @param s_conv source tags format conversion table + *) + PAVMetadataConv = ^TAVMetadataConv; + TAVMetadataConv = record + ctx: PAVFormatContext; + d_conv: {const} PAVMetadataConv; + s_conv: {const} PAVMetadataConv; + end; +{$IFEND} + PAVChapter = ^TAVChapter; TAVChapter = record id: cint; ///< unique ID to identify the chapter time_base: TAVRational; ///< time base in which the start/end timestamps are specified start, end_: cint64; ///< chapter start/end time in time_base units + {$IF LIBAVFORMAT_VERSION < 53000000} // 53.00.0 title: PAnsiChar; ///< chapter title + {$IFEND} {$IF LIBAVFORMAT_VERSION >= 52024001} // 52.24.1 metadata: PAVMetadata; {$IFEND} @@ -415,13 +442,13 @@ type name: PAnsiChar; (** * Descriptive name for the format, meant to be more human-readable - * than \p name. You \e should use the NULL_IF_CONFIG_SMALL() macro + * than name. You should use the NULL_IF_CONFIG_SMALL() macro * to define it. *) long_name: PAnsiChar; mime_type: PAnsiChar; extensions: PAnsiChar; (**< comma-separated filename extensions *) - (** Size of private data so that it can be allocated in the wrapper. *) + (** size of private data so that it can be allocated in the wrapper *) priv_data_size: cint; (* output support *) audio_codec: TCodecID; (**< default audio codec *) @@ -439,7 +466,7 @@ type {$IF LIBAVFORMAT_VERSION >= 51008000} // 51.8.0 (** * List of supported codec_id-codec_tag pairs, ordered by "better - * choice first". The arrays are all CODEC_ID_NONE terminated. + * choice first". The arrays are all terminated by CODEC_ID_NONE. *) codec_tag: {const} PPAVCodecTag; {$IFEND} @@ -448,6 +475,10 @@ type subtitle_codec: TCodecID; (**< default subtitle codec *) {$IFEND} + {$IF LIBAVFORMAT_VERSION >= 52030001} // 52.30.1 + {const} metadata_conv: PAVMetadataConv; + {$IFEND} + (* private fields *) next: PAVOutputFormat; end; @@ -456,14 +487,14 @@ type name: PAnsiChar; (** * Descriptive name for the format, meant to be more human-readable - * than \p name. You \e should use the NULL_IF_CONFIG_SMALL() macro + * than name. You should use the NULL_IF_CONFIG_SMALL() macro * to define it. *) long_name: PAnsiChar; (** Size of private data so that it can be allocated in the wrapper. *) priv_data_size: cint; (** - * Tell if a given file has a chance of being parsed by this format. + * Tell if a given file has a chance of being parsed as this format. * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes * big so you do not have to check for that unless you need more. *) @@ -475,21 +506,28 @@ type read_header: function (c: PAVFormatContext; ap: PAVFormatParameters): cint; cdecl; (** Read one packet and put it in 'pkt'. pts and flags are also set. 'av_new_stream' can be called only if the flag - AVFMTCTX_NOHEADER is used. *) + AVFMTCTX_NOHEADER is used. + @return 0 on success, < 0 on error. + When returning an error, pkt must not have been allocated + or must be freed before returning *) read_packet: function (c: PAVFormatContext; var pkt: TAVPacket): cint; cdecl; (** Close the stream. The AVFormatContext and AVStreams are not freed by this function *) read_close: function (c: PAVFormatContext): cint; cdecl; + +{$IF LIBAVFORMAT_VERSION_MAJOR < 53} (** * Seek to a given timestamp relative to the frames in * stream component stream_index. - * @param stream_index must not be -1 - * @param flags selects which direction should be preferred if no exact - * match is available + * @param stream_index Must not be -1. + * @param flags Selects which direction should be preferred if no exact + * match is available. * @return >= 0 on success (but not necessarily the new offset) *) read_seek: function (c: PAVFormatContext; stream_index: cint; timestamp: cint64; flags: cint): cint; cdecl; +{$IFEND} + (** * Gets the next timestamp in stream[stream_index].time_base units. * @return the timestamp or AV_NOPTS_VALUE if an error occurred @@ -517,6 +555,25 @@ type codec_tag: {const} PPAVCodecTag; {$IFEND} + {$IF LIBAVFORMAT_VERSION >= 52030000} // 52.30.0 + (** + * Seek to timestamp ts. + * Seeking will be done so that the point from which all active streams + * can be presented successfully will be closest to ts and within min/max_ts. + * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. + *) + read_seek2: function (s: PAVFormatContext; + stream_index: cint; + min_ts: cint64; + ts: cint64; + max_ts: cint64; + flags: cint): cint; cdecl; + {$IFEND} + + {$IF LIBAVFORMAT_VERSION >= 52030001} // 52.30.1 + {const} metadata_conv: PAVMetadataConv; + {$IFEND} + (* private fields *) next: PAVInputFormat; end; @@ -551,11 +608,11 @@ type id: cint; (**< format-specific stream ID *) codec: PAVCodecContext; (**< codec context *) (** - * Real base frame rate of the stream. - * This is the lowest frame rate with which all timestamps can be + * Real base framerate of the stream. + * This is the lowest framerate with which all timestamps can be * represented accurately (it is the least common multiple of all - * frame rates in the stream). Note, this value is just a guess! - * For example if the timebase is 1/90000 and all frames have either + * framerates in the stream). Note, this value is just a guess! + * For example, if the time base is 1/90000 and all frames have either * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. *) r_frame_rate: TAVRational; @@ -572,7 +629,7 @@ type (** * This is the fundamental unit of time (in seconds) in terms * of which frame timestamps are represented. For fixed-fps content, - * time base should be 1/frame rate and timestamp increments should be 1. + * time base should be 1/framerate and timestamp increments should be 1. *) time_base: TAVRational; pts_wrap_bits: cint; (* number of bits in pts (used for wrapping control) *) @@ -599,7 +656,9 @@ type *) duration: cint64; - language: array [0..3] of PAnsiChar; (* ISO 639 3-letter language code (empty string if undefined) *) + {$IF LIBAVFORMAT_VERSION_MAJOR < 53} + language: array [0..3] of PAnsiChar; (* ISO 639-2/B 3-letter language code (empty string if undefined) *) + {$IFEND} (* av_read_frame() support *) need_parsing: TAVStreamParseType; @@ -620,7 +679,7 @@ type unused: array [0..4] of cint64; {$IFEND} - {$IF LIBAVFORMAT_VERSION >= 52006000} // 52.6.0 + {$IF (LIBAVFORMAT_VERSION >= 52006000) and (LIBAVFORMAT_VERSION_MAJOR < 53)} // 52.6.0 - 53.0.0 filename: PAnsiChar; (**< source filename of the stream *) {$IFEND} @@ -653,6 +712,25 @@ type cur_len: cint; cur_pkt: TAVPacket; {$IFEND} + + {$IF LIBAVFORMAT_VERSION >= 52030000} // > 52.30.0 + // Timestamp generation support: + (** + * Timestamp corresponding to the last dts sync point. + * + * Initialized when AVCodecParserContext.dts_sync_point >= 0 and + * a DTS is received from the underlying container. Otherwise set to + * AV_NOPTS_VALUE by default. + *) + reference_dts: cint64; + {$IFEND} + {$IF LIBAVFORMAT_VERSION >= 52034000} // > 52.34.0 + (** + * Number of packets to buffer for codec probing + * NOT PART OF PUBLIC API + *) + probe_packets: cint; + {$IFEND} end; (** @@ -663,7 +741,7 @@ type * sizeof(AVFormatContext) must not be used outside libav*. *) TAVFormatContext = record - av_class: PAVClass; (**< Set by av_alloc_format_context. *) + av_class: PAVClass; (**< Set by avformat_alloc_context. *) (* Can only be iformat or oformat, not both at the same time. *) iformat: PAVInputFormat; oformat: PAVOutputFormat; @@ -680,6 +758,7 @@ type filename: array [0..1023] of AnsiChar; (* input or output filename *) (* stream info *) timestamp: cint64; + {$IF LIBAVFORMAT_VERSION < 53000000} // 53.00.0 title: array [0..511] of AnsiChar; author: array [0..511] of AnsiChar; copyright: array [0..511] of AnsiChar; @@ -688,6 +767,7 @@ type year: cint; (**< ID3 year, 0 if none *) track: cint; (**< track number, 0 if none *) genre: array [0..31] of AnsiChar; (**< ID3 genre *) + {$IFEND} ctx_flags: cint; (**< Format-specific flags, see AVFMTCTX_xx *) (* private data for pts handling (do not modify directly). *) @@ -735,7 +815,7 @@ type loop_input: cint; {$IF LIBAVFORMAT_VERSION >= 50006000} // 50.6.0 - (** Decoding: size of data to probe; encoding: unused. *) + (** decoding: size of data to probe; encoding: unused. *) probesize: cuint; {$IFEND} @@ -775,8 +855,8 @@ type {$IF LIBAVFORMAT_VERSION >= 52004000} // 52.4.0 (** - * Maximum amount of memory in bytes to use per stream for the index. - * If the needed index exceeds this size, entries will be discarded as + * Maximum amount of memory in bytes to use for the index of each stream. + * If the index exceeds this size, entries will be discarded as * needed to maintain a smaller size. This can lead to slower or less * accurate seeking (depends on demuxer). * Demuxers for which a full in-memory index is mandatory will ignore @@ -833,8 +913,10 @@ type *) TAVProgram = record id : cint; + {$IF LIBAVFORMAT_VERSION < 53000000} // 53.00.0 provider_name : PAnsiChar; ///< network name for DVB streams name : PAnsiChar; ///< service name for DVB streams + {$IFEND} flags : cint; discard : TAVDiscard; ///< selects which program to discard and which to feed to the caller {$IF LIBAVFORMAT_VERSION >= 51016000} // 51.16.0 @@ -908,8 +990,18 @@ var {$IFEND} {$IF LIBAVFORMAT_VERSION >= 52003000} // 52.3.0 +(** + * If f is NULL, returns the first registered input format, + * if f is non-NULL, returns the next registered input format after f + * or NULL if f is the last one. + *) function av_iformat_next(f: PAVInputFormat): PAVInputFormat; cdecl; external av__format; +(** + * If f is NULL, returns the first registered output format, + * if f is non-NULL, returns the next registered input format after f + * or NULL if f is the last one. + *) function av_oformat_next(f: PAVOutputFormat): PAVOutputFormat; cdecl; external av__format; {$IFEND} @@ -917,8 +1009,8 @@ function av_oformat_next(f: PAVOutputFormat): PAVOutputFormat; function av_guess_image2_codec(filename: {const} PAnsiChar): TCodecID; cdecl; external av__format; -(* XXX: use automatic init with either ELF sections or C file parser *) -(* modules *) +(* XXX: Use automatic init with either ELF sections or C file parser *) +(* modules. *) (* utils.c *) procedure av_register_input_format(format: PAVInputFormat); @@ -1006,7 +1098,7 @@ procedure av_pkt_dump_log(avcl: Pointer; level: cint; pkt: PAVPacket; dump_paylo * * @see av_register_input_format() * @see av_register_output_format() - * @see register_protocol() + * @see av_register_protocol() *) procedure av_register_all(); cdecl; external av__format; @@ -1062,18 +1154,28 @@ function av_open_input_file(var ic_ptr: PAVFormatContext; filename: PAnsiChar; ap: PAVFormatParameters): cint; cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION >= 52026000} // 52.26.0 (** * Allocate an AVFormatContext. * Can be freed with av_free() but do not forget to free everything you * explicitly allocated as well! *) +function avformat_alloc_context(): PAVFormatContext; + cdecl; external av__format; +{$ELSE} + {$IF LIBAVFORMAT_VERSION_MAJOR < 53} +(** + * @deprecated Use avformat_alloc_context() instead. + *) function av_alloc_format_context(): PAVFormatContext; cdecl; external av__format; + {$IFEND} +{$IFEND} (** * Read packets of a media file to get stream information. This * is useful for file formats with no headers such as MPEG. This - * function also computes the real frame rate in case of MPEG-2 repeat + * function also computes the real framerate in case of MPEG-2 repeat * frame mode. * The logical file position is not changed by this function; * examined packets may be buffered for later processing. @@ -1111,7 +1213,7 @@ function av_read_packet(s: PAVFormatContext; var pkt: TAVPacket): cint; * then it contains one frame. * * pkt->pts, pkt->dts and pkt->duration are always set to correct - * values in AVStream.timebase units (and guessed if the format cannot + * values in AVStream.time_base units (and guessed if the format cannot * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format * has B-frames, so it is better to rely on pkt->dts if you do not * decompress the payload. @@ -1122,7 +1224,7 @@ function av_read_frame(s: PAVFormatContext; var pkt: TAVPacket): cint; cdecl; external av__format; (** - * Seek to the key frame at timestamp. + * Seek to the keyframe at timestamp. * 'timestamp' in 'stream_index'. * @param stream_index If stream_index is (-1), a default * stream is selected, and timestamp is automatically converted @@ -1136,15 +1238,51 @@ function av_seek_frame(s: PAVFormatContext; stream_index: cint; timestamp: cint6 flags: cint): cint; cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION >= 52026000} // 52.26.0 (** - * Start playing a network based stream (e.g. RTSP stream) at the + * Seek to timestamp ts. + * Seeking will be done so that the point from which all active streams + * can be presented successfully will be closest to ts and within min/max_ts. + * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. + * + * If flags contain AVSEEK_FLAG_BYTE, then all timestamps are in byte and + * are the file position (this may not be supported by all demuxers). + * If flags contain AVSEEK_FLAG_FRAME then all timestamps are in frames + * in the stream with stream_index (this may not be supported by all demuxers). + * Otherwise all timestamps are in units of the stream selected by stream_index + * or if stream_index is -1, in AV_TIME_BASE units. + * If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as + * keyframes (this may not be supported by all demuxers). + * + * @param stream_index index of the stream which is used as time base reference. + * @param min_ts smallest acceptable timestamp + * @param ts target timestamp + * @param max_ts largest acceptable timestamp + * @param flags flags + * @returns >=0 on success, error code otherwise + * + * @NOTE This is part of the new seek API which is still under construction. + * Thus do not use this yet. It may change at any time, do not expect + * ABI compatibility yet! + *) +function avformat_seek_file(s: PAVFormatContext; + stream_index: cint; + min_ts: cint64; + ts: cint64; + max_ts: cint64; + flags: cint): cint; + cdecl; external av__format; +{$IFEND} + +(** + * Start playing a network-based stream (e.g. RTSP stream) at the * current position. *) function av_read_play(s: PAVFormatContext): cint; cdecl; external av__format; (** - * Pause a network based stream (e.g. RTSP stream). + * Pause a network-based stream (e.g. RTSP stream). * * Use av_read_play() to resume it. *) @@ -1239,7 +1377,7 @@ function av_index_search_timestamp(st: PAVStream; timestamp: cint64; flags: cint {$IF LIBAVFORMAT_VERSION >= 52004000} // 52.4.0 (** * Ensures the index uses less memory than the maximum specified in - * AVFormatContext.max_index_size, by discarding entries if it grows + * AVFormatContext.max_index_size by discarding entries if it grows * too large. * This function is not part of the public API and should only be called * by demuxers. @@ -1337,7 +1475,7 @@ function av_write_frame(s: PAVFormatContext; var pkt: TAVPacket): cint; * Writes a packet to an output media file ensuring correct interleaving. * * The packet must contain one audio or video frame. - * If the packets are already correctly interleaved the application should + * If the packets are already correctly interleaved, the application should * call av_write_frame() instead as it is slightly faster. It is also important * to keep in mind that completely non-interleaved input will need huge amounts * of memory to interleave with this, so it is preferable to interleave at the @@ -1355,7 +1493,7 @@ function av_interleaved_write_frame(s: PAVFormatContext; var pkt: TAVPacket): ci * Interleave a packet per dts in an output media file. * * Packets with pkt->destruct == av_destruct_packet will be freed inside this - * function, so they cannot be used after it, note calling av_free_packet() + * function, so they cannot be used after it. Note that calling av_free_packet() * on them is still safe. * * @param s media file handle @@ -1370,6 +1508,24 @@ function av_interleave_packet_per_dts(s: PAVFormatContext; _out: PAVPacket; pkt: PAVPacket; flush: cint): cint; cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION >= 52025000} // 52.25.0 +(** + * Add packet to AVFormatContext->packet_buffer list, determining its + * interleaved position using compare() function argument. + * + * This function is not part of the public API and should only be called + * by muxers using their own interleave function. + *) +{ +procedure ff_interleave_add_packet(s: PAVFormatContext; + pkt: PAVPacket; + compare: function(para1: PAVFormatContext; + para2: PAVPacket; + para3: PAVPacket): cint); + cdecl; external av__format; +} +{$IFEND} + (** * @brief Write the stream trailer to an output media file and * free the file private data. @@ -1396,7 +1552,7 @@ function parse_image_size(width_ptr: PCint; height_ptr: PCint; {$IF LIBAVFORMAT_VERSION_MAJOR < 53} (** - * Converts frame rate from string to a fraction. + * Converts framerate from a string to a fraction. * @deprecated Use av_parse_video_frame_rate instead. *) function parse_frame_rate(frame_rate: PCint; frame_rate_base: PCint; @@ -1405,7 +1561,7 @@ function parse_frame_rate(frame_rate: PCint; frame_rate_base: PCint; {$IFEND} (** - * Parses \p datestr and returns a corresponding number of microseconds. + * Parses datestr and returns a corresponding number of microseconds. * @param datestr String representing a date or a duration. * - If a date the syntax is: * @code @@ -1416,7 +1572,7 @@ function parse_frame_rate(frame_rate: PCint; frame_rate_base: PCint; * If the year-month-day part is not specified it takes the current * year-month-day. * Returns the number of microseconds since 1st of January, 1970 up to - * the time of the parsed date or INT64_MIN if \p datestr cannot be + * the time of the parsed date or INT64_MIN if datestr cannot be * successfully parsed. * - If a duration the syntax is: * @code @@ -1424,10 +1580,10 @@ function parse_frame_rate(frame_rate: PCint; frame_rate_base: PCint; * [-]S+[.m...] * @endcode * Returns the number of microseconds contained in a time interval - * with the specified duration or INT64_MIN if \p datestr cannot be + * with the specified duration or INT64_MIN if datestr cannot be * successfully parsed. - * @param duration Flag which tells how to interpret \p datestr, if - * not zero \p datestr is interpreted as a duration, otherwise as a + * @param duration Flag which tells how to interpret datestr, if + * not zero datestr is interpreted as a duration, otherwise as a * date. *) function parse_date(datestr: PAnsiChar; duration: cint): cint64; @@ -1444,7 +1600,11 @@ const function ffm_read_write_index(fd: cint): cint64; cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION < 52027000} // 52.27.0 procedure ffm_write_write_index(fd: cint; pos: cint64); +{$ELSE} +function ffm_write_write_index(fd: cint; pos: cint64): cint; +{$IFEND} cdecl; external av__format; procedure ffm_set_write_index(s: PAVFormatContext; pos: cint64; file_size: cint64); @@ -1460,7 +1620,7 @@ function find_info_tag(arg: PAnsiChar; arg_size: cint; tag1: PAnsiChar; info: PA cdecl; external av__format; (** - * Returns in 'buf' the path with '%d' replaced by number. + * Returns in 'buf' the path with '%d' replaced by a number. * * Also handles the '%0nd' format where 'n' is the total number * of digits and '%%'. @@ -1526,10 +1686,12 @@ begin end; {$IFEND} +{$IF LIBAVCODEC_VERSION < 52032000} // < 52.32.0 procedure av_free_packet(pkt: PAVPacket); begin if ((pkt <> nil) and (@pkt^.destruct <> nil)) then pkt^.destruct(pkt); end; +{$IFEND} end. diff --git a/unicode/src/lib/ffmpeg/avio.pas b/unicode/src/lib/ffmpeg/avio.pas index 33778206..dc0a330b 100644 --- a/unicode/src/lib/ffmpeg/avio.pas +++ b/unicode/src/lib/ffmpeg/avio.pas @@ -27,7 +27,12 @@ (* * Conversion of libavformat/avio.h - * revision 16100, Sat Dec 13 13:39:13 2008 UTC + * unbuffered I/O operations + * revision 16100, Sat Dec 13 13:39:13 2008 UTC + * update Tue, Jun 10 01:00:00 2009 UTC + * + * @warning This file has to be considered an internal but installed + * header, so it should not be directly included in your projects. *) unit avio; @@ -103,6 +108,7 @@ type name: PAnsiChar; url_open: function (h: PURLContext; filename: {const} PAnsiChar; flags: cint): cint; cdecl; url_read: function (h: PURLContext; buf: PByteArray; size: cint): cint; cdecl; + url_read_complete: function (h: PURLContext; buf: PByteArray; size: cint): cint; cdecl; url_write: function (h: PURLContext; buf: PByteArray; size: cint): cint; cdecl; url_seek: function (h: PURLContext; pos: cint64; whence: cint): cint64; cdecl; url_close: function (h: PURLContext): cint; cdecl; @@ -180,6 +186,16 @@ function url_exist(filename: {const} PAnsiChar): cint; cdecl; external av__format; function url_filesize (h: PURLContext): cint64; cdecl; external av__format; +{ + * Return the file descriptor associated with this URL. For RTP, this + * will return only the RTP file descriptor, not the RTCP file descriptor. + * To get both, use rtp_get_file_handles(). + * + * @return the file descriptor associated with this URL, or <0 on error. +} +(* not implemented *) +function url_get_file_handle(h: PURLContext): cint; + cdecl; external av__format; (** * Return the maximum packet size associated to packetized file @@ -240,19 +256,34 @@ function av_url_read_seek(h: PURLContext; stream_index: cint; cdecl; external av__format; {$IFEND} -{ +(** var +{$IF LIBAVFORMAT_VERSION_MAJOR < 53} first_protocol: PURLProtocol; external av__format; +{$IFEND} url_interrupt_cb: PURLInterruptCB; external av__format; -} +**) +{ +* If protocol is NULL, returns the first registered protocol, +* if protocol is non-NULL, returns the next registered protocol after protocol, +* or NULL if protocol is the last one. +} {$IF LIBAVFORMAT_VERSION >= 52002000} // 52.2.0 function av_protocol_next(p: PURLProtocol): PURLProtocol; cdecl; external av__format; {$IFEND} +{$IF LIBAVFORMAT_VERSION <= 52028000} // 52.28.0 +(** + * @deprecated Use av_register_protocol() instead. + *) function register_protocol (protocol: PURLProtocol): cint; cdecl; external av__format; +{$ELSE} +function av_register_protocol (protocol: PURLProtocol): cint; + cdecl; external av__format; +{$IFEND} type TReadWriteFunc = function (opaque: Pointer; buf: PByteArray; buf_size: cint): cint; cdecl; @@ -521,7 +552,7 @@ function ff_crc04C11DB7_update(checksum: culong; buf: {const} PByteArray; {$IFEND} function get_checksum(s: PByteIOContext): culong; cdecl; external av__format; -procedure init_checksum(s: PByteIOContext; +procedure init_gsum(s: PByteIOContext; update_checksum: pointer; checksum: culong); cdecl; external av__format; @@ -531,9 +562,11 @@ function udp_set_remote_url(h: PURLContext; uri: {const} PAnsiChar): cint; cdecl; external av__format; function udp_get_local_port(h: PURLContext): cint; cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION_MAJOR <= 52} function udp_get_file_handle(h: PURLContext): cint; cdecl; external av__format; - +{$IFEND} + implementation function url_is_streamed(s: PByteIOContext): cint; diff --git a/unicode/src/lib/ffmpeg/avutil.pas b/unicode/src/lib/ffmpeg/avutil.pas index 6de35f1b..6a93ea12 100644 --- a/unicode/src/lib/ffmpeg/avutil.pas +++ b/unicode/src/lib/ffmpeg/avutil.pas @@ -29,14 +29,21 @@ * * libavutil/avutil.h: * Min. version: 49.0.1, revision 6577, Sat Oct 7 15:30:46 2006 UTC - * Max. version: 49.14.0, revision 16912, Sun Feb 1 02:00:19 2009 UTC + * Max. version: 49.14.0, revision 16912, Sun Feb 1 02:00:19 2009 UTC * * libavutil/mem.h: - * revision 16590, Tue Jan 13 23:44:16 2009 UTC + * revision 16590, Tue Jan 13 23:44:16 2009 UTC * * libavutil/log.h: - * revision 16571, Tue Jan 13 00:14:43 2009 UTC + * revision 16571, Tue Jan 13 00:14:43 2009 UTC *) +{ + Update changes auf avutil.h, mem.h and log.h + Max. version 50.03.0, Tue, Jun 09 24:00:00 2009 UTC + include/keep pixfmt.h (change in revision 50.01.0) + Maybe, the pixelformats are not needed, but it has not been checked. + log.h is only partial. +} unit avutil; @@ -62,8 +69,8 @@ uses const (* Max. supported version by this header *) - LIBAVUTIL_MAX_VERSION_MAJOR = 49; - LIBAVUTIL_MAX_VERSION_MINOR = 14; + LIBAVUTIL_MAX_VERSION_MAJOR = 50; + LIBAVUTIL_MAX_VERSION_MINOR = 3; LIBAVUTIL_MAX_VERSION_RELEASE = 0; LIBAVUTIL_MAX_VERSION = (LIBAVUTIL_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBAVUTIL_MAX_VERSION_MINOR * VERSION_MINOR) + @@ -112,6 +119,14 @@ type * components stored in AVFrame.data[1] should be in the range 0..255. * This is important as many custom PAL8 video codecs that were designed * to run on the IBM VGA graphics adapter use 6-bit palette components. + * + * For all the 8bit per pixel formats, an RGB32 palette is in data[1] like + * for pal8. This palette is filled in automatically by the function + * allocating the picture. + * + * Note, make sure that all newly added big endian formats have pix_fmt&1==1 + * and that all newly added little endian formats have pix_fmt&1==0 + * this allows simpler detection of big vs little endian. *) PAVPixelFormat = ^TAVPixelFormat; @@ -123,11 +138,15 @@ type PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) +{$IF LIBAVUTIL_VERSION <= 50001000} // 50.01.0 PIX_FMT_RGB32, ///< packed RGB 8:8:8, 32bpp, (msb)8A 8R 8G 8B(lsb), in CPU endianness +{$IFEND} PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) +{$IF LIBAVUTIL_VERSION <= 50000000} // 50.00.0 PIX_FMT_RGB565, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), in CPU endianness PIX_FMT_RGB555, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), in CPU endianness, most significant bit to 0 +{$IFEND} PIX_FMT_GRAY8, ///< Y , 8bpp PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white @@ -135,13 +154,17 @@ type PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG) PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG) PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG) - PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing(xvmc_render.h) + PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing PIX_FMT_XVMC_MPEG2_IDCT, PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 +{$IF LIBAVUTIL_VERSION <= 50001000} // 50.01.0 PIX_FMT_BGR32, ///< packed RGB 8:8:8, 32bpp, (msb)8A 8B 8G 8R(lsb), in CPU endianness +{$IFEND} +{$IF LIBAVUTIL_VERSION <= 50000000} // 50.00.0 PIX_FMT_BGR565, ///< packed RGB 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), in CPU endianness PIX_FMT_BGR555, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), in CPU endianness, most significant bit to 1 +{$IFEND} PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) PIX_FMT_BGR4, ///< packed RGB 1:2:1, 4bpp, (msb)1B 2G 1R(lsb) PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) @@ -150,10 +173,15 @@ type PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 for UV PIX_FMT_NV21, ///< as above, but U and V bytes are swapped - +{$IF LIBAVUTIL_VERSION <= 50001000} // 50.01.0 PIX_FMT_RGB32_1, ///< packed RGB 8:8:8, 32bpp, (msb)8R 8G 8B 8A(lsb), in CPU endianness PIX_FMT_BGR32_1, ///< packed RGB 8:8:8, 32bpp, (msb)8B 8G 8R 8A(lsb), in CPU endianness - +{$ELSE} // 50.02.0 + PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... + PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... + PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... + PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... +{$IFEND} PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) @@ -164,23 +192,74 @@ type PIX_FMT_VDPAU_MPEG2,///< MPEG-2 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers PIX_FMT_VDPAU_WMV3,///< WMV3 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers PIX_FMT_VDPAU_VC1, ///< VC-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers +{$IF LIBAVUTIL_VERSION >= 49015000} // 49.15.0 + PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, big-endian + PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, little-endian +{$IFEND} +{$IF LIBAVUTIL_VERSION >= 50001000} // 50.01.0 + PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian + PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian + PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), big-endian, most significant bit to 0 + PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), little-endian, most significant bit to 0 + + PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian + PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian + PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), big-endian, most significant bit to 1 + PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), little-endian, most significant bit to 1 + + PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers + PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers + PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a vaapi_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers +{$IFEND} PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions ); const {$ifdef WORDS_BIGENDIAN} - PIX_FMT_RGBA = PIX_FMT_RGB32_1; - PIX_FMT_BGRA = PIX_FMT_BGR32_1; - PIX_FMT_ARGB = PIX_FMT_RGB32; - PIX_FMT_ABGR = PIX_FMT_BGR32; - PIX_FMT_GRAY16 = PIX_FMT_GRAY16BE; + {$IF LIBAVUTIL_VERSION <= 50001000} // 50.01.0 + PIX_FMT_RGBA = PIX_FMT_RGB32_1; + PIX_FMT_BGRA = PIX_FMT_BGR32_1; + PIX_FMT_ARGB = PIX_FMT_RGB32; + PIX_FMT_ABGR = PIX_FMT_BGR32; + {$ELSE} // 50.02.0 + PIX_FMT_RGB32 = PIX_FMT_ARGB; + PIX_FMT_RGB32_1 = PIX_FMT_RGBA; + PIX_FMT_BGR32 = PIX_FMT_ABGR; + PIX_FMT_BGR32_1 = PIX_FMT_BGRA; + {$IFEND} + PIX_FMT_GRAY16 = PIX_FMT_GRAY16BE; + {$IF LIBAVUTIL_VERSION >= 49015000} // 49.15.0 + PIX_FMT_RGB48 = PIX_FMT_RGB48BE; + {$IFEND} + {$IF LIBAVUTIL_VERSION >= 50001000} // 50.01.0 + PIX_FMT_RGB565 = PIX_FMT_RGB565BE; + PIX_FMT_RGB555 = PIX_FMT_RGB555BE; + PIX_FMT_BGR565 = PIX_FMT_BGR565BE; + PIX_FMT_BGR555 = PIX_FMT_BGR555BE + {$IFEND} {$else} - PIX_FMT_RGBA = PIX_FMT_BGR32; - PIX_FMT_BGRA = PIX_FMT_RGB32; - PIX_FMT_ARGB = PIX_FMT_BGR32_1; - PIX_FMT_ABGR = PIX_FMT_RGB32_1; - PIX_FMT_GRAY16 = PIX_FMT_GRAY16LE; -{$endif} + {$IF LIBAVUTIL_VERSION <= 50001000} // 50.01.0 + PIX_FMT_RGBA = PIX_FMT_BGR32; + PIX_FMT_BGRA = PIX_FMT_RGB32; + PIX_FMT_ARGB = PIX_FMT_BGR32_1; + PIX_FMT_ABGR = PIX_FMT_RGB32_1; + {$ELSE} // 50.02.0 + PIX_FMT_RGB32 = PIX_FMT_BGRA; + PIX_FMT_RGB32_1 = PIX_FMT_ABGR; + PIX_FMT_BGR32 = PIX_FMT_RGBA; + PIX_FMT_BGR32_1 = PIX_FMT_ARGB; + {$IFEND} + PIX_FMT_GRAY16 = PIX_FMT_GRAY16LE; + {$IF LIBAVUTIL_VERSION >= 49015000} // 49.15.0 + PIX_FMT_RGB48 = PIX_FMT_RGB48LE; + {$IFEND} + {$IF LIBAVUTIL_VERSION >= 50001000} // 50.01.0 + PIX_FMT_RGB565 = PIX_FMT_RGB565LE; + PIX_FMT_RGB555 = PIX_FMT_RGB555LE; + PIX_FMT_BGR565 = PIX_FMT_BGR565LE; + PIX_FMT_BGR555 = PIX_FMT_BGR555LE; + {$IFEND} +{$ENDIF} {$IF LIBAVUTIL_VERSION_MAJOR < 50} // 50.0.0 PIX_FMT_UYVY411 = PIX_FMT_UYYVYY411; @@ -188,40 +267,41 @@ const PIX_FMT_YUV422 = PIX_FMT_YUYV422; {$IFEND} -(* common.h *) +(* libavutil/common.h *) // until now MKTAG is all from common.h KMS 9/6/2009 -function MKTAG(a,b,c,d: AnsiChar): integer; +function MKTAG(a, b, c, d: AnsiChar): integer; -(* mem.h *) +(* libavutil/mem.h *) +(* memory handling functions *) (** - * Allocate a block of \p size bytes with alignment suitable for all + * Allocates a block of size bytes with alignment suitable for all * memory accesses (including vectors if available on the CPU). * @param size Size in bytes for the memory block to be allocated. - * @return Pointer to the allocated block, NULL if it cannot allocate - * it. + * @return Pointer to the allocated block, NULL if the block cannot + * be allocated. * @see av_mallocz() *) function av_malloc(size: cuint): pointer; cdecl; external av__util; {av_malloc_attrib av_alloc_size(1)} (** - * Allocate or reallocate a block of memory. - * If \p ptr is NULL and \p size > 0, allocate a new block. If \p - * size is zero, free the memory block pointed by \p ptr. + * Allocates or reallocates a block of memory. + * If ptr is NULL and size > 0, allocates a new block. If \p + * size is zero, frees the memory block pointed to by ptr. * @param size Size in bytes for the memory block to be allocated or * reallocated. * @param ptr Pointer to a memory block already allocated with * av_malloc(z)() or av_realloc() or NULL. - * @return Pointer to a newly reallocated block or NULL if it cannot - * reallocate or the function is used to free the memory block. + * @return Pointer to a newly reallocated block or NULL if the block + * cannot be allocated or the function is used to free the memory block. * @see av_fast_realloc() *) function av_realloc(ptr: pointer; size: cuint): pointer; cdecl; external av__util; {av_alloc_size(2)} (** - * Free a memory block which has been allocated with av_malloc(z)() or + * Frees a memory block which has been allocated with av_malloc(z)() or * av_realloc(). * @param ptr Pointer to the memory block which should be freed. * @note ptr = NULL is explicitly allowed. @@ -232,29 +312,28 @@ procedure av_free(ptr: pointer); cdecl; external av__util; (** - * Allocate a block of \p size bytes with alignment suitable for all + * Allocates a block of size bytes with alignment suitable for all * memory accesses (including vectors if available on the CPU) and - * set to zeroes all the bytes of the block. + * zeroes all the bytes of the block. * @param size Size in bytes for the memory block to be allocated. - * @return Pointer to the allocated block, NULL if it cannot allocate - * it. + * @return Pointer to the allocated block, NULL if it cannot be allocated. * @see av_malloc() *) function av_mallocz(size: cuint): pointer; cdecl; external av__util; {av_malloc_attrib av_alloc_size(1)} (** - * Duplicate the string \p s. - * @param s String to be duplicated. + * Duplicates the string s. + * @param s string to be duplicated. * @return Pointer to a newly allocated string containing a - * copy of \p s or NULL if it cannot be allocated. + * copy of \p s or NULL if the string cannot be allocated. *) function av_strdup({const} s: PAnsiChar): PAnsiChar; cdecl; external av__util; {av_malloc_attrib} (** - * Free a memory block which has been allocated with av_malloc(z)() or - * av_realloc() and set to NULL the pointer to it. + * Frees a memory block which has been allocated with av_malloc(z)() or + * av_realloc() and set the pointer pointing to it to NULL. * @param ptr Pointer to the pointer to the memory block which should * be freed. * @see av_free() @@ -262,7 +341,7 @@ function av_strdup({const} s: PAnsiChar): PAnsiChar; procedure av_freep (ptr: pointer); cdecl; external av__util; -(* log.h *) +(* libavutil/log.h *) const {$IF LIBAVUTIL_VERSION_MAJOR < 50} @@ -277,26 +356,26 @@ const AV_LOG_QUIET = -8; (** - * something went really wrong and we will crash now + * Something went really wrong and we will crash now. *) AV_LOG_PANIC = 0; (** - * something went wrong and recovery is not possible - * like no header in a format which depends on it or a combination - * of parameters which are not allowed + * Something went wrong and recovery is not possible. + * For example, no header was found for a format which depends + * on headers or an illegal combination of parameters is used. *) AV_LOG_FATAL = 8; (** - * something went wrong and cannot losslessly be recovered - * but not all future data is affected + * Something went wrong and cannot losslessly be recovered. + * However, not all future data is affected. *) AV_LOG_ERROR = 16; (** - * something somehow does not look correct / something which may or may not - * lead to some problems like use of -vstrict -2 + * Something somehow does not look correct. This may or may not + * lead to problems. An example would be the use of '-vstrict -2'. *) AV_LOG_WARNING = 24; @@ -304,7 +383,7 @@ const AV_LOG_VERBOSE = 40; (** - * stuff which is only useful for libav* developers + * Stuff which is only useful for libav* developers. *) AV_LOG_DEBUG = 48; {$IFEND} @@ -317,7 +396,9 @@ procedure av_log_set_level(level: cint); implementation -function MKTAG(a,b,c,d: AnsiChar): integer; +(* libavutil/common.h *) + +function MKTAG(a, b, c, d: AnsiChar): integer; begin Result := (ord(a) or (ord(b) shl 8) or (ord(c) shl 16) or (ord(d) shl 24)); end; diff --git a/unicode/src/lib/ffmpeg/mathematics.pas b/unicode/src/lib/ffmpeg/mathematics.pas index fb57ccea..92ee0a5e 100644 --- a/unicode/src/lib/ffmpeg/mathematics.pas +++ b/unicode/src/lib/ffmpeg/mathematics.pas @@ -27,6 +27,9 @@ (* * Conversion of libavutil/mathematics.h * revision 16844, Wed Jan 28 08:50:10 2009 UTC + * + * update, MiSchi, no code change + * Fri Jun 12 2009 21:50:00 UTC *) unit mathematics; @@ -55,11 +58,11 @@ const type TAVRounding = ( - AV_ROUND_ZERO = 0, ///< Round toward zero - AV_ROUND_INF = 1, ///< Round away from zero - AV_ROUND_DOWN = 2, ///< Round toward -infinity - AV_ROUND_UP = 3, ///< Round toward +infinity - AV_ROUND_NEAR_INF = 5 ///< Round to nearest and halfway cases away from zero + AV_ROUND_ZERO = 0, ///< Round toward zero. + AV_ROUND_INF = 1, ///< Round away from zero. + AV_ROUND_DOWN = 2, ///< Round toward -infinity. + AV_ROUND_UP = 3, ///< Round toward +infinity. + AV_ROUND_NEAR_INF = 5 ///< Round to nearest and halfway cases away from zero. ); {$IF LIBAVUTIL_VERSION >= 49013000} // 49.13.0 @@ -90,4 +93,3 @@ function av_rescale_q (a: cint64; bq, cq: TAVRational): cint64; implementation end. - diff --git a/unicode/src/lib/ffmpeg/opt.pas b/unicode/src/lib/ffmpeg/opt.pas index 833dc247..a2e2cce9 100644 --- a/unicode/src/lib/ffmpeg/opt.pas +++ b/unicode/src/lib/ffmpeg/opt.pas @@ -28,6 +28,9 @@ (* * Conversion of libavcodec/opt.h * revision 16912, Sun Feb 1 02:00:19 2009 UTC + * + * update, MiSchi, no code change + * Fri Jun 12 2009 21:50:00 UTC *) unit opt; @@ -109,8 +112,8 @@ type {$IF LIBAVCODEC_VERSION >= 51039000} // 51.39.0 (** - * Looks for an option in \p obj. Looks only for the options which - * have the flags set as specified in \p mask and \p flags (that is, + * Looks for an option in obj. Looks only for the options which + * have the flags set as specified in mask and flags (that is, * for which it is the case that opt->flags & mask == flags). * * @param[in] obj a pointer to a struct whose first element is a @@ -135,7 +138,7 @@ function av_set_string(obj: pointer; name: {const} PAnsiChar; val: {const} PAnsi {$IF LIBAVCODEC_VERSION >= 51059000} // 51.59.0 (** * @return a pointer to the AVOption corresponding to the field set or - * NULL if no matching AVOption exists, or if the value \p val is not + * NULL if no matching AVOption exists, or if the value val is not * valid * @see av_set_string3() *) @@ -167,8 +170,11 @@ function av_set_string2(obj: Pointer; name: {const} PAnsiChar; val: {const} PAns * @param alloc when 1 then the old value will be av_freed() and the * new av_strduped() * when 0 then no av_free() nor av_strdup() will be used - * @return 0 if the value has been set, an AVERROR* error code if no - * matching option exists, or if the value \p val is not valid + * @return 0 if the value has been set, or an AVERROR code in case of + * error: + * AVERROR(ENOENT) if no matching option exists + * AVERROR(ERANGE) if the value is out of range + * AVERROR(EINVAL) if the value is not valid *) function av_set_string3(obj: Pointer; name: {const} PAnsiChar; val: {const} PAnsiChar; alloc: cint; out o_out: {const} PAVOption): cint; cdecl; external av__codec; diff --git a/unicode/src/lib/ffmpeg/rational.pas b/unicode/src/lib/ffmpeg/rational.pas index 6762aa26..b940009d 100644 --- a/unicode/src/lib/ffmpeg/rational.pas +++ b/unicode/src/lib/ffmpeg/rational.pas @@ -28,6 +28,9 @@ (* * Conversion of libavutil/rational.h * revision 16912, Sun Feb 1 02:00:19 2009 UTC + * + * update, MiSchi, no code change + * Fri Jun 12 2009 22:20:00 UTC *) unit rational; @@ -135,22 +138,20 @@ function av_d2q(d: cdouble; max: cint): TAVRational; cdecl; external av__util; {av_const} {$IF LIBAVUTIL_VERSION >= 49011000} // 49.11.0 - (** - * @return 1 if \q1 is nearer to \p q than \p q2, -1 if \p q2 is nearer - * than \p q1, 0 if they have the same distance. + * @return 1 if q1 is nearer to q than q2, -1 if q2 is nearer + * than q1, 0 if they have the same distance. *) function av_nearer_q(q, q1, q2: TAVRational): cint; cdecl; external av__util; (** - * Finds the nearest value in \p q_list to \p q. + * Finds the nearest value in q_list to q. * @param q_list an array of rationals terminated by {0, 0} * @return the index of the nearest value found in the array *) function av_find_nearest_q_idx(q: TAVRational; q_list: {const} PAVRationalArray): cint; cdecl; external av__util; - {$IFEND} implementation diff --git a/unicode/src/lib/ffmpeg/src/MacOSX/MacOSXReadMe.txt b/unicode/src/lib/ffmpeg/src/MacOSX/MacOSXReadMe.txt deleted file mode 100644 index c2f5826a..00000000 --- a/unicode/src/lib/ffmpeg/src/MacOSX/MacOSXReadMe.txt +++ /dev/null @@ -1,24 +0,0 @@ -If you are using fink to install ffmpeg and friends, -you can skip the rest of this notes. - -How to download an build ffmpeg for UltraStar Deluxe on Mac OS X: - -1. Open a terminal. - -2. cd into the Game/Code/lib/ffmpeg/src/MacOSX directory - -3. Run the following command: - -svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg - -4. The compile ffmpeg. I made a script for this: - -./build_ffmpeg.sh - -5. On OS X you have to patch the the dylibs. Run the following - script. It patches the dylibs and copies them to the - lib/ffmpeg dir: - -./copy_and_patch_dylibs.sh - -You're done. diff --git a/unicode/src/lib/ffmpeg/src/MacOSX/build_ffmpeg.sh b/unicode/src/lib/ffmpeg/src/MacOSX/build_ffmpeg.sh deleted file mode 100755 index bcb3ca1e..00000000 --- a/unicode/src/lib/ffmpeg/src/MacOSX/build_ffmpeg.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -cd ffmpeg -./configure --enable-shared --disable-static --disable-mmx -make - diff --git a/unicode/src/lib/ffmpeg/src/MacOSX/copy_and_patch_dylibs.sh b/unicode/src/lib/ffmpeg/src/MacOSX/copy_and_patch_dylibs.sh deleted file mode 100755 index 064d2ecc..00000000 --- a/unicode/src/lib/ffmpeg/src/MacOSX/copy_and_patch_dylibs.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# Copy dylibs: -cp ffmpeg/libavcodec/libavcodec.51.dylib ../../libavcodec.dylib -cp ffmpeg/libavformat/libavformat.52.dylib ../../libavformat.dylib -cp ffmpeg/libavutil/libavutil.49.dylib ../../libavutil.dylib - -# Patching libavcodec: -install_name_tool -id @executable_path/libavcodec.dylib ../../libavcodec.dylib -install_name_tool -change /usr/local/lib/libavutil.dylib @executable_path/libavutil.dylib ../../libavcodec.dylib - -# Patching libavformat: -install_name_tool -id @executable_path/libavformat.dylib ../../libavformat.dylib -install_name_tool -change /usr/local/lib/libavutil.dylib @executable_path/libavutil.dylib ../../libavformat.dylib -install_name_tool -change /usr/local/lib/libavcodec.dylib @executable_path/libavcodec.dylib ../../libavformat.dylib - -# Patching libavcodec: -install_name_tool -id @executable_path/libavutil.dylib ../../libavutil.dylib - -# Printing result: -otool -L ../../libavutil.dylib -otool -L ../../libavcodec.dylib -otool -L ../../libavformat.dylib
\ No newline at end of file diff --git a/unicode/src/lib/ffmpeg/swscale.pas b/unicode/src/lib/ffmpeg/swscale.pas index 965659d9..c0aabf45 100644 --- a/unicode/src/lib/ffmpeg/swscale.pas +++ b/unicode/src/lib/ffmpeg/swscale.pas @@ -45,12 +45,13 @@ interface uses ctypes, avutil, + avcodec, UConfig; const (* Max. supported version by this header *) LIBSWSCALE_MAX_VERSION_MAJOR = 0; - LIBSWSCALE_MAX_VERSION_MINOR = 6; + LIBSWSCALE_MAX_VERSION_MINOR = 7; LIBSWSCALE_MAX_VERSION_RELEASE = 1; LIBSWSCALE_MAX_VERSION = (LIBSWSCALE_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBSWSCALE_MAX_VERSION_MINOR * VERSION_MINOR) + @@ -78,7 +79,7 @@ function swscale_version(): cuint; {$IFEND} const - {* values for the flags, the stuff on the command line is different *} + (* values for the flags, the stuff on the command line is different *) SWS_FAST_BILINEAR = 1; SWS_BILINEAR = 2; SWS_BICUBIC = 4; @@ -98,10 +99,10 @@ const SWS_PRINT_INFO = $1000; - //the following 3 flags are not completely implemented - //internal chrominace subsampling info + // the following 3 flags are not completely implemented + // internal chrominace subsampling info SWS_FULL_CHR_H_INT = $2000; - //input subsampling info + // input subsampling info SWS_FULL_CHR_H_INP = $4000; SWS_DIRECT_BGR = $8000; SWS_ACCURATE_RND = $40000; @@ -123,15 +124,14 @@ const SWS_CS_SMPTE240M = 7; SWS_CS_DEFAULT = 5; - type // when used for filters they must have an odd number of elements // coeffs cannot be shared between vectors PSwsVector = ^TSwsVector; TSwsVector = record - coeff: PCdouble; - length: cint; + coeff: PCdouble; // pointer to the list of coefficients + length: cint; // number of coefficients in the vector end; // vectors can be shared @@ -148,63 +148,179 @@ type {internal structure} end; - procedure sws_freeContext(swsContext: PSwsContext); cdecl; external sw__scale; +(** + * Allocates and returns a SwsContext. You need it to perform + * scaling/conversion operations using sws_scale(). + * + * @param srcW the width of the source image + * @param srcH the height of the source image + * @param srcFormat the source image format + * @param dstW the width of the destination image + * @param dstH the height of the destination image + * @param dstFormat the destination image format + * @param flags specify which algorithm and options to use for rescaling + * @return a pointer to an allocated context, or NULL in case of error + *) function sws_getContext(srcW: cint; srcH: cint; srcFormat: TAVPixelFormat; - dstW: cint; dstH: cint; dstFormat: TAVPixelFormat; flags: cint; - srcFilter: PSwsFilter; dstFilter: PSwsFilter; param: PCdouble): PSwsContext; + dstW: cint; dstH: cint; dstFormat: TAVPixelFormat; + flags: cint; srcFilter: PSwsFilter; + dstFilter: PSwsFilter; param: PCdouble): PSwsContext; cdecl; external sw__scale; -function sws_scale(context: PSwsContext; src: PPCuint8Array; srcStride: PCintArray; srcSliceY: cint; srcSliceH: cint; - dst: PPCuint8Array; dstStride: PCintArray): cint; + +(** + * Scales the image slice in srcSlice and puts the resulting scaled + * slice in the image in dst. A slice is a sequence of consecutive + * rows in an image. + * + * @param context the scaling context previously created with + * sws_getContext() + * @param srcSlice the array containing the pointers to the planes of + * the source slice + * @param srcStride the array containing the strides for each plane of + * the source image + * @param srcSliceY the position in the source image of the slice to + * process, that is the number (counted starting from + * zero) in the image of the first row of the slice + * @param srcSliceH the height of the source slice, that is the number + * of rows in the slice + * @param dst the array containing the pointers to the planes of + * the destination image + * @param dstStride the array containing the strides for each plane of + * the destination image + * @return the height of the output slice + *) +function sws_scale(context: PSwsContext; srcSlice: PPCuint8Array; srcStride: PCintArray; + srcSliceY: cint; srcSliceH: cint; dst: PPCuint8Array; dstStride: PCintArray): cint; cdecl; external sw__scale; -function sws_scale_ordered(context: PSwsContext; src: PPCuint8Array; srcStride: PCintArray; srcSliceY: cint; - srcSliceH: cint; dst: PPCuint8Array; dstStride: PCintArray): cint; + +{$IF LIBSWSCALE_VERSION_MAJOR < 1} +// deprecated. Use sws_scale() instead. +function sws_scale_ordered(context: PSwsContext; src: PPCuint8Array; srcStride: PCintArray; + srcSliceY: cint; srcSliceH: cint; dst: PPCuint8Array; dstStride: PCintArray): cint; cdecl; external sw__scale; deprecated; +{$IFEND} -function sws_setColorspaceDetails(c: PSwsContext; inv_table: PQuadCintArray; srcRange: cint; table: PQuadCintArray; dstRange: cint; +(** + * @param inv_table the yuv2rgb coefficients, normally ff_yuv2rgb_coeffs[x] + * @param fullRange if 1 then the luma range is 0..255 if 0 it is 16..235 + * @return -1 if not supported + *) +function sws_setColorspaceDetails(c: PSwsContext; inv_table: PQuadCintArray; + srcRange: cint; table: PQuadCintArray; dstRange: cint; brightness: cint; contrast: cint; saturation: cint): cint; cdecl; external sw__scale; -function sws_getColorspaceDetails(c: PSwsContext; var inv_table: PQuadCintArray; var srcRange: cint; var table: PQuadCintArray; var dstRange: cint; + +(** + * @return -1 if not supported + *) +function sws_getColorspaceDetails(c: PSwsContext; var inv_table: PQuadCintArray; + var srcRange: cint; var table: PQuadCintArray; var dstRange: cint; var brightness: cint; var contrast: cint; var saturation: cint): cint; cdecl; external sw__scale; + +(** + * Returns a normalized Gaussian curve used to filter stuff + * quality=3 is high quality, lower is lower quality. + *) function sws_getGaussianVec(variance: cdouble; quality: cdouble): PSwsVector; cdecl; external sw__scale; + +(** + * Allocates and returns a vector with length coefficients, all + * with the same value c. + *) function sws_getConstVec(c: cdouble; length: cint): PSwsVector; cdecl; external sw__scale; + +(** + * Allocates and returns a vector with just one coefficient, with + * value 1.0. + *) function sws_getIdentityVec: PSwsVector; cdecl; external sw__scale; + +(** + * Scales all the coefficients of a by the scalar value. + *) procedure sws_scaleVec(a: PSwsVector; scalar: cdouble); cdecl; external sw__scale; + +(** + * Scales all the coefficients of a so that their sum equals height. + *) procedure sws_normalizeVec(a: PSwsVector; height: cdouble); cdecl; external sw__scale; + procedure sws_convVec(a: PSwsVector; b: PSwsVector); cdecl; external sw__scale; + procedure sws_addVec(a: PSwsVector; b: PSwsVector); cdecl; external sw__scale; + procedure sws_subVec(a: PSwsVector; b: PSwsVector); cdecl; external sw__scale; + procedure sws_shiftVec(a: PSwsVector; shift: cint); cdecl; external sw__scale; + +(** + * Allocates and returns a clone of the vector a, that is a vector + * with the same coefficients as a. + *) function sws_cloneVec(a: PSwsVector): PSwsVector; cdecl; external sw__scale; +{$IF LIBSWSCALE_VERSION_MAJOR < 1} +// deprecated Use sws_printVec2() instead. + procedure sws_printVec(a: PSwsVector); + cdecl; external sw__scale; deprecated; +{$IFEND} + +{$IF LIBSWSCALE_VERSION >= 000007000} // >= 0.7.0 +(** + * Prints with av_log() a textual representation of the vector a + * if log_level <= av_log_level. + *) +procedure sws_printVec2(a: PSwsVector; + log_ctx: PAVClass; // PAVClass is declared in avcodec.pas + log_level: cint); cdecl; external sw__scale; +{$IFEND} + procedure sws_freeVec(a: PSwsVector); cdecl; external sw__scale; -function sws_getDefaultFilter(lumaGBlur: cfloat; chromaGBlur: cfloat; lumaSarpen: cfloat; chromaSharpen: cfloat; chromaHShift: cfloat; - chromaVShift: cfloat; verbose: cint): PSwsFilter; +function sws_getDefaultFilter(lumaGBlur: cfloat; chromaGBlur: cfloat; + lumaSharpen: cfloat; chromaSharpen: cfloat; + chromaHShift: cfloat; chromaVShift: cfloat; + verbose: cint): PSwsFilter; cdecl; external sw__scale; + procedure sws_freeFilter(filter: PSwsFilter); cdecl; external sw__scale; +(** + * Checks if context can be reused, otherwise reallocates a new + * one. + * + * If context is NULL, just calls sws_getContext() to get a new + * context. Otherwise, checks if the parameters are the ones already + * saved in context. If that is the case, returns the current + * context. Otherwise, frees context and gets a new context with + * the new parameters. + * + * Be warned that srcFilter and dstFilter are not checked, they + * are assumed to remain the same. + *) function sws_getCachedContext(context: PSwsContext; - srcW: cint; srcH: cint; srcFormat: cint; - dstW: cint; dstH: cint; dstFormat: cint; flags: cint; - srcFilter: PSwsFilter; dstFilter: PSwsFilter; param: PCdouble): PSwsContext; + srcW: cint; srcH: cint; srcFormat: TAVPixelFormat; + dstW: cint; dstH: cint; dstFormat: TAVPixelFormat; + flags: cint; srcFilter: PSwsFilter; + dstFilter: PSwsFilter; param: PCdouble): PSwsContext; cdecl; external sw__scale; implementation diff --git a/unicode/src/media/UAudioDecoder_FFmpeg.pas b/unicode/src/media/UAudioDecoder_FFmpeg.pas index 2d221f40..97d8a8df 100644 --- a/unicode/src/media/UAudioDecoder_FFmpeg.pas +++ b/unicode/src/media/UAudioDecoder_FFmpeg.pas @@ -378,14 +378,14 @@ begin // try standard format SampleFormat := asfS16; end; - + if CodecCtx^.channels > 255 then + Log.LogStatus('Error: CodecCtx^.channels > 255', 'TFFmpegDecodeStream.Open'); FormatInfo := TAudioFormatInfo.Create( - CodecCtx^.channels, + byte(CodecCtx^.channels), CodecCtx^.sample_rate, SampleFormat ); - PacketQueue := TPacketQueue.Create(); // finally start the decode thread @@ -446,7 +446,9 @@ end; function TFFmpegDecodeStream.GetLength(): real; begin - // do not forget to consider the start_time value here + // do not forget to consider the start_time value here + // there is a type size mismatch warnign because start_time and duration are cint64. + // So, in principle there could be an overflow when doing the sum. Result := (FormatCtx^.start_time + FormatCtx^.duration) / AV_TIME_BASE; end; @@ -643,7 +645,6 @@ end; function TFFmpegDecodeStream.ParseLoop(): boolean; var Packet: TAVPacket; - StatusPacket: PAVPacket; SeekTarget: int64; ByteIOCtx: PByteIOContext; ErrorCode: integer; diff --git a/unicode/src/media/UAudioInput_Bass.pas b/unicode/src/media/UAudioInput_Bass.pas index cf292c45..ad6c3818 100644 --- a/unicode/src/media/UAudioInput_Bass.pas +++ b/unicode/src/media/UAudioInput_Bass.pas @@ -95,7 +95,7 @@ var * user - players associated with left/right channels *} function MicrophoneCallback(stream: HSTREAM; buffer: Pointer; - len: Cardinal; inputDevice: Pointer): boolean; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + len: integer; inputDevice: Pointer): boolean; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} begin AudioInputProcessor.HandleMicrophoneData(buffer, len, inputDevice); Result := true; diff --git a/unicode/src/media/UAudioInput_Portaudio.pas b/unicode/src/media/UAudioInput_Portaudio.pas index 53080a03..31d2882b 100644 --- a/unicode/src/media/UAudioInput_Portaudio.pas +++ b/unicode/src/media/UAudioInput_Portaudio.pas @@ -95,7 +95,6 @@ var Error: TPaError; inputParams: TPaStreamParameters; deviceInfo: PPaDeviceInfo; - SourceIndex: integer; begin Result := false; @@ -291,8 +290,6 @@ var sourceIndex: integer; sourceName: string; {$ENDIF} - cbPolls: integer; - cbWorks: boolean; begin Result := false; diff --git a/unicode/src/media/UAudioPlayback_SoftMixer.pas b/unicode/src/media/UAudioPlayback_SoftMixer.pas index c8da6bcd..c87e461d 100644 --- a/unicode/src/media/UAudioPlayback_SoftMixer.pas +++ b/unicode/src/media/UAudioPlayback_SoftMixer.pas @@ -51,7 +51,7 @@ type SampleBuffer: PByteArray; SampleBufferSize: integer; SampleBufferCount: integer; // number of available bytes in SampleBuffer - SampleBufferPos: cardinal; + SampleBufferPos: integer; SourceBuffer: PByteArray; SourceBufferSize: integer; @@ -564,9 +564,8 @@ var ConversionOutputSize: integer; // max. number of converted data (= buffer size) ConversionOutputCount: integer; // actual number of converted data SourceSize: integer; - RequestedSourceSize: integer; NeededSampleBufferSize: integer; - BytesNeeded, BytesAvail: integer; + BytesNeeded: integer; SourceFormatInfo, OutputFormatInfo: TAudioFormatInfo; SourceFrameSize, OutputFrameSize: integer; SkipOutputCount: integer; // number of output-data bytes to skip @@ -574,7 +573,6 @@ var FillCount: integer; // number of bytes to fill with padding data CopyCount: integer; PadFrame: PByteArray; - i: integer; begin Result := -1; diff --git a/unicode/src/media/UVideo.pas b/unicode/src/media/UVideo.pas index 35f8ab4d..f55690b2 100644 --- a/unicode/src/media/UVideo.pas +++ b/unicode/src/media/UVideo.pas @@ -697,6 +697,12 @@ begin 0, fCodecContext^.Height, @(fAVFrameRGB.data), @(fAVFrameRGB.linesize)); {$ELSE} + // img_convert from lib/ffmpeg/avcodec.pas is actually deprecated. + // If ./configure does not find SWScale then this gives the error + // that the identifier img_convert is not known or similar. + // I think this should be removed, but am not sure whether there should + // be some other replacement or a warning, Therefore, I leave it for now. + // April 2009, mischi errnum := img_convert(PAVPicture(fAVFrameRGB), PIXEL_FMT_FFMPEG, PAVPicture(fAVFrame), fCodecContext^.pix_fmt, fCodecContext^.width, fCodecContext^.height); diff --git a/unicode/src/menu/UDisplay.pas b/unicode/src/menu/UDisplay.pas index 3e653183..f2eb2ced 100644 --- a/unicode/src/menu/UDisplay.pas +++ b/unicode/src/menu/UDisplay.pas @@ -45,43 +45,71 @@ type TDisplay = class private //fade-to-black-hack - BlackScreen: Boolean; + BlackScreen: boolean; - FadeEnabled: Boolean; // true if fading is enabled - FadeFailed: Boolean; // true if fading is possible (enough memory, etc.) - FadeState: integer; // fading state, 0 means that the fade texture must be initialized - LastFadeTime: Cardinal; // last fade update time + FadeEnabled: boolean; // true if fading is enabled + FadeFailed: boolean; // true if fading is possible (enough memory, etc.) + FadeState: integer; // fading state, 0 means that the fade texture must be initialized + LastFadeTime: cardinal; // last fade update time - FadeTex: array[1..2] of GLuint; + FadeTex: array[1..2] of GLuint; + + FPSCounter: cardinal; + LastFPS: cardinal; + NextFPSSwap: cardinal; - FPSCounter : Cardinal; - LastFPS : Cardinal; - NextFPSSwap : Cardinal; + OSD_LastError: string; - OSD_LastError : String; + { software cursor data } + Cursor_X: double; + Cursor_Y: double; + Cursor_Pressed: boolean; + Cursor_HiddenByScreen: boolean; // hides software cursor and deactivate auto fade in + + // used for cursor fade out when there is no movement + Cursor_Visible: boolean; + Cursor_LastMove: cardinal; + Cursor_Fade: boolean; procedure DrawDebugInformation; public - NextScreen : PMenu; - CurrentScreen : PMenu; + NextScreen: PMenu; + CurrentScreen: PMenu; //popup data NextScreenWithCheck: Pmenu; - CheckOK : Boolean; + CheckOK: boolean; // FIXME: Fade is set to 0 in UMain and other files but not used here anymore. - Fade : Real; + Fade: real; constructor Create; destructor Destroy; override; procedure SaveScreenShot; - function Draw: Boolean; + function Draw: boolean; + + { sets SDL_ShowCursor depending on options set in Ini } + procedure SetCursor; + + { called when cursor moves, positioning of software cursor } + procedure MoveCursor(X, Y: double; Pressed: boolean); + + + { draws software cursor } + procedure DrawCursor; end; var - Display: TDisplay; + Display: TDisplay; + +const + { constants for software cursor effects + time in milliseconds } + Cursor_FadeIn_Time = 500; // seconds the fade in effect lasts + Cursor_FadeOut_Time = 2000; // seconds the fade out effect lasts + Cursor_AutoHide_Time = 5000; // seconds until auto fade out starts if there is no mouse movement implementation @@ -104,15 +132,15 @@ begin inherited Create; //popup hack - CheckOK := False; + CheckOK := false; NextScreen := nil; NextScreenWithCheck := nil; - BlackScreen := False; + BlackScreen := false; // fade mod - FadeState := 0; + FadeState := 0; FadeEnabled := (Ini.ScreenFade = 1); - FadeFailed:= false; + FadeFailed := false; glGenTextures(2, @FadeTex); @@ -125,6 +153,15 @@ begin //Set LastError for OSD to No Error OSD_LastError := 'No Errors'; + + // software cursor default values + Cursor_LastMove := 0; + Cursor_Visible := false; + Cursor_Pressed := false; + Cursor_X := -1; + Cursor_Y := -1; + Cursor_Fade := false; + Cursor_HiddenByScreen := true; end; destructor TDisplay.Destroy; @@ -133,14 +170,14 @@ begin inherited Destroy; end; -function TDisplay.Draw: Boolean; +function TDisplay.Draw: boolean; var - S: integer; - FadeStateSquare: Real; - currentTime: Cardinal; - glError: glEnum; + S: integer; + FadeStateSquare: real; + currentTime: cardinal; + glError: glEnum; begin - Result := True; + Result := true; //We don't need this here anymore, //Because the background care about cleaning the buffers @@ -166,12 +203,12 @@ begin begin NextScreen := NextScreenWithCheck; NextScreenWithCheck := nil; - CheckOk := False; + CheckOk := false; end else begin // on end of game fade to black before exit - BlackScreen := True; + BlackScreen := true; end; end; @@ -188,16 +225,16 @@ begin // fade mod FadeState := 0; if ((Ini.ScreenFade = 1) and (not FadeFailed)) then - FadeEnabled := True + FadeEnabled := true else if (Ini.ScreenFade = 0) then - FadeEnabled := False; + FadeEnabled := false; end else begin // disable fading if initialization failed if (FadeEnabled and FadeFailed) then begin - FadeEnabled := False; + FadeEnabled := false; end; if (FadeEnabled and not FadeFailed) then @@ -275,7 +312,7 @@ begin glDisable(GL_BLEND); glDisable(GL_TEXTURE_2D); end - // blackscreen hack +// blackscreen hack else if not BlackScreen then begin NextScreen.OnShow; @@ -286,7 +323,7 @@ begin // fade out complete... FadeState := 0; CurrentScreen.onHide; - CurrentScreen.ShowFinish := False; + CurrentScreen.ShowFinish := false; CurrentScreen := NextScreen; NextScreen := nil; if not BlackScreen then @@ -296,16 +333,172 @@ begin end else begin - Result := False; + Result := false; Break; end; end; end; // if - //Draw OSD only on first Screen if Debug Mode is enabled +// Draw OSD only on first Screen if Debug Mode is enabled if ((Ini.Debug = 1) or (Params.Debug)) and (S = 1) then DrawDebugInformation; end; // for + + if not BlackScreen then + DrawCursor; +end; + +{ sets SDL_ShowCursor depending on options set in Ini } +procedure TDisplay.SetCursor; +var + Cursor: Integer; +begin + Cursor := 0; + + if (CurrentScreen <> @ScreenSing) or (Cursor_HiddenByScreen) then + begin // hide cursor on singscreen + if (Ini.Mouse = 0) and (Ini.FullScreen = 0) then + // show sdl (os) cursor in window mode even when mouse support is off + Cursor := 1 + else if (Ini.Mouse = 1) then + // show sdl (os) cursor when hardware cursor is selected + Cursor := 1; + + if (Ini.Mouse <> 2) then + Cursor_HiddenByScreen := false; + end + else if (Ini.Mouse <> 2) then + Cursor_HiddenByScreen := true; + + + SDL_ShowCursor(Cursor); + + if (Ini.Mouse = 2) then + begin + if Cursor_HiddenByScreen then + begin + // show software cursor + Cursor_HiddenByScreen := false; + Cursor_Visible := false; + Cursor_Fade := false; + end + else if (CurrentScreen = @ScreenSing) then + begin + // hide software cursor in singscreen + Cursor_HiddenByScreen := true; + Cursor_Visible := false; + Cursor_Fade := false; + end; + end; +end; + +{ called when cursor moves, positioning of software cursor } +procedure TDisplay.MoveCursor(X, Y: double; Pressed: boolean); +var + Ticks: cardinal; +begin + if (Ini.Mouse = 2) and + ((X <> Cursor_X) or (Y <> Cursor_Y) or (Pressed <> Cursor_Pressed)) then + begin + Cursor_X := X; + Cursor_Y := Y; + Cursor_Pressed := Pressed; + + Ticks := SDL_GetTicks; + + { fade in on movement (or button press) if not first movement } + if (not Cursor_Visible) and (Cursor_LastMove <> 0) then + begin + if Cursor_Fade then // we use a trick here to consider progress of fade out + Cursor_LastMove := Ticks - round(Cursor_FadeIn_Time * (1 - (Ticks - Cursor_LastMove)/Cursor_FadeOut_Time)) + else + Cursor_LastMove := Ticks; + + Cursor_Visible := true; + Cursor_Fade := true; + end + else if not Cursor_Fade then + begin + Cursor_LastMove := Ticks; + end; + end; +end; + +{ draws software cursor } +procedure TDisplay.DrawCursor; +var + Alpha: single; + Ticks: cardinal; +begin + if (Ini.Mouse = 2) then + begin // draw software cursor + Ticks := SDL_GetTicks; + + if (Cursor_Visible) and (Cursor_LastMove + Cursor_AutoHide_Time <= Ticks) then + begin // start fade out after 5 secs w/o activity + Cursor_Visible := false; + Cursor_LastMove := Ticks; + Cursor_Fade := true; + end; + + // fading + if Cursor_Fade then + begin + if Cursor_Visible then + begin // fade in + if (Cursor_LastMove + Cursor_FadeIn_Time <= Ticks) then + Cursor_Fade := false + else + Alpha := sin((Ticks - Cursor_LastMove) * 0.5 * pi / Cursor_FadeIn_Time) * 0.7; + end + else + begin //fade out + if (Cursor_LastMove + Cursor_FadeOut_Time <= Ticks) then + Cursor_Fade := false + else + Alpha := cos((Ticks - Cursor_LastMove) * 0.5 * pi / Cursor_FadeOut_Time) * 0.7; + end; + end; + + // no else if here because we may turn off fade in if block + if not Cursor_Fade then + begin + if Cursor_Visible then + Alpha := 0.7 // alpha when cursor visible and not fading + else + Alpha := 0; // alpha when cursor is hidden + end; + + if (Alpha > 0) and (not Cursor_HiddenByScreen) then + begin + glColor4f(1, 1, 1, Alpha); + glEnable(GL_TEXTURE_2D); + glEnable(GL_BLEND); + glDisable(GL_DEPTH_TEST); + + if (Cursor_Pressed) and (Tex_Cursor_Pressed.TexNum > 0) then + glBindTexture(GL_TEXTURE_2D, Tex_Cursor_Pressed.TexNum) + else + glBindTexture(GL_TEXTURE_2D, Tex_Cursor_Unpressed.TexNum); + + glBegin(GL_QUADS); + glTexCoord2f(0, 0); + glVertex2f(Cursor_X, Cursor_Y); + + glTexCoord2f(0, 1); + glVertex2f(Cursor_X, Cursor_Y + 32); + + glTexCoord2f(1, 1); + glVertex2f(Cursor_X + 32, Cursor_Y + 32); + + glTexCoord2f(1, 0); + glVertex2f(Cursor_X + 32, Cursor_Y); + glEnd; + + glDisable(GL_BLEND); + glDisable(GL_TEXTURE_2D); + end; + end; end; procedure TDisplay.SaveScreenShot; @@ -318,7 +511,7 @@ var Align: integer; RowSize: integer; begin - // Exit if Screenshot-path does not exist or read-only +// Exit if Screenshot-path does not exist or read-only if (ScreenshotsPath = '') then Exit; @@ -332,9 +525,9 @@ begin break end; - // we must take the row-alignment (4byte by default) into account +// we must take the row-alignment (4byte by default) into account glGetIntegerv(GL_PACK_ALIGNMENT, @Align); - // calc aligned row-size +// calc aligned row-size RowSize := ((ScreenW*3 + (Align-1)) div Align) * Align; GetMem(ScreenData, RowSize * ScreenH); @@ -347,8 +540,8 @@ begin ScreenData, ScreenW, ScreenH, 24, RowSize, $0000FF, $00FF00, $FF0000, 0); - //Success := WriteJPGImage(FileName, Surface, 95); - //Success := WriteBMPImage(FileName, Surface); +// Success := WriteJPGImage(FileName, Surface, 95); +// Success := WriteBMPImage(FileName, Surface); Success := WritePNGImage(FileName, Surface); if Success then ScreenPopupError.ShowPopup('Screenshot saved: ' + ExtractFileName(FileName)) @@ -360,12 +553,13 @@ begin end; //------------ -// DrawDebugInformation - Procedure draw FPS and some other Informations on Screen +// DrawDebugInformation - procedure draw fps and some other informations on screen //------------ procedure TDisplay.DrawDebugInformation; -var Ticks: Cardinal; +var + Ticks: cardinal; begin - //Some White Background for information +// Some White Background for information glEnable(GL_BLEND); glDisable(GL_TEXTURE_2D); glColor4f(1, 1, 1, 0.5); @@ -377,13 +571,13 @@ begin glEnd; glDisable(GL_BLEND); - //Set Font Specs +// set font specs SetFontStyle(0); SetFontSize(21); - SetFontItalic(False); + SetFontItalic(false); glColor4f(0, 0, 0, 1); - //Calculate FPS +// calculate fps Ticks := SDL_GetTicks(); if (Ticks >= NextFPSSwap) then begin @@ -394,17 +588,17 @@ begin Inc(FPSCounter); - //Draw Text +// draw text - //FPS +// fps SetFontPos(695, 0); glPrint ('FPS: ' + InttoStr(LastFPS)); - //RSpeed +// rspeed SetFontPos(695, 13); glPrint ('RSpeed: ' + InttoStr(Round(1000 * TimeMid))); - //LastError +// lasterror SetFontPos(695, 26); glColor4f(1, 0, 0, 1); glPrint (OSD_LastError); diff --git a/unicode/src/menu/UMenu.pas b/unicode/src/menu/UMenu.pas index 6d9fba96..7cdaef36 100644 --- a/unicode/src/menu/UMenu.pas +++ b/unicode/src/menu/UMenu.pas @@ -34,19 +34,20 @@ interface {$I switches.inc} uses - gl, SysUtils, - UTexture, - UMenuStatic, - UMenuText, - UMenuButton, - UMenuSelectSlide, - UMenuInteract, + Math, + gl, + SDL, UMenuBackground, - UThemes, + UMenuButton, UMenuButtonCollection, - Math, - UMusic; + UMenuInteract, + UMenuSelectSlide, + UMenuStatic, + UMenuText, + UMusic, + UTexture, + UThemes; type { Int16 = SmallInt;} @@ -54,15 +55,15 @@ type PMenu = ^TMenu; TMenu = class protected - Background: TMenuBackground; + Background: TMenuBackground; + + Interactions: array of TInteract; + SelInteraction: integer; - Interactions: array of TInteract; - SelInteraction: integer; + ButtonPos: integer; + Button: array of TButton; - ButtonPos: integer; - Button: array of TButton; - - SelectsS: array of TSelectSlide; + SelectsS: array of TSelectSlide; ButtonCollection: array of TButtonCollection; public Text: array of TText; @@ -72,6 +73,7 @@ type Fade: integer; // fade type ShowFinish: boolean; // true if there is no fade + RightMbESC: boolean; // true to simulate ESC keypress when RMB is pressed destructor Destroy; override; constructor Create; overload; virtual; @@ -80,10 +82,10 @@ type // interaction procedure AddInteraction(Typ, Num: integer); - procedure SetInteraction(Num: integer); + procedure SetInteraction(Num: integer); virtual; property Interaction: integer read SelInteraction write SetInteraction; - //Procedure Load BG, Texts, Statics and Button Collections from ThemeBasic + // procedure load bg, texts, statics and button collections from themebasic procedure LoadFromTheme(const ThemeBasic: TThemeBasic); procedure PrepareButtonCollections(const Collections: AThemeButtonCollection); @@ -109,7 +111,7 @@ type function AddText(X, Y, W: real; Style: integer; Size, ColR, ColG, ColB: real; Align: integer; const Text_: UTF8String; Reflection_: boolean; ReflectionSpacing_: real; Z : real): integer; overload; // button - Procedure SetButtonLength(Length: cardinal); //Function that Set Length of Button Array in one Step instead of register new Memory for every Button + procedure SetButtonLength(Length: cardinal); //Function that Set Length of Button Array in one Step instead of register new Memory for every Button function AddButton(ThemeButton: TThemeButton): integer; overload; function AddButton(X, Y, W, H: real; const Name: string): integer; overload; function AddButton(X, Y, W, H: real; const Name: string; Typ: TTextureType; Reflection: boolean): integer; overload; @@ -143,9 +145,10 @@ type function DrawFG: boolean; virtual; function Draw: boolean; virtual; function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown : boolean): boolean; virtual; - // FIXME: ParseMouse is not implemented in any subclass and not even used anywhere in the code - // -> do this before activation of this method - //function ParseMouse(Typ: integer; X: integer; Y: integer): boolean; virtual; abstract; + function ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; virtual; + function InRegion(X1, Y1, W, H, X, Y: real): boolean; + function InteractAt(X, Y: real): integer; + function CollectionAt(X, Y: real): integer; procedure onShow; virtual; procedure onShowFinish; virtual; procedure onHide; virtual; @@ -165,13 +168,16 @@ type end; const - pmMove = 1; - pmClick = 2; + MENU_MDOWN = 8; + MENU_MUP = 0; + + pmMove = 1; + pmClick = 2; pmUnClick = 3; - iButton = 0; // interaction type - iText = 2; - iSelectS = 3; + iButton = 0; // interaction type + iText = 2; + iSelectS = 3; iBCollectionChild = 5; // fBlack = 0; // fade type @@ -179,21 +185,22 @@ const implementation -uses UCommon, - ULog, - UMain, - UDrawTexture, - UGraphic, - UDisplay, - UCovers, - UTime, - USkins, - //Background types - UMenuBackgroundNone, - UMenuBackgroundColor, - UMenuBackgroundTexture, - UMenuBackgroundVideo, - UMenuBackgroundFade; +uses + UCommon, + UCovers, + UDisplay, + UDrawTexture, + UGraphic, + ULog, + UMain, + USkins, + UTime, + //Background types + UMenuBackgroundNone, + UMenuBackgroundColor, + UMenuBackgroundTexture, + UMenuBackgroundVideo, + UMenuBackgroundFade; destructor TMenu.Destroy; begin @@ -218,6 +225,8 @@ begin ButtonPos := -1; Background := nil; + + RightMbESC := true; end; { constructor TMenu.Create(Back: string); @@ -249,7 +258,7 @@ begin BackH := H; end; } -function RGBFloatToInt(R, G, B: Double): cardinal; +function RGBFloatToInt(R, G, B: double): cardinal; begin Result := (Trunc(255 * R) shl 16) or (Trunc(255 * G) shl 8) or @@ -288,8 +297,8 @@ begin begin Button[OldNum].Selected := false; - //Deselect Collection if Next Button is Not from Collection - if (NewTyp <> iButton) Or (Button[NewNum].Parent <> Button[OldNum].Parent) then + // deselect collection if next button is not from collection + if (NewTyp <> iButton) or (Button[NewNum].Parent <> Button[OldNum].Parent) then ButtonCollection[Button[OldNum].Parent-1].Selected := false; end; end; @@ -337,8 +346,9 @@ procedure TMenu.AddBackground(ThemedSettings: TThemeBackground); var FileExt: string; - Function IsInArray(const Piece: string; const A: array of string): boolean; - var I: integer; + function IsInArray(const Piece: string; const A: array of string): boolean; + var + I: integer; begin Result := false; @@ -350,7 +360,7 @@ procedure TMenu.AddBackground(ThemedSettings: TThemeBackground); end; end; - Function TryBGCreate(Typ: cMenuBackground): boolean; + function TryBGCreate(Typ: cMenuBackground): boolean; begin Result := true; @@ -372,7 +382,7 @@ begin Background := nil; end; - Case ThemedSettings.BGType of + case ThemedSettings.BGType of bgtAuto: begin //Automaticly choose one out of BGT_Texture, BGT_Video or BGT_Color if (Length(ThemedSettings.Tex) > 0) then @@ -489,7 +499,7 @@ end; //---------------------- procedure TMenu.AddButtonCollection(const ThemeCollection: TThemeButtonCollection; const Num: byte); var - BT, BTLen: integer; + BT, BTLen: integer; TempCol, TempDCol: cardinal; begin @@ -592,17 +602,25 @@ begin Result := AddStatic(X, Y, W, H, Name, TEXTURE_TYPE_PLAIN); end; -function TMenu.AddStatic(X, Y, W, H: real; ColR, ColG, ColB: real; const Name: string; Typ: TTextureType): integer; +function TMenu.AddStatic(X, Y, W, H: real; + ColR, ColG, ColB: real; + const Name: string; + Typ: TTextureType): integer; begin Result := AddStatic(X, Y, W, H, ColR, ColG, ColB, Name, Typ, $FFFFFF); end; -function TMenu.AddStatic(X, Y, W, H, Z: real; ColR, ColG, ColB: real; const Name: string; Typ: TTextureType): integer; +function TMenu.AddStatic(X, Y, W, H, Z: real; + ColR, ColG, ColB: real; + const Name: string; + Typ: TTextureType): integer; begin Result := AddStatic(X, Y, W, H, Z, ColR, ColG, ColB, Name, Typ, $FFFFFF); end; -function TMenu.AddStatic(X, Y, W, H: real; const Name: string; Typ: TTextureType): integer; +function TMenu.AddStatic(X, Y, W, H: real; + const Name: string; + Typ: TTextureType): integer; var StatNum: integer; begin @@ -620,17 +638,32 @@ begin Result := StatNum; end; -function TMenu.AddStatic(X, Y, W, H: real; ColR, ColG, ColB: real; const Name: string; Typ: TTextureType; Color: integer): integer; +function TMenu.AddStatic(X, Y, W, H: real; + ColR, ColG, ColB: real; + const Name: string; + Typ: TTextureType; + Color: integer): integer; begin Result := AddStatic(X, Y, W, H, 0, ColR, ColG, ColB, Name, Typ, Color); end; -function TMenu.AddStatic(X, Y, W, H, Z: real; ColR, ColG, ColB: real; const Name: string; Typ: TTextureType; Color: integer): integer; +function TMenu.AddStatic(X, Y, W, H, Z: real; + ColR, ColG, ColB: real; + const Name: string; + Typ: TTextureType; + Color: integer): integer; begin Result := AddStatic(X, Y, W, H, Z, ColR, ColG, ColB, 0, 0, 1, 1, Name, Typ, Color, false, 0); end; -function TMenu.AddStatic(X, Y, W, H, Z: real; ColR, ColG, ColB: real; TexX1, TexY1, TexX2, TexY2: real; const Name: string; Typ: TTextureType; Color: integer; Reflection: boolean; ReflectionSpacing: real): integer; +function TMenu.AddStatic(X, Y, W, H, Z: real; + ColR, ColG, ColB: real; + TexX1, TexY1, TexX2, TexY2: real; + const Name: string; + Typ: TTextureType; + Color: integer; + Reflection: boolean; + ReflectionSpacing: real): integer; var StatNum: integer; begin @@ -648,12 +681,22 @@ begin begin Static[StatNum] := TStatic.Create(Texture.GetTexture(Name, Typ, Color)); // new skin end; - + // configures static Static[StatNum].Texture.X := X; Static[StatNum].Texture.Y := Y; - Static[StatNum].Texture.W := W; - Static[StatNum].Texture.H := H; + + //Set height and width via sprite size if omitted + if(H = 0) then + Static[StatNum].Texture.H := Static[StatNum].Texture.H + else + Static[StatNum].Texture.H := H; + + if(W = 0) then + Static[StatNum].Texture.W := Static[StatNum].Texture.W + else + Static[StatNum].Texture.W := W; + Static[StatNum].Texture.Z := Z; if (Typ <> TEXTURE_TYPE_COLORIZED) then begin @@ -692,12 +735,22 @@ begin Result := TextNum; end; -function TMenu.AddText(X, Y: real; Style: integer; Size, ColR, ColG, ColB: real; const Text: UTF8String): integer; +function TMenu.AddText(X, Y: real; + Style: integer; + Size, ColR, ColG, ColB: real; + const Text: UTF8String): integer; begin Result := AddText(X, Y, 0, Style, Size, ColR, ColG, ColB, 0, Text, false, 0, 0); end; -function TMenu.AddText(X, Y, W: real; Style: integer; Size, ColR, ColG, ColB: real; Align: integer; const Text_: UTF8String; Reflection_: boolean; ReflectionSpacing_: real; Z : real): integer; +function TMenu.AddText(X, Y, W: real; + Style: integer; + Size, ColR, ColG, ColB: real; + Align: integer; + const Text_: UTF8String; + Reflection_: boolean; + ReflectionSpacing_: real; + Z : real): integer; var TextNum: integer; begin @@ -709,9 +762,9 @@ begin end; //Function that Set Length of Button boolean in one Step instead of register new Memory for every Button -Procedure TMenu.SetButtonLength(Length: cardinal); +procedure TMenu.SetButtonLength(Length: cardinal); begin - if (ButtonPos = -1) AND (Length > 0) then + if (ButtonPos = -1) and (Length > 0) then begin //Set Length of Button SetLength(Button, Length); @@ -767,10 +820,10 @@ begin ThemeButton.Text[BT].Text); end; - //BAutton Collection Mod + // bautton collection mod if (ThemeButton.Parent <> 0) then begin - //If Collection Exists then Change Interaction to Child Button + // if collection exists then change interaction to child button if (@ButtonCollection[ThemeButton.Parent-1] <> nil) then begin Interactions[High(Interactions)].Typ := iBCollectionChild; @@ -799,8 +852,10 @@ begin end; function TMenu.AddButton(X, Y, W, H, ColR, ColG, ColB, Int, DColR, DColG, DColB, DInt: real; - const Name: string; Typ: TTextureType; - Reflection: boolean; ReflectionSpacing, DeSelectReflectionSpacing: real): integer; + const Name: string; + Typ: TTextureType; + Reflection: boolean; + ReflectionSpacing, DeSelectReflectionSpacing: real): integer; begin // adds button //SetLength is used once to reduce Memory usement @@ -853,7 +908,7 @@ begin Button[Result].Reflectionspacing := ReflectionSpacing; Button[Result].DeSelectReflectionspacing := DeSelectReflectionSpacing; - //Button Collection Mod + // button collection mod Button[Result].Parent := 0; // adds interaction @@ -866,11 +921,10 @@ begin Setlength(Button, 0); end; -// Method to draw our TMenu and all his child buttons +// method to draw our tmenu and all his child buttons function TMenu.DrawBG: boolean; begin Background.Draw; - Result := true; end; @@ -918,9 +972,9 @@ end; } { -function TMenu.AddWidget(X, Y : UInt16; WidgetSrc : PSDL_Surface): Int16; +function TMenu.AddWidget(X, Y: UInt16; WidgetSrc: PSDL_Surface): Int16; var - WidgetNum : Int16; + WidgetNum: Int16; begin if (Assigned(WidgetSrc)) then begin @@ -944,9 +998,9 @@ end; } { -procedure TMenu.ClearWidgets(MinNumber : Int16); +procedure TMenu.ClearWidgets(MinNumber: Int16); var - J : Int16; + J: Int16; begin for J := MinNumber to (Length(WidgetsSrc) - 1) do begin @@ -989,9 +1043,10 @@ begin Int := Int - ceil(Length(Interactions) / 2); //Set Interaction - if ((Int < 0) or (Int > Length(Interactions) - 1)) - then Int := Interaction //nonvalid button, keep current one - else Interaction := Int; //select row above + if ((Int < 0) or (Int > Length(Interactions) - 1)) then + Int := Interaction // invalid button, keep current one + else + Interaction := Int; // select row above end; procedure TMenu.InteractNextRow; @@ -1003,9 +1058,10 @@ begin Int := Int + ceil(Length(Interactions) / 2); //Set Interaction - if ((Int < 0) or (Int > Length(Interactions) - 1)) - then Int := Interaction //nonvalid button, keep current one - else Interaction := Int; //select row above + if ((Int < 0) or (Int > Length(Interactions) - 1)) then + Int := Interaction // invalid button, keep current one + else + Interaction := Int; // select row above end; procedure TMenu.InteractNext; @@ -1019,7 +1075,8 @@ begin Int := (Int + 1) mod Length(Interactions); //If no Interaction is Selectable Simply Select Next - if (Int = Interaction) then Break; + if (Int = Interaction) then + Break; until IsSelectable(Int); @@ -1036,10 +1093,12 @@ begin // change interaction as long as it's needed repeat Int := Int - 1; - if Int = -1 then Int := High(Interactions); + if Int = -1 then + Int := High(Interactions); //If no Interaction is Selectable Simply Select Next - if (Int = Interaction) then Break; + if (Int = Interaction) then + Break; until IsSelectable(Int); //Set Interaction @@ -1064,7 +1123,8 @@ begin while (Again = true) do begin Num := SelInteraction - CustomSwitch; - if Num = -1 then Num := High(Interactions); + if Num = -1 then + Num := High(Interactions); Interaction := Num; Again := false; // reset, default to accept changing interaction @@ -1208,6 +1268,9 @@ begin SelectsS[High(SelectsS)].Texture.Z := ThemeSelectS.Z; SelectsS[High(SelectsS)].TextureSBG.Z := ThemeSelectS.Z; + SelectsS[High(SelectsS)].showArrows := ThemeSelectS.showArrows; + SelectsS[High(SelectsS)].oneItemOnly := ThemeSelectS.oneItemOnly; + //Generate Lines SelectsS[High(SelectsS)].GenLines; @@ -1250,9 +1313,21 @@ begin SelectsS[S].TextureSBG := Texture.GetTexture(SBGName, SBGTyp, RGBFloatToInt(SBGColR, SBGColG, SBGColB)) else SelectsS[S].TextureSBG := Texture.GetTexture(SBGName, SBGTyp); + + SelectsS[High(SelectsS)].Tex_SelectS_ArrowL := Tex_SelectS_ArrowL; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowL.X := X + W + SkipX; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowL.Y := Y; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowL.W := Tex_SelectS_ArrowL.W; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowL.H := Tex_SelectS_ArrowL.H; + + SelectsS[High(SelectsS)].Tex_SelectS_ArrowR := Tex_SelectS_ArrowR; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowR.X := X + W + SkipX + SBGW - Tex_SelectS_ArrowR.W; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowR.Y := Y; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowR.W := Tex_SelectS_ArrowR.W; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowR.H := Tex_SelectS_ArrowR.H; + SelectsS[S].TextureSBG.X := X + W + SkipX; SelectsS[S].TextureSBG.Y := Y; - //SelectsS[S].TextureSBG.W := 450; SelectsS[S].SBGW := SBGW; SelectsS[S].TextureSBG.H := H; SelectsS[S].SBGColR := SBGColR; @@ -1350,10 +1425,12 @@ begin SetLength(SelectsS[SelectNo].TextOptT, SO + 1); SelectsS[SelectNo].TextOptT[SO] := AddText; +{ + SelectsS[S].SelectedOption := SelectsS[S].SelectOptInt; // refresh - //SelectsS[S].SelectedOption := SelectsS[S].SelectOptInt; // refresh - - //if SO = Selects[S].PData^ then Selects[S].SelectedOption := SO; + if SO = Selects[S].PData^ then + Selects[S].SelectedOption := SO; +} end; procedure TMenu.UpdateSelectSlideOptions(ThemeSelectSlide: TThemeSelectSlide; SelectNum: integer; const Values: array of string; var Data: integer); @@ -1453,12 +1530,12 @@ begin end; end; end; - //interact Prev if there is Nothing to Change + // interact prev if there is nothing to change else begin InteractPrev; - //If ButtonCollection with more than 1 Entry then Select Last Entry - if (Button[Interactions[Interaction].Num].Parent <> 0) AND (ButtonCollection[Button[Interactions[Interaction].Num].Parent-1].CountChilds > 1) then + // if buttoncollection with more than 1 entry then select last entry + if (Button[Interactions[Interaction].Num].Parent <> 0) and (ButtonCollection[Button[Interactions[Interaction].Num].Parent-1].CountChilds > 1) then begin //Select Last Child for Num := High(Button) downto 1 do @@ -1527,10 +1604,120 @@ begin Result := true; end; +function TMenu.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; +var + nBut: integer; +begin + //default mouse parsing: clicking generates return keypress, + // mousewheel selects in select slide + //override ParseMouse to customize + Result := true; + + if RightMbESC and (MouseButton = SDL_BUTTON_RIGHT) and BtnDown then + begin + //if RightMbESC is set, send ESC keypress + Result:=ParseInput(SDLK_ESCAPE, #0, true); + end; + + nBut := InteractAt(X, Y); + if nBut >= 0 then + begin + //select on mouse-over + if nBut <> Interaction then + SetInteraction(nBut); + if (MouseButton = SDL_BUTTON_LEFT) and BtnDown then + begin + //click button + Result:=ParseInput(SDLK_RETURN, #0, true); + end; + if (Interactions[nBut].Typ = iSelectS) then + begin + //forward/backward in select slide with mousewheel + if (MouseButton = SDL_BUTTON_WHEELDOWN) and BtnDown then + begin + ParseInput(SDLK_RIGHT, #0, true); + end; + if (MouseButton = SDL_BUTTON_WHEELUP) and BtnDown then + begin + ParseInput(SDLK_LEFT, #0, true); + end; + end; + end + else + begin + nBut := CollectionAt(X, Y); + if nBut >= 0 then + begin + // if over button collection, select first child but don't allow click + nBut := ButtonCollection[nBut].FirstChild - 1; + if nBut <> Interaction then + SetInteraction(nBut); + end; + end; +end; + +function TMenu.InRegion(X1, Y1, W, H, X, Y: real): boolean; +begin + Result := false; + X1 := X1 * Screen.w / 800; + W := W * Screen.w / 800; + Y1 := Y1 * Screen.h / 600; + H := H * Screen.h / 600; + if (X >= X1) and (X <= X1 + W) and (Y >= Y1) and (Y <= Y1 + H) then + Result := true; +end; + +//takes x,y coordinates and returns the interaction number +//of the control at this position +function TMenu.InteractAt(X, Y: real): integer; +var + i, nBut: integer; +begin + Result := -1; + for i := Low(Interactions) to High(Interactions) do + begin + case Interactions[i].Typ of + iButton: if InRegion(Button[Interactions[i].Num].X, Button[Interactions[i].Num].Y, Button[Interactions[i].Num].W, Button[Interactions[i].Num].H, X, Y) and + Button[Interactions[i].Num].Visible then + begin + Result:=i; + exit; + end; + iBCollectionChild: if InRegion(Button[Interactions[i].Num].X, Button[Interactions[i].Num].Y, Button[Interactions[i].Num].W, Button[Interactions[i].Num].H, X, Y) then + begin + Result:=i; + exit; + end; + iSelectS: if InRegion(SelectSs[Interactions[i].Num].X, SelectSs[Interactions[i].Num].Y, SelectSs[Interactions[i].Num].W, SelectSs[Interactions[i].Num].H, X, Y) or + InRegion(SelectSs[Interactions[i].Num].TextureSBG.X, SelectSs[Interactions[i].Num].TextureSBG.Y, SelectSs[Interactions[i].Num].TextureSBG.W, SelectSs[Interactions[i].Num].TextureSBG.H, X, Y) then + begin + Result:=i; + exit; + end; + end; + end; +end; + +//takes x,y coordinates and returns the button collection id +function TMenu.CollectionAt(X, Y: real): integer; +var + i, nBut: integer; +begin + Result := -1; + for i:= Low(ButtonCollection) to High(ButtonCollection) do + begin + if InRegion(ButtonCollection[i].X, ButtonCollection[i].Y, ButtonCollection[i].W, ButtonCollection[i].H, X, Y) and + ButtonCollection[i].Visible then + begin + Result:=i; + exit; + end; + end; +end; + procedure TMenu.SetAnimationProgress(Progress: real); begin // nothing end; end. - diff --git a/unicode/src/menu/UMenuBackgroundFade.pas b/unicode/src/menu/UMenuBackgroundFade.pas index dc37da45..b61a4542 100644 --- a/unicode/src/menu/UMenuBackgroundFade.pas +++ b/unicode/src/menu/UMenuBackgroundFade.pas @@ -62,15 +62,17 @@ const FADEINTIME = 1500; //Time the bg fades in
implementation
-uses sdl,
- gl,
- glext,
- USkins,
- UCommon,
- UGraphic;
+uses
+ sdl,
+ gl,
+ glext,
+ USkins,
+ UCommon,
+ UGraphic;
constructor TMenuBackgroundFade.Create(const ThemedSettings: TThemeBackground);
-var texFilename: string;
+var
+ texFilename: string;
begin
inherited;
FadeTime := 0;
@@ -122,7 +124,7 @@ begin if (UseTexture) then
begin //Draw Texture to Screen
- If (ScreenAct = 1) then //Clear just once when in dual screen mode
+ if (ScreenAct = 1) then //Clear just once when in dual screen mode
glClear(GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
@@ -151,7 +153,7 @@ begin end
else
begin //Clear Screen w/ progress Alpha + Color
- If (ScreenAct = 1) then //Clear just once when in dual screen mode
+ if (ScreenAct = 1) then //Clear just once when in dual screen mode
glClear(GL_DEPTH_BUFFER_BIT);
glDisable(GL_TEXTURE_2D);
diff --git a/unicode/src/menu/UMenuButton.pas b/unicode/src/menu/UMenuButton.pas index c6ff8ab7..923f0b14 100644 --- a/unicode/src/menu/UMenuButton.pas +++ b/unicode/src/menu/UMenuButton.pas @@ -55,7 +55,6 @@ type PosX, PosY: real; - constructor Create(); overload; public Text: array of TText; @@ -113,6 +112,7 @@ type procedure Draw; virtual; + constructor Create(); overload; constructor Create(Textura: TTexture); overload; constructor Create(Textura, DSTexture: TTexture); overload; destructor Destroy; override; @@ -252,42 +252,6 @@ begin end; end; -constructor TButton.Create(); -begin - inherited Create; - // We initialize all to 0, nil or false - Visible := true; - SelectBool := false; - DeselectType := 0; - Selectable := true; - Reflection := false; - Colorized := false; - - SelectColR := 1; - SelectColG := 1; - SelectColB := 1; - SelectInt := 1; - SelectTInt := 1; - - DeselectColR := 1; - DeselectColG := 1; - DeselectColB := 1; - DeselectInt := 0.5; - DeselectTInt := 1; - - Fade := false; - FadeTex.TexNum := 0; - FadeProgress := 0; - FadeText := false; - SelectW := DeSelectW; - SelectH := DeSelectH; - - PosX := 0; - PosY := 0; - - Parent := 0; -end; - // ***** Public methods ****** // procedure TButton.Draw; @@ -571,6 +535,42 @@ begin inherited; end; +constructor TButton.Create(); +begin + inherited Create; + // We initialize all to 0, nil or false + Visible := true; + SelectBool := false; + DeselectType := 0; + Selectable := true; + Reflection := false; + Colorized := false; + + SelectColR := 1; + SelectColG := 1; + SelectColB := 1; + SelectInt := 1; + SelectTInt := 1; + + DeselectColR := 1; + DeselectColG := 1; + DeselectColB := 1; + DeselectInt := 0.5; + DeselectTInt := 1; + + Fade := false; + FadeTex.TexNum := 0; + FadeProgress := 0; + FadeText := false; + SelectW := DeSelectW; + SelectH := DeSelectH; + + PosX := 0; + PosY := 0; + + Parent := 0; +end; + constructor TButton.Create(Textura: TTexture); begin Create(); diff --git a/unicode/src/menu/UMenuButtonCollection.pas b/unicode/src/menu/UMenuButtonCollection.pas index c6c6dd81..8b7a1c3f 100644 --- a/unicode/src/menu/UMenuButtonCollection.pas +++ b/unicode/src/menu/UMenuButtonCollection.pas @@ -41,61 +41,61 @@ type //TButtonCollection //No Extra Attributes or Functions ATM //---------------- - AButton = Array of TButton; + AButton = array of TButton; PAButton = ^AButton; TButtonCollection = class(TButton) //num of the First Button, that can be Selected - FirstChild: Byte; - CountChilds: Byte; + FirstChild: byte; + CountChilds: byte; ScreenButton: PAButton; - procedure SetSelect(Value : Boolean); override; + procedure SetSelect(Value : boolean); override; procedure Draw; override; end; implementation -procedure TButtonCollection.SetSelect(Value : Boolean); -var I: Integer; +procedure TButtonCollection.SetSelect(Value : boolean); +var + Index: integer; begin inherited; //Set Visible for Every Button that is a Child of this ButtonCollection - if (Not Fade) then - For I := 0 to High(ScreenButton^) do - if (ScreenButton^[I].Parent = Parent) then - ScreenButton^[I].Visible := Value; + if (not Fade) then + for Index := 0 to High(ScreenButton^) do + if (ScreenButton^[Index].Parent = Parent) then + ScreenButton^[Index].Visible := Value; end; procedure TButtonCollection.Draw; -var I, J: Integer; +var + I, J: integer; begin inherited; //If fading is activated, Fade Child Buttons if (Fade) then begin - For I := 0 to High(ScreenButton^) do + for I := 0 to High(ScreenButton^) do if (ScreenButton^[I].Parent = Parent) then begin if (FadeProgress < 0.5) then begin ScreenButton^[I].Visible := SelectBool; - For J := 0 to High(ScreenButton^[I].Text) do + for J := 0 to High(ScreenButton^[I].Text) do ScreenButton^[I].Text[J].Visible := SelectBool; end else begin ScreenButton^[I].Texture.Alpha := (FadeProgress-0.666)*3; - For J := 0 to High(ScreenButton^[I].Text) do + for J := 0 to High(ScreenButton^[I].Text) do ScreenButton^[I].Text[J].Alpha := (FadeProgress-0.666)*3; end; end; end; end; - - end. diff --git a/unicode/src/menu/UMenuEqualizer.pas b/unicode/src/menu/UMenuEqualizer.pas index 6d77721c..8f57e44a 100644 --- a/unicode/src/menu/UMenuEqualizer.pas +++ b/unicode/src/menu/UMenuEqualizer.pas @@ -45,69 +45,71 @@ type Tms_Equalizer = class(TObject) private FFTData: TFFTData; // moved here to avoid stack overflows - BandData: array of Byte; - RefreshTime: Cardinal; + BandData: array of byte; + RefreshTime: cardinal; Source: IAudioPlayback; - Procedure Analyse; + procedure Analyse; public - X: Integer; - Y: Integer; - Z: Real; + X: integer; + Y: integer; + Z: real; - W: Integer; - H: Integer; - Space: Integer; + W: integer; + H: integer; + Space: integer; - Visible: Boolean; - Alpha: real; - Color: TRGB; + Visible: boolean; + Alpha: real; + Color: TRGB; - Direction: Boolean; + Direction: boolean; + BandLength: integer; - BandLength: Integer; - - Reflection: boolean; - Reflectionspacing: Real; + Reflection: boolean; + Reflectionspacing: real; constructor Create(Source: IAudioPlayback; mySkin: TThemeEqualizer); procedure Draw; - - Procedure SetBands(Value: Byte); - Function GetBands: Byte; - Property Bands: Byte read GetBands write SetBands; + procedure SetBands(Value: byte); + function GetBands: byte; + property Bands: byte read GetBands write SetBands; procedure SetSource(newSource: IAudioPlayback); end; implementation -uses math, SDL, gl, glext; - +uses + math, + SDL, + gl, + glext; constructor Tms_Equalizer.Create(Source: IAudioPlayback; mySkin: TThemeEqualizer); -var I: Integer; +var + I: integer; begin - If (Source <> nil) then + if (Source <> nil) then begin - X := mySkin.X; - Y := mySkin.Y; - W := mySkin.W; - H := mySkin.H; - Z := mySkin.Z; + X := mySkin.X; + Y := mySkin.Y; + W := mySkin.W; + H := mySkin.H; + Z := mySkin.Z; - Space := mySkin.Space; + Space := mySkin.Space; - Visible := mySkin.Visible; - Alpha := mySkin.Alpha; - Color.R := mySkin.ColR; - Color.G := mySkin.ColG; - Color.B := mySkin.ColB; + Visible := mySkin.Visible; + Alpha := mySkin.Alpha; + Color.R := mySkin.ColR; + Color.G := mySkin.ColG; + Color.B := mySkin.ColB; - Direction := mySkin.Direction; - Bands := mySkin.Bands; - BandLength := mySkin.Length; + Direction := mySkin.Direction; + Bands := mySkin.Bands; + BandLength := mySkin.Length; Reflection := mySkin.Reflection; Reflectionspacing := mySkin.Reflectionspacing; @@ -116,31 +118,31 @@ begin //Check if Visible - If (Bands <= 0) OR - (BandLength <= 0) OR - (W <= 0) OR - (H <= 0) OR + if (Bands <= 0) or + (BandLength <= 0) or + (W <= 0) or + (H <= 0) or (Alpha <= 0) then - Visible := False; + Visible := false; //ClearArray - For I := low(BandData) to high(BandData) do + for I := low(BandData) to high(BandData) do BandData[I] := 3; end else - Visible := False; + Visible := false; end; //-------- // evaluate FFT-Data //-------- -Procedure Tms_Equalizer.Analyse; - var - I: Integer; - ChansPerBand: byte; // channels per band - MaxChannel: Integer; - Pos: Real; - CurBand: Integer; +procedure Tms_Equalizer.Analyse; +var + I: integer; + ChansPerBand: byte; // channels per band + MaxChannel: integer; + Pos: real; + CurBand: integer; begin Source.GetFFTData(FFTData); @@ -188,25 +190,26 @@ end; // Draw SpectrumAnalyser, Call Analyse //-------- procedure Tms_Equalizer.Draw; - var - CurTime: Cardinal; - PosX, PosY: Real; - I, J: Integer; - Diff: Real; +var + CurTime: cardinal; + PosX, PosY: real; + I, J: integer; + Diff: real; - Function GetAlpha(Diff: Single): Single; + function GetAlpha(Diff: single): single; begin - If Direction then - Result := (Alpha * 0.6) *(0.5 - Diff/(BandLength * (H + Space))) + if Direction then + Result := (Alpha * 0.6) * (0.5 - Diff/(BandLength * (H + Space))) else - Result := (Alpha * 0.6) *(0.5 - Diff/(Bands * (H + Space))); + Result := (Alpha * 0.6) * (0.5 - Diff/(Bands * (H + Space))); end; + begin - If (Visible) AND not (AudioPlayback.Finished) then + if (Visible) and not (AudioPlayback.Finished) then begin //Call Analyse if necessary CurTime := SDL_GetTicks(); - If (CurTime > RefreshTime) then + if (CurTime > RefreshTime) then begin Analyse; @@ -244,12 +247,12 @@ begin glVertex3f(PosX+W, PosY, Z); glEnd; - If (Reflection) AND (J <= BandLength div 2) then + if (Reflection) and (J <= BandLength div 2) then begin Diff := (Y-PosY) + H; //Draw Reflection - If Direction then + if Direction then begin glBegin(GL_QUADS); glColorRGB(Color, GetAlpha(Diff)); @@ -298,22 +301,20 @@ begin end; end; -Procedure Tms_Equalizer.SetBands(Value: Byte); +procedure Tms_Equalizer.SetBands(Value: byte); begin SetLength(BandData, Value); end; -Function Tms_Equalizer.GetBands: Byte; +function Tms_Equalizer.GetBands: byte; begin Result := Length(BandData); end; -Procedure Tms_Equalizer.SetSource(newSource: IAudioPlayback); +procedure Tms_Equalizer.SetSource(newSource: IAudioPlayback); begin - If (newSource <> nil) then + if (newSource <> nil) then Source := newSource; end; - - end.
\ No newline at end of file diff --git a/unicode/src/menu/UMenuInteract.pas b/unicode/src/menu/UMenuInteract.pas index 4c2d4e86..beb6bcef 100644 --- a/unicode/src/menu/UMenuInteract.pas +++ b/unicode/src/menu/UMenuInteract.pas @@ -35,8 +35,8 @@ interface type TInteract = record // for moving thru menu - Typ: integer; // 0 - button, 1 - select, 2 - Text, 3 - Select SLide, 5 - ButtonCollection Child - Num: integer; // number of this item in proper list like buttons, selects + Typ: integer; // 0 - button, 1 - select, 2 - Text, 3 - Select SLide, 5 - ButtonCollection Child + Num: integer; // number of this item in proper list like buttons, selects end; implementation diff --git a/unicode/src/menu/UMenuSelectSlide.pas b/unicode/src/menu/UMenuSelectSlide.pas index 1a0fa725..f9f6bbae 100644 --- a/unicode/src/menu/UMenuSelectSlide.pas +++ b/unicode/src/menu/UMenuSelectSlide.pas @@ -34,10 +34,10 @@ interface {$I switches.inc} uses - TextGL, - UTexture, gl, - UMenuText; + TextGL, + UMenuText, + UTexture; type PSelectSlide = ^TSelectSlide; @@ -54,17 +54,23 @@ type TextureSBG: TTexture; // Background Selections Texture // TextureS: array of TTexture; // Selections Texture (not used) -// TextureArrowL: TTexture; // Texture for left arrow (not used yet) -// TextureArrowR: TTexture; // Texture for right arrow (not used yet) + Tex_SelectS_ArrowL: TTexture; // Texture for left arrow + Tex_SelectS_ArrowR: TTexture; // Texture for right arrow SelectOptInt: integer; PData: ^integer; //For automatically Setting LineCount - Lines: Byte; + Lines: byte; + + //Arrows on/off + showArrows: boolean; //default is false + + //whether to show one item or all that fit into the select + oneItemOnly: boolean; //default is false //Visibility - Visible: Boolean; + Visible: boolean; // for selection and deselection // main static @@ -121,7 +127,7 @@ type // procedures procedure SetSelect(Value: boolean); - property Selected: Boolean read SelectBool write SetSelect; + property Selected: boolean read SelectBool write SetSelect; procedure SetSelectOpt(Value: integer); property SelectedOption: integer read SelectOptInt write SetSelectOpt; procedure Draw; @@ -132,7 +138,12 @@ type end; implementation -uses UDrawTexture, math, ULog, SysUtils; + +uses + math, + SysUtils, + UDrawTexture, + ULog; // ------------ Select constructor TSelectSlide.Create; @@ -141,24 +152,17 @@ begin Text := TText.Create; SetLength(TextOpt, 1); TextOpt[0] := TText.Create; - - //Set Standard Width for Selections Background - SBGW := 450; - - Visible := True; - {SetLength(TextOpt, 3); - TextOpt[0] := TText.Create; - TextOpt[1] := TText.Create; - TextOpt[2] := TText.Create;} + Visible := true; end; procedure TSelectSlide.SetSelect(Value: boolean); {var - SO: integer; - I: integer;} + SO: integer; + I: integer;} begin SelectBool := Value; - if Value then begin + if Value then + begin Texture.ColR := ColR; Texture.ColG := ColG; Texture.ColB := ColB; @@ -173,15 +177,9 @@ begin TextureSBG.ColG := SBGColG; TextureSBG.ColB := SBGColB; TextureSBG.Int := SBGInt; - -{ for I := 0 to High(TextOpt) do begin - TextOpt[I].ColR := STColR; - TextOpt[I].ColG := STColG; - TextOpt[I].ColB := STColB; - TextOpt[I].Int := STInt; - end;} - - end else begin + end + else + begin Texture.ColR := DColR; Texture.ColG := DColG; Texture.ColB := DColB; @@ -196,185 +194,215 @@ begin TextureSBG.ColG := SBGDColG; TextureSBG.ColB := SBGDColB; TextureSBG.Int := SBGDInt; - -{ for I := 0 to High(TextOpt) do begin - TextOpt[I].ColR := STDColR; - TextOpt[I].ColG := STDColG; - TextOpt[I].ColB := STDColB; - TextOpt[I].Int := STDInt; - end;} end; end; procedure TSelectSlide.SetSelectOpt(Value: integer); var - SO: integer; - HalfL: integer; - HalfR: integer; + SO: integer; + HalfL: integer; + HalfR: integer; -procedure DoSelection(Sel: Cardinal); - var I: Integer; + procedure DoSelection(Sel: cardinal); + var + I: integer; begin - for I := low(TextOpt) to high(TextOpt) do + for I := Low(TextOpt) to High(TextOpt) do begin TextOpt[I].ColR := STDColR; TextOpt[I].ColG := STDColG; TextOpt[I].ColB := STDColB; TextOpt[I].Int := STDInt; end; - if (integer(Sel) <= high(TextOpt)) then + + if (integer(Sel) <= High(TextOpt)) then begin TextOpt[Sel].ColR := STColR; TextOpt[Sel].ColG := STColG; TextOpt[Sel].ColB := STColB; TextOpt[Sel].Int := STInt; + end; end; - end; + begin SelectOptInt := Value; PData^ := Value; -// SetSelect(true); // reset all colors - if (Length(TextOpt)>0) AND (Length(TextOptT)>0) then + if (Length(TextOpt) > 0) and (Length(TextOptT) > 0) then begin + //First option selected if (Value <= 0) then - begin //First Option Selected + begin Value := 0; - for SO := low (TextOpt) to high(TextOpt) do + Tex_SelectS_ArrowL.alpha := 0; + Tex_SelectS_ArrowR.alpha := 1; + + for SO := Low(TextOpt) to High(TextOpt) do begin - TextOpt[SO].Text := TextOptT[SO]; + TextOpt[SO].Text := TextOptT[SO]; end; DoSelection(0); end - else if (Value >= high(TextOptT)) then - begin //Last Option Selected - Value := high(TextOptT); - for SO := high(TextOpt) downto low (TextOpt) do + //Last option selected + else if (Value >= High(TextOptT)) then + begin + Value := High(TextOptT); + + Tex_SelectS_ArrowL.alpha := 1; + Tex_SelectS_ArrowR.alpha := 0; + + for SO := High(TextOpt) downto Low(TextOpt) do begin - TextOpt[SO].Text := TextOptT[high(TextOptT)-(Lines-SO-1)]; + TextOpt[SO].Text := TextOptT[High(TextOptT) - (Lines - SO - 1)]; end; - DoSelection(Lines-1); + DoSelection(Lines - 1); end + + //in between first and last else begin - HalfL := Ceil((Lines-1)/2); - HalfR := Lines-1-HalfL; - - if (Value <= HalfL) then - begin //Selected Option is near to the left side - {HalfL := Value; - HalfR := Lines-1-HalfL;} - //Change Texts - for SO := low (TextOpt) to high(TextOpt) do - begin - TextOpt[SO].Text := TextOptT[SO]; - end; + Tex_SelectS_ArrowL.alpha := 1; + Tex_SelectS_ArrowR.alpha := 1; - DoSelection(Value); - end - else if (Value > High(TextOptT)-HalfR) then - begin //Selected is too near to the right border - HalfR := high(TextOptT) - Value; - HalfL := Lines-1-HalfR; - //Change Texts - for SO := high(TextOpt) downto low (TextOpt) do + HalfL := Ceil((Lines - 1) / 2); + HalfR := Lines - 1 - HalfL; + + //Selected option is near to the left side + if (Value <= HalfL) then begin - TextOpt[SO].Text := TextOptT[high(TextOptT)-(Lines-SO-1)]; - end; + //Change texts + for SO := Low(TextOpt) to High(TextOpt) do + begin + TextOpt[SO].Text := TextOptT[SO]; + end; - DoSelection (HalfL); - end - else - begin - //Change Texts - for SO := low (TextOpt) to high(TextOpt) do + DoSelection(Value); + end + + //Selected option is near to the right side + else if (Value > High(TextOptT) - HalfR) then begin - TextOpt[SO].Text := TextOptT[Value - HalfL + SO]; - end; + HalfR := High(TextOptT) - Value; + HalfL := Lines - 1 - HalfR; + //Change texts + for SO := High(TextOpt) downto Low(TextOpt) do + begin + TextOpt[SO].Text := TextOptT[High(TextOptT) - (Lines - SO - 1)]; + end; - DoSelection(HalfL); - end; + DoSelection (HalfL); + end - end; + else + begin + //Change Texts + for SO := Low(TextOpt) to High(TextOpt) do + begin + TextOpt[SO].Text := TextOptT[Value - HalfL + SO]; + end; + DoSelection(HalfL); + end; + end; end; - end; procedure TSelectSlide.Draw; var - SO: integer; + SO: integer; begin if Visible then begin DrawTexture(Texture); DrawTexture(TextureSBG); + if showArrows then + begin + DrawTexture(Tex_SelectS_ArrowL); + DrawTexture(Tex_SelectS_ArrowR); + end; + Text.Draw; - for SO := low(TextOpt) to high(TextOpt) do + for SO := Low(TextOpt) to High(TextOpt) do TextOpt[SO].Draw; end; end; procedure TSelectSlide.GenLines; var -maxlength: Real; -I: Integer; + maxlength: real; + I: integer; begin SetFontStyle(0{Text.Style}); SetFontSize(Text.Size); maxlength := 0; - for I := low(TextOptT) to high (TextOptT) do + for I := Low(TextOptT) to High(TextOptT) do begin if (glTextWidth(TextOptT[I]) > maxlength) then maxlength := glTextWidth(TextOptT[I]); end; - Lines := floor((TextureSBG.W-40) / (maxlength+7)); - if (Lines > Length(TextOptT)) then - Lines := Length(TextOptT); - if (Lines <= 0) then + if (oneItemOnly = false) then + begin + //show all items + Lines := floor((TextureSBG.W-40) / (maxlength+7)); + if (Lines > Length(TextOptT)) then + Lines := Length(TextOptT); + + if (Lines <= 0) then + Lines := 1; + end + else + begin + //show one item only Lines := 1; + end; //Free old Space used by Texts - For I := low(TextOpt) to high(TextOpt) do + for I := Low(TextOpt) to High(TextOpt) do TextOpt[I].Free; setLength (TextOpt, Lines); - for I := low(TextOpt) to high(TextOpt) do - begin - TextOpt[I] := TText.Create; - TextOpt[I].Size := Text.Size; - //TextOpt[I].Align := 1; - TextOpt[I].Align := 0; - TextOpt[I].Visible := True; - - TextOpt[I].ColR := STDColR; - TextOpt[I].ColG := STDColG; - TextOpt[I].ColB := STDColB; - TextOpt[I].Int := STDInt; + for I := Low(TextOpt) to High(TextOpt) do + begin + TextOpt[I] := TText.Create; + TextOpt[I].Size := Text.Size; + //TextOpt[I].Align := 1; + TextOpt[I].Align := 0; + TextOpt[I].Visible := true; + + TextOpt[I].ColR := STDColR; + TextOpt[I].ColG := STDColG; + TextOpt[I].ColB := STDColB; + TextOpt[I].Int := STDInt; + + //Generate Positions + //TextOpt[I].X := TextureSBG.X + 20 + (TextureSBG.W / Lines) * (I + 0.5); + if (I <> High(TextOpt)) or (High(TextOpt) = 0) or (Length(TextOptT) = Lines) then + TextOpt[I].X := TextureSBG.X + 20 + (TextureSBG.W / Lines) * I + else + TextOpt[I].X := TextureSBG.X + TextureSBG.W - maxlength; - //Generate Positions - //TextOpt[I].X := TextureSBG.X + 20 + (TextureSBG.W / Lines) * (I + 0.5); - if (I <> High(TextOpt)) OR (High(TextOpt) = 0) OR (Length(TextOptT) = Lines) then - TextOpt[I].X := TextureSBG.X + 20 + (TextureSBG.W / Lines) * I - else - TextOpt[I].X := TextureSBG.X + TextureSBG.W - maxlength; + TextOpt[I].Y := TextureSBG.Y + (TextureSBG.H - Text.Size) / 2; - TextOpt[I].Y := TextureSBG.Y + (TextureSBG.H - Text.Size) / 2; + //Better Look with 2 Options + if (Lines = 2) and (Length(TextOptT) = 2) then + TextOpt[I].X := TextureSBG.X + 20 + (TextureSBG.W -40 - glTextWidth(TextOptT[1])) * I; - //Better Look with 2 Options - if (Lines=2) AND (Length(TextOptT)= 2) then - TextOpt[I].X := TextureSBG.X + 20 + (TextureSBG.W -40 - glTextWidth(TextOptT[1])) * I; + if (Lines = 1) then + begin + TextOpt[I].Align := 1; //center text + TextOpt[I].X := TextureSBG.X + (TextureSBG.W / 2); end; + end; end; end. diff --git a/unicode/src/menu/UMenuStatic.pas b/unicode/src/menu/UMenuStatic.pas index 9a10fade..72f4eb36 100644 --- a/unicode/src/menu/UMenuStatic.pas +++ b/unicode/src/menu/UMenuStatic.pas @@ -40,19 +40,20 @@ uses type TStatic = class public - Texture: TTexture; // Button Screen position and size - Visible: boolean; + Texture: TTexture; // Button Screen position and size + Visible: boolean; //Reflection Mod - Reflection: boolean; - Reflectionspacing: Real; + Reflection: boolean; + Reflectionspacing: real; procedure Draw; constructor Create(Textura: TTexture); overload; end; implementation -uses UDrawTexture; +uses + UDrawTexture; procedure TStatic.Draw; begin diff --git a/unicode/src/menu/UMenuText.pas b/unicode/src/menu/UMenuText.pas index 87f9ce54..d3bd213e 100644 --- a/unicode/src/menu/UMenuText.pas +++ b/unicode/src/menu/UMenuText.pas @@ -34,29 +34,29 @@ interface {$I switches.inc} uses - TextGL, - UTexture, - gl, math, SysUtils, - SDL; + gl, + SDL, + TextGL, + UTexture; type TText = class private - SelectBool: boolean; - TextString: UTF8String; - TextTiles: array of UTF8String; + SelectBool: boolean; + TextString: UTF8String; + TextTiles: array of UTF8String; - STicks: Cardinal; - SelectBlink: boolean; + STicks: cardinal; + SelectBlink: boolean; public X: real; Y: real; Z: real; - MoveX: real; //Some Modifier for X - Position that don't affect the real Y - MoveY: real; //Some Modifier for Y - Position that don't affect the real Y - W: real; //text wider than W is broken + MoveX: real; // some modifier for x - position that don't affect the real Y + MoveY: real; // some modifier for y - position that don't affect the real Y + W: real; // text wider than W is broken // H: real; Size: real; ColR: real; @@ -64,13 +64,13 @@ type ColB: real; Alpha: real; Int: real; - Style: integer; - Visible: boolean; - Align: integer; // 0 = left, 1 = center, 2 = right + Style: integer; + Visible: boolean; + Align: integer; // 0 = left, 1 = center, 2 = right - //Reflection - Reflection: boolean; - ReflectionSpacing: real; + // reflection + Reflection: boolean; + ReflectionSpacing: real; procedure SetSelect(Value: boolean); property Selected: boolean read SelectBool write SetSelect; @@ -78,7 +78,7 @@ type procedure SetText(Value: UTF8String); property Text: UTF8String read TextString write SetText; - procedure DeleteLastLetter; //Procedure to Delete Last Letter + procedure DeleteLastLetter; //< Deletes the rightmost letter procedure Draw; constructor Create; overload; @@ -97,35 +97,36 @@ procedure TText.SetSelect(Value: boolean); begin SelectBool := Value; - //Set Cursor Visible - SelectBlink := True; + // set cursor visible + SelectBlink := true; STicks := SDL_GetTicks() div 550; end; procedure TText.SetText(Value: UTF8String); var - NextPos: Cardinal; //NextPos of a Space etc. - LastPos: Cardinal; //LastPos " - LastBreak: Cardinal; //Last Break - isBreak: boolean; //True if the Break is not Caused because the Text is out of the area - FirstWord: Word; //Is First Word after Break? - Len: Word; //Length of the Tiles Array + NextPos: cardinal; // next pos of a space etc. + LastPos: cardinal; // last pos " + LastBreak: cardinal; // last break + isBreak: boolean; // true if the break is not caused because the text is out of the area + FirstWord: word; // is first word after break? + Len: word; // length of the tiles array function GetNextPos: boolean; var - T1, {T2,} T3: Cardinal; + T1, {T2,} T3: cardinal; begin LastPos := NextPos; - //Next Space (If Width is given) + // next space (if width is given) if (W > 0) then T1 := PosEx(' ', Value, LastPos + 1) - else T1 := Length(Value); + else + T1 := Length(Value); - {//Next - + {// next - T2 := PosEx('-', Value, LastPos + 1);} - //Next Break + // next break T3 := PosEx('\n', Value, LastPos + 1); if T1 = 0 then @@ -135,19 +136,19 @@ var if T3 = 0 then T3 := Length(Value); - //Get Nearest Pos + // get nearest pos NextPos := min(T1, T3{min(T2, T3)}); - if (LastPos = Length(Value)) then + if (LastPos = cardinal(Length(Value))) then NextPos := 0; - isBreak := (NextPos = T3) AND (NextPos <> Length(Value)); + isBreak := (NextPos = T3) and (NextPos <> cardinal(Length(Value))); Result := (NextPos <> 0); end; - procedure AddBreak(const From, bTo: Cardinal); + procedure AddBreak(const From, bTo: cardinal); begin - if (isBreak) OR (bTo - From >= 1) then + if (isBreak) or (bTo - From >= 1) then begin Inc(Len); SetLength (TextTiles, Len); @@ -162,14 +163,14 @@ var end; begin - //Set TExtstring + // set TextString TextString := Value; - //Set Cursor Visible - SelectBlink := True; + // set cursor visible + SelectBlink := true; STicks := SDL_GetTicks() div 550; - //Exit if there is no Need to Create Tiles + // exit if there is no need to create tiles if (W <= 0) and (Pos('\n', Value) = 0) then begin SetLength (TextTiles, 1); @@ -177,12 +178,12 @@ begin Exit; end; - //Create Tiles - //Reset Text Array + // create tiles + // reset text array SetLength (TextTiles, 0); Len := 0; - //Reset Counter Vars + // reset counter vars LastPos := 1; NextPos := 1; LastBreak := 1; @@ -190,57 +191,57 @@ begin if (W > 0) then begin - //Set Font Properties + // set font properties SetFontStyle(Style); SetFontSize(Size); end; - //go Through Text + // go through text while (GetNextPos) do begin - //Break in Text + // break in text if isBreak then begin - //Look for Break before the Break + // look for break before the break if (glTextWidth(Copy(Value, LastBreak, NextPos - LastBreak + 1)) > W) AND (NextPos-LastPos > 1) then begin - isBreak := False; - //Not the First word after Break, so we don't have to break within a word + isBreak := false; + // not the first word after break, so we don't have to break within a word if (FirstWord > 1) then begin - //Add Break before actual Position, because there the Text fits the Area + // add break before actual position, because there the text fits the area AddBreak(LastBreak, LastPos); end - else //First Word after Break Break within the Word + else // first word after break break within the word begin - //ToDo - //AddBreak(LastBreak, LastBreak + 155); + // to do + // AddBreak(LastBreak, LastBreak + 155); end; end; - isBreak := True; - //Add Break from Text + isBreak := true; + // add break from text AddBreak(LastBreak, NextPos); end - //Text comes out of the Text Area -> CreateBreak + // text comes out of the text area -> createbreak else if (glTextWidth(Copy(Value, LastBreak, NextPos - LastBreak + 1)) > W) then begin - //Not the First word after Break, so we don't have to break within a word + // not the first word after break, so we don't have to break within a word if (FirstWord > 1) then begin - //Add Break before actual Position, because there the Text fits the Area + // add break before actual position, because there the text fits the area AddBreak(LastBreak, LastPos); end - else //First Word after Break -> Break within the Word + else // first word after break -> break within the word begin - //ToDo - //AddBreak(LastBreak, LastBreak + 155); + // to do + // AddBreak(LastBreak, LastBreak + 155); end; end; //end; Inc(FirstWord) end; - //Add Ending + // add ending AddBreak(LastBreak, Length(Value)+1); end; @@ -262,33 +263,34 @@ var X2, Y2: real; Text2: UTF8String; I: integer; + Ticks: cardinal; begin if Visible then begin SetFontStyle(Style); SetFontSize(Size); - SetFontItalic(False); + SetFontItalic(false); glColor4f(ColR*Int, ColG*Int, ColB*Int, Alpha); - //Reflection - if Reflection = true then + // reflection + if Reflection then SetFontReflection(true, ReflectionSpacing) else SetFontReflection(false,0); - //if selected set blink... + // if selected set blink... if SelectBool then begin - I := SDL_GetTicks() div 550; - if I <> STicks then - begin //Change Visability - STicks := I; + Ticks := SDL_GetTicks() div 550; + if Ticks <> STicks then + begin // change visability + STicks := Ticks; SelectBlink := Not SelectBlink; end; end; - {if (False) then //no width set draw as one long string + {if (false) then // no width set draw as one long string begin if not (SelectBool AND SelectBlink) then Text2 := Text @@ -307,20 +309,20 @@ begin end else begin} - //now use allways: - //draw text as many strings + // now use always: + // draw text as many strings Y2 := Y + MoveY; - for I := 0 to high(TextTiles) do + for I := 0 to High(TextTiles) do begin - if (not (SelectBool and SelectBlink)) or (I <> high(TextTiles)) then + if (not (SelectBool and SelectBlink)) or (I <> High(TextTiles)) then Text2 := TextTiles[I] else Text2 := TextTiles[I] + '|'; case Align of - 0: X2 := X + MoveX; - 1: X2 := X + MoveX - glTextWidth(Text2)/2; - 2: X2 := X + MoveX - glTextWidth(Text2); + 1: X2 := X + MoveX - glTextWidth(Text2)/2; { centered } + 2: X2 := X + MoveX - glTextWidth(Text2); { right aligned } + else X2 := X + MoveX; { left aligned (default) } end; SetFontPos(X2, Y2); @@ -353,7 +355,14 @@ begin Create(X, Y, 0, 0, 30, 0, 0, 0, 0, Text, false, 0, 0); end; -constructor TText.Create(ParX, ParY, ParW: real; ParStyle: integer; ParSize, ParColR, ParColG, ParColB: real; ParAlign: integer; const ParText: UTF8String; ParReflection: boolean; ParReflectionSpacing: real; ParZ:real); +constructor TText.Create(ParX, ParY, ParW: real; + ParStyle: integer; + ParSize, ParColR, ParColG, ParColB: real; + ParAlign: integer; + const ParText: UTF8String; + ParReflection: boolean; + ParReflectionSpacing: real; + ParZ: real); begin inherited Create; Alpha := 1; @@ -371,8 +380,8 @@ begin Align := ParAlign; SelectBool := false; Visible := true; - Reflection:= ParReflection; - ReflectionSpacing:= ParReflectionSpacing; + Reflection := ParReflection; + ReflectionSpacing := ParReflectionSpacing; end; end. diff --git a/unicode/src/screens/UScreenCredits.pas b/unicode/src/screens/UScreenCredits.pas index 25fa96df..cff83d70 100644 --- a/unicode/src/screens/UScreenCredits.pas +++ b/unicode/src/screens/UScreenCredits.pas @@ -34,30 +34,30 @@ interface {$I switches.inc} uses - SysUtils, - UMenu, - SDL, - SDL_Image, - UDisplay, - UTexture, - gl, - UMusic, - UFiles, - UThemes, - UGraphicClasses; + SysUtils, + UMenu, + SDL, + SDL_Image, + UDisplay, + UTexture, + gl, + UMusic, + UFiles, + UThemes, + UGraphicClasses; type - TCreditsStages=(InitialDelay,Intro,MainPart,Outro); + TCreditsStages=(InitialDelay, Intro, MainPart, Outro); TScreenCredits = class(TMenu) public - Credits_X: Real; - Credits_Time: Cardinal; - Credits_Alpha: Cardinal; - CTime: Cardinal; - CTime_hold: Cardinal; - ESC_Alpha: Integer; + Credits_X: real; + Credits_Time: cardinal; + Credits_Alpha: cardinal; + CTime: cardinal; + CTime_hold: cardinal; + ESC_Alpha: integer; credits_entry: TTexture; credits_entry_dx: TTexture; @@ -89,16 +89,16 @@ type deluxe_slidein: cardinal; - CurrentScrollText: String; - NextScrollUpdate: Real; - EndofLastScrollingPart: Cardinal; - CurrentScrollStart, CurrentScrollEnd: Integer; + CurrentScrollText: string; + NextScrollUpdate: real; + EndofLastScrollingPart: cardinal; + CurrentScrollStart, CurrentScrollEnd: integer; CRDTS_Stage: TCreditsStages; - Fadeout: boolean; + Fadeout: boolean; constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; function Draw: boolean; override; procedure onShow; override; procedure onHide; override; @@ -108,12 +108,12 @@ type const Funky_Text: string = - 'Grandma Deluxe has arrived! Thanks to Corvus5 for the massive work on UltraStar, Wome for the nice tune you´re hearing, '+ - 'all the people who put massive effort and work in new songs (don´t forget UltraStar w/o songs would be nothing), ppl from '+ + 'Grandma Deluxe has arrived! Thanks to Corvus5 for the massive work on UltraStar, Wome for the nice tune you are hearing, '+ + 'all the people who put massive effort and work in new songs (do not forget UltraStar w/o songs would be nothing), ppl from '+ 'irc helping us - eBandit and Gabari, scene ppl who really helped instead of compiling and running away. Greetings to DennisTheMenace for betatesting, '+ 'Demoscene.tv, pouet.net, KakiArts, Sourceforge,..'; - CRDTS_BG_FILE = 'credits_v5_bg.png'; + CRDTS_BG_FILE = 'credits_v5_bg.png'; CRDTS_OVL_FILE = 'credits_v5_overlay.png'; CRDTS_blindguard_FILE = 'names_blindguard.png'; CRDTS_blindy_FILE = 'names_blindy.png'; @@ -137,7 +137,7 @@ const OUTRO_ESC_FILE = 'outro-esc.png'; OUTRO_EXD_FILE = 'outro-exit-dark.png'; - Timings: array[0..21] of Cardinal=( + Timings: array[0..21] of cardinal=( 20, // 0 Delay before Start 149, // 1 End first Intro Zoom @@ -178,10 +178,10 @@ uses UCommon, UPath; -function TScreenCredits.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenCredits.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down case PressedKey of @@ -191,15 +191,15 @@ begin FadeTo(@ScreenMain); AudioPlayback.PlaySound(SoundLib.Back); end; - { +{ SDLK_SPACE: begin setlength(CTime_hold,length(CTime_hold)+1); CTime_hold[high(CTime_hold)]:=CTime; end; - } - end;//esac - end; //fi +} + end; // esac + end; // fi end; constructor TScreenCredits.Create; @@ -243,22 +243,22 @@ end; function TScreenCredits.Draw: boolean; begin DrawCredits; - Draw:=true; + Draw := true; end; procedure TScreenCredits.onShow; begin inherited; - CRDTS_Stage:=InitialDelay; - Credits_X := 580; + CRDTS_Stage := InitialDelay; + Credits_X := 580; deluxe_slidein := 0; - Credits_Alpha := 0; - //Music.SetLoop(true); loop loops not, shit + Credits_Alpha := 0; +// Music.SetLoop(true); loop loops not, shit AudioPlayback.Open(soundpath + 'wome-credits-tune.mp3'); // thank you wetue - //Music.Play; - CTime:=0; - //setlength(CTime_hold,0); +// Music.Play; + CTime := 0; +// setlength(CTime_hold,0); end; procedure TScreenCredits.onHide; @@ -268,17 +268,17 @@ end; Procedure TScreenCredits.Draw_FunkyText; var - S: Integer; - X,Y,A: Real; + S: integer; + X, Y, A: real; visibleText: string; begin SetFontSize(30); - //Init ScrollingText + // init ScrollingText if (CTime = Timings[7]) then begin - //Set Position of Text - Credits_X := 600; + // set position of text + Credits_X := 600; CurrentScrollStart := 1; CurrentScrollEnd := 1; end; @@ -291,8 +291,8 @@ begin for S := 1 to length(visibleText) do begin - Y := abs(sin((Credits_X+X)*0.93{*(((Credits_X+X))/1200)}/100*pi)); - SetFontPos(Credits_X+X, 538-Y*(Credits_X+X)*(Credits_X+X)*(Credits_X+X)/1000000); + Y := abs(sin((Credits_X + X) * 0.93 { * (((Credits_X + X)) / 1200) } / 100 * pi)); + SetFontPos(Credits_X + X, 538 - Y * (Credits_X + X) * (Credits_X + X) * (Credits_X + X) / 1000000); if (Credits_X + X > 32) then A := 17 @@ -301,10 +301,10 @@ begin else A := 0; - glColor4f(230/255-40/255+Y*(Credits_X+X)/900, - 200/255-30/255+Y*(Credits_X+X)/1000, - 155/255-20/255+Y*(Credits_X+X)/1100, - A/17); + glColor4f(230 / 255 - 40 / 255 + Y * (Credits_X + X)/ 900, + 200 / 255 - 30 / 255 + Y * (Credits_X + X)/ 1000, + 155 / 255 - 20 / 255 + Y * (Credits_X + X)/ 1100, + A / 17); glPrint(visibleText[S]); X := X + glTextWidth(visibleText[S]); end; @@ -323,50 +323,53 @@ begin inc(CurrentScrollEnd); end; end; - { // timing hack - X:=5; - SetFontStyle (2); - SetFontItalic(False); - SetFontSize(27); - glColor4f(1, 1, 1, 1); - for S:=0 to high(CTime_hold) do begin - visibleText:=inttostr(CTime_hold[S]); - SetFontPos (500, X); - glPrint (visibleText[0]); - X:=X+20; - end; - } +{ +// timing hack + X:=5; + SetFontStyle(2); + SetFontItalic(false); + SetFontSize(27); + glColor4f(1, 1, 1, 1); + for S := 0 to high(CTime_hold) do + begin + visibleText := inttostr(CTime_hold[S]); + SetFontPos (500, X); + glPrint(visibleText[0]); + X := X + 20; + end; +} end; procedure Start3D; begin - glMatrixMode(GL_PROJECTION); - glPushMatrix; - glLoadIdentity; - glFrustum(-0.3*4/3,0.3*4/3,-0.3,0.3,1,1000); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity; + glMatrixMode(GL_PROJECTION); + glPushMatrix; + glLoadIdentity; + glFrustum(-0.3 * 4 / 3, 0.3 * 4 / 3, -0.3, 0.3, 1, 1000); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity; end; + procedure End3D; begin - glMatrixMode(GL_PROJECTION); - glPopMatrix; - glMatrixMode(GL_MODELVIEW); + glMatrixMode(GL_PROJECTION); + glPopMatrix; + glMatrixMode(GL_MODELVIEW); end; procedure TScreenCredits.DrawCredits; var - T: Cardinal; - Data: TFFTData; - j,k,l:cardinal; - f,g: Real; - STime:cardinal; - Delay:cardinal; - myScale: Real; - myAngle: Real; + T: cardinal; + Data: TFFTData; + j, k, l: cardinal; + f, g: real; + STime: cardinal; + Delay: cardinal; + myScale: real; + myAngle: real; const - myLogoCoords: Array[0..27,0..1] of Cardinal = ( - (39,32),(84,32),(100,16),(125,24), + myLogoCoords: array[0..27,0..1] of cardinal = ( + ( 39,32),( 84,32),(100,16),(125,24), (154,31),(156,58),(168,32),(203,36), (258,34),(251,50),(274,93),(294,84), (232,54),(278,62),(319,34),(336,92), @@ -375,10 +378,10 @@ const (450,32),(485,34),(444,91),(486,93) ); begin - //dis does teh muiwk y0r + // dis does teh muiwk y0r to be translated :-) AudioPlayback.GetFFTData(Data); - Log.LogStatus('',' JB-1'); + Log.LogStatus('', ' JB-1'); T := SDL_GetTicks() div 33; if T <> Credits_Time then @@ -388,165 +391,172 @@ begin inc(CTime_hold); Credits_X := Credits_X-2; - Log.LogStatus('',' JB-2'); - if (CRDTS_Stage=InitialDelay) and (CTime=Timings[0]) then + Log.LogStatus('', ' JB-2'); + if (CRDTS_Stage=InitialDelay) and (CTime = Timings[0]) then begin - //CTime:=Timings[20]; - //CRDTS_Stage:=Outro; - CRDTS_Stage:=Intro; - CTime:=0; +// CTime := Timings[20]; +// CRDTS_Stage := Outro; + CRDTS_Stage := Intro; + CTime := 0; AudioPlayback.Play; end; - if (CRDTS_Stage=Intro) and (CTime=Timings[7]) then + if (CRDTS_Stage = Intro) and (CTime = Timings[7]) then begin - CRDTS_Stage:=MainPart; + CRDTS_Stage := MainPart; end; - if (CRDTS_Stage=MainPart) and (CTime=Timings[20]) then + if (CRDTS_Stage = MainPart) and (CTime = Timings[20]) then begin - CRDTS_Stage:=Outro; + CRDTS_Stage := Outro; end; end; - Log.LogStatus('',' JB-3'); + Log.LogStatus('', ' JB-3'); - //draw background - if CRDTS_Stage=InitialDelay then - begin - glClearColor(0,0,0,0); - glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); - end + // draw background + if CRDTS_Stage = InitialDelay then + begin + glClearColor(0, 0, 0, 0); + glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); + end else - if CRDTS_Stage=Intro then - begin - Start3D; - glPushMatrix; - - glClearColor(0,0,0,0); - glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); - - glEnable(GL_TEXTURE_2D); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); + if CRDTS_Stage = Intro then + begin + Start3D; + glPushMatrix; - if CTime < Timings[1] then begin - myScale:= 0.5+0.5*(Timings[1]-CTime)/(Timings[1]); // slowly move layers together - myAngle:=cos((CTime)*pi/((Timings[1])*2)); // and make logo face towards camera - end else begin // this is the part when the logo stands still - myScale:=0.5; - myAngle:=0; - end; - if CTime > Timings[2] then begin - myScale:= 0.5+0.5*(CTime-Timings[2])/(Timings[3]-Timings[2]); // get some space between layers - myAngle:=0; - end; - //if CTime > Timings[3] then myScale:=1; // keep the space between layers - glTranslatef(0,0,-5+0.5*myScale); - if CTime > Timings[3] then myScale:=1; // keep the space between layers - if CTime > Timings[3] then begin // make logo rotate left and grow - //myScale:=(CTime-Timings[4])/(Timings[7]-Timings[4]); - glRotatef(20*sqr(CTime-Timings[3])/sqr((Timings[7]-Timings[3])/2),0,0,1); - glScalef(1+sqr(CTime-Timings[3])/(32*(Timings[7]-Timings[3])),1+sqr(CTime-Timings[3])/(32*(Timings[7]-Timings[3])),1); - end; - if CTime < Timings[2] then - glRotatef(30*myAngle,0.5*myScale+myScale,1+myScale,0); - //glScalef(0.5,0.5,0.5); - glScalef(4/3,-1,1); - glColor4f(1, 1, 1, 1); + glClearColor(0, 0, 0, 0); + glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); - glBindTexture(GL_TEXTURE_2D, intro_layer01.TexNum); - glbegin(gl_quads); - glTexCoord2f(0,0);glVertex3f(-1, -1, -0.4 * myScale); - glTexCoord2f(0,1);glVertex3f(-1, 1, -0.4 * myScale); - glTexCoord2f(1,1); glVertex3f(1, 1, -0.4 * myScale); - glTexCoord2f(1,0);glVertex3f(1, -1, -0.4 * myScale); - glEnd; - glBindTexture(GL_TEXTURE_2D, intro_layer02.TexNum); - glbegin(gl_quads); - glTexCoord2f(0,0);glVertex3f(-1, -1, -0.3 * myScale); - glTexCoord2f(0,1);glVertex3f(-1, 1, -0.3 * myScale); - glTexCoord2f(1,1); glVertex3f(1, 1, -0.3 * myScale); - glTexCoord2f(1,0);glVertex3f(1, -1, -0.3 * myScale); - glEnd; - glBindTexture(GL_TEXTURE_2D, intro_layer03.TexNum); - glbegin(gl_quads); - glTexCoord2f(0,0);glVertex3f(-1, -1, -0.2 * myScale); - glTexCoord2f(0,1);glVertex3f(-1, 1, -0.2 * myScale); - glTexCoord2f(1,1); glVertex3f(1, 1, -0.2 * myScale); - glTexCoord2f(1,0);glVertex3f(1, -1, -0.2 * myScale); - glEnd; - glBindTexture(GL_TEXTURE_2D, intro_layer04.TexNum); - glbegin(gl_quads); - glTexCoord2f(0,0);glVertex3f(-1, -1, -0.1 * myScale); - glTexCoord2f(0,1);glVertex3f(-1, 1, -0.1 * myScale); - glTexCoord2f(1,1); glVertex3f(1, 1, -0.1 * myScale); - glTexCoord2f(1,0);glVertex3f(1, -1, -0.1 * myScale); - glEnd; - glBindTexture(GL_TEXTURE_2D, intro_layer05.TexNum); - glbegin(gl_quads); - glTexCoord2f(0,0);glVertex3f(-1, -1, 0 * myScale); - glTexCoord2f(0,1);glVertex3f(-1, 1, 0 * myScale); - glTexCoord2f(1,1); glVertex3f(1, 1, 0 * myScale); - glTexCoord2f(1,0);glVertex3f(1, -1, 0 * myScale); - glEnd; - glBindTexture(GL_TEXTURE_2D, intro_layer06.TexNum); - glbegin(gl_quads); - glTexCoord2f(0,0);glVertex3f(-1, -1, 0.1 * myScale); - glTexCoord2f(0,1);glVertex3f(-1, 1, 0.1 * myScale); - glTexCoord2f(1,1); glVertex3f(1, 1, 0.1 * myScale); - glTexCoord2f(1,0);glVertex3f(1, -1, 0.1 * myScale); - glEnd; - glBindTexture(GL_TEXTURE_2D, intro_layer07.TexNum); - glbegin(gl_quads); - glTexCoord2f(0,0);glVertex3f(-1, -1, 0.2 * myScale); - glTexCoord2f(0,1);glVertex3f(-1, 1, 0.2 * myScale); - glTexCoord2f(1,1); glVertex3f(1, 1, 0.2 * myScale); - glTexCoord2f(1,0);glVertex3f(1, -1, 0.2 * myScale); - glEnd; - glBindTexture(GL_TEXTURE_2D, intro_layer08.TexNum); - glbegin(gl_quads); - glTexCoord2f(0,0);glVertex3f(-1, -1, 0.3 * myScale); - glTexCoord2f(0,1);glVertex3f(-1, 1, 0.3 * myScale); - glTexCoord2f(1,1); glVertex3f(1, 1, 0.3 * myScale); - glTexCoord2f(1,0);glVertex3f(1, -1, 0.3 * myScale); - glEnd; - glBindTexture(GL_TEXTURE_2D, intro_layer09.TexNum); - glbegin(gl_quads); - glTexCoord2f(0,0);glVertex3f(-1, -1, 0.22 * myScale); - glTexCoord2f(0,1);glVertex3f(-1, 1, 0.22 * myScale); - glTexCoord2f(1,1); glVertex3f(1, 1, 0.22 * myScale); - glTexCoord2f(1,0);glVertex3f(1, -1, 0.22 * myScale); - glEnd; - gldisable(gl_texture_2d); - glDisable(GL_BLEND); + glEnable(GL_TEXTURE_2D); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); - glPopMatrix; - End3D; + if CTime < Timings[1] then + begin + myScale := 0.5 + 0.5 * (Timings[1] - CTime) / (Timings[1]); // slowly move layers together + myAngle := cos((CTime) * pi / ((Timings[1]) * 2)); // and make logo face towards camera + end + else + begin // this is the part when the logo stands still + myScale := 0.5; + myAngle := 0; + end; + if CTime > Timings[2] then + begin + myScale := 0.5 + 0.5 * (CTime - Timings[2]) / (Timings[3] - Timings[2]); // get some space between layers + myAngle := 0; + end; +// if CTime > Timings[3] then myScale := 1; // keep the space between layers + glTranslatef(0, 0, -5 + 0.5 * myScale); + if CTime > Timings[3] then + myScale := 1; // keep the space between layers + if CTime > Timings[3] then + begin // make logo rotate left and grow +// myScale := (CTime - Timings[4]) / (Timings[7] - Timings[4]); + glRotatef(20 * sqr(CTime - Timings[3]) / sqr((Timings[7] - Timings[3]) / 2), 0, 0, 1); + glScalef(1 + sqr(CTime - Timings[3]) / (32 * (Timings[7] - Timings[3])), 1 + sqr(CTime - Timings[3]) / (32 * (Timings[7] - Timings[3])), 1); + end; + if CTime < Timings[2] then + glRotatef(30 * myAngle, 0.5 * myScale + myScale, 1 + myScale, 0); +// glScalef(0.5, 0.5, 0.5); + glScalef(4/3, -1, 1); + glColor4f(1, 1, 1, 1); - // do some sparkling effects - if (CTime < Timings[1]) and (CTime > Timings[21]) then - begin - for k:=1 to 3 do begin - l:=410+floor((CTime-Timings[21])/(Timings[1]-Timings[21])*(536-410))+RandomRange(-5,5); - j:=floor((Timings[1]-CTime)/22)+RandomRange(285,301); - GoldenRec.Spawn(l, j, 1, 16, 0, -1, Flare, 0); - end; - end; + glBindTexture(GL_TEXTURE_2D, intro_layer01.TexNum); + glbegin(gl_quads); + glTexCoord2f(0, 0); glVertex3f(-1, -1, -0.4 * myScale); + glTexCoord2f(0, 1); glVertex3f(-1, 1, -0.4 * myScale); + glTexCoord2f(1, 1); glVertex3f( 1, 1, -0.4 * myScale); + glTexCoord2f(1, 0); glVertex3f( 1, -1, -0.4 * myScale); + glEnd; + glBindTexture(GL_TEXTURE_2D, intro_layer02.TexNum); + glbegin(gl_quads); + glTexCoord2f(0, 0); glVertex3f(-1, -1, -0.3 * myScale); + glTexCoord2f(0, 1); glVertex3f(-1, 1, -0.3 * myScale); + glTexCoord2f(1, 1); glVertex3f( 1, 1, -0.3 * myScale); + glTexCoord2f(1, 0); glVertex3f( 1, -1, -0.3 * myScale); + glEnd; + glBindTexture(GL_TEXTURE_2D, intro_layer03.TexNum); + glbegin(gl_quads); + glTexCoord2f(0, 0); glVertex3f(-1, -1, -0.2 * myScale); + glTexCoord2f(0, 1); glVertex3f(-1, 1, -0.2 * myScale); + glTexCoord2f(1, 1); glVertex3f( 1, 1, -0.2 * myScale); + glTexCoord2f(1, 0); glVertex3f( 1, -1, -0.2 * myScale); + glEnd; + glBindTexture(GL_TEXTURE_2D, intro_layer04.TexNum); + glbegin(gl_quads); + glTexCoord2f(0, 0); glVertex3f(-1, -1, -0.1 * myScale); + glTexCoord2f(0, 1); glVertex3f(-1, 1, -0.1 * myScale); + glTexCoord2f(1, 1); glVertex3f( 1, 1, -0.1 * myScale); + glTexCoord2f(1, 0); glVertex3f( 1, -1, -0.1 * myScale); + glEnd; + glBindTexture(GL_TEXTURE_2D, intro_layer05.TexNum); + glbegin(gl_quads); + glTexCoord2f(0, 0); glVertex3f(-1, -1, 0 * myScale); + glTexCoord2f(0, 1); glVertex3f(-1, 1, 0 * myScale); + glTexCoord2f(1, 1); glVertex3f( 1, 1, 0 * myScale); + glTexCoord2f(1, 0); glVertex3f( 1, -1, 0 * myScale); + glEnd; + glBindTexture(GL_TEXTURE_2D, intro_layer06.TexNum); + glbegin(gl_quads); + glTexCoord2f(0, 0); glVertex3f(-1, -1, 0.1 * myScale); + glTexCoord2f(0, 1); glVertex3f(-1, 1, 0.1 * myScale); + glTexCoord2f(1, 1); glVertex3f( 1, 1, 0.1 * myScale); + glTexCoord2f(1, 0); glVertex3f( 1, -1, 0.1 * myScale); + glEnd; + glBindTexture(GL_TEXTURE_2D, intro_layer07.TexNum); + glbegin(gl_quads); + glTexCoord2f(0, 0); glVertex3f(-1, -1, 0.2 * myScale); + glTexCoord2f(0, 1); glVertex3f(-1, 1, 0.2 * myScale); + glTexCoord2f(1, 1); glVertex3f( 1, 1, 0.2 * myScale); + glTexCoord2f(1, 0); glVertex3f( 1, -1, 0.2 * myScale); + glEnd; + glBindTexture(GL_TEXTURE_2D, intro_layer08.TexNum); + glbegin(gl_quads); + glTexCoord2f(0, 0); glVertex3f(-1, -1, 0.3 * myScale); + glTexCoord2f(0, 1); glVertex3f(-1, 1, 0.3 * myScale); + glTexCoord2f(1, 1); glVertex3f( 1, 1, 0.3 * myScale); + glTexCoord2f(1, 0); glVertex3f( 1, -1, 0.3 * myScale); + glEnd; + glBindTexture(GL_TEXTURE_2D, intro_layer09.TexNum); + glbegin(gl_quads); + glTexCoord2f(0, 0); glVertex3f(-1, -1, 0.22 * myScale); + glTexCoord2f(0, 1); glVertex3f(-1, 1, 0.22 * myScale); + glTexCoord2f(1, 1); glVertex3f( 1, 1, 0.22 * myScale); + glTexCoord2f(1, 0); glVertex3f( 1, -1, 0.22 * myScale); + glEnd; + gldisable(gl_texture_2d); + glDisable(GL_BLEND); + + glPopMatrix; + End3D; + + // do some sparkling effects + if (CTime < Timings[1]) and (CTime > Timings[21]) then + begin + for k:= 1 to 3 do + begin + l := 410 + floor((CTime - Timings[21]) / (Timings[1] - Timings[21]) * (536 - 410)) + RandomRange(-5, 5); + j := floor((Timings[1] - CTime) / 22) + RandomRange(285, 301); + GoldenRec.Spawn(l, j, 1, 16, 0, -1, Flare, 0); + end; + end; - // fade to white at end - if Ctime > Timings[6] then - begin - glColor4f(1,1,1,sqr(Ctime-Timings[6])*(Ctime-Timings[6])/sqr(Timings[7]-Timings[6])); - glEnable(GL_BLEND); - glBegin(GL_QUADS); - glVertex2f(0,0); - glVertex2f(0,600); - glVertex2f(800,600); - glVertex2f(800,0); - glEnd; - glDisable(GL_BLEND); - end; + // fade to white at end + if Ctime > Timings[6] then + begin + glColor4f(1, 1, 1, sqr(CTime - Timings[6]) * (CTime - Timings[6]) / sqr(Timings[7] - Timings[6])); + glEnable(GL_BLEND); + glBegin(GL_QUADS); + glVertex2f( 0, 0); + glVertex2f( 0, 600); + glVertex2f(800, 600); + glVertex2f(800, 0); + glEnd; + glDisable(GL_BLEND); + end; - end; + end; if (CRDTS_Stage=MainPart) then // main credits screen background, scroller, logo and girl begin @@ -558,10 +568,10 @@ begin glColor4f(1, 1, 1, 1); glBindTexture(GL_TEXTURE_2D, credits_bg_tex.TexNum); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(0, 0); - glTexCoord2f(0,600/1024);glVertex2f(0, 600); - glTexCoord2f(800/1024,600/1024); glVertex2f(800, 600); - glTexCoord2f(800/1024,0);glVertex2f(800, 0); + glTexCoord2f( 0, 0); glVertex2f( 0, 0); + glTexCoord2f( 0, 600/1024); glVertex2f( 0, 600); + glTexCoord2f(800/1024, 600/1024); glVertex2f(800, 600); + glTexCoord2f(800/1024, 0); glVertex2f(800, 0); glEnd; glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); @@ -572,38 +582,50 @@ begin //######################################################################### // draw credits names - - Log.LogStatus('',' JB-4'); + Log.LogStatus('', ' JB-4'); // BlindGuard (rotate in from upper left, rotate out to lower right) - STime:=Timings[9]-10; - Delay:=Timings[10]-Timings[9]; + STime := Timings[9] - 10; + Delay := Timings[10] - Timings[9]; if CTime > STime then begin - k:=0; - ESC_Alpha:=20; + k := 0; + ESC_Alpha := 20; try - for j:=0 to 40 do + for j := 0 to 40 do begin - if ( j < length( Data ) ) AND - ( k < length( Data ) ) then + if (j < length(Data)) and + (k < length(Data)) then begin if Data[j] >= Data[k] then - k:=j; + k := j; end; end; except end; - if Data[k]>0.25 then ESC_Alpha:=5 else inc(ESC_Alpha); - if ESC_Alpha >20 then ESC_Alpha:=20; - if ((CTime-STime)<20) then ESC_Alpha:=20; - if CTime <=STime+10 then j:=CTime-STime else j:=10; - if (CTime >=STime+Delay-10) then if (CTime <=STime+Delay) then j:=(STime+Delay)-CTime else j:=0; - glColor4f(1, 1, 1, ESC_Alpha/20*j/10); - - if (CTime >= STime+10) and (CTime<=STime+12) then begin + if Data[k] > 0.25 then + ESC_Alpha := 5 + else + inc(ESC_Alpha); + if ESC_Alpha > 20 then + ESC_Alpha := 20; + if ((CTime - STime) < 20) then + ESC_Alpha := 20; + if CTime <= STime + 10 then + j := CTime - STime + else + j := 10; + if (CTime >= STime + Delay - 10) then + if (CTime <= STime + Delay) then + j := (STime + Delay) - CTime + else + j := 0; + glColor4f(1, 1, 1, ESC_Alpha / 20 * j / 10); + + if (CTime >= STime + 10) and (CTime <= STime + 12) then + begin GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 0); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 1); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 5); @@ -616,23 +638,26 @@ begin end; glPushMatrix; - gltranslatef(0,329,0); - if CTime <= STime+10 then begin glrotatef((CTime-STime)*9+270,0,0,1);end; - gltranslatef(223,0,0); - if CTime >=STime+Delay-10 then if CTime <=STime+Delay then begin - gltranslatef(223,0,0); - glrotatef((integer(CTime)-(integer(STime+Delay)-10))*-9,0,0,1); - gltranslatef(-223,0,0); - end; + gltranslatef(0, 329, 0); + if CTime <= STime + 10 then + glrotatef((CTime - STime) * 9 + 270, 0, 0, 1); + gltranslatef(223, 0, 0); + if CTime >= STime + Delay - 10 then + if CTime <= STime + Delay then + begin + gltranslatef(223, 0, 0); + glrotatef((integer(CTime) - (integer(STime + Delay) - 10)) * -9, 0, 0, 1); + gltranslatef(-223, 0, 0); + end; glBindTexture(GL_TEXTURE_2D, credits_blindguard.TexNum); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(-163, -129); - glTexCoord2f(0,1);glVertex2f(-163, 129); - glTexCoord2f(1,1); glVertex2f(163, 129); - glTexCoord2f(1,0);glVertex2f(163, -129); + glTexCoord2f(0, 0); glVertex2f(-163, -129); + glTexCoord2f(0, 1); glVertex2f(-163, 129); + glTexCoord2f(1, 1); glVertex2f( 163, 129); + glTexCoord2f(1, 0); glVertex2f( 163, -129); glEnd; gldisable(gl_texture_2d); gldisable(GL_BLEND); @@ -640,35 +665,47 @@ begin end; // Blindy (zoom from 0 to full size and rotation, zoom zo doubble size and shift to upper right) - STime:=Timings[10]-10; - Delay:=Timings[11]-Timings[10]+5; + STime := Timings[10] - 10; + Delay := Timings[11] - Timings[10] + 5; if CTime > STime then begin - k:=0; - ESC_Alpha:=20; + k := 0; + ESC_Alpha := 20; try - for j:=0 to 40 do + for j := 0 to 40 do begin - if ( j < length( Data ) ) AND - ( k < length( Data ) ) then + if (j < length(Data)) and + (k < length(Data)) then begin if Data[j] >= Data[k] then - k:=j; + k := j; end; end; except end; - - if Data[k]>0.25 then ESC_Alpha:=5 else inc(ESC_Alpha); - if ESC_Alpha >20 then ESC_Alpha:=20; - if ((CTime-STime)<20) then ESC_Alpha:=20; - if CTime <=STime+10 then j:=CTime-STime else j:=10; - if (CTime >=STime+Delay-10) then if (CTime <=STime+Delay) then j:=(STime+Delay)-CTime else j:=0; - glColor4f(1, 1, 1, ESC_Alpha/20*j/10); - - if (CTime >= STime+20) and (CTime<=STime+22) then begin + if Data[k] > 0.25 then + ESC_Alpha := 5 + else + inc(ESC_Alpha); + if ESC_Alpha > 20 then + ESC_Alpha := 20; + if ((CTime - STime) < 20) then + ESC_Alpha := 20; + if CTime <= STime + 10 then + j := CTime - STime + else + j := 10; + if (CTime >= STime + Delay - 10) then + if (CTime <= STime + Delay) then + j := (STime + Delay) - CTime + else + j := 0; + glColor4f(1, 1, 1, ESC_Alpha / 20 * j / 10); + + if (CTime >= STime+20) and (CTime<=STime+22) then + begin GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 0); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 1); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 5); @@ -681,28 +718,31 @@ begin end; glPushMatrix; - gltranslatef(223,329,0); - if CTime <= STime+20 then begin - j:=CTime-Stime; - glscalef(j*j/400,j*j/400,j*j/400); - glrotatef(j*18.0,0,0,1); - end; - if CTime >=STime+Delay-10 then if CTime <=STime+Delay then begin - j:=CTime-(STime+Delay-10); - f:=j*10.0; - gltranslatef(f*3,-f,0); - glscalef(1+j/10,1+j/10,1+j/10); - glrotatef(j*9.0,0,0,1); + gltranslatef(223, 329, 0); + if CTime <= STime + 20 then + begin + j := CTime - Stime; + glscalef(j * j / 400, j * j / 400, j * j / 400); + glrotatef(j * 18.0, 0, 0, 1); end; + if CTime >= STime + Delay - 10 then + if CTime <= STime + Delay then + begin + j := CTime - (STime + Delay - 10); + f := j * 10.0; + gltranslatef(f * 3, -f, 0); + glscalef(1 + j / 10, 1 + j / 10, 1 + j / 10); + glrotatef(j * 9.0, 0, 0, 1); + end; glBindTexture(GL_TEXTURE_2D, credits_blindy.TexNum); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(-163, -129); - glTexCoord2f(0,1);glVertex2f(-163, 129); - glTexCoord2f(1,1); glVertex2f(163, 129); - glTexCoord2f(1,0);glVertex2f(163, -129); + glTexCoord2f(0, 0); glVertex2f(-163, -129); + glTexCoord2f(0, 1); glVertex2f(-163, 129); + glTexCoord2f(1, 1); glVertex2f( 163, 129); + glTexCoord2f(1, 0); glVertex2f( 163, -129); glEnd; gldisable(gl_texture_2d); gldisable(GL_BLEND); @@ -710,35 +750,47 @@ begin end; // Canni (shift in from left, shift out to upper right) - STime:=Timings[11]-10; - Delay:=Timings[12]-Timings[11]+5; + STime := Timings[11] - 10; + Delay := Timings[12] - Timings[11] + 5; if CTime > STime then begin - k:=0; - ESC_Alpha:=20; + k := 0; + ESC_Alpha := 20; try - for j:=0 to 40 do + for j := 0 to 40 do begin - if ( j < length( Data ) ) AND - ( k < length( Data ) ) then + if (j < length(Data)) and + (k < length(Data)) then begin if Data[j] >= Data[k] then - k:=j; + k := j; end; end; except end; - - if Data[k]>0.25 then ESC_Alpha:=5 else inc(ESC_Alpha); - if ESC_Alpha >20 then ESC_Alpha:=20; - if ((CTime-STime)<20) then ESC_Alpha:=20; - if CTime <=STime+10 then j:=CTime-STime else j:=10; - if (CTime >=STime+Delay-10) then if (CTime <=STime+Delay) then j:=(STime+Delay)-CTime else j:=0; - glColor4f(1, 1, 1, ESC_Alpha/20*j/10); - - if (CTime >= STime+10) and (CTime<=STime+12) then begin + if Data[k] > 0.25 then + ESC_Alpha := 5 + else + inc(ESC_Alpha); + if ESC_Alpha > 20 then + ESC_Alpha := 20; + if ((CTime - STime) < 20) then + ESC_Alpha := 20; + if CTime <= STime + 10 then + j := CTime - STime + else + j := 10; + if (CTime >= STime + Delay - 10) then + if (CTime <= STime + Delay) then + j := (STime + Delay) - CTime + else + j := 0; + glColor4f(1, 1, 1, ESC_Alpha / 20 * j / 10); + + if (CTime >= STime + 10) and (CTime <= STime + 12) then + begin GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 0); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 1); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 5); @@ -751,23 +803,26 @@ begin end; glPushMatrix; - gltranslatef(223,329,0); - if CTime <= STime+10 then begin - gltranslatef(((CTime-STime)*21.0)-210,0,0); - end; - if CTime >=STime+Delay-10 then if CTime <=STime+Delay then begin - j:=(CTime-(STime+Delay-10))*21; - gltranslatef(j,-j/2,0); + gltranslatef(223, 329, 0); + if CTime <= STime + 10 then + begin + gltranslatef(((CTime - STime) * 21.0) - 210, 0, 0); end; + if CTime >= STime + Delay - 10 then + if CTime <= STime + Delay then + begin + j := (CTime - (STime + Delay - 10)) * 21; + gltranslatef(j, -j / 2, 0); + end; glBindTexture(GL_TEXTURE_2D, credits_canni.TexNum); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(-163, -129); - glTexCoord2f(0,1);glVertex2f(-163, 129); - glTexCoord2f(1,1); glVertex2f(163, 129); - glTexCoord2f(1,0);glVertex2f(163, -129); + glTexCoord2f(0, 0); glVertex2f(-163, -129); + glTexCoord2f(0, 1); glVertex2f(-163, 129); + glTexCoord2f(1, 1); glVertex2f( 163, 129); + glTexCoord2f(1, 0); glVertex2f( 163, -129); glEnd; gldisable(gl_texture_2d); gldisable(GL_BLEND); @@ -775,35 +830,47 @@ begin end; // Commandio (flip in from down, flip out to upper right) - STime:=Timings[12]-10; - Delay:=Timings[13]-Timings[12]; + STime := Timings[12] - 10; + Delay := Timings[13] - Timings[12]; if CTime > STime then begin - k:=0; - ESC_Alpha:=20; + k := 0; + ESC_Alpha := 20; try - for j:=0 to 40 do + for j := 0 to 40 do begin - if ( j < length( Data ) ) AND - ( k < length( Data ) ) then + if (j < length(Data)) and + (k < length(Data)) then begin if Data[j] >= Data[k] then - k:=j; + k := j; end; end; except end; - - if Data[k]>0.25 then ESC_Alpha:=5 else inc(ESC_Alpha); - if ESC_Alpha >20 then ESC_Alpha:=20; - if ((CTime-STime)<20) then ESC_Alpha:=20; - if CTime <=STime+10 then j:=CTime-STime else j:=10; - if (CTime >=STime+Delay-10) then if (CTime <=STime+Delay) then j:=(STime+Delay)-CTime else j:=0; - glColor4f(1, 1, 1, ESC_Alpha/20*j/10); - - if (CTime >= STime+10) and (CTime<=STime+12) then begin + if Data[k] > 0.25 then + ESC_Alpha := 5 + else + inc(ESC_Alpha); + if ESC_Alpha > 20 then + ESC_Alpha := 20; + if ((CTime - STime) < 20) then + ESC_Alpha := 20; + if CTime <= STime + 10 then + j := CTime - STime + else + j := 10; + if (CTime >= STime + Delay - 10) then + if (CTime <= STime + Delay) then + j := (STime + Delay) - CTime + else + j := 0; + glColor4f(1, 1, 1, ESC_Alpha / 20 * j / 10); + + if (CTime >= STime + 10) and (CTime <= STime + 12) then + begin GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 0); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 1); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 5); @@ -816,25 +883,27 @@ begin end; glPushMatrix; - gltranslatef(223,329,0); - if CTime <= STime+10 then - f:=258.0-25.8*(CTime-STime) + gltranslatef(223, 329, 0); + if CTime <= STime + 10 then + f := 258.0 - 25.8 * (CTime - STime) else - f:=0; - g:=0; - if CTime >=STime+Delay-10 then if CTime <=STime+Delay then begin - j:=CTime-(STime+Delay-10); - g:=32.6*j; - end; + f := 0; + g := 0; + if CTime >= STime + Delay - 10 then + if CTime <= STime + Delay then + begin + j := CTime - (STime + Delay - 10); + g := 32.6 * j; + end; glBindTexture(GL_TEXTURE_2D, credits_commandio.TexNum); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(-163+g-f*1.5, -129+f*1.5-g/2); - glTexCoord2f(0,1);glVertex2f(-163+g*1.5, 129-(g*1.5*258/326)); - glTexCoord2f(1,1); glVertex2f(163+g, 129+g/4); - glTexCoord2f(1,0);glVertex2f(163+f*1.5+g/4, -129+f*1.5-g/4); + glTexCoord2f(0, 0); glVertex2f(-163 + g - f * 1.5, -129 + f * 1.5 - g/2); + glTexCoord2f(0, 1); glVertex2f(-163 + g * 1.5, 129 - (g * 1.5 * 258 / 326)); + glTexCoord2f(1, 1); glVertex2f( 163 + g, 129 + g / 4); + glTexCoord2f(1, 0); glVertex2f( 163 + f * 1.5 + g / 4, -129 + f * 1.5 - g / 4); glEnd; gldisable(gl_texture_2d); gldisable(GL_BLEND); @@ -842,46 +911,57 @@ begin end; // lazy joker (just scrolls from left to right, no twinkling stars, no on-beat flashing) - STime:=Timings[13]-35; - Delay:=Timings[14]-Timings[13]+5; + STime := Timings[13] - 35; + Delay := Timings[14] - Timings[13] + 5; if CTime > STime then begin - k:=0; + k := 0; try - for j:=0 to 40 do + for j := 0 to 40 do begin - if ( j < length( Data ) ) AND - ( k < length( Data ) ) then + if (j < length(Data)) and + (k < length(Data)) then begin if Data[j] >= Data[k] then - k:=j; + k := j; end; end; except end; - - if Data[k]>0.25 then ESC_Alpha:=5 else inc(ESC_Alpha); - if ESC_Alpha >20 then ESC_Alpha:=20; - if ((CTime-STime)>10) and ((CTime-STime)<20) then ESC_Alpha:=20; - ESC_Alpha:=10; - f:=CTime-STime; - if CTime <=STime+40 then j:=CTime-STime else j:=40; - if (CTime >=STime+Delay-40) then if (CTime <=STime+Delay) then j:=(STime+Delay)-CTime else j:=0; - glColor4f(1, 1, 1, ESC_Alpha/20*j*j/1600); + if Data[k] > 0.25 then + ESC_Alpha := 5 + else + inc(ESC_Alpha); + if ESC_Alpha > 20 then + ESC_Alpha := 20; + if ((CTime - STime) > 10) and ((CTime - STime) < 20) then + ESC_Alpha := 20; + ESC_Alpha := 10; + f := CTime - STime; + if CTime <= STime + 40 then + j := CTime - STime + else + j := 40; + if (CTime >= STime + Delay - 40) then + if (CTime <= STime + Delay) then + j := (STime + Delay) - CTime + else + j := 0; + glColor4f(1, 1, 1, ESC_Alpha / 20 * j * j / 1600); glPushMatrix; - gltranslatef(180+(f-70),329,0); + gltranslatef(180 + (f - 70), 329, 0); glBindTexture(GL_TEXTURE_2D, credits_lazyjoker.TexNum); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(-163, -129); - glTexCoord2f(0,1);glVertex2f(-163, 129); - glTexCoord2f(1,1); glVertex2f(163, 129); - glTexCoord2f(1,0);glVertex2f(163, -129); + glTexCoord2f(0, 0); glVertex2f(-163, -129); + glTexCoord2f(0, 1); glVertex2f(-163, 129); + glTexCoord2f(1, 1); glVertex2f( 163, 129); + glTexCoord2f(1, 0); glVertex2f( 163, -129); glEnd; gldisable(gl_texture_2d); gldisable(GL_BLEND); @@ -889,36 +969,47 @@ begin end; // Mog (flip in from right, flip out to lower right) - STime:=Timings[14]-10; - Delay:=Timings[15]-Timings[14]+5; + STime := Timings[14] - 10; + Delay := Timings[15] - Timings[14] + 5; if CTime > STime then begin - k:=0; - ESC_Alpha:=20; - + k := 0; + ESC_Alpha := 20; try - for j:=0 to 40 do + for j := 0 to 40 do begin - if ( j < length( Data ) ) AND - ( k < length( Data ) ) then + if (j < length(Data)) and + (k < length(Data)) then begin if Data[j] >= Data[k] then - k:=j; + k := j; end; end; except end; - - if Data[k]>0.25 then ESC_Alpha:=5 else inc(ESC_Alpha); - if ESC_Alpha >20 then ESC_Alpha:=20; - if ((CTime-STime)<20) then ESC_Alpha:=20; - if CTime <=STime+10 then j:=CTime-STime else j:=10; - if (CTime >=STime+Delay-10) then if (CTime <=STime+Delay) then j:=(STime+Delay)-CTime else j:=0; - glColor4f(1, 1, 1, ESC_Alpha/20*j/10); - - if (CTime >= STime+10) and (CTime<=STime+12) then begin + if Data[k] > 0.25 then + ESC_Alpha := 5 + else + inc(ESC_Alpha); + if ESC_Alpha > 20 then + ESC_Alpha := 20; + if ((CTime - STime) < 20) then + ESC_Alpha := 20; + if CTime <= STime + 10 then + j := CTime - STime + else + j := 10; + if (CTime >= STime + Delay - 10) then + if (CTime <= STime + Delay) then + j := (STime + Delay) - CTime + else + j := 0; + glColor4f(1, 1, 1, ESC_Alpha / 20 * j / 10); + + if (CTime >= STime + 10) and (CTime <= STime + 12) then + begin GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 0); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 1); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 5); @@ -931,26 +1022,28 @@ begin end; glPushMatrix; - gltranslatef(223,329,0); - if CTime <= STime+10 then - f:=326.0-32.6*(CTime-STime) + gltranslatef(223, 329, 0); + if CTime <= STime + 10 then + f := 326.0 - 32.6 * (CTime - STime) else - f:=0; - - g:=0; - if CTime >=STime+Delay-10 then if CTime <=STime+Delay then begin - j:=CTime-(STime+Delay-10); - g:=32.6*j; - end; + f := 0; + + g := 0; + if CTime >= STime + Delay - 10 then + if CTime <= STime + Delay then + begin + j := CTime - (STime + Delay - 10); + g := 32.6 * j; + end; glBindTexture(GL_TEXTURE_2D, credits_mog.TexNum); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(-163+g*1.5, -129+g*1.5); - glTexCoord2f(0,1);glVertex2f(-163+g*1.2, 129+g); - glTexCoord2f(1,1); glVertex2f(163-f+g/2, 129+f*1.5+g/4); - glTexCoord2f(1,0);glVertex2f(163-f+g*1.5, -129-f*1.5); + glTexCoord2f(0, 0); glVertex2f(-163 + g * 1.5, -129 + g * 1.5); + glTexCoord2f(0, 1); glVertex2f(-163 + g * 1.2, 129 + g); + glTexCoord2f(1, 1); glVertex2f( 163 - f + g / 2, 129 + f * 1.5 + g / 4); + glTexCoord2f(1, 0); glVertex2f( 163 - f + g * 1.5, -129 - f * 1.5); glEnd; gldisable(gl_texture_2d); gldisable(GL_BLEND); @@ -958,35 +1051,47 @@ begin end; // Mota (rotate in from upper right, shift out to lower left while shrinking and rotateing) - STime:=Timings[15]-10; - Delay:=Timings[16]-Timings[15]+5; + STime := Timings[15] - 10; + Delay := Timings[16] - Timings[15] + 5; if CTime > STime then begin - k:=0; - ESC_Alpha:=20; + k := 0; + ESC_Alpha := 20; try - for j:=0 to 40 do + for j := 0 to 40 do begin - if ( j < length( Data ) ) AND - ( k < length( Data ) ) then + if (j < length(Data)) and + (k < length(Data)) then begin if Data[j] >= Data[k] then - k:=j; + k := j; end; end; except end; - - if Data[k]>0.25 then ESC_Alpha:=5 else inc(ESC_Alpha); - if ESC_Alpha >20 then ESC_Alpha:=20; - if ((CTime-STime)<20) then ESC_Alpha:=20; - if CTime <=STime+10 then j:=CTime-STime else j:=10; - if (CTime >=STime+Delay-10) then if (CTime <=STime+Delay) then j:=(STime+Delay)-CTime else j:=0; - glColor4f(1, 1, 1, ESC_Alpha/20*j/10); - - if (CTime >= STime+10) and (CTime<=STime+12) then begin + if Data[k] > 0.25 then + ESC_Alpha := 5 + else + inc(ESC_Alpha); + if ESC_Alpha > 20 then + ESC_Alpha := 20; + if ((CTime - STime) < 20) then + ESC_Alpha := 20; + if CTime <= STime + 10 then + j := CTime - STime + else + j := 10; + if (CTime >= STime + Delay - 10) then + if (CTime <= STime + Delay) then + j := (STime + Delay) - CTime + else + j := 0; + glColor4f(1, 1, 1, ESC_Alpha / 20 * j / 10); + + if (CTime >= STime + 10) and (CTime <= STime + 12) then + begin GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 0); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 1); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 5); @@ -999,28 +1104,31 @@ begin end; glPushMatrix; - gltranslatef(223,329,0); - if CTime <= STime+10 then begin - gltranslatef(223,0,0); - glrotatef((10-(CTime-STime))*9,0,0,1); - gltranslatef(-223,0,0); - end; - if CTime >=STime+Delay-10 then if CTime <=STime+Delay then begin - j:=CTime-(STime+Delay-10); - f:=j*10.0; - gltranslatef(-f*2,-f,0); - glscalef(1-j/10,1-j/10,1-j/10); - glrotatef(-j*9.0,0,0,1); + gltranslatef(223, 329, 0); + if CTime <= STime + 10 then + begin + gltranslatef(223, 0, 0); + glrotatef((10 - (CTime - STime)) * 9, 0, 0, 1); + gltranslatef(-223, 0, 0); end; + if CTime >= STime + Delay - 10 then + if CTime <= STime + Delay then + begin + j := CTime - (STime + Delay - 10); + f := j * 10.0; + gltranslatef(-f * 2, -f, 0); + glscalef(1 - j / 10, 1 - j / 10, 1 - j / 10); + glrotatef(-j * 9.0, 0, 0, 1); + end; glBindTexture(GL_TEXTURE_2D, credits_mota.TexNum); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(-163, -129); - glTexCoord2f(0,1);glVertex2f(-163, 129); - glTexCoord2f(1,1); glVertex2f(163, 129); - glTexCoord2f(1,0);glVertex2f(163, -129); + glTexCoord2f(0, 0); glVertex2f(-163, -129); + glTexCoord2f(0, 1); glVertex2f(-163, 129); + glTexCoord2f(1, 1); glVertex2f( 163, 129); + glTexCoord2f(1, 0); glVertex2f( 163, -129); glEnd; gldisable(gl_texture_2d); gldisable(GL_BLEND); @@ -1028,35 +1136,47 @@ begin end; // Skillmaster (shift in from lower right, rotate out to upper right) - STime:=Timings[16]-10; - Delay:=Timings[17]-Timings[16]+5; + STime := Timings[16] - 10; + Delay := Timings[17] - Timings[16] + 5; if CTime > STime then begin - k:=0; - ESC_Alpha:=20; + k := 0; + ESC_Alpha := 20; try - for j:=0 to 40 do + for j := 0 to 40 do begin - if ( j < length( Data ) ) AND - ( k < length( Data ) ) then + if (j < length(Data)) and + (k < length(Data)) then begin if Data[j] >= Data[k] then - k:=j; + k := j; end; end; except end; - - if Data[k]>0.25 then ESC_Alpha:=5 else inc(ESC_Alpha); - if ESC_Alpha >20 then ESC_Alpha:=20; - if ((CTime-STime)<20) then ESC_Alpha:=20; - if CTime <=STime+10 then j:=CTime-STime else j:=10; - if (CTime >=STime+Delay-10) then if (CTime <=STime+Delay) then j:=(STime+Delay)-CTime else j:=0; - glColor4f(1, 1, 1, ESC_Alpha/20*j/10); - - if (CTime >= STime+10) and (CTime<=STime+12) then begin + if Data[k] > 0.25 then + ESC_Alpha := 5 + else + inc(ESC_Alpha); + if ESC_Alpha > 20 then + ESC_Alpha := 20; + if ((CTime - STime) < 20) then + ESC_Alpha := 20; + if CTime <= STime + 10 then + j := CTime - STime + else + j := 10; + if (CTime >= STime + Delay - 10) then + if (CTime <= STime + Delay) then + j := (STime + Delay) - CTime + else + j := 0; + glColor4f(1, 1, 1, ESC_Alpha / 20 * j / 10); + + if (CTime >= STime + 10) and (CTime <= STime + 12) then + begin GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 0); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 1); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 5); @@ -1069,28 +1189,31 @@ begin end; glPushMatrix; - gltranslatef(223,329,0); - if CTime <= STime+10 then begin - j:=STime+10-CTime; - f:=j*10.0; - gltranslatef(+f*2,+f/2,0); - end; - if CTime >=STime+Delay-10 then if CTime <=STime+Delay then begin - j:=CTime-(STime+Delay-10); - gltranslatef(0,-223,0); - glrotatef(integer(j)*-9,0,0,1); - gltranslatef(0,223,0); - glrotatef(j*9,0,0,1); + gltranslatef(223, 329, 0); + if CTime <= STime + 10 then + begin + j := STime + 10 - CTime; + f := j * 10.0; + gltranslatef(+f * 2, +f / 2, 0); end; + if CTime >= STime + Delay - 10 then + if CTime <= STime + Delay then + begin + j := CTime - (STime + Delay - 10); + gltranslatef(0, -223, 0); + glrotatef(integer(j) * -9, 0, 0, 1); + gltranslatef(0, 223, 0); + glrotatef(j * 9, 0, 0, 1); + end; glBindTexture(GL_TEXTURE_2D, credits_skillmaster.TexNum); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(-163, -129); - glTexCoord2f(0,1);glVertex2f(-163, 129); - glTexCoord2f(1,1); glVertex2f(163, 129); - glTexCoord2f(1,0);glVertex2f(163, -129); + glTexCoord2f(0, 0); glVertex2f(-163, -129); + glTexCoord2f(0, 1); glVertex2f(-163, 129); + glTexCoord2f(1, 1); glVertex2f( 163, 129); + glTexCoord2f(1, 0); glVertex2f( 163, -129); glEnd; gldisable(gl_texture_2d); gldisable(GL_BLEND); @@ -1098,35 +1221,47 @@ begin end; // WhiteShark (flip in from lower left, flip out to upper right) - STime:=Timings[17]-10; - Delay:=Timings[18]-Timings[17]; + STime := Timings[17] - 10; + Delay := Timings[18] - Timings[17]; if CTime > STime then begin - k:=0; - ESC_Alpha:=20; + k := 0; + ESC_Alpha := 20; try - for j:=0 to 40 do + for j := 0 to 40 do begin - if ( j < length( Data ) ) AND - ( k < length( Data ) ) then + if (j < length(Data)) and + (k < length(Data)) then begin if Data[j] >= Data[k] then - k:=j; + k := j; end; end; except end; - - if Data[k]>0.25 then ESC_Alpha:=5 else inc(ESC_Alpha); - if ESC_Alpha >20 then ESC_Alpha:=20; - if ((CTime-STime)<20) then ESC_Alpha:=20; - if CTime <=STime+10 then j:=CTime-STime else j:=10; - if (CTime >=STime+Delay-10) then if (CTime <=STime+Delay) then j:=(STime+Delay)-CTime else j:=0; - glColor4f(1, 1, 1, ESC_Alpha/20*j/10); - - if (CTime >= STime+10) and (CTime<=STime+12) then begin + if Data[k] > 0.25 then + ESC_Alpha := 5 + else + inc(ESC_Alpha); + if ESC_Alpha > 20 then + ESC_Alpha := 20; + if ((CTime - STime) < 20) then + ESC_Alpha := 20; + if CTime <= STime + 10 then + j := CTime - STime + else + j := 10; + if (CTime >= STime + Delay - 10) then + if (CTime <= STime + Delay) then + j := (STime + Delay) - CTime + else + j := 0; + glColor4f(1, 1, 1, ESC_Alpha / 20 * j / 10); + + if (CTime >= STime + 10) and (CTime <= STime + 12) then + begin GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 0); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 1); GoldenRec.Spawn(RandomRange(65,390), RandomRange(200,460), 1, 16, 0, -1, PerfectLineTwinkle, 5); @@ -1139,20 +1274,20 @@ begin end; glPushMatrix; - gltranslatef(223,329,0); - if CTime <= STime+10 then - f:=326.0-32.6*(CTime-STime) + gltranslatef(223, 329, 0); + if CTime <= STime + 10 then + f := 326.0 - 32.6 * (CTime - STime) else - f:=0; + f := 0; - if (CTime >= STime+Delay-10) and (CTime <= STime+Delay) then + if (CTime >= STime + Delay - 10) and (CTime <= STime + Delay) then begin - j:=CTime-(STime+Delay-10); - g:=32.6*j; + j := CTime - (STime + Delay - 10); + g := 32.6 * j; end else begin - g:=0; + g := 0; end; glBindTexture(GL_TEXTURE_2D, credits_whiteshark.TexNum); @@ -1160,51 +1295,50 @@ begin glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(-163-f+g, -129+f/4-g/2); - glTexCoord2f(0,1);glVertex2f(-163-f/4+g, 129+g/2+f/4); - glTexCoord2f(1,1); glVertex2f(163-f*1.2+g/4, 129+f/2-g/4); - glTexCoord2f(1,0);glVertex2f(163-f*1.5+g/4, -129+f*1.5+g/4); + glTexCoord2f(0, 0); glVertex2f(-163 - f + g, -129 + f / 4 - g / 2); + glTexCoord2f(0, 1); glVertex2f(-163 - f / 4 + g, 129 + g / 2 + f / 4); + glTexCoord2f(1, 1); glVertex2f( 163 - f * 1.2 + g / 4, 129 + f / 2 - g / 4); + glTexCoord2f(1, 0); glVertex2f( 163 - f * 1.5 + g / 4, -129 + f * 1.5 + g / 4); glEnd; gldisable(gl_texture_2d); gldisable(GL_BLEND); glPopMatrix; end; - - Log.LogStatus('',' JB-103'); + Log.LogStatus('', ' JB-103'); // #################################################################### // do some twinkle stuff (kinda on beat) - if (CTime > Timings[8] ) and - (CTime < Timings[19] ) then + if (CTime > Timings[8] ) and + (CTime < Timings[19]) then begin k := 0; try - for j:=0 to 40 do + for j := 0 to 40 do begin - if ( j < length( Data ) ) AND - ( k < length( Data ) ) then + if (j < length(Data)) and + (k < length(Data)) then begin if Data[j] >= Data[k] then - k:=j; + k := j; end; end; except end; - if Data[k]>0.2 then + if Data[k] > 0.2 then begin - l := RandomRange(6,16); - j := RandomRange(0,27); + l := RandomRange(6, 16); + j := RandomRange(0, 27); GoldenRec.Spawn(myLogoCoords[j,0], myLogoCoords[j,1], 16-l, l, 0, -1, PerfectNote, 0); end; end; //################################################# - // draw the rest of the main screen (girl and logo + // draw the rest of the main screen (girl and logo) glEnable(GL_TEXTURE_2D); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -1212,21 +1346,21 @@ begin glColor4f(1, 1, 1, 1); glBindTexture(GL_TEXTURE_2D, credits_bg_ovl.TexNum); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(800-393, 0); - glTexCoord2f(0,600/1024);glVertex2f(800-393, 600); - glTexCoord2f(393/512,600/1024); glVertex2f(800, 600); - glTexCoord2f(393/512,0);glVertex2f(800, 0); + glTexCoord2f( 0, 0); glVertex2f(800-393, 0); + glTexCoord2f( 0, 600/1024); glVertex2f(800-393, 600); + glTexCoord2f(393/512, 600/1024); glVertex2f(800, 600); + glTexCoord2f(393/512, 0); glVertex2f(800, 0); glEnd; - { +{ glBindTexture(GL_TEXTURE_2D, credits_bg_logo.TexNum); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(0, 0); - glTexCoord2f(0,112/128);glVertex2f(0, 112); - glTexCoord2f(497/512,112/128); glVertex2f(497, 112); - glTexCoord2f(497/512,0);glVertex2f(497, 0); + glTexCoord2f( 0, 0); glVertex2f( 0, 0); + glTexCoord2f( 0, 112/128); glVertex2f( 0, 112); + glTexCoord2f(497/512, 112/128); glVertex2f(497, 112); + glTexCoord2f(497/512, 0); glVertex2f(497, 0); glEnd; - } +} gldisable(gl_texture_2d); glDisable(GL_BLEND); @@ -1234,33 +1368,35 @@ begin // fade out at end of main part if Ctime > Timings[19] then begin - glColor4f(0,0,0,(Ctime-Timings[19])/(Timings[20]-Timings[19])); + glColor4f(0, 0, 0, (CTime - Timings[19]) / (Timings[20] - Timings[19])); glEnable(GL_BLEND); glBegin(GL_QUADS); - glVertex2f(0,0); - glVertex2f(0,600); - glVertex2f(800,600); - glVertex2f(800,0); + glVertex2f( 0, 0); + glVertex2f( 0, 600); + glVertex2f(800, 600); + glVertex2f(800, 0); glEnd; glDisable(GL_BLEND); end; end else - if (CRDTS_Stage=Outro) then + if (CRDTS_Stage = Outro) then begin - if CTime=Timings[20] then begin - CTime_hold:=0; + if CTime = Timings[20] then + begin + CTime_hold := 0; AudioPlayback.Stop; AudioPlayback.Open(soundpath + 'credits-outro-tune.mp3'); AudioPlayback.SetVolume(0.2); - AudioPlayback.SetLoop(True); + AudioPlayback.SetLoop(true); AudioPlayback.Play; end; - if CTime_hold > 231 then begin + if CTime_hold > 231 then + begin AudioPlayback.Play; - Ctime_hold:=0; + Ctime_hold := 0; end; - glClearColor(0,0,0,0); + glClearColor(0, 0, 0, 0); glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // do something useful @@ -1272,34 +1408,36 @@ begin glColor4f(1, 1, 1, 1); glBindTexture(GL_TEXTURE_2D, outro_bg.TexNum); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(0, 0); - glTexCoord2f(0,600/1024);glVertex2f(0, 600); - glTexCoord2f(800/1024,600/1024); glVertex2f(800, 600); - glTexCoord2f(800/1024,0);glVertex2f(800, 0); + glTexCoord2f( 0, 0); glVertex2f( 0, 0); + glTexCoord2f( 0, 600/1024); glVertex2f( 0, 600); + glTexCoord2f(800/1024, 600/1024); glVertex2f(800, 600); + glTexCoord2f(800/1024, 0); glVertex2f(800, 0); glEnd; - //outro overlays - glColor4f(1, 1, 1, (1+sin(CTime/15))/3+1/3); + // outro overlays + glColor4f(1, 1, 1, (1 + sin(CTime / 15)) / 3 + 1/3); glBindTexture(GL_TEXTURE_2D, outro_esc.TexNum); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(0, 0); - glTexCoord2f(0,223/256);glVertex2f(0, 223); - glTexCoord2f(487/512,223/256); glVertex2f(487, 223); - glTexCoord2f(487/512,0);glVertex2f(487, 0); + glTexCoord2f( 0, 0); glVertex2f( 0, 0); + glTexCoord2f( 0, 223/256); glVertex2f( 0, 223); + glTexCoord2f(487/512, 223/256); glVertex2f(487, 223); + glTexCoord2f(487/512, 0); glVertex2f(487, 0); glEnd; - ESC_Alpha:=20; - if (RandomRange(0,20) > 18) and (ESC_Alpha=20) then - ESC_Alpha:=0 - else inc(ESC_Alpha); - if ESC_Alpha > 20 then ESC_Alpha:=20; - glColor4f(1, 1, 1, ESC_Alpha/20); + ESC_Alpha := 20; + if (RandomRange(0,20) > 18) and (ESC_Alpha = 20) then + ESC_Alpha := 0 + else + inc(ESC_Alpha); + if ESC_Alpha > 20 then + ESC_Alpha := 20; + glColor4f(1, 1, 1, ESC_Alpha / 20); glBindTexture(GL_TEXTURE_2D, outro_exd.TexNum); glbegin(gl_quads); - glTexCoord2f(0,0);glVertex2f(800-310, 600-247); - glTexCoord2f(0,247/256);glVertex2f(800-310, 600); - glTexCoord2f(310/512,247/256); glVertex2f(800, 600); - glTexCoord2f(310/512,0);glVertex2f(800, 600-247); + glTexCoord2f( 0, 0); glVertex2f(800-310, 600-247); + glTexCoord2f( 0, 247/256); glVertex2f(800-310, 600 ); + glTexCoord2f(310/512, 247/256); glVertex2f(800, 600 ); + glTexCoord2f(310/512, 0); glVertex2f(800, 600-247); glEnd; glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); @@ -1308,17 +1446,17 @@ begin // ... end; - { +{ // draw credits runtime counter - SetFontStyle (2); - SetFontItalic(False); + SetFontStyle (2); + SetFontItalic(false); SetFontSize(27); SetFontPos (5, 5); glColor4f(1, 1, 1, 1); - //RuntimeStr:='CTime: '+inttostr(floor(CTime/30.320663991914489602156136106092))+'.'+inttostr(floor(CTime/3.0320663991914489602156136106092)-floor(CTime/30.320663991914489602156136106092)*10); - RuntimeStr:='CTime: '+inttostr(CTime); +// RuntimeStr := 'CTime: ' + inttostr(floor(CTime / 30.320663991914489602156136106092)) + '.' + inttostr(floor(CTime / 3.0320663991914489602156136106092) - floor(CTime / 30.320663991914489602156136106092) * 10); + RuntimeStr := 'CTime: ' + inttostr(CTime); glPrint (RuntimeStr[1]); - } +} // make the stars shine GoldenRec.Draw; diff --git a/unicode/src/screens/UScreenEditConvert.pas b/unicode/src/screens/UScreenEditConvert.pas index 835590ed..109a828b 100644 --- a/unicode/src/screens/UScreenEditConvert.pas +++ b/unicode/src/screens/UScreenEditConvert.pas @@ -34,6 +34,7 @@ interface {$I switches.inc} uses + math, UMenu, SDL, {$IFDEF UseMIDIPort} @@ -137,7 +138,7 @@ uses function TScreenEditConvert.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of @@ -180,15 +181,15 @@ begin end; if Interaction = 2 then - begin + begin Selected := true; {$IFDEF UseMIDIPort} MidiFile.OnMidiEvent := nil; {$ENDIF} {for T := 0 to High(ATrack) do - begin + begin if ATrack[T].Hear then - begin + begin MidiTrack := MidiFile.GetTrack(T); MidiTrack.OnMidiEvent := MidiFile1MidiEvent; end; @@ -197,9 +198,9 @@ begin end; if Interaction = 3 then - begin + begin if SelectedNumber > 0 then - begin + begin Extract; SaveSong(Song, Lines, ChangeFileExt(ConversionFileName, '.txt'), false); end; @@ -210,16 +211,16 @@ begin SDLK_SPACE: begin // ATrack[Sel].Hear := not ATrack[Sel].Hear; - if Notes in ATrack[Sel].Status then - begin - ATrack[Sel].Status := ATrack[Sel].Status - [Notes]; - if Lyrics in ATrack[Sel].Status then - ATrack[Sel].Status := ATrack[Sel].Status - [Lyrics] - else - ATrack[Sel].Status := ATrack[Sel].Status + [Lyrics]; - end - else - ATrack[Sel].Status := ATrack[Sel].Status + [Notes]; + if Notes in ATrack[Sel].Status then + begin + ATrack[Sel].Status := ATrack[Sel].Status - [Notes]; + if Lyrics in ATrack[Sel].Status then + ATrack[Sel].Status := ATrack[Sel].Status - [Lyrics] + else + ATrack[Sel].Status := ATrack[Sel].Status + [Lyrics]; + end + else + ATrack[Sel].Status := ATrack[Sel].Status + [Notes]; { if Selected then begin @@ -245,13 +246,13 @@ begin begin Inc(Sel); if Sel > High(ATrack) then - Sel := 0; + Sel := 0; end; SDLK_UP: begin Dec(Sel); if Sel < 0 then - Sel := High(ATrack); + Sel := High(ATrack); end; end; end; @@ -313,7 +314,7 @@ begin for N := 0 to High(ATrack[T].Note) do begin if (ATrack[T].Note[N].EventType = 9) and (ATrack[T].Note[N].Data2 > 0) then - begin + begin Nu := Length(Note); SetLength(Note, Nu + 1); Note[Nu].Start := Round(ATrack[T].Note[N].Start / Ticks); @@ -335,7 +336,7 @@ begin for N := 0 to High(ATrack[T].Note) do begin if (ATrack[T].Note[N].EventType = 15) then - begin + begin // Log.LogStatus('<' + Track[T].Note[N].Str + '>', 'MIDI'); AddLyric(Round(ATrack[T].Note[N].Start / Ticks), ATrack[T].Note[N].Str); end; @@ -453,7 +454,6 @@ begin AddButton(500, 20, 100, 40, Skin.GetTextureFileName('ButtonF')); AddButtonText(20, 5, 0, 0, 0, 'Save'); - { MidiOut := TMidiOutput.Create(nil); // MidiOut.Close; // MidiOut.DeviceID := 0; @@ -493,13 +493,11 @@ begin Log.LogStatus(MidiOut.ProductName, 'MIDI'); MidiOut.Open; - if FileExists(ConversionFileName) then begin MidiFile.Filename := ConversionFileName; MidiFile.ReadFile; - Len := 0; Sel := 0; BPM := MidiFile.Bpm; @@ -579,7 +577,7 @@ var Bottom: real; X: real; Y: real; - H: real; + Height: real; YSkip: real; begin // draw static menu @@ -587,20 +585,24 @@ begin Y := 100; - H := Length(ATrack)*40; - if H > 480 then - H := 480; - Bottom := Y + H; + Height := min(480, 40 * Length(ATrack)); + Bottom := Y + Height; - YSkip := H / Length(ATrack); + if Length(ATrack) = 0 then // prevent crash with uncomplete code. + begin + Log.LogDebug ('UScreenEditConvert -> TScreenEditConvert.Draw:', 'Length(ATrack) = 0'); + YSkip := 40; + end + else + YSkip := Height / Length(ATrack); // select - DrawQuad(10, Y+Sel*YSkip, 780, YSkip, 0.8, 0.8, 0.8); + DrawQuad(10, Y + Sel*YSkip, 780, YSkip, 0.8, 0.8, 0.8); // selected - now me use Status System for Count := 0 to High(ATrack) do if ATrack[Count].Hear then - DrawQuad(10, Y+Count*YSkip, 50, YSkip, 0.8, 0.3, 0.3); + DrawQuad(10, Y + Count*YSkip, 50, YSkip, 0.8, 0.3, 0.3); glColor3f(0, 0, 0); for Count := 0 to High(ATrack) do begin @@ -618,12 +620,12 @@ begin end; end; - DrawLine(10, Y, 10, Bottom, 0, 0, 0); - DrawLine(60, Y, 60, Bottom, 0, 0, 0); + DrawLine( 10, Y, 10, Bottom, 0, 0, 0); + DrawLine( 60, Y, 60, Bottom, 0, 0, 0); DrawLine(790, Y, 790, Bottom, 0, 0, 0); for Count := 0 to Length(ATrack) do - DrawLine(10, Y+Count*YSkip, 790, Y+Count*YSkip, 0, 0, 0); + DrawLine(10, Y + Count*YSkip, 790, Y + Count*YSkip, 0, 0, 0); for Count := 0 to High(ATrack) do begin @@ -636,9 +638,21 @@ begin for Count2 := 0 to High(ATrack[Count].Note) do begin if ATrack[Count].Note[Count2].EventType = 9 then - DrawQuad(60 + ATrack[Count].Note[Count2].Start/Len * 725, Y + (Count+1)*YSkip - ATrack[Count].Note[Count2].Data1*35/127, 3, 3, ColR[Count], ColG[Count], ColB[Count]); + DrawQuad(60 + ATrack[Count].Note[Count2].Start/Len*725, + Y + (Count+1)*YSkip - ATrack[Count].Note[Count2].Data1*35/127, + 3, + 3, + ColR[Count], + ColG[Count], + ColB[Count]); if ATrack[Count].Note[Count2].EventType = 15 then - DrawLine(60 + ATrack[Count].Note[Count2].Start/Len * 725, Y + 0.75 * YSkip + Count*YSkip, 60 + ATrack[Count].Note[Count2].Start/Len * 725, Y + YSkip + Count*YSkip, ColR[Count], ColG[Count], ColB[Count]); + DrawLine(60 + ATrack[Count].Note[Count2].Start/Len*725, + Y + 0.75*YSkip + Count*YSkip, + 60 + ATrack[Count].Note[Count2].Start/Len*725, + Y + YSkip + Count*YSkip, + ColR[Count], + ColG[Count], + ColB[Count]); end; // playing line diff --git a/unicode/src/screens/UScreenEditHeader.pas b/unicode/src/screens/UScreenEditHeader.pas index 2548069d..fed226ba 100644 --- a/unicode/src/screens/UScreenEditHeader.pas +++ b/unicode/src/screens/UScreenEditHeader.pas @@ -116,7 +116,7 @@ begin SDLK_RETURN: begin if Interaction = 1 then - begin + begin // Save; end; end; @@ -159,7 +159,7 @@ begin begin T := Interaction - 2 + TextTitle; if (Interaction >= 2) and (Interaction <= 13) and (Length(Text[T].Text) >= 1) then - begin + begin Text[T].DeleteLastLetter; SetRoundButtons; end; @@ -170,7 +170,7 @@ begin 32..255: begin if (Interaction >= 2) and (Interaction <= 13) then - begin + begin Text[Interaction - 2 + TextTitle].Text := Text[Interaction - 2 + TextTitle].Text + UCS4ToUTF8String(CharCode); SetRoundButtons; diff --git a/unicode/src/screens/UScreenEditSub.pas b/unicode/src/screens/UScreenEditSub.pas index a892651a..23ab427b 100644 --- a/unicode/src/screens/UScreenEditSub.pas +++ b/unicode/src/screens/UScreenEditSub.pas @@ -133,11 +133,11 @@ uses ULanguage, UUnicodeUtils; -// Method for input parsing. If False is returned, GetNextWindow +// Method for input parsing. If false is returned, GetNextWindow // should be checked to know the next window to load; function TScreenEditSub.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; var - SDL_ModState: Word; + SDL_ModState: word; R: real; begin Result := true; @@ -206,7 +206,7 @@ begin begin // Paste text if SDL_ModState = KMOD_LCTRL then - begin + begin if Lines[0].Line[Lines[0].Current].HighNote >= Lines[0].Line[CopySrc].HighNote then PasteText else @@ -214,7 +214,7 @@ begin end; if SDL_ModState = KMOD_LCTRL + KMOD_LSHIFT then - begin + begin CopySentence(CopySrc, Lines[0].Current); end; end; @@ -334,7 +334,7 @@ begin SDLK_4: begin if SDL_ModState = KMOD_LCTRL + KMOD_LSHIFT then - begin + begin CopySentence(CopySrc, Lines[0].Current); CopySentence(CopySrc+1, Lines[0].Current+1); CopySentence(CopySrc+2, Lines[0].Current+2); @@ -342,14 +342,14 @@ begin end; if SDL_ModState = KMOD_LCTRL + KMOD_LSHIFT + KMOD_LALT then - begin + begin CopySentences(CopySrc, Lines[0].Current, 4); end; end; SDLK_5: begin if SDL_ModState = KMOD_LCTRL + KMOD_LSHIFT then - begin + begin CopySentence(CopySrc, Lines[0].Current); CopySentence(CopySrc+1, Lines[0].Current+1); CopySentence(CopySrc+2, Lines[0].Current+2); @@ -358,7 +358,7 @@ begin end; if SDL_ModState = KMOD_LCTRL + KMOD_LSHIFT + KMOD_LALT then - begin + begin CopySentences(CopySrc, Lines[0].Current, 5); end; end; @@ -401,21 +401,21 @@ begin SDLK_SLASH: begin if SDL_ModState = 0 then - begin + begin // Insert start of sentece if CurrentNote > 0 then DivideSentence; end; if SDL_ModState = KMOD_LSHIFT then - begin + begin // Join next sentence with current if Lines[0].Current < Lines[0].High then JoinSentence; end; if SDL_ModState = KMOD_LCTRL then - begin + begin // divide note DivideNote; end; @@ -450,7 +450,7 @@ begin SDLK_DELETE: begin if SDL_ModState = KMOD_LCTRL then - begin + begin // moves text to right in current sentence DeleteNote; end; @@ -466,24 +466,24 @@ begin begin // right if SDL_ModState = 0 then - begin + begin Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 0; Inc(CurrentNote); if CurrentNote > Lines[0].Line[Lines[0].Current].HighNote then - CurrentNote := 0; + CurrentNote := 0; Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 1; Lyric.Selected := CurrentNote; end; // ctrl + right if SDL_ModState = KMOD_LCTRL then - begin + begin if Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length > 1 then - begin + begin Dec(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length); Inc(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start); if CurrentNote = 0 then - begin + begin Inc(Lines[0].Line[Lines[0].Current].Start); end; end; @@ -491,10 +491,10 @@ begin // shift + right if SDL_ModState = KMOD_LSHIFT then - begin + begin Inc(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start); if CurrentNote = 0 then - begin + begin Inc(Lines[0].Line[Lines[0].Current].Start); end; if CurrentNote = Lines[0].Line[Lines[0].Current].HighNote then @@ -503,7 +503,7 @@ begin // alt + right if SDL_ModState = KMOD_LALT then - begin + begin Inc(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length); if CurrentNote = Lines[0].Line[Lines[0].Current].HighNote then Inc(Lines[0].Line[Lines[0].Current].End_); @@ -511,7 +511,7 @@ begin // alt + ctrl + shift + right = move all from cursor to right if SDL_ModState = KMOD_LALT + KMOD_LCTRL + KMOD_LSHIFT then - begin + begin MoveAllToEnd(1); end; @@ -521,34 +521,34 @@ begin begin // left if SDL_ModState = 0 then - begin + begin Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 0; Dec(CurrentNote); if CurrentNote = -1 then - CurrentNote := Lines[0].Line[Lines[0].Current].HighNote; + CurrentNote := Lines[0].Line[Lines[0].Current].HighNote; Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 1; Lyric.Selected := CurrentNote; end; // ctrl + left if SDL_ModState = KMOD_LCTRL then - begin + begin Dec(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start); Inc(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length); if CurrentNote = 0 then - begin + begin Dec(Lines[0].Line[Lines[0].Current].Start); end; end; // shift + left if SDL_ModState = KMOD_LSHIFT then - begin + begin Dec(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start); // resizing sentences if CurrentNote = 0 then - begin + begin Dec(Lines[0].Line[Lines[0].Current].Start); end; @@ -559,9 +559,9 @@ begin // alt + left if SDL_ModState = KMOD_LALT then - begin + begin if Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length > 1 then - begin + begin Dec(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length); if CurrentNote = Lines[0].Line[Lines[0].Current].HighNote then Dec(Lines[0].Line[Lines[0].Current].End_); @@ -570,7 +570,7 @@ begin // alt + ctrl + shift + right = move all from cursor to left if SDL_ModState = KMOD_LALT + KMOD_LCTRL + KMOD_LSHIFT then - begin + begin MoveAllToEnd(-1); end; @@ -581,7 +581,7 @@ begin // skip to next sentence if SDL_ModState = 0 then - begin {$IFDEF UseMIDIPort} + begin {$IFDEF UseMIDIPort} MidiOut.PutShort($81, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127); PlaySentenceMidi := false; {$endif} @@ -590,7 +590,7 @@ begin Inc(Lines[0].Current); CurrentNote := 0; if Lines[0].Current > Lines[0].High then - Lines[0].Current := 0; + Lines[0].Current := 0; Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 1; Lyric.AddLine(Lines[0].Current); @@ -601,7 +601,7 @@ begin // decrease tone if SDL_ModState = KMOD_LCTRL then - begin + begin TransposeNote(-1); end; @@ -612,7 +612,7 @@ begin // skip to previous sentence if SDL_ModState = 0 then - begin + begin {$IFDEF UseMIDIPort} MidiOut.PutShort($81, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127); PlaySentenceMidi := false; @@ -622,7 +622,7 @@ begin Dec(Lines[0].Current); CurrentNote := 0; if Lines[0].Current = -1 then - Lines[0].Current := Lines[0].High; + Lines[0].Current := Lines[0].High; Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 1; Lyric.AddLine(Lines[0].Current); @@ -633,7 +633,7 @@ begin // increase tone if SDL_ModState = KMOD_LCTRL then - begin + begin TransposeNote(1); end; end; @@ -645,7 +645,7 @@ end; function TScreenEditSub.ParseInputEditText(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; var - SDL_ModState: Word; + SDL_ModState: word; begin // used when in Text Edit Mode Result := true; @@ -682,11 +682,11 @@ begin begin // right if SDL_ModState = 0 then - begin + begin Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 0; Inc(CurrentNote); if CurrentNote > Lines[0].Line[Lines[0].Current].HighNote then - CurrentNote := 0; + CurrentNote := 0; Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 1; Lyric.Selected := CurrentNote; end; @@ -695,11 +695,11 @@ begin begin // left if SDL_ModState = 0 then - begin + begin Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 0; Dec(CurrentNote); if CurrentNote = -1 then - CurrentNote := Lines[0].Line[Lines[0].Current].HighNote; + CurrentNote := Lines[0].Line[Lines[0].Current].HighNote; Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 1; Lyric.Selected := CurrentNote; end; @@ -880,7 +880,7 @@ begin Lines[0].Line[CNew].Start := Lines[0].Line[CStart].Note[NStart].Start; Lines[0].Line[CNew].Lyric := ''; Lines[0].Line[CNew].End_ := 0; - Lines[0].Line[CNew].BaseNote := 0;//High(Integer); // TODO: High (Integer) will causes a memory exception later in this procedure. Weird! + Lines[0].Line[CNew].BaseNote := 0;//High(integer); // TODO: High (integer) will causes a memory exception later in this procedure. Weird! Lines[0].Line[CNew].HighNote := -1; SetLength(Lines[0].Line[CNew].Note, 0); @@ -910,9 +910,9 @@ begin //recalculate BaseNote of the divided Sentence with Lines[0].Line[CStart] do begin - BaseNote := High(Integer); + BaseNote := High(integer); - For N := 0 to HighNote do + for N := 0 to HighNote do if Note[N].Tone < BaseNote then BaseNote := Note[N].Tone; end; @@ -994,7 +994,7 @@ begin C := Lines[0].Current; //Do Not delete Last Note - if (Lines[0].High > 0) OR (Lines[0].Line[C].HighNote > 0) then + if (Lines[0].High > 0) or (Lines[0].Line[C].HighNote > 0) then begin // we copy all notes from the next to the selected one @@ -1184,7 +1184,6 @@ begin CopySentence(Src + C, Dst + C); end; - constructor TScreenEditSub.Create; begin inherited Create; @@ -1253,7 +1252,7 @@ begin else Error := not CurrentSong.LoadSong(); except - Error := True; + Error := true; end; if Error then @@ -1285,7 +1284,7 @@ begin Lyric.Clear; Lyric.X := 400; Lyric.Y := 500; - Lyric.Align := center; + Lyric.Align := atCenter; Lyric.Size := 42; Lyric.ColR := 0; Lyric.ColG := 0; @@ -1318,7 +1317,6 @@ begin {$IFDEF UseMIDIPort} MidiPos := USTime.GetTime - MidiTime + MidiStart; - // stop the music if (MidiPos > MidiStop) then begin @@ -1337,7 +1335,6 @@ begin if (Lines[0].Line[Lines[0].Current].Note[Pet].Start = AktBeat) then begin - LastClick := AktBeat; {$IFDEF UseMIDIPort} if Pet > 0 then @@ -1429,7 +1426,8 @@ begin end; function TScreenEditSub.GetNoteName(Note: integer): string; -var N1, N2: integer; +var + N1, N2: integer; begin if (Note > 0) then begin diff --git a/unicode/src/screens/UScreenLevel.pas b/unicode/src/screens/UScreenLevel.pas index 188b32f2..caf63a33 100644 --- a/unicode/src/screens/UScreenLevel.pas +++ b/unicode/src/screens/UScreenLevel.pas @@ -34,30 +34,37 @@ interface {$I switches.inc} uses - UMenu, SDL, UDisplay, UMusic, UFiles, SysUtils, UThemes; + UMenu, + SDL, + UDisplay, + UMusic, + UFiles, + SysUtils, + UThemes; type TScreenLevel = class(TMenu) public constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; procedure SetAnimationProgress(Progress: real); override; end; implementation -uses UGraphic, - UMain, - UIni, - USong, - UTexture, - UUnicodeUtils; - -function TScreenLevel.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +uses + UGraphic, + UMain, + UIni, + USong, + UTexture, + UUnicodeUtils; + +function TScreenLevel.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of diff --git a/unicode/src/screens/UScreenLoading.pas b/unicode/src/screens/UScreenLoading.pas index e52823be..2de700ab 100644 --- a/unicode/src/screens/UScreenLoading.pas +++ b/unicode/src/screens/UScreenLoading.pas @@ -43,18 +43,20 @@ uses type TScreenLoading = class(TMenu) public - Fadeout: boolean; + Fadeout: boolean; + constructor Create; override; - procedure onShow; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + procedure onShow; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; end; implementation -uses UGraphic, - UTime; +uses + UGraphic, + UTime; -function TScreenLoading.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenLoading.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; end; diff --git a/unicode/src/screens/UScreenMain.pas b/unicode/src/screens/UScreenMain.pas index eb2e051e..8ce6307c 100644 --- a/unicode/src/screens/UScreenMain.pas +++ b/unicode/src/screens/UScreenMain.pas @@ -52,10 +52,7 @@ type function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; - procedure InteractNext; override; - procedure InteractPrev; override; - procedure InteractInc; override; - procedure InteractDec; override; + procedure SetInteraction(Num: integer); override; procedure SetAnimationProgress(Progress: real); override; end; @@ -80,7 +77,7 @@ function TScreenMain.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; var SDL_ModState: word; begin - Result := True; + Result := true; SDL_ModState := SDL_GetModState and (KMOD_LSHIFT + KMOD_RSHIFT + KMOD_LCTRL + KMOD_RCTRL + KMOD_LALT + KMOD_RALT); @@ -90,7 +87,7 @@ begin // check normal keys case UCS4UpperCase(CharCode) of Ord('Q'): begin - Result := False; + Result := false; Exit; end; Ord('C'): begin @@ -124,7 +121,7 @@ begin SDLK_ESCAPE, SDLK_BACKSPACE: begin - Result := False; + Result := false; end; SDLK_RETURN: @@ -139,7 +136,7 @@ begin if (Ini.Players = 4) then PlayersPlay := 6; - ScreenName.Goto_SingScreen := False; + ScreenName.Goto_SingScreen := false; FadeTo(@ScreenName, SoundLib.Start); end else //show error message @@ -183,7 +180,7 @@ begin //Exit if Interaction = 5 then begin - Result := False; + Result := false; end; end; {** @@ -234,36 +231,19 @@ end; procedure TScreenMain.onShow; begin inherited; + + { display cursor (on moved) } + Display.SetCursor; + {** * Start background music *} SoundLib.StartBgMusic; end; -procedure TScreenMain.InteractNext; -begin - inherited InteractNext; - Text[TextDescription].Text := Theme.Main.Description[Interaction]; - Text[TextDescriptionLong].Text := Theme.Main.DescriptionLong[Interaction]; -end; - -procedure TScreenMain.InteractPrev; -begin - inherited InteractPrev; - Text[TextDescription].Text := Theme.Main.Description[Interaction]; - Text[TextDescriptionLong].Text := Theme.Main.DescriptionLong[Interaction]; -end; - -procedure TScreenMain.InteractDec; -begin - inherited InteractDec; - Text[TextDescription].Text := Theme.Main.Description[Interaction]; - Text[TextDescriptionLong].Text := Theme.Main.DescriptionLong[Interaction]; -end; - -procedure TScreenMain.InteractInc; +procedure TScreenMain.SetInteraction(Num: integer); begin - inherited InteractInc; + inherited SetInteraction(Num); Text[TextDescription].Text := Theme.Main.Description[Interaction]; Text[TextDescriptionLong].Text := Theme.Main.DescriptionLong[Interaction]; end; diff --git a/unicode/src/screens/UScreenName.pas b/unicode/src/screens/UScreenName.pas index 64e90cc9..dc2f14ef 100644 --- a/unicode/src/screens/UScreenName.pas +++ b/unicode/src/screens/UScreenName.pas @@ -45,9 +45,9 @@ uses type TScreenName = class(TMenu) public - Goto_SingScreen: Boolean; //If True then next Screen in SingScreen + Goto_SingScreen: boolean; //If true then next Screen in SingScreen constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; procedure SetAnimationProgress(Progress: real); override; end; @@ -63,13 +63,13 @@ uses UUnicodeUtils; -function TScreenName.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenName.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; var - I: integer; -SDL_ModState: Word; + I: integer; + SDL_ModState: word; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down SDL_ModState := SDL_GetModState and (KMOD_LSHIFT + KMOD_RSHIFT @@ -196,7 +196,6 @@ begin Button[Interaction].Text[0].Text := Ini.NameTemplate[11]; end; - SDLK_BACKSPACE: begin Button[Interaction].Text[0].DeleteLastLetter; @@ -224,7 +223,7 @@ begin else FadeTo(@ScreenLevel); - GoTo_SingScreen := False; + GoTo_SingScreen := false; end; // Up and Down could be done at the same time, @@ -246,7 +245,6 @@ begin LoadFromTheme(Theme.Name); - for I := 1 to 6 do AddButton(Theme.Name.ButtonPlayer[I]); @@ -262,12 +260,14 @@ begin for I := 1 to 6 do Button[I-1].Text[0].Text := Ini.Name[I-1]; - for I := 1 to PlayersPlay do begin + for I := 1 to PlayersPlay do + begin Button[I-1].Visible := true; Button[I-1].Selectable := true; end; - for I := PlayersPlay+1 to 6 do begin + for I := PlayersPlay+1 to 6 do + begin Button[I-1].Visible := false; Button[I-1].Selectable := false; end; diff --git a/unicode/src/screens/UScreenOpen.pas b/unicode/src/screens/UScreenOpen.pas index fa65a1df..718ef546 100644 --- a/unicode/src/screens/UScreenOpen.pas +++ b/unicode/src/screens/UScreenOpen.pas @@ -92,7 +92,7 @@ begin Ord(' '), Ord('-'), Ord('.'), Ord(':'), Ord('\'): begin if Interaction = 0 then - begin + begin Text[TextN].Text := Text[TextN].Text + UCS4ToUTF8String(CharCode); end; end; @@ -123,7 +123,7 @@ begin SDLK_RETURN: begin if (Interaction = 2) then - begin + begin //Update Filename and go to last Screen ConversionFileName := Text[TextN].Text; AudioPlayback.PlaySound(SoundLib.Back); @@ -207,7 +207,8 @@ begin Interaction := 0; end; -(*function TScreenEditSub.Draw: boolean; +(* +function TScreenEditSub.Draw: boolean; var Min: integer; Sec: integer; @@ -219,6 +220,7 @@ end; procedure TScreenEditSub.Finish; begin // -end;*) +end; +*) end. diff --git a/unicode/src/screens/UScreenOptions.pas b/unicode/src/screens/UScreenOptions.pas index ff2a3fe2..24f1f3d7 100644 --- a/unicode/src/screens/UScreenOptions.pas +++ b/unicode/src/screens/UScreenOptions.pas @@ -48,7 +48,7 @@ type public TextDescription: integer; constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; procedure InteractNext; override; procedure InteractPrev; override; @@ -63,10 +63,10 @@ uses UGraphic, UUnicodeUtils; -function TScreenOptions.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenOptions.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of diff --git a/unicode/src/screens/UScreenOptionsAdvanced.pas b/unicode/src/screens/UScreenOptionsAdvanced.pas index a6564bf1..b2337e08 100644 --- a/unicode/src/screens/UScreenOptionsAdvanced.pas +++ b/unicode/src/screens/UScreenOptionsAdvanced.pas @@ -46,7 +46,7 @@ type TScreenOptionsAdvanced = class(TMenu) public constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; end; @@ -57,10 +57,10 @@ uses UUnicodeUtils, SysUtils; -function TScreenOptionsAdvanced.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenOptionsAdvanced.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of @@ -85,7 +85,8 @@ begin begin //SelectLoadAnimation Hidden because it is useless atm //if SelInteraction = 7 then begin - if SelInteraction = 6 then begin + if SelInteraction = 6 then + begin Ini.Save; AudioPlayback.PlaySound(SoundLib.Back); FadeTo(@ScreenOptions); @@ -99,7 +100,8 @@ begin begin //SelectLoadAnimation Hidden because it is useless atm //if (SelInteraction >= 0) and (SelInteraction <= 6) then begin - if (SelInteraction >= 0) and (SelInteraction <= 5) then begin + if (SelInteraction >= 0) and (SelInteraction <= 5) then + begin AudioPlayback.PlaySound(SoundLib.Option); InteractInc; end; @@ -108,7 +110,8 @@ begin begin //SelectLoadAnimation Hidden because it is useless atm //if (SelInteraction >= 0) and (SelInteraction <= 6) then begin - if (SelInteraction >= 0) and (SelInteraction <= 5) then begin + if (SelInteraction >= 0) and (SelInteraction <= 5) then + begin AudioPlayback.PlaySound(SoundLib.Option); InteractDec; end; @@ -127,11 +130,28 @@ begin //SelectLoadAnimation Hidden because it is useless atm //AddSelect(Theme.OptionsAdvanced.SelectLoadAnimation, Ini.LoadAnimation, ILoadAnimation); + Theme.OptionsAdvanced.SelectScreenFade.showArrows := true; + Theme.OptionsAdvanced.SelectScreenFade.oneItemOnly := true; AddSelectSlide(Theme.OptionsAdvanced.SelectScreenFade, Ini.ScreenFade, IScreenFade); + + Theme.OptionsAdvanced.SelectEffectSing.showArrows := true; + Theme.OptionsAdvanced.SelectEffectSing.oneItemOnly := true; AddSelectSlide(Theme.OptionsAdvanced.SelectEffectSing, Ini.EffectSing, IEffectSing); + + Theme.OptionsAdvanced.SelectLineBonus.showArrows := true; + Theme.OptionsAdvanced.SelectLineBonus.oneItemOnly := true; AddSelectSlide(Theme.OptionsAdvanced.SelectLineBonus, Ini.LineBonus, ILineBonus); + + Theme.OptionsAdvanced.SelectOnSongClick.showArrows := true; + Theme.OptionsAdvanced.SelectOnSongClick.oneItemOnly := true; AddSelectSlide(Theme.OptionsAdvanced.SelectOnSongClick, Ini.OnSongClick, IOnSongClick); + + Theme.OptionsAdvanced.SelectAskbeforeDel.showArrows := true; + Theme.OptionsAdvanced.SelectAskbeforeDel.oneItemOnly := true; AddSelectSlide(Theme.OptionsAdvanced.SelectAskbeforeDel, Ini.AskBeforeDel, IAskbeforeDel); + + Theme.OptionsAdvanced.SelectPartyPopup.showArrows := true; + Theme.OptionsAdvanced.SelectPartyPopup.oneItemOnly := true; AddSelectSlide(Theme.OptionsAdvanced.SelectPartyPopup, Ini.PartyPopup, IPartyPopup); AddButton(Theme.OptionsAdvanced.ButtonExit); diff --git a/unicode/src/screens/UScreenOptionsGame.pas b/unicode/src/screens/UScreenOptionsGame.pas index c5af4ca2..515b0110 100644 --- a/unicode/src/screens/UScreenOptionsGame.pas +++ b/unicode/src/screens/UScreenOptionsGame.pas @@ -48,7 +48,7 @@ type public old_Tabs, old_Sorting: integer; constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; procedure RefreshSongs; end; @@ -60,10 +60,10 @@ uses UUnicodeUtils, SysUtils; -function TScreenOptionsGame.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenOptionsGame.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if PressedDown then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of @@ -81,12 +81,12 @@ begin begin AudioPlayback.PlaySound(SoundLib.Back); RefreshSongs; - FadeTo(@ScreenOptions); end; SDLK_RETURN: begin - if SelInteraction = 6 then begin + if SelInteraction = 6 then + begin AudioPlayback.PlaySound(SoundLib.Back); RefreshSongs; FadeTo(@ScreenOptions); @@ -126,15 +126,34 @@ begin old_Sorting := Ini.Sorting; old_Tabs := Ini.Tabs; + Theme.OptionsGame.SelectPlayers.showArrows := true; + Theme.OptionsGame.SelectPlayers.oneItemOnly := true; AddSelectSlide(Theme.OptionsGame.SelectPlayers, Ini.Players, IPlayers); + + Theme.OptionsGame.SelectDifficulty.showArrows := true; + Theme.OptionsGame.SelectDifficulty.oneItemOnly := true; AddSelectSlide(Theme.OptionsGame.SelectDifficulty, Ini.Difficulty, IDifficulty); + + Theme.OptionsGame.SelectLanguage.showArrows := true; + Theme.OptionsGame.SelectLanguage.oneItemOnly := true; AddSelectSlide(Theme.OptionsGame.SelectLanguage, Ini.Language, ILanguage); + + Theme.OptionsGame.SelectTabs.showArrows := true; + Theme.OptionsGame.SelectTabs.oneItemOnly := true; AddSelectSlide(Theme.OptionsGame.SelectTabs, Ini.Tabs, ITabs); + + Theme.OptionsGame.SelectSorting.showArrows := true; + Theme.OptionsGame.SelectSorting.oneItemOnly := true; AddSelectSlide(Theme.OptionsGame.SelectSorting, Ini.Sorting, ISorting); + + Theme.OptionsGame.SelectDebug.showArrows := true; + Theme.OptionsGame.SelectDebug.oneItemOnly := true; AddSelectSlide(Theme.OptionsGame.SelectDebug, Ini.Debug, IDebug); + + AddButton(Theme.OptionsGame.ButtonExit); - if (Length(Button[0].Text)=0) then + if (Length(Button[0].Text) = 0) then AddButtonText(14, 20, Theme.Options.Description[7]); end; @@ -142,7 +161,7 @@ end; //Refresh Songs Patch procedure TScreenOptionsGame.RefreshSongs; begin -if (ini.Sorting <> old_Sorting) or (ini.Tabs <> old_Tabs) then + if (ini.Sorting <> old_Sorting) or (ini.Tabs <> old_Tabs) then ScreenSong.Refresh; end; diff --git a/unicode/src/screens/UScreenOptionsGraphics.pas b/unicode/src/screens/UScreenOptionsGraphics.pas index a0890dbe..155b9ded 100644 --- a/unicode/src/screens/UScreenOptionsGraphics.pas +++ b/unicode/src/screens/UScreenOptionsGraphics.pas @@ -46,7 +46,7 @@ type TScreenOptionsGraphics = class(TMenu) public constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; end; @@ -58,10 +58,10 @@ uses UUnicodeUtils, SysUtils; -function TScreenOptionsGraphics.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenOptionsGraphics.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of @@ -84,10 +84,12 @@ begin end; SDLK_RETURN: begin -{ if SelInteraction <= 1 then begin +{ if SelInteraction <= 1 then + begin Restart := true; end;} - if SelInteraction = 6 then begin + if SelInteraction = 6 then + begin Ini.Save; AudioPlayback.PlaySound(SoundLib.Back); // FIXME: changing the video mode does not work this way in windows @@ -105,14 +107,16 @@ begin InteractPrev; SDLK_RIGHT: begin - if (SelInteraction >= 0) and (SelInteraction < 6) then begin + if (SelInteraction >= 0) and (SelInteraction < 6) then + begin AudioPlayback.PlaySound(SoundLib.Option); InteractInc; end; end; SDLK_LEFT: begin - if (SelInteraction >= 0) and (SelInteraction < 6) then begin + if (SelInteraction >= 0) and (SelInteraction < 6) then + begin AudioPlayback.PlaySound(SoundLib.Option); InteractDec; end; @@ -128,13 +132,29 @@ begin inherited Create; LoadFromTheme(Theme.OptionsGraphics); - AddSelectSlide(Theme.OptionsGraphics.SelectResolution, Ini.Resolution, IResolution); - AddSelectSlide(Theme.OptionsGraphics.SelectFullscreen, Ini.Fullscreen, IFullscreen); - AddSelectSlide(Theme.OptionsGraphics.SelectDepth, Ini.Depth, IDepth); - AddSelectSlide(Theme.OptionsGraphics.SelectVisualizer, Ini.VisualizerOption, IVisualizer); + Theme.OptionsGraphics.SelectResolution.showArrows := true; + Theme.OptionsGraphics.SelectResolution.oneItemOnly := true; + AddSelectSlide(Theme.OptionsGraphics.SelectResolution, Ini.Resolution, IResolution); + + Theme.OptionsGraphics.SelectFullscreen.showArrows := true; + Theme.OptionsGraphics.SelectFullscreen.oneItemOnly := true; + AddSelectSlide(Theme.OptionsGraphics.SelectFullscreen, Ini.Fullscreen, IFullscreen); + + Theme.OptionsGraphics.SelectDepth.showArrows := true; + Theme.OptionsGraphics.SelectDepth.oneItemOnly := true; + AddSelectSlide(Theme.OptionsGraphics.SelectDepth, Ini.Depth, IDepth); + + Theme.OptionsGraphics.SelectVisualizer.showArrows := true; + Theme.OptionsGraphics.SelectVisualizer.oneItemOnly := true; + AddSelectSlide(Theme.OptionsGraphics.SelectVisualizer, Ini.VisualizerOption, IVisualizer); + + Theme.OptionsGraphics.SelectOscilloscope.showArrows := true; + Theme.OptionsGraphics.SelectOscilloscope.oneItemOnly := true; AddSelectSlide(Theme.OptionsGraphics.SelectOscilloscope, Ini.Oscilloscope, IOscilloscope); - AddSelectSlide(Theme.OptionsGraphics.SelectMovieSize, Ini.MovieSize, IMovieSize); + Theme.OptionsGraphics.SelectMovieSize.showArrows := true; + Theme.OptionsGraphics.SelectMovieSize.oneItemOnly := true; + AddSelectSlide(Theme.OptionsGraphics.SelectMovieSize, Ini.MovieSize, IMovieSize); AddButton(Theme.OptionsGraphics.ButtonExit); if (Length(Button[0].Text)=0) then diff --git a/unicode/src/screens/UScreenOptionsLyrics.pas b/unicode/src/screens/UScreenOptionsLyrics.pas index c8995ae4..b4ef7dc2 100644 --- a/unicode/src/screens/UScreenOptionsLyrics.pas +++ b/unicode/src/screens/UScreenOptionsLyrics.pas @@ -46,7 +46,7 @@ type TScreenOptionsLyrics = class(TMenu) public constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; end; @@ -57,10 +57,10 @@ uses UUnicodeUtils, SysUtils; -function TScreenOptionsLyrics.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenOptionsLyrics.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of @@ -83,7 +83,8 @@ begin end; SDLK_RETURN: begin - if SelInteraction = 3 then begin + if SelInteraction = 3 then + begin Ini.Save; AudioPlayback.PlaySound(SoundLib.Back); FadeTo(@ScreenOptions); @@ -95,14 +96,16 @@ begin InteractPrev; SDLK_RIGHT: begin - if (SelInteraction >= 0) and (SelInteraction <= 3) then begin + if (SelInteraction >= 0) and (SelInteraction <= 3) then + begin AudioPlayback.PlaySound(SoundLib.Option); InteractInc; end; end; SDLK_LEFT: begin - if (SelInteraction >= 0) and (SelInteraction <= 3) then begin + if (SelInteraction >= 0) and (SelInteraction <= 3) then + begin AudioPlayback.PlaySound(SoundLib.Option); InteractDec; end; @@ -117,11 +120,17 @@ begin LoadFromTheme(Theme.OptionsLyrics); + Theme.OptionsLyrics.SelectLyricsFont.showArrows := true; + Theme.OptionsLyrics.SelectLyricsFont.oneItemOnly := true; AddSelectSlide(Theme.OptionsLyrics.SelectLyricsFont, Ini.LyricsFont, ILyricsFont); + + Theme.OptionsLyrics.SelectLyricsEffect.showArrows := true; + Theme.OptionsLyrics.SelectLyricsEffect.oneItemOnly := true; AddSelectSlide(Theme.OptionsLyrics.SelectLyricsEffect, Ini.LyricsEffect, ILyricsEffect); - //AddSelect(Theme.OptionsLyrics.SelectSolmization, Ini.Solmization, ISolmization); GAH!!!!11 DIE!!! - AddSelectSlide(Theme.OptionsLyrics.SelectNoteLines, Ini.NoteLines, INoteLines); + Theme.OptionsLyrics.SelectNoteLines.showArrows := true; + Theme.OptionsLyrics.SelectNoteLines.oneItemOnly := true; + AddSelectSlide(Theme.OptionsLyrics.SelectNoteLines, Ini.NoteLines, INoteLines); AddButton(Theme.OptionsLyrics.ButtonExit); if (Length(Button[0].Text)=0) then diff --git a/unicode/src/screens/UScreenOptionsRecord.pas b/unicode/src/screens/UScreenOptionsRecord.pas index 0cf9eb37..cdacd5f6 100644 --- a/unicode/src/screens/UScreenOptionsRecord.pas +++ b/unicode/src/screens/UScreenOptionsRecord.pas @@ -95,7 +95,7 @@ type public constructor Create; override; function Draw: boolean; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; procedure onHide; override; end; @@ -129,10 +129,10 @@ uses UUnicodeUtils, ULog; -function TScreenOptionsRecord.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenOptionsRecord.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of @@ -245,6 +245,8 @@ begin InputDeviceNames[DeviceIndex] := AudioInputProcessor.DeviceList[DeviceIndex].Name; end; // add device-selection slider (InteractionID: 0) + Theme.OptionsRecord.SelectSlideCard.showArrows := true; + Theme.OptionsRecord.SelectSlideCard.oneItemOnly := true; AddSelectSlide(Theme.OptionsRecord.SelectSlideCard, CurrentDeviceIndex, InputDeviceNames); // init source-selection slider @@ -253,6 +255,9 @@ begin begin InputSourceNames[SourceIndex] := InputDevice.Source[SourceIndex].Name; end; + + Theme.OptionsRecord.SelectSlideInput.showArrows := true; + Theme.OptionsRecord.SelectSlideInput.oneItemOnly := true; // add source-selection slider (InteractionID: 1) SelectInputSourceID := AddSelectSlide(Theme.OptionsRecord.SelectSlideInput, InputDeviceCfg.Input, InputSourceNames); @@ -485,7 +490,6 @@ begin PreviewDeviceIndex := -1; end; - procedure TScreenOptionsRecord.DrawVolume(x, y, Width, Height: single); var x1, y1, x2, y2: single; @@ -803,8 +807,7 @@ begin end; end; - Result := True; + Result := true; end; - end. diff --git a/unicode/src/screens/UScreenOptionsSound.pas b/unicode/src/screens/UScreenOptionsSound.pas index d0125a9d..78bf9633 100644 --- a/unicode/src/screens/UScreenOptionsSound.pas +++ b/unicode/src/screens/UScreenOptionsSound.pas @@ -61,14 +61,14 @@ uses function TScreenOptionsSound.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin - Result := True; + Result := true; if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of Ord('Q'): begin - Result := False; + Result := false; Exit; end; end; @@ -137,19 +137,39 @@ begin LoadFromTheme(Theme.OptionsSound); - AddSelectSlide(Theme.OptionsSound.SelectSlideVoicePassthrough, - Ini.VoicePassthrough, IVoicePassthrough); - AddSelectSlide(Theme.OptionsSound.SelectBackgroundMusic, - Ini.BackgroundMusicOption, IBackgroundMusic); - AddSelectSlide(Theme.OptionsSound.SelectMicBoost, Ini.MicBoost, IMicBoost); + Theme.OptionsSound.SelectSlideVoicePassthrough.showArrows := true; + Theme.OptionsSound.SelectSlideVoicePassthrough.oneItemOnly := true; + AddSelectSlide(Theme.OptionsSound.SelectSlideVoicePassthrough, Ini.VoicePassthrough, IVoicePassthrough); + + Theme.OptionsSound.SelectBackgroundMusic.showArrows := true; + Theme.OptionsSound.SelectBackgroundMusic.oneItemOnly := true; + AddSelectSlide(Theme.OptionsSound.SelectBackgroundMusic, Ini.BackgroundMusicOption, IBackgroundMusic); + // TODO: - MicBoost needs to be moved to ScreenOptionsRecord + Theme.OptionsSound.SelectMicBoost.showArrows := true; + Theme.OptionsSound.SelectMicBoost.oneItemOnly := true; + AddSelectSlide(Theme.OptionsSound.SelectMicBoost, Ini.MicBoost, IMicBoost); + + + Theme.OptionsSound.SelectClickAssist.showArrows := true; + Theme.OptionsSound.SelectClickAssist.oneItemOnly := true; AddSelectSlide(Theme.OptionsSound.SelectClickAssist, Ini.ClickAssist, IClickAssist); + + Theme.OptionsSound.SelectBeatClick.showArrows := true; + Theme.OptionsSound.SelectBeatClick.oneItemOnly := true; AddSelectSlide(Theme.OptionsSound.SelectBeatClick, Ini.BeatClick, IBeatClick); + + Theme.OptionsSound.SelectThreshold.showArrows := true; + Theme.OptionsSound.SelectThreshold.oneItemOnly := true; AddSelectSlide(Theme.OptionsSound.SelectThreshold, Ini.ThresholdIndex, IThreshold); - AddSelectSlide(Theme.OptionsSound.SelectSlidePreviewVolume, - Ini.PreviewVolume, IPreviewVolume); - AddSelectSlide(Theme.OptionsSound.SelectSlidePreviewFading, - Ini.PreviewFading, IPreviewFading); + + Theme.OptionsSound.SelectSlidePreviewVolume.showArrows := true; + Theme.OptionsSound.SelectSlidePreviewVolume.oneItemOnly := true; + AddSelectSlide(Theme.OptionsSound.SelectSlidePreviewVolume, Ini.PreviewVolume, IPreviewVolume); + + Theme.OptionsSound.SelectSlidePreviewFading.showArrows := true; + Theme.OptionsSound.SelectSlidePreviewFading.oneItemOnly := true; + AddSelectSlide(Theme.OptionsSound.SelectSlidePreviewFading, Ini.PreviewFading, IPreviewFading); AddButton(Theme.OptionsSound.ButtonExit); if (Length(Button[0].Text) = 0) then diff --git a/unicode/src/screens/UScreenOptionsThemes.pas b/unicode/src/screens/UScreenOptionsThemes.pas index 64816d34..9025582c 100644 --- a/unicode/src/screens/UScreenOptionsThemes.pas +++ b/unicode/src/screens/UScreenOptionsThemes.pas @@ -47,9 +47,9 @@ type private procedure ReloadTheme; public - SkinSelect: Integer; + SkinSelect: integer; constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; procedure InteractInc; override; procedure InteractDec; override; @@ -65,10 +65,10 @@ uses UUnicodeUtils, USkins; -function TScreenOptionsThemes.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenOptionsThemes.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of @@ -162,10 +162,16 @@ begin LoadFromTheme(Theme.OptionsThemes); + Theme.OptionsThemes.SelectTheme.showArrows := true; + Theme.OptionsThemes.SelectTheme.oneItemOnly := true; AddSelectSlide(Theme.OptionsThemes.SelectTheme, Ini.Theme, ITheme); + Theme.OptionsThemes.SelectSkin.showArrows := true; + Theme.OptionsThemes.SelectSkin.oneItemOnly := true; SkinSelect := AddSelectSlide(Theme.OptionsThemes.SelectSkin, Ini.SkinNo, ISkin); + Theme.OptionsThemes.SelectColor.showArrows := true; + Theme.OptionsThemes.SelectColor.oneItemOnly := true; AddSelectSlide(Theme.OptionsThemes.SelectColor, Ini.Color, IColor); AddButton(Theme.OptionsThemes.ButtonExit); @@ -191,7 +197,6 @@ begin ScreenOptionsThemes.Interaction := self.Interaction; ScreenOptionsThemes.Draw; - Display.Draw; SwapBuffers; diff --git a/unicode/src/screens/UScreenPartyNewRound.pas b/unicode/src/screens/UScreenPartyNewRound.pas index afcf2f9d..e09393b4 100644 --- a/unicode/src/screens/UScreenPartyNewRound.pas +++ b/unicode/src/screens/UScreenPartyNewRound.pas @@ -46,61 +46,60 @@ type TScreenPartyNewRound = class(TMenu) public //Texts: - TextRound1: Cardinal; - TextRound2: Cardinal; - TextRound3: Cardinal; - TextRound4: Cardinal; - TextRound5: Cardinal; - TextRound6: Cardinal; - TextRound7: Cardinal; - - TextWinner1: Cardinal; - TextWinner2: Cardinal; - TextWinner3: Cardinal; - TextWinner4: Cardinal; - TextWinner5: Cardinal; - TextWinner6: Cardinal; - TextWinner7: Cardinal; - - TextNextRound: Cardinal; - TextNextRoundNo: Cardinal; - TextNextPlayer1: Cardinal; - TextNextPlayer2: Cardinal; - TextNextPlayer3: Cardinal; + TextRound1: cardinal; + TextRound2: cardinal; + TextRound3: cardinal; + TextRound4: cardinal; + TextRound5: cardinal; + TextRound6: cardinal; + TextRound7: cardinal; + + TextWinner1: cardinal; + TextWinner2: cardinal; + TextWinner3: cardinal; + TextWinner4: cardinal; + TextWinner5: cardinal; + TextWinner6: cardinal; + TextWinner7: cardinal; + + TextNextRound: cardinal; + TextNextRoundNo: cardinal; + TextNextPlayer1: cardinal; + TextNextPlayer2: cardinal; + TextNextPlayer3: cardinal; //Statics - StaticRound1: Cardinal; - StaticRound2: Cardinal; - StaticRound3: Cardinal; - StaticRound4: Cardinal; - StaticRound5: Cardinal; - StaticRound6: Cardinal; - StaticRound7: Cardinal; + StaticRound1: cardinal; + StaticRound2: cardinal; + StaticRound3: cardinal; + StaticRound4: cardinal; + StaticRound5: cardinal; + StaticRound6: cardinal; + StaticRound7: cardinal; //Scores - TextScoreTeam1: Cardinal; - TextScoreTeam2: Cardinal; - TextScoreTeam3: Cardinal; - TextNameTeam1: Cardinal; - TextNameTeam2: Cardinal; - TextNameTeam3: Cardinal; + TextScoreTeam1: cardinal; + TextScoreTeam2: cardinal; + TextScoreTeam3: cardinal; + TextNameTeam1: cardinal; + TextNameTeam2: cardinal; + TextNameTeam3: cardinal; - TextTeam1Players: Cardinal; - TextTeam2Players: Cardinal; - TextTeam3Players: Cardinal; - - StaticTeam1: Cardinal; - StaticTeam2: Cardinal; - StaticTeam3: Cardinal; - StaticNextPlayer1: Cardinal; - StaticNextPlayer2: Cardinal; - StaticNextPlayer3: Cardinal; + TextTeam1Players: cardinal; + TextTeam2Players: cardinal; + TextTeam3Players: cardinal; + StaticTeam1: cardinal; + StaticTeam2: cardinal; + StaticTeam3: cardinal; + StaticNextPlayer1: cardinal; + StaticNextPlayer2: cardinal; + StaticNextPlayer3: cardinal; constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; procedure SetAnimationProgress(Progress: real); override; end; @@ -119,10 +118,10 @@ uses ULog, UUnicodeUtils; -function TScreenPartyNewRound.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenPartyNewRound.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of @@ -219,19 +218,19 @@ end; procedure TScreenPartyNewRound.onShow; var - I: Integer; - function GetTeamPlayers(const Num: Byte): String; + I: integer; + function GetTeamPlayers(const Num: byte): string; var Players: array of UTF8String; - //J: Byte; - begin // to-do : Party - if (Num-1 >= {PartySession.Teams.NumTeams}0) then + J: byte; + begin + if (Num-1 >= PartySession.Teams.NumTeams) then exit; - {//Create Players Array + //Create Players array SetLength(Players, PartySession.Teams.TeamInfo[Num-1].NumPlayers); - For J := 0 to PartySession.Teams.TeamInfo[Num-1].NumPlayers-1 do - Players[J] := String(PartySession.Teams.TeamInfo[Num-1].PlayerInfo[J].Name);} + for J := 0 to PartySession.Teams.TeamInfo[Num-1].NumPlayers-1 do + Players[J] := string(PartySession.Teams.TeamInfo[Num-1].PlayerInfo[J].Name); //Implode and Return Result := Language.Implode(Players); @@ -239,193 +238,191 @@ var begin inherited; - // to-do : Party - //PartySession.StartRound; + PartySession.StartRound; //Set Visibility of Round Infos - // to-do : Party - I := {Length(PartySession.Rounds)}0; + I := Length(PartySession.Rounds); if (I >= 1) then begin - Static[StaticRound1].Visible := True; - Text[TextRound1].Visible := True; - Text[TextWinner1].Visible := True; + Static[StaticRound1].Visible := true; + Text[TextRound1].Visible := true; + Text[TextWinner1].Visible := true; //Texts: - //Text[TextRound1].Text := Language.Translate(DllMan.Plugins[PartySession.Rounds[0].Plugin].Name); - //Text[TextWinner1].Text := PartySession.GetWinnerString(0); + Text[TextRound1].Text := Language.Translate(DllMan.Plugins[PartySession.Rounds[0].Plugin].Name); + Text[TextWinner1].Text := PartySession.GetWinnerString(0); end else begin - Static[StaticRound1].Visible := False; - Text[TextRound1].Visible := False; - Text[TextWinner1].Visible := False; + Static[StaticRound1].Visible := false; + Text[TextRound1].Visible := false; + Text[TextWinner1].Visible := false; end; if (I >= 2) then begin - Static[StaticRound2].Visible := True; - Text[TextRound2].Visible := True; - Text[TextWinner2].Visible := True; + Static[StaticRound2].Visible := true; + Text[TextRound2].Visible := true; + Text[TextWinner2].Visible := true; //Texts: - //Text[TextRound2].Text := Language.Translate(DllMan.Plugins[PartySession.Rounds[1].Plugin].Name); - //Text[TextWinner2].Text := PartySession.GetWinnerString(1); + Text[TextRound2].Text := Language.Translate(DllMan.Plugins[PartySession.Rounds[1].Plugin].Name); + Text[TextWinner2].Text := PartySession.GetWinnerString(1); end else begin - Static[StaticRound2].Visible := False; - Text[TextRound2].Visible := False; - Text[TextWinner2].Visible := False; + Static[StaticRound2].Visible := false; + Text[TextRound2].Visible := false; + Text[TextWinner2].Visible := false; end; if (I >= 3) then begin - Static[StaticRound3].Visible := True; - Text[TextRound3].Visible := True; - Text[TextWinner3].Visible := True; + Static[StaticRound3].Visible := true; + Text[TextRound3].Visible := true; + Text[TextWinner3].Visible := true; //Texts: - //Text[TextRound3].Text := Language.Translate(DllMan.Plugins[PartySession.Rounds[2].Plugin].Name); - //Text[TextWinner3].Text := PartySession.GetWinnerString(2); + Text[TextRound3].Text := Language.Translate(DllMan.Plugins[PartySession.Rounds[2].Plugin].Name); + Text[TextWinner3].Text := PartySession.GetWinnerString(2); end else begin - Static[StaticRound3].Visible := False; - Text[TextRound3].Visible := False; - Text[TextWinner3].Visible := False; + Static[StaticRound3].Visible := false; + Text[TextRound3].Visible := false; + Text[TextWinner3].Visible := false; end; if (I >= 4) then begin - Static[StaticRound4].Visible := True; - Text[TextRound4].Visible := True; - Text[TextWinner4].Visible := True; + Static[StaticRound4].Visible := true; + Text[TextRound4].Visible := true; + Text[TextWinner4].Visible := true; //Texts: - //Text[TextRound4].Text := Language.Translate(DllMan.Plugins[PartySession.Rounds[3].Plugin].Name); - //Text[TextWinner4].Text := PartySession.GetWinnerString(3); + Text[TextRound4].Text := Language.Translate(DllMan.Plugins[PartySession.Rounds[3].Plugin].Name); + Text[TextWinner4].Text := PartySession.GetWinnerString(3); end else begin - Static[StaticRound4].Visible := False; - Text[TextRound4].Visible := False; - Text[TextWinner4].Visible := False; + Static[StaticRound4].Visible := false; + Text[TextRound4].Visible := false; + Text[TextWinner4].Visible := false; end; if (I >= 5) then begin - Static[StaticRound5].Visible := True; - Text[TextRound5].Visible := True; - Text[TextWinner5].Visible := True; + Static[StaticRound5].Visible := true; + Text[TextRound5].Visible := true; + Text[TextWinner5].Visible := true; //Texts: - //Text[TextRound5].Text := Language.Translate(DllMan.Plugins[PartySession.Rounds[4].Plugin].Name); - //Text[TextWinner5].Text := PartySession.GetWinnerString(4); + Text[TextRound5].Text := Language.Translate(DllMan.Plugins[PartySession.Rounds[4].Plugin].Name); + Text[TextWinner5].Text := PartySession.GetWinnerString(4); end else begin - Static[StaticRound5].Visible := False; - Text[TextRound5].Visible := False; - Text[TextWinner5].Visible := False; + Static[StaticRound5].Visible := false; + Text[TextRound5].Visible := false; + Text[TextWinner5].Visible := false; end; if (I >= 6) then begin - Static[StaticRound6].Visible := True; - Text[TextRound6].Visible := True; - Text[TextWinner6].Visible := True; + Static[StaticRound6].Visible := true; + Text[TextRound6].Visible := true; + Text[TextWinner6].Visible := true; //Texts: - //Text[TextRound6].Text := Language.Translate(DllMan.Plugins[PartySession.Rounds[5].Plugin].Name); - //Text[TextWinner6].Text := PartySession.GetWinnerString(5); + Text[TextRound6].Text := Language.Translate(DllMan.Plugins[PartySession.Rounds[5].Plugin].Name); + Text[TextWinner6].Text := PartySession.GetWinnerString(5); end else begin - Static[StaticRound6].Visible := False; - Text[TextRound6].Visible := False; - Text[TextWinner6].Visible := False; + Static[StaticRound6].Visible := false; + Text[TextRound6].Visible := false; + Text[TextWinner6].Visible := false; end; if (I >= 7) then begin - Static[StaticRound7].Visible := True; - Text[TextRound7].Visible := True; - Text[TextWinner7].Visible := True; + Static[StaticRound7].Visible := true; + Text[TextRound7].Visible := true; + Text[TextWinner7].Visible := true; //Texts: - //Text[TextRound7].Text := Language.Translate(DllMan.Plugins[PartySession.Rounds[6].Plugin].Name); - //Text[TextWinner7].Text := PartySession.GetWinnerString(6); + Text[TextRound7].Text := Language.Translate(DllMan.Plugins[PartySession.Rounds[6].Plugin].Name); + Text[TextWinner7].Text := PartySession.GetWinnerString(6); end else begin - Static[StaticRound7].Visible := False; - Text[TextRound7].Visible := False; - Text[TextWinner7].Visible := False; + Static[StaticRound7].Visible := false; + Text[TextRound7].Visible := false; + Text[TextWinner7].Visible := false; end; //Display Scores - {if (PartySession.Teams.NumTeams >= 1) then + if (PartySession.Teams.NumTeams >= 1) then begin Text[TextScoreTeam1].Text := InttoStr(PartySession.Teams.TeamInfo[0].Score); - Text[TextNameTeam1].Text := String(PartySession.Teams.TeamInfo[0].Name); + Text[TextNameTeam1].Text := string(PartySession.Teams.TeamInfo[0].Name); Text[TextTeam1Players].Text := GetTeamPlayers(1); - Text[TextScoreTeam1].Visible := True; - Text[TextNameTeam1].Visible := True; - Text[TextTeam1Players].Visible := True; - Static[StaticTeam1].Visible := True; - Static[StaticNextPlayer1].Visible := True; + Text[TextScoreTeam1].Visible := true; + Text[TextNameTeam1].Visible := true; + Text[TextTeam1Players].Visible := true; + Static[StaticTeam1].Visible := true; + Static[StaticNextPlayer1].Visible := true; end else begin - Text[TextScoreTeam1].Visible := False; - Text[TextNameTeam1].Visible := False; - Text[TextTeam1Players].Visible := False; - Static[StaticTeam1].Visible := False; - Static[StaticNextPlayer1].Visible := False; + Text[TextScoreTeam1].Visible := false; + Text[TextNameTeam1].Visible := false; + Text[TextTeam1Players].Visible := false; + Static[StaticTeam1].Visible := false; + Static[StaticNextPlayer1].Visible := false; end; if (PartySession.Teams.NumTeams >= 2) then begin Text[TextScoreTeam2].Text := InttoStr(PartySession.Teams.TeamInfo[1].Score); - Text[TextNameTeam2].Text := String(PartySession.Teams.TeamInfo[1].Name); + Text[TextNameTeam2].Text := string(PartySession.Teams.TeamInfo[1].Name); Text[TextTeam2Players].Text := GetTeamPlayers(2); - Text[TextScoreTeam2].Visible := True; - Text[TextNameTeam2].Visible := True; - Text[TextTeam2Players].Visible := True; - Static[StaticTeam2].Visible := True; - Static[StaticNextPlayer2].Visible := True; + Text[TextScoreTeam2].Visible := true; + Text[TextNameTeam2].Visible := true; + Text[TextTeam2Players].Visible := true; + Static[StaticTeam2].Visible := true; + Static[StaticNextPlayer2].Visible := true; end else begin - Text[TextScoreTeam2].Visible := False; - Text[TextNameTeam2].Visible := False; - Text[TextTeam2Players].Visible := False; - Static[StaticTeam2].Visible := False; - Static[StaticNextPlayer2].Visible := False; + Text[TextScoreTeam2].Visible := false; + Text[TextNameTeam2].Visible := false; + Text[TextTeam2Players].Visible := false; + Static[StaticTeam2].Visible := false; + Static[StaticNextPlayer2].Visible := false; end; if (PartySession.Teams.NumTeams >= 3) then begin Text[TextScoreTeam3].Text := InttoStr(PartySession.Teams.TeamInfo[2].Score); - Text[TextNameTeam3].Text := String(PartySession.Teams.TeamInfo[2].Name); + Text[TextNameTeam3].Text := string(PartySession.Teams.TeamInfo[2].Name); Text[TextTeam3Players].Text := GetTeamPlayers(3); - Text[TextScoreTeam3].Visible := True; - Text[TextNameTeam3].Visible := True; - Text[TextTeam3Players].Visible := True; - Static[StaticTeam3].Visible := True; - Static[StaticNextPlayer3].Visible := True; + Text[TextScoreTeam3].Visible := true; + Text[TextNameTeam3].Visible := true; + Text[TextTeam3Players].Visible := true; + Static[StaticTeam3].Visible := true; + Static[StaticNextPlayer3].Visible := true; end else begin - Text[TextScoreTeam3].Visible := False; - Text[TextNameTeam3].Visible := False; - Text[TextTeam3Players].Visible := False; - Static[StaticTeam3].Visible := False; - Static[StaticNextPlayer3].Visible := False; + Text[TextScoreTeam3].Visible := false; + Text[TextNameTeam3].Visible := false; + Text[TextTeam3Players].Visible := false; + Static[StaticTeam3].Visible := false; + Static[StaticNextPlayer3].Visible := false; end; //nextRound Texts @@ -434,26 +431,26 @@ begin if (PartySession.Teams.NumTeams >= 1) then begin Text[TextNextPlayer1].Text := PartySession.Teams.Teaminfo[0].Playerinfo[PartySession.Teams.Teaminfo[0].CurPlayer].Name; - Text[TextNextPlayer1].Visible := True; + Text[TextNextPlayer1].Visible := true; end else - Text[TextNextPlayer1].Visible := False; + Text[TextNextPlayer1].Visible := false; if (PartySession.Teams.NumTeams >= 2) then begin Text[TextNextPlayer2].Text := PartySession.Teams.Teaminfo[1].Playerinfo[PartySession.Teams.Teaminfo[1].CurPlayer].Name; - Text[TextNextPlayer2].Visible := True; + Text[TextNextPlayer2].Visible := true; end else - Text[TextNextPlayer2].Visible := False; + Text[TextNextPlayer2].Visible := false; if (PartySession.Teams.NumTeams >= 3) then begin Text[TextNextPlayer3].Text := PartySession.Teams.Teaminfo[2].Playerinfo[PartySession.Teams.Teaminfo[2].CurPlayer].Name; - Text[TextNextPlayer3].Visible := True; + Text[TextNextPlayer3].Visible := true; end else - Text[TextNextPlayer3].Visible := False; } + Text[TextNextPlayer3].Visible := false; end; procedure TScreenPartyNewRound.SetAnimationProgress(Progress: real); diff --git a/unicode/src/screens/UScreenPartyOptions.pas b/unicode/src/screens/UScreenPartyOptions.pas index 74c51b15..b7226a5e 100644 --- a/unicode/src/screens/UScreenPartyOptions.pas +++ b/unicode/src/screens/UScreenPartyOptions.pas @@ -125,11 +125,11 @@ begin // Don't start when SinglePlayer Teams but only Multiplayer Plugins available OnlyMultiPlayer := true; for I := 0 to High(DLLMan.Plugins) do - begin + begin OnlyMultiPlayer := (OnlyMultiPlayer and DLLMan.Plugins[I].TeamModeOnly); end; if (OnlyMultiPlayer) and ((NumPlayer1 = 0) or (NumPlayer2 = 0) or ((NumPlayer3 = 0) and (NumTeams = 1))) then - begin + begin ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_PLUGINS')); Exit; end; @@ -137,12 +137,11 @@ begin Ini.Difficulty := SelectsS[SelectLevel].SelectedOption; Ini.SaveLevel; - //Save Num Teams: - {PartySession.Teams.NumTeams := NumTeams + 2; + PartySession.Teams.NumTeams := NumTeams + 2; PartySession.Teams.Teaminfo[0].NumPlayers := NumPlayer1+1; PartySession.Teams.Teaminfo[1].NumPlayers := NumPlayer2+1; - PartySession.Teams.Teaminfo[2].NumPlayers := NumPlayer3+1;} + PartySession.Teams.Teaminfo[2].NumPlayers := NumPlayer3+1; //Save Playlist PlaylistMan.Mode := TSingMode( Playlist ); @@ -171,8 +170,7 @@ begin PlaylistMan.CurPlayList := Playlist2; //Start Party - // to-do : Party - //PartySession.StartNewParty(Rounds + 2); + PartySession.StartNewParty(Rounds + 2); AudioPlayback.PlaySound(SoundLib.Start); //Go to Player Screen @@ -258,7 +256,8 @@ begin end; procedure TScreenPartyOptions.SetPlaylist2; -var I: integer; +var + I: integer; begin case Playlist of 0: diff --git a/unicode/src/screens/UScreenPartyPlayer.pas b/unicode/src/screens/UScreenPartyPlayer.pas index 3e453058..9f40983a 100644 --- a/unicode/src/screens/UScreenPartyPlayer.pas +++ b/unicode/src/screens/UScreenPartyPlayer.pas @@ -45,26 +45,26 @@ uses type TScreenPartyPlayer = class(TMenu) public - Team1Name: Cardinal; - Player1Name: Cardinal; - Player2Name: Cardinal; - Player3Name: Cardinal; - Player4Name: Cardinal; - - Team2Name: Cardinal; - Player5Name: Cardinal; - Player6Name: Cardinal; - Player7Name: Cardinal; - Player8Name: Cardinal; - - Team3Name: Cardinal; - Player9Name: Cardinal; - Player10Name: Cardinal; - Player11Name: Cardinal; - Player12Name: Cardinal; + Team1Name: cardinal; + Player1Name: cardinal; + Player2Name: cardinal; + Player3Name: cardinal; + Player4Name: cardinal; + + Team2Name: cardinal; + Player5Name: cardinal; + Player6Name: cardinal; + Player7Name: cardinal; + Player8Name: cardinal; + + Team3Name: cardinal; + Player9Name: cardinal; + Player10Name: cardinal; + Player11Name: cardinal; + Player12Name: cardinal; constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; procedure SetAnimationProgress(Progress: real); override; end; @@ -79,9 +79,11 @@ uses UParty, UUnicodeUtils; -function TScreenPartyPlayer.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenPartyPlayer.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; var - SDL_ModState: Word; + SDL_ModState: word; + I, J: integer; + procedure IntNext; begin repeat @@ -245,7 +247,7 @@ begin SDLK_RETURN: begin - {//Save PlayerNames + //Save PlayerNames for I := 0 to PartySession.Teams.NumTeams-1 do begin PartySession.Teams.Teaminfo[I].Name := PChar(Button[I*5].Text[0].Text); @@ -256,8 +258,8 @@ begin end; end; - AudioPlayback.PlayStart; - FadeTo(@ScreenPartyNewRound);} + AudioPlayback.PlaySound(SoundLib.Start); + FadeTo(@ScreenPartyNewRound); end; // Up and Down could be done at the same time, @@ -272,8 +274,6 @@ begin end; constructor TScreenPartyPlayer.Create; -//var -// I: integer; // Auto Removed, Unused Variable begin inherited Create; @@ -321,9 +321,9 @@ begin Button[10].Text[0].Text := Ini.NameTeam[2]; // Templates for Names Mod end - {If (PartySession.Teams.NumTeams>=1) then + if (PartySession.Teams.NumTeams>=1) then begin - Button[0].Visible := True; + Button[0].Visible := true; Button[1].Visible := (PartySession.Teams.Teaminfo[0].NumPlayers >=1); Button[2].Visible := (PartySession.Teams.Teaminfo[0].NumPlayers >=2); Button[3].Visible := (PartySession.Teams.Teaminfo[0].NumPlayers >=3); @@ -331,16 +331,16 @@ begin end else begin - Button[0].Visible := False; - Button[1].Visible := False; - Button[2].Visible := False; - Button[3].Visible := False; - Button[4].Visible := False; + Button[0].Visible := false; + Button[1].Visible := false; + Button[2].Visible := false; + Button[3].Visible := false; + Button[4].Visible := false; end; - If (PartySession.Teams.NumTeams>=2) then + if (PartySession.Teams.NumTeams>=2) then begin - Button[5].Visible := True; + Button[5].Visible := true; Button[6].Visible := (PartySession.Teams.Teaminfo[1].NumPlayers >=1); Button[7].Visible := (PartySession.Teams.Teaminfo[1].NumPlayers >=2); Button[8].Visible := (PartySession.Teams.Teaminfo[1].NumPlayers >=3); @@ -348,16 +348,16 @@ begin end else begin - Button[5].Visible := False; - Button[6].Visible := False; - Button[7].Visible := False; - Button[8].Visible := False; - Button[9].Visible := False; + Button[5].Visible := false; + Button[6].Visible := false; + Button[7].Visible := false; + Button[8].Visible := false; + Button[9].Visible := false; end; - If (PartySession.Teams.NumTeams>=3) then + if (PartySession.Teams.NumTeams>=3) then begin - Button[10].Visible := True; + Button[10].Visible := true; Button[11].Visible := (PartySession.Teams.Teaminfo[2].NumPlayers >=1); Button[12].Visible := (PartySession.Teams.Teaminfo[2].NumPlayers >=2); Button[13].Visible := (PartySession.Teams.Teaminfo[2].NumPlayers >=3); @@ -365,12 +365,12 @@ begin end else begin - Button[10].Visible := False; - Button[11].Visible := False; - Button[12].Visible := False; - Button[13].Visible := False; - Button[14].Visible := False; - end; } + Button[10].Visible := false; + Button[11].Visible := false; + Button[12].Visible := false; + Button[13].Visible := false; + Button[14].Visible := false; + end; end; diff --git a/unicode/src/screens/UScreenPartyScore.pas b/unicode/src/screens/UScreenPartyScore.pas index 5934a389..6b6d98e6 100644 --- a/unicode/src/screens/UScreenPartyScore.pas +++ b/unicode/src/screens/UScreenPartyScore.pas @@ -44,32 +44,32 @@ uses type TScreenPartyScore = class(TMenu) public - TextScoreTeam1: Cardinal; - TextScoreTeam2: Cardinal; - TextScoreTeam3: Cardinal; - TextNameTeam1: Cardinal; - TextNameTeam2: Cardinal; - TextNameTeam3: Cardinal; - StaticTeam1: Cardinal; - StaticTeam1BG: Cardinal; - StaticTeam1Deco: Cardinal; - StaticTeam2: Cardinal; - StaticTeam2BG: Cardinal; - StaticTeam2Deco: Cardinal; - StaticTeam3: Cardinal; - StaticTeam3BG: Cardinal; - StaticTeam3Deco: Cardinal; - TextWinner: Cardinal; - - DecoTex: Array[0..5] of Integer; - DecoColor: Array[0..5] of Record - R, G, B: Real; + TextScoreTeam1: cardinal; + TextScoreTeam2: cardinal; + TextScoreTeam3: cardinal; + TextNameTeam1: cardinal; + TextNameTeam2: cardinal; + TextNameTeam3: cardinal; + StaticTeam1: cardinal; + StaticTeam1BG: cardinal; + StaticTeam1Deco: cardinal; + StaticTeam2: cardinal; + StaticTeam2BG: cardinal; + StaticTeam2Deco: cardinal; + StaticTeam3: cardinal; + StaticTeam3BG: cardinal; + StaticTeam3Deco: cardinal; + TextWinner: cardinal; + + DecoTex: array[0..5] of integer; + DecoColor: array[0..5] of Record + R, G, B: real; end; - MaxScore: Word; + MaxScore: word; constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; procedure SetAnimationProgress(Progress: real); override; end; @@ -86,10 +86,10 @@ uses USkins, UUnicodeUtils; -function TScreenPartyScore.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenPartyScore.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of @@ -106,22 +106,21 @@ begin SDLK_BACKSPACE : begin AudioPlayback.PlaySound(SoundLib.Start); - {if (PartySession.CurRound < High(PartySession.Rounds)) then + if (PartySession.CurRound < High(PartySession.Rounds)) then FadeTo(@ScreenPartyNewRound) - else // to-do : Party + else begin - PartySession.EndRound; } + PartySession.EndRound; FadeTo(@ScreenPartyWin); - //end; + end; end; SDLK_RETURN: begin AudioPlayback.PlaySound(SoundLib.Start); - // to-do : Party - {if (PartySession.CurRound < High(PartySession.Rounds)) then + if (PartySession.CurRound < High(PartySession.Rounds)) then FadeTo(@ScreenPartyNewRound) - else } + else FadeTo(@ScreenPartyWin); end; end; @@ -132,8 +131,8 @@ constructor TScreenPartyScore.Create; var // I: integer; // Auto Removed, Unused Variable Tex: TTexture; - R, G, B: Real; - Color: Integer; + R, G, B: real; + Color: integer; begin inherited Create; @@ -198,12 +197,11 @@ end; procedure TScreenPartyScore.onShow; var - I, J: Integer; - Placings: Array [0..5] of Byte; + I, J: integer; + Placings: array [0..5] of byte; begin inherited; - //Get Maxscore MaxScore := 0; @@ -218,11 +216,10 @@ begin begin Placings[I] := 0; for J := 0 to ScreenSingModi.PlayerInfo.NumPlayers - 1 do - If (ScreenSingModi.PlayerInfo.Playerinfo[J].Score > ScreenSingModi.PlayerInfo.Playerinfo[I].Score) then + if (ScreenSingModi.PlayerInfo.Playerinfo[J].Score > ScreenSingModi.PlayerInfo.Playerinfo[I].Score) then Inc(Placings[I]); end; - //Set Static Length Static[StaticTeam1].Texture.ScaleW := ScreenSingModi.PlayerInfo.Playerinfo[0].Percentage / 100; Static[StaticTeam2].Texture.ScaleW := ScreenSingModi.PlayerInfo.Playerinfo[1].Percentage / 100; @@ -233,16 +230,16 @@ begin if Static[StaticTeam2].Texture.ScaleW > 99 then Static[StaticTeam2].Texture.ScaleW := 99; if Static[StaticTeam3].Texture.ScaleW > 99 then Static[StaticTeam3].Texture.ScaleW := 99; - //End Last Round // to-do : Party - //PartySession.EndRound; + //End Last Round + PartySession.EndRound; //Set Winnertext - //Text[TextWinner].Text := Format(Language.Translate('PARTY_SCORE_WINS'), [PartySession.GetWinnerString(PartySession.CurRound)]); + Text[TextWinner].Text := Format(Language.Translate('PARTY_SCORE_WINS'), [PartySession.GetWinnerString(PartySession.CurRound)]); if (ScreenSingModi.PlayerInfo.NumPlayers >= 1) then begin Text[TextScoreTeam1].Text := InttoStr(ScreenSingModi.PlayerInfo.Playerinfo[0].Score); - Text[TextNameTeam1].Text := String(ScreenSingModi.TeamInfo.Teaminfo[0].Name); + Text[TextNameTeam1].Text := string(ScreenSingModi.TeamInfo.Teaminfo[0].Name); //Set Deco Texture if Theme.PartyScore.DecoTextures.ChangeTextures then @@ -253,25 +250,25 @@ begin Static[StaticTeam1Deco].Texture.ColB := DecoColor[Placings[0]].B; end; - Text[TextScoreTeam1].Visible := True; - Text[TextNameTeam1].Visible := True; - Static[StaticTeam1].Visible := True; - Static[StaticTeam1BG].Visible := True; - Static[StaticTeam1Deco].Visible := True; + Text[TextScoreTeam1].Visible := true; + Text[TextNameTeam1].Visible := true; + Static[StaticTeam1].Visible := true; + Static[StaticTeam1BG].Visible := true; + Static[StaticTeam1Deco].Visible := true; end else begin - Text[TextScoreTeam1].Visible := False; - Text[TextNameTeam1].Visible := False; - Static[StaticTeam1].Visible := False; - Static[StaticTeam1BG].Visible := False; - Static[StaticTeam1Deco].Visible := False; + Text[TextScoreTeam1].Visible := false; + Text[TextNameTeam1].Visible := false; + Static[StaticTeam1].Visible := false; + Static[StaticTeam1BG].Visible := false; + Static[StaticTeam1Deco].Visible := false; end; if (ScreenSingModi.PlayerInfo.NumPlayers >= 2) then begin Text[TextScoreTeam2].Text := InttoStr(ScreenSingModi.PlayerInfo.Playerinfo[1].Score); - Text[TextNameTeam2].Text := String(ScreenSingModi.TeamInfo.Teaminfo[1].Name); + Text[TextNameTeam2].Text := string(ScreenSingModi.TeamInfo.Teaminfo[1].Name); //Set Deco Texture if Theme.PartyScore.DecoTextures.ChangeTextures then @@ -282,25 +279,25 @@ begin Static[StaticTeam2Deco].Texture.ColB := DecoColor[Placings[1]].B; end; - Text[TextScoreTeam2].Visible := True; - Text[TextNameTeam2].Visible := True; - Static[StaticTeam2].Visible := True; - Static[StaticTeam2BG].Visible := True; - Static[StaticTeam2Deco].Visible := True; + Text[TextScoreTeam2].Visible := true; + Text[TextNameTeam2].Visible := true; + Static[StaticTeam2].Visible := true; + Static[StaticTeam2BG].Visible := true; + Static[StaticTeam2Deco].Visible := true; end else begin - Text[TextScoreTeam2].Visible := False; - Text[TextNameTeam2].Visible := False; - Static[StaticTeam2].Visible := False; - Static[StaticTeam2BG].Visible := False; - Static[StaticTeam2Deco].Visible := False; + Text[TextScoreTeam2].Visible := false; + Text[TextNameTeam2].Visible := false; + Static[StaticTeam2].Visible := false; + Static[StaticTeam2BG].Visible := false; + Static[StaticTeam2Deco].Visible := false; end; if (ScreenSingModi.PlayerInfo.NumPlayers >= 3) then begin Text[TextScoreTeam3].Text := InttoStr(ScreenSingModi.PlayerInfo.Playerinfo[2].Score); - Text[TextNameTeam3].Text := String(ScreenSingModi.TeamInfo.Teaminfo[2].Name); + Text[TextNameTeam3].Text := string(ScreenSingModi.TeamInfo.Teaminfo[2].Name); //Set Deco Texture if Theme.PartyScore.DecoTextures.ChangeTextures then @@ -311,19 +308,19 @@ begin Static[StaticTeam3Deco].Texture.ColB := DecoColor[Placings[2]].B; end; - Text[TextScoreTeam3].Visible := True; - Text[TextNameTeam3].Visible := True; - Static[StaticTeam3].Visible := True; - Static[StaticTeam3BG].Visible := True; - Static[StaticTeam3Deco].Visible := True; + Text[TextScoreTeam3].Visible := true; + Text[TextNameTeam3].Visible := true; + Static[StaticTeam3].Visible := true; + Static[StaticTeam3BG].Visible := true; + Static[StaticTeam3Deco].Visible := true; end else begin - Text[TextScoreTeam3].Visible := False; - Text[TextNameTeam3].Visible := False; - Static[StaticTeam3].Visible := False; - Static[StaticTeam3BG].Visible := False; - Static[StaticTeam3Deco].Visible := False; + Text[TextScoreTeam3].Visible := false; + Text[TextNameTeam3].Visible := false; + Static[StaticTeam3].Visible := false; + Static[StaticTeam3BG].Visible := false; + Static[StaticTeam3Deco].Visible := false; end; end; diff --git a/unicode/src/screens/UScreenPartyWin.pas b/unicode/src/screens/UScreenPartyWin.pas index dc3c5ac0..af175f6e 100644 --- a/unicode/src/screens/UScreenPartyWin.pas +++ b/unicode/src/screens/UScreenPartyWin.pas @@ -44,25 +44,25 @@ uses type TScreenPartyWin = class(TMenu) public - TextScoreTeam1: Cardinal; - TextScoreTeam2: Cardinal; - TextScoreTeam3: Cardinal; - TextNameTeam1: Cardinal; - TextNameTeam2: Cardinal; - TextNameTeam3: Cardinal; - StaticTeam1: Cardinal; - StaticTeam1BG: Cardinal; - StaticTeam1Deco: Cardinal; - StaticTeam2: Cardinal; - StaticTeam2BG: Cardinal; - StaticTeam2Deco: Cardinal; - StaticTeam3: Cardinal; - StaticTeam3BG: Cardinal; - StaticTeam3Deco: Cardinal; - TextWinner: Cardinal; + TextScoreTeam1: cardinal; + TextScoreTeam2: cardinal; + TextScoreTeam3: cardinal; + TextNameTeam1: cardinal; + TextNameTeam2: cardinal; + TextNameTeam3: cardinal; + StaticTeam1: cardinal; + StaticTeam1BG: cardinal; + StaticTeam1Deco: cardinal; + StaticTeam2: cardinal; + StaticTeam2BG: cardinal; + StaticTeam2Deco: cardinal; + StaticTeam3: cardinal; + StaticTeam3BG: cardinal; + StaticTeam3Deco: cardinal; + TextWinner: cardinal; constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; procedure SetAnimationProgress(Progress: real); override; end; @@ -77,10 +77,10 @@ uses ULanguage, UUnicodeUtils; -function TScreenPartyWin.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenPartyWin.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of @@ -138,13 +138,13 @@ begin end; procedure TScreenPartyWin.onShow; -//var -// I: Integer; // Auto Removed, Unused Variable -// Placing: Integer; // Auto Removed, Unused Variable +var + I: integer; + Placing: TeamOrderArray; - Function GetTeamColor(Team: Byte): Cardinal; + Function GetTeamColor(Team: byte): cardinal; var - NameString: String; + NameString: string; begin NameString := 'P' + InttoStr(Team+1) + 'Dark'; @@ -154,25 +154,24 @@ procedure TScreenPartyWin.onShow; begin inherited; - // to-do : Party //Get Team Placing - //Placing := PartySession.GetTeamOrder; + Placing := PartySession.GetTeamOrder; //Set Winnertext - //Text[TextWinner].Text := Format(Language.Translate('PARTY_SCORE_WINS'), [PartySession.Teams.Teaminfo[Placing[0]].Name]); - {if (PartySession.Teams.NumTeams >= 1) then + Text[TextWinner].Text := Format(Language.Translate('PARTY_SCORE_WINS'), [PartySession.Teams.Teaminfo[Placing[0]].Name]); + if (PartySession.Teams.NumTeams >= 1) then begin Text[TextScoreTeam1].Text := InttoStr(PartySession.Teams.TeamInfo[Placing[0]].Score); - Text[TextNameTeam1].Text := String(PartySession.Teams.TeamInfo[Placing[0]].Name); + Text[TextNameTeam1].Text := string(PartySession.Teams.TeamInfo[Placing[0]].Name); - Text[TextScoreTeam1].Visible := True; - Text[TextNameTeam1].Visible := True; - Static[StaticTeam1].Visible := True; - Static[StaticTeam1BG].Visible := True; - Static[StaticTeam1Deco].Visible := True; + Text[TextScoreTeam1].Visible := true; + Text[TextNameTeam1].Visible := true; + Static[StaticTeam1].Visible := true; + Static[StaticTeam1BG].Visible := true; + Static[StaticTeam1Deco].Visible := true; //Set Static Color to Team Color - If (Theme.PartyWin.StaticTeam1BG.Color = 'TeamColor') then + if (Theme.PartyWin.StaticTeam1BG.Color = 'TeamColor') then begin I := GetTeamColor(Placing[0]); if (I <> -1) then @@ -183,7 +182,7 @@ begin end; end; - If (Theme.PartyWin.StaticTeam1.Color = 'TeamColor') then + if (Theme.PartyWin.StaticTeam1.Color = 'TeamColor') then begin I := GetTeamColor(Placing[0]); if (I <> -1) then @@ -196,26 +195,26 @@ begin end else begin - Text[TextScoreTeam1].Visible := False; - Text[TextNameTeam1].Visible := False; - Static[StaticTeam1].Visible := False; - Static[StaticTeam1BG].Visible := False; - Static[StaticTeam1Deco].Visible := False; + Text[TextScoreTeam1].Visible := false; + Text[TextNameTeam1].Visible := false; + Static[StaticTeam1].Visible := false; + Static[StaticTeam1BG].Visible := false; + Static[StaticTeam1Deco].Visible := false; end; if (PartySession.Teams.NumTeams >= 2) then begin Text[TextScoreTeam2].Text := InttoStr(PartySession.Teams.TeamInfo[Placing[1]].Score); - Text[TextNameTeam2].Text := String(PartySession.Teams.TeamInfo[Placing[1]].Name); + Text[TextNameTeam2].Text := string(PartySession.Teams.TeamInfo[Placing[1]].Name); - Text[TextScoreTeam2].Visible := True; - Text[TextNameTeam2].Visible := True; - Static[StaticTeam2].Visible := True; - Static[StaticTeam2BG].Visible := True; - Static[StaticTeam2Deco].Visible := True; + Text[TextScoreTeam2].Visible := true; + Text[TextNameTeam2].Visible := true; + Static[StaticTeam2].Visible := true; + Static[StaticTeam2BG].Visible := true; + Static[StaticTeam2Deco].Visible := true; //Set Static Color to Team Color - If (Theme.PartyWin.StaticTeam2BG.Color = 'TeamColor') then + if (Theme.PartyWin.StaticTeam2BG.Color = 'TeamColor') then begin I := GetTeamColor(Placing[1]); if (I <> -1) then @@ -226,7 +225,7 @@ begin end; end; - If (Theme.PartyWin.StaticTeam2.Color = 'TeamColor') then + if (Theme.PartyWin.StaticTeam2.Color = 'TeamColor') then begin I := GetTeamColor(Placing[1]); if (I <> -1) then @@ -239,26 +238,26 @@ begin end else begin - Text[TextScoreTeam2].Visible := False; - Text[TextNameTeam2].Visible := False; - Static[StaticTeam2].Visible := False; - Static[StaticTeam2BG].Visible := False; - Static[StaticTeam2Deco].Visible := False; + Text[TextScoreTeam2].Visible := false; + Text[TextNameTeam2].Visible := false; + Static[StaticTeam2].Visible := false; + Static[StaticTeam2BG].Visible := false; + Static[StaticTeam2Deco].Visible := false; end; if (PartySession.Teams.NumTeams >= 3) then begin Text[TextScoreTeam3].Text := InttoStr(PartySession.Teams.TeamInfo[Placing[2]].Score); - Text[TextNameTeam3].Text := String(PartySession.Teams.TeamInfo[Placing[2]].Name); + Text[TextNameTeam3].Text := string(PartySession.Teams.TeamInfo[Placing[2]].Name); - Text[TextScoreTeam3].Visible := True; - Text[TextNameTeam3].Visible := True; - Static[StaticTeam3].Visible := True; - Static[StaticTeam3BG].Visible := True; - Static[StaticTeam3Deco].Visible := True; + Text[TextScoreTeam3].Visible := true; + Text[TextNameTeam3].Visible := true; + Static[StaticTeam3].Visible := true; + Static[StaticTeam3BG].Visible := true; + Static[StaticTeam3Deco].Visible := true; //Set Static Color to Team Color - If (Theme.PartyWin.StaticTeam3BG.Color = 'TeamColor') then + if (Theme.PartyWin.StaticTeam3BG.Color = 'TeamColor') then begin I := GetTeamColor(Placing[2]); if (I <> -1) then @@ -269,7 +268,7 @@ begin end; end; - If (Theme.PartyWin.StaticTeam3.Color = 'TeamColor') then + if (Theme.PartyWin.StaticTeam3.Color = 'TeamColor') then begin I := GetTeamColor(Placing[2]); if (I <> -1) then @@ -282,12 +281,12 @@ begin end else begin - Text[TextScoreTeam3].Visible := False; - Text[TextNameTeam3].Visible := False; - Static[StaticTeam3].Visible := False; - Static[StaticTeam3BG].Visible := False; - Static[StaticTeam3Deco].Visible := False; - end; } + Text[TextScoreTeam3].Visible := false; + Text[TextNameTeam3].Visible := false; + Static[StaticTeam3].Visible := false; + Static[StaticTeam3BG].Visible := false; + Static[StaticTeam3Deco].Visible := false; + end; end; procedure TScreenPartyWin.SetAnimationProgress(Progress: real); diff --git a/unicode/src/screens/UScreenPopup.pas b/unicode/src/screens/UScreenPopup.pas index 74107117..c8b8a743 100644 --- a/unicode/src/screens/UScreenPopup.pas +++ b/unicode/src/screens/UScreenPopup.pas @@ -44,34 +44,33 @@ uses type TScreenPopupCheck = class(TMenu) public - Visible: Boolean; //Whether the Menu should be Drawn + Visible: boolean; //Whether the Menu should be Drawn constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; - procedure ShowPopup(msg: String); + procedure ShowPopup(msg: string); function Draw: boolean; override; end; type TScreenPopupError = class(TMenu) { private - CurMenu: Byte; //Num of the cur. Shown Menu} + CurMenu: byte; //Num of the cur. Shown Menu} public - Visible: Boolean; //Whether the Menu should be Drawn + Visible: boolean; //Whether the Menu should be Drawn constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; procedure onHide; override; - procedure ShowPopup(msg: String); + procedure ShowPopup(msg: string); function Draw: boolean; override; end; var -// ISelections: Array of String; - SelectValue: Integer; - +// ISelections: array of string; + SelectValue: integer; implementation @@ -86,10 +85,10 @@ uses UDisplay, UUnicodeUtils; -function TScreenPopupCheck.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenPopupCheck.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of @@ -105,9 +104,9 @@ begin SDLK_ESCAPE, SDLK_BACKSPACE : begin - Display.CheckOK:=False; - Display.NextScreenWithCheck:=NIL; - Visible:=False; + Display.CheckOK := false; + Display.NextScreenWithCheck := NIL; + Visible := false; Result := false; end; @@ -124,14 +123,14 @@ begin ScreenSingModi.Finish; end; - Display.CheckOK:=True; + Display.CheckOK := true; end; 1: begin - Display.CheckOK:=False; - Display.NextScreenWithCheck:=NIL; + Display.CheckOK := false; + Display.NextScreenWithCheck := NIL; end; end; - Visible:=False; + Visible := false; Result := false; end; @@ -173,15 +172,15 @@ begin inherited; end; -procedure TScreenPopupCheck.ShowPopup(msg: String); +procedure TScreenPopupCheck.ShowPopup(msg: string); begin Interaction := 0; //Reset Interaction - Visible := True; //Set Visible + Visible := true; //Set Visible Text[0].Text := Language.Translate(msg); - Button[0].Visible := True; - Button[1].Visible := True; + Button[0].Visible := true; + Button[1].Visible := true; Button[0].Text[0].Text := Language.Translate('SONG_MENU_YES'); Button[1].Text[0].Text := Language.Translate('SONG_MENU_NO'); @@ -191,10 +190,10 @@ end; // error popup -function TScreenPopupError.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenPopupError.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down case PressedKey of @@ -206,13 +205,13 @@ begin SDLK_ESCAPE, SDLK_BACKSPACE : begin - Visible:=False; + Visible := false; Result := false; end; SDLK_RETURN: begin - Visible:=False; + Visible := false; Result := false; end; @@ -242,7 +241,7 @@ end; function TScreenPopupError.Draw: boolean; begin - Draw:=inherited Draw; + Draw := inherited Draw; end; procedure TScreenPopupError.onShow; @@ -255,26 +254,26 @@ procedure TScreenPopupError.onHide; begin end; -procedure TScreenPopupError.ShowPopup(msg: String); +procedure TScreenPopupError.ShowPopup(msg: string); begin Interaction := 0; //Reset Interaction - Visible := True; //Set Visible + Visible := true; //Set Visible Background.OnShow; { //dirty hack... Text[0] is invisible for some strange reason for i:=1 to high(Text) do if i-1 <= high(msg) then begin - Text[i].Visible:=True; + Text[i].Visible := true; Text[i].Text := msg[i-1]; end else begin - Text[i].Visible:=False; + Text[i].Visible := false; end;} - Text[0].Text:=msg; + Text[0].Text := msg; - Button[0].Visible := True; + Button[0].Visible := true; Button[0].Text[0].Text := 'OK'; end; diff --git a/unicode/src/screens/UScreenScore.pas b/unicode/src/screens/UScreenScore.pas index 5c312938..c337e5a5 100644 --- a/unicode/src/screens/UScreenScore.pas +++ b/unicode/src/screens/UScreenScore.pas @@ -129,6 +129,7 @@ type constructor Create; override; function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; + function ParseMouse(MouseButton: Integer; BtnDown: Boolean; X, Y: integer): boolean; override; procedure onShow; override; procedure onShowFinish; override; function Draw: boolean; override; @@ -193,6 +194,15 @@ begin end; end; +function TScreenScore.ParseMouse(MouseButton: Integer; BtnDown: Boolean; X, Y: integer): boolean; +begin + Result := True; + if (MouseButton = SDL_BUTTON_LEFT) and BtnDown then begin + //left-click anywhere sends return + ParseInput(SDLK_RETURN, #0, true); + end; +end; + constructor TScreenScore.Create; var Player: integer; diff --git a/unicode/src/screens/UScreenSing.pas b/unicode/src/screens/UScreenSing.pas index 05683c83..dc3d5f5f 100644 --- a/unicode/src/screens/UScreenSing.pas +++ b/unicode/src/screens/UScreenSing.pas @@ -58,9 +58,8 @@ type type TScreenSing = class(TMenu) - private - VideoLoaded: boolean; protected + VideoLoaded: boolean; Paused: boolean; // pause mod LyricsSync: TLyricsSyncSource; NumEmptySentences: integer; @@ -128,6 +127,7 @@ uses UNote, URecord, USong, + UDisplay, UUnicodeUtils; // method for input parsing. if false is returned, getnextwindow @@ -255,6 +255,9 @@ constructor TScreenSing.Create; begin inherited Create; + //too dangerous, a mouse button is quickly pressed by accident + RightMbESC := false; + fShowVisualization := false; fCurrentVideoPlaybackEngine := VideoPlayback; @@ -299,8 +302,8 @@ begin Static[StaticPausePopup].Visible := false; Lyrics := TLyricEngine.Create( - Skin_LyricsUpperX, Skin_LyricsUpperY, Skin_LyricsUpperW, Skin_LyricsUpperH, - Skin_LyricsLowerX, Skin_LyricsLowerY, Skin_LyricsLowerW, Skin_LyricsLowerH); + Theme.LyricBar.UpperX, Theme.LyricBar.UpperY, Theme.LyricBar.UpperW, Theme.LyricBar.UpperH, + Theme.LyricBar.LowerX, Theme.LyricBar.LowerY, Theme.LyricBar.LowerW, Theme.LyricBar.LowerH); LyricsSync := TLyricsSyncSource.Create(); end; @@ -625,6 +628,9 @@ end; procedure TScreenSing.onShowFinish; begin + // hide cursor on singscreen show + Display.SetCursor; + // start lyrics LyricsState.Resume(); @@ -645,6 +651,7 @@ begin end; Background.OnFinish; + Display.SetCursor; end; function TScreenSing.Draw: boolean; @@ -745,10 +752,9 @@ begin begin // Just call this once // when Screens = 2 - If (ScreenAct = 1) then + if (ScreenAct = 1) then fCurrentVideoPlaybackEngine.GetFrame(CurrentSong.VideoGAP + LyricsState.GetCurrentTime()); - fCurrentVideoPlaybackEngine.DrawGL(ScreenAct); end; end; diff --git a/unicode/src/screens/UScreenSingModi.pas b/unicode/src/screens/UScreenSingModi.pas index b9c9365d..fbebe1ec 100644 --- a/unicode/src/screens/UScreenSingModi.pas +++ b/unicode/src/screens/UScreenSingModi.pas @@ -33,74 +33,45 @@ interface {$I switches.inc} - -uses UMenu, - UMusic, - SDL, - SysUtils, - UFiles, - UTime, - USongs, - UIni, - ULog, - UTexture, - ULyrics, - TextGL, - gl, - - UThemes, - UScreenSing, - ModiSDK; +uses + UMenu, + UMusic, + SDL, + SysUtils, + UFiles, + UTime, + USongs, + UIni, + ULog, + UTexture, + ULyrics, + TextGL, + gl, + + UThemes, + UScreenSing, + ModiSDK; type TScreenSingModi = class(TScreenSing) protected - //paused: boolean; //Pause Mod - //PauseTime: Real; - //NumEmptySentences: integer; + public - //TextTime: integer; - - //StaticP1: integer; - //StaticP1ScoreBG: integer; - //TextP1: integer; - //TextP1Score: integer; - - //StaticP2R: integer; - //StaticP2RScoreBG: integer; - //TextP2R: integer; - //TextP2RScore: integer; - - //StaticP2M: integer; - //StaticP2MScoreBG: integer; - //TextP2M: integer; - //TextP2MScore: integer; - - //StaticP3R: integer; - //StaticP3RScoreBG: integer; - //TextP3R: integer; - //TextP3RScore: integer; - - //Tex_Background: TTexture; - //FadeOut: boolean; - //LyricMain: TLyric; - //LyricSub: TLyric; - Winner: Byte; //Who Wins + Winner: byte; //Who Wins PlayerInfo: TPlayerInfo; TeamInfo: TTeamInfo; constructor Create; override; procedure onShow; override; //procedure onShowFinish; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cCardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; function Draw: boolean; override; procedure Finish; override; - //procedure Pause; //Pause Mod(Toggles Pause) end; type TCustomSoundEntry = record - Filename : String; + Filename : string; Stream : TAudioPlaybackStream; end; @@ -109,11 +80,19 @@ var CustomSounds: array of TCustomSoundEntry; //Procedured for Plugin -function LoadTex (const Name: PChar; Typ: TTextureType): TsmallTexture; stdcall; -//function Translate (const Name: PChar): PChar; stdcall; -procedure Print (const Style, Size: Byte; const X, Y: Real; const Text: PChar); stdcall; //Procedure to Print Text -function LoadSound (const Name: PChar): Cardinal; stdcall; //Procedure that loads a Custom Sound -procedure PlaySound (const Index: Cardinal); stdcall; //Plays a Custom Sound +function LoadTex(const Name: PChar; Typ: TTextureType): TsmallTexture; + {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} +//function Translate (const Name: PChar): PChar; +// {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} +//Procedure to Print Text +procedure Print(const Style, Size: byte; const X, Y: real; const Text: PChar); + {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} +//Procedure that loads a Custom Sound +function LoadSound(const Name: PChar): cardinal; + {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} +//Plays a Custom Sound +procedure PlaySound(const Index: cardinal); + {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF} //Utilys function ToSentences(Const Lines: TLines): TSentences; @@ -133,12 +112,12 @@ uses URecord, USkins; -// Method for input parsing. If False is returned, GetNextWindow +// Method for input parsing. If false is returned, GetNextWindow // should be checked to know the next window to load; -function TScreenSingModi.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenSingModi.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down case PressedKey of @@ -164,7 +143,7 @@ end; function ToSentences(Const Lines: TLines): TSentences; var - I, J: Integer; + I, J: integer; begin Result.Current := Lines.Current; Result.High := Lines.High; @@ -199,7 +178,7 @@ end; procedure TScreenSingModi.onShow; var - I: Integer; + I: integer; begin inherited; @@ -221,14 +200,14 @@ begin PlayerInfo.Playerinfo[I].Name := PChar(Ini.Name[I]); PlayerInfo.Playerinfo[I].Score := 0; PlayerInfo.Playerinfo[I].Bar := 50; - PlayerInfo.Playerinfo[I].Enabled := True; + PlayerInfo.Playerinfo[I].Enabled := true; end; for I := PlayerInfo.NumPlayers to high(PlayerInfo.Playerinfo) do begin PlayerInfo.Playerinfo[I].Score:= 0; PlayerInfo.Playerinfo[I].Bar := 0; - PlayerInfo.Playerinfo[I].Enabled := False; + PlayerInfo.Playerinfo[I].Enabled := false; end; {Case PlayersPlay of @@ -275,18 +254,22 @@ begin end; // Set Background (Little Workaround, maybe change sometime) - if (DLLMan.Selected.LoadBack) AND (DLLMan.Selected.LoadSong) then + if (DLLMan.Selected.LoadBack) and (DLLMan.Selected.LoadSong) then ScreenSing.Tex_Background := Tex_Background; Winner := 0; //Set Score Visibility - {if PlayersPlay = 1 then begin + Scores.Visible := DLLMan.Selected.ShowScore; + + {if PlayersPlay = 1 then + begin Text[TextP1Score].Visible := DLLMan.Selected.ShowScore; Static[StaticP1ScoreBG].Visible := DLLMan.Selected.ShowScore; end; - if (PlayersPlay = 2) OR (PlayersPlay = 4) then begin + if (PlayersPlay = 2) or (PlayersPlay = 4) then + begin Text[TextP1TwoPScore].Visible := DLLMan.Selected.ShowScore; Static[StaticP1TwoPScoreBG].Visible := DLLMan.Selected.ShowScore; @@ -294,7 +277,8 @@ begin Static[StaticP2RScoreBG].Visible := DLLMan.Selected.ShowScore; end; - if (PlayersPlay = 3) OR (PlayersPlay = 6) then begin + if (PlayersPlay = 3) or (PlayersPlay = 6) then + begin Text[TextP1ThreePScore].Visible := DLLMan.Selected.ShowScore; Static[StaticP1ThreePScoreBG].Visible := DLLMan.Selected.ShowScore; @@ -330,116 +314,39 @@ begin end; end; - //Show Score - if DLLMan.Selected.ShowScore then - begin - {//ScoreBG Mod - // set player colors - if PlayersPlay = 4 then begin - if ScreenAct = 1 then begin - LoadColor(Static[StaticP1TwoP].Texture.ColR, Static[StaticP1TwoP].Texture.ColG, - Static[StaticP1TwoP].Texture.ColB, 'P1Dark'); - LoadColor(Static[StaticP2R].Texture.ColR, Static[StaticP2R].Texture.ColG, - Static[StaticP2R].Texture.ColB, 'P2Dark'); - - - - LoadColor(Static[StaticP1TwoPScoreBG].Texture.ColR, Static[StaticP1TwoPScoreBG].Texture.ColG, - Static[StaticP1TwoPScoreBG].Texture.ColB, 'P1Dark'); - LoadColor(Static[StaticP2RScoreBG].Texture.ColR, Static[StaticP2RScoreBG].Texture.ColG, - Static[StaticP2RScoreBG].Texture.ColB, 'P2Dark'); - - - - end; - if ScreenAct = 2 then begin - LoadColor(Static[StaticP1TwoP].Texture.ColR, Static[StaticP1TwoP].Texture.ColG, - Static[StaticP1TwoP].Texture.ColB, 'P3Dark'); - LoadColor(Static[StaticP2R].Texture.ColR, Static[StaticP2R].Texture.ColG, - Static[StaticP2R].Texture.ColB, 'P4Dark'); - - - - LoadColor(Static[StaticP1TwoPScoreBG].Texture.ColR, Static[StaticP1TwoPScoreBG].Texture.ColG, - Static[StaticP1TwoPScoreBG].Texture.ColB, 'P3Dark'); - LoadColor(Static[StaticP2RScoreBG].Texture.ColR, Static[StaticP2RScoreBG].Texture.ColG, - Static[StaticP2RScoreBG].Texture.ColB, 'P4Dark'); - - - - end; - end; - - if PlayersPlay = 6 then begin - if ScreenAct = 1 then begin - LoadColor(Static[StaticP1ThreeP].Texture.ColR, Static[StaticP1ThreeP].Texture.ColG, - Static[StaticP1ThreeP].Texture.ColB, 'P1Dark'); - LoadColor(Static[StaticP2M].Texture.ColR, Static[StaticP2M].Texture.ColG, - Static[StaticP2R].Texture.ColB, 'P2Dark'); - LoadColor(Static[StaticP3R].Texture.ColR, Static[StaticP3R].Texture.ColG, - Static[StaticP3R].Texture.ColB, 'P3Dark'); - - - - LoadColor(Static[StaticP1ThreePScoreBG].Texture.ColR, Static[StaticP1ThreePScoreBG].Texture.ColG, - Static[StaticP1ThreePScoreBG].Texture.ColB, 'P1Dark'); - LoadColor(Static[StaticP2MScoreBG].Texture.ColR, Static[StaticP2MScoreBG].Texture.ColG, - Static[StaticP2RScoreBG].Texture.ColB, 'P2Dark'); - LoadColor(Static[StaticP3RScoreBG].Texture.ColR, Static[StaticP3RScoreBG].Texture.ColG, - Static[StaticP3RScoreBG].Texture.ColB, 'P3Dark'); - - - - end; - if ScreenAct = 2 then begin - LoadColor(Static[StaticP1ThreeP].Texture.ColR, Static[StaticP1ThreeP].Texture.ColG, - Static[StaticP1ThreeP].Texture.ColB, 'P4Dark'); - LoadColor(Static[StaticP2M].Texture.ColR, Static[StaticP2M].Texture.ColG, - Static[StaticP2R].Texture.ColB, 'P5Dark'); - LoadColor(Static[StaticP3R].Texture.ColR, Static[StaticP3R].Texture.ColG, - Static[StaticP3R].Texture.ColB, 'P6Dark'); - - - + Background.Draw; - LoadColor(Static[StaticP1ThreePScoreBG].Texture.ColR, Static[StaticP1ThreePScoreBG].Texture.ColG, - Static[StaticP1ThreePScoreBG].Texture.ColB, 'P4Dark'); - LoadColor(Static[StaticP2MScoreBG].Texture.ColR, Static[StaticP2MScoreBG].Texture.ColG, - Static[StaticP2RScoreBG].Texture.ColB, 'P5Dark'); - LoadColor(Static[StaticP3RScoreBG].Texture.ColR, Static[StaticP3RScoreBG].Texture.ColG, - Static[StaticP3RScoreBG].Texture.ColB, 'P6Dark'); - - - - - end; - end; - //end ScoreBG Mod } - - // set player names (for 2 screens and only Singstar skin) - if ScreenAct = 1 then begin - Text[TextP1].Text := 'P1'; - Text[TextP1TwoP].Text := 'P1'; // added for ps3 skin - Text[TextP1ThreeP].Text := 'P1'; // added for ps3 skin - Text[TextP2R].Text := 'P2'; - Text[TextP2M].Text := 'P2'; - Text[TextP3R].Text := 'P3'; - end; + // draw background picture (if any, and if no visualizations) + // when we don't check for visualizations the visualizations would + // be overdrawn by the picture when {UNDEFINED UseTexture} in UVisualizer + if (DllMan.Selected.LoadSong) and (DllMan.Selected.LoadBack) and (not fShowVisualization) then + SingDrawBackground; - if ScreenAct = 2 then begin - case PlayersPlay of - 4: begin - Text[TextP1TwoP].Text := 'P3'; - Text[TextP2R].Text := 'P4'; - end; - 6: begin - Text[TextP1ThreeP].Text := 'P4'; - Text[TextP2M].Text := 'P5'; - Text[TextP3R].Text := 'P6'; - end; - end; // case - end; // if + // set player names (for 2 screens and only Singstar skin) + if ScreenAct = 1 then + begin + Text[TextP1].Text := 'P1'; + Text[TextP1TwoP].Text := 'P1'; // added for ps3 skin + Text[TextP1ThreeP].Text := 'P1'; // added for ps3 skin + Text[TextP2R].Text := 'P2'; + Text[TextP2M].Text := 'P2'; + Text[TextP3R].Text := 'P3'; + end + Else if ScreenAct = 2 then + begin + case PlayersPlay of + 4: begin + Text[TextP1TwoP].Text := 'P3'; + Text[TextP2R].Text := 'P4'; + end; + 6: begin + Text[TextP1ThreeP].Text := 'P4'; + Text[TextP2M].Text := 'P5'; + Text[TextP3R].Text := 'P6'; + end; + end; // case + end; // if // stereo <- and where iss P2M? or P3? Static[StaticP1].Texture.X := Static[StaticP1].Texture.X + 10*ScreenX; @@ -451,92 +358,6 @@ begin Static[StaticP2R].Texture.X := Static[StaticP2R].Texture.X + 10*ScreenX; Text[TextP2R].X := Text[TextP2R].X + 10*ScreenX; - {Static[StaticP2RScoreBG].Texture.X := Static[StaticP2RScoreBG].Texture.X + 10*ScreenX; - Text[TextP2RScore].X := Text[TextP2RScore].X + 10*ScreenX;} - - // .. and scores - {if PlayersPlay = 1 then begin - TextStr := IntToStr(Player[0].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP1Score].Text := TextStr; - end; - - if PlayersPlay = 2 then begin - TextStr := IntToStr(Player[0].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP1TwoPScore].Text := TextStr; - - TextStr := IntToStr(Player[1].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP2RScore].Text := TextStr; - end; - - if PlayersPlay = 3 then begin - TextStr := IntToStr(Player[0].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP1ThreePScore].Text := TextStr; - - TextStr := IntToStr(Player[1].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP2MScore].Text := TextStr; - - TextStr := IntToStr(Player[2].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP3RScore].Text := TextStr; - end; - - if PlayersPlay = 4 then begin - if ScreenAct = 1 then begin - TextStr := IntToStr(Player[0].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP1TwoPScore].Text := TextStr; - - TextStr := IntToStr(Player[1].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP2RScore].Text := TextStr; - end; - if ScreenAct = 2 then begin - TextStr := IntToStr(Player[2].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP1TwoPScore].Text := TextStr; - - TextStr := IntToStr(Player[3].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP2RScore].Text := TextStr; - end; - end; - - if PlayersPlay = 6 then begin - if ScreenAct = 1 then begin - TextStr := IntToStr(Player[0].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP1ThreePScore].Text := TextStr; - - TextStr := IntToStr(Player[1].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP2MScore].Text := TextStr; - - TextStr := IntToStr(Player[2].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP3RScore].Text := TextStr; - end; - if ScreenAct = 2 then begin - TextStr := IntToStr(Player[3].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP1ThreePScore].Text := TextStr; - - TextStr := IntToStr(Player[4].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP2MScore].Text := TextStr; - - TextStr := IntToStr(Player[5].ScoreTotalI); - while Length(TextStr) < 5 do TextStr := '0' + TextStr; - Text[TextP3RScore].Text := TextStr; - end; - end; } - - end; //ShowScore - for S := 1 to 1 do Static[S].Texture.X := Static[S].Texture.X + 10*ScreenX; @@ -557,30 +378,43 @@ begin Text[TextTimeText].Text := Text[TextTimeText].Text + IntToStr(Sec); end; - // draw static menu (BG) - DrawBG; - - //Draw Background - if (DllMan.Selected.LoadSong) AND (DllMan.Selected.LoadBack) then - SingDrawBackground; - // update and draw movie -{ if ShowFinish and CurrentSong.VideoLoaded AND DllMan.Selected.LoadVideo then begin +{ if ShowFinish and CurrentSong.VideoLoaded and DllMan.Selected.LoadVideo then + begin UpdateSmpeg; // this only draws end;} + // update and draw movie + if (ShowFinish and (VideoLoaded or fShowVisualization) and DllMan.Selected.LoadVideo) then + begin + if assigned(fCurrentVideoPlaybackEngine) then + begin + // Just call this once + // when Screens = 2 + if (ScreenAct = 1) then + fCurrentVideoPlaybackEngine.GetFrame(CurrentSong.VideoGAP + LyricsState.GetCurrentTime()); + + fCurrentVideoPlaybackEngine.DrawGL(ScreenAct); + end; + end; + // draw static menu (FG) DrawFG; - if ShowFinish then begin + if ShowFinish then + begin if DllMan.Selected.LoadSong then begin - if (not AudioPlayback.Finished) and ((CurrentSong.Finish = 0) or (LyricsState.GetCurrentTime*1000 <= CurrentSong.Finish)) then begin + if (not AudioPlayback.Finished) and ((CurrentSong.Finish = 0) or (LyricsState.GetCurrentTime*1000 <= CurrentSong.Finish)) then + begin //Pause Mod: if not Paused then Sing(Self); // analyze song - end else begin - if not FadeOut then begin + end + else + begin + if not FadeOut then + begin Finish; FadeOut := true; FadeTo(@ScreenPartyScore); @@ -596,6 +430,9 @@ begin GoldenRec.SpawnRec; //GoldenNoteStarsTwinkle Mod + //Draw Score + Scores.Draw; + //Update PlayerInfo for I := 0 to PlayerInfo.NumPlayers-1 do begin @@ -606,14 +443,15 @@ begin end; end; - if ((ShowFinish) AND (NOT Paused)) then + if ((ShowFinish) and (not Paused)) then begin if not DLLMan.PluginDraw(Playerinfo, Lines[0].Current) then begin - if not FadeOut then begin - Finish; - FadeOut := true; - FadeTo(@ScreenPartyScore); + if not FadeOut then + begin + Finish; + FadeOut := true; + FadeTo(@ScreenPartyScore); end; end; end; @@ -637,14 +475,12 @@ begin {Static[StaticP1ScoreBG].Texture.X := Static[StaticP1ScoreBG].Texture.X - 10*ScreenX; Text[TextP1Score].X := Text[TextP1Score].X - 10*ScreenX;} - Static[StaticP2R].Texture.X := Static[StaticP2R].Texture.X - 10*ScreenX; Text[TextP2R].X := Text[TextP2R].X - 10*ScreenX; {Static[StaticP2RScoreBG].Texture.X := Static[StaticP2RScoreBG].Texture.X - 10*ScreenX; Text[TextP2RScore].X := Text[TextP2RScore].X - 10*ScreenX;} - for S := 1 to 1 do Static[S].Texture.X := Static[S].Texture.X - 10*ScreenX; @@ -665,13 +501,13 @@ Winner := DllMan.PluginFinish(PlayerInfo); //DLLMan.UnLoadPlugin; end; -function LoadTex (const Name: PChar; Typ: TTextureType): TsmallTexture; stdcall; +function LoadTex(const Name: PChar; Typ: TTextureType): TsmallTexture; var - Texname, EXT: String; + Texname, EXT: string; Tex: TTexture; begin //Get texture Name - TexName := Skin.GetTextureFileName(String(Name)); + TexName := Skin.GetTextureFileName(string(Name)); //Get File Typ Ext := ExtractFileExt(TexName); if (uppercase(Ext) = '.JPG') then @@ -688,10 +524,11 @@ end; { function Translate (const Name: PChar): PChar; stdcall; begin - Result := PChar(Language.Translate(String(Name))); + Result := PChar(Language.Translate(string(Name))); end; } -procedure Print(const Style, Size: Byte; const X, Y: Real; const Text: PChar); stdcall; //Procedure to Print Text +//Procedure to Print Text +procedure Print(const Style, Size: byte; const X, Y: real; const Text: PChar); begin SetFontItalic ((Style and 128) = 128); SetFontStyle(Style and 7); @@ -699,14 +536,15 @@ begin // used by Hold_The_Line / TeamDuell SetFontSize(Size); SetFontPos (X, Y); - glPrint (Language.Translate(String(Text))); + glPrint (Language.Translate(string(Text))); end; -function LoadSound(const Name: PChar): Cardinal; stdcall; //Procedure that loads a Custom Sound +//Procedure that loads a Custom Sound +function LoadSound(const Name: PChar): cardinal; var Stream: TAudioPlaybackStream; - i: Integer; - Filename: String; + i: integer; + Filename: string; begin //Search for Sound in already loaded Sounds Filename := UpperCase(SoundPath + Name); @@ -719,7 +557,7 @@ begin end; end; - Stream := AudioPlayback.OpenSound(SoundPath + String(Name)); + Stream := AudioPlayback.OpenSound(SoundPath + string(Name)); if (Stream = nil) then begin Result := 0; @@ -731,7 +569,8 @@ begin Result := High(CustomSounds); end; -procedure PlaySound(const Index: Cardinal); stdcall; //Plays a Custom Sound +//Plays a Custom Sound +procedure PlaySound(const Index: cardinal); begin if (Index <= High(CustomSounds)) then AudioPlayback.PlaySound(CustomSounds[Index].Stream); diff --git a/unicode/src/screens/UScreenSong.pas b/unicode/src/screens/UScreenSong.pas index da725a59..5d9d730c 100644 --- a/unicode/src/screens/UScreenSong.pas +++ b/unicode/src/screens/UScreenSong.pas @@ -33,24 +33,23 @@ interface {$I switches.inc} - uses - UMenu, - SDL, - UMusic, - UFiles, - UTime, - UDisplay, - USongs, SysUtils, + SDL, UCommon, - ULog, - UThemes, - UTexture, + UDisplay, + UFiles, + UIni, ULanguage, + ULog, + UMenu, + UMenuEqualizer, + UMusic, USong, - UIni, - UMenuEqualizer; + USongs, + UTexture, + UThemes, + UTime; type TScreenSong = class(TMenu) @@ -111,7 +110,6 @@ type StaticNonParty: array of cardinal; TextNonParty: array of cardinal; - constructor Create; override; procedure SetScroll; //procedure SetScroll1; @@ -121,6 +119,7 @@ type procedure SetScroll5; procedure SetScroll6; function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; + function ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; override; function Draw: boolean; override; procedure GenerateThumbnails(); procedure onShow; override; @@ -142,7 +141,7 @@ type //procedures for Menu procedure StartSong; procedure OpenEditor; - procedure DoJoker(Team: Byte); + procedure DoJoker(Team: byte); procedure SelectPlayers; procedure UnloadDetailedCover; @@ -178,7 +177,7 @@ begin if CatSongs.VisibleSongs > 0 then begin I2:= 0; - for I := low(CatSongs.Song) to High(Catsongs.Song) do + for I := Low(CatSongs.Song) to High(Catsongs.Song) do begin if CatSongs.Song[I].Visible then inc(I2); @@ -199,7 +198,7 @@ begin if CatSongs.VisibleSongs > 0 then begin I2:= 0; - for I := low(CatSongs.Song) to High(Catsongs.Song) do + for I := Low(CatSongs.Song) to High(Catsongs.Song) do begin if CatSongs.Song[I].Visible then inc(I2); @@ -243,14 +242,13 @@ begin end; //Show Cat in Top Left Mod End - -// Method for input parsing. If False is returned, GetNextWindow +// Method for input parsing. If false is returned, GetNextWindow // should be checked to know the next window to load; function TScreenSong.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; var I: integer; I2: integer; - SDL_ModState: Word; + SDL_ModState: word; UpperLetter: UCS4Char; TempStr: UTF8String; begin @@ -286,7 +284,7 @@ begin //Jump To Titel if (SDL_ModState = (KMOD_LALT or KMOD_LSHIFT)) then begin - for I := 1 to high(CatSongs.Song) do + for I := 1 to High(CatSongs.Song) do begin if (CatSongs.Song[(I + Interaction) mod I2].Visible) then begin @@ -309,7 +307,7 @@ begin //Jump to Artist else if (SDL_ModState = KMOD_LALT) then begin - for I := 1 to high(CatSongs.Song) do + for I := 1 to High(CatSongs.Song) do begin if (CatSongs.Song[(I + Interaction) mod I2].Visible) then begin @@ -407,25 +405,25 @@ begin if (Songs.SongList.Count > 0) and (Mode = smNormal) then begin - if (SDL_ModState = KMOD_LSHIFT) and (Ini.TabsAtStartup = 1) then //Random Category + if (SDL_ModState = KMOD_LSHIFT) and (Ini.TabsAtStartup = 1) then // random category begin - I2 := 0; //Count Cats - for I:= 0 to high(CatSongs.Song) do + I2 := 0; // count cats + for I := 0 to High(CatSongs.Song) do begin if CatSongs.Song[I].Main then Inc(I2); end; - I2 := Random(I2)+1; //Zufall + I2 := Random(I2 + 1); // random and include I2 - //Find Cat: - for I:= 0 to high(CatSongs.Song) do + // find cat: + for I := 0 to High(CatSongs.Song) do begin if CatSongs.Song[I].Main then Dec(I2); - if (I2<=0) then + if (I2 <= 0) then begin - //Show Cat in Top Left Mod + // show cat in top left mod ShowCatTL (I); Interaction := I; @@ -438,38 +436,38 @@ begin end; end; end - else if (SDL_ModState = KMOD_LCTRL) and (Ini.TabsAtStartup = 1) then //random in All Categorys + else if (SDL_ModState = KMOD_LCTRL) and (Ini.TabsAtStartup = 1) then // random in all categories begin repeat - I2 := Random(high(CatSongs.Song)+1) + 1; + I2 := Random(High(CatSongs.Song) + 1); until (not CatSongs.Song[I2].Main); - //Search Cat + // search cat for I := I2 downto 0 do begin if CatSongs.Song[I].Main then break; end; - //In I is now the categorie in I2 the song + // in I is now the categorie in I2 the song - //Choose Cat + // choose cat CatSongs.ShowCategoryList; - //Show Cat in Top Left Mod + // show cat in top left mod ShowCatTL (I); CatSongs.ClickCategoryButton(I); SelectNext; - //Fix: Not Existing Song selected: - //if (I+1=I2) then - Inc(I2); + // Fix: not existing song selected: + //if (I + 1 = I2) then + Inc(I2); - //Choose Song - SkipTo(I2-I); + // choose song + SkipTo(I2 - I); end - else //Random in one Category + else // random in one category begin SkipTo(Random(CatSongs.VisibleSongs)); end; @@ -501,7 +499,7 @@ begin break; end; if (I <= 1) then - Interaction := high(CatSongs.Song) + Interaction := High(CatSongs.Song) else Interaction := I - 1; @@ -513,7 +511,6 @@ begin //Show Cat in Top Left Mod HideCatTL; - //Show Wrong Song when Tabs on Fix SelectNext; FixSelected; @@ -619,13 +616,13 @@ begin begin I := Interaction; if I <= 0 then - I := 1; + I := 1; while not catsongs.Song[I].Main do begin Inc (I); - if (I > high(catsongs.Song)) then - I := low(catsongs.Song); + if (I > High(catsongs.Song)) then + I := Low(catsongs.Song); end; Interaction := I; @@ -661,15 +658,15 @@ begin I := Interaction; I2 := 0; if I <= 0 then - I := 1; + I := 1; while not catsongs.Song[I].Main or (I2 = 0) do begin if catsongs.Song[I].Main then Inc(I2); Dec (I); - if (I < low(catsongs.Song)) then - I := high(catsongs.Song); + if (I < Low(catsongs.Song)) then + I := High(catsongs.Song); end; Interaction := I; @@ -715,41 +712,61 @@ begin end; SDLK_1: - begin //Joker // to-do : Party - {if (Mode = smPartyMode) and (PartySession.Teams.NumTeams >= 1) and (PartySession.Teams.Teaminfo[0].Joker > 0) then + begin //Joker + if (Mode = smPartyMode) and (PartySession.Teams.NumTeams >= 1) and (PartySession.Teams.Teaminfo[0].Joker > 0) then begin //Use Joker Dec(PartySession.Teams.Teaminfo[0].Joker); SelectRandomSong; SetJoker; - end; } + end; end; SDLK_2: begin //Joker - {if (Mode = smPartyMode) and (PartySession.Teams.NumTeams >= 2) and (PartySession.Teams.Teaminfo[1].Joker > 0) then + if (Mode = smPartyMode) and (PartySession.Teams.NumTeams >= 2) and (PartySession.Teams.Teaminfo[1].Joker > 0) then begin //Use Joker Dec(PartySession.Teams.Teaminfo[1].Joker); SelectRandomSong; SetJoker; - end; } + end; end; SDLK_3: begin //Joker - {if (Mode = smPartyMode) and (PartySession.Teams.NumTeams >= 3) and (PartySession.Teams.Teaminfo[2].Joker > 0) then + if (Mode = smPartyMode) and (PartySession.Teams.NumTeams >= 3) and (PartySession.Teams.Teaminfo[2].Joker > 0) then begin //Use Joker Dec(PartySession.Teams.Teaminfo[2].Joker); SelectRandomSong; SetJoker; - end; } + end; end; end; end; // if (PressedDown) end; +function TScreenSong.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; +begin + Result := true; + + if RightMbESC and (MouseButton = SDL_BUTTON_RIGHT) and BtnDown then + //if RightMbESC is set, send ESC keypress + Result:=ParseInput(SDLK_ESCAPE, #0, true); + + //song scrolling with mousewheel + if (MouseButton = SDL_BUTTON_WHEELDOWN) and BtnDown then + ParseInput(SDLK_RIGHT, #0, true); + + if (MouseButton = SDL_BUTTON_WHEELUP) and BtnDown then + ParseInput(SDLK_LEFT, #0, true); + + //LMB anywhere starts + if (MouseButton = SDL_BUTTON_LEFT) and BtnDown then + ParseInput(SDLK_RETURN, #0, true); +end; + constructor TScreenSong.Create; var i: integer; @@ -811,7 +828,6 @@ begin GenerateThumbnails(); - // Randomize Patch Randomize; @@ -966,7 +982,6 @@ begin if CatSongs.Song[B].Visible then Inc(VisInt); - if VisCount <= 6 then begin Typ := 0; @@ -995,7 +1010,6 @@ begin end; - // hide all buttons for B := 0 to High(Button) do begin @@ -1013,7 +1027,6 @@ begin end; } - if Typ = 0 then begin for B := 0 to High(Button) do @@ -1310,27 +1323,26 @@ begin if Button[B].Visible then // optimization for 1000 songs - updates only visible songs, hiding in tabs becomes useful for maintaing good speed begin - Factor := 2 * pi * (CatSongs.VisibleIndex(B) - SongCurrent) / VS {CatSongs.VisibleSongs};// 0.5.0 (II): takes another 16ms - - Z := (1 + cos(Factor)) / 2; - Z2 := (1 + 2*Z) / 3; + Factor := 2 * pi * (CatSongs.VisibleIndex(B) - SongCurrent) / VS {CatSongs.VisibleSongs};// 0.5.0 (II): takes another 16ms + Z := (1 + cos(Factor)) / 2; + Z2 := (1 + 2*Z) / 3; - Button[B].Y := Theme.Song.Cover.Y + (0.185 * Theme.Song.Cover.H * VS * sin(Factor)) * Z2 - ((Button[B].H - Theme.Song.Cover.H)/2); // 0.5.0 (I): 2 times faster by not calling CatSongs.VisibleSongs - Button[B].Z := Z / 2 + 0.3; + Button[B].Y := Theme.Song.Cover.Y + (0.185 * Theme.Song.Cover.H * VS * sin(Factor)) * Z2 - ((Button[B].H - Theme.Song.Cover.H)/2); // 0.5.0 (I): 2 times faster by not calling CatSongs.VisibleSongs + Button[B].Z := Z / 2 + 0.3; - Button[B].W := Theme.Song.Cover.H * Z2; + Button[B].W := Theme.Song.Cover.H * Z2; - //Button[B].Y := {50 +} 140 + 50 - 50 * Z2; - Button[B].X := Theme.Song.Cover.X + (Theme.Song.Cover.H - Abs(Button[B].H)) * 0.7 ; - Button[B].H := Button[B].W; + //Button[B].Y := {50 +} 140 + 50 - 50 * Z2; + Button[B].X := Theme.Song.Cover.X + (Theme.Song.Cover.H - Abs(Button[B].H)) * 0.7 ; + Button[B].H := Button[B].W; end; end; end else begin //Change Pos of all Buttons - for B := low(Button) to high(Button) do + for B := Low(Button) to High(Button) do begin Button[B].Visible := CatSongs.Song[B].Visible; //Adjust Visibility if Button[B].Visible then //Only Change Pos for Visible Buttons @@ -1358,7 +1370,6 @@ begin Diff := (Button[B].H - Theme.Song.Cover.H)/2; - X := Sin(Angle*1.3)*0.9; Button[B].Y := Theme.Song.Cover.Y + Theme.Song.Cover.W * X - Diff; @@ -1368,9 +1379,9 @@ begin // limit-bg-covers hack if (abs(VS/2-abs(Pos))>10) then - Button[B].Visible := false; + Button[B].Visible := false; if VS > 25 then - VS:=25; + VS:=25; // end of limit-bg-covers hack if Pos < 0 then @@ -1388,7 +1399,6 @@ begin Button[B].X := Theme.Song.Cover.X - (Button[B].H - Theme.Song.Cover.H)*0.5; - Button[B].DeSelectReflectionspacing := 15 * Button[B].H/Theme.Song.Cover.H; Button[B].Y := Theme.Song.Cover.Y+Theme.Song.Cover.H/2-Button[b].H/2+Theme.Song.Cover.W/320*(Theme.Song.Cover.H*sin(Angle/2)*1.52); @@ -1398,7 +1408,6 @@ begin end; end; - procedure TScreenSong.onShow; begin inherited; @@ -1462,7 +1471,7 @@ begin AudioPlayback.SetVolume(1.0); // if preview is deactivated: load musicfile now - If (IPreviewVolumeVals[Ini.PreviewVolume] = 0) then + if (IPreviewVolumeVals[Ini.PreviewVolume] = 0) then AudioPlayback.Open(CatSongs.Song[Interaction].Path + CatSongs.Song[Interaction].Mp3); // if hide then stop music (for party mode popup on exit) @@ -1722,41 +1731,40 @@ var I, I2: integer; begin case PlaylistMan.Mode of - smNormal: //All Songs Just Select Random Song + smNormal: // all songs just select random song begin - //When Tabs are activated then use Tab Method + // when tabs are activated then use tab method if (Ini.TabsAtStartup = 1) then begin repeat - I2 := Random(high(CatSongs.Song)+1) - low(CatSongs.Song)+1; + I2 := Low(CatSongs.Song) + Random(High(CatSongs.Song) + 1 - Low(CatSongs.Song)); until CatSongs.Song[I2].Main = false; - //Search Cat - for I := I2 downto low(CatSongs.Song) do + // search cat + for I := I2 downto Low(CatSongs.Song) do begin if CatSongs.Song[I].Main then break; end; - //In I ist jetzt die Kategorie in I2 der Song - //I is the CatNum, I2 is the No of the Song within this Cat + // I is the cat number, I2 is the no of the song within this cat - //Choose Cat + // choose cat CatSongs.ShowCategoryList; - //Show Cat in Top Left Mod - ShowCatTL (I); + // show cat in top left mod + ShowCatTL(I); CatSongs.ClickCategoryButton(I); SelectNext; - //Choose Song - SkipTo(I2-I); + // choose song + SkipTo(I2 - I); end - //When Tabs are deactivated use easy Method + // when tabs are deactivated use easy method else SkipTo(Random(CatSongs.VisibleSongs)); end; - smPartyMode: //One Category Select Category and Select Random Song + smPartyMode: // one category select category and select random song begin CatSongs.ShowCategoryList; CatSongs.ClickCategoryButton(PlaylistMan.CurPlayList); @@ -1767,7 +1775,7 @@ begin SkipTo(Random(CatSongs.VisibleSongs)); end; - smPlaylistRandom: //Playlist: Select Playlist and Select Random Song + smPlaylistRandom: // playlist: select playlist and select random song begin PlaylistMan.SetPlayList(PlaylistMan.CurPlayList); @@ -1784,10 +1792,8 @@ end; procedure TScreenSong.SetJoker; begin // If Party Mode - // to-do : Party if Mode = smPartyMode then //Show Joker that are available begin - (* if (PartySession.Teams.NumTeams >= 1) then begin Static[StaticTeam1Joker1].Visible := (PartySession.Teams.Teaminfo[0].Joker >= 1); @@ -1838,7 +1844,6 @@ begin Static[StaticTeam3Joker4].Visible := false; Static[StaticTeam3Joker5].Visible := false; end; - *) end else begin //Hide all @@ -1870,19 +1875,19 @@ begin //Set Visibility of Party Statics and Text Visible := (Mode = smPartyMode); - for I := 0 to high(StaticParty) do + for I := 0 to High(StaticParty) do Static[StaticParty[I]].Visible := Visible; - for I := 0 to high(TextParty) do + for I := 0 to High(TextParty) do Text[TextParty[I]].Visible := Visible; //Set Visibility of Non Party Statics and Text Visible := not Visible; - for I := 0 to high(StaticNonParty) do + for I := 0 to High(StaticNonParty) do Static[StaticNonParty[I]].Visible := Visible; - for I := 0 to high(TextNonParty) do + for I := 0 to High(TextNonParty) do Text[TextNonParty[I]].Visible := Visible; end; @@ -1927,9 +1932,8 @@ begin end; //Team No of Team (0-5) -procedure TScreenSong.DoJoker (Team: Byte); +procedure TScreenSong.DoJoker (Team: byte); begin - { if (Mode = smPartyMode) and (PartySession.Teams.NumTeams >= Team + 1) and (PartySession.Teams.Teaminfo[Team].Joker > 0) then @@ -1939,7 +1943,6 @@ begin SelectRandomSong; SetJoker; end; - } end; //Detailed Cover Unloading. Unloads the Detailed, uncached Cover of the cur. Song diff --git a/unicode/src/screens/UScreenSongJumpto.pas b/unicode/src/screens/UScreenSongJumpto.pas index b6979f63..87b31106 100644 --- a/unicode/src/screens/UScreenSongJumpto.pas +++ b/unicode/src/screens/UScreenSongJumpto.pas @@ -47,24 +47,24 @@ type TScreenSongJumpto = class(TMenu) private //For ChangeMusic - fLastPlayed: Integer; - fVisible: Boolean; + fLastPlayed: integer; + fVisible: boolean; fSelectType: TSongFilter; - fVisSongs: Integer; + fVisSongs: integer; procedure SetTextFound(Count: Cardinal); //Visible //Whether the Menu should be Drawn //Whether the Menu should be Drawn - procedure SetVisible(Value: Boolean); + procedure SetVisible(Value: boolean); public constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; function Draw: boolean; override; - property Visible: Boolean read fVisible write SetVisible; + property Visible: boolean read fVisible write SetVisible; end; implementation @@ -76,14 +76,15 @@ uses UTexture, ULanguage, UParty, + USongs, UScreenSong, ULog, UUnicodeUtils; -function TScreenSongJumpto.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenSongJumpto.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys if (IsAlphaNumericChar(CharCode) or @@ -100,7 +101,7 @@ begin case PressedKey of SDLK_BACKSPACE: begin - if (Interaction = 0) AND (Length(Button[0].Text[0].Text) > 0) then + if (Interaction = 0) and (Length(Button[0].Text[0].Text) > 0) then begin Button[0].Text[0].DeleteLastLetter(); SetTextFound(CatSongs.SetFilter(Button[0].Text[0].Text, fSelectType)); @@ -110,9 +111,9 @@ begin SDLK_RETURN, SDLK_ESCAPE: begin - Visible := False; + Visible := false; AudioPlayback.PlaySound(SoundLib.Back); - if (fVisSongs = 0) AND (Length(Button[0].Text[0].Text) > 0) then + if (fVisSongs = 0) and (Length(Button[0].Text[0].Text) > 0) then begin ScreenSong.UnLoadDetailedCover; Button[0].Text[0].Text := ''; @@ -168,15 +169,14 @@ begin fSelectType := fltAll; AddSelectSlide(Theme.SongJumpto.SelectSlideType, PInteger(@fSelectType)^, Theme.SongJumpto.IType); - Interaction := 0; fLastPlayed := 0; end; -procedure TScreenSongJumpto.SetVisible(Value: Boolean); +procedure TScreenSongJumpto.SetVisible(Value: boolean); begin //If change from invisible to Visible then OnShow - if (fVisible = False) AND (Value = True) then + if (fVisible = false) and (Value = true) then OnShow; fVisible := Value; @@ -197,7 +197,7 @@ begin //Select Input Interaction := 0; - Button[0].Text[0].Selected := True; + Button[0].Text[0].Selected := true; fLastPlayed := ScreenSong.Interaction; end; @@ -207,7 +207,7 @@ begin Result := inherited Draw; end; -procedure TScreenSongJumpto.SetTextFound(Count: Cardinal); +procedure TScreenSongJumpto.SetTextFound(Count: cardinal); begin if (Count = 0) then begin @@ -225,7 +225,6 @@ begin ScreenSong.ShowCatTLCustom(Format(Theme.SongJumpto.CatText, [Button[0].Text[0].Text])); end; - //Set visSongs fVisSongs := Count; diff --git a/unicode/src/screens/UScreenSongMenu.pas b/unicode/src/screens/UScreenSongMenu.pas index b8720b86..e09dd9b5 100644 --- a/unicode/src/screens/UScreenSongMenu.pas +++ b/unicode/src/screens/UScreenSongMenu.pas @@ -196,7 +196,6 @@ begin SetLength(ISelections, 1); ISelections[0] := 'Dummy'; - AddText(Theme.SongMenu.TextMenu); LoadFromTheme(Theme.SongMenu); @@ -402,19 +401,16 @@ begin begin CurMenu := sMenu; Text[0].Text := Language.Translate('SONG_MENU_NAME_PARTY_JOKER'); - // to-do : Party -{ - Button[0].Visible := (PartySession.Teams.NumTeams >= 1) and (PartySession.Teams.Teaminfo[0].Joker > 0); + + Button[0].Visible := (PartySession.Teams.NumTeams >= 1) and (PartySession.Teams.Teaminfo[0].Joker > 0); Button[1].Visible := (PartySession.Teams.NumTeams >= 2) and (PartySession.Teams.Teaminfo[1].Joker > 0); Button[2].Visible := (PartySession.Teams.NumTeams >= 3) and (PartySession.Teams.Teaminfo[2].Joker > 0); -} Button[3].Visible := true; SelectsS[0].Visible := false; -{ - Button[0].Text[0].Text := String(PartySession.Teams.Teaminfo[0].Name); - Button[1].Text[0].Text := String(PartySession.Teams.Teaminfo[1].Name); - Button[2].Text[0].Text := String(PartySession.Teams.Teaminfo[2].Name); -} + + Button[0].Text[0].Text := string(PartySession.Teams.Teaminfo[0].Name); + Button[1].Text[0].Text := string(PartySession.Teams.Teaminfo[1].Name); + Button[2].Text[0].Text := string(PartySession.Teams.Teaminfo[2].Name); Button[3].Text[0].Text := Language.Translate('SONG_MENU_CANCEL'); // set right interaction @@ -425,10 +421,10 @@ begin if (not Button[2].Visible) then Interaction := 4 else - Interaction := 2; + Interaction := 2; end else - Interaction := 1; + Interaction := 1; end; end; diff --git a/unicode/src/screens/UScreenStatDetail.pas b/unicode/src/screens/UScreenStatDetail.pas index 6241ee2e..5a0419b7 100644 --- a/unicode/src/screens/UScreenStatDetail.pas +++ b/unicode/src/screens/UScreenStatDetail.pas @@ -47,21 +47,20 @@ type TScreenStatDetail = class(TMenu) public Typ: TStatType; - Page: Cardinal; - Count: Byte; - Reversed: Boolean; - - TotEntrys: Cardinal; - TotPages: Cardinal; + Page: cardinal; + Count: byte; + Reversed: boolean; + TotEntrys: cardinal; + TotPages: cardinal; constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; procedure SetAnimationProgress(Progress: real); override; procedure SetTitle; - Procedure SetPage(NewPage: Cardinal); + Procedure SetPage(NewPage: cardinal); end; implementation @@ -74,10 +73,10 @@ uses ULog, UUnicodeUtils; -function TScreenStatDetail.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenStatDetail.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of @@ -98,24 +97,28 @@ begin end; SDLK_RETURN: begin - if Interaction = 0 then begin + if Interaction = 0 then + begin //Next Page SetPage(Page+1); end; - if Interaction = 1 then begin + if Interaction = 1 then + begin //Previous Page if (Page > 0) then SetPage(Page-1); end; - if Interaction = 2 then begin + if Interaction = 2 then + begin //Reverse Order Reversed := not Reversed; SetPage(Page); end; - if Interaction = 3 then begin + if Interaction = 3 then + begin AudioPlayback.PlaySound(SoundLib.Back); FadeTo(@ScreenStatMain); end; @@ -188,7 +191,7 @@ begin SetTitle; //Show First Page - Reversed := False; + Reversed := false; SetPage(0); end; @@ -200,12 +203,12 @@ begin Text[Count].Text := Theme.StatDetail.Description[Ord(Typ)]; end; -procedure TScreenStatDetail.SetPage(NewPage: Cardinal); +procedure TScreenStatDetail.SetPage(NewPage: cardinal); var StatList: TList; - I: Integer; - FormatStr: String; - PerPage: Byte; + I: integer; + FormatStr: string; + PerPage: byte; begin // fetch statistics StatList := Database.GetStats(Typ, Count, NewPage, Reversed); @@ -289,9 +292,9 @@ begin Database.FreeStats(StatList); end; - procedure TScreenStatDetail.SetAnimationProgress(Progress: real); -var I: Integer; +var + I: integer; begin for I := 0 to High(Button) do Button[I].Texture.ScaleW := Progress; diff --git a/unicode/src/screens/UScreenStatMain.pas b/unicode/src/screens/UScreenStatMain.pas index a183f04c..6d4d3f5b 100644 --- a/unicode/src/screens/UScreenStatMain.pas +++ b/unicode/src/screens/UScreenStatMain.pas @@ -46,14 +46,14 @@ type TScreenStatMain = class(TMenu) private //Some Stat Value that don't need to be calculated 2 times - SongsWithVid: Cardinal; + SongsWithVid: cardinal; function FormatOverviewIntro(FormatStr: string): string; function FormatSongOverview(FormatStr: string): string; function FormatPlayerOverview(FormatStr: string): string; public TextOverview: integer; constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure onShow; override; procedure SetAnimationProgress(Progress: real); override; @@ -73,10 +73,10 @@ uses ULog, UUnicodeUtils; -function TScreenStatMain.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenStatMain.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then + if (PressedDown) then begin // Key Down // check normal keys case UCS4UpperCase(CharCode) of @@ -165,7 +165,7 @@ begin //Set Songs with Vid SongsWithVid := 0; - For I := 0 to Songs.SongList.Count -1 do + for I := 0 to Songs.SongList.Count -1 do if (TSong(Songs.SongList[I]).Video <> '') then Inc(SongsWithVid); end; @@ -180,7 +180,7 @@ end; function TScreenStatMain.FormatOverviewIntro(FormatStr: string): string; var - Year, Month, Day: Word; + Year, Month, Day: word; begin {Format: %0:d Ultrastar Version @@ -201,8 +201,8 @@ end; function TScreenStatMain.FormatSongOverview(FormatStr: string): string; var - CntSongs, CntSungSongs, CntVidSongs: Integer; - MostPopSongArtist, MostPopSongTitle: String; + CntSongs, CntSungSongs, CntVidSongs: integer; + MostPopSongArtist, MostPopSongTitle: string; StatList: TList; MostSungSong: TStatResultMostSungSong; begin @@ -217,7 +217,7 @@ begin CntSungSongs := Database.GetTotalEntrys(stMostSungSong); CntVidSongs := SongsWithVid; - StatList := Database.GetStats(stMostSungSong, 1, 0, False); + StatList := Database.GetStats(stMostSungSong, 1, 0, false); if ((StatList <> nil) and (StatList.Count > 0)) then begin MostSungSong := StatList[0]; @@ -245,11 +245,11 @@ end; function TScreenStatMain.FormatPlayerOverview(FormatStr: string): string; var - CntPlayers: Integer; + CntPlayers: integer; BestScoreStat: TStatResultBestScores; BestSingerStat: TStatResultBestSingers; - BestPlayer, BestScorePlayer: String; - BestPlayerScore, BestScore: Integer; + BestPlayer, BestScorePlayer: string; + BestPlayerScore, BestScore: integer; SingerStats, ScoreStats: TList; begin {Format: @@ -261,7 +261,7 @@ begin CntPlayers := Database.GetTotalEntrys(stBestSingers); - SingerStats := Database.GetStats(stBestSingers, 1, 0, False); + SingerStats := Database.GetStats(stBestSingers, 1, 0, false); if ((SingerStats <> nil) and (SingerStats.Count > 0)) then begin BestSingerStat := SingerStats[0]; @@ -275,7 +275,7 @@ begin end; Database.FreeStats(SingerStats); - ScoreStats := Database.GetStats(stBestScores, 1, 0, False); + ScoreStats := Database.GetStats(stBestScores, 1, 0, false); if ((ScoreStats <> nil) and (ScoreStats.Count > 0)) then begin BestScoreStat := ScoreStats[0]; @@ -303,7 +303,7 @@ end; procedure TScreenStatMain.SetOverview; var - Overview: String; + Overview: string; begin // Format overview Overview := FormatOverviewIntro(Language.Translate('STAT_OVERVIEW_INTRO')) + '\n \n' + @@ -312,11 +312,11 @@ begin Text[0].Text := Overview; end; - procedure TScreenStatMain.SetAnimationProgress(Progress: real); -var I: Integer; +var + I: integer; begin - For I := 0 to high(Button) do + for I := 0 to high(Button) do Button[I].Texture.ScaleW := Progress; end; diff --git a/unicode/src/screens/UScreenTop5.pas b/unicode/src/screens/UScreenTop5.pas index eaa90ab1..2ddca8ef 100644 --- a/unicode/src/screens/UScreenTop5.pas +++ b/unicode/src/screens/UScreenTop5.pas @@ -57,6 +57,7 @@ type constructor Create; override; function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; + function ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; override; procedure onShow; override; function Draw: boolean; override; end; @@ -74,7 +75,7 @@ uses function TScreenTop5.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - if (PressedDown) then + if PressedDown then begin // check normal keys case UCS4UpperCase(CharCode) of @@ -92,7 +93,7 @@ begin SDLK_RETURN: begin if (not Fadeout) then - begin + begin FadeTo(@ScreenSong); Fadeout := true; end; @@ -105,6 +106,16 @@ begin end; end; +function TScreenTop5.ParseMouse(MouseButton: integer; + BtnDown: boolean; + X, Y: integer): boolean; +begin + Result := true; + if (MouseButton = SDL_BUTTON_LEFT) and BtnDown then + //left-click anywhere sends return + ParseInput(SDLK_RETURN, #0, true); +end; + constructor TScreenTop5.Create; var I: integer; @@ -113,19 +124,16 @@ begin LoadFromTheme(Theme.Top5); - - TextLevel := AddText(Theme.Top5.TextLevel); + TextLevel := AddText(Theme.Top5.TextLevel); TextArtistTitle := AddText(Theme.Top5.TextArtistTitle); for I := 0 to 4 do - StaticNumber[I+1] := AddStatic( Theme.Top5.StaticNumber[I] ); - - for I := 0 to 4 do - TextNumber[I+1] := AddText(Theme.Top5.TextNumber[I]); - for I := 0 to 4 do - TextName[I+1] := AddText(Theme.Top5.TextName[I]); - for I := 0 to 4 do - TextScore[I+1] := AddText(Theme.Top5.TextScore[I]); + begin + StaticNumber[I+1] := AddStatic(Theme.Top5.StaticNumber[I]); + TextNumber[I+1] := AddText (Theme.Top5.TextNumber[I]); + TextName[I+1] := AddText (Theme.Top5.TextName[I]); + TextScore[I+1] := AddText (Theme.Top5.TextScore[I]); + end; end; @@ -162,7 +170,7 @@ begin Text[TextScore[I]].Text := IntToStr(CurrentSong.Score[Ini.Difficulty, I-1].Score); end; - for I := Length(CurrentSong.Score[Ini.Difficulty])+1 to 5 do + for I := Length(CurrentSong.Score[Ini.Difficulty]) + 1 to 5 do begin Static[StaticNumber[I]].Visible := false; Text[TextNumber[I]].Visible := false; diff --git a/unicode/src/screens/UScreenWelcome.pas b/unicode/src/screens/UScreenWelcome.pas index 4df2b6f7..b798629f 100644 --- a/unicode/src/screens/UScreenWelcome.pas +++ b/unicode/src/screens/UScreenWelcome.pas @@ -34,7 +34,10 @@ interface {$I switches.inc} uses - UMenu, SDL, SysUtils, UThemes; + UMenu, + SDL, + SysUtils, + UThemes; type TScreenWelcome = class(TMenu) @@ -42,24 +45,29 @@ type Animation: real; Fadeout: boolean; constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; function Draw: boolean; override; procedure onShow; override; end; implementation -uses UGraphic, UTime, USkins, UTexture; +uses + UGraphic, + UTime, + USkins, + UTexture; -function TScreenWelcome.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: Boolean): Boolean; +function TScreenWelcome.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin Result := true; - If (PressedDown) Then begin + if (PressedDown) then + begin case PressedKey of SDLK_ESCAPE, SDLK_BACKSPACE : begin - Result := False; + Result := false; end; SDLK_RETURN: begin @@ -102,12 +110,14 @@ begin // draw nothing Min := 0; Max := 1000; - if (Animation >= Min) and (Animation < Max) then begin + if (Animation >= Min) and (Animation < Max) then + begin end; // popup Min := 1000; Max := 1120; - if (Animation >= Min) and (Animation < Max) then begin + if (Animation >= Min) and (Animation < Max) then + begin Factor := (Animation - Min) / (Max - Min); Static[0].Texture.X := 600; Static[0].Texture.Y := 600 - Factor * 230; @@ -117,7 +127,8 @@ begin // bounce Min := 1120; Max := 1200; - if (Animation >= Min) and (Animation < Max) then begin + if (Animation >= Min) and (Animation < Max) then + begin Factor := (Animation - Min) / (Max - Min); Static[0].Texture.Y := 370 + Factor * 50; Static[0].Texture.H := 230 - Factor * 50; @@ -125,14 +136,15 @@ begin // run Min := 1500; Max := 3500; - if (Animation >= Min) and (Animation < Max) then begin + if (Animation >= Min) and (Animation < Max) then + begin Factor := (Animation - Min) / (Max - Min); Static[0].Texture.X := 600 - Factor * 1400; Static[0].Texture.H := 180; - - for Count := 1 to 5 do begin + for Count := 1 to 5 do + begin Static[Count].Texture.X := 770 - Factor * 1400; Static[Count].Texture.W := 150 + Factor * 200; Static[Count].Texture.Alpha := Factor * 0.5; @@ -140,7 +152,8 @@ begin end; Min := 3500; - if (Animation >= Min) and (not Fadeout) then begin + if (Animation >= Min) and (not Fadeout) then + begin FadeTo(@ScreenMain); Fadeout := true; end; diff --git a/unicode/src/ultrastardx.dpr b/unicode/src/ultrastardx.dpr index 9bcc4aca..f6376365 100644 --- a/unicode/src/ultrastardx.dpr +++ b/unicode/src/ultrastardx.dpr @@ -203,6 +203,7 @@ uses USingNotes in 'base\USingNotes.pas', UPath in 'base\UPath.pas', UNote in 'base\UNote.pas', + UBeatTimer in 'base\UBeatTimer.pas', TextGL in 'base\TextGL.pas', UUnicodeUtils in 'base\UUnicodeUtils.pas', @@ -215,22 +216,6 @@ uses //------------------------------ //Includes - Plugin Support //------------------------------ - {UPluginDefines in 'pluginsupport\UPluginDefines.pas', - UPartyDefines in 'pluginsupport\UPartyDefines.pas', - - UPartyMode in 'pluginsupport\UPartyMode.pas', - UPartyManager in 'pluginsupport\UPartyManager.pas', - UPartyModePlugin in 'pluginsupport\UPartyModePlugin.pas', - UPluginLoader in 'pluginsupport\UPluginLoader.pas', } - - UModules in 'base\UModules.pas', //List of Modules to Load - UHooks in 'base\UHooks.pas', //Hook Managing - UServices in 'base\UServices.pas', //Service Managing - UCore in 'base\UCore.pas', //Core, Maybe remove this - UCoreModule in 'base\UCoreModule.pas', //^ - UPluginInterface in 'base\UPluginInterface.pas', //Interface offered by Core to Plugins - UPluginLoader in 'base\UPluginLoader.pas', //New Plugin Loader Module - UParty in 'base\UParty.pas', // TODO: rewrite Party Manager as Module, reomplent ability to offer party Mody by Plugin //------------------------------ @@ -254,7 +239,7 @@ uses UAudioPlaybackBase in 'media\UAudioPlaybackBase.pas', {$IF Defined(UsePortaudioPlayback) or Defined(UseSDLPlayback)} UFFT in 'lib\fft\UFFT.pas', - UAudioPlayback_Softmixer in 'media\UAudioPlayback_SoftMixer.pas', + UAudioPlayback_SoftMixer in 'media\UAudioPlayback_SoftMixer.pas', {$IFEND} UAudioConverter in 'media\UAudioConverter.pas', @@ -342,8 +327,6 @@ uses //Includes - Modi SDK //------------------------------ ModiSDK in '..\plugins\SDK\ModiSDK.pas', //Old SDK, will be deleted soon - UPluginDefs in '..\plugins\SDK\UPluginDefs.pas', //New SDK, not only Modis - UPartyDefs in '..\plugins\SDK\UPartyDefs.pas', //Headers to register Party Modes SysUtils; diff --git a/unicode/test/test001.pas b/unicode/test/test001.pas new file mode 100644 index 00000000..c9ba266f --- /dev/null +++ b/unicode/test/test001.pas @@ -0,0 +1,86 @@ +program test001; + +{ +This program tests the function glext_ExtensionSupported from unit glext. +} + +uses + SysUtils, + SDL in '../src/lib/JEDI-SDL/SDL/Pas/sdl.pas', + moduleloader in '../src/lib/JEDI-SDL/SDL/Pas/moduleloader.pas', + gl in '../src/lib/JEDI-SDL/OpenGL/Pas/gl.pas', + glext in '../src/lib/JEDI-SDL/OpenGL/Pas/glext.pas'; + +const + s1: pchar = ''; + s2: pchar = 'ext'; + s3: pchar = ' ext'; + s4: pchar = ' ext '; + s5: pchar = 'kkshf kjsfh ext'; + s6: pchar = 'fakh sajhf ext jskdhf'; + s7: pchar = 'ext jshf'; + s8: pchar = 'sdkjfh ksjhext sjdha'; + s9: pchar = 'sdkjfh ksjh extsjdha'; + s10: pchar = 'sdkjfh ksjhextsjdha'; + s11: pchar = 'sd kjf jdha'; + + e1: pchar = ''; + e2: pchar = 'ext'; + e3: pchar = 'GL_ARB_window_pos'; + + SCREEN_WIDTH = 640; + SCREEN_HEIGHT = 480; + SCREEN_BPP = 16; + +var + surface: PSDL_Surface; + videoFlags: integer; + testFailed: boolean; + +procedure treatTestFailure(testNumber: integer, var testFailed: boolean); +begin + writeln; + write ('test001, ', testNumber, ': failed'); + testFailed := true; +end; + +begin + write ('test001: Start ... '); + testFailed := false; + +// initialize SDL and OpenGL for the use of glGetString(GL_EXTENSIONS) +// within glext_ExtensionSupported. + + SDL_Init( SDL_INIT_VIDEO); + +// the flags to pass to SDL_SetVideoMode + videoFlags := SDL_OPENGL; + +// get a SDL surface + surface := SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, videoFlags); + +// Initialization finished + + if glext_ExtensionSupported(e1, s1) then treatTestFailure( 1, testFailed); + if glext_ExtensionSupported(e1, s2) then treatTestFailure( 2, testFailed); + if glext_ExtensionSupported(e2, s1) then treatTestFailure( 3, testFailed); + if not glext_ExtensionSupported(e2, s2) then treatTestFailure( 4, testFailed); + if not glext_ExtensionSupported(e2, s3) then treatTestFailure( 5, testFailed); + if not glext_ExtensionSupported(e2, s4) then treatTestFailure( 6, testFailed); + if not glext_ExtensionSupported(e2, s5) then treatTestFailure( 7, testFailed); + if not glext_ExtensionSupported(e2, s6) then treatTestFailure( 8, testFailed); + if not glext_ExtensionSupported(e2, s7) then treatTestFailure( 9, testFailed); + if glext_ExtensionSupported(e2, s8) then treatTestFailure(10, testFailed); + if glext_ExtensionSupported(e2, s9) then treatTestFailure(11, testFailed); + if glext_ExtensionSupported(e2, s10) then treatTestFailure(12, testFailed); + if glext_ExtensionSupported(e2, s11) then treatTestFailure(13, testFailed); + if not glext_ExtensionSupported(e3, s1) then treatTestFailure(14, testFailed); + + if testFailed then + begin + writeln; + writeln ('test001: End'); + end + else + writeln ('End'); +end.
\ No newline at end of file |