Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

True 3-Frame Movement


Electrokinesis
 Share

Recommended Posts

I saw MrMiguu's and found it kinda choppy looking. (maybe I'm just REALLY picky)
Anyway, after talking to Robin about his code for his engine, he willingly gave it to me.
Soon finding that it was horrible in Eclipse but looked nice on his game, I proceeded to edit his code for about 10-20 minutes until I came out with this tutorial.
(Also, on the off chance that anyone is using ED3… I have [after about an hour] edited it to work for that engine as well.)
________________________________________________

Credit:
Robin (original code)
Electrokinesis (Eclipse 2.7[MIGHT work on others… untested] and ED3 edit)
________________________________________________

Alright. It's quite a few areas to update.
Source required, of course.
(NOTE: If you find any problems or my instructions not clear enough then tell me and I'll try to get pictures to this process. Or better examples…)

First, under 'BltPlayer' in modGameLogic find where it says 'check for animation and change everything between that and the next set of green text to this:

```
' Check for animation
    Anim = 1
  If Player(Index).Attacking = 0 Then
    Select Case GetPlayerDir(Index)
      Case DIR_UP
        If (Player(Index).yOffset > 8) Then Anim = Player(Index).Step
      Case DIR_DOWN
        If (Player(Index).yOffset < -8) Then Anim = Player(Index).Step
      Case DIR_LEFT
        If (Player(Index).xOffset > 8) Then Anim = Player(Index).Step
      Case DIR_RIGHT
        If (Player(Index).xOffset < -8) Then Anim = Player(Index).Step
    End Select
  Else
    If Player(Index).AttackTimer + 1000 > GetTickCount Then
      Anim = 2
    End If
  End If
```
Use the same code and same process under 'BltPlayerTop'.
______________________
Next find 'Sub processmovement' and replace the entire code (in between the lines) with this:
```
Sub ProcessMovement(ByVal Index As Long)

  ' Check if player is walking, and if so process moving them over
  If Player(Index).Moving = MOVING_WALKING Then
    Select Case GetPlayerDir(Index)
      Case DIR_UP
        Player(Index).YOffset = Player(Index).YOffset - WALK_SPEED
      Case DIR_DOWN
        Player(Index).YOffset = Player(Index).YOffset + WALK_SPEED
      Case DIR_LEFT
        Player(Index).XOffset = Player(Index).XOffset - WALK_SPEED
      Case DIR_RIGHT
        Player(Index).XOffset = Player(Index).XOffset + WALK_SPEED
    End Select

    ' Check if completed walking over to the next tile
    If Player(Index).Dir = DIR_RIGHT Or Player(Index).Dir = DIR_DOWN Then
      If (Player(Index).XOffset >= 0) And (Player(Index).YOffset >= 0) Then
        Player(Index).Moving = 0
        If Player(Index).Step = 0 Then
          Player(Index).Step = 2
        Else
          Player(Index).Step = 0
        End If
      End If
    Else
      If (Player(Index).XOffset <= 0) And (Player(Index).YOffset <= 0) Then
        Player(Index).Moving = 0
        If Player(Index).Step = 0 Then
          Player(Index).Step = 2
        Else
          Player(Index).Step = 0
        End If
      End If
    End If
  End If

  ' Check if player is running, and if so process moving them over
  If Player(Index).Moving = MOVING_RUNNING Then
    Select Case GetPlayerDir(Index)
      Case DIR_UP
        Player(Index).YOffset = Player(Index).YOffset - RUN_SPEED
      Case DIR_DOWN
        Player(Index).YOffset = Player(Index).YOffset + RUN_SPEED
      Case DIR_LEFT
        Player(Index).XOffset = Player(Index).XOffset - RUN_SPEED
      Case DIR_RIGHT
        Player(Index).XOffset = Player(Index).XOffset + RUN_SPEED
    End Select

    ' Check if completed walking over to the next tile
    If Player(Index).Dir = DIR_RIGHT Or Player(Index).Dir = DIR_DOWN Then
      If (Player(Index).XOffset >= 0) And (Player(Index).YOffset >= 0) Then
        Player(Index).Moving = 0
        If Player(Index).Step = 0 Then
          Player(Index).Step = 2
        Else
          Player(Index).Step = 0
        End If
      End If
    Else
      If (Player(Index).XOffset <= 0) And (Player(Index).YOffset <= 0) Then
        Player(Index).Moving = 0
        If Player(Index).Step = 0 Then
          Player(Index).Step = 2
        Else
          Player(Index).Step = 0
        End If
      End If
    End If
  End If

  Select Case GetPlayerDir(Index)
    Case DIR_UP
      If Player(Index).YOffset <= 0 Then
        Player(Index).YOffset = 0
      End If
    Case DIR_DOWN
      If Player(Index).YOffset >= 0 Then
        Player(Index).YOffset = 0
      End If
    Case DIR_LEFT
      If Player(Index).XOffset <= 0 Then
        Player(Index).XOffset = 0
      End If
    Case DIR_RIGHT
      If Player(Index).XOffset >= 0 Then
        Player(Index).XOffset = 0
      End If
  End Select
End Sub
```_________________
Finally, in modType find 'PlayerRec' and add this after "Party As PartyRec":
```
Step As Byte
```
Link to comment
Share on other sites

  • Replies 93
  • Created
  • Last Reply

Top Posters In This Topic

@Electrokinesis:

> Current frame movement is: 1,2,…
> After code it's: 1,2,3,2,...
>
> Basically, they move as intended.
> I'll have a movie example sometime later today. (24th)

So that means that we don't have a seperate attack frame, hmm well didn't use it anyways.
And does this work with paperdoll ?
Link to comment
Share on other sites

The attack frame is the same as before and yes, it works with paperdoll.
Just keep the sprites in the same order as usual.

I've tested it normal, paperdoll, and custom.
It's flawless.

EDIT: preview (recorder lagged a tiny bit)
Just sprite #2 from the original.
![](http://img185.imageshack.us/img185/6470/movementbb0.gif)
Link to comment
Share on other sites

  • 2 weeks later...
  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share


×
×
  • Create New...