Mirage Source

Free ORPG making software.
It is currently Mon Apr 29, 2024 12:34 pm

All times are UTC




Post new topic Reply to topic  [ 2 posts ] 
Author Message
 Post subject: Random Coding
PostPosted: Fri Oct 03, 2008 8:29 pm 
Offline
Pro
User avatar

Joined: Tue Nov 13, 2007 2:42 pm
Posts: 509
ItemRec
Added the array to hold any values for modified stats / vitals.
Code:
Type ItemRec
    Name As String * NAME_LENGTH
   
    Pic As Integer
    Type As Byte
    Data1 As Integer
    Data2 As Integer
    Data3 As Integer   
    ModVital(1 To Vitals.Vital_Count - 1) As Long
    ModStat(1 To Stats.Stat_Count - 1) As Long
End Type


The following function will go though all your equipment and add up any stats plus the base stat value.
Code:
'***************************************
' Calculate current modified stats
'***************************************
Public Function Current_ModStat(ByVal Index As Long, ByVal Stat As Stats) As Long
Dim i As Long, ItemNum As Long

    Current_ModStat = Current_Stat(Index, Stat)
   
    For i = 1 To Equipment.Equipment_Count - 1
        If Current_EquipmentSlot(Index, i) > 0 Then
            Current_ModStat = Current_ModStat + Item(Current_InvItemNum(Index, Current_EquipmentSlot(Index, i))).ModStat(Stat)
        End If
    Next
End Function


The following function will go though all your equipment and add up any vitals plus the base vital value.
Code:
'***************************************
' Calculate current modified vitals
'***************************************
Public Function Current_ModVital(ByVal Index As Long, ByVal Vital As Vitals) As Long
Dim i As Long, ItemNum As Long

    Current_ModVital = 0
   
    For i = 1 To Equipment.Equipment_Count - 1
        If Current_EquipmentSlot(Index, i) > 0 Then
            Current_ModVital = Current_ModVital + Item(Current_InvItemNum(Index, Current_EquipmentSlot(Index, i))).ModVital(Vital)
        End If
    Next
End Function


Just using the new modStat and modVital to calculate the max vitals.
Code:
'***************************************
' Calculate Max Vital
'***************************************
Public Function Current_MaxVital(ByVal Index As Long, ByVal Vital As Vitals) As Long

    Select Case Vital
        Case HP
            Current_MaxVital = (Current_Level(Index) + Int(Current_ModStat(Index, Stats.Strength) / 2) + Class(Current_Class(Index)).Stat(Stats.Strength)) * 2
        Case MP
            Current_MaxVital = (Current_Level(Index) + Int(Current_ModStat(Index, Stats.Magic) / 2) + Class(Current_Class(Index)).Stat(Stats.Magic)) * 2
        Case SP
            Current_MaxVital = (Current_Level(Index) + Int(Current_ModStat(Index, Stats.Speed) / 2) + Class(Current_Class(Index)).Stat(Stats.Speed)) * 2
    End Select
   
    Current_MaxVital = Current_MaxVital + Current_ModVital(Index, Vital)
End Function


Just using the new modStat and modVital to calculate the max vitals.
Code:
'***************************************
' Calculate base damage
'***************************************
Public Function Current_Damage(ByVal Index As Long) As Long

    Current_Damage = 0
   
    ' Check for subscript out of range
    If IsPlaying(Index) = False Or Index <= 0 Or Index > MAX_PLAYERS Then
        Exit Function
    End If
   
    Current_Damage = Int(Current_ModStat(Index, Stats.Strength) / 2)
   
    If Current_Damage <= 0 Then
        Current_Damage = 1
    End If
   
    If Current_EquipmentSlot(Index, Weapon) > 0 Then
        Current_Damage = Current_Damage + Item(Current_InvItemNum(Index, Current_EquipmentSlot(Index, Weapon))).Data2
    End If
End Function


You'll have to change "Current_" to "GetPlayer".


I was just messing around on how to do stats on equipment.


Top
 Profile  
 
 Post subject: Re: Random Coding
PostPosted: Sun Oct 05, 2008 1:10 am 
Offline
Pro
User avatar

Joined: Tue Nov 13, 2007 2:42 pm
Posts: 509
Just messing around again.

Code:
Type PositionRec
    Map As Long
    X As Byte
    Y As Byte
End Type


Code:
Type PlayerRec
    ' General
    Name As String * NAME_LENGTH
    Sex As Byte
    Class As Byte
    Sprite As Integer
    Level As Byte
    Exp As Long
    Access As Byte
    PK As Byte
   
    ' Vitals
    Vital(1 To Vitals.Vital_Count - 1) As Long
   
    ' Stats
    Stat(1 To Stats.Stat_Count - 1) As Byte
    POINTS As Byte
   
    ' Worn equipment
    Equipment(1 To Equipment.Equipment_Count - 1) As Byte
   
    ' Inventory
    Inv(1 To MAX_INV) As PlayerInvRec
    Spell(1 To MAX_PLAYER_SPELLS) As Byte
   
    ' Position
    Position As PositionRec
    Bound As PositionRec
   
    ' Current Direction
    Dir As Byte
