| Mirage Source http://www.miragesource.net/forums/ |
|
| Optimizing Surfaces -But the Fps isnt uber- http://www.miragesource.net/forums/viewtopic.php?f=201&t=2765 |
Page 1 of 1 |
| Author: | frozengod [ Wed Sep 26, 2007 7:28 pm ] |
| Post subject: | Optimizing Surfaces -But the Fps isnt uber- |
I made the mistake of starting 3 years ago on es, and ive built a pretty awesome game, and hopefully i can redo the gameloop and not have to lose all the work. im hoping you guys can point out some things i can do to get rid of this mess. ok this is my horrid ES gameloop Code: Sub GameLoop() Dim Tick As Long Dim TickFPS As Long Dim FPS As Long Dim x As Long Dim y As Long Dim I As Long Dim rec_back As RECT Dim FlashCntr As Long Dim FlashSwitch As Byte ' Set the focus frmMirage.picScreen.SetFocus ' Set font Call SetFont("Fixedsys", 18, 0, 0, 0, 0) ' Fixedsys's size can't be changed and bold doesn't seem to work ' Used for calculating fps TickFPS = GetTickCount FPS = 0 FlashCntr = GetTickCount FlashSwitch = 0 ' Just need to call this once at game loop so everything runs smoothly.. DD.RestoreAllSurfaces Call InitSurfaces 'Clear out the backbuffer ' Blit out the map animations if it is time to. If MapAnim <> 0 Then 'Call BltAnimations End If Do While InGame Tick = GetTickCount rec.Top = 0 rec.Bottom = frmMirage.picScreen.Height rec.Left = 0 rec.Right = frmMirage.picScreen.Width Call DD_BackBuffer.BltColorFill(rec, RGB(0, 0, 0)) 'Clear out the middle buffer for drawing With rec .Top = 0 .Bottom = frmMirage.picScreen.Height .Left = 0 .Right = frmMirage.picScreen.Width End With DD_MiddleBuffer.BltColorFill rec, RGB(0, 0, 0) ' Check to make sure they aren't trying to auto do anything If GetAsyncKeyState(VK_UP) >= 0 And DirUp = True Then DirUp = False If GetAsyncKeyState(VK_DOWN) >= 0 And DirDown = True Then DirDown = False If GetAsyncKeyState(VK_LEFT) >= 0 And DirLeft = True Then DirLeft = False If GetAsyncKeyState(VK_RIGHT) >= 0 And DirRight = True Then DirRight = False If GetAsyncKeyState(VK_CONTROL) >= 0 And ControlDown = True Then ControlDown = False If GetAsyncKeyState(VK_SHIFT) >= 0 And ShiftDown = True Then ShiftDown = False ' Check to make sure we are still connected If Not IsConnected Then InGame = False ' Check if we need to restore surfaces If NeedToRestoreSurfaces Then DD.RestoreAllSurfaces Call InitSurfaces End If If GettingMap = False Then If GetPlayerPOINTS(MyIndex) > 0 Then frmMirage.AddStr.Visible = True frmMirage.AddDef.Visible = True frmMirage.AddSpeed.Visible = True frmMirage.AddMagi.Visible = True Else frmMirage.AddStr.Visible = False frmMirage.AddDef.Visible = False frmMirage.AddSpeed.Visible = False frmMirage.AddMagi.Visible = False End If ' Visual Inventory Dim Q As Long Dim Qq As Long Dim IT As Long If GetTickCount > IT + 500 And frmMirage.picInv3.Visible = True Then For Q = 0 To MAX_INV - 1 Qq = Player(MyIndex).Inv(Q + 1).Num If frmMirage.picInv(Q).Picture <> LoadPicture() Then frmMirage.picInv(Q).Picture = LoadPicture() Else If Qq = 0 Then frmMirage.picInv(Q).Picture = LoadPicture() Else Call BitBlt(frmMirage.picInv(Q).hDC, 0, 0, PIC_X, PIC_Y, frmMirage.picItems.hDC, (Item(Qq).pic - Int(Item(Qq).pic / 6) * 6) * PIC_X, Int(Item(Qq).pic / 6) * PIC_Y, SRCCOPY) End If End If Next Q End If ' Icons Dim M As Long Dim Mm As Long Dim TI As Long If GetTickCount > TI + 500 And frmMirage.picPlayerSpells.Visible = True Then For M = 0 To MAX_PLAYER_SPELLS - 1 Mm = Player(MyIndex).Spell(M + 1) If frmMirage.picSpell(M).Picture <> LoadPicture() Then frmMirage.picSpell(M).Picture = LoadPicture() Else If Mm = 0 Then frmMirage.picSpell(M).Picture = LoadPicture() Else Call BitBlt(frmMirage.picSpell(M).hDC, 0, 0, PIC_X, PIC_Y, frmMirage.picSpellIcons.hDC, (Spell(Mm).pic - Int(Spell(Mm).pic / 6) * 6) * PIC_X, Int(Spell(Mm).pic / 6) * PIC_Y, SRCCOPY) End If End If Next M End If NewX = 10 NewY = 7 NewPlayerY = Player(MyIndex).y - NewY NewPlayerX = Player(MyIndex).x - NewX NewX = NewX * PIC_X NewY = NewY * PIC_Y NewXOffset = Player(MyIndex).XOffset NewYOffset = Player(MyIndex).YOffset If Player(MyIndex).y - 7 < 1 Then NewY = Player(MyIndex).y * PIC_Y + Player(MyIndex).YOffset NewYOffset = 0 NewPlayerY = 0 If Player(MyIndex).y = 7 And Player(MyIndex).Dir = DIR_UP Then NewPlayerY = Player(MyIndex).y - 7 NewY = 7 * PIC_Y NewYOffset = Player(MyIndex).YOffset End If ElseIf Player(MyIndex).y + 8 > MAX_MAPY + 1 Then NewY = (Player(MyIndex).y - 16) * PIC_Y + Player(MyIndex).YOffset NewYOffset = 0 NewPlayerY = MAX_MAPY - 13 If Player(MyIndex).y = 24 And Player(MyIndex).Dir = DIR_DOWN Then NewPlayerY = Player(MyIndex).y - 7 NewY = 7 * PIC_Y NewYOffset = Player(MyIndex).YOffset End If End If If Player(MyIndex).x - 10 < 1 Then NewX = Player(MyIndex).x * PIC_X + Player(MyIndex).XOffset NewXOffset = 0 NewPlayerX = 0 If Player(MyIndex).x = 10 And Player(MyIndex).Dir = DIR_LEFT Then NewPlayerX = Player(MyIndex).x - 10 NewX = 10 * PIC_X NewXOffset = Player(MyIndex).XOffset End If ElseIf Player(MyIndex).x + 11 > MAX_MAPX + 1 Then NewX = (Player(MyIndex).x - 11) * PIC_X + Player(MyIndex).XOffset NewXOffset = 0 NewPlayerX = MAX_MAPX - 19 If Player(MyIndex).x = 21 And Player(MyIndex).Dir = DIR_RIGHT Then NewPlayerX = Player(MyIndex).x - 10 NewX = 10 * PIC_X NewXOffset = Player(MyIndex).XOffset End If End If sx = 32 If MAX_MAPX = 19 Then NewX = Player(MyIndex).x * PIC_X + Player(MyIndex).XOffset NewXOffset = 0 NewPlayerX = 0 NewY = Player(MyIndex).y * PIC_Y + Player(MyIndex).YOffset NewYOffset = 0 NewPlayerY = 0 sx = 0 End If If ScreenMode = 0 Then ' Blit out the items For I = 1 To MAX_MAP_ITEMS If MapItem(I).Num > 0 Then Call BltItem(I) End If Next I ' Blit out NPC hp bars For I = 1 To MAX_MAP_NPCS If GetTickCount < MapNpc(I).LastAttack + 5000 Then Call BltNpcBars(I) End If Next I ' Blit players bar For I = 1 To MAX_PLAYERS If IsPlaying(I) Then If GetPlayerMap(I) = GetPlayerMap(MyIndex) Then 'If GetTickCount < Player(MyIndex).LastAttack + 5000 Then Call BltPlayerBars(I) 'End If End If If Player(I).Pet.Map = GetPlayerMap(MyIndex) And Player(I).Pet.Alive = YES Then If GetTickCount < Player(MyIndex).Pet.LastAttack + 5000 Then Call BltPetBars(I) End If End If End If Next I ' Blit out the sprite change attribute For y = 0 To MAX_MAPY For x = 0 To MAX_MAPX Call BltSpriteChange(x, y) Next x Next y ' Blit out the furniture attribute For y = 0 To MAX_MAPY For x = 0 To MAX_MAPX Call BltFurniture(x, y) Next x Next y ' Blit out arrows For I = 1 To MAX_PLAYERS If IsPlaying(I) And GetPlayerMap(I) = GetPlayerMap(MyIndex) Then Call BltArrow(I) End If Next I ' XCORPSEX For I = 1 To MAX_PLAYERS If IsPlaying(I) Then If Player(I).CorpseMap = GetPlayerMap(MyIndex) Then Call BltPlayerCorpse(I) End If End If Next I ' XCORPSEX ' Blit out the npcs For I = 1 To MAX_MAP_NPCS Call BltNpc(I) Next I ' Blit out players For I = 1 To MAX_PLAYERS If GetPlayerSpriteAccess(I) < 1 Then If IsPlaying(I) Then If GetPlayerMap(I) = GetPlayerMap(MyIndex) Then If Player(I).Pet.Alive = YES Then Call BltPet(I) End If Call BltPlayer(I) End If End If End If Next I For I = 1 To MAX_PLAYERS If GetPlayerSpriteAccess(I) > 0 Then If IsPlaying(I) Then If GetPlayerMap(I) = GetPlayerMap(MyIndex) Then If Player(I).Pet.Alive = YES Then Call BltPet(I) End If Call BltAdmin(I) End If End If End If Next I If SIZE_Y > PIC_Y Then For I = 1 To MAX_PLAYERS If GetPlayerSpriteAccess(I) < 1 Then If IsPlaying(I) Then If GetPlayerMap(I) = GetPlayerMap(MyIndex) Then If Player(I).Pet.Alive = YES Then Call BltPetTop(I) End If Call BltPlayerTop(I) End If End If End If Next I End If If SIZE_Y > PIC_Y Then For I = 1 To MAX_PLAYERS If GetPlayerSpriteAccess(I) > 0 Then If IsPlaying(I) Then If GetPlayerMap(I) = GetPlayerMap(MyIndex) Then If Player(I).Pet.Alive = YES Then Call BltPetTop(I) End If Call BltAdminTop(I) End If End If End If Next I End If ' Blit the spells For I = 1 To MAX_PLAYERS If IsPlaying(I) And GetPlayerMap(I) = GetPlayerMap(MyIndex) Then Call BltSpell(I) End If Next I ' Blit out the sprite change attribute For y = 0 To MAX_MAPY For x = 0 To MAX_MAPX Call BltSpriteChange2(x, y) Next x Next y ' Blit out the npc's top For I = 1 To MAX_MAP_NPCS Call BltNpcTop(I) Next I End If If InEditor = True Then Call BltTile Call BltFringeTile Call BltFringeTile2 End If If ScreenMode = 0 Then ' Blit out the npcs For I = 1 To MAX_MAP_NPCS If Map(GetPlayerMap(MyIndex)).Tile(MapNpc(I).x, MapNpc(I).y).Fringe < 1 Then If Map(GetPlayerMap(MyIndex)).Tile(MapNpc(I).x, MapNpc(I).y).FAnim < 1 Then If Map(GetPlayerMap(MyIndex)).Tile(MapNpc(I).x, MapNpc(I).y).Fringe2 < 1 Then If Map(GetPlayerMap(MyIndex)).Tile(MapNpc(I).x, MapNpc(I).y).F2Anim < 1 Then Call BltNpcTop(I) End If End If End If End If Next I End If For I = 1 To MAX_PLAYERS If IsPlaying(I) = True Then If Player(I).LevelUpT + 3000 > GetTickCount Then rec.Top = Int(32 / TilesInSheets) * PIC_Y rec.Bottom = rec.Top + PIC_Y rec.Left = (32 - Int(32 / TilesInSheets) * TilesInSheets) * PIC_X rec.Right = rec.Left + 96 If I = MyIndex Then x = NewX + sx y = NewY + sx Call DD_BackBuffer.BltFast(x - 32, y - 10 - Player(I).LevelUp, DD_TileSurf(6), rec, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY) Else x = GetPlayerX(I) * PIC_X + sx + Player(I).XOffset y = GetPlayerY(I) * PIC_Y + sx + Player(I).YOffset Call DD_BackBuffer.BltFast(x - (NewPlayerX * PIC_X) - 32 - NewXOffset, y - (NewPlayerY * PIC_Y) - 10 - Player(I).LevelUp - NewYOffset, DD_TileSurf(6), rec, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY) End If If Player(I).LevelUp >= 3 Then Player(I).LevelUp = Player(I).LevelUp - 1 ElseIf Player(I).LevelUp >= 1 Then Player(I).LevelUp = Player(I).LevelUp + 1 End If Else Player(I).LevelUpT = 0 End If End If Next I If GettingMap = False Then If GameTime = TIME_NIGHT And Map(GetPlayerMap(MyIndex)).Indoors = 0 And InEditor = False Then Call Night End If If frmMapEditor.chkDayNight.Value = 1 And InEditor = True Then Call Night End If If Map(GetPlayerMap(MyIndex)).Indoors = 0 Then Call BltWeather End If If InEditor = True And Val(GetVar(App.Path & "\Main\Config\config.ini", "CONFIG", "MapGrid")) = 1 Then For y = 0 To MAX_MAPY For x = 0 To MAX_MAPX Call BltTile2(x * 32, y * 32, 0, 5) Next x Next y End If End If If InEditor = True And SelectorWidth <> 0 And SelectorHeight <> 0 And frmMapEditor.fraLayers.Visible = True Then For y = 0 To SelectorHeight - 1 For x = 0 To SelectorWidth - 1 Call BltTile2(MouseX + (x * PIC_X), MouseY + (y * PIC_Y), ((EditorTileY + y) * TilesInSheets) + (EditorTileX + x), EditorSet) Next x Next y End If rec.Top = 0 rec.Bottom = frmMirage.picScreen.Height rec.Left = 0 rec.Right = frmMirage.picScreen.Width Call DD_BackBuffer.BltFast(0, 0, DD_LowerBuffer, rec, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY) Call DD_BackBuffer.BltFast(0, 0, DD_MiddleBuffer, rec, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY) Call DD_BackBuffer.BltFast(0, 0, DD_UpperBuffer, rec, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY) ' Lock the backbuffer so we can draw text and names TexthDC = DD_BackBuffer.GetDC If GettingMap = False Then If ScreenMode = 0 Then If Val(GetVar(App.Path & "\Main\Config\config.ini", "CONFIG", "NPCDamage")) = 1 Then If Val(GetVar(App.Path & "\Main\Config\config.ini", "CONFIG", "PlayerName")) = 0 Then If GetTickCount < NPCDmgTime + 2000 Then Call DrawText(TexthDC, (Int(Len(NPCDmgDamage)) / 2) * 3 + NewX + sx, NewY - 22 - ii + sx, NPCDmgDamage, QBColor(BrightRed)) End If Else If GetPlayerGuild(MyIndex) <> "" Then If GetTickCount < NPCDmgTime + 2000 Then Call DrawText(TexthDC, (Int(Len(NPCDmgDamage)) / 2) * 3 + NewX + sx, NewY - 42 - ii + sx, NPCDmgDamage, QBColor(BrightRed)) End If Else If GetTickCount < NPCDmgTime + 2000 Then Call DrawText(TexthDC, (Int(Len(NPCDmgDamage)) / 2) * 3 + NewX + sx, NewY - 22 - ii + sx, NPCDmgDamage, QBColor(BrightRed)) End If End If End If ii = ii + 1 End If If Val(GetVar(App.Path & "\Main\Config\config.ini", "CONFIG", "PlayerDamage")) = 1 Then If NPCWho > 0 Then If MapNpc(NPCWho).Num > 0 Then If Val(GetVar(App.Path & "\Main\Config\config.ini", "CONFIG", "NPCName")) = 0 Then If Npc(MapNpc(NPCWho).Num).Big = 0 Then If GetTickCount < DmgTime + 2000 Then Call DrawText(TexthDC, (MapNpc(NPCWho).x - NewPlayerX) * PIC_X + sx + (Int(Len(DmgDamage)) / 2) * 3 + MapNpc(NPCWho).XOffset - NewXOffset, (MapNpc(NPCWho).y - NewPlayerY) * PIC_Y + sx - 20 + MapNpc(NPCWho).YOffset - NewYOffset - iii, DmgDamage, QBColor(White)) End If Else If GetTickCount < DmgTime + 2000 Then Call DrawText(TexthDC, (MapNpc(NPCWho).x - NewPlayerX) * PIC_X + sx + (Int(Len(DmgDamage)) / 2) * 3 + MapNpc(NPCWho).XOffset - NewXOffset, (MapNpc(NPCWho).y - NewPlayerY) * PIC_Y + sx - 47 + MapNpc(NPCWho).YOffset - NewYOffset - iii, DmgDamage, QBColor(White)) End If End If Else If Npc(MapNpc(NPCWho).Num).Big = 0 Then If GetTickCount < DmgTime + 2000 Then Call DrawText(TexthDC, (MapNpc(NPCWho).x - NewPlayerX) * PIC_X + sx + (Int(Len(DmgDamage)) / 2) * 3 + MapNpc(NPCWho).XOffset - NewXOffset, (MapNpc(NPCWho).y - NewPlayerY) * PIC_Y + sx - 30 + MapNpc(NPCWho).YOffset - NewYOffset - iii, DmgDamage, QBColor(White)) End If Else If GetTickCount < DmgTime + 2000 Then Call DrawText(TexthDC, (MapNpc(NPCWho).x - NewPlayerX) * PIC_X + sx + (Int(Len(DmgDamage)) / 2) * 3 + MapNpc(NPCWho).XOffset - NewXOffset, (MapNpc(NPCWho).y - NewPlayerY) * PIC_Y + sx - 57 + MapNpc(NPCWho).YOffset - NewYOffset - iii, DmgDamage, QBColor(White)) End If End If End If iii = iii + 1 End If End If End If 'Draw NPC Names If Val(GetVar(App.Path & "\Main\Config\config.ini", "CONFIG", "NPCName")) = 1 Then For I = LBound(MapNpc) To UBound(MapNpc) If MapNpc(I).Num > 0 Then Call BltMapNPCName(I) End If Next I End If ' Draw Player Names If Val(GetVar(App.Path & "\Main\Config\config.ini", "CONFIG", "PlayerName")) = 1 Then For I = 1 To MAX_PLAYERS If IsPlaying(I) And GetPlayerMap(I) = GetPlayerMap(MyIndex) Then Call BltPlayerGuildName(I) Call BltPlayerMarriageName(I) If GetTickCount > FlashCntr + 250 Then If FlashSwitch = 1 Then FlashSwitch = 0 Else FlashSwitch = 1 End If FlashCntr = GetTickCount End If Call BltPlayerName(I, FlashSwitch) If Player(I).Pet.Alive = YES And Player(I).Pet.Map = GetPlayerMap(MyIndex) Then Call BltPetName(I) End If ' XCORPSEX If Player(I).CorpseMap = GetPlayerMap(MyIndex) Then Call BltPlayerCorpseName(I) End If ' XCORPSEX End If Next I End If ' speech bubble stuffs If Val(GetVar(App.Path & "\Main\Config\config.ini", "CONFIG", "SpeechBubbles")) = 1 Then For I = 1 To MAX_PLAYERS If IsPlaying(I) And GetPlayerMap(I) = GetPlayerMap(MyIndex) Then If Bubble(I).Text <> "" Then Call BltPlayerText(I) End If If GetTickCount() > Bubble(I).Created + DISPLAY_BUBBLE_TIME Then Bubble(I).Text = "" End If End If Next I End If ' Blit out attribs if in editor If InEditor Then For y = 0 To MAX_MAPY For x = 0 To MAX_MAPX With Map(GetPlayerMap(MyIndex)).Tile(x, y) If .Type = TILE_TYPE_BLOCKED Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "B", QBColor(BrightRed)) If .Type = TILE_TYPE_WARP Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "W", QBColor(BrightBlue)) If .Type = TILE_TYPE_ITEM Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "I", QBColor(White)) If .Type = TILE_TYPE_NPCAVOID Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "N", QBColor(White)) If .Type = TILE_TYPE_KEY Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "K", QBColor(White)) If .Type = TILE_TYPE_KEYOPEN Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "O", QBColor(White)) If .Type = TILE_TYPE_HEAL Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "H", QBColor(BrightGreen)) If .Type = TILE_TYPE_KILL Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "K", QBColor(BrightRed)) If .Type = TILE_TYPE_SHOP Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "S", QBColor(Yellow)) If .Type = TILE_TYPE_CBLOCK Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "CB", QBColor(Black)) If .Type = TILE_TYPE_ARENA Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "A", QBColor(BrightGreen)) If .Type = TILE_TYPE_SOUND Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "PS", QBColor(Yellow)) If .Type = TILE_TYPE_SPRITE_CHANGE Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "SC", QBColor(Grey)) If .Type = TILE_TYPE_SIGN Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "SI", QBColor(Yellow)) If .Type = TILE_TYPE_DOOR Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "D", QBColor(Black)) If .Type = TILE_TYPE_NOTICE Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "N", QBColor(BrightGreen)) If .Type = TILE_TYPE_CHEST Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "C", QBColor(Brown)) If .Type = TILE_TYPE_CLASS_CHANGE Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "CG", QBColor(White)) If .Type = TILE_TYPE_SCRIPTED Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "SC", QBColor(Yellow)) If .Type = TILE_TYPE_BANK Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "BANK", QBColor(BrightRed)) If .Type = TILE_TYPE_HOUSE_BUY Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "PHB", QBColor(Yellow)) If .Type = TILE_TYPE_HOUSE Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "PH", QBColor(White)) If .Type = TILE_TYPE_FURNITURE Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "F", QBColor(BrightRed)) If .Type = TILE_TYPE_FISH Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "FISH", QBColor(Blue)) If .Type = TILE_TYPE_MINE Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "MINE", QBColor(Yellow)) If .Type = TILE_TYPE_LJACKING Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "LJACK", QBColor(Yellow)) If .Type = TILE_TYPE_ROOF Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "RF", QBColor(Red)) If .Type = TILE_TYPE_ROOFBLOCK Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "RFB", QBColor(BrightRed)) If .Type = TILE_TYPE_WALKTHRU Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "WT", QBColor(Red)) If .Type = TILE_TYPE_LOWER_STAT Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "-S", QBColor(BrightRed)) If .Type = TILE_TYPE_FORAGING Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "IF", QBColor(Blue)) If .Type = TILE_TYPE_SMITH Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "Sm", QBColor(BrightGreen)) If .Type = TILE_TYPE_JAILRELEASE Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "JAIL", QBColor(BrightGreen)) If .Type = TILE_TYPE_SPAWNGATE Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "GATE", QBColor(BrightGreen)) If .Type = TILE_TYPE_CTF Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "CTF", QBColor(BrightCyan)) If .Type = TILE_TYPE_GUILDHOUSE_BUY Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "GHB", QBColor(Yellow)) If .Type = TILE_TYPE_GUILDHOUSE Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "GH", QBColor(White)) If .Type = TILE_TYPE_WATER Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "WATER", QBColor(White)) If .Type = TILE_TYPE_SOAEXPANSIONPACK Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, "SoA", QBColor(White)) If .Light > 0 Then Call DrawText(TexthDC, x * PIC_X + sx + 18 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 14 - (NewPlayerY * PIC_Y) - NewYOffset, "L", QBColor(Yellow)) End With If InSpawnEditor Then For I = 1 To MAX_MAP_NPCS If TempNpcSpawn(I).Used = YES Then If x = TempNpcSpawn(I).x And y = TempNpcSpawn(I).y Then Call DrawText(TexthDC, x * PIC_X + sx + 8 - (NewPlayerX * PIC_X) - NewXOffset, y * PIC_Y + sx + 8 - (NewPlayerY * PIC_Y) - NewYOffset, I, QBColor(White)) End If End If Next I End If Next x Next y End If ' Blit out there FPS If Val(GetVar(App.Path & "\Main\Config\config.ini", "CONFIG", "FPS")) = 1 Then Call DrawText(TexthDC, 560, 5, "FPS: " & GameFPS, QBColor(BrightCyan)) End If ' Draw map name If Map(GetPlayerMap(MyIndex)).Moral = MAP_MORAL_NONE Then Call DrawText(TexthDC, Int((20.5) * PIC_X / 2) - (Int(Len(Trim(Map(GetPlayerMap(MyIndex)).Name)) / 2) * 8) + sx, 2 + sx, Trim(Map(GetPlayerMap(MyIndex)).Name), QBColor(BrightRed)) ElseIf Map(GetPlayerMap(MyIndex)).Moral = MAP_MORAL_SAFE Then Call DrawText(TexthDC, Int((20.5) * PIC_X / 2) - (Int(Len(Trim(Map(GetPlayerMap(MyIndex)).Name)) / 2) * 8) + sx, 2 + sx, Trim(Map(GetPlayerMap(MyIndex)).Name), QBColor(White)) ElseIf Map(GetPlayerMap(MyIndex)).Moral = MAP_MORAL_NO_PENALTY Then Call DrawText(TexthDC, Int((20.5) * PIC_X / 2) - (Int(Len(Trim(Map(GetPlayerMap(MyIndex)).Name)) / 2) * 8) + sx, 2 + sx, Trim(Map(GetPlayerMap(MyIndex)).Name), QBColor(Black)) ElseIf Map(GetPlayerMap(MyIndex)).Moral = MAP_MORAL_HOUSE Then Call DrawText(TexthDC, Int((20.5) * PIC_X / 2) - (Int(Len(Trim(Map(GetPlayerMap(MyIndex)).Name)) / 2) * 8) + sx, 2 + sx, Trim(Map(GetPlayerMap(MyIndex)).Name), QBColor(Yellow)) ElseIf Map(GetPlayerMap(MyIndex)).Moral = MAP_MORAL_INN Then Call DrawText(TexthDC, Int((20.5) * PIC_X / 2) - (Int(Len(Trim(Map(GetPlayerMap(MyIndex)).Name)) / 2) * 8) + sx, 2 + sx, Trim(Map(GetPlayerMap(MyIndex)).Name), QBColor(Green)) End If ' Battle messages For I = 1 To MAX_BLT_LINE If BattlePMsg(I).Index > 0 Then If BattlePMsg(I).Time + 7000 > GetTickCount Then Call DrawText(TexthDC, 1 + sx, BattlePMsg(I).y + frmMirage.picScreen.Height - 15 + sx, Trim(BattlePMsg(I).Msg), QBColor(BattlePMsg(I).Color)) Else BattlePMsg(I).done = 0 End If End If If BattleMMsg(I).Index > 0 Then If BattleMMsg(I).Time + 7000 > GetTickCount Then Call DrawText(TexthDC, (frmMirage.picScreen.Width - (Len(BattleMMsg(I).Msg) * 8)) + sx, BattleMMsg(I).y + frmMirage.picScreen.Height - 15 + sx, Trim(BattleMMsg(I).Msg), QBColor(BattleMMsg(I).Color)) Else BattleMMsg(I).done = 0 End If End If Next I End If End If ' Check if we are getting a map, and if we are tell them so If GettingMap = True Then Call DrawText(TexthDC, 36, 36, "...Receiving map...", QBColor(BrightCyan)) End If ' Release DC Call DD_BackBuffer.ReleaseDC(TexthDC) ' Blit out emoticons For I = 1 To MAX_PLAYERS If IsPlaying(I) And GetPlayerMap(I) = GetPlayerMap(MyIndex) Then Call BltEmoticons(I) End If Next I ' Get the rect for the back buffer to blit from rec.Top = 0 rec.Bottom = (MAX_MAPY + 1) * PIC_Y rec.Left = 0 rec.Right = (MAX_MAPX + 1) * PIC_X ' Get the rect to blit to Call DX.GetWindowRect(frmMirage.picScreen.hwnd, rec_pos) rec_pos.Bottom = rec_pos.Top - sx + ((MAX_MAPY + 1) * PIC_Y) rec_pos.Right = rec_pos.Left - sx + ((MAX_MAPX + 1) * PIC_X) rec_pos.Top = rec_pos.Bottom - ((MAX_MAPY + 1) * PIC_Y) rec_pos.Left = rec_pos.Right - ((MAX_MAPX + 1) * PIC_X) ' Blit the backbuffer Call DD_PrimarySurf.Blt(rec_pos, DD_BackBuffer, rec, DDBLT_WAIT) If XToGo <> -1 Or YToGo <> -1 Then Dim XDif As Long Dim YDif As Long XDif = Abs(GetPlayerX(MyIndex) - XToGo) YDif = Abs(GetPlayerY(MyIndex) - YToGo) If XToGo = GetPlayerX(MyIndex) Or XToGo = -1 Then XToGo = -1 XDif = 0 Else XDif = Abs(GetPlayerX(MyIndex) - XToGo) End If If YToGo = GetPlayerY(MyIndex) Or YToGo = -1 Then YToGo = -1 YDif = 0 Else YDif = Abs(GetPlayerY(MyIndex) - YToGo) End If Debug.Print (XDif & " " & YDif) If XDif > YDif Then If GetPlayerX(MyIndex) - XToGo > 0 Then DirLeft = True Else DirRight = True End If End If If YDif > XDif Then If GetPlayerY(MyIndex) - YToGo > 0 Then DirUp = True Else DirDown = True End If End If If XDif = YDif And XDif <> 0 And YDif <> 0 Then ' I'll be nice and give you the non-directional movement code 'If Int(Rnd * 2) = 0 Then If GetPlayerX(MyIndex) - XToGo > 0 Then DirLeft = True Else DirRight = True End If ' Else If GetPlayerY(MyIndex) - YToGo > 0 Then DirUp = True Else DirDown = True End If 'End If End If End If ' Check if player is trying to move Call CheckMovement ' Check to see if player is trying to attack Call CheckAttack ' Process player and pet movements (actually move them) For I = 1 To MAX_PLAYERS If IsPlaying(I) Then Call ProcessMovement(I) If Player(I).Pet.Alive = YES Then Call ProcessPetMovement(I) End If End If Next I ' Process npc movements (actually move them) For I = 1 To MAX_MAP_NPCS If Map(GetPlayerMap(MyIndex)).Npc(I) > 0 Then Call ProcessNpcMovement(I) End If Next I ' Change map animation every 250 milliseconds If GetTickCount > MapAnimTimer + 250 Then If MapAnim = 0 Then MapAnim = 1 Else MapAnim = 0 End If MapAnimTimer = GetTickCount End If ' Calculate fps If GetTickCount > TickFPS + 1000 Then GameFPS = FPS TickFPS = GetTickCount FPS = 0 Else FPS = FPS + 1 End If Call MakeMidiLoop DoEvents Loop frmMirage.Visible = False frmSendGetData.Visible = True Call SetStatus("Destroying game data...") ' Shutdown the game Call GameDestroy ' Report disconnection if server disconnects If IsConnected = False Then Call MsgBox("Thank you for playing " & GAME_NAME & "!", vbOKOnly, GAME_NAME) End If End Sub any ideas ? i know its a hell of alot bigger than MS thats for sure |
|
| Author: | Robin [ Wed Sep 26, 2007 7:30 pm ] |
| Post subject: | Re: Optimizing Surfaces -But the Fps isnt uber- |
Get rid of the visual inventory, visual spells and the scrolling map code. See if that helps. Don't bother replacing it yet, just backup your work then delete all those to see if it's faster. |
|
| Page 1 of 1 | All times are UTC |
| Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |
|