From ea92932825739b6d7f5ac1434382a1a59a0371fd Mon Sep 17 00:00:00 2001 From: brunzelchen Date: Sun, 30 May 2010 09:31:51 +0000 Subject: - new acinerella.dll (based on 1.4) - the song does not restart if you change the video gap in the editor while playing - some corrections in Blue Sensation theme; darker sing notes graphics - some bugfixes - max fps at ~200 git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/1.0.1 Challenge MOD@2425 b956fd51-792f-4845-bead-9b4dfca2ff2c --- Game/Code/Classes/UGraphic.pas | 56 ++++++------ Game/Code/Classes/UMain.pas | 8 +- Game/Code/Classes/USongs.pas | 44 ++++----- Game/Code/Classes/UVideo.pas | 12 +-- Game/Code/Screens/UScreenEditSub.pas | 19 +--- Game/Code/Screens/UScreenSong.pas | 31 +++---- Game/Code/UltraStar.bdsproj | 2 +- Game/Code/UltraStar.cfg | 2 +- Game/Code/UltraStar.dpr | 4 +- Game/Code/lib/acinerella/acinerella.c | 58 +++++++----- Game/Code/lib/acinerella/acinerella.h | 7 +- Game/Code/lib/acinerella/acinerella.pas | 13 ++- .../Skins/Blue Sensation/[sing]notesLeft.bmp | Bin 824 -> 822 bytes .../Output/Skins/Blue Sensation/[sing]notesMid.bmp | Bin 3128 -> 3126 bytes .../Skins/Blue Sensation/[sing]notesRight.bmp | Bin 824 -> 822 bytes Game/Output/Themes/Blue Sensation.ini | 98 ++++++++++----------- Game/Output/Themes/Deluxe.ini | 4 +- Game/Output/acinerella.dll | Bin 6077459 -> 6077459 bytes 18 files changed, 179 insertions(+), 179 deletions(-) diff --git a/Game/Code/Classes/UGraphic.pas b/Game/Code/Classes/UGraphic.pas index 4aed06f3..7604e68e 100644 --- a/Game/Code/Classes/UGraphic.pas +++ b/Game/Code/Classes/UGraphic.pas @@ -257,13 +257,12 @@ begin Log.LogStatus('LoadOpenGL', 'Initialize3D'); Log.BenchmarkStart(2); - LoadOpenGL( GLLibName ); - + { Log.LogStatus('SDL_Init', 'Initialize3D'); - if ( SDL_Init(SDL_INIT_VIDEO or SDL_INIT_AUDIO)= -1 ) then begin + if ( SDL_Init(SDL_INIT_VIDEO)= -1 ) then begin Log.LogError('SDL_Init Failed', 'Initialize3D'); exit; - end; + end;} { //Load Icon Res := TResourceStream.CreateFromID(HInstance, 3, RT_ICON); @@ -331,10 +330,10 @@ end; procedure SwapBuffers; begin SDL_GL_SwapBuffers; - {glMatrixMode(GL_PROJECTION); + glMatrixMode(GL_PROJECTION); glLoadIdentity; - glOrtho(0, 800, 600, 0, -1, 100); - glMatrixMode(GL_MODELVIEW);} + glOrtho(0, RenderW, RenderH, 0, -1, 100); + glMatrixMode(GL_MODELVIEW); end; procedure Reinitialize3D; @@ -395,7 +394,8 @@ begin videoFlags := videoFlags or SDL_SWSURFACE; if ( videoInfo.blit_hw <> 0 ) then videoFlags := videoFlags or SDL_HWACCEL; - + //LoadOpenGL( GLLibName ); + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); @@ -404,18 +404,6 @@ begin SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 8 ); - pbo_supported := false; - {if (Ini.EnablePBO=1) then - begin - try - pbo_supported := glext_LoadExtension('GL_ARB_pixel_buffer_object') and - glext_LoadExtension('GL_version_1_5'); - except - pbo_supported := false; - Log.LogError('The device does not support Pixel Buffer Object (UVideo)!'); - end; - end;} - if (Ini.FullScreen = 0) and (Not Params.FullScreen) then screen := SDL_SetVideoMode(W, H, (Depth+1) * 16, videoFlags) else begin @@ -427,17 +415,35 @@ begin Log.LogError('SDL_SetVideoMode Failed', 'Initialize3D'); exit; end; - - // clear screen once window is being shown - glClearColor(1, 1, 1, 1); - glClear(GL_COLOR_BUFFER_BIT); - SwapBuffers; + + // Load OpenGL 1.2 extensions for OpenGL 1.2 compatibility + if (not Load_GL_version_1_2()) then + begin + Log.LogError('Failed loading OpenGL 1.2'); + end; + + pbo_supported := false; + if (Ini.EnablePBO=1) then + begin + try + pbo_supported := glext_LoadExtension('GL_ARB_pixel_buffer_object') and + glext_LoadExtension('GL_version_1_5'); + except + pbo_supported := false; + Log.LogError('The device does not support Pixel Buffer Object (UVideo)!'); + end; + end; // zmienne RenderW := 800; RenderH := 600; ScreenW := W; ScreenH := H; + + // clear screen once window is being shown + glClearColor(1, 1, 1, 1); + glClear(GL_COLOR_BUFFER_BIT); + SwapBuffers; end; procedure LoadScreens( aShowLoading : boolean = true ); diff --git a/Game/Code/Classes/UMain.pas b/Game/Code/Classes/UMain.pas index a20ba30c..c56513d1 100644 --- a/Game/Code/Classes/UMain.pas +++ b/Game/Code/Classes/UMain.pas @@ -135,9 +135,9 @@ begin // delay CountMidTime; - Delay := Floor(1000 / 100 - 1000 * TimeMid); + Delay := Floor(1000 / 200 - 1000 * TimeMid); if Delay >= 1 then - SDL_Delay(Delay); // dynamic, maximum is 100 fps + SDL_Delay(Delay); CountSkipTime; // reinitialization of graphics @@ -163,14 +163,14 @@ Begin SDL_SetModState(KMOD_NONE); if (Ini.FullScreen = 1) or (Params.FullScreen) then SDL_ShowCursor(0); - EnableVideoDraw := true; + //EnableVideoDraw := true; end; if (Event.active.gain=0) then begin if (Ini.FullScreen = 1) or (Params.FullScreen) then SDL_ShowCursor(1); - EnableVideoDraw := false; + //EnableVideoDraw := false; end; end; diff --git a/Game/Code/Classes/USongs.pas b/Game/Code/Classes/USongs.pas index f5b105be..3c6e147a 100644 --- a/Game/Code/Classes/USongs.pas +++ b/Game/Code/Classes/USongs.pas @@ -146,26 +146,22 @@ var SR: TSearchRec; // for parsing Songs Directory SLen: integer; res: boolean; + begin if FindFirst(Dir + '*', faDirectory, SR) = 0 then begin repeat if (SR.Name <> '.') and (SR.Name <> '..') then - BrowseDir(Dir + Sr.Name + '\'); + BrowseDir(Dir + SR.Name + '\'); until FindNext(SR) <> 0; end; // if FindClose(SR); -// Log.LogStatus('Parsing directory: ' + Dir + SR.Name, 'LoadSongList'); - - if FindFirst(Dir + '*.txt', 0, SR) = 0 then begin -// Log.LogStatus('Parsing file: ' + Dir + SR.Name + '\' + SRD.Name, 'LoadSongList'); + if FindFirst(Dir + '*.txt', 0, SR) = 0 then + begin repeat //New Mod for better Memory Management SLen := BrowsePos; - {//Old - SLen := Length(Song); - SetLength(Song, SLen + 1);//} Song[SLen].Path := Dir; Song[SLen].Folder := Copy(Dir, Length(SongPath)+1, 10000); @@ -184,34 +180,24 @@ begin begin Song[SLen]:=AktSong; FindRefrainStart(Song[SLen]); - end; - end; - if (not res) then Dec(BrowsePos) - else begin - // scanning complete, file is good - // if there is no cover then try to find it - if Song[SLen].Cover = '' then Song[SLen].Cover := FindSongFile(Dir, '*[CO].jpg'); -// if Song[SLen].Background = '' then begin -// Song[SLen].Background := FindSongFile(Dir, '*[BG].jpg'); -// end; // no needed here} - - // fix by adding path. no, don't fix it. -// if Song[SLen].Cover <> '' then -// Song[SLen].Cover := Song[SLen].Path + Song[SLen].Cover; + // scanning complete, file is good + // if there is no cover then try to find it + if Song[SLen].Cover = '' then Song[SLen].Cover := FindSongFile(Dir, '*[CO].jpg'); + + Inc(BrowsePos); + end; end; //Change Length Only every 50 Entrys - Inc(BrowsePos); - - if (BrowsePos mod 50 = 0) AND (BrowsePos <> 0) then - begin - UpdateScreenLoading('Songs: '+IntToStr(Length(Song))); + if (BrowsePos mod 50 = 0) AND (BrowsePos <> 0) and res then SetLength(Song, Length(Song) + 50); - end; + + if (BrowsePos mod 5 = 0) and res then + UpdateScreenLoading('Songs: '+IntToStr(BrowsePos)); until FindNext(SR) <> 0; - end; // if FindFirst + end; // if FindFirst FindClose(SR); end; diff --git a/Game/Code/Classes/UVideo.pas b/Game/Code/Classes/UVideo.pas index 8d56182e..ee3d2bbd 100644 --- a/Game/Code/Classes/UVideo.pas +++ b/Game/Code/Classes/UVideo.pas @@ -130,10 +130,7 @@ end; function seek_proc(sender: Pointer; pos: int64; whence: integer): int64; cdecl; begin - if whence in [0, 1, 2] then - result := fs.Seek(pos, TSeekOrigin(whence)) - else - result := -1; + result := fs.Seek(pos, TSeekOrigin(whence)) end; procedure Init; @@ -180,7 +177,7 @@ begin inst := ac_init(); videodecoder := nil; - ac_open(inst, nil, nil, @read_proc, @seek_proc, nil); + ac_open(inst, nil, nil, @read_proc, @seek_proc, nil, nil); if not inst^.opened then begin @@ -251,12 +248,12 @@ begin PIXEL_FORMAT, GL_UNSIGNED_BYTE, nil); glBindTexture(GL_TEXTURE_2D, 0); - if(pbo_supported) then + if(pbo_supported) then begin glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, pbo); glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB, numBytes*TexX*TexY, nil, GL_STREAM_DRAW); glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, 0); - end; + end; mmfps := 50; end; @@ -812,7 +809,6 @@ begin // upper-right coord glTexCoord2f(TexRect.Right, TexRect.Upper); glVertex2f(ScreenRect.Right, ScreenRect.Upper); - glEnd; if Window.windowed then diff --git a/Game/Code/Screens/UScreenEditSub.pas b/Game/Code/Screens/UScreenEditSub.pas index f0d5822c..1d8ab390 100644 --- a/Game/Code/Screens/UScreenEditSub.pas +++ b/Game/Code/Screens/UScreenEditSub.pas @@ -223,7 +223,8 @@ begin AktSong.VideoGap := (round(AktSong.VideoGAP*100) + temp)/100; if PlayVideo then - StartVideo; + acSkip2(AktSong.VideoGap, Czas.Teraz); + //StartVideo; end; SDLK_7: @@ -239,7 +240,8 @@ begin AktSong.VideoGap := (round(AktSong.VideoGAP*100) + temp)/100; if PlayVideo then - StartVideo; + acSkip2(AktSong.VideoGap, Czas.Teraz); + //StartVideo; end; SDLK_KP_PLUS: @@ -2228,17 +2230,6 @@ begin Window.TargetAspect := acoCrop; Window.windowed := true; - {if CoverTime>=Ini.PreviewFading then - begin - glColor4f(0, 0, 0, 1); - - glbegin(gl_quads); - glVertex2f(Window.Left, Window.Upper); - glVertex2f(Window.Left, Window.Lower); - glVertex2f(Window.Right, Window.Lower); - glVertex2f(Window.Right, Window.Upper); - glEnd; - end; } SetAspectCorrection(acoCrop); Blend := (PlayTime-0.2); if Blend<0 then @@ -2252,8 +2243,6 @@ begin acDrawGL(ScreenAct); end; - //ResetAspectCorrection; - if (Czas.Teraz>=Czas.Razem) then begin acClose; diff --git a/Game/Code/Screens/UScreenSong.pas b/Game/Code/Screens/UScreenSong.pas index ababa843..43cdaba5 100644 --- a/Game/Code/Screens/UScreenSong.pas +++ b/Game/Code/Screens/UScreenSong.pas @@ -2392,7 +2392,7 @@ begin try acGetFrame(Czas.Teraz); - Blend := (CoverTime{-1.75})/Ini.PreviewFading; + Blend := (CoverTime-1.75)/Ini.PreviewFading; if Blend<0 then Blend := 0 else if Blend>1 then @@ -2402,7 +2402,8 @@ begin begin if (VidVisHandler.change_time+TimeSkip<0.4) then begin - VidVisHandler.change_time := VidVisHandler.change_time + TimeSkip; + if (Blend>0) then + VidVisHandler.change_time := VidVisHandler.change_time + TimeSkip; faktor := VidVisHandler.change_time/0.4; if (TargetVidVis = full) then @@ -2473,9 +2474,17 @@ begin begin if (Blend<1) or not EnableVideoDraw or VidVisHandler.changed then Button[Interaction].Draw; + end else + Button[Interaction].Draw; + + // Statics + for I := 0 to Length(Static) - 1 do + Static[I].Draw; + if UVideo.VideoOpened then + begin try - if (VidVis=windowed) then + if (VidVis<>full) or VidVisHandler.changed then acDrawGLi(ScreenAct, Window, Blend); if (Czas.Teraz>=Czas.Razem) then @@ -2487,16 +2496,11 @@ begin Log.LogError('Corrupted File: ' + CatSongs.Song[Interaction].Video); try acClose; - except + end; end; - end else - Button[Interaction].Draw; - - // Statics - for I := 0 to Length(Static) - 1 do - Static[I].Draw; + end; // and texts for I := 0 to Length(Text) - 1 do @@ -2513,10 +2517,7 @@ begin begin try if (VidVis=full) and not VidVisHandler.changed then - acDrawGL(ScreenAct) - else if VidVisHandler.changed then - acDrawGLi(ScreenAct, Window, Blend); - + acDrawGL(ScreenAct); if (Czas.Teraz>=Czas.Razem) then acClose; @@ -3686,7 +3687,7 @@ begin I := -1; if GiveStats then begin - if (Pet mod 10 = 0) then + if (Pet mod 5 = 0) then UpdateScreenLoading('Songs: '+IntToStr(Pet)); end; diff --git a/Game/Code/UltraStar.bdsproj b/Game/Code/UltraStar.bdsproj index acdabdad..25bb9169 100644 --- a/Game/Code/UltraStar.bdsproj +++ b/Game/Code/UltraStar.bdsproj @@ -32,7 +32,7 @@ 1 1 1 - 0 + 1 0 0 0 diff --git a/Game/Code/UltraStar.cfg b/Game/Code/UltraStar.cfg index e156555a..04922655 100644 --- a/Game/Code/UltraStar.cfg +++ b/Game/Code/UltraStar.cfg @@ -14,7 +14,7 @@ -$N+ -$O+ -$P+ --$Q- +-$Q+ -$R- -$S- -$T- diff --git a/Game/Code/UltraStar.dpr b/Game/Code/UltraStar.dpr index 6ddbad56..fbef9c69 100644 --- a/Game/Code/UltraStar.dpr +++ b/Game/Code/UltraStar.dpr @@ -124,7 +124,7 @@ uses acinerella in 'lib\acinerella\acinerella.pas'; const - Version = 'UltraStar Deluxe v1.0.1a Challenge-Mod r7c 2010-05-01'; + Version = 'UltraStar Deluxe v1.0.1a Challenge-Mod r7c5-10 2010-05-29'; var WndTitle: string; @@ -182,7 +182,7 @@ begin // SDL Log.BenchmarkStart(1); Log.LogStatus('Initialize SDL', 'Initialization'); - SDL_Init(SDL_INIT_VIDEO or SDL_INIT_AUDIO); + SDL_Init(SDL_INIT_VIDEO or SDL_INIT_TIMER); Log.BenchmarkEnd(1); Log.LogBenchmark('Initializing SDL', 1); diff --git a/Game/Code/lib/acinerella/acinerella.c b/Game/Code/lib/acinerella/acinerella.c index 05c52232..bae6b0e8 100644 --- a/Game/Code/lib/acinerella/acinerella.c +++ b/Game/Code/lib/acinerella/acinerella.c @@ -129,11 +129,7 @@ void init_info(lp_ac_file_info info) info->bitrate = -1; } -lp_ac_instance CALL_CONVT ac_init(void) { - //Initialize FFMpeg libraries - avcodec_register_all(); - av_register_all(); - +lp_ac_instance CALL_CONVT ac_init(void) { //Allocate a new instance of the videoplayer data and return it lp_ac_data ptmp; ptmp = (lp_ac_data)mgr_malloc(sizeof(ac_data)); @@ -181,7 +177,7 @@ static int64_t io_seek(void *opaque, int64_t pos, int whence) return -1; } -static AVInputFormat *av_probe_input_format2(AVProbeData *pd, int *score_max) +static AVInputFormat *_av_probe_input_format2(AVProbeData *pd, int *score_max) { AVInputFormat *fmt1, *fmt; int score; @@ -227,7 +223,7 @@ void ac_release_buffer(struct AVCodecContext *c, AVFrame *pic){ avcodec_default_release_buffer(c, pic); } -AVInputFormat* ac_probe_input_buffer( +lp_ac_proberesult CALL_CONVT ac_probe_input_buffer( char* buf, int bufsize, char* filename, @@ -235,6 +231,10 @@ AVInputFormat* ac_probe_input_buffer( { AVProbeData pd; + //Initialize FFMpeg libraries + avcodec_register_all(); + av_register_all(); + //Set the filename pd.filename = ""; if (filename) { @@ -246,7 +246,7 @@ AVInputFormat* ac_probe_input_buffer( pd.buf_size = bufsize; //Test it - return av_probe_input_format2(&pd, score_max); + return (lp_ac_proberesult) _av_probe_input_format2(&pd, score_max); } #define PROBE_BUF_MIN 2048 @@ -291,7 +291,7 @@ AVInputFormat* ac_probe_input_stream( } //Probe it - fmt = ac_probe_input_buffer(tmp_buf, probe_size, filename, &score); + fmt = (AVInputFormat*)ac_probe_input_buffer(tmp_buf, probe_size, filename, &score); //Set the new buffer *buf = tmp_buf; @@ -308,7 +308,8 @@ int CALL_CONVT ac_open( ac_openclose_callback open_proc, ac_read_callback read_proc, ac_seek_callback seek_proc, - ac_openclose_callback close_proc) + ac_openclose_callback close_proc, + lp_ac_proberesult proberesult) { pacInstance->opened = 0; @@ -327,13 +328,21 @@ int CALL_CONVT ac_open( open_proc(sender); } - //Probe the input format + AVInputFormat* fmt = NULL; int probe_size = 0; - AVInputFormat* fmt = ac_probe_input_stream(sender, read_proc, "", + + //Probe the input format, if no probe result is specified + if(proberesult == NULL) + { + fmt = ac_probe_input_stream(sender, read_proc, "", (void*)&((lp_ac_data)pacInstance)->buffer, &probe_size); - - if (!fmt) return -1; + } + else + { + fmt = (AVInputFormat*)proberesult; + } + if (!fmt) return -1; if (!seek_proc) { init_put_byte( @@ -428,16 +437,19 @@ void CALL_CONVT ac_get_stream_info(lp_ac_instance pacInstance, int nb, lp_ac_str ((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->codec->width; info->additional_info.video_info.frame_height = ((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->codec->height; - info->additional_info.video_info.pixel_aspect = - av_q2d(((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->codec->sample_aspect_ratio); - //Sometime "pixel aspect" may be zero. Correct this. - if (info->additional_info.video_info.pixel_aspect == 0.0) { + + double pixel_aspect_num = ((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->codec->sample_aspect_ratio.num; + double pixel_aspect_den = ((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->codec->sample_aspect_ratio.den; + + //Sometime "pixel aspect" may be zero or have other invalid values. Correct this. + if (pixel_aspect_num <= 0.0 || pixel_aspect_den <= 0.0) info->additional_info.video_info.pixel_aspect = 1.0; - } + else + info->additional_info.video_info.pixel_aspect = pixel_aspect_num / pixel_aspect_den; - info->additional_info.video_info.frames_per_second = - (double)((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->r_frame_rate.num / - (double)((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->r_frame_rate.den; + info->additional_info.video_info.frames_per_second = + (double)((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->r_frame_rate.num / + (double)((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->r_frame_rate.den; break; case CODEC_TYPE_AUDIO: //Set stream type to "AUDIO" @@ -689,7 +701,7 @@ int ac_decode_video_package(lp_ac_package pPackage, lp_ac_video_decoder pDecoder sws_scale( pDecoder->pSwsCtx, - (uint8_t*)(pDecoder->pFrame->data), + (const uint8_t* const*)(pDecoder->pFrame->data), pDecoder->pFrame->linesize, 0, //? pDecoder->pCodecCtx->height, diff --git a/Game/Code/lib/acinerella/acinerella.h b/Game/Code/lib/acinerella/acinerella.h index 0fafc011..a758164d 100644 --- a/Game/Code/lib/acinerella/acinerella.h +++ b/Game/Code/lib/acinerella/acinerella.h @@ -184,6 +184,8 @@ typedef struct _ac_package ac_package; /*Pointer on TAc_package*/ typedef ac_package* lp_ac_package; +typedef void* lp_ac_proberesult; + /*Callback function used to ask the application to read data. Should return the number of bytes read or an value smaller than zero if an error occured.*/ typedef int CALL_CONVT (*ac_read_callback)(void *sender, char *buf, int size); @@ -221,7 +223,8 @@ extern int CALL_CONVT ac_open( ac_openclose_callback open_proc, ac_read_callback read_proc, ac_seek_callback seek_proc, - ac_openclose_callback close_proc); + ac_openclose_callback close_proc, + lp_ac_proberesult proberesult); /*Closes an opened media file.*/ extern void CALL_CONVT ac_close(lp_ac_instance pacInstance); @@ -248,4 +251,6 @@ The parameter "dir" specifies the seek direction: 0 for forward, -1 for backward The target_pos paremeter is in milliseconds. Returns 1 if the functions succeded.*/ extern int CALL_CONVT ac_seek(lp_ac_decoder pDecoder, int dir, int64_t target_pos); +extern lp_ac_proberesult CALL_CONVT ac_probe_input_buffer(char* buf, int bufsize, char* filename, int* score_max); + #endif /*VIDEOPLAY_H*/ diff --git a/Game/Code/lib/acinerella/acinerella.pas b/Game/Code/lib/acinerella/acinerella.pas index 06d8db41..c806cc8f 100644 --- a/Game/Code/lib/acinerella/acinerella.pas +++ b/Game/Code/lib/acinerella/acinerella.pas @@ -73,8 +73,8 @@ type AC_OUTPUT_BGRA32 = 3 ); - TAc_infostr = array[0..511] of Char; - TAc_infostr2 = array[0..31] of Char; + TAc_infostr = array[0..511] of AnsiChar; + TAc_infostr2 = array[0..31] of AnsiChar; {Contains information about the whole file/stream that has been opened. Default values are "" for strings and -1 for integer values.} @@ -180,6 +180,8 @@ type end; {Pointer on TAc_package} PAc_package = ^TAc_package; + + PAc_proberesult = Pointer; {Callback function used to ask the application to read data. Should return the number of bytes read or an value smaller than zero if an error occured.} @@ -212,7 +214,8 @@ function ac_open( open_proc: TAc_openclose_callback; read_proc: TAc_read_callback; seek_proc: TAc_seek_callback; - close_proc: TAc_openclose_callback): integer; cdecl; external ac_dll; + close_proc: TAc_openclose_callback; + proberesult: PAc_proberesult): integer; cdecl; external ac_dll; {Closes an opened media file.} procedure ac_close(inst: PAc_instance);cdecl; external ac_dll; @@ -241,7 +244,9 @@ The parameter "dir" specifies the seek direction: 0 for forward, -1 for backward The target_pos paremeter is in milliseconds. Returns 1 if the functions succeded.} function ac_seek(pDecoder: PAc_decoder; dir: integer; target_pos: int64): integer; cdecl; external ac_dll; - +function ac_probe_input_buffer(buf: PChar; bufsize: Integer; filename: PChar; + var score_max: Integer): PAc_proberesult; cdecl; external ac_dll; + implementation {Connect the library memory management to the host application. This happens diff --git a/Game/Output/Skins/Blue Sensation/[sing]notesLeft.bmp b/Game/Output/Skins/Blue Sensation/[sing]notesLeft.bmp index 3d22e5fc..c819849b 100644 Binary files a/Game/Output/Skins/Blue Sensation/[sing]notesLeft.bmp and b/Game/Output/Skins/Blue Sensation/[sing]notesLeft.bmp differ diff --git a/Game/Output/Skins/Blue Sensation/[sing]notesMid.bmp b/Game/Output/Skins/Blue Sensation/[sing]notesMid.bmp index 2daa66b8..2fdce32d 100644 Binary files a/Game/Output/Skins/Blue Sensation/[sing]notesMid.bmp and b/Game/Output/Skins/Blue Sensation/[sing]notesMid.bmp differ diff --git a/Game/Output/Skins/Blue Sensation/[sing]notesRight.bmp b/Game/Output/Skins/Blue Sensation/[sing]notesRight.bmp index cd936129..3241beeb 100644 Binary files a/Game/Output/Skins/Blue Sensation/[sing]notesRight.bmp and b/Game/Output/Skins/Blue Sensation/[sing]notesRight.bmp differ diff --git a/Game/Output/Themes/Blue Sensation.ini b/Game/Output/Themes/Blue Sensation.ini index d43c8a26..577267ce 100644 --- a/Game/Output/Themes/Blue Sensation.ini +++ b/Game/Output/Themes/Blue Sensation.ini @@ -41,11 +41,11 @@ Tex=LoadingBG [LoadingText1] X =5 -Y =544 +Y =545 Color =White Font =0 Align =0 -Size =9 +Size =8 Text =SING_LOADING [LoadingText2] @@ -589,12 +589,12 @@ Text=SING_SONG_SELECTION Align=0 [SongTextNonParty2] -X =130 +X =85 Y =545 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=SING_SONG_SELECTION_WHEREAMI [SongTextNonParty3] @@ -695,12 +695,12 @@ Color =White Text=PARTY_MODE [SongTextParty2] -X =140 +X =85 Y =545 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=PARTY_SONG_WHEREAMI [SongTextParty3] @@ -1443,7 +1443,7 @@ Color =White Text=PARTY_MODE_M2 [SongTextM2Party2] -X =90 +X =85 Y =545 Color=White Font =0 @@ -1572,12 +1572,12 @@ Reflection=1 ReflectionSpacing=1 [ScoreText2] -X =100 +X =85 Y =545 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=SONG_SCORE_WHEREAMI [ScoreStatic4] @@ -2920,12 +2920,12 @@ Text=SING_OPTIONS Align=0 [OptionsText2] -X =100 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=SING_OPTIONS_WHEREAMI [OptionsText3] @@ -3237,12 +3237,12 @@ Text=SING_OPTIONS Align=0 [OptionsGameText2] -X =135 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=SING_OPTIONS_GAME_WHEREAMI [OptionsGameText3] @@ -3489,12 +3489,12 @@ Text=SING_OPTIONS Align=0 [OptionsGraphicsText2] -X =135 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=SING_OPTIONS_GRAPHICS_WHEREAMI [OptionsGraphicsText3] @@ -3720,12 +3720,12 @@ Text=SING_OPTIONS Align=0 [OptionsSoundText2] -X =135 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=SING_OPTIONS_SOUND_WHEREAMI [OptionsSoundText3] @@ -3971,12 +3971,12 @@ Text=SING_OPTIONS Align=0 [OptionsLyricsText2] -X =135 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=SING_OPTIONS_LYRICS_WHEREAMI [OptionsLyricsText3] @@ -4142,12 +4142,12 @@ Text=SING_OPTIONS Align=0 [OptionsThemesText2] -X =140 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=SING_OPTIONS_THEMES_WHEREAMI [OptionsThemesText3] @@ -4313,12 +4313,12 @@ Text=SING_OPTIONS Align=0 [OptionsRecordText2] -X =138 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=SING_OPTIONS_RECORD_WHEREAMI [OptionsRecordText3] @@ -4508,12 +4508,12 @@ Text=SING_OPTIONS Align=0 [OptionsAdvancedText2] -X =135 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=SING_OPTIONS_ADVANCED_WHEREAMI [OptionsAdvancedText3] @@ -4790,12 +4790,12 @@ Reflection=1 ReflectionSpacing=1 [TopText2] -X =100 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=SING_TOP_CHARTS_WHEREAMI [TopStatic4] @@ -5254,12 +5254,12 @@ Align =0 Text=SING_DIFFICULTY_DESC [LevelText3] -X =150 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=SING_DIFFICULTY_WHEREAMI [LevelText4] @@ -5415,12 +5415,12 @@ Align =0 Text=SING_PLAYER_DESC [NameText3] -X =135 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=SING_PLAYER_WHEREAMI [NameStatic4] @@ -5670,12 +5670,12 @@ Align =0 Text=PARTY_ROUND_DESC [PartyNewRoundText3] -X =138 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=PARTY_ROUND_WHEREAMI [PartyNewRoundText4] @@ -6325,12 +6325,12 @@ Align =0 Text = PARTY_ROUNDM2_DESC [PartyNewRoundM2Text3] -X =145 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text = PARTY_ROUNDM2_WHEREAMI [PartyNewRoundM2Text4] @@ -7399,12 +7399,12 @@ Align =0 Text=PARTY_SCORE_DESC [PartyScoreText3] -X =135 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=PARTY_SCORE_WHEREAMI [PartyScoreText4] @@ -7680,12 +7680,12 @@ Align =0 Text=PARTY_WIN_DESC [PartyWinText3] -X =138 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=PARTY_WIN_WHEREAMI [PartyWinText4] @@ -8160,12 +8160,12 @@ Align =0 Text=PARTY_OPTIONS_DESC [PartyOptionsText3] -X =3 +X =85 Y =546 Color=White Font =0 Size =7 -Align=0 +Align=1 Text=PARTY_OPTIONS_WHEREAMI [PartyOptionsText4] @@ -8433,12 +8433,12 @@ Align = 0 Text = PARTY_OPTIONS_M2_DESC [PartyOptionsM2Text3] -X =3 +X =85 Y =546 Color =White Font = 0 Size = 7 -Align =0 +Align =1 Text = PARTY_OPTIONS_M2_WHEREAMI [PartyOptionsM2Text4] @@ -8694,7 +8694,7 @@ Align =0 Text=PARTY_PLAYER_DESC [PartyPlayerText3] -X =80 +X =85 Y =545 Color=White Font =0 @@ -9144,7 +9144,7 @@ Align =0 Text=PARTY_PLAYERM2_DESC [PartyPlayerM2Text3] -X =80 +X =85 Y =545 Color=White Font =0 @@ -9813,12 +9813,12 @@ Text=STAT_MAIN Align=0 [StatMainText2] -X =115 +X =85 Y =546 Color=White Font =0 Size =7 -Align=2 +Align=1 Text=STAT_MAIN_WHEREAMI [StatMainText3] @@ -10125,12 +10125,12 @@ Text=STAT_DETAIL Align=0 [StatDetailText2] -X =157 +X =85 Y =550 Color=White Font =0 Size =6 -Align=2 +Align=1 Text=STAT_DETAIL_WHEREAMI [StatDetailText3] diff --git a/Game/Output/Themes/Deluxe.ini b/Game/Output/Themes/Deluxe.ini index 14995bc8..82b2c235 100644 --- a/Game/Output/Themes/Deluxe.ini +++ b/Game/Output/Themes/Deluxe.ini @@ -148,7 +148,7 @@ Text=SING_SONG_SELECTION_DESC [SongTextArtist] X =400 -Y =320 +Y =335 W = 190 Color=White Font =1 @@ -158,7 +158,7 @@ Text= [SongTextTitle] X =400 -Y =395 +Y =410 W = 190 Color=White Font =0 diff --git a/Game/Output/acinerella.dll b/Game/Output/acinerella.dll index 077ff08f..884cee92 100644 Binary files a/Game/Output/acinerella.dll and b/Game/Output/acinerella.dll differ -- cgit v1.2.3