End Type


Code:
Public Function Current_Position(ByVal Index As Long) As PositionRec
    Current_Position = Player(Index).Char(Current_CharNum(Index)).Position
End Function
Sub Update_Position(ByVal Index As Long, ByRef NewPosition As PositionRec)
    Player(Index).Char(Current_CharNum(Index)).Position = NewPosition
End Sub


Code:
Public Function Current_Bound(ByVal Index As Long) As PositionRec
    Current_Bound = Player(Index).Char(Current_CharNum(Index)).Bound
End Function
Sub Update_Bound(ByVal Index As Long, ByRef NewBound As PositionRec)
    Player(Index).Char(Current_CharNum(Index)).Bound = NewBound
End Sub


Code:
Sub PlayerWarpPosition(ByVal Index As Long, ByRef NewPosition As PositionRec)
Dim ShopNum As Long, OldMap As Long

    ' Check for subscript out of range
    If IsPlaying(Index) = False Or NewPosition.Map <= 0 Or NewPosition.Map > MAX_MAPS Then
        Exit Sub
    End If
   
    ' Check if there was an npc on the map the player is leaving, and if so say goodbye
    ShopNum = Map(Current_Map(Index)).Shop
    If ShopNum > 0 Then
        If LenB(Trim$(Shop(ShopNum).LeaveSay)) > 0 Then
            Call PlayerMsg(Index, Trim$(Shop(ShopNum).Name) & " says, '" & Trim$(Shop(ShopNum).LeaveSay) & "'", SayColor)
        End If
    End If
   
    ' Save old map to send erase player data to
    OldMap = Current_Map(Index)
    Call SendLeaveMap(Index, OldMap)
   
    Update_Position Index, NewPosition
   
    ' Check if there is an npc on the map and say hello if so
    ShopNum = Map(Current_Map(Index)).Shop
    If ShopNum > 0 Then
        If LenB(Trim$(Shop(ShopNum).JoinSay)) > 0 Then
            Call PlayerMsg(Index, Trim$(Shop(ShopNum).Name) & " says, '" & Trim$(Shop(ShopNum).JoinSay) & "'", SayColor)
        End If
    End If
           
    ' Now we check if there were any players left on the map the player just left, and if not stop processing npcs
    If GetTotalMapPlayers(OldMap) = 0 Then
        PlayersOnMap(OldMap) = NO
    End If
   
    ' Sets it so we know to process npcs on the map
    PlayersOnMap(NewPosition.Map) = YES
   
    TempPlayer(Index).GettingMap = YES
    Call SendDataTo(Index, SCheckForMap & SEP_CHAR & NewPosition.Map & SEP_CHAR & Map(NewPosition.Map).Revision & END_CHAR)
End Sub


Code:
Sub PlayerWarp(ByVal Index As Long, ByVal MapNum As Long, ByVal X As Long, ByVal Y As Long)
Dim ShopNum As Long, OldMap As Long

    ' Check for subscript out of range
    If IsPlaying(Index) = False Or MapNum <= 0 Or MapNum > MAX_MAPS Then
        Exit Sub
    End If

    ' Check if there was an npc on the map the player is leaving, and if so say goodbye
    ShopNum = Map(Current_Map(Index)).Shop
    If ShopNum > 0 Then
        If LenB(Trim$(Shop(ShopNum).LeaveSay)) > 0 Then
            Call PlayerMsg(Index, Trim$(Shop(ShopNum).Name) & " says, '" & Trim$(Shop(ShopNum).LeaveSay) & "'", SayColor)
        End If
    End If

    ' Save old map to send erase player data to
    OldMap = Current_Map(Index)
    Call SendLeaveMap(Index, OldMap)

    Update_Map Index, MapNum
    Update_X Index, X
    Update_Y Index, Y

    ' Check if there is an npc on the map and say hello if so
    ShopNum = Map(Current_Map(Index)).Shop
    If ShopNum > 0 Then
        If LenB(Trim$(Shop(ShopNum).JoinSay)) > 0 Then
            Call PlayerMsg(Index, Trim$(Shop(ShopNum).Name) & " says, '" & Trim$(Shop(ShopNum).JoinSay) & "'", SayColor)
        End If
    End If

    ' Now we check if there were any players left on the map the player just left, and if not stop processing npcs
    If GetTotalMapPlayers(OldMap) = 0 Then
        PlayersOnMap(OldMap) = NO
    End If

    ' Sets it so we know to process npcs on the map
    PlayersOnMap(MapNum) = YES

    TempPlayer(Index).GettingMap = YES
    Call SendDataTo(Index, SCheckForMap & SEP_CHAR & MapNum & SEP_CHAR & Map(MapNum).Revision & END_CHAR)
End Sub


Usage:
Current_Position(Index).Map
Current_Position(Index).X
Current_Position(Index).Y


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 2 posts ] 

All times are UTC


Who is online

Users browsing this forum: No registered users and 10 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group