Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
More Editor Optimization
#1
Difficulty: 2/5 = Easy

This is an extremely basic optimization. I meant to post this a long time ago, but never got around to it.

BitBlt in Mirage is a completely useless function. There is absolutely no need for it, especially since when it is used, it loads pictures that are already loaded into memory, again. Useless and hogs memory.

This was made for MSE Build 1, but will work on 3.0.x.

All Client Side.

Open frmItemEditor. Make the form a little longer and select and delete picItems. Select picPic, and set it's AutoRedraw property to 'True'. Resize the form back to the way it was (Height = 4695)

Open frmMirage. Inside of picBack, in the upper left corner, select picBackSelect and delete it. Select picBack and change it's AutoRedraw property to 'True'. Select picSelect and set it's AutoRedraw property to 'True'. Goto Code View.

Find:
Code:
Private Sub picBackSelect_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    Call EditorChooseTile(Button, Shift, x, y)
End Sub
Replace with:
Code:
Private Sub picBack_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    Call EditorChooseTile(Button, Shift, x, y)
End Sub
Find:
Code:
Private Sub picBackSelect_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    Call EditorChooseTile(Button, Shift, x, y)
End Sub
Replace with:
Code:
Private Sub picBack_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    Call EditorChooseTile(Button, Shift, x, y)
End Sub

Open frmNPCEditor. Make the form a little longer and select and delete picSprites. Select picSprite, and set it's AutoRedraw property to 'True'. Resize the form back to the way it was (Height = 9375)

Open modGameLogic.

Find:
Code:
Public Sub EditorInit()
'****************************************************************
'* WHEN        WHO        WHAT
'* ----        ---        ----
'* 07/12/2005  Shannara   Added gfx constants.
'****************************************************************
    
    SaveMap = Map
    InEditor = True
    frmMirage.picMapEditor.Visible = True
    With frmMirage.picBackSelect
        .Width = 7 * PIC_X
        .Height = 255 * PIC_Y
        .Picture = LoadPicture(App.Path + GFX_PATH + "tiles" + GFX_EXT)
    End With
End Sub
Replace with:
Code:
Public Sub EditorInit()
'****************************************************************
'* WHEN        WHO        WHAT
'* ----        ---        ----
'* 06/01/2006  BigRed     Changed BitBlt to DX7
'* 07/12/2005  Shannara   Added gfx constants.
'****************************************************************
    
    SaveMap = Map
    InEditor = True
    frmMirage.picMapEditor.Visible = True
    
    frmMirage.scrlPicture.Max = Int(DDSD_Tile.lHeight / PIC_Y) - 7

    With rec
        .top = 0
        .Bottom = frmMirage.picBack.Height
        .Left = 0
        .Right = frmMirage.picBack.Width
    End With
        
    If DD_TileSurf Is Nothing Then
    Else
        With rec_pos
            If frmMirage.scrlPicture.Value = 0 Then
                .top = 0
            Else
                .top = (frmMirage.scrlPicture.Value * PIC_Y) * 1
            End If
            .Left = 0
            .Bottom = .top + (frmMirage.picBack.Height)
            .Right = frmMirage.picBack.Width
        End With
      
        DD_TileSurf.BltToDC frmMirage.picBack.hdc, rec_pos, rec
        frmMirage.picBack.Refresh
    End If
End Sub
Find:
Code:
Public Sub EditorChooseTile(Button As Integer, Shift As Integer, x As Single, y As Single)
    If Button = 1 Then
        EditorTileX = Int(x / PIC_X)
        EditorTileY = Int(y / PIC_Y)
    End If
    Call BitBlt(frmMirage.picSelect.hdc, 0, 0, PIC_X, PIC_Y, frmMirage.picBackSelect.hdc, EditorTileX * PIC_X, EditorTileY * PIC_Y, SRCCOPY)
End Sub
Replace with:
Code:
Public Sub EditorChooseTile(Button As Integer, Shift As Integer, x As Single, y As Single)
'****************************************************************
'* WHEN        WHO        WHAT
'* ----        ---        ----
'* 06/01/2006  BigRed     Changed BitBlt to DX7
'****************************************************************
    If Button = 1 Then
        EditorTileX = Int(x / PIC_X)
        EditorTileY = Int(y / PIC_Y) + frmMirage.scrlPicture.Value
    End If
    
    With rec_pos
        .top = EditorTileY * PIC_Y
        .Bottom = .top + PIC_Y
        .Left = EditorTileX * PIC_X
        .Right = .Left + PIC_X
    End With
    
    With rec
        .top = 0
        .Bottom = PIC_Y
        .Left = 0
        .Right = PIC_X
    End With

    If DD_TileSurf Is Nothing Then
    Else
        DD_TileSurf.BltToDC frmMirage.picSelect.hdc, rec_pos, rec
    End If
    frmMirage.picSelect.Refresh
End Sub
Find:
Code:
Public Sub EditorTileScroll()
    frmMirage.picBackSelect.top = (frmMirage.scrlPicture.Value * PIC_Y) * -1
