void CleanSpriteArea( int player, MRect *myRect ) { SDL_Rect sdlRect; SDLU_MRectToSDLRect( myRect, &sdlRect ); SDLU_BlitSurface( playerSurface[player], &sdlRect, playerSpriteSurface[player], &sdlRect ); SetUpdateRect( player, myRect ); }
void SDLU_ChangeSurfaceDepth( SDL_Surface** surface, int depth ) { SDL_Surface* newSurface; newSurface = SDLU_InitSurface( &surface[0]->clip_rect, depth ); SDLU_BlitSurface( *surface, &surface[0]->clip_rect, newSurface, &newSurface->clip_rect ); SDL_FreeSurface( *surface ); *surface = newSurface; }
void SDLU_BlitFrontSurface( SDL_Surface* source, SDL_Rect* sourceSDLRect, SDL_Rect* destSDLRect ) { extern SDL_Surface* frontSurface; static unsigned long lastTick = 0; SDLU_BlitSurface( source, sourceSDLRect, frontSurface, destSDLRect ); unsigned long thisTick = MTickCount(); if ( thisTick > lastTick + 1 ) { SDL_Flip( frontSurface ); lastTick = thisTick; } }
void StartBalloon( const char *message ) { MPoint balloonTip, balloonFill; int replace; const char* match[] = { "~~", "||", "``", "{{" }; char* search; SDL_Rect balloonSDLRect, balloonContentsSDLRect; MRect balloonContentsRect; strcpy( balloonMsg, message ); for( replace=0; replace<4; replace++ ) { search = strstr( balloonMsg, match[replace] ); if( search ) { char temp[256]; search[0] = '%'; search[1] = 's'; sprintf( temp, balloonMsg, SDL_GetKeyName( playerKeys[1][replace] ) ); strcpy( balloonMsg, temp ); } } // Erase previous balloons SDLU_MRectToSDLRect( &balloonRect, &balloonSDLRect ); SDLU_BlitFrontSurface( backdropSurface, &balloonSDLRect, &balloonSDLRect ); // Draw empty balloon outline SDLU_AcquireSurface( balloonSurface ); balloonRect.left = balloonRect.right - 25 - CalculateBalloonWidth ( balloonMsg ); balloonRect.top = balloonRect.bottom - 25 - CalculateBalloonHeight( balloonMsg ); SDLU_MRectToSDLRect( &balloonRect, &balloonSDLRect ); SDLU_BlitSurface( backdropSurface, &balloonSDLRect, balloonSurface, &balloonSDLRect ); balloonContentsRect = balloonRect; balloonContentsRect.bottom -= 25; SurfaceGetEdges( balloonSurface, &balloonContentsRect ); SDL_FillRect( balloonSurface, SDLU_MRectToSDLRect( &balloonContentsRect, &balloonContentsSDLRect ), SDL_MapRGB( balloonSurface->format, 0xFF, 0xFF, 0xFF ) ); SurfaceCurveEdges( balloonSurface, &balloonContentsRect ); balloonTip.v = balloonContentsRect.bottom - 2; balloonTip.h = balloonContentsRect.right - 40; balloonFill = balloonTip; SurfaceBlitCharacter( balloonFont, '\x01', &balloonFill, 0, 0, 0, 0 ); SurfaceBlitCharacter( balloonFont, '\x02', &balloonTip, 31, 31, 31, 0 ); SDLU_ReleaseSurface( balloonSurface ); // Blit empty balloon to screen SDLU_MRectToSDLRect( &balloonRect, &balloonSDLRect ); SDLU_BlitFrontSurface( balloonSurface, &balloonSDLRect, &balloonSDLRect ); balloonPt.h = balloonRect.left + 10; balloonPt.v = balloonRect.top + 10; balloonChar = balloonMsg; balloonTime = GameTickCount( ); OpponentChatter( true ); }
void UpdateOpponent( void ) { MRect myRect = {0,0,64,64}, dstRect = {0,0,64,64}, maskRect; int emotiMap[] = {0, 1, 2, 1}, draw = false, count; SDL_Rect srcSDLRect, dstSDLRect; if( GameTickCount( ) > opponentTime ) { switch( opponentMood ) { case 0: // Idle opponentTime += 60 + RandomBefore(180); opponentMood = RandomBefore(2) + 1; opponentFrame = (emotiMap[emotions[1]] * kOppFrames); break; case 1: // Shifty Eyes opponentTime += 40 + RandomBefore(60); opponentMood = 0; opponentFrame = (emotiMap[emotions[1]] * kOppFrames) + RandomBefore(2) + 1; break; case 2: // Blinks opponentTime += 3; opponentMood = 3; opponentFrame = (emotiMap[emotions[1]] * kOppFrames) + 3; break; case 3: // Blinks (more) opponentTime += 3; opponentMood = 4; opponentFrame = (emotiMap[emotions[1]] * kOppFrames) + 4; break; case 4: // Blinks (more) opponentTime += 3; opponentMood = 0; opponentFrame = (emotiMap[emotions[1]] * kOppFrames) + 3; break; case 5: // Chatter (only good for tutorial) opponentTime += 8; opponentMood = 6; opponentFrame = 5; break; case 6: // Chatter 2 (only good for tutorial) opponentTime += 8; opponentMood = 5; opponentFrame = 6; break; case 7: // Pissed (when hit with punishments) opponentTime += 60; opponentFrame = 7; opponentMood = 0; break; } draw = true; } if( GameTickCount( ) > panicTime ) { panicTime += 2; if( emotions[1] == kEmotionPanic ) { if( ++panicFrame >= kGlowArraySize ) panicFrame = 0; draw = true; } else { panicFrame = 0; } } for( count=0; count<kGlows; count++ ) { if( GameTickCount( ) > glowTime[count] ) { glowTime[count] += character[1].glow[count].time; if( character[1].glow[count].color ) { if( ++glowFrame[count] >= kGlowArraySize ) glowFrame[count] = 0; draw = true; } else { glowFrame[count] = 0; } } } if( draw ) { OffsetMRect( &myRect, 64*opponentFrame, 0 ); SDLU_AcquireSurface( opponentDrawSurface ); SDLU_BlitSurface( opponentSurface, SDLU_MRectToSDLRect( &myRect, &srcSDLRect ), opponentDrawSurface, SDLU_MRectToSDLRect( &dstRect, &dstSDLRect ) ); maskRect = myRect; for( count=0; count<kGlows; count++ ) { OffsetMRect( &maskRect, 0, 64 ); if( glowFrame[count] ) { if( character[1].glow[count].color & 0x8000 ) { SurfaceBlitColor( opponentMaskSurface, opponentDrawSurface, &maskRect, &dstRect, (character[1].glow[count].color & 0x7C00) >> 10, (character[1].glow[count].color & 0x03E0) >> 5, (character[1].glow[count].color & 0x001F), heavyGlowArray[glowFrame[count]] ); } else { SurfaceBlitColor( opponentMaskSurface, opponentDrawSurface, &maskRect, &dstRect, (character[1].glow[count].color & 0x7C00) >> 10, (character[1].glow[count].color & 0x03E0) >> 5, (character[1].glow[count].color & 0x001F), lightGlowArray[glowFrame[count]] ); } } }