From 20642715b0cb09503a6ccb864ddb97b00628ca86 Mon Sep 17 00:00:00 2001 From: mogguh Date: Sun, 11 Nov 2007 22:42:20 +0000 Subject: Thanks to Linnex all the Wine bugs should be gone now, I can't test that myself so give some comments please. Added his suggestions into the source which fix the "on startup" bug (sdl_listmodes), "font problem" (pf24bit), "sql db new score" (exceptions are caught).. git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/1.0.1@602 b956fd51-792f-4845-bead-9b4dfca2ff2c --- Game/Code/Classes/UDataBase.pas | 37 ++++++++++++++++++++----------------- Game/Code/Classes/UIni.pas | 4 +++- Game/Code/Classes/UTexture.pas | 19 ++++++++++++++++++- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/Game/Code/Classes/UDataBase.pas b/Game/Code/Classes/UDataBase.pas index b8b41bc1..e7e8c535 100644 --- a/Game/Code/Classes/UDataBase.pas +++ b/Game/Code/Classes/UDataBase.pas @@ -147,25 +147,28 @@ begin //Prevent 0 Scores from being added if (Score > 0) then begin - - ID := ScoreDB.GetTableValue('SELECT `ID` FROM `US_Songs` WHERE `Artist` = "' + Song.Artist + '" AND `Title` = "' + Song.Title + '"'); - if ID = 0 then //Song doesn't exist -> Create - begin - ScoreDB.ExecSQL ('INSERT INTO `US_Songs` ( `ID` , `Artist` , `Title` , `TimesPlayed` ) VALUES (NULL , "' + Song.Artist + '", "' + Song.Title + '", "0");'); + try //todo : wrapper shouldn't throw exceptions at all - this fixed a wine bug, thanks linnex! (11.11.07) ID := ScoreDB.GetTableValue('SELECT `ID` FROM `US_Songs` WHERE `Artist` = "' + Song.Artist + '" AND `Title` = "' + Song.Title + '"'); - if ID = 0 then //Could not Create Table - exit; - end; - //Create new Entry - ScoreDB.ExecSQL('INSERT INTO `US_Scores` ( `SongID` , `Difficulty` , `Player` , `Score` ) VALUES ("' + InttoStr(ID) + '", "' + InttoStr(Level) + '", "' + Name + '", "' + InttoStr(Score) + '");'); - - //Delete Last Position when there are more than 5 Entrys - if ScoreDB.GetTableValue('SELECT COUNT(`SongID`) FROM `US_Scores` WHERE `SongID` = "' + InttoStr(ID) + '" AND `Difficulty` = "' + InttoStr(Level) +'"') > 5 then - begin - TableData := ScoreDB.GetTable('SELECT `Player`, `Score` FROM `US_Scores` WHERE SongID = "' + InttoStr(ID) + '" AND `Difficulty` = "' + InttoStr(Level) +'" ORDER BY `Score` ASC LIMIT 1'); - ScoreDB.ExecSQL('DELETE FROM `US_Scores` WHERE SongID = "' + InttoStr(ID) + '" AND `Difficulty` = "' + InttoStr(Level) +'" AND `Player` = "' + TableData.FieldAsString(TableData.FieldIndex['Player']) + '" AND `Score` = "' + TableData.FieldAsString(TableData.FieldIndex['Score']) + '"'); + if ID = 0 then //Song doesn't exist -> Create + begin + ScoreDB.ExecSQL ('INSERT INTO `US_Songs` ( `ID` , `Artist` , `Title` , `TimesPlayed` ) VALUES (NULL , "' + Song.Artist + '", "' + Song.Title + '", "0");'); + ID := ScoreDB.GetTableValue('SELECT `ID` FROM `US_Songs` WHERE `Artist` = "' + Song.Artist + '" AND `Title` = "' + Song.Title + '"'); + + if ID = 0 then //Could not Create Table + exit; + end; + //Create new Entry + ScoreDB.ExecSQL('INSERT INTO `US_Scores` ( `SongID` , `Difficulty` , `Player` , `Score` ) VALUES ("' + InttoStr(ID) + '", "' + InttoStr(Level) + '", "' + Name + '", "' + InttoStr(Score) + '");'); + + //Delete Last Position when there are more than 5 Entrys + if ScoreDB.GetTableValue('SELECT COUNT(`SongID`) FROM `US_Scores` WHERE `SongID` = "' + InttoStr(ID) + '" AND `Difficulty` = "' + InttoStr(Level) +'"') > 5 then + begin + TableData := ScoreDB.GetTable('SELECT `Player`, `Score` FROM `US_Scores` WHERE SongID = "' + InttoStr(ID) + '" AND `Difficulty` = "' + InttoStr(Level) +'" ORDER BY `Score` ASC LIMIT 1'); + ScoreDB.ExecSQL('DELETE FROM `US_Scores` WHERE SongID = "' + InttoStr(ID) + '" AND `Difficulty` = "' + InttoStr(Level) +'" AND `Player` = "' + TableData.FieldAsString(TableData.FieldIndex['Player']) + '" AND `Score` = "' + TableData.FieldAsString(TableData.FieldIndex['Score']) + '"'); + end; + except + // katze! end; - end; finally //ScoreDB.Free; diff --git a/Game/Code/Classes/UIni.pas b/Game/Code/Classes/UIni.pas index 82bae011..5297e7e1 100644 --- a/Game/Code/Classes/UIni.pas +++ b/Game/Code/Classes/UIni.pas @@ -251,12 +251,14 @@ begin // Resolution SetLength(IResolution, 0); Modes := SDL_ListModes(nil, SDL_OPENGL or SDL_FULLSCREEN); // Check if there are any modes available + if(Assigned(Modes)) then //this should solve the biggest wine problem | THANKS Linnex (11.11.07) repeat SetLength(IResolution, Length(IResolution) + 1); IResolution[High(IResolution)] := IntToStr(Modes^.w) + 'x' + IntToStr(Modes^.h); Inc(Modes); until Modes^ = nil; - + end; + // if no modes were set, then failback to 800x600 // as per http://sourceforge.net/forum/message.php?msg_id=4544965 // THANKS : linnex at users.sourceforge.net diff --git a/Game/Code/Classes/UTexture.pas b/Game/Code/Classes/UTexture.pas index 275f0748..c832f5c1 100644 --- a/Game/Code/Classes/UTexture.pas +++ b/Game/Code/Classes/UTexture.pas @@ -189,6 +189,12 @@ end; function TTextureUnit.LoadTexture(FromRegistry: boolean; Nazwa, Format, Typ: PChar; Col: LongWord): TTexture; var + +// a patch from Linnex, that solves the font problem in wine which causes chrashes + ChangeFormatBMP: TBitmap; +// end of patch (11.11.07) + + Res: TResourceStream; TextureB: TBitmap; TextureJ: TJPEGImage; @@ -449,7 +455,18 @@ begin end; if Typ = 'Font' then begin - TextureB.PixelFormat := pf24bit; + +// a patch from Linnex, that solves the font problem in wine which causes chrashes + //TextureB.PixelFormat := pf24bit; + ChangeFormatBMP := TBitmap.Create(); + ChangeFormatBMP.Assign(TextureB); + TextureB.PixelFormat := pf24bit; + TextureB.Width := ChangeFormatBMP.Width; + TextureB.Height := ChangeFormatBMP.Height; + TextureB.Canvas.Draw(0, 0, ChangeFormatBMP); + ChangeFormatBMP.Free; +// end of patch (11.11.07) + for Pet := 0 to TextureB.Height-1 do begin PPix := TextureB.ScanLine[Pet]; for Pet2 := 0 to TextureB.Width-1 do begin -- cgit v1.2.3