void DisplayCurrentBalanceTitleForMapBottom( void ) { CHAR16 sString[ 128 ]; INT16 sFontX, sFontY; // ste the font buffer SetFontDestBuffer( guiSAVEBUFFER, 0, 0, 640, 480, FALSE ); SetFont( COMPFONT ); SetFontForeground( MAP_BOTTOM_FONT_COLOR ); SetFontBackground( FONT_BLACK ); swprintf( sString, L"%s", pMapScreenBottomText[ 0 ] ); // center it VarFindFontCenterCoordinates( 359, 387 - 14, 437 - 359, 10, COMPFONT, &sFontX, &sFontY, sString ); // print it mprintf( sFontX, sFontY, L"%s", sString ); swprintf( sString, L"%s", zMarksMapScreenText[ 2 ] ); // center it VarFindFontCenterCoordinates( 359, 433 - 14, 437 - 359, 10, COMPFONT, &sFontX, &sFontY, sString ); // print it mprintf( sFontX, sFontY, L"%s", sString ); // ste the font buffer SetFontDestBuffer( FRAME_BUFFER, 0, 0, 640, 480, FALSE ); return; }
void DisplayStringsInChatLogMessageList( void ) { UINT8 ubCurrentStringIndex; UINT8 ubLinesPrinted; INT16 sX, sY; UINT16 usSpacing; // Limit drawing to chat log region only, dont want any overdraw sX = gChatMessageLogRegion.iLeft + 4; SetFontDestBuffer( FRAME_BUFFER, sX , gChatMessageLogRegion.iTop + 4, gChatMessageLogRegion.iRight - 4, gChatMessageLogRegion.iBottom - 4, FALSE ); SetFont( CHAT_MESSAGE_FONT ); // no longer supports variable fonts SetFontBackground( FONT_BLACK ); SetFontShadow( DEFAULT_SHADOW ); ubCurrentStringIndex = gubCurrentChatLogMessageString; sY = gChatMessageLogRegion.iTop + 4; usSpacing = GetFontHeight( CHAT_MESSAGE_FONT ); for ( ubLinesPrinted = 0; ubLinesPrinted < MAX_CHATLOG_MESSAGES; ubLinesPrinted++ ) { // reached the end of the list? if ( ubCurrentStringIndex == gubEndOfChatLogMessageList ) { break; } // nothing stored there? if ( gChatLogMessageList[ ubCurrentStringIndex ] == NULL ) { break; } // set font color SetFontForeground( ( UINT8 )( gChatLogMessageList[ ubCurrentStringIndex ]->usColor ) ); // print this line mprintf_coded( sX, sY, gChatLogMessageList[ ubCurrentStringIndex ]->pString16 ); sY = sY + usSpacing; // next message index to print (may wrap around) ubCurrentStringIndex = ( ubCurrentStringIndex + 1 ) % 256; } // reset region to whole screen SetFontDestBuffer( FRAME_BUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, FALSE ); }
void DisplayCurrentBalanceForMapBottom( void ) { // show the current balance for the player on the map panel bottom CHAR16 sString[ 128 ]; INT16 sFontX, sFontY; // ste the font buffer SetFontDestBuffer( FRAME_BUFFER, 0, 0, 640, 480, FALSE ); // set up the font SetFont( COMPFONT ); SetFontForeground( 183 ); SetFontBackground( FONT_BLACK ); swprintf( sString, L"%d", LaptopSaveInfo.iCurrentBalance ); // insert InsertCommasForDollarFigure( sString ); InsertDollarSignInToString( sString ); // center it VarFindFontCenterCoordinates( 359, 387 + 2, 437 - 359, 10, COMPFONT, &sFontX, &sFontY, sString ); // print it mprintf( sFontX, sFontY, L"%s", sString ); return; }
void DisplayStringsInMapScreenMessageList( void ) { UINT8 ubCurrentStringIndex; UINT8 ubLinesPrinted; INT16 sY; UINT16 usSpacing; SetFontDestBuffer( FRAME_BUFFER, 17, 360 + 6, 407, 360 + 101, FALSE ); SetFont( MAP_SCREEN_MESSAGE_FONT ); // no longer supports variable fonts SetFontBackground( FONT_BLACK ); SetFontShadow( DEFAULT_SHADOW ); ubCurrentStringIndex = gubCurrentMapMessageString; sY = 377; usSpacing = GetFontHeight( MAP_SCREEN_MESSAGE_FONT ); for ( ubLinesPrinted = 0; ubLinesPrinted < MAX_MESSAGES_ON_MAP_BOTTOM; ubLinesPrinted++ ) { // reached the end of the list? if ( ubCurrentStringIndex == gubEndOfMapScreenMessageList ) { break; } // nothing stored there? if ( gMapScreenMessageList[ ubCurrentStringIndex ] == NULL ) { break; } // set font color SetFontForeground( ( UINT8 )( gMapScreenMessageList[ ubCurrentStringIndex ]->usColor ) ); // print this line mprintf_coded( 20, sY, gMapScreenMessageList[ ubCurrentStringIndex ]->pString16 ); sY += usSpacing; // next message index to print (may wrap around) ubCurrentStringIndex = ( ubCurrentStringIndex + 1 ) % 256; } SetFontDestBuffer( FRAME_BUFFER, 0, 0, 640, 480, FALSE ); }
void DisplayCompressMode( void ) { INT16 sX, sY; CHAR16 sString[ 128 ]; static UINT8 usColor = FONT_LTGREEN; // get compress speed if( giTimeCompressMode != NOT_USING_TIME_COMPRESSION ) { if( IsTimeBeingCompressed() ) { swprintf( sString, L"%s", sTimeStrings[ giTimeCompressMode ] ); } else { swprintf( sString, L"%s", sTimeStrings[ 0 ] ); } } RestoreExternBackgroundRect( 489, 456, 522 - 489, 467 - 454 ); SetFontDestBuffer( FRAME_BUFFER, 0,0,640,480, FALSE ); SetFont( COMPFONT ); if( GetJA2Clock() - guiCompressionStringBaseTime >= PAUSE_GAME_TIMER ) { if( usColor == FONT_LTGREEN ) { usColor = FONT_WHITE; } else { usColor = FONT_LTGREEN; } guiCompressionStringBaseTime = GetJA2Clock(); } if( ( giTimeCompressMode != 0 ) && ( GamePaused( ) == FALSE ) ) { usColor = FONT_LTGREEN; } SetFontForeground( usColor ); SetFontBackground( FONT_BLACK ); FindFontCenterCoordinates( 489, 456, 522 - 489, 467 - 454, sString, COMPFONT, &sX, &sY ); mprintf( sX, sY, sString ); return; }
void DrawNameOfLoadedSector( void ) { CHAR16 sString[ 128 ]; INT16 sFontX, sFontY; SetFontDestBuffer( FRAME_BUFFER, 0, 0, 640, 480, FALSE ); SetFont( COMPFONT ); SetFontForeground( 183 ); SetFontBackground( FONT_BLACK ); GetSectorIDString( sSelMapX, sSelMapY, ( INT8 )( iCurrentMapSectorZ ),sString, TRUE ); ReduceStringLength( sString, 80, COMPFONT ); VarFindFontCenterCoordinates( 548, 426, 80, 16, COMPFONT, &sFontX, &sFontY, sString ); mprintf( sFontX, sFontY, L"%s", sString ); }
void DisplayProjectedDailyMineIncome( void ) { INT32 iRate = 0; static INT32 iOldRate = -1; CHAR16 sString[ 128 ]; INT16 sFontX, sFontY; // grab the rate from the financial system iRate = GetProjectedTotalDailyIncome( ); if( iRate != iOldRate ) { iOldRate = iRate; fMapScreenBottomDirty = TRUE; // if screen was not dirtied, leave if( fMapBottomDirtied == FALSE ) { return; } } // ste the font buffer SetFontDestBuffer( FRAME_BUFFER, 0, 0, 640, 480, FALSE ); // set up the font SetFont( COMPFONT ); SetFontForeground( 183 ); SetFontBackground( FONT_BLACK ); swprintf( sString, L"%d", iRate ); // insert InsertCommasForDollarFigure( sString ); InsertDollarSignInToString( sString ); // center it VarFindFontCenterCoordinates( 359, 433 + 2, 437 - 359, 10, COMPFONT, &sFontX, &sFontY, sString ); // print it mprintf( sFontX, sFontY, L"%s", sString ); return; }
UINT32 MPChatScreenHandle( ) { InputAtom InputEvent; if ( gfNewChatBox ) { // If in game screen.... if ( ( gfStartedFromGameScreen )||( gfStartedFromMapScreen ) ) { //UINT32 uiDestPitchBYTES, uiSrcPitchBYTES; //UINT8 *pDestBuf, *pSrcBuf; if( gfStartedFromGameScreen ) { HandleTacticalUILoseCursorFromOtherScreen( ); } else { HandleMAPUILoseCursorFromOtherScreen( ); } gfStartedFromGameScreen = FALSE; gfStartedFromMapScreen = FALSE; } gfNewChatBox = FALSE; return( MP_CHAT_SCREEN ); } UnmarkButtonsDirty( ); // Render the box! if ( gChatBox.fRenderBox ) { // Render the Background ( this includes the text string) RenderMercPopUpBoxFromIndex( gChatBox.iBoxId, gChatBox.sX, gChatBox.sY, FRAME_BUFFER ); UINT16 usWidth = StringPixLength( gzMPChatboxText[0], CHATBOX_FONT_TITLE ); int usPosY = 0; int usPosX = 0; usPosY = gChatBox.sY + 10; usPosX = gChatBox.sX + ((gChatBox.usWidth - usWidth) / 2); DrawTextToScreen( gzMPChatboxText[0], usPosX, usPosY, usWidth, CHATBOX_FONT_TITLE, CHATBOX_FONT_COLOR, DEFAULT_SHADOW, FALSE, CENTER_JUSTIFIED | TEXT_SHADOWED ); // Render the toggle button strings for(UINT8 cnt=0; cnt<NUM_CHAT_TOGGLES; cnt++) { GUI_BUTTON* btn = ButtonList[ guiChatToggles[ cnt ] ]; usPosX = btn->XLoc + 12 + 10; usPosY = btn->YLoc; usWidth = StringPixLength( gzMPChatToggleText[ cnt ], CHATBOX_FONT_TOGGLE ); DrawTextToScreen( gzMPChatToggleText[ cnt ], usPosX, usPosY, usWidth, CHATBOX_FONT_TOGGLE, CHATBOX_FONT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED ); } if (gIncludeChatLog) { // draw chatbox HVOBJECT hHandle; // get and blt panel GetVideoObject(&hHandle, guiCHATLOGIMG ); BltVideoObject( FRAME_BUFFER , hHandle, 0, gChatMessageLogRegion.iLeft, gChatMessageLogRegion.iTop, VO_BLT_SRCTRANSPARENCY,NULL ); BltVideoObject( FRAME_BUFFER , hHandle, 1, gChatMessageLogRegion.iRight+CHATBOX_SLIDER_GAP, gChatMessageLogRegion.iTop, VO_BLT_SRCTRANSPARENCY,NULL ); // draw slider DisplayChatLogScrollBarSlider( ); // draw chat log text DisplayStringsInChatLogMessageList(); } } MarkButtonsDirty(); EnableDisableChatLogScrollButtonsAndRegions(); // Render buttons RenderButtons( ); // render text boxes //SaveFontSettings(); SetFontDestBuffer( FRAME_BUFFER, gChatTextBoxRegion.iLeft , gChatTextBoxRegion.iTop , gChatTextBoxRegion.iRight , gChatTextBoxRegion.iBottom, FALSE ); RenderAllTextFields(); // textbox system call SetFontDestBuffer( FRAME_BUFFER, 0 , 0 , SCREEN_WIDTH , SCREEN_HEIGHT , FALSE ); //RestoreFontSettings(); EndFrameBufferRender( ); // carter, need key shortcuts for clearing up message boxes // Check for esc bool bHandled; while (DequeueEvent(&InputEvent) == TRUE) { bHandled = false; if(InputEvent.usEvent == KEY_DOWN ) { if( ( InputEvent.usParam == ESC ) ) { // Exit messagebox gChatBox.bHandled = MSG_BOX_RETURN_NO; memset(gszChatBoxInputString,0,sizeof(CHAR16)*255); bHandled = true; } if( InputEvent.usParam == ENTER ) { // retrieve the string from the text box Get16BitStringFromField( 0, gszChatBoxInputString, 255 ); // these indexes are based on the order created // Exit messagebox gChatBox.bHandled = MSG_BOX_RETURN_OK; bHandled = true; } // OJW - 20090403 - add better key control UINT8 ubDesiredMessageIndex; UINT8 ubNumMessages; ubNumMessages = GetRangeOfChatLogMessages(); if ( ubNumMessages > MAX_CHATLOG_MESSAGES ) { if (InputEvent.usParam == PGUP) { //move up a page ChatScreenMsgScrollUp( MAX_CHATLOG_MESSAGES ); bHandled = true; } if (InputEvent.usParam == PGDN) { // move down a page ChatScreenMsgScrollDown( MAX_CHATLOG_MESSAGES ); bHandled = true; } if (InputEvent.usParam == HOME) { // move to the beginning ChangeCurrentChatScreenMessageIndex( 0 ); bHandled = true; } if (InputEvent.usParam == END) { // move to end ubDesiredMessageIndex = ubNumMessages - MAX_CHATLOG_MESSAGES; ChangeCurrentChatScreenMessageIndex( ubDesiredMessageIndex ); bHandled = true; } } } // send to text box if (!bHandled) HandleTextInput( &InputEvent ); } if ( gChatBox.bHandled ) { SetRenderFlags( RENDER_FLAG_FULL ); return( ExitChatBox( gChatBox.bHandled ) ); } return( MP_CHAT_SCREEN ); }
void InitEditorItemsInfo(UINT32 uiItemType) { VSURFACE_DESC vs_desc; UINT8 *pDestBuf, *pSrcBuf; UINT32 uiSrcPitchBYTES, uiDestPitchBYTES; INVTYPE *item; SGPRect SaveRect, NewRect; HVOBJECT hVObject; UINT32 uiVideoObjectIndex; UINT16 usUselessWidth, usUselessHeight; INT16 sWidth, sOffset, sStart; INT16 i, x, y; UINT16 usCounter; CHAR16 pStr[ 100 ];//, pStr2[ 100 ]; CHAR16 pItemName[SIZE_ITEM_NAME]; UINT8 ubBitDepth; BOOLEAN fTypeMatch; INT32 iEquipCount = 0; // Check to make sure that there isn't already a valid eInfo if( eInfo.fActive ) { if( eInfo.uiItemType == uiItemType ) { //User clicked on the same item classification -- ignore return; } else { //User selected a different item classification -- delete it first. ClearEditorItemsInfo(); ClearTaskbarRegion( iScreenWidthOffset + 100, 2 * iScreenHeightOffset + 360, iScreenWidthOffset + 480, 2 * iScreenHeightOffset + 440 ); } } else { //Clear the menu area, so that the buffer doesn't get corrupted. ClearTaskbarRegion( iScreenWidthOffset + 100, 2 * iScreenHeightOffset + 360, iScreenWidthOffset + 480, 2 * iScreenHeightOffset + 440 ); } EnableEditorRegion( ITEM_REGION_ID ); eInfo.uiItemType = uiItemType; eInfo.fActive = TRUE; //Begin initialization of data. switch(uiItemType) { case TBAR_MODE_ITEM_WEAPONS: eInfo.sNumItems = eInfo.sNumWeapons; eInfo.sScrollIndex = eInfo.sSaveWeaponsScrollIndex; eInfo.sSelItemIndex = eInfo.sSaveSelWeaponsIndex; break; case TBAR_MODE_ITEM_AMMO: eInfo.sNumItems = eInfo.sNumAmmo; eInfo.sScrollIndex = eInfo.sSaveAmmoScrollIndex; eInfo.sSelItemIndex = eInfo.sSaveSelAmmoIndex; break; case TBAR_MODE_ITEM_ARMOUR: eInfo.sNumItems = eInfo.sNumArmour; eInfo.sScrollIndex = eInfo.sSaveArmourScrollIndex; eInfo.sSelItemIndex = eInfo.sSaveSelArmourIndex; break; case TBAR_MODE_ITEM_LBEGEAR: eInfo.sNumItems = eInfo.sLBEGear; eInfo.sScrollIndex = eInfo.sSaveLBEScrollIndex; eInfo.sSelItemIndex = eInfo.sSaveSelLBEIndex; break; case TBAR_MODE_ITEM_EXPLOSIVES: eInfo.sNumItems = eInfo.sNumExplosives; eInfo.sScrollIndex = eInfo.sSaveExplosivesScrollIndex; eInfo.sSelItemIndex = eInfo.sSaveSelExplosivesIndex; break; case TBAR_MODE_ITEM_EQUIPMENT1: eInfo.sNumItems = eInfo.sNumEquipment1; eInfo.sScrollIndex = eInfo.sSaveEquipment1ScrollIndex; eInfo.sSelItemIndex = eInfo.sSaveSelEquipment1Index; break; case TBAR_MODE_ITEM_EQUIPMENT2: eInfo.sNumItems = eInfo.sNumEquipment2; eInfo.sScrollIndex = eInfo.sSaveEquipment2ScrollIndex; eInfo.sSelItemIndex = eInfo.sSaveSelEquipment2Index; break; case TBAR_MODE_ITEM_EQUIPMENT3: eInfo.sNumItems = eInfo.sNumEquipment3; eInfo.sScrollIndex = eInfo.sSaveEquipment3ScrollIndex; eInfo.sSelItemIndex = eInfo.sSaveSelEquipment3Index; break; case TBAR_MODE_ITEM_TRIGGERS: eInfo.sNumItems = eInfo.sNumTriggers; eInfo.sScrollIndex = eInfo.sSaveTriggersScrollIndex; eInfo.sSelItemIndex = eInfo.sSaveSelTriggersIndex; break; case TBAR_MODE_ITEM_KEYS: eInfo.sNumItems = eInfo.sNumKeys; eInfo.sScrollIndex = eInfo.sSaveKeysScrollIndex; eInfo.sSelItemIndex = eInfo.sSaveSelKeysIndex; break; default: //error return; } //Allocate memory to store all the item pointers. eInfo.pusItemIndex = (UINT16*)MemAlloc( sizeof(UINT16) * eInfo.sNumItems ); //Disable the appropriate scroll buttons based on the saved scroll index if applicable //Left most scroll position DetermineItemsScrolling(); //calculate the width of the buffer based on the number of items. //every pair of items (odd rounded up) requires 60 pixels for width. //the minimum buffer size is 420. Height is always 80 pixels. eInfo.sWidth = (eInfo.sNumItems > 12) ? ((eInfo.sNumItems+1)/2)*60 : SCREEN_HEIGHT - 120; eInfo.sHeight = 80; // Create item buffer GetCurrentVideoSettings( &usUselessWidth, &usUselessHeight, &ubBitDepth ); vs_desc.fCreateFlags = VSURFACE_CREATE_DEFAULT | VSURFACE_SYSTEM_MEM_USAGE; vs_desc.usWidth = eInfo.sWidth; vs_desc.usHeight = eInfo.sHeight; vs_desc.ubBitDepth = ubBitDepth; //!!!Memory check. Create the item buffer if(!AddVideoSurface( &vs_desc, &eInfo.uiBuffer )) { eInfo.fKill = TRUE; eInfo.fActive = FALSE; return; } pDestBuf = LockVideoSurface(eInfo.uiBuffer, &uiDestPitchBYTES); pSrcBuf = LockVideoSurface(FRAME_BUFFER, &uiSrcPitchBYTES); //copy a blank chunk of the editor interface to the new buffer. for( i=0; i<eInfo.sWidth; i+=60 ) { Blt16BPPTo16BPP((UINT16 *)pDestBuf, uiDestPitchBYTES, (UINT16 *)pSrcBuf, uiSrcPitchBYTES, 0+i, 0, iScreenWidthOffset + 100, 2 * iScreenHeightOffset + 360, 60, 80 ); } UnLockVideoSurface(eInfo.uiBuffer); UnLockVideoSurface(FRAME_BUFFER); x = 0; y = 0; usCounter = 0; NewRect.iTop = 0; NewRect.iBottom = eInfo.sHeight; NewRect.iLeft = 0; NewRect.iRight = eInfo.sWidth; GetClippingRect(&SaveRect); SetClippingRect(&NewRect); if( eInfo.uiItemType == TBAR_MODE_ITEM_KEYS ) { //Keys use a totally different method for determining for( i = 0; i < eInfo.sNumItems; i++ ) { item = &Item[ KeyTable[ 0 ].usItem + LockTable[ i ].usKeyItem ]; uiVideoObjectIndex = GetInterfaceGraphicForItem( item ); GetVideoObject( &hVObject, uiVideoObjectIndex ); //Store these item pointers for later when rendering selected items. eInfo.pusItemIndex[i] = KeyTable[ 0 ].usItem + LockTable[ i ].usKeyItem; SetFont(SMALLCOMPFONT); SetFontForeground( FONT_MCOLOR_WHITE ); SetFontDestBuffer( eInfo.uiBuffer, 0, 0, eInfo.sWidth, eInfo.sHeight, FALSE ); swprintf( pStr, L"%S", LockTable[ i ].ubEditorName ); DisplayWrappedString(x, (UINT16)(y+25), 60, 2, SMALLCOMPFONT, FONT_WHITE, pStr, FONT_BLACK, TRUE, CENTER_JUSTIFIED ); UINT16 usGraphicNum = g_bUsePngItemImages ? 0 : item->ubGraphicNum; //Calculate the center position of the graphic in a 60 pixel wide area. sWidth = hVObject->pETRLEObject[usGraphicNum].usWidth; sOffset = hVObject->pETRLEObject[usGraphicNum].sOffsetX; sStart = x + (60 - sWidth - sOffset*2) / 2; BltVideoObjectOutlineFromIndex( eInfo.uiBuffer, uiVideoObjectIndex, usGraphicNum, sStart, y+2, 0, FALSE ); //cycle through the various slot positions (0,0), (0,40), (60,0), (60,40), (120,0)... if( y == 0 ) { y = 40; } else { y = 0; x += 60; } } } else for( i = 0; i < eInfo.sNumItems; i++ ) { fTypeMatch = FALSE; while( usCounter<MAXITEMS && !fTypeMatch ) { if ( Item[usCounter].usItemClass == 0 ) break; item = &Item[usCounter]; //if( Item[usCounter].fFlags & ITEM_NOT_EDITOR ) if(item->notineditor) { usCounter++; continue; } if( eInfo.uiItemType == TBAR_MODE_ITEM_TRIGGERS ) { if( i < PRESSURE_ACTION_ID ) usCounter = ( i % 2 ) ? ACTION_ITEM : SWITCH; else usCounter = ACTION_ITEM; fTypeMatch = TRUE; item = &Item[usCounter]; } else switch( item->usItemClass ) { case IC_GUN: case IC_BLADE: case IC_LAUNCHER: case IC_THROWN: case IC_THROWING_KNIFE: fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_WEAPONS; break; case IC_PUNCH: if ( i != NOTHING ) { fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_WEAPONS; } else { fTypeMatch = FALSE; } break; case IC_AMMO: fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_AMMO; break; case IC_ARMOUR: fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_ARMOUR; break; case IC_LBEGEAR: fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_LBEGEAR; break; case IC_GRENADE: case IC_BOMB: fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_EXPLOSIVES; break; case IC_MEDKIT: case IC_KIT: case IC_FACE: case IC_MONEY: case IC_BELTCLIP: fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_EQUIPMENT1; break; case IC_MISC: if( usCounter == ACTION_ITEM || usCounter == SWITCH ) break; if( iEquipCount < eInfo.sNumEquipment2 ) fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_EQUIPMENT2; else fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_EQUIPMENT3; iEquipCount++; break; } if( fTypeMatch ) { uiVideoObjectIndex = GetInterfaceGraphicForItem( item ); GetVideoObject( &hVObject, uiVideoObjectIndex ); //Store these item pointers for later when rendering selected items. eInfo.pusItemIndex[i] = usCounter; SetFont(SMALLCOMPFONT); SetFontForeground( FONT_MCOLOR_WHITE ); SetFontDestBuffer( eInfo.uiBuffer, 0, 0, eInfo.sWidth, eInfo.sHeight, FALSE ); if( eInfo.uiItemType != TBAR_MODE_ITEM_TRIGGERS ) { LoadItemInfo( usCounter, pItemName, NULL ); swprintf( pStr, L"%s", pItemName ); } else { if( i == PRESSURE_ACTION_ID ) { swprintf( pStr, pInitEditorItemsInfoText[0] ); } else if( i < 2 ) { if( usCounter == SWITCH ) swprintf( pStr, pInitEditorItemsInfoText[5] ); else swprintf( pStr, pInitEditorItemsInfoText[1] ); } else if( i < 4 ) { if( usCounter == SWITCH ) swprintf( pStr, pInitEditorItemsInfoText[6] ); else swprintf( pStr, pInitEditorItemsInfoText[2] ); } else if( i < 6 ) { if( usCounter == SWITCH ) swprintf( pStr, pInitEditorItemsInfoText[7] ); else swprintf( pStr, pInitEditorItemsInfoText[3] ); } else { if( usCounter == SWITCH ) swprintf( pStr, pInitEditorItemsInfoText[8], (i-4)/2 ); else swprintf( pStr, pInitEditorItemsInfoText[4], (i-4)/2 ); } } DisplayWrappedString(x, (UINT16)(y+25), 60, 2, SMALLCOMPFONT, FONT_WHITE, pStr, FONT_BLACK, TRUE, CENTER_JUSTIFIED ); UINT16 usGraphicNum = g_bUsePngItemImages ? 0 : item->ubGraphicNum; if(usGraphicNum < hVObject->usNumberOfObjects) { //Calculate the center position of the graphic in a 60 pixel wide area. sWidth = hVObject->pETRLEObject[usGraphicNum].usWidth; sOffset = hVObject->pETRLEObject[usGraphicNum].sOffsetX; sStart = x + (60 - sWidth - sOffset*2) / 2; if( sWidth && sWidth > 0 ) { BltVideoObjectOutlineFromIndex( eInfo.uiBuffer, uiVideoObjectIndex, usGraphicNum, sStart, y+2, 0, FALSE ); } //cycle through the various slot positions (0,0), (0,40), (60,0), (60,40), (120,0)... if( y == 0 ) { y = 40; } else { y = 0; x += 60; } } else { static vfs::Log& editorLog = *vfs::Log::create(L"EditorItems.log"); editorLog << L"Tried to access item [" << item->ubGraphicNum << L"/" << hVObject->usNumberOfObjects << L"]" << vfs::Log::endl; } } usCounter++; } } SetFontDestBuffer( FRAME_BUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, FALSE ); SetClippingRect(&SaveRect); gfRenderTaskbar = TRUE; }
BOOLEAN InitializeFonts( ) { //INT16 zWinFontName[128]; // unused (jonathanl) //COLORVAL Color; // usused (jonathanl) // Initialize fonts // gpLargeFontType1 = LoadFontFile( "FONTS\\lfont1.sti" ); gpLargeFontType1 = LoadFontFile( "FONTS\\LARGEFONT1.sti" ); gvoLargeFontType1 = GetFontObject( gpLargeFontType1 ); CHECKF( CreateFontPaletteTables( gvoLargeFontType1 ) ); // gpSmallFontType1 = LoadFontFile( "FONTS\\6b-font.sti" ); gpSmallFontType1 = LoadFontFile( "FONTS\\SMALLFONT1.sti" ); gvoSmallFontType1 = GetFontObject( gpSmallFontType1 ); CHECKF( CreateFontPaletteTables( gvoSmallFontType1 ) ); // gpTinyFontType1 = LoadFontFile( "FONTS\\tfont1.sti" ); gpTinyFontType1 = LoadFontFile( "FONTS\\TINYFONT1.sti" ); gvoTinyFontType1 = GetFontObject( gpTinyFontType1 ); CHECKF( CreateFontPaletteTables( gvoTinyFontType1 ) ); // gp12PointFont1 = LoadFontFile( "FONTS\\font-12.sti" ); gp12PointFont1 = LoadFontFile( "FONTS\\FONT12POINT1.sti" ); gvo12PointFont1 = GetFontObject( gp12PointFont1 ); CHECKF( CreateFontPaletteTables( gvo12PointFont1 ) ); // gpClockFont = LoadFontFile( "FONTS\\DIGI.sti" ); gpClockFont = LoadFontFile( "FONTS\\CLOCKFONT.sti" ); gvoClockFont = GetFontObject( gpClockFont ); CHECKF( CreateFontPaletteTables( gvoClockFont ) ); // gpCompFont = LoadFontFile( "FONTS\\compfont.sti" ); gpCompFont = LoadFontFile( "FONTS\\COMPFONT.sti" ); gvoCompFont = GetFontObject( gpCompFont ); CHECKF( CreateFontPaletteTables( gvoCompFont ) ); // gpSmallCompFont = LoadFontFile( "FONTS\\scfont.sti" ); gpSmallCompFont = LoadFontFile( "FONTS\\SMALLCOMPFONT.sti" ); gvoSmallCompFont = GetFontObject( gpSmallCompFont ); CHECKF( CreateFontPaletteTables( gvoSmallCompFont ) ); // gp10PointRoman = LoadFontFile( "FONTS\\Roman10.sti" ); gp10PointRoman = LoadFontFile( "FONTS\\FONT10ROMAN.sti" ); gvo10PointRoman = GetFontObject( gp10PointRoman ); CHECKF( CreateFontPaletteTables( gvo10PointRoman ) ); // gp12PointRoman = LoadFontFile( "FONTS\\Roman12.sti" ); gp12PointRoman = LoadFontFile( "FONTS\\FONT12ROMAN.sti" ); gvo12PointRoman = GetFontObject( gp12PointRoman ); CHECKF( CreateFontPaletteTables( gvo12PointRoman ) ); // gp14PointSansSerif = LoadFontFile( "FONTS\\SansSerif14.sti" ); gp14PointSansSerif = LoadFontFile( "FONTS\\FONT14SANSERIF.sti" ); gvo14PointSansSerif = GetFontObject( gp14PointSansSerif); CHECKF( CreateFontPaletteTables( gvo14PointSansSerif) ); // DEF: Removed. Replaced with BLOCKFONT // gpMilitaryFont1 = LoadFontFile( "FONTS\\milfont.sti" ); // gvoMilitaryFont1 = GetFontObject( gpMilitaryFont1); // CHECKF( CreateFontPaletteTables( gvoMilitaryFont1) ); // gp10PointArial = LoadFontFile( "FONTS\\Arial10.sti" ); gp10PointArial = LoadFontFile( "FONTS\\FONT10ARIAL.sti" ); gvo10PointArial = GetFontObject( gp10PointArial); CHECKF( CreateFontPaletteTables( gvo10PointArial) ); // gp14PointArial = LoadFontFile( "FONTS\\Arial14.sti" ); gp14PointArial = LoadFontFile( "FONTS\\FONT14ARIAL.sti" ); gvo14PointArial = GetFontObject( gp14PointArial); CHECKF( CreateFontPaletteTables( gvo14PointArial) ); // gp10PointArialBold = LoadFontFile( "FONTS\\Arial10Bold2.sti" ); gp10PointArialBold = LoadFontFile( "FONTS\\FONT10ARIALBOLD.sti" ); gvo10PointArialBold = GetFontObject( gp10PointArialBold); CHECKF( CreateFontPaletteTables( gvo10PointArialBold) ); // gp12PointArial = LoadFontFile( "FONTS\\Arial12.sti" ); gp12PointArial = LoadFontFile( "FONTS\\FONT12ARIAL.sti" ); gvo12PointArial = GetFontObject( gp12PointArial); CHECKF( CreateFontPaletteTables( gvo12PointArial) ); // gpBlockyFont = LoadFontFile( "FONTS\\FONT2.sti" ); gpBlockyFont = LoadFontFile( "FONTS\\BLOCKFONT.sti" ); gvoBlockyFont = GetFontObject( gpBlockyFont); CHECKF( CreateFontPaletteTables( gvoBlockyFont) ); // gpBlockyFont2 = LoadFontFile( "FONTS\\interface_font.sti" ); gpBlockyFont2 = LoadFontFile( "FONTS\\BLOCKFONT2.sti" ); gvoBlockyFont2 = GetFontObject( gpBlockyFont2); CHECKF( CreateFontPaletteTables( gvoBlockyFont2) ); gpBlockyFont3 = LoadFontFile( "FONTS\\BLOCKFONT2.sti" ); gvoBlockyFont3 = GetFontObject( gpBlockyFont3); CHECKF( CreateFontPaletteTables( gvoBlockyFont3) ); // gp12PointArialFixedFont = LoadFontFile( "FONTS\\Arial12FixedWidth.sti" ); gp12PointArialFixedFont = LoadFontFile( "FONTS\\FONT12ARIALFIXEDWIDTH.sti" ); gvo12PointArialFixedFont = GetFontObject( gp12PointArialFixedFont ); CHECKF( CreateFontPaletteTables( gvo12PointArialFixedFont ) ); gp16PointArial = LoadFontFile( "FONTS\\FONT16ARIAL.sti" ); gvo16PointArial = GetFontObject( gp16PointArial ); CHECKF( CreateFontPaletteTables( gvo16PointArial ) ); gpBlockFontNarrow = LoadFontFile( "FONTS\\BLOCKFONTNARROW.sti" ); gvoBlockFontNarrow = GetFontObject( gpBlockFontNarrow ); CHECKF( CreateFontPaletteTables( gvoBlockFontNarrow ) ); gp14PointHumanist = LoadFontFile( "FONTS\\FONT14HUMANIST.sti" ); gvo14PointHumanist = GetFontObject( gp14PointHumanist ); CHECKF( CreateFontPaletteTables( gvo14PointHumanist ) ); #if defined( JA2EDITOR ) && defined( ENGLISH ) gpHugeFont = LoadFontFile( "FONTS\\HUGEFONT.sti" ); gvoHugeFont = GetFontObject( gpHugeFont ); CHECKF( CreateFontPaletteTables( gvoHugeFont ) ); #endif // Set default for font system SetFontDestBuffer( FRAME_BUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, FALSE ); gfFontsInit = TRUE; // ATE: Init WinFont System and any winfonts we wish... if ( iUseWinFonts ) { InitWinFonts( ); } return( TRUE ); }
//aaa BOOLEAN AddCreditNode( UINT32 uiType, UINT32 uiFlags, STR16 pString ) { CRDT_NODE *pNodeToAdd=NULL; CRDT_NODE *pTemp=NULL; UINT32 uiSizeOfString = ( wcslen( pString ) + 2 ) * 2; UINT32 uiFontToUse; UINT8 uiColorToUse; UINT16 CRDT_TEXT_START_LOC = xResOffset + 10; //if if( uiType == CRDT_NODE_NONE) { Assert( 0 ); return( TRUE ); } pNodeToAdd = (CRDT_NODE *) MemAlloc( sizeof( CRDT_NODE) ); if( pNodeToAdd == NULL ) { return( FALSE ); } memset( pNodeToAdd, 0, sizeof( CRDT_NODE) ); //Determine the font and the color to use if( uiFlags & CRDT_FLAG__TITLE ) { uiFontToUse = guiCreditScreenTitleFont; uiColorToUse = gubCreditScreenTitleColor; } else { uiFontToUse = guiCreditScreenActiveFont; uiColorToUse = gubCreditScreenActiveColor; } // // Set some default data // //the type of the node pNodeToAdd->uiType = uiType; //any flags that are added pNodeToAdd->uiFlags = uiFlags; //the starting left position for the it pNodeToAdd->sPosX = CRDT_TEXT_START_LOC; //Allocate memory for the string pNodeToAdd->pString = (CHAR16 *) MemAlloc( uiSizeOfString ); if( pNodeToAdd->pString == NULL ) return( FALSE ); //copy the string into the node wcscpy( pNodeToAdd->pString, pString ); //Calculate the height of the string pNodeToAdd->sHeightOfString = DisplayWrappedString( 0, 0, CRDT_WIDTH_OF_TEXT_AREA, 2, uiFontToUse, uiColorToUse, pNodeToAdd->pString, 0, FALSE, DONT_DISPLAY_TEXT ) + 1; //starting y position on the screen pNodeToAdd->sPosY = CRDT_START_POS_Y; // pNodeToAdd->uiLastTime = GetJA2Clock(); //if the node can have something to display, Create a surface for it if( pNodeToAdd->uiType == CRDT_NODE_DEFAULT ) { VSURFACE_DESC vs_desc; // Create a background video surface to blt the face onto vs_desc.fCreateFlags = VSURFACE_CREATE_DEFAULT | VSURFACE_SYSTEM_MEM_USAGE; vs_desc.usWidth = CRDT_WIDTH_OF_TEXT_AREA; vs_desc.usHeight = pNodeToAdd->sHeightOfString; vs_desc.ubBitDepth = 16; if( AddVideoSurface( &vs_desc, &pNodeToAdd->uiVideoSurfaceImage) == 0 ) { return( FALSE ); } //Set transparency SetVideoSurfaceTransparency( pNodeToAdd->uiVideoSurfaceImage, 0 ); //fill the surface with a transparent color ColorFillVideoSurfaceArea(pNodeToAdd->uiVideoSurfaceImage, 0, 0, CRDT_WIDTH_OF_TEXT_AREA, pNodeToAdd->sHeightOfString, 0 ); //set the font dest buffer to be the surface SetFontDestBuffer( pNodeToAdd->uiVideoSurfaceImage, 0, 0, CRDT_WIDTH_OF_TEXT_AREA, pNodeToAdd->sHeightOfString, FALSE ); //write the string onto the surface DisplayWrappedString( 0, 1, CRDT_WIDTH_OF_TEXT_AREA, 2, uiFontToUse, uiColorToUse, pNodeToAdd->pString, 0, FALSE, gubCrdtJustification ); //reset the font dest buffer SetFontDestBuffer(FRAME_BUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, FALSE); } // // Insert the node into the list // //if its the first node to add if( gCrdtRootNode == NULL ) { //make the new node the root node gCrdtRootNode = pNodeToAdd; gCrdtRootNode->pNext = NULL; gCrdtRootNode->pPrev = NULL; } else { pTemp = gCrdtRootNode; while( pTemp->pNext != NULL ) { pTemp = pTemp->pNext; } //Add the new node to the list pTemp->pNext = pNodeToAdd; //Assign the prev node pNodeToAdd->pPrev = pTemp; } gCrdtLastAddedNode = pNodeToAdd; return( TRUE ); }