PKHeX/PKHeX.Core/PKM/Strings/StringConverter345.cs
Kurt 88830e0d00
Update from .NET Framework 4.6 to .NET 7 (#3729)
Updates from net46->net7, dropping support for mono in favor of using the latest runtime (along with the performance/API improvements). Releases will be posted as 64bit only for now.

Refactors a good amount of internal API methods to be more performant and more customizable for future updates & fixes.

Adds functionality for Batch Editor commands to `>`, `<` and <=/>=

TID/SID properties renamed to TID16/SID16 for clarity; other properties exposed for Gen7 / display variants.

Main window has a new layout to account for DPI scaling (8 point grid)

Fixed: Tatsugiri and Paldean Tauros now output Showdown form names as Showdown expects
Changed: Gen9 species now interact based on the confirmed National Dex IDs (closes #3724)
Fixed: Pokedex set all no longer clears species with unavailable non-base forms (closes #3720)
Changed: Hyper Training suggestions now apply for level 50 in SV. (closes #3714)
Fixed: B2/W2 hatched egg met locations exclusive to specific versions are now explicitly checked (closes #3691)
Added: Properties for ribbon/mark count (closes #3659)
Fixed: Traded SV eggs are now checked correctly (closes #3692)
2023-01-21 20:02:33 -08:00

77 lines
3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using static System.Buffers.Binary.BinaryPrimitives;
namespace PKHeX.Core;
/// <summary>
/// Logic for converting a <see cref="string"/> for to future Generations.
/// </summary>
public static class StringConverter345
{
/// <summary>
/// Trash Bytes for Generation 3->4
/// </summary>
/// <remarks>String buffers are reused, data is not cleared which yields the trash bytes.</remarks>
private static ReadOnlySpan<byte> G4TransferTrashBytes => new byte[]
{
0x18, 0x20, 0x0D, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xA1, 0x0C, 0x02, 0xE0, 0xFF, // 2
0x74, 0x20, 0x0D, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xA1, 0x0C, 0x02, 0xE0, 0xFF, // 3
0x54, 0x20, 0x0D, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0xA1, 0x0C, 0x02, 0xE0, 0xFF, // 4
0x74, 0x20, 0x0D, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xA1, 0x0C, 0x02, 0xE0, 0xFF, // 5
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6
0x74, 0x20, 0x0D, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xA1, 0x0C, 0x02, 0xE0, 0xFF, // 7
};
private const int TrashByteLanguages = 6; // rows
private const int TrashByteLayerWidth = 18; // columns
public static ReadOnlySpan<byte> GetTrashBytes(int language)
{
language -= 2;
if ((uint)language >= TrashByteLanguages)
return ReadOnlySpan<byte>.Empty;
var offset = language * TrashByteLayerWidth;
return G4TransferTrashBytes.Slice(offset, TrashByteLayerWidth);
}
/// <summary>
/// Remaps Gen5 Glyphs to unicode codepoint.
/// </summary>
/// <param name="buffer">Input characters to transfer in place</param>
/// <returns>Remapped string</returns>
public static void TransferGlyphs56(Span<byte> buffer)
{
var table = Glyph56;
for (int i = 0; i < buffer.Length; i += 2)
{
var c = (char)ReadUInt16LittleEndian(buffer[i..]);
if (table.TryGetValue(c, out c))
WriteUInt16LittleEndian(buffer[i..], c);
}
}
private static readonly Dictionary<char, char> Glyph56 = new()
{
{'\u2467', '\u00d7'}, // ×
{'\u2468', '\u00f7'}, // ÷
{'\u246c', '\uE08D'}, // …
{'\u246d', '\uE08E'}, // ♂
{'\u246e', '\uE08F'}, // ♀
{'\u246f', '\uE090'}, // ♠
{'\u2470', '\uE091'}, // ♣
{'\u2471', '\uE092'}, // ♥
{'\u2472', '\uE093'}, // ♦
{'\u2473', '\uE094'}, // ★
{'\u2474', '\uE095'}, // ◎
{'\u2475', '\uE096'}, // ○
{'\u2476', '\uE097'}, // □
{'\u2477', '\uE098'}, // △
{'\u2478', '\uE099'}, // ◇
{'\u2479', '\uE09A'}, // ♪
{'\u247a', '\uE09B'}, // ☀
{'\u247b', '\uE09C'}, // ☁
{'\u247d', '\uE09D'}, // ☂
};
}