Cry playing and exporting.

Added code for cry playing and exporting. Next will be importing.
This commit is contained in:
Gamer2020
2016-08-21 19:00:53 -05:00
parent e27537e575
commit 4c7c0173a7
26 changed files with 570 additions and 464 deletions

Binary file not shown.

View File

@@ -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>

View File

@@ -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

View File

@@ -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>

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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>

View File

@@ -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>

View File

@@ -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">

View File

@@ -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>

View File

@@ -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>

View File

@@ -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">

View File

@@ -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>

View File

@@ -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">

View File

@@ -109,7 +109,7 @@ Code Pokemon Adder for Emerald
Program Requirements
====================
Windows: Install 4.0 .Net Framework
Windows: Install 4.5 .Net Framework
Windows RT: Have Jailbreak installed that allows unsigned programs.