mirror of
https://github.com/Gamer2020/PokemonGameEditor.git
synced 2026-08-20 17:34:20 -05:00
Added checkbox to allow efficient data import. (It takes the output string into an array, and checks it againtsevery move. Only searching for free space in folders with no other foles.
313 lines
12 KiB
VB.net
313 lines
12 KiB
VB.net
Imports VB = Microsoft.VisualBasic
|
|
Module ChangeImageFunctions
|
|
Public Sub SaveFrontSpriteToFreeSpace(Pokemonindex As Integer, Sprite As Byte(), pallete As Color())
|
|
Dim sOffset As Integer = Int32.Parse(GetString(GetINIFileLocation(), header, "PokemonFrontSprites", ""), System.Globalization.NumberStyles.HexNumber) + (Pokemonindex * 8) 'Pointer to Pokemon front sprites, + 8 = Bulbasaur.
|
|
Dim pOffset As Integer = Int32.Parse(GetString(GetINIFileLocation(), header, "PokemonNormalPal", ""), System.Globalization.NumberStyles.HexNumber) + (Pokemonindex * 8) 'Pointer to Pokemon normal palettes, + 8 = Bulbasaur.
|
|
|
|
Dim ImgString As String
|
|
Dim PalString As String
|
|
|
|
Dim ImgBytes As Byte()
|
|
Dim PalBytes As Byte()
|
|
|
|
Dim ImgNewOffset As String = ""
|
|
Dim PalNewOffset As String = ""
|
|
|
|
ImgBytes = ConvertStringToByteArray(CompressLz77String(ConvertByteArrayToString(Sprite)))
|
|
PalBytes = ConvertStringToByteArray(CompressLz77String(ConvertPaletteToString(pallete)))
|
|
|
|
ImgString = ByteArrayToHexString(ImgBytes)
|
|
PalString = ByteArrayToHexString(PalBytes)
|
|
|
|
Dim alreadyInsertedPic As Boolean = False
|
|
Dim alreadyInsertedPal As Boolean = False
|
|
If Pokemonedit.CheckBox1.Checked Then
|
|
If Pokemonedit.PicStrings.Count > 0 Then
|
|
Dim countNum As Integer = 0
|
|
For Each oldPic As String In Pokemonedit.PicStrings
|
|
If String.Compare(ImgString, oldPic) = 0 Then
|
|
alreadyInsertedPic = True
|
|
ImgNewOffset = Pokemonedit.PicOffsets(countNum)
|
|
Exit For
|
|
End If
|
|
|
|
countNum += 1
|
|
Next
|
|
End If
|
|
|
|
If Pokemonedit.PicStrings.Count > 0 Then
|
|
Dim countNum As Integer = 0
|
|
For Each oldPal As String In Pokemonedit.PalStrings
|
|
If String.Compare(PalString, oldPal) = 0 Then
|
|
alreadyInsertedPal = True
|
|
PalNewOffset = Pokemonedit.PalOffsets(countNum)
|
|
Exit For
|
|
End If
|
|
|
|
countNum += 1
|
|
Next
|
|
End If
|
|
End If
|
|
|
|
|
|
If Not alreadyInsertedPic Then
|
|
ImgNewOffset = SearchFreeSpaceFourAligned(LoadedROM, &HFF, ((Len(ImgString) / 2)), "&H" & GetString(GetINIFileLocation(), header, "StartSearchingForSpaceOffset", "800000"))
|
|
Pokemonedit.PicStrings.Add(ImgString)
|
|
Pokemonedit.PicOffsets.Add(ImgNewOffset)
|
|
WriteHEX(LoadedROM, ImgNewOffset, ImgString)
|
|
End If
|
|
If Not alreadyInsertedPal Then
|
|
PalNewOffset = SearchFreeSpaceFourAligned(LoadedROM, &HFF, ((Len(PalString) / 2)), "&H" & GetString(GetINIFileLocation(), header, "StartSearchingForSpaceOffset", "800000"))
|
|
Pokemonedit.PalStrings.Add(PalString)
|
|
Pokemonedit.PalOffsets.Add(PalNewOffset)
|
|
WriteHEX(LoadedROM, PalNewOffset, PalString)
|
|
End If
|
|
|
|
WriteHEX(LoadedROM, sOffset, ReverseHEX(Hex((ImgNewOffset) + &H8000000)))
|
|
WriteHEX(LoadedROM, pOffset, ReverseHEX(Hex((PalNewOffset) + &H8000000)))
|
|
|
|
End Sub
|
|
|
|
Public Sub SaveBackSpriteToFreeSpace(Pokemonindex As Integer, Sprite As Byte(), pallete As Color())
|
|
Dim sOffset As Integer = Int32.Parse(GetString(GetINIFileLocation(), header, "PokemonBackSprites", ""), System.Globalization.NumberStyles.HexNumber) + (Pokemonindex * 8) 'Pointer to Pokemon front sprites, + 8 = Bulbasaur.
|
|
Dim pOffset As Integer = Int32.Parse(GetString(GetINIFileLocation(), header, "PokemonShinyPal", ""), System.Globalization.NumberStyles.HexNumber) + (Pokemonindex * 8) 'Pointer to Pokemon normal palettes, + 8 = Bulbasaur.
|
|
|
|
Dim ImgString As String
|
|
Dim PalString As String
|
|
|
|
Dim ImgBytes As Byte()
|
|
Dim PalBytes As Byte()
|
|
|
|
Dim ImgNewOffset As String = ""
|
|
Dim PalNewOffset As String = ""
|
|
|
|
ImgBytes = ConvertStringToByteArray(CompressLz77String(ConvertByteArrayToString(Sprite)))
|
|
PalBytes = ConvertStringToByteArray(CompressLz77String(ConvertPaletteToString(pallete)))
|
|
|
|
ImgString = ByteArrayToHexString(ImgBytes)
|
|
PalString = ByteArrayToHexString(PalBytes)
|
|
|
|
Dim alreadyInsertedPic As Boolean = False
|
|
Dim alreadyInsertedPal As Boolean = False
|
|
If Pokemonedit.CheckBox1.Checked Then
|
|
If Pokemonedit.PicStrings.Count > 0 Then
|
|
Dim countNum As Integer = 0
|
|
For Each oldPic As String In Pokemonedit.PicStrings
|
|
If String.Compare(ImgString, oldPic) = 0 Then
|
|
alreadyInsertedPic = True
|
|
ImgNewOffset = Pokemonedit.PicOffsets(countNum)
|
|
Exit For
|
|
End If
|
|
|
|
countNum += 1
|
|
Next
|
|
End If
|
|
|
|
If Pokemonedit.PicStrings.Count > 0 Then
|
|
Dim countNum As Integer = 0
|
|
For Each oldPal As String In Pokemonedit.PalStrings
|
|
If String.Compare(PalString, oldPal) = 0 Then
|
|
alreadyInsertedPal = True
|
|
PalNewOffset = Pokemonedit.PalOffsets(countNum)
|
|
Exit For
|
|
End If
|
|
|
|
countNum += 1
|
|
Next
|
|
End If
|
|
End If
|
|
|
|
|
|
If Not alreadyInsertedPic Then
|
|
ImgNewOffset = SearchFreeSpaceFourAligned(LoadedROM, &HFF, ((Len(ImgString) / 2)), "&H" & GetString(GetINIFileLocation(), header, "StartSearchingForSpaceOffset", "800000"))
|
|
Pokemonedit.PicStrings.Add(ImgString)
|
|
Pokemonedit.PicOffsets.Add(ImgNewOffset)
|
|
WriteHEX(LoadedROM, ImgNewOffset, ImgString)
|
|
End If
|
|
If Not alreadyInsertedPal Then
|
|
PalNewOffset = SearchFreeSpaceFourAligned(LoadedROM, &HFF, ((Len(PalString) / 2)), "&H" & GetString(GetINIFileLocation(), header, "StartSearchingForSpaceOffset", "800000"))
|
|
Pokemonedit.PalStrings.Add(PalString)
|
|
Pokemonedit.PalOffsets.Add(PalNewOffset)
|
|
WriteHEX(LoadedROM, PalNewOffset, PalString)
|
|
End If
|
|
|
|
WriteHEX(LoadedROM, sOffset, ReverseHEX(Hex((ImgNewOffset) + &H8000000)))
|
|
WriteHEX(LoadedROM, pOffset, ReverseHEX(Hex((PalNewOffset) + &H8000000)))
|
|
|
|
End Sub
|
|
|
|
Public Sub SaveAnimationSpriteToFreeSpace(Pokemonindex As Integer, Sprite As Byte())
|
|
Dim sOffset As Integer = Int32.Parse(GetString(GetINIFileLocation(), header, "PokemonAnimations", ""), System.Globalization.NumberStyles.HexNumber) + (Pokemonindex * 8) 'Pointer to Pokemon front sprites, + 8 = Bulbasaur.
|
|
|
|
Dim ImgString As String
|
|
|
|
Dim ImgBytes As Byte()
|
|
|
|
Dim ImgNewOffset As String
|
|
|
|
|
|
ImgBytes = ConvertStringToByteArray(CompressLz77String(ConvertByteArrayToString(Sprite)))
|
|
|
|
ImgString = ByteArrayToHexString(ImgBytes)
|
|
|
|
ImgNewOffset = SearchFreeSpaceFourAligned(LoadedROM, &HFF, ((Len(ImgString) / 2)), "&H" & GetString(GetINIFileLocation(), header, "StartSearchingForSpaceOffset", "800000"))
|
|
|
|
WriteHEX(LoadedROM, ImgNewOffset, ImgString)
|
|
|
|
WriteHEX(LoadedROM, sOffset, ReverseHEX(Hex((ImgNewOffset) + &H8000000)))
|
|
|
|
|
|
End Sub
|
|
|
|
Public Function ConvertFootPrintImageToHexString(Image As Bitmap) As String
|
|
|
|
Dim OutPutBuffer0 As String = ""
|
|
Dim OutPutBuffer1 As String = ""
|
|
Dim OutPutBuffer2 As String = ""
|
|
Dim OutPutBuffer3 As String = ""
|
|
Dim BitBuffer0 As String = ""
|
|
Dim BitBuffer1 As String = ""
|
|
Dim BitBuffer2 As String = ""
|
|
Dim BitBuffer3 As String = ""
|
|
Dim Palette2 As Color
|
|
|
|
Dim sideways As Integer = 0
|
|
Dim updown As Integer = 0
|
|
Dim CurSquare As Integer = 0
|
|
|
|
Palette2 = Image.GetPixel(sideways, updown)
|
|
|
|
While updown < 16
|
|
While sideways < 8
|
|
|
|
If CurSquare = 0 Then
|
|
|
|
If Image.GetPixel(sideways, updown) = Palette2 Then
|
|
BitBuffer0 = BitBuffer0 & 0
|
|
Else
|
|
BitBuffer0 = BitBuffer0 & 1
|
|
|
|
End If
|
|
|
|
End If
|
|
|
|
If CurSquare = 1 Then
|
|
|
|
If Image.GetPixel((CurSquare * 8) + sideways, updown - (CurSquare * 8)) = Palette2 Then
|
|
BitBuffer1 = BitBuffer1 & 0
|
|
Else
|
|
BitBuffer1 = BitBuffer1 & 1
|
|
|
|
End If
|
|
|
|
End If
|
|
|
|
If CurSquare = 2 Then
|
|
|
|
If Image.GetPixel(sideways, updown + (8)) = Palette2 Then
|
|
BitBuffer2 = BitBuffer2 & 0
|
|
Else
|
|
BitBuffer2 = BitBuffer2 & 1
|
|
|
|
End If
|
|
|
|
End If
|
|
|
|
If CurSquare = 3 Then
|
|
|
|
If Image.GetPixel((8) + sideways, updown) = Palette2 Then
|
|
BitBuffer3 = BitBuffer3 & 0
|
|
Else
|
|
|
|
BitBuffer3 = BitBuffer3 & 1
|
|
|
|
End If
|
|
|
|
End If
|
|
|
|
If Len(BitBuffer0) = 8 Then
|
|
OutPutBuffer0 = OutPutBuffer0 & VB.Right("00" & Hex(Convert.ToInt32(BitBuffer0, 2)), 2)
|
|
BitBuffer0 = ""
|
|
End If
|
|
|
|
If Len(BitBuffer1) = 8 Then
|
|
OutPutBuffer1 = OutPutBuffer1 & VB.Right("00" & Hex(Convert.ToInt32(BitBuffer1, 2)), 2)
|
|
BitBuffer1 = ""
|
|
End If
|
|
|
|
If Len(BitBuffer2) = 8 Then
|
|
OutPutBuffer2 = OutPutBuffer2 & VB.Right("00" & Hex(Convert.ToInt32(BitBuffer2, 2)), 2)
|
|
BitBuffer2 = ""
|
|
End If
|
|
|
|
If Len(BitBuffer3) = 8 Then
|
|
OutPutBuffer3 = OutPutBuffer3 & VB.Right("00" & Hex(Convert.ToInt32(BitBuffer3, 2)), 2)
|
|
BitBuffer3 = ""
|
|
End If
|
|
|
|
sideways = sideways + 1
|
|
End While
|
|
|
|
sideways = 0
|
|
|
|
If updown = 7 And CurSquare = 0 Then
|
|
CurSquare = CurSquare + 1
|
|
End If
|
|
|
|
If updown = 15 And CurSquare = 1 Then
|
|
CurSquare = CurSquare + 1
|
|
updown = -1
|
|
End If
|
|
|
|
If updown = 7 And CurSquare = 2 Then
|
|
CurSquare = CurSquare + 1
|
|
|
|
End If
|
|
|
|
If updown = 15 And CurSquare = 3 Then
|
|
CurSquare = CurSquare + 1
|
|
End If
|
|
|
|
updown = updown + 1
|
|
|
|
End While
|
|
|
|
|
|
ConvertFootPrintImageToHexString = OutPutBuffer1 & OutPutBuffer0 & OutPutBuffer3 & OutPutBuffer2
|
|
End Function
|
|
|
|
|
|
Public Sub SaveTrainerSpriteToFreeSpace(index As Integer, Sprite As Byte(), pallete As Color())
|
|
Dim sOffset As Integer = Int32.Parse(GetString(GetINIFileLocation(), header, "TrainerImageTable", ""), System.Globalization.NumberStyles.HexNumber) + (index * 8)
|
|
Dim pOffset As Integer = Int32.Parse(GetString(GetINIFileLocation(), header, "TrainerPaletteTable", ""), System.Globalization.NumberStyles.HexNumber) + (Index * 8)
|
|
|
|
Dim ImgString As String
|
|
Dim PalString As String
|
|
|
|
Dim ImgBytes As Byte()
|
|
Dim PalBytes As Byte()
|
|
|
|
Dim ImgNewOffset As String
|
|
Dim PalNewOffset As String
|
|
|
|
ImgBytes = ConvertStringToByteArray(CompressLz77String(ConvertByteArrayToString(Sprite)))
|
|
PalBytes = ConvertStringToByteArray(CompressLz77String(ConvertPaletteToString(pallete)))
|
|
|
|
ImgString = ByteArrayToHexString(ImgBytes)
|
|
PalString = ByteArrayToHexString(PalBytes)
|
|
|
|
ImgNewOffset = SearchFreeSpaceFourAligned(LoadedROM, &HFF, ((Len(ImgString) / 2)), "&H" & GetString(GetINIFileLocation(), header, "StartSearchingForSpaceOffset", "800000"))
|
|
|
|
WriteHEX(LoadedROM, ImgNewOffset, ImgString)
|
|
|
|
WriteHEX(LoadedROM, sOffset, ReverseHEX(Hex((ImgNewOffset) + &H8000000)))
|
|
|
|
PalNewOffset = SearchFreeSpaceFourAligned(LoadedROM, &HFF, ((Len(PalString) / 2)), "&H" & GetString(GetINIFileLocation(), header, "StartSearchingForSpaceOffset", "800000"))
|
|
|
|
WriteHEX(LoadedROM, PalNewOffset, PalString)
|
|
|
|
WriteHEX(LoadedROM, pOffset, ReverseHEX(Hex((PalNewOffset) + &H8000000)))
|
|
|
|
End Sub
|
|
End Module
|