Skip to content

Commit

Permalink
AnalyseStructure.bas: Added more code to handle player inventories
Browse files Browse the repository at this point in the history
Constants.bas: Updated version number
Constants.bas: fixed comments
Constants.bas: Added constant to reference the new items tab
DataTypes.bas: Added data type to hold master item data
ESS.bas: Reordered structures and added an item list to the player section
GlobalVariables.bas: Added an array to hold the master item list
ItemList.xlsx: Corrected some mistakes in the item data template
Items.data: Updated the distributed item list from the template file
OSE.iss: Added an icon to the installer
frmMain.frm: Added the beginnings of the player inventory GUI
frmMain.frm: Continued work on handling the player inventory

Signed-off-by: Dasaan <mrloquax@googlemail.com>
  • Loading branch information
grahame-student committed May 12, 2013
1 parent dbde84c commit 3e6ec48
Show file tree
Hide file tree
Showing 10 changed files with 2,755 additions and 124 deletions.
136 changes: 136 additions & 0 deletions AnalyseStructure.bas
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,12 @@ Private Sub ProcessPlayerChangeRecord(ByRef MainForm As Form)

ScanForPlayerChangeMarkers

If SaveFileData.OSE.PlayerChange.Inventory <> -1 Then
FixItemReferences
PopulateItemListBox MainForm
InitPlayerItems
End If

End Sub

Public Sub ScanForPlayerChangeMarkers()
Expand Down Expand Up @@ -325,11 +331,15 @@ Public Sub ScanForPlayerChangeMarkers()
SaveFileData.OSE.PlayerChange.Inventory = Offset
SaveFileData.OSE.PlayerChange.InventoryCount = ((SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(Offset) + _
SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(Offset + 1) * BYTE_2))
' TODO: Needs to account for default items as only changes are recorded!
SaveFileData.OSE.Player.ItemCount = SaveFileData.OSE.PlayerChange.InventoryCount
Offset = Offset + InventorySize
Else
SaveFileData.OSE.PlayerChange.Inventory = -1
End If

' DebugPlayerData

End Sub

Private Function CreatedOrMoved() As Boolean
Expand All @@ -346,8 +356,11 @@ Private Function InventorySize() As Long

' TODO calculate the size of the inventory changes

' Calculate the base inventory size
InventorySize = SaveFileData.OSE.PlayerChange.InventoryCount * 12

' Add the changes to the base

End Function

Private Sub FixFactionReferences()
Expand All @@ -374,6 +387,18 @@ Private Sub FixSpellReferences()

End Sub

Private Sub FixItemReferences()

Dim ItemNumber As Integer

For ItemNumber = 0 To UBound(ItemData())
If ItemData(ItemNumber).PlugIn <> "None" Then
ItemData(ItemNumber).FormID = (ItemData(ItemNumber).FormID Or GetModIndex(ItemData(ItemNumber).PlugIn).Result)
End If
Next ItemNumber

End Sub

Public Sub PopulateFactionListBox(ByRef MainForm As Form)

Dim i As Integer
Expand All @@ -396,6 +421,17 @@ Public Sub PopulateSpellListBox(ByRef MainForm As Form)

End Sub

Public Sub PopulateItemListBox(ByRef MainForm As Form)

Dim i As Integer

For i = 0 To UBound(ItemData())
MainForm.lstAllItems.AddItem ItemData(i).Name, i
MainForm.lstAllItems.ItemData(i) = ItemData(i).FormID
Next i

End Sub

Private Sub InitPlayerFactions()

Dim i As Long
Expand Down Expand Up @@ -511,6 +547,90 @@ Private Function GetCustomSpell(ByVal FormID As Long) As String

End Function

Private Sub InitPlayerItems()

Dim i As Long
Dim Offset As Long
Dim RawFourBytes As ByteArray
Dim FourBytes As LongType

Offset = SaveFileData.OSE.PlayerChange.Inventory + 2

ReDim SaveFileData.OSE.Player.ItemList(SaveFileData.OSE.PlayerChange.InventoryCount - 1)

For i = 0 To SaveFileData.OSE.PlayerChange.InventoryCount - 1
RawFourBytes.Bytes(0) = SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(Offset)
RawFourBytes.Bytes(1) = SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(Offset + 1)
RawFourBytes.Bytes(2) = SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(Offset + 2)
RawFourBytes.Bytes(3) = SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(Offset + 3)

LSet FourBytes = RawFourBytes

SaveFileData.OSE.Player.ItemList(i).iRef = FourBytes.Result
SaveFileData.OSE.Player.ItemList(i).FormID = GetFormID(FourBytes.Result)
SaveFileData.OSE.Player.ItemList(i).Name = GetItem(SaveFileData.OSE.Player.ItemList(i).FormID)
Offset = Offset + 4

