X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fwrappers%2Fsdl2%2Fsdl2allegro.inc;h=4ea4320db52376e87b653f284d8d7975647c9ea3;hb=9a2ee072230bd5cb222921d0f34a6416ca69e12f;hp=8cbe419a16d73813a96203b35997f09ea2cf4b9d;hpb=23c3f9ee3fc3837cd1d0380496a2e1b0f87833d8;p=d2df-sdl.git diff --git a/src/wrappers/sdl2/sdl2allegro.inc b/src/wrappers/sdl2/sdl2allegro.inc index 8cbe419..4ea4320 100644 --- a/src/wrappers/sdl2/sdl2allegro.inc +++ b/src/wrappers/sdl2/sdl2allegro.inc @@ -296,6 +296,13 @@ interface var sdl2allegro_screen: PBITMAP; sdl2allegro_bpp: Integer; + globalTransTable: COLOR_MAP_T; + redTransTable: COLOR_MAP_T; + greenTransTable: COLOR_MAP_T; + blueTransTable: COLOR_MAP_T; + darkTransTable: COLOR_MAP_T; + lightTransTable: COLOR_MAP_T; + /// FUNCTIONS /// @@ -367,7 +374,10 @@ implementation {$IFDEF GO32V2} go32, {$ENDIF} - e_Log, g_options, SysUtils, Math, ctypes; + {$IFDEF USE_WATT32} + Watt32, + {$ENDIF} + e_Log, g_options, SysUtils, Math, Classes, ctypes; const maxKeyBuffer = 64; @@ -381,6 +391,7 @@ implementation useVsync: Boolean; ticks: UInt32; quit: Boolean; + custompal: PALETTE; s2lc: array [0..KEY_MAX] of char = ( #00, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', @@ -533,6 +544,48 @@ implementation SDL_SCANCODE_UNKNOWN (* KEY_MAX *) ); + procedure LoadCustomPalette (const name: String); + var f: TFileStream; i: Integer; + begin + try + f := TFileStream.Create(name, fmOpenRead); + e_LogWriteLn('Load custom palette ' + name); + for i := 0 to 255 do + begin + custompal[i].r := f.ReadByte(); + custompal[i].g := f.ReadByte(); + custompal[i].b := f.ReadByte(); + custompal[i].filler := $FF; + end; + f.Destroy + except + e_LogWriteLn('Fallback to default palette'); + custompal := default_palette; +(* + for i := 0 to 255 do + begin + custompal[i].r := i div 4; + custompal[i].g := i div 4; + custompal[i].b := i div 4; + custompal[i].filler := $FF; + end; +*) + end + end; + + procedure UpdatePalette; + begin + set_palette(custompal); + select_palette(custompal); + create_trans_table(@globalTransTable, custompal, 255, 255, 255, nil); + create_trans_table(@redTransTable, custompal, 0, 255, 255, nil); + create_trans_table(@greenTransTable, custompal, 255, 0, 255, nil); + create_trans_table(@blueTransTable, custompal, 255, 255, 0, nil); + create_trans_table(@darkTransTable, custompal, 191, 191, 191, nil); + create_trans_table(@lightTransTable, custompal, 64, 64, 64, nil); + color_map := @globalTransTable; + end; + function IsEmptyKeyboard: Boolean; begin result := keybeg = keyend @@ -827,7 +880,10 @@ implementation procedure AllegroTimerCallback; cdecl; begin - inc(ticks) + inc(ticks); + {$IFDEF USE_WATT32} + userTimerTick(1); + {$ENDIF} end; procedure AllegroTimerCallbackEND; begin end; @@ -995,6 +1051,7 @@ implementation window.w := w; window.h := h; window.mode := mode; + UpdatePalette; result := window end end; @@ -1023,7 +1080,7 @@ implementation if sdl2allegro_screen = nil then sdl2allegro_screen := create_bitmap(window.w, window.h); ASSERT(sdl2allegro_screen <> nil); - set_palette(desktop_palette); + UpdatePalette; window.mode := mode; result := 0 end @@ -1041,7 +1098,7 @@ implementation if sdl2allegro_screen = nil then sdl2allegro_screen := create_bitmap(w, h); ASSERT(sdl2allegro_screen <> nil); - set_palette(desktop_palette); + UpdatePalette; window.w := w; window.h := h end @@ -1137,6 +1194,10 @@ implementation release_screen; if useVsync then vsync; + + {$IFDEF USE_WATT32} + tcp_tick(nil); + {$ENDIF} end; (********** EVENTS **********) @@ -1216,7 +1277,11 @@ implementation event.key.keysym._mod := 0; (* df not use it? *) result := 1; Exit - end + end; + + {$IFDEF USE_WATT32} + tcp_tick(nil); + {$ENDIF} end; (********** MOUSE **********) @@ -1292,6 +1357,7 @@ implementation deskw := 640; deskh := 480 end; + LoadCustomPalette('PLAYPAL.LMP'); result := 0 end end;