//rrr BOOLEAN RenderCreditScreen() { HVOBJECT hPixHandle; GetVideoObject(&hPixHandle, guiCreditBackGroundImage ); BltVideoObject( FRAME_BUFFER, hPixHandle, 0, xResOffset, yResOffset, VO_BLT_SRCTRANSPARENCY, NULL); if( !gfCrdtHaveRenderedFirstFrameToSaveBuffer ) { gfCrdtHaveRenderedFirstFrameToSaveBuffer = TRUE; //blit everything to the save buffer ( cause the save buffer can bleed through ) BlitBufferToBuffer(guiRENDERBUFFER, guiSAVEBUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT ); UnmarkButtonsDirty( ); } InvalidateScreen( ); return( TRUE ); }
void ProcessEditorRendering() { BOOLEAN fSaveBuffer = FALSE; if( gfRenderTaskbar ) //do a full taskbar render. { ClearTaskbarRegion( 0, 360, 640, 480 ); RenderTerrainTileButtons(); MarkButtonsDirty(); gfRenderTaskbar = FALSE; fSaveBuffer = TRUE; gfRenderDrawingMode = TRUE; gfRenderHilights = FALSE; gfRenderMercInfo = TRUE; } if( gfRenderDrawingMode ) { if( iCurrentTaskbar == TASK_BUILDINGS || iCurrentTaskbar == TASK_TERRAIN || iCurrentTaskbar == TASK_ITEMS ) { ShowCurrentDrawingMode(); gfRenderDrawingMode = FALSE; } } //render dynamically changed buttons only RenderButtons( ); if( gfSummaryWindowActive ) RenderSummaryWindow(); else if( !gfGotoGridNoUI && !InOverheadMap() ) RenderMercStrings(); if( gfEditingDoor ) RenderDoorEditingWindow(); if( TextInputMode() ) RenderAllTextFields(); RenderEditorInfo(); if( !gfSummaryWindowActive && !gfGotoGridNoUI && !InOverheadMap() ) { if( gpItem && gsItemGridNo != -1 ) RenderSelectedItemBlownUp(); if( iCurrentTaskbar == TASK_MAPINFO ) RenderMapEntryPointsAndLights(); if( iDrawMode == DRAW_MODE_PLACE_ITEM && eInfo.uiItemType == TBAR_MODE_ITEM_KEYS || iDrawMode == DRAW_MODE_DOORKEYS ) RenderDoorLockInfo(); } if( fSaveBuffer ) BlitBufferToBuffer( FRAME_BUFFER, guiSAVEBUFFER, 0, 360, 640, 120 ); //Make sure this is TRUE at all times. //It is set to false when before we save the buffer, so the buttons don't get //rendered with hilites, in case the mouse is over one. gfRenderHilights = TRUE; RenderButtonsFastHelp(); }
void RenderSliderBox( SLIDER *pSlider ) { HVOBJECT hPixHandle; SGPRect SrcRect; SGPRect DestRect; if( pSlider->uiFlags & SLIDER_VERTICAL ) { //fill out the settings for the current dest and source rects SrcRect.iLeft = 0; SrcRect.iTop = 0; SrcRect.iRight = pSlider->ubSliderWidth; SrcRect.iBottom = pSlider->ubSliderHeight; DestRect.iLeft = pSlider->usPosX - pSlider->ubSliderWidth / 2; DestRect.iTop = pSlider->usCurrentSliderBoxPosition - pSlider->ubSliderHeight/2; DestRect.iRight = DestRect.iLeft + pSlider->ubSliderWidth; DestRect.iBottom = DestRect.iTop + pSlider->ubSliderHeight; //If it is not the first time to render the slider if( !( pSlider->LastRect.iLeft == 0 && pSlider->LastRect.iRight == 0 ) ) { //Restore the old rect BlitBufferToBuffer(guiSAVEBUFFER, guiRENDERBUFFER, (UINT16)pSlider->LastRect.iLeft, (UINT16)pSlider->LastRect.iTop, pSlider->ubSliderWidth, pSlider->ubSliderHeight ); //invalidate the old area InvalidateRegion( pSlider->LastRect.iLeft, pSlider->LastRect.iTop, pSlider->LastRect.iRight, pSlider->LastRect.iBottom ); } //Blit the new rect BlitBufferToBuffer( guiRENDERBUFFER, guiSAVEBUFFER, (UINT16)DestRect.iLeft, (UINT16)DestRect.iTop, pSlider->ubSliderWidth, pSlider->ubSliderHeight ); } else { //fill out the settings for the current dest and source rects SrcRect.iLeft = 0; SrcRect.iTop = 0; SrcRect.iRight = pSlider->ubSliderWidth; SrcRect.iBottom = pSlider->ubSliderHeight; DestRect.iLeft = pSlider->usCurrentSliderBoxPosition; DestRect.iTop = pSlider->usPosY-DEFUALT_SLIDER_SIZE; DestRect.iRight = DestRect.iLeft + pSlider->ubSliderWidth; DestRect.iBottom = DestRect.iTop + pSlider->ubSliderHeight; //If it is not the first time to render the slider if( !( pSlider->LastRect.iLeft == 0 && pSlider->LastRect.iRight == 0 ) ) { //Restore the old rect BlitBufferToBuffer(guiSAVEBUFFER, guiRENDERBUFFER, (UINT16)pSlider->LastRect.iLeft, (UINT16)pSlider->LastRect.iTop, 8, 15 ); } //save the new rect BlitBufferToBuffer(guiRENDERBUFFER, guiSAVEBUFFER, (UINT16)DestRect.iLeft, (UINT16)DestRect.iTop, 8, 15 ); } //Save the new rect location pSlider->LastRect = DestRect; if( pSlider->uiFlags & SLIDER_VERTICAL ) { //display the slider box GetVideoObject(&hPixHandle, guiSliderBoxImage ); BltVideoObject(FRAME_BUFFER, hPixHandle, 0, pSlider->LastRect.iLeft, pSlider->LastRect.iTop, VO_BLT_SRCTRANSPARENCY,NULL); //invalidate the area InvalidateRegion( pSlider->LastRect.iLeft, pSlider->LastRect.iTop, pSlider->LastRect.iRight, pSlider->LastRect.iBottom ); } else { //display the slider box GetVideoObject(&hPixHandle, guiSliderBoxImage ); BltVideoObject(FRAME_BUFFER, hPixHandle, 0, pSlider->usCurrentSliderBoxPosition, pSlider->usPosY-DEFUALT_SLIDER_SIZE, VO_BLT_SRCTRANSPARENCY,NULL); //invalidate the area InvalidateRegion( pSlider->usCurrentSliderBoxPosition, pSlider->usPosY-DEFUALT_SLIDER_SIZE, pSlider->usCurrentSliderBoxPosition+9, pSlider->usPosY+DEFUALT_SLIDER_SIZE ); } }
void ProcessEditorRendering() { BOOLEAN fSaveBuffer = FALSE; if( gfRenderTaskbar ) //do a full taskbar render. { if(iCurrentTaskbar == TASK_OPTIONS && !gfSummaryWindowActive)//dnl ch52 091009 { CHAR8 szNewText[4+1]; sprintf(szNewText, "%d", iNewMapWorldRows=WORLD_ROWS); SetInputFieldStringWith8BitString(1, szNewText); sprintf(szNewText, "%d", iNewMapWorldCols=WORLD_COLS); SetInputFieldStringWith8BitString(2, szNewText); DisableTextField(2); } ClearTaskbarRegion( 0, SCREEN_HEIGHT - 120, SCREEN_WIDTH, SCREEN_HEIGHT ); RenderTerrainTileButtons(); MarkButtonsDirty(); gfRenderTaskbar = FALSE; fSaveBuffer = TRUE; gfRenderDrawingMode = TRUE; gfRenderHilights = FALSE; gfRenderMercInfo = TRUE; } if( gfRenderDrawingMode ) { if( iCurrentTaskbar == TASK_BUILDINGS || iCurrentTaskbar == TASK_TERRAIN || iCurrentTaskbar == TASK_ITEMS ) { ShowCurrentDrawingMode(); gfRenderDrawingMode = FALSE; } } //render dynamically changed buttons only RenderButtons( ); if( gfSummaryWindowActive ) RenderSummaryWindow(); else if( !gfGotoGridNoUI && !gfKeyboardItemCreationUI && !InOverheadMap() && !gfEditingDoor )//dnl ch86 220214 RenderMercStrings(); if( gfEditingDoor ) RenderDoorEditingWindow(); if( TextInputMode() ) RenderAllTextFields(); RenderEditorInfo(); if( !gfSummaryWindowActive && !gfGotoGridNoUI && !gfKeyboardItemCreationUI && !InOverheadMap() && !gfEditingDoor )//dnl ch86 220214 { if( gpItem && gsItemGridNo != -1 ) RenderSelectedItemBlownUp(); if( iCurrentTaskbar == TASK_MAPINFO ) RenderMapEntryPointsAndLights(); if( iDrawMode == DRAW_MODE_PLACE_ITEM && eInfo.uiItemType == TBAR_MODE_ITEM_KEYS || iDrawMode == DRAW_MODE_DOORKEYS ) RenderDoorLockInfo(); } if( fSaveBuffer ) BlitBufferToBuffer( FRAME_BUFFER, guiSAVEBUFFER, 0, 2 * iScreenHeightOffset + 360, SCREEN_WIDTH, 120 ); //Make sure this is TRUE at all times. //It is set to false when before we save the buffer, so the buttons don't get //rendered with hilites, in case the mouse is over one. gfRenderHilights = TRUE; if(!gfSummaryWindowActive && !gfScrollInertia && !gfEditingDoor)//dnl ch77 131113 //dnl ch78 271113 //dnl ch86 210214 RenderButtonsFastHelp(); }
void HandleExitsFromMapScreen( void ) { // if going somewhere if ( gbExitingMapScreenToWhere != -1 ) { // delay all exits by one frame... if( gfOneFramePauseOnExit == TRUE ) { gfOneFramePauseOnExit = FALSE; return; } // make sure it's still legal to do this! if ( AllowedToExitFromMapscreenTo( gbExitingMapScreenToWhere ) ) { // see where we're trying to go switch ( gbExitingMapScreenToWhere ) { case MAP_EXIT_TO_LAPTOP: fLapTop = TRUE; SetPendingNewScreen(LAPTOP_SCREEN); if( gfExtraBuffer ) { //Then initiate the transition animation from the mapscreen to laptop... BlitBufferToBuffer( FRAME_BUFFER, guiEXTRABUFFER, 0, 0, 640, 480 ); gfStartMapScreenToLaptopTransition = TRUE; } break; case MAP_EXIT_TO_TACTICAL: #ifdef JA2DEMO HandleLeavingOfMapScreenDuringDemo( ); gfDontStartTransitionFromLaptop = TRUE; #else SetCurrentWorldSector( sSelMapX, sSelMapY, ( UINT8 )iCurrentMapSectorZ ); #endif break; case MAP_EXIT_TO_OPTIONS: guiPreviousOptionScreen = guiCurrentScreen; SetPendingNewScreen( OPTIONS_SCREEN ); break; case MAP_EXIT_TO_SAVE: case MAP_EXIT_TO_LOAD: gfCameDirectlyFromGame = TRUE; guiPreviousOptionScreen = guiCurrentScreen; SetPendingNewScreen( SAVE_LOAD_SCREEN ); break; default: // invalid exit type Assert( FALSE ); } // time compression during mapscreen exit doesn't seem to cause any problems, but turn it off as early as we can StopTimeCompression(); // now leaving mapscreen fLeavingMapScreen = TRUE; } // cancel exit, either we're on our way, or we're not allowed to go gbExitingMapScreenToWhere = -1; } }
BOOLEAN EnterGIOScreen() { VOBJECT_DESC VObjectDesc; UINT16 cnt; UINT16 usPosY; if( gfGIOButtonsAllocated ) return( TRUE ); SetCurrentCursorFromDatabase( CURSOR_NORMAL ); // load the Main trade screen backgroiund image VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE; FilenameForBPP("InterFace\\OptionsScreenBackGround.sti", VObjectDesc.ImageFile); CHECKF(AddVideoObject(&VObjectDesc, &guiGIOMainBackGroundImage )); //Ok button giGIODoneBtnImage = LoadButtonImage("INTERFACE\\PreferencesButtons.sti", -1,0,-1,2,-1 ); guiGIODoneButton = CreateIconAndTextButton( giGIODoneBtnImage, gzGIOScreenText[GIO_OK_TEXT], OPT_BUTTON_FONT, OPT_BUTTON_ON_COLOR, DEFAULT_SHADOW, OPT_BUTTON_OFF_COLOR, DEFAULT_SHADOW, TEXT_CJUSTIFIED, GIO_BTN_OK_X, GIO_BTN_OK_Y, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK, BtnGIODoneCallback); SpecifyButtonSoundScheme( guiGIODoneButton, BUTTON_SOUND_SCHEME_BIGSWITCH3 ); SpecifyDisabledButtonStyle( guiGIODoneButton, DISABLED_STYLE_NONE ); //Cancel button giGIOCancelBtnImage = UseLoadedButtonImage( giGIODoneBtnImage, -1,1,-1,3,-1 ); guiGIOCancelButton = CreateIconAndTextButton( giGIOCancelBtnImage, gzGIOScreenText[GIO_CANCEL_TEXT], OPT_BUTTON_FONT, OPT_BUTTON_ON_COLOR, DEFAULT_SHADOW, OPT_BUTTON_OFF_COLOR, DEFAULT_SHADOW, TEXT_CJUSTIFIED, GIO_CANCEL_X, GIO_BTN_OK_Y, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK, BtnGIOCancelCallback ); SpecifyButtonSoundScheme( guiGIOCancelButton, BUTTON_SOUND_SCHEME_BIGSWITCH3 ); // //Check box to toggle Difficulty settings // usPosY = GIO_DIF_SETTINGS_Y - GIO_OFFSET_TO_TOGGLE_BOX_Y; for( cnt=0; cnt<NUM_DIFF_SETTINGS; cnt++) { guiDifficultySettingsToggles[ cnt ] = CreateCheckBoxButton( GIO_DIF_SETTINGS_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY, "INTERFACE\\OptionsCheck.sti", MSYS_PRIORITY_HIGH+10, BtnDifficultyTogglesCallback ); MSYS_SetBtnUserData( guiDifficultySettingsToggles[ cnt ], 0, cnt ); usPosY += GIO_GAP_BN_SETTINGS; } if( gGameOptions.ubDifficultyLevel == DIF_LEVEL_EASY ) ButtonList[ guiDifficultySettingsToggles[ GIO_DIFF_EASY ] ]->uiFlags |= BUTTON_CLICKED_ON; else if( gGameOptions.ubDifficultyLevel == DIF_LEVEL_MEDIUM ) ButtonList[ guiDifficultySettingsToggles[ GIO_DIFF_MED ] ]->uiFlags |= BUTTON_CLICKED_ON; else if( gGameOptions.ubDifficultyLevel == DIF_LEVEL_HARD ) ButtonList[ guiDifficultySettingsToggles[ GIO_DIFF_HARD ] ]->uiFlags |= BUTTON_CLICKED_ON; else ButtonList[ guiDifficultySettingsToggles[ GIO_DIFF_MED ] ]->uiFlags |= BUTTON_CLICKED_ON; // //Check box to toggle Game settings ( realistic, sci fi ) // usPosY = GIO_GAME_SETTINGS_Y - GIO_OFFSET_TO_TOGGLE_BOX_Y; for( cnt=0; cnt<NUM_GAME_STYLES; cnt++) { guiGameStyleToggles[ cnt ] = CreateCheckBoxButton( GIO_GAME_SETTINGS_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY, "INTERFACE\\OptionsCheck.sti", MSYS_PRIORITY_HIGH+10, BtnGameStyleTogglesCallback ); MSYS_SetBtnUserData( guiGameStyleToggles[ cnt ], 0, cnt ); usPosY += GIO_GAP_BN_SETTINGS; } if( gGameOptions.fSciFi ) ButtonList[ guiGameStyleToggles[ GIO_SCI_FI ] ]->uiFlags |= BUTTON_CLICKED_ON; else ButtonList[ guiGameStyleToggles[ GIO_REALISTIC ] ]->uiFlags |= BUTTON_CLICKED_ON; // JA2Gold: iron man buttons usPosY = GIO_IRON_MAN_SETTING_Y - GIO_OFFSET_TO_TOGGLE_BOX_Y; for( cnt=0; cnt<NUM_SAVE_OPTIONS; cnt++) { guiGameSaveToggles[ cnt ] = CreateCheckBoxButton( GIO_IRON_MAN_SETTING_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY, "INTERFACE\\OptionsCheck.sti", MSYS_PRIORITY_HIGH+10, BtnGameSaveTogglesCallback ); MSYS_SetBtnUserData( guiGameSaveToggles[ cnt ], 0, cnt ); usPosY += GIO_GAP_BN_SETTINGS; } if( gGameOptions.fIronManMode ) ButtonList[ guiGameSaveToggles[ GIO_IRON_MAN ] ]->uiFlags |= BUTTON_CLICKED_ON; else ButtonList[ guiGameSaveToggles[ GIO_CAN_SAVE ] ]->uiFlags |= BUTTON_CLICKED_ON; // // Check box to toggle Gun options // usPosY = GIO_GUN_SETTINGS_Y - GIO_OFFSET_TO_TOGGLE_BOX_Y; for( cnt=0; cnt<NUM_GUN_OPTIONS; cnt++) { guiGunOptionToggles[ cnt ] = CreateCheckBoxButton( GIO_GUN_SETTINGS_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY, "INTERFACE\\OptionsCheck.sti", MSYS_PRIORITY_HIGH+10, BtnGunOptionsTogglesCallback); MSYS_SetBtnUserData( guiGunOptionToggles[ cnt ], 0, cnt ); usPosY += GIO_GAP_BN_SETTINGS; } //if its the demo, make sure the defuat is for additional guns #ifdef JA2DEMO gGameOptions.fGunNut = TRUE; #endif if( gGameOptions.fGunNut ) ButtonList[ guiGunOptionToggles[ GIO_GUN_NUT ] ]->uiFlags |= BUTTON_CLICKED_ON; else ButtonList[ guiGunOptionToggles[ GIO_REDUCED_GUNS ] ]->uiFlags |= BUTTON_CLICKED_ON; //if its the demo, make sure to disable the buttons #ifdef JA2DEMO SpecifyDisabledButtonStyle( guiGunOptionToggles[ GIO_GUN_NUT ], DISABLED_STYLE_SHADED ); SpecifyDisabledButtonStyle( guiGunOptionToggles[ GIO_REDUCED_GUNS ], DISABLED_STYLE_SHADED ); DisableButton( guiGunOptionToggles[ GIO_GUN_NUT ] ); DisableButton( guiGunOptionToggles[ GIO_REDUCED_GUNS ] ); #endif // JA2 Gold: no more timed turns // // Check box to toggle the timed turn option // /* usPosY = GIO_TIMED_TURN_SETTING_Y - GIO_OFFSET_TO_TOGGLE_BOX_Y; for( cnt=0; cnt<GIO_NUM_TIMED_TURN_OPTIONS; cnt++) { guiTimedTurnToggles[ cnt ] = CreateCheckBoxButton( GIO_TIMED_TURN_SETTING_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY, "INTERFACE\\OptionsCheck.sti", MSYS_PRIORITY_HIGH+10, BtnTimedTurnsTogglesCallback ); MSYS_SetBtnUserData( guiTimedTurnToggles[ cnt ], 0, cnt ); usPosY += GIO_GAP_BN_SETTINGS; } if( gGameOptions.fTurnTimeLimit ) ButtonList[ guiTimedTurnToggles[ GIO_TIMED_TURNS ] ]->uiFlags |= BUTTON_CLICKED_ON; else ButtonList[ guiTimedTurnToggles[ GIO_NO_TIMED_TURNS ] ]->uiFlags |= BUTTON_CLICKED_ON; */ //Reset the exit screen gubGIOExitScreen = GAME_INIT_OPTIONS_SCREEN; //REnder the screen once so we can blt ot to ths save buffer RenderGIOScreen(); BlitBufferToBuffer(guiRENDERBUFFER, guiSAVEBUFFER, 0, 0, 639, 439 ); gfGIOButtonsAllocated = TRUE; return( TRUE ); }