RawFourBytes.Bytes(0) = SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(Offset)
RawFourBytes.Bytes(1) = SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(Offset + 1)
RawFourBytes.Bytes(2) = SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(Offset + 2)
RawFourBytes.Bytes(3) = SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(Offset + 3)

LSet FourBytes = RawFourBytes

SaveFileData.OSE.Player.ItemList(i).StackedItemsCount = FourBytes.Result
Offset = Offset + 4

RawFourBytes.Bytes(0) = SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(Offset)
RawFourBytes.Bytes(1) = SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(Offset + 1)
RawFourBytes.Bytes(2) = SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(Offset + 2)
RawFourBytes.Bytes(3) = SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(Offset + 3)

LSet FourBytes = RawFourBytes
SaveFileData.OSE.Player.ItemList(i).ChangedEntriesCount = FourBytes.Result
Offset = Offset + 4

If SaveFileData.OSE.Player.ItemList(i).ChangedEntriesCount > 0 Then
' Process changes

End If
Next i

End Sub

Public Function GetItem(ByVal FormID As Long) As String

Dim i As Integer

If FormID < 0 Then
' GetItem = GetCustomItem(FormID)
Exit Function
End If

For i = 0 To UBound(ItemData())
If FormID = ItemData(i).FormID Then
GetItem = ItemData(i).Name
Exit Function
End If
Next i

MsgBox "FormID not recognised (" & FormID & ")" & vbNewLine & _
"Please report this FormID to mrloquax@googlemail.com" & vbNewLine & _
"so that it can be added in future versions", vbOKOnly, "Unknown FormID"

End Function

Private Function ItemRecordSize(Offset As Integer) As Integer

' Do some clever stuff to determine the size of the record starting at Offset

Dim tmpSize As Integer

tmpSize = 12 ' Base record size


End Function

Private Sub InitPlayerBaseMods()

ReDim SaveFileData.OSE.Player.BaseModList(SaveFileData.OSE.Player.BaseModCount - 1)
Expand All @@ -536,3 +656,19 @@ Private Sub ExtractCustomSpellData(ByVal CreatedItemRecordIndex As Long, ByVal C

End Sub

Private Sub DebugPlayerData()

Dim FF As Integer
Dim i As Integer

FF = FreeFile

Open App.Path & "\Debug\PlayerData.csv" For Output As #FF
For i = 0 To UBound(SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data)
If i Mod 16 = 0 Then Print #FF, ""
Print #FF, SaveFileData.ChangeRecords(SaveFileData.OSE.PlayerChange.PlayerChangeRecord).Data(i) & ",";
Next i
Close #FF

End Sub

7 changes: 4 additions & 3 deletions Constants.bas
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Public Const PROGRAM_NAME As String = "OSE"

Public Const VERSION_MAJOR As Integer = 0
Public Const VERSION_MINOR As Integer = 1
Public Const VERSION_REVISION As Integer = 7
Public Const VERSION_REVISION As Integer = 8
Public Const VERSION_EXTRA As String = ""

Public Const PROGRAM_TITLE As String = PROGRAM_NAME & " - " & _
Expand Down Expand Up @@ -99,8 +99,8 @@ Public Const MAGICKA_MAX As Integer = 10000 ' Largest base health value (nee
Public Const FATIGUE_MIN As Integer = 0 ' Smallest base health value
Public Const FATIGUE_MAX As Integer = 10000 ' Largest base health value (needs testing)

Public Const YEAR_MIN As Integer = 0 ' Smallest month value
Public Const YEAR_MAX As Integer = 30827 ' Largest month value
Public Const YEAR_MIN As Integer = 0 ' Smallest year value
Public Const YEAR_MAX As Integer = 30827 ' Largest year value

Public Const MONTH_MIN As Integer = 1 ' Smallest month value
Public Const MONTH_MAX As Integer = 12 ' Largest month value
Expand Down Expand Up @@ -133,6 +133,7 @@ Public Const TAB_SUB_CAT_PLAYER_ATTRIBUTES As String = "Attributes"
Public Const TAB_SUB_CAT_PLAYER_SKILLS As String = "Skills"
Public Const TAB_SUB_CAT_PLAYER_FACTIONS As String = "Factions"
Public Const TAB_SUB_CAT_PLAYER_SPELLS As String = "Spells"
Public Const TAB_SUB_CAT_PLAYER_ITEMS As String = "Items"

' Panel Positions
Public Const TAB_CAT_TOP As Integer = 480
Expand Down
6 changes: 6 additions & 0 deletions DataTypes.bas
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,9 @@ Public Type SpellEntry
Name As String
PlugIn As String
End Type

Public Type ItemEntry
FormID As Long
Name As String
PlugIn As String
End Type
Loading

0 comments on commit 3e6ec48

Please sign in to comment.