BOOL Game::start(DWORD currentTime) { Bmp8BitFileReader reader; itsGameSelectImages = new SimpleArray(4); ScreenImage *image = new ScreenImage(); image->init(theDirectDrawObject,&reader,"game1select.bmp",NULL); itsGameSelectImages->addElement(image); image = new ScreenImage(); image->init(theDirectDrawObject,&reader,"game2select.bmp",NULL); itsGameSelectImages->addElement(image); image = new ScreenImage(); image->init(theDirectDrawObject,&reader,"game3select.bmp",NULL); itsGameSelectImages->addElement(image); image = new ScreenImage(); image->init(theDirectDrawObject,&reader,"moreselect.bmp",NULL); itsGameSelectImages->addElement(image); itsCurrentlySelectedGame = 0; theEventDispatcher.init(); itsSoundPlayer = new SoundPlayer(itsSoundManager); itsCurrentState = GAMESTATE_PREGAME; itsInstructionMessageTimerID = theEventDispatcher.setTimer(this,3500); isDisplayingInstructions = FALSE; DDCOLORKEY colorKey; colorKey.dwColorSpaceHighValue = ScreenImage::theTransparencyColor; colorKey.dwColorSpaceLowValue = ScreenImage::theTransparencyColor; itsInstructionMessage.init(theDirectDrawObject,&reader,"instructions.bmp",&colorKey); itsWorld = NULL; return TRUE; }
BOOL Game::initSurfaces(HWND hwnd,HINSTANCE hinstance) { DDSURFACEDESC surfaceDesc; // This is cheesy, but I'm not sure how to deal with it for right now ScreenImage bgImage; Bmp8BitFileReader reader; bgImage.init(theDirectDrawObject,&reader,"bg.bmp"); memset(&surfaceDesc,0,sizeof(surfaceDesc)); surfaceDesc.dwSize = sizeof(surfaceDesc); surfaceDesc.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; surfaceDesc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX; surfaceDesc.dwBackBufferCount = 1; if ( SUCCEEDED(theDirectDrawObject->CreateSurface(&surfaceDesc,&thePrimarySurface,NULL)) ) { assert(theBitDepth == 8); PALETTEENTRY palette[256]; bgImage.getPalette()->GetEntries(0,0,256,palette); PALETTEENTRY dimmedPalette[256]; for (UINT i=0;i<256;i++) { dimmedPalette[i].peBlue = (palette[i].peBlue / 3) * 2; dimmedPalette[i].peRed = (palette[i].peRed / 3) * 2; dimmedPalette[i].peGreen = (palette[i].peGreen / 3) * 2; } if ( (SUCCEEDED(theDirectDrawObject->CreatePalette(DDPCAPS_8BIT | DDPCAPS_ALLOW256 | DDPCAPS_INITIALIZE, palette,&thePalette,NULL)) ) && (SUCCEEDED(theDirectDrawObject->CreatePalette(DDPCAPS_8BIT | DDPCAPS_ALLOW256 | DDPCAPS_INITIALIZE, dimmedPalette,&theDimmedPalette,NULL)) ) ) { thePrimarySurface->SetPalette(thePalette); DDSCAPS surfaceCaps; memset(&surfaceCaps,0,sizeof(surfaceCaps)); surfaceCaps.dwCaps = DDSCAPS_BACKBUFFER; if ( SUCCEEDED(thePrimarySurface->GetAttachedSurface(&surfaceCaps,&theBackbuffer)) ) { if (SUCCEEDED(theDirectDrawObject->CreatePalette(DDPCAPS_8BIT | DDPCAPS_ALLOW256 | DDPCAPS_INITIALIZE, palette,&theBackbufferPalette,NULL) )) { theBackbuffer->SetPalette(theBackbufferPalette); if (SUCCEEDED(theDirectDrawObject->CreateClipper(NULL,&theClipper,NULL))) { if (SUCCEEDED(theClipper->SetHWnd(NULL,hwnd))) { if (SUCCEEDED(theBackbuffer->SetClipper(theClipper))) { bgImage.copyDataToSurface(thePrimarySurface); bgImage.copyDataToSurface(theBackbuffer); return TRUE; } else { Logger::error("Couldn't set clipper on the backbuffer"); } } else { Logger::error("Couldn't set HWND on the clipper"); } } else { Logger::error("Couldn't create the clipper"); } } else { Logger::error("Couldn't create a palette!"); } } else { Logger::error("Couldn't get attached surface from primary surface"); } } else { Logger::error("Couldn't create the palette"); } } else { Logger::error("Couldn't create primary surface"); } return FALSE; }