End Sub
Replace with:
Code:
Public Sub EditorTileScroll()
'****************************************************************
'* WHEN        WHO        WHAT
'* ----        ---        ----
'* 06/01/2006  BigRed     Changed BitBlt to DX7
'****************************************************************
    With rec
        .top = 0
        .Bottom = frmMirage.picBack.Height
        .Left = 0
        .Right = frmMirage.picBack.Width
    End With
        
    If DD_TileSurf Is Nothing Then
    Else
        With rec_pos
            If frmMirage.scrlPicture.Value = 0 Then
                .top = 0
            Else
                .top = (frmMirage.scrlPicture.Value * PIC_Y) * 1
            End If
            .Left = 0
            .Bottom = .top + (frmMirage.picBack.Height)
            .Right = frmMirage.picBack.Width
        End With
        
        DD_TileSurf.BltToDC frmMirage.picBack.hdc, rec_pos, rec
        frmMirage.picBack.Refresh
    End If
End Sub
Find:
Code:
Public Sub ItemEditorBltItem()
    Call BitBlt(frmItemEditor.picPic.hdc, 0, 0, PIC_X, PIC_Y, frmItemEditor.picItems.hdc, 0, frmItemEditor.scrlPic.Value * PIC_Y, SRCCOPY)
End Sub
Replace with:
Code:
Public Sub ItemEditorBltItem()
'****************************************************************
'* WHEN        WHO        WHAT
'* ----        ---        ----
'* 06/01/2006  BigRed     Changed BitBlt to DX7
'****************************************************************

    With rec
        .top = frmItemEditor.scrlPic.Value * PIC_Y
        .Bottom = .top + PIC_Y
        .Left = 0
        .Right = PIC_X
    End With
    
    With rec_pos
        .top = 0
        .Bottom = PIC_Y
        .Left = 0
        .Right = PIC_X
    End With
    
    If DD_ItemSurf Is Nothing Then
    Else
        DD_ItemSurf.BltToDC frmItemEditor.picPic.hdc, rec, rec_pos
    End If
    frmItemEditor.picPic.Refresh
End Sub
Find[code]Public Sub ItemEditorInit()
'****************************************************************
'* WHEN WHO WHAT
'* ---- --- ----
'* 07/12/2005 Shannara Added gfx constant.
'****************************************************************

frmItemEditor.picItems.Picture = LoadPicture(App.Path & GFX_PATH & "items" & GFX_EXT)

frmItemEditor.txtName.Text = Trim(Item(EditorIndex).Name)
frmItemEditor.scrlPic.Value = Item(EditorIndex).Pic
frmItemEditor.cmbType.ListIndex = Item(EditorIndex).Type

If (frmItemEditor.cmbType.ListIndex >= ITEM_TYPE_WEAPON) And (frmItemEditor.cmbType.ListIndex = ITEM_TYPE_POTIONADDHP) And (frmItemEditor.cmbType.ListIndex = ITEM_TYPE_WEAPON) And (frmItemEditor.cmbType.ListIndex = ITEM_TYPE_POTIONADDHP) And (frmItemEditor.cmbType.ListIndex
Reply
#2
nice stuff, always good to see optimizations optimized.
Reply
#3
Thanks alot for posting this, it's pretty useful. Also, any idea if this will prevent the error "Cannot create auto redraw image" that some users get?
Reply
#4
post the answer to this in bugs:

What exactly do they do when it happens?
Reply
#5
To be honest. I don't use mirage at all. I just hang around to see if anything good comes up out of it. So, in answer to your question, I've never seen the bug before.
Reply
#6
You forgot to get rid of the loading on "ItemEditorInit"


Find the "Public Sub ItemEditorInit()" bit in modGameLogic, and remove the loading pic from the sub so it looks something like this:


[code]Public Sub ItemEditorInit()


frmItemEditor.txtName.Text = Trim(Item(EditorIndex).Name)
frmItemEditor.scrlPic.Value = Item(EditorIndex).Pic
frmItemEditor.cmbType.ListIndex = Item(EditorIndex).Type

If (frmItemEditor.cmbType.ListIndex >= ITEM_TYPE_WEAPON) And (frmItemEditor.cmbType.ListIndex = ITEM_TYPE_POTIONADDHP) And (frmItemEditor.cmbType.ListIndex
Reply
#7
Opp, kept thinking I was leaving one out. Edited tutorial above..
Reply
#8
Oop sorry about that. Somehow I screwed up on the copy & pasting. Anyway, there's only one small change you need to make. It's edited in the first post but here's the change:

In EditorChooseTile:

Find:
Code:
DD_TileSurf.BltToDC frmMirage.picBack.hdc, rec_pos, rec
and change to
Code:
DD_TileSurf.BltToDC frmMirage.picSelect.hdc, rec_pos, rec

Btw, I also noticed, in the tutorial I defaulted to 32x32 tiles, I'm going to go through and change that for everyone as well.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)