diff --git a/script/win_installer/readme.txt b/script/win_installer/readme.txt index 48178db..225bf2c 100644 --- a/script/win_installer/readme.txt +++ b/script/win_installer/readme.txt @@ -7,6 +7,21 @@ To toggle a psuedo full screen mode, click Full Screen Toggle in the options. ( NOTE: Quick saves might give a "Can't load old version" error if the data format has changed. However, normal Dink saves (using save machines, etc) will always work. +Keyboard controls: + +F1 - Quick save +F10 - Quick load +Control - Attack +Arrow keys - Movement +Space - Talk +Enter - Inventory +Shift - Magic +Escape - Bring up menu + +NOTE: If you have a controller (like an xbox 360 pad) plugged in when you start the game, you can use that instead of keyboard, but you still need to use the +mouse to navigate the initial menus to start the game + + ------------- BETA VERSION ----------------- This is a beta version which means it probably has bugs and isn't ready for general consumption. However, it means you've been recruited to help us make it better! @@ -47,7 +62,7 @@ www.rtsoft.com ------ Change log for 1.7.1 ---------- -(big thanks to Redink1 for most of these bug reports!) +(big thanks to Redink1 for most of these bug reports and the fancy shadows patch!) * (Windows) Fixed app icon * (Windows) Mouse-controlled screens in DMODs control better and hide the original mouse cursor @@ -60,4 +75,8 @@ www.rtsoft.com * (bugfix) Fixed some issues with how default offsets are calculated, it fixed some problems where sprites would be in the wrong place in certain DMODs * (bugfix, windows) "Smoothing" no longer incorrectly turns on if you lose/regain focus * (windows) Added "Windowed Borderless fullscreen mode" toggle, defaults to off. It will try to do 640X480 at your native monitor resolution by default now on - a clean install. It's a bit wacky how fullscreen/bordlerless fullscreen and clicking screen sizes works, but it usually gets you to where you want to go eventually + a clean install. If you've dragged the dink window to a weird size it won't be able to go fullscreen which is kind of weird, but it does give a clear error message. It should probably + enumerate graphic modes and choose one if the current one is invalid, or let the user choose, meh +* Added redink1's "soft shadow improvement" patch +* (proton) Fixed issue with blitting alpha things to the background, fixed the soft shadows for things rendered into the background + diff --git a/source/App.cpp b/source/App.cpp index e3ebb3d..02d7938 100644 --- a/source/App.cpp +++ b/source/App.cpp @@ -434,7 +434,7 @@ bool App::Init() bool bFileExisted; m_varDB.Load("save.dat", &bFileExisted); - GetApp()->GetVarWithDefault("smoothing",uint32(1))->GetUINT32(); + GetApp()->GetVarWithDefault("smoothing",uint32(0))->GetUINT32(); GetApp()->GetVarWithDefault("buttons",uint32(0)); @@ -443,7 +443,10 @@ bool App::Init() #ifdef PLATFORM_WINDOWS - //If you don't have directx, just comment out this and remove the dx lib dependency, directx is only used for the + + GetApp()->GetVarWithDefault("checkerboard_fix", uint32(1)); //default to on for Windows + + //If you don't have directx, just comment out this and remove the dx lib dependency, directx is only used for the //gamepad input on windows GetGamepadManager()->AddProvider(new GamepadProviderDirectX); //use directx joysticks #endif @@ -525,7 +528,8 @@ if (GetEmulatedPlatformID() == PLATFORM_ID_IOS) int videox = GetApp()->GetVarWithDefault("video_x", uint32(640))->GetUINT32(); int videoy = GetApp()->GetVarWithDefault("video_y", uint32(480))->GetUINT32(); int fullscreen = GetApp()->GetVarWithDefault("fullscreen", uint32(1))->GetUINT32(); - //bool borderlessfullscreen = GetApp()->GetVarWithDefault("fullscreen", uint32(1))->GetUINT32(); + + bool borderlessfullscreen = GetApp()->GetVarWithDefault("fullscreen", uint32(0))->GetUINT32(); if (fullscreen && g_bUseBorderlessFullscreenOnWindows) @@ -902,11 +906,11 @@ bool App::OnPreInitVideo() g_winVideoScreenX = pVarX->GetUINT32(); g_winVideoScreenY = pVarY->GetUINT32(); - g_bIsFullScreen = temp.GetVarWithDefault("fullscreen", uint32(1))->GetUINT32(); - g_bUseBorderlessFullscreenOnWindows = temp.GetVarWithDefault("borderless_fullscreen", uint32(0))->GetUINT32() != 0; } - + g_bIsFullScreen = temp.GetVarWithDefault("fullscreen", uint32(1))->GetUINT32(); + g_bUseBorderlessFullscreenOnWindows = temp.GetVarWithDefault("borderless_fullscreen", uint32(0))->GetUINT32() != 0; + #endif return true; diff --git a/source/GUI/OptionsMenu.cpp b/source/GUI/OptionsMenu.cpp index 9c21163..faca828 100644 --- a/source/GUI/OptionsMenu.cpp +++ b/source/GUI/OptionsMenu.cpp @@ -134,6 +134,16 @@ void OptionsMenuOnSelect(VariantList *pVList) //0=vec2 point of click, 1=entity DinkOnForeground(); } + if (pEntClicked->GetName() == "check_checkboard") + { + bool bChecked = IsCheckboxChecked(pEntClicked); + GetApp()->GetVar("checkerboard_fix")->Set(uint32(bChecked)); + GetApp()->UpdateVideoSettings(); + DinkUnloadUnusedGraphicsByUsageTime(0); //unload anything not used in the last second + DinkReInitSurfacesAfterVideoChange(); + DinkOnForeground(); + } + #ifdef WINAPI if (pEntClicked->GetName() == "check_borderless") { @@ -446,8 +456,7 @@ void OptionsMenuAddScrollContent(Entity *pParent) y += spacerY; } - - + bool bStretchToFit = GetApp()->GetVar("check_stretch")->GetUINT32() != 0; pEnt = CreateCheckbox(pBG, "check_stretch", "Force screen stretching (ignore aspect ratio)", startX, y, bStretchToFit, FONT_SMALL, 1.0f); pEnt->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect); @@ -462,6 +471,12 @@ void OptionsMenuAddScrollContent(Entity *pParent) y += spacerY; #endif + bool bCheckerboardFix = GetApp()->GetVar("checkerboard_fix")->GetUINT32() != 0; + pEnt = CreateCheckbox(pBG, "check_checkboard", "Apply improved shadows", startX, y, bCheckerboardFix, FONT_SMALL, 1.0f); + pEnt->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect); + y += GetSize2DEntity(pEnt).y; + y += spacerY; + //fps limit pEnt = CreateTextLabelEntity(pBG, "", startX, y, "FPS lock:"); diff --git a/source/dink/dink.cpp b/source/dink/dink.cpp index 9c1f3e1..8a8dbf3 100644 --- a/source/dink/dink.cpp +++ b/source/dink/dink.cpp @@ -5063,6 +5063,7 @@ void draw_sprite_game(LPDIRECTDRAWSURFACE lpdest,int h) //convert it to a high color surface on the fly, without losing the data on it LPDIRECTDRAWSURFACE pNewSurf = InitOffscreenSurface(C_DINK_SCREENSIZE_X, C_DINK_SCREENSIZE_Y, IDirectDrawSurface::MODE_SHADOW_GL, true, lpdest->m_pSurf); + LogMsg("Detected high color bmps that need to drawn to the static landscape, converting backbuffers to 32 bit on the fly."); delete lpDDSBackGround; @@ -5070,16 +5071,16 @@ void draw_sprite_game(LPDIRECTDRAWSURFACE lpdest,int h) if (lpDDSBuffer->m_pSurf->GetSurfaceType() == SoftSurface::SURFACE_PALETTE_8BIT) { //this one too - delete lpDDSBuffer; - lpDDSBuffer = InitOffscreenSurface(C_DINK_SCREENSIZE_X, C_DINK_SCREENSIZE_Y, IDirectDrawSurface::MODE_SHADOW_GL, true); + delete lpDDSBuffer; + lpDDSBuffer = InitOffscreenSurface(C_DINK_SCREENSIZE_X, C_DINK_SCREENSIZE_Y, IDirectDrawSurface::MODE_SHADOW_GL, true); + lpDDSBuffer->m_pGLSurf->SetUsesAlpha(true); } } } - - + ddrval = lpdest->Blt(&dstRect, g_pSpriteSurface[getpic(h)], &srcRect , DDBLT_KEYSRC ,&ddbltfx ); @@ -5528,7 +5529,8 @@ void place_sprites_game(bool bBackgroundOnly ) //it requires scaling, need to do things differently as our low mem fast custom blits won't work with this bScaledBackgroundSpritesRequired = true; } - if (bScaledBackgroundSpritesRequired) + + if (bScaledBackgroundSpritesRequired) { g_dglo.m_bgSpriteMan.Add(sprite); @@ -6145,6 +6147,7 @@ restart: if (bRequireRebuild) goto restart; g_tileScreens[tileScreenID]->UpdateLastUsedTime(); + lpDDSBackGround->BltFast( (x * 50 - ((x / 12) * 600))+g_gameAreaLeftOffset, (x / 12) * 50, g_tileScreens[tileScreenID], &rcRect, DDBLTFAST_NOCOLORKEY| DDBLTFAST_WAIT ); } @@ -15841,6 +15844,7 @@ LastWindowsTimer = GetTickCount(); EndProcessTransition(); + if (g_dglos.g_stopEntireGame == 1) { if (g_dglos.g_talkInfo.active) @@ -15896,10 +15900,14 @@ LastWindowsTimer = GetTickCount(); if (g_dglos.screenlock == 1) { #ifdef _DEBUG + + /* if (debug_mode) { + //CHEAT - ignore screenlocks g_dglos.screenlock = 0; } + */ #endif drawscreenlock(); } @@ -15941,16 +15949,14 @@ flip: if (turn_on_plane) g_dglos.plane_process = true; BlitSecondTransitionScreen(); - - + if (g_bTransitionActive) { SetOrthoRenderSize(C_DINK_SCREENSIZE_X, g_dglo.m_orthoRenderRect.GetHeight(), 0, -g_dglo.m_orthoRenderRect.top); BlitGUIOverlay(); RemoveOrthoRenderSize(); } - - + if (bCaptureScreen) { //reset the timer because we probably just wasted a bunch loading crap diff --git a/source/video_gl.cpp b/source/video_gl.cpp index 493324b..4e4965a 100644 --- a/source/video_gl.cpp +++ b/source/video_gl.cpp @@ -36,19 +36,21 @@ IDirectDrawSurface * LoadBitmapIntoSurface(const char *pName, eTransparencyType pSurf->m_mode = mode; pSurf->m_pSurf = new SoftSurface; + bool bUseCheckerboardFix = GetApp()->GetVar("checkerboard_fix")->GetUINT32() != 0; + if (pMem) { #ifdef _DEBUG //LogMsg("loading DDRAW bmp from mem"); #endif //if this is set, ignore the filename - pSurf->m_pSurf->LoadFileFromMemory(pMem, SoftSurface::eColorKeyType(trans)); + pSurf->m_pSurf->LoadFileFromMemory(pMem, SoftSurface::eColorKeyType(trans), 0, false, bUseCheckerboardFix); } else { #ifdef _DEBUG //LogMsg("loading DDRAW bmp from file"); #endif - pSurf->m_pSurf->LoadFile(pName, SoftSurface::eColorKeyType(trans), false); + pSurf->m_pSurf->LoadFile(pName, SoftSurface::eColorKeyType(trans), false, bUseCheckerboardFix); } //LogMsg("loaded bitmap"); @@ -96,6 +98,7 @@ IDirectDrawSurface * InitOffscreenSurface(int x, int y, IDirectDrawSurface::eMod { pdds->m_pSurf->Init(x,y, SoftSurface::SURFACE_RGBA); pdds->m_pSurf->SetHasPremultipliedAlpha(true); + pdds->m_pSurf->SetUsesAlpha(true); } else { pdds->m_pSurf->Init(x,y, SoftSurface::SURFACE_PALETTE_8BIT); @@ -335,7 +338,7 @@ int IDirectDrawSurface::BltFast( int x, int y, IDirectDrawSurface *pSrcSurf, rtR //we need to copy from what is already on the screen m_pSurf->BlitFromScreen(x, y, pSrcRect->left, pSrcRect->top, pSrcRect->GetWidth(), pSrcRect->GetHeight()); //m_pSurf->Blit(x, y, lpDDSBackGround->m_pSurf, pSrcRect->left, pSrcRect->top, pSrcRect->GetWidth(), pSrcRect->GetHeight()); - m_pSurf->SetUsesAlpha(false); + //m_pSurf->SetUsesAlpha(false); } else { m_pSurf->Blit(x, y, pSrcSurf->m_pSurf, pSrcRect->left, pSrcRect->top, pSrcRect->GetWidth(), pSrcRect->GetHeight());