mirror of
https://github.com/Gamer2020/PokemonGameEditor.git
synced 2026-09-08 18:45:17 -05:00
Cry playing and exporting.
Added code for cry playing and exporting. Next will be importing.
This commit is contained in:
Binary file not shown.
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
|
||||
</startup>
|
||||
</configuration>
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
|
||||
Imports System
|
||||
Imports System.IO
|
||||
Imports System.Text
|
||||
Imports System.Media
|
||||
|
||||
'These functions are based off the ones found in this project: https://github.com/doom-desire/Cry-Editor
|
||||
'Credit goes to doom-desire for these functions.
|
||||
|
||||
@@ -60,57 +64,180 @@ Module CryFunctions
|
||||
CryToLoad.LoopStart = Int32.Parse(ReverseHEX((ReadHEX(LoadedROM, (cryOffset) + 8, 4))), System.Globalization.NumberStyles.HexNumber)
|
||||
CryToLoad.Size = Int32.Parse(ReverseHEX((ReadHEX(LoadedROM, (cryOffset) + 12, 4))), System.Globalization.NumberStyles.HexNumber) + 1
|
||||
|
||||
'If Not CryToLoad.Compressed Then
|
||||
' ' uncompressed, 1 sample per 1 byte of size
|
||||
' CryToLoad.Data = New SByte(CryToLoad.Size - 1) {}
|
||||
' For i As Integer = 0 To CryToLoad.Size - 1
|
||||
' CryToLoad.Data(i) = ledrom.ReadSByte()
|
||||
' Next
|
||||
'Else
|
||||
' ' compressed, a bit of a hassle
|
||||
' Dim lookup = New SByte() {0, 1, 4, 9, 16, 25, _
|
||||
' 36, 49, -64, -49, -36, -25, _
|
||||
' -16, -9, -4, -1}
|
||||
' Dim start = ledrom.Position
|
||||
If Not CryToLoad.Compressed Then
|
||||
' uncompressed, 1 sample per 1 byte of size
|
||||
CryToLoad.Data = New SByte(CryToLoad.Size - 1) {}
|
||||
For g As Integer = 0 To CryToLoad.Size - 1
|
||||
|
||||
' Dim alignment As Integer = 0, size As Integer = 0
|
||||
' Dim pcmLevel As SByte = 0
|
||||
CryToLoad.Data(g) = ByteToSignedInt("&H" & (ReadHEX(LoadedROM, (cryOffset) + 16 + g, 1)))
|
||||
Next
|
||||
Else
|
||||
' compressed, a bit of a hassle
|
||||
Dim lookup = New SByte() {0, 1, 4, 9, 16, 25, _
|
||||
36, 49, -64, -49, -36, -25, _
|
||||
-16, -9, -4, -1}
|
||||
|
||||
' Dim data = New List(Of SByte)()
|
||||
' While True
|
||||
' If alignment = 0 Then
|
||||
' pcmLevel = ledrom.ReadSByte()
|
||||
' data.Add(pcmLevel)
|
||||
Dim start = (cryOffset) + 16
|
||||
Dim offtrack = (cryOffset) + 16
|
||||
|
||||
' alignment = &H20
|
||||
' End If
|
||||
Dim alignment As Integer = 0, size As Integer = 0
|
||||
Dim pcmLevel As SByte = 0
|
||||
|
||||
' Dim input = ledrom.ReadByte()
|
||||
' If alignment < &H20 Then
|
||||
' ' first nybble
|
||||
' pcmLevel += lookup(input >> 4)
|
||||
' data.Add(pcmLevel)
|
||||
' End If
|
||||
Dim data = New List(Of SByte)()
|
||||
|
||||
' ' second nybble
|
||||
' pcmLevel += lookup(input And &HF)
|
||||
' data.Add(pcmLevel)
|
||||
While True
|
||||
|
||||
' ' exit when currentSize >= cry.Size
|
||||
' size += 2
|
||||
' If size >= CryToLoad.Size Then
|
||||
' Exit While
|
||||
' End If
|
||||
If alignment = 0 Then
|
||||
|
||||
' alignment -= 1
|
||||
' End While
|
||||
pcmLevel = ByteToSignedInt("&H" & (ReadHEX(LoadedROM, offtrack, 1)))
|
||||
offtrack = offtrack + 1
|
||||
data.Add(pcmLevel)
|
||||
|
||||
' CryToLoad.Data = data.ToArray()
|
||||
' ' bytes needed to recompress
|
||||
' CryToLoad.Size = ledrom.Position - start
|
||||
'End If
|
||||
alignment = &H20
|
||||
End If
|
||||
|
||||
Dim input As Byte = ("&H" & (ReadHEX(LoadedROM, offtrack, 1)))
|
||||
offtrack = offtrack + 1
|
||||
|
||||
If alignment < &H20 Then
|
||||
' first nybble
|
||||
pcmLevel += lookup(input >> 4)
|
||||
data.Add(pcmLevel)
|
||||
End If
|
||||
|
||||
' second nybble
|
||||
pcmLevel += lookup(input And &HF)
|
||||
data.Add(pcmLevel)
|
||||
|
||||
' exit when currentSize >= cry.Size
|
||||
size += 2
|
||||
If size >= CryToLoad.Size Then
|
||||
Exit While
|
||||
End If
|
||||
|
||||
alignment -= 1
|
||||
End While
|
||||
|
||||
CryToLoad.Data = data.ToArray()
|
||||
' bytes needed to recompress
|
||||
CryToLoad.Size = offtrack - start
|
||||
End If
|
||||
|
||||
Return CryToLoad
|
||||
End Function
|
||||
|
||||
Public Function GetCryImage(cry As Cry) As Bitmap
|
||||
|
||||
Dim cryImage As Bitmap
|
||||
|
||||
|
||||
cryImage = New Bitmap(cry.Data.Length, 128)
|
||||
|
||||
Using g = Graphics.FromImage(cryImage)
|
||||
For i As Integer = 1 To cry.Data.Length - 1
|
||||
g.DrawLine(Pens.Green, i - 1, 64 + cry.Data(i - 1), i, 64 + cry.Data(i))
|
||||
Next
|
||||
End Using
|
||||
|
||||
Return cryImage
|
||||
|
||||
End Function
|
||||
|
||||
|
||||
Public Sub PlayCry(cry As Cry)
|
||||
' TODO: we could do this in another thread :O
|
||||
If cry.Offset = 0 Then
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Using stream = New MemoryStream()
|
||||
' "save" the cry to a memorystream
|
||||
Using writer As BinaryWriter = New BinaryWriter(stream, Encoding.ASCII, True)
|
||||
' RIFF header
|
||||
writer.Write(Encoding.ASCII.GetBytes("RIFF"))
|
||||
writer.Write(0)
|
||||
writer.Write(Encoding.ASCII.GetBytes("WAVE"))
|
||||
|
||||
' fmt chunk
|
||||
writer.Write(Encoding.ASCII.GetBytes("fmt "))
|
||||
writer.Write(16)
|
||||
writer.Write(CUShort(1))
|
||||
writer.Write(CUShort(1))
|
||||
writer.Write(cry.SampleRate)
|
||||
writer.Write(cry.SampleRate)
|
||||
writer.Write(CUShort(1))
|
||||
writer.Write(CUShort(8))
|
||||
|
||||
' data chunk
|
||||
writer.Write(Encoding.ASCII.GetBytes("data"))
|
||||
writer.Write(cry.Data.Length)
|
||||
For Each sample As SByte In cry.Data
|
||||
writer.Write(CByte(sample + &H80))
|
||||
Next
|
||||
|
||||
' fix header
|
||||
writer.Seek(4, SeekOrigin.Begin)
|
||||
writer.Write(CInt(writer.BaseStream.Length) - 8)
|
||||
|
||||
End Using
|
||||
|
||||
' play it via a soundplayer
|
||||
stream.Seek(0L, SeekOrigin.Begin)
|
||||
Using player = New SoundPlayer(stream)
|
||||
player.Load()
|
||||
player.Play()
|
||||
End Using
|
||||
End Using
|
||||
End Sub
|
||||
|
||||
|
||||
Public Sub ExportCry(filename As String, cry As Cry)
|
||||
If Cry.Offset = 0 Then
|
||||
Return
|
||||
End If
|
||||
|
||||
' http://www-mmsp.ece.mcgill.ca/documents/audioformats/wave/wave.html
|
||||
' http://soundfile.sapp.org/doc/WaveFormat/
|
||||
Using writer = New BinaryWriter(File.Create(filename))
|
||||
' RIFF header
|
||||
writer.Write(Encoding.ASCII.GetBytes("RIFF"))
|
||||
' file ID
|
||||
writer.Write(0)
|
||||
' file size placeholder
|
||||
writer.Write(Encoding.ASCII.GetBytes("WAVE"))
|
||||
' format
|
||||
' fmt chunk
|
||||
writer.Write(Encoding.ASCII.GetBytes("fmt "))
|
||||
' chunk ID
|
||||
writer.Write(16)
|
||||
' chunk size, 16 for PCM
|
||||
writer.Write(CUShort(1))
|
||||
' format: 1 = wave_format_pcm
|
||||
writer.Write(CUShort(1))
|
||||
' channel count
|
||||
writer.Write(Cry.SampleRate)
|
||||
' sample rate
|
||||
' * 1 * 8 / 8
|
||||
writer.Write(Cry.SampleRate)
|
||||
' SampleRate * NumChannels * BitsPerSample/8
|
||||
' * 8 / 8
|
||||
writer.Write(CUShort(1))
|
||||
' NumChannels * BitsPerSample/8
|
||||
writer.Write(CUShort(8))
|
||||
' bits per sample
|
||||
' data chunk
|
||||
writer.Write(Encoding.ASCII.GetBytes("data"))
|
||||
' chunk ID
|
||||
writer.Write(Cry.Data.Length)
|
||||
' chunk size
|
||||
For Each sample As SByte In cry.Data
|
||||
writer.Write(CByte(sample + &H80))
|
||||
Next
|
||||
' wave PCM is unsigned unlike GBA PCM which is
|
||||
' fix header
|
||||
writer.Seek(4, SeekOrigin.Begin)
|
||||
writer.Write(CInt(writer.BaseStream.Length) - 8)
|
||||
End Using
|
||||
End Sub
|
||||
|
||||
End Module
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<AssemblyName>PokemonGameEditor</AssemblyName>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<MyType>WindowsForms</MyType>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<TargetFrameworkProfile>
|
||||
</TargetFrameworkProfile>
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
@@ -46,6 +46,7 @@
|
||||
<DocumentationFile>PokemonGameEditor.xml</DocumentationFile>
|
||||
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||
<UseVSHostingProcess>true</UseVSHostingProcess>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
@@ -56,6 +57,7 @@
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DocumentationFile>PokemonGameEditor.xml</DocumentationFile>
|
||||
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<OptionExplicit>On</OptionExplicit>
|
||||
@@ -255,7 +257,6 @@
|
||||
<Compile Include="Pokemonedit.vb">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="ROM.vb" />
|
||||
<Compile Include="RomExpander.Designer.vb">
|
||||
<DependentUpon>RomExpander.vb</DependentUpon>
|
||||
</Compile>
|
||||
|
||||
@@ -42,14 +42,17 @@ EndNow:
|
||||
ReverseHEX = HEXHolder
|
||||
End Function
|
||||
|
||||
Public Function ReadHEX(ByRef FilePath As String, ByRef Start As Integer, ByRef Length As Integer) As String
|
||||
Public Function ReadHEX(ByRef FilePath As String, ByRef Start2 As Integer, ByRef Length As Integer) As String
|
||||
On Error GoTo ErrHandle
|
||||
Dim iFile As Integer
|
||||
Dim bytHex As Byte
|
||||
Dim sHex As String
|
||||
Dim i As Integer
|
||||
Start = Start + 1
|
||||
iFile = FreeFile
|
||||
Dim Start As Integer
|
||||
|
||||
Start = Start2 + 1
|
||||
|
||||
iFile = FreeFile()
|
||||
sHex = ""
|
||||
i = 0
|
||||
FileOpen(iFile, FilePath, OpenMode.Binary)
|
||||
@@ -62,7 +65,7 @@ EndNow:
|
||||
ReadHEX = sHex
|
||||
Exit Function
|
||||
ErrHandle:
|
||||
MsgBox(Err.Description, MsgBoxStyle.OKOnly, "Error: " & Err.Number)
|
||||
MsgBox(Err.Description, MsgBoxStyle.OkOnly, "Error: " & Err.Number)
|
||||
End Function
|
||||
|
||||
Public Function WriteHEX(ByRef FilePath As String, ByRef Start As Integer, ByRef Data As String) As Object
|
||||
|
||||
@@ -15,7 +15,7 @@ Option Explicit On
|
||||
Namespace My
|
||||
|
||||
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
||||
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0"), _
|
||||
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0"), _
|
||||
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||
Partial Friend NotInheritable Class MySettings
|
||||
Inherits Global.System.Configuration.ApplicationSettingsBase
|
||||
|
||||
202
GBAPokemonGameEditor/Pokemonedit.Designer.vb
generated
202
GBAPokemonGameEditor/Pokemonedit.Designer.vb
generated
@@ -218,6 +218,10 @@ Partial Class Pokemonedit
|
||||
Me.Clr1 = New System.Windows.Forms.ComboBox()
|
||||
Me.TabPage5 = New System.Windows.Forms.TabPage()
|
||||
Me.GroupBox35 = New System.Windows.Forms.GroupBox()
|
||||
Me.Panel2 = New System.Windows.Forms.Panel()
|
||||
Me.pSample2 = New System.Windows.Forms.PictureBox()
|
||||
Me.chkCompressed2 = New System.Windows.Forms.CheckBox()
|
||||
Me.Label56 = New System.Windows.Forms.Label()
|
||||
Me.Label54 = New System.Windows.Forms.Label()
|
||||
Me.Button31 = New System.Windows.Forms.Button()
|
||||
Me.Label52 = New System.Windows.Forms.Label()
|
||||
@@ -225,6 +229,11 @@ Partial Class Pokemonedit
|
||||
Me.CryComp2 = New System.Windows.Forms.TextBox()
|
||||
Me.CryPointer2 = New System.Windows.Forms.TextBox()
|
||||
Me.GroupBox34 = New System.Windows.Forms.GroupBox()
|
||||
Me.Button32 = New System.Windows.Forms.Button()
|
||||
Me.chkCompressed1 = New System.Windows.Forms.CheckBox()
|
||||
Me.panel1 = New System.Windows.Forms.Panel()
|
||||
Me.pSample = New System.Windows.Forms.PictureBox()
|
||||
Me.Label55 = New System.Windows.Forms.Label()
|
||||
Me.Label53 = New System.Windows.Forms.Label()
|
||||
Me.Label17 = New System.Windows.Forms.Label()
|
||||
Me.CryPointer = New System.Windows.Forms.TextBox()
|
||||
@@ -258,8 +267,11 @@ Partial Class Pokemonedit
|
||||
Me.Button28 = New System.Windows.Forms.Button()
|
||||
Me.Button29 = New System.Windows.Forms.Button()
|
||||
Me.Button30 = New System.Windows.Forms.Button()
|
||||
Me.Label55 = New System.Windows.Forms.Label()
|
||||
Me.Label56 = New System.Windows.Forms.Label()
|
||||
Me.Button33 = New System.Windows.Forms.Button()
|
||||
Me.Button34 = New System.Windows.Forms.Button()
|
||||
Me.Button35 = New System.Windows.Forms.Button()
|
||||
Me.Button36 = New System.Windows.Forms.Button()
|
||||
Me.Button37 = New System.Windows.Forms.Button()
|
||||
Me.TabControl1.SuspendLayout()
|
||||
Me.TabPage1.SuspendLayout()
|
||||
Me.GroupBox26.SuspendLayout()
|
||||
@@ -318,7 +330,11 @@ Partial Class Pokemonedit
|
||||
Me.GroupBox2.SuspendLayout()
|
||||
Me.TabPage5.SuspendLayout()
|
||||
Me.GroupBox35.SuspendLayout()
|
||||
Me.Panel2.SuspendLayout()
|
||||
CType(Me.pSample2, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
Me.GroupBox34.SuspendLayout()
|
||||
Me.panel1.SuspendLayout()
|
||||
CType(Me.pSample, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
Me.GroupBox21.SuspendLayout()
|
||||
Me.GroupBox18.SuspendLayout()
|
||||
Me.GroupBox19.SuspendLayout()
|
||||
@@ -2447,6 +2463,11 @@ Partial Class Pokemonedit
|
||||
'
|
||||
'GroupBox35
|
||||
'
|
||||
Me.GroupBox35.Controls.Add(Me.Button35)
|
||||
Me.GroupBox35.Controls.Add(Me.Button36)
|
||||
Me.GroupBox35.Controls.Add(Me.Button37)
|
||||
Me.GroupBox35.Controls.Add(Me.Panel2)
|
||||
Me.GroupBox35.Controls.Add(Me.chkCompressed2)
|
||||
Me.GroupBox35.Controls.Add(Me.Label56)
|
||||
Me.GroupBox35.Controls.Add(Me.Label54)
|
||||
Me.GroupBox35.Controls.Add(Me.Button31)
|
||||
@@ -2456,15 +2477,52 @@ Partial Class Pokemonedit
|
||||
Me.GroupBox35.Controls.Add(Me.CryPointer2)
|
||||
Me.GroupBox35.Location = New System.Drawing.Point(17, 290)
|
||||
Me.GroupBox35.Name = "GroupBox35"
|
||||
Me.GroupBox35.Size = New System.Drawing.Size(400, 250)
|
||||
Me.GroupBox35.Size = New System.Drawing.Size(666, 250)
|
||||
Me.GroupBox35.TabIndex = 8
|
||||
Me.GroupBox35.TabStop = False
|
||||
Me.GroupBox35.Text = "Growl Cry"
|
||||
'
|
||||
'Panel2
|
||||
'
|
||||
Me.Panel2.AutoScroll = True
|
||||
Me.Panel2.Controls.Add(Me.pSample2)
|
||||
Me.Panel2.Location = New System.Drawing.Point(218, 18)
|
||||
Me.Panel2.Name = "Panel2"
|
||||
Me.Panel2.Size = New System.Drawing.Size(430, 188)
|
||||
Me.Panel2.TabIndex = 26
|
||||
'
|
||||
'pSample2
|
||||
'
|
||||
Me.pSample2.Location = New System.Drawing.Point(0, 0)
|
||||
Me.pSample2.Name = "pSample2"
|
||||
Me.pSample2.Size = New System.Drawing.Size(16, 16)
|
||||
Me.pSample2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize
|
||||
Me.pSample2.TabIndex = 0
|
||||
Me.pSample2.TabStop = False
|
||||
'
|
||||
'chkCompressed2
|
||||
'
|
||||
Me.chkCompressed2.AutoSize = True
|
||||
Me.chkCompressed2.Location = New System.Drawing.Point(25, 189)
|
||||
Me.chkCompressed2.Name = "chkCompressed2"
|
||||
Me.chkCompressed2.Size = New System.Drawing.Size(109, 21)
|
||||
Me.chkCompressed2.TabIndex = 25
|
||||
Me.chkCompressed2.Text = "Compressed"
|
||||
Me.chkCompressed2.UseVisualStyleBackColor = True
|
||||
'
|
||||
'Label56
|
||||
'
|
||||
Me.Label56.AutoSize = True
|
||||
Me.Label56.Location = New System.Drawing.Point(22, 164)
|
||||
Me.Label56.Name = "Label56"
|
||||
Me.Label56.Size = New System.Drawing.Size(107, 17)
|
||||
Me.Label56.TabIndex = 24
|
||||
Me.Label56.Text = "Size: 0 samples"
|
||||
'
|
||||
'Label54
|
||||
'
|
||||
Me.Label54.AutoSize = True
|
||||
Me.Label54.Location = New System.Drawing.Point(20, 152)
|
||||
Me.Label54.Location = New System.Drawing.Point(21, 134)
|
||||
Me.Label54.Name = "Label54"
|
||||
Me.Label54.Size = New System.Drawing.Size(126, 17)
|
||||
Me.Label54.TabIndex = 23
|
||||
@@ -2472,7 +2530,7 @@ Partial Class Pokemonedit
|
||||
'
|
||||
'Button31
|
||||
'
|
||||
Me.Button31.Location = New System.Drawing.Point(24, 114)
|
||||
Me.Button31.Location = New System.Drawing.Point(24, 94)
|
||||
Me.Button31.Margin = New System.Windows.Forms.Padding(4)
|
||||
Me.Button31.Name = "Button31"
|
||||
Me.Button31.Size = New System.Drawing.Size(187, 26)
|
||||
@@ -2518,6 +2576,11 @@ Partial Class Pokemonedit
|
||||
'
|
||||
'GroupBox34
|
||||
'
|
||||
Me.GroupBox34.Controls.Add(Me.Button34)
|
||||
Me.GroupBox34.Controls.Add(Me.Button33)
|
||||
Me.GroupBox34.Controls.Add(Me.Button32)
|
||||
Me.GroupBox34.Controls.Add(Me.chkCompressed1)
|
||||
Me.GroupBox34.Controls.Add(Me.panel1)
|
||||
Me.GroupBox34.Controls.Add(Me.Label55)
|
||||
Me.GroupBox34.Controls.Add(Me.Label53)
|
||||
Me.GroupBox34.Controls.Add(Me.Label17)
|
||||
@@ -2527,11 +2590,57 @@ Partial Class Pokemonedit
|
||||
Me.GroupBox34.Controls.Add(Me.CryComp1)
|
||||
Me.GroupBox34.Location = New System.Drawing.Point(17, 23)
|
||||
Me.GroupBox34.Name = "GroupBox34"
|
||||
Me.GroupBox34.Size = New System.Drawing.Size(400, 250)
|
||||
Me.GroupBox34.Size = New System.Drawing.Size(666, 250)
|
||||
Me.GroupBox34.TabIndex = 7
|
||||
Me.GroupBox34.TabStop = False
|
||||
Me.GroupBox34.Text = "Normal Cry"
|
||||
'
|
||||
'Button32
|
||||
'
|
||||
Me.Button32.Location = New System.Drawing.Point(218, 211)
|
||||
Me.Button32.Name = "Button32"
|
||||
Me.Button32.Size = New System.Drawing.Size(75, 33)
|
||||
Me.Button32.TabIndex = 25
|
||||
Me.Button32.Text = "Play"
|
||||
Me.Button32.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkCompressed1
|
||||
'
|
||||
Me.chkCompressed1.AutoSize = True
|
||||
Me.chkCompressed1.Location = New System.Drawing.Point(23, 184)
|
||||
Me.chkCompressed1.Name = "chkCompressed1"
|
||||
Me.chkCompressed1.Size = New System.Drawing.Size(109, 21)
|
||||
Me.chkCompressed1.TabIndex = 24
|
||||
Me.chkCompressed1.Text = "Compressed"
|
||||
Me.chkCompressed1.UseVisualStyleBackColor = True
|
||||
'
|
||||
'panel1
|
||||
'
|
||||
Me.panel1.AutoScroll = True
|
||||
Me.panel1.Controls.Add(Me.pSample)
|
||||
Me.panel1.Location = New System.Drawing.Point(218, 17)
|
||||
Me.panel1.Name = "panel1"
|
||||
Me.panel1.Size = New System.Drawing.Size(430, 188)
|
||||
Me.panel1.TabIndex = 23
|
||||
'
|
||||
'pSample
|
||||
'
|
||||
Me.pSample.Location = New System.Drawing.Point(0, 0)
|
||||
Me.pSample.Name = "pSample"
|
||||
Me.pSample.Size = New System.Drawing.Size(16, 16)
|
||||
Me.pSample.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize
|
||||
Me.pSample.TabIndex = 0
|
||||
Me.pSample.TabStop = False
|
||||
'
|
||||
'Label55
|
||||
'
|
||||
Me.Label55.AutoSize = True
|
||||
Me.Label55.Location = New System.Drawing.Point(21, 156)
|
||||
Me.Label55.Name = "Label55"
|
||||
Me.Label55.Size = New System.Drawing.Size(107, 17)
|
||||
Me.Label55.TabIndex = 22
|
||||
Me.Label55.Text = "Size: 0 samples"
|
||||
'
|
||||
'Label53
|
||||
'
|
||||
Me.Label53.AutoSize = True
|
||||
@@ -2592,18 +2701,18 @@ Partial Class Pokemonedit
|
||||
Me.GroupBox21.Controls.Add(Me.Button13)
|
||||
Me.GroupBox21.Controls.Add(Me.CryConver)
|
||||
Me.GroupBox21.Controls.Add(Me.Label18)
|
||||
Me.GroupBox21.Location = New System.Drawing.Point(498, 407)
|
||||
Me.GroupBox21.Location = New System.Drawing.Point(690, 23)
|
||||
Me.GroupBox21.Margin = New System.Windows.Forms.Padding(4)
|
||||
Me.GroupBox21.Name = "GroupBox21"
|
||||
Me.GroupBox21.Padding = New System.Windows.Forms.Padding(4)
|
||||
Me.GroupBox21.Size = New System.Drawing.Size(223, 111)
|
||||
Me.GroupBox21.Size = New System.Drawing.Size(115, 157)
|
||||
Me.GroupBox21.TabIndex = 6
|
||||
Me.GroupBox21.TabStop = False
|
||||
Me.GroupBox21.Text = "Cry"
|
||||
'
|
||||
'Button13
|
||||
'
|
||||
Me.Button13.Location = New System.Drawing.Point(111, 53)
|
||||
Me.Button13.Location = New System.Drawing.Point(12, 78)
|
||||
Me.Button13.Margin = New System.Windows.Forms.Padding(4)
|
||||
Me.Button13.Name = "Button13"
|
||||
Me.Button13.Size = New System.Drawing.Size(91, 26)
|
||||
@@ -2613,7 +2722,7 @@ Partial Class Pokemonedit
|
||||
'
|
||||
'CryConver
|
||||
'
|
||||
Me.CryConver.Location = New System.Drawing.Point(111, 22)
|
||||
Me.CryConver.Location = New System.Drawing.Point(12, 47)
|
||||
Me.CryConver.Margin = New System.Windows.Forms.Padding(4)
|
||||
Me.CryConver.Name = "CryConver"
|
||||
Me.CryConver.Size = New System.Drawing.Size(89, 22)
|
||||
@@ -2839,23 +2948,50 @@ Partial Class Pokemonedit
|
||||
Me.Button30.Text = "Import All Footprints"
|
||||
Me.Button30.UseVisualStyleBackColor = True
|
||||
'
|
||||
'Label55
|
||||
'Button33
|
||||
'
|
||||
Me.Label55.AutoSize = True
|
||||
Me.Label55.Location = New System.Drawing.Point(21, 156)
|
||||
Me.Label55.Name = "Label55"
|
||||
Me.Label55.Size = New System.Drawing.Size(107, 17)
|
||||
Me.Label55.TabIndex = 22
|
||||
Me.Label55.Text = "Size: 0 samples"
|
||||
Me.Button33.Location = New System.Drawing.Point(299, 211)
|
||||
Me.Button33.Name = "Button33"
|
||||
Me.Button33.Size = New System.Drawing.Size(75, 33)
|
||||
Me.Button33.TabIndex = 26
|
||||
Me.Button33.Text = "Import"
|
||||
Me.Button33.UseVisualStyleBackColor = True
|
||||
'
|
||||
'Label56
|
||||
'Button34
|
||||
'
|
||||
Me.Label56.AutoSize = True
|
||||
Me.Label56.Location = New System.Drawing.Point(21, 182)
|
||||
Me.Label56.Name = "Label56"
|
||||
Me.Label56.Size = New System.Drawing.Size(107, 17)
|
||||
Me.Label56.TabIndex = 24
|
||||
Me.Label56.Text = "Size: 0 samples"
|
||||
Me.Button34.Location = New System.Drawing.Point(380, 211)
|
||||
Me.Button34.Name = "Button34"
|
||||
Me.Button34.Size = New System.Drawing.Size(75, 33)
|
||||
Me.Button34.TabIndex = 27
|
||||
Me.Button34.Text = "Export"
|
||||
Me.Button34.UseVisualStyleBackColor = True
|
||||
'
|
||||
'Button35
|
||||
'
|
||||
Me.Button35.Location = New System.Drawing.Point(380, 212)
|
||||
Me.Button35.Name = "Button35"
|
||||
Me.Button35.Size = New System.Drawing.Size(75, 33)
|
||||
Me.Button35.TabIndex = 30
|
||||
Me.Button35.Text = "Export"
|
||||
Me.Button35.UseVisualStyleBackColor = True
|
||||
'
|
||||
'Button36
|
||||
'
|
||||
Me.Button36.Location = New System.Drawing.Point(299, 211)
|
||||
Me.Button36.Name = "Button36"
|
||||
Me.Button36.Size = New System.Drawing.Size(75, 33)
|
||||
Me.Button36.TabIndex = 29
|
||||
Me.Button36.Text = "Import"
|
||||
Me.Button36.UseVisualStyleBackColor = True
|
||||
'
|
||||
'Button37
|
||||
'
|
||||
Me.Button37.Location = New System.Drawing.Point(218, 212)
|
||||
Me.Button37.Name = "Button37"
|
||||
Me.Button37.Size = New System.Drawing.Size(75, 33)
|
||||
Me.Button37.TabIndex = 28
|
||||
Me.Button37.Text = "Play"
|
||||
Me.Button37.UseVisualStyleBackColor = True
|
||||
'
|
||||
'Pokemonedit
|
||||
'
|
||||
@@ -2963,8 +3099,14 @@ Partial Class Pokemonedit
|
||||
Me.TabPage5.ResumeLayout(False)
|
||||
Me.GroupBox35.ResumeLayout(False)
|
||||
Me.GroupBox35.PerformLayout()
|
||||
Me.Panel2.ResumeLayout(False)
|
||||
Me.Panel2.PerformLayout()
|
||||
CType(Me.pSample2, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
Me.GroupBox34.ResumeLayout(False)
|
||||
Me.GroupBox34.PerformLayout()
|
||||
Me.panel1.ResumeLayout(False)
|
||||
Me.panel1.PerformLayout()
|
||||
CType(Me.pSample, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
Me.GroupBox21.ResumeLayout(False)
|
||||
Me.GroupBox21.PerformLayout()
|
||||
Me.GroupBox18.ResumeLayout(False)
|
||||
@@ -3211,4 +3353,16 @@ Partial Class Pokemonedit
|
||||
Friend WithEvents Label54 As System.Windows.Forms.Label
|
||||
Friend WithEvents Label56 As System.Windows.Forms.Label
|
||||
Friend WithEvents Label55 As System.Windows.Forms.Label
|
||||
Private WithEvents panel1 As System.Windows.Forms.Panel
|
||||
Private WithEvents pSample As System.Windows.Forms.PictureBox
|
||||
Private WithEvents chkCompressed2 As System.Windows.Forms.CheckBox
|
||||
Private WithEvents chkCompressed1 As System.Windows.Forms.CheckBox
|
||||
Private WithEvents Panel2 As System.Windows.Forms.Panel
|
||||
Private WithEvents pSample2 As System.Windows.Forms.PictureBox
|
||||
Friend WithEvents Button32 As System.Windows.Forms.Button
|
||||
Friend WithEvents Button35 As System.Windows.Forms.Button
|
||||
Friend WithEvents Button36 As System.Windows.Forms.Button
|
||||
Friend WithEvents Button37 As System.Windows.Forms.Button
|
||||
Friend WithEvents Button34 As System.Windows.Forms.Button
|
||||
Friend WithEvents Button33 As System.Windows.Forms.Button
|
||||
End Class
|
||||
|
||||
@@ -676,8 +676,14 @@ Public Class Pokemonedit
|
||||
Label54.Text = "Sample Rate: " & crygrowl.SampleRate & " Hz"
|
||||
|
||||
|
||||
Label55.Text = "Size: " & crynorm.Size & " samples"
|
||||
Label56.Text = "Size: " & crygrowl.Size & " samples"
|
||||
Label55.Text = "Size: " & crynorm.Data.Length & " samples"
|
||||
Label56.Text = "Size: " & crygrowl.Data.Length & " samples"
|
||||
|
||||
chkCompressed1.Checked = crynorm.Compressed
|
||||
chkCompressed2.Checked = crygrowl.Compressed
|
||||
|
||||
pSample.Image = GetCryImage(crynorm)
|
||||
pSample2.Image = GetCryImage(crygrowl)
|
||||
|
||||
'Label53.Text = "Sample Rate: " & ((Int32.Parse(((ReverseHEX(ReadHEX(LoadedROM, ("&H" & CryPointer.Text) + (4), 4)))), System.Globalization.NumberStyles.HexNumber)) >> 10) & " Hz"
|
||||
'Label54.Text = "Sample Rate: " & ((Int32.Parse(((ReverseHEX(ReadHEX(LoadedROM, ("&H" & CryPointer2.Text) + (4), 4)))), System.Globalization.NumberStyles.HexNumber)) >> 10) & " Hz"
|
||||
@@ -707,6 +713,12 @@ Public Class Pokemonedit
|
||||
Label55.Text = "Size: 0 samples"
|
||||
Label56.Text = "Size: 0 samples"
|
||||
|
||||
chkCompressed1.Checked = False
|
||||
chkCompressed2.Checked = False
|
||||
|
||||
pSample.Image.Dispose()
|
||||
pSample2.Image.Dispose()
|
||||
|
||||
End If
|
||||
|
||||
|
||||
@@ -731,8 +743,14 @@ Public Class Pokemonedit
|
||||
Label54.Text = "Sample Rate: " & crygrowl.SampleRate & " Hz"
|
||||
|
||||
|
||||
Label55.Text = "Size: " & crynorm.Size & " samples"
|
||||
Label56.Text = "Size: " & crygrowl.Size & " samples"
|
||||
Label55.Text = "Size: " & crynorm.Data.Length & " samples"
|
||||
Label56.Text = "Size: " & crygrowl.Data.Length & " samples"
|
||||
|
||||
chkCompressed1.Checked = crynorm.Compressed
|
||||
chkCompressed2.Checked = crygrowl.Compressed
|
||||
|
||||
pSample.Image = GetCryImage(crynorm)
|
||||
pSample2.Image = GetCryImage(crygrowl)
|
||||
|
||||
End If
|
||||
|
||||
@@ -1758,8 +1776,14 @@ Public Class Pokemonedit
|
||||
Label54.Text = "Sample Rate: " & crygrowl.SampleRate & " Hz"
|
||||
|
||||
|
||||
Label55.Text = "Size: " & crynorm.Size & " samples"
|
||||
Label56.Text = "Size: " & crygrowl.Size & " samples"
|
||||
Label55.Text = "Size: " & crynorm.Data.Length & " samples"
|
||||
Label56.Text = "Size: " & crygrowl.Data.Length & " samples"
|
||||
|
||||
chkCompressed1.Checked = crynorm.Compressed
|
||||
chkCompressed2.Checked = crygrowl.Compressed
|
||||
|
||||
pSample.Image = GetCryImage(crynorm)
|
||||
pSample2.Image = GetCryImage(crygrowl)
|
||||
|
||||
ElseIf (i + 1) > 251 And (i + 1) < 276 Then
|
||||
|
||||
@@ -1779,8 +1803,14 @@ Public Class Pokemonedit
|
||||
Label54.Text = "Sample Rate: " & crygrowl.SampleRate & " Hz"
|
||||
|
||||
|
||||
Label55.Text = "Size: " & crynorm.Size & " samples"
|
||||
Label56.Text = "Size: " & crygrowl.Size & " samples"
|
||||
Label55.Text = "Size: " & crynorm.Data.Length & " samples"
|
||||
Label56.Text = "Size: " & crygrowl.Data.Length & " samples"
|
||||
|
||||
chkCompressed1.Checked = crynorm.Compressed
|
||||
chkCompressed2.Checked = crygrowl.Compressed
|
||||
|
||||
pSample.Image = GetCryImage(crynorm)
|
||||
pSample2.Image = GetCryImage(crygrowl)
|
||||
|
||||
End If
|
||||
End Sub
|
||||
@@ -2113,8 +2143,14 @@ Public Class Pokemonedit
|
||||
Label54.Text = "Sample Rate: " & crygrowl.SampleRate & " Hz"
|
||||
|
||||
|
||||
Label55.Text = "Size: " & crynorm.Size & " samples"
|
||||
Label56.Text = "Size: " & crygrowl.Size & " samples"
|
||||
Label55.Text = "Size: " & crynorm.Data.Length & " samples"
|
||||
Label56.Text = "Size: " & crygrowl.Data.Length & " samples"
|
||||
|
||||
chkCompressed1.Checked = crynorm.Compressed
|
||||
chkCompressed2.Checked = crygrowl.Compressed
|
||||
|
||||
pSample.Image = GetCryImage(crynorm)
|
||||
pSample2.Image = GetCryImage(crygrowl)
|
||||
|
||||
End If
|
||||
End Sub
|
||||
@@ -3640,8 +3676,14 @@ Public Class Pokemonedit
|
||||
Label54.Text = "Sample Rate: " & crygrowl.SampleRate & " Hz"
|
||||
|
||||
|
||||
Label55.Text = "Size: " & crynorm.Size & " samples"
|
||||
Label56.Text = "Size: " & crygrowl.Size & " samples"
|
||||
Label55.Text = "Size: " & crynorm.Data.Length & " samples"
|
||||
Label56.Text = "Size: " & crygrowl.Data.Length & " samples"
|
||||
|
||||
chkCompressed1.Checked = crynorm.Compressed
|
||||
chkCompressed2.Checked = crygrowl.Compressed
|
||||
|
||||
pSample.Image = GetCryImage(crynorm)
|
||||
pSample2.Image = GetCryImage(crygrowl)
|
||||
|
||||
ElseIf (i + 1) > 251 And (i + 1) < 276 Then
|
||||
|
||||
@@ -3661,10 +3703,129 @@ Public Class Pokemonedit
|
||||
Label54.Text = "Sample Rate: " & crygrowl.SampleRate & " Hz"
|
||||
|
||||
|
||||
Label55.Text = "Size: " & crynorm.Size & " samples"
|
||||
Label56.Text = "Size: " & crygrowl.Size & " samples"
|
||||
Label55.Text = "Size: " & crynorm.Data.Length & " samples"
|
||||
Label56.Text = "Size: " & crygrowl.Data.Length & " samples"
|
||||
|
||||
chkCompressed1.Checked = crynorm.Compressed
|
||||
chkCompressed2.Checked = crygrowl.Compressed
|
||||
|
||||
pSample.Image = GetCryImage(crynorm)
|
||||
pSample2.Image = GetCryImage(crygrowl)
|
||||
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub Button32_Click(sender As Object, e As EventArgs) Handles Button32.Click
|
||||
PlayCry(crynorm)
|
||||
End Sub
|
||||
|
||||
Private Sub Button37_Click(sender As Object, e As EventArgs) Handles Button37.Click
|
||||
PlayCry(crygrowl)
|
||||
End Sub
|
||||
|
||||
Private Sub Button34_Click(sender As Object, e As EventArgs) Handles Button34.Click
|
||||
SaveFileDialog.FileName = (PKMNames.SelectedIndex + 1) & ".wav"
|
||||
'SaveFileDialog.CheckFileExists = True
|
||||
|
||||
' Check to ensure that the selected path exists. Dialog box displays
|
||||
' a warning otherwise.
|
||||
SaveFileDialog.CheckPathExists = True
|
||||
|
||||
' Get or set default extension. Doesn't include the leading ".".
|
||||
SaveFileDialog.DefaultExt = "wav"
|
||||
|
||||
' Return the file referenced by a link? If False, simply returns the selected link
|
||||
' file. If True, returns the file linked to the LNK file.
|
||||
SaveFileDialog.DereferenceLinks = True
|
||||
|
||||
' Just as in VB6, use a set of pairs of filters, separated with "|". Each
|
||||
' pair consists of a description|file spec. Use a "|" between pairs. No need to put a
|
||||
' trailing "|". You can set the FilterIndex property as well, to select the default
|
||||
' filter. The first filter is numbered 1 (not 0). The default is 1.
|
||||
SaveFileDialog.Filter =
|
||||
"(*.wav)|*.wav*"
|
||||
|
||||
'SaveFileDialog.Multiselect = False
|
||||
|
||||
' Restore the original directory when done selecting
|
||||
' a file? If False, the current directory changes
|
||||
' to the directory in which you selected the file.
|
||||
' Set this to True to put the current folder back
|
||||
' where it was when you started.
|
||||
' The default is False.
|
||||
'.RestoreDirectory = False
|
||||
|
||||
' Show the Help button and Read-Only checkbox?
|
||||
SaveFileDialog.ShowHelp = False
|
||||
'SaveFileDialog.ShowReadOnly = False
|
||||
|
||||
' Start out with the read-only check box checked?
|
||||
' This only make sense if ShowReadOnly is True.
|
||||
'SaveFileDialog.ReadOnlyChecked = False
|
||||
|
||||
SaveFileDialog.Title = "Save as"
|
||||
|
||||
' Only accept valid Win32 file names?
|
||||
SaveFileDialog.ValidateNames = True
|
||||
|
||||
|
||||
If SaveFileDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
|
||||
|
||||
ExportCry(SaveFileDialog.FileName, crynorm)
|
||||
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub Button35_Click(sender As Object, e As EventArgs) Handles Button35.Click
|
||||
SaveFileDialog.FileName = (PKMNames.SelectedIndex + 1) & ".wav"
|
||||
'SaveFileDialog.CheckFileExists = True
|
||||
|
||||
' Check to ensure that the selected path exists. Dialog box displays
|
||||
' a warning otherwise.
|
||||
SaveFileDialog.CheckPathExists = True
|
||||
|
||||
' Get or set default extension. Doesn't include the leading ".".
|
||||
SaveFileDialog.DefaultExt = "wav"
|
||||
|
||||
' Return the file referenced by a link? If False, simply returns the selected link
|
||||
' file. If True, returns the file linked to the LNK file.
|
||||
SaveFileDialog.DereferenceLinks = True
|
||||
|
||||
' Just as in VB6, use a set of pairs of filters, separated with "|". Each
|
||||
' pair consists of a description|file spec. Use a "|" between pairs. No need to put a
|
||||
' trailing "|". You can set the FilterIndex property as well, to select the default
|
||||
' filter. The first filter is numbered 1 (not 0). The default is 1.
|
||||
SaveFileDialog.Filter =
|
||||
"(*.wav)|*.wav*"
|
||||
|
||||
'SaveFileDialog.Multiselect = False
|
||||
|
||||
' Restore the original directory when done selecting
|
||||
' a file? If False, the current directory changes
|
||||
' to the directory in which you selected the file.
|
||||
' Set this to True to put the current folder back
|
||||
' where it was when you started.
|
||||
' The default is False.
|
||||
'.RestoreDirectory = False
|
||||
|
||||
' Show the Help button and Read-Only checkbox?
|
||||
SaveFileDialog.ShowHelp = False
|
||||
'SaveFileDialog.ShowReadOnly = False
|
||||
|
||||
' Start out with the read-only check box checked?
|
||||
' This only make sense if ShowReadOnly is True.
|
||||
'SaveFileDialog.ReadOnlyChecked = False
|
||||
|
||||
SaveFileDialog.Title = "Save as"
|
||||
|
||||
' Only accept valid Win32 file names?
|
||||
SaveFileDialog.ValidateNames = True
|
||||
|
||||
|
||||
If SaveFileDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
|
||||
|
||||
ExportCry(SaveFileDialog.FileName, crygrowl)
|
||||
|
||||
End If
|
||||
End Sub
|
||||
End Class
|
||||
@@ -1,340 +0,0 @@
|
||||
Imports System
|
||||
Imports System.Collections.Generic
|
||||
Imports System.Drawing
|
||||
Imports System.IO
|
||||
Imports System.Text
|
||||
|
||||
|
||||
Public Class ROM
|
||||
'Implements IDisposable
|
||||
Private buffer As Byte()
|
||||
Private pos As Integer = 0
|
||||
Private m_filePath As String
|
||||
Private fileWatcher As FileSystemWatcher
|
||||
Private ignoreChange As Boolean
|
||||
|
||||
Private disposed As Boolean
|
||||
|
||||
Public Sub New(filePath As String)
|
||||
Try
|
||||
' read contents of file into buffer
|
||||
Using fs = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
|
||||
buffer = New Byte(fs.Length - 1) {}
|
||||
fs.Read(buffer, 0, buffer.Length)
|
||||
End Using
|
||||
|
||||
' create file watcher to monitor ROM being modified
|
||||
fileWatcher = New FileSystemWatcher()
|
||||
fileWatcher.Path = Path.GetDirectoryName(filePath)
|
||||
fileWatcher.Filter = "*.gba"
|
||||
|
||||
AddHandler fileWatcher.Changed, AddressOf OnSourceFileChanged
|
||||
AddHandler fileWatcher.Renamed, AddressOf OnSourceFileRenamed
|
||||
|
||||
fileWatcher.EnableRaisingEvents = True
|
||||
Catch
|
||||
Throw New Exception("Unable to open {filePath}!")
|
||||
End Try
|
||||
|
||||
Me.m_filePath = filePath
|
||||
End Sub
|
||||
|
||||
Protected Overrides Sub Finalize()
|
||||
Try
|
||||
Dispose()
|
||||
Finally
|
||||
MyBase.Finalize()
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Public Sub Dispose()
|
||||
If disposed Then
|
||||
Return
|
||||
End If
|
||||
disposed = True
|
||||
|
||||
fileWatcher.Dispose()
|
||||
buffer = Nothing
|
||||
End Sub
|
||||
|
||||
Public Sub Save()
|
||||
If String.IsNullOrEmpty(m_filePath) Then
|
||||
Return
|
||||
End If
|
||||
|
||||
Using fs = File.Open(m_filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite)
|
||||
fs.Write(buffer, 0, buffer.Length)
|
||||
End Using
|
||||
|
||||
ignoreChange = True
|
||||
End Sub
|
||||
|
||||
Public Sub Seek(offset As Integer)
|
||||
If offset < 0 OrElse offset > buffer.Length Then
|
||||
Throw New IndexOutOfRangeException()
|
||||
End If
|
||||
|
||||
pos = offset
|
||||
End Sub
|
||||
|
||||
Public Sub Skip(bytes As Integer)
|
||||
pos += bytes
|
||||
|
||||
If pos < 0 OrElse pos > buffer.Length Then
|
||||
Throw New IndexOutOfRangeException()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
#Region "Read"
|
||||
|
||||
Public Function ReadByte() As Byte
|
||||
Return buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1))
|
||||
End Function
|
||||
|
||||
Public Function PeekByte() As Byte
|
||||
Return buffer(pos)
|
||||
End Function
|
||||
|
||||
Public Function ReadSByte() As SByte
|
||||
Return CSByte(ReadByte())
|
||||
End Function
|
||||
|
||||
Public Function ReadUInt16() As UShort
|
||||
Return CUShort(buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) Or (buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) << 8))
|
||||
End Function
|
||||
|
||||
Public Function ReadInt32() As Integer
|
||||
Return buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) Or (buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) << 8) Or (buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) << 16) Or (buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) << 24)
|
||||
End Function
|
||||
|
||||
Public Function ReadUInt32() As UInteger
|
||||
Return CUInt(buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) Or (buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) << 8) Or (buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) << 16) Or (buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) << 24))
|
||||
End Function
|
||||
|
||||
Public Function ReadUInt64() As ULong
|
||||
Return CULng(buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) Or (buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) << 8) Or (buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) << 16) Or (buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) << 24) Or (buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) << 32) Or (buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) << 40) Or (buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) << 48) Or (buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) << 56))
|
||||
End Function
|
||||
|
||||
Public Function ReadBytes(count As Integer) As Byte()
|
||||
Dim b = New Byte(count - 1) {}
|
||||
For i As Integer = 0 To count - 1
|
||||
b(i) = buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1))
|
||||
Next
|
||||
Return b
|
||||
End Function
|
||||
|
||||
' Read a UTF8 encoded string
|
||||
Public Function ReadString(length As Integer) As String
|
||||
Return Encoding.UTF8.GetString(ReadBytes(length))
|
||||
End Function
|
||||
|
||||
Public Function ReadPointer() As Integer
|
||||
' read value
|
||||
Dim ptr = ReadInt32()
|
||||
|
||||
' return on blank pointer
|
||||
If ptr = 0 Then
|
||||
Return 0
|
||||
End If
|
||||
|
||||
' a pointer must be between 0x0 and 0x1FFFFFF to be valid on the GBA
|
||||
' ROM pointer format is OFFSET | 0x8000000, so 0x8000000 <= POINTER <= 0x9FFFFFF
|
||||
If ptr < &H8000000 OrElse ptr > &H9FFFFFF Then
|
||||
Throw New Exception(String.Format("Bad pointer at 0x{0:X6}", pos - 4))
|
||||
End If
|
||||
|
||||
' easy way to extract
|
||||
Return ptr And &H1FFFFFF
|
||||
End Function
|
||||
|
||||
' read a GBA string
|
||||
'Public Function ReadText(length As Integer, Optional encoding As CharacterEncoding = CharacterEncoding.English) As String
|
||||
' Return TextTable.GetString(ReadBytes(length), encoding)
|
||||
'End Function
|
||||
|
||||
'Public Function ReadTextTable(stringLength As Integer, tableSize As Integer, Optional encoding As CharacterEncoding = CharacterEncoding.English) As String()
|
||||
' Dim table = New String(tableSize - 1) {}
|
||||
' For i As Integer = 0 To tableSize - 1
|
||||
' table(i) = ReadText(stringLength, encoding)
|
||||
' Next
|
||||
|
||||
' Return table
|
||||
'End Function
|
||||
|
||||
|
||||
|
||||
#End Region
|
||||
|
||||
#Region "Write"
|
||||
|
||||
Public Sub WriteByte(value As Byte)
|
||||
buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) = value
|
||||
End Sub
|
||||
|
||||
Public Sub WriteSByte(value As SByte)
|
||||
WriteByte(CByte(value))
|
||||
End Sub
|
||||
|
||||
Public Sub WriteUInt16(value As UShort)
|
||||
buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) = CByte(value)
|
||||
buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) = CByte(value >> 8)
|
||||
End Sub
|
||||
|
||||
Public Sub WriteInt32(value As Integer)
|
||||
For i As Integer = 0 To 3
|
||||
buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) = CByte(value >> (i * 8))
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Public Sub WriteUInt32(value As UInteger)
|
||||
For i As Integer = 0 To 3
|
||||
buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) = CByte(value >> (i * 8))
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Public Sub WriteUInt64(value As ULong)
|
||||
For i As Integer = 0 To 7
|
||||
buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) = CByte(value >> (i * 8))
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Public Sub WriteBytes(bytes As Byte())
|
||||
For i As Integer = 0 To bytes.Length - 1
|
||||
buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) = bytes(i)
|
||||
Next
|
||||
End Sub
|
||||
|
||||
' Write a byte value count number of times
|
||||
Public Sub WriteBytes(value As Byte, count As Integer)
|
||||
For i As Integer = 0 To count - 1
|
||||
buffer(System.Math.Max(System.Threading.Interlocked.Increment(pos), pos - 1)) = value
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Public Sub WritePointer(offset As Integer)
|
||||
If offset > &H1FFFFFF Then
|
||||
Throw New Exception(String.Format("Offset 0x{0:X6} too large for a ROM pointer (0 <= offset <= 0x1FFFFFF)!"))
|
||||
End If
|
||||
|
||||
WriteInt32(offset Or &H8000000)
|
||||
End Sub
|
||||
|
||||
' Write a UTF8 encoded string
|
||||
Public Sub WriteString(str As String)
|
||||
WriteBytes(Encoding.UTF8.GetBytes(str))
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
|
||||
#Region "Search"
|
||||
|
||||
Public Function FindFreeSpace(length As Integer, Optional freespace As Byte = &HFF, Optional startOffset As Integer = 0, Optional alignment As Integer = 1) As Integer
|
||||
' The simpest freespace finder I could think of
|
||||
If alignment > 1 AndAlso startOffset Mod alignment <> 0 Then
|
||||
startOffset += alignment - (startOffset Mod alignment)
|
||||
End If
|
||||
|
||||
Dim i As Integer = startOffset
|
||||
While i < buffer.Length - length
|
||||
Dim match As Boolean = True
|
||||
For j As Integer = 0 To length - 1
|
||||
If buffer(i + j) <> freespace Then
|
||||
match = False
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
|
||||
If match Then
|
||||
Return i
|
||||
End If
|
||||
i += alignment
|
||||
End While
|
||||
Return -1
|
||||
End Function
|
||||
|
||||
#End Region
|
||||
|
||||
#Region "Properties"
|
||||
|
||||
Public ReadOnly Property FilePath() As String
|
||||
Get
|
||||
Return m_filePath
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public ReadOnly Property Length() As Integer
|
||||
Get
|
||||
Return buffer.Length
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Property Position() As Integer
|
||||
Get
|
||||
Return pos
|
||||
End Get
|
||||
Set(value As Integer)
|
||||
pos = value
|
||||
|
||||
If pos < 0 OrElse pos > buffer.Length Then
|
||||
Throw New IndexOutOfRangeException()
|
||||
End If
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public ReadOnly Property EndOfStream() As Boolean
|
||||
Get
|
||||
Return pos >= buffer.Length
|
||||
End Get
|
||||
End Property
|
||||
|
||||
' ROM specific properties
|
||||
' TODO: better to store these as existing strings
|
||||
|
||||
Public ReadOnly Property Name() As String
|
||||
Get
|
||||
Return Encoding.UTF8.GetString(buffer, &HA0, 12)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public ReadOnly Property Code() As String
|
||||
Get
|
||||
Return Encoding.UTF8.GetString(buffer, &HAC, 4)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public ReadOnly Property Maker() As String
|
||||
Get
|
||||
Return Encoding.UTF8.GetString(buffer, &HB0, 2)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
#End Region
|
||||
|
||||
Private Sub OnSourceFileChanged(sender As Object, e As FileSystemEventArgs)
|
||||
Console.WriteLine("ROM {e.FullPath} changed {e.ChangeType}.")
|
||||
If ignoreChange Then
|
||||
ignoreChange = False
|
||||
Return
|
||||
End If
|
||||
|
||||
If e.FullPath = m_filePath Then
|
||||
Console.WriteLine("Reloading buffer...")
|
||||
Using fs = File.Open(m_filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
|
||||
If buffer.Length <> fs.Length Then
|
||||
buffer = New Byte(fs.Length - 1) {}
|
||||
End If
|
||||
|
||||
fs.Read(buffer, 0, buffer.Length)
|
||||
End Using
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub OnSourceFileRenamed(sender As Object, e As RenamedEventArgs)
|
||||
Console.WriteLine("{e.OldFullPath} renamed to {e.FullPath}!")
|
||||
|
||||
If e.OldFullPath = m_filePath Then
|
||||
m_filePath = e.FullPath
|
||||
End If
|
||||
End Sub
|
||||
End Class
|
||||
|
||||
@@ -6,17 +6,17 @@
|
||||
<deploymentProvider codebase="http://gamer2020.0xrh.net/programs/GBAPokemonGameEditor/PokemonGameEditor.application" />
|
||||
</deployment>
|
||||
<compatibleFrameworks xmlns="urn:schemas-microsoft-com:clickonce.v2">
|
||||
<framework targetVersion="4.0" profile="Full" supportedRuntime="4.0.30319" />
|
||||
<framework targetVersion="4.5" profile="Full" supportedRuntime="4.0.30319" />
|
||||
</compatibleFrameworks>
|
||||
<dependency>
|
||||
<dependentAssembly dependencyType="install" codebase="PokemonGameEditor.exe.manifest" size="4660">
|
||||
<dependentAssembly dependencyType="install" codebase="PokemonGameEditor.exe.manifest" size="4714">
|
||||
<assemblyIdentity name="PokemonGameEditor.exe" version="3.7.0.0" publicKeyToken="0000000000000000" language="neutral" processorArchitecture="msil" type="win32" />
|
||||
<hash>
|
||||
<dsig:Transforms>
|
||||
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||
</dsig:Transforms>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
||||
<dsig:DigestValue>cEChvezvtmhv3eHbLmFCkRtITkk=</dsig:DigestValue>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||
<dsig:DigestValue>SBrRbZ8u/DVQqIBKdscjmLSX83CHGmDm8MT7Nzknq/4=</dsig:DigestValue>
|
||||
</hash>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
|
||||
Binary file not shown.
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
|
||||
</startup>
|
||||
</configuration>
|
||||
|
||||
@@ -43,14 +43,14 @@
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="PokemonGameEditor.exe" size="2019840">
|
||||
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="PokemonGameEditor.exe" size="2022400">
|
||||
<assemblyIdentity name="PokemonGameEditor" version="3.7.0.0" language="neutral" processorArchitecture="msil" />
|
||||
<hash>
|
||||
<dsig:Transforms>
|
||||
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||
</dsig:Transforms>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
||||
<dsig:DigestValue>GrraqbCuBqWEnZ+CKRBzJpXfl+g=</dsig:DigestValue>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||
<dsig:DigestValue>ytlUc7etDRo6JcZECVTvZje22CeYY2nX3QpMB/xaPZY=</dsig:DigestValue>
|
||||
</hash>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
@@ -59,8 +59,8 @@
|
||||
<dsig:Transforms>
|
||||
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||
</dsig:Transforms>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
||||
<dsig:DigestValue>zSGVcEGIWr3V6kRbwOGSlYIDyTs=</dsig:DigestValue>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||
<dsig:DigestValue>JnkgjOeeffBrvL44oYWhkDcQcjP1ZMSvae9S7XoDhYE=</dsig:DigestValue>
|
||||
</hash>
|
||||
</file>
|
||||
<file name="PokemonGameEditor.exe.config" size="183">
|
||||
@@ -68,8 +68,8 @@
|
||||
<dsig:Transforms>
|
||||
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||
</dsig:Transforms>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
||||
<dsig:DigestValue>zmtMKrAEuvsQh2jJFtlCNruBIWE=</dsig:DigestValue>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||
<dsig:DigestValue>fqCFSMI71/18dcpyCsWg6MqUy1HQbNRev19BLku919c=</dsig:DigestValue>
|
||||
</hash>
|
||||
</file>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
|
||||
Binary file not shown.
@@ -6,17 +6,17 @@
|
||||
<deploymentProvider codebase="http://gamer2020.0xrh.net/programs/GBAPokemonGameEditor/PokemonGameEditor.application" />
|
||||
</deployment>
|
||||
<compatibleFrameworks xmlns="urn:schemas-microsoft-com:clickonce.v2">
|
||||
<framework targetVersion="4.0" profile="Full" supportedRuntime="4.0.30319" />
|
||||
<framework targetVersion="4.5" profile="Full" supportedRuntime="4.0.30319" />
|
||||
</compatibleFrameworks>
|
||||
<dependency>
|
||||
<dependentAssembly dependencyType="install" codebase="PokemonGameEditor.exe.manifest" size="4660">
|
||||
<dependentAssembly dependencyType="install" codebase="PokemonGameEditor.exe.manifest" size="4714">
|
||||
<assemblyIdentity name="PokemonGameEditor.exe" version="3.7.0.0" publicKeyToken="0000000000000000" language="neutral" processorArchitecture="msil" type="win32" />
|
||||
<hash>
|
||||
<dsig:Transforms>
|
||||
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||
</dsig:Transforms>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
||||
<dsig:DigestValue>cEChvezvtmhv3eHbLmFCkRtITkk=</dsig:DigestValue>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||
<dsig:DigestValue>SBrRbZ8u/DVQqIBKdscjmLSX83CHGmDm8MT7Nzknq/4=</dsig:DigestValue>
|
||||
</hash>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
|
||||
</startup>
|
||||
</configuration>
|
||||
|
||||
@@ -43,14 +43,14 @@
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="PokemonGameEditor.exe" size="2019840">
|
||||
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="PokemonGameEditor.exe" size="2022400">
|
||||
<assemblyIdentity name="PokemonGameEditor" version="3.7.0.0" language="neutral" processorArchitecture="msil" />
|
||||
<hash>
|
||||
<dsig:Transforms>
|
||||
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||
</dsig:Transforms>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
||||
<dsig:DigestValue>GrraqbCuBqWEnZ+CKRBzJpXfl+g=</dsig:DigestValue>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||
<dsig:DigestValue>ytlUc7etDRo6JcZECVTvZje22CeYY2nX3QpMB/xaPZY=</dsig:DigestValue>
|
||||
</hash>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
@@ -59,8 +59,8 @@
|
||||
<dsig:Transforms>
|
||||
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||
</dsig:Transforms>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
||||
<dsig:DigestValue>zSGVcEGIWr3V6kRbwOGSlYIDyTs=</dsig:DigestValue>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||
<dsig:DigestValue>JnkgjOeeffBrvL44oYWhkDcQcjP1ZMSvae9S7XoDhYE=</dsig:DigestValue>
|
||||
</hash>
|
||||
</file>
|
||||
<file name="PokemonGameEditor.exe.config" size="183">
|
||||
@@ -68,8 +68,8 @@
|
||||
<dsig:Transforms>
|
||||
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||
</dsig:Transforms>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
||||
<dsig:DigestValue>zmtMKrAEuvsQh2jJFtlCNruBIWE=</dsig:DigestValue>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||
<dsig:DigestValue>fqCFSMI71/18dcpyCsWg6MqUy1HQbNRev19BLku919c=</dsig:DigestValue>
|
||||
</hash>
|
||||
</file>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -6,17 +6,17 @@
|
||||
<deploymentProvider codebase="http://gamer2020.0xrh.net/programs/GBAPokemonGameEditor/PokemonGameEditor.application" />
|
||||
</deployment>
|
||||
<compatibleFrameworks xmlns="urn:schemas-microsoft-com:clickonce.v2">
|
||||
<framework targetVersion="4.0" profile="Full" supportedRuntime="4.0.30319" />
|
||||
<framework targetVersion="4.5" profile="Full" supportedRuntime="4.0.30319" />
|
||||
</compatibleFrameworks>
|
||||
<dependency>
|
||||
<dependentAssembly dependencyType="install" codebase="PokemonGameEditor.exe.manifest" size="4660">
|
||||
<dependentAssembly dependencyType="install" codebase="PokemonGameEditor.exe.manifest" size="4714">
|
||||
<assemblyIdentity name="PokemonGameEditor.exe" version="3.7.0.0" publicKeyToken="0000000000000000" language="neutral" processorArchitecture="msil" type="win32" />
|
||||
<hash>
|
||||
<dsig:Transforms>
|
||||
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||
</dsig:Transforms>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
||||
<dsig:DigestValue>cEChvezvtmhv3eHbLmFCkRtITkk=</dsig:DigestValue>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||
<dsig:DigestValue>SBrRbZ8u/DVQqIBKdscjmLSX83CHGmDm8MT7Nzknq/4=</dsig:DigestValue>
|
||||
</hash>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
|
||||
Binary file not shown.
@@ -43,14 +43,14 @@
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="PokemonGameEditor.exe" size="2019840">
|
||||
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="PokemonGameEditor.exe" size="2022400">
|
||||
<assemblyIdentity name="PokemonGameEditor" version="3.7.0.0" language="neutral" processorArchitecture="msil" />
|
||||
<hash>
|
||||
<dsig:Transforms>
|
||||
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||
</dsig:Transforms>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
||||
<dsig:DigestValue>GrraqbCuBqWEnZ+CKRBzJpXfl+g=</dsig:DigestValue>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||
<dsig:DigestValue>ytlUc7etDRo6JcZECVTvZje22CeYY2nX3QpMB/xaPZY=</dsig:DigestValue>
|
||||
</hash>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
@@ -59,8 +59,8 @@
|
||||
<dsig:Transforms>
|
||||
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||
</dsig:Transforms>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
||||
<dsig:DigestValue>zSGVcEGIWr3V6kRbwOGSlYIDyTs=</dsig:DigestValue>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||
<dsig:DigestValue>JnkgjOeeffBrvL44oYWhkDcQcjP1ZMSvae9S7XoDhYE=</dsig:DigestValue>
|
||||
</hash>
|
||||
</file>
|
||||
<file name="PokemonGameEditor.exe.config" size="183">
|
||||
@@ -68,8 +68,8 @@
|
||||
<dsig:Transforms>
|
||||
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||
</dsig:Transforms>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
||||
<dsig:DigestValue>zmtMKrAEuvsQh2jJFtlCNruBIWE=</dsig:DigestValue>
|
||||
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||
<dsig:DigestValue>fqCFSMI71/18dcpyCsWg6MqUy1HQbNRev19BLku919c=</dsig:DigestValue>
|
||||
</hash>
|
||||
</file>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user