mirror of
https://github.com/Raymonf/whack.git
synced 2024-11-24 00:20:10 +01:00
Initial commit (galliumhook and WTT)
This commit is contained in:
commit
e46416e546
6
README.md
Normal file
6
README.md
Normal file
@ -0,0 +1,6 @@
|
||||
# whack
|
||||
|
||||
A collection of tools and other hacky things I've made for myself. User beware!
|
||||
|
||||
* galliumhook - injects `mercuryhook.dll` (whatever that may be) forces created windows to be 1080x1920 regardless of screen resolution
|
||||
* Translation/WTT - translation tool that exports message tables to and imports from toml files [(readme)](WTT/README.md)
|
398
Translation/.gitignore
vendored
Normal file
398
Translation/.gitignore
vendored
Normal file
@ -0,0 +1,398 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.tlog
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
|
||||
*.vbp
|
||||
|
||||
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
|
||||
*.dsw
|
||||
*.dsp
|
||||
|
||||
# Visual Studio 6 technical files
|
||||
*.ncb
|
||||
*.aps
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
|
||||
# Visual Studio History (VSHistory) files
|
||||
.vshistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
|
||||
# VS Code files for those working on multiple tools
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
*.code-workspace
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
|
||||
# Windows Installer files from build outputs
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# JetBrains Rider
|
||||
*.sln.iml
|
13
Translation/.idea/.idea.UAssetAPI/.idea/.gitignore
vendored
Normal file
13
Translation/.idea/.idea.UAssetAPI/.idea/.gitignore
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Rider ignored files
|
||||
/modules.xml
|
||||
/contentModel.xml
|
||||
/.idea.UAssetAPI.iml
|
||||
/projectSettingsUpdater.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
4
Translation/.idea/.idea.UAssetAPI/.idea/encodings.xml
Normal file
4
Translation/.idea/.idea.UAssetAPI/.idea/encodings.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
|
||||
</project>
|
8
Translation/.idea/.idea.UAssetAPI/.idea/indexLayout.xml
Normal file
8
Translation/.idea/.idea.UAssetAPI/.idea/indexLayout.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="UserContentModel">
|
||||
<attachedFolders />
|
||||
<explicitIncludes />
|
||||
<explicitExcludes />
|
||||
</component>
|
||||
</project>
|
6
Translation/.idea/.idea.UAssetAPI/.idea/vcs.xml
Normal file
6
Translation/.idea/.idea.UAssetAPI/.idea/vcs.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
21
Translation/LICENSE
Normal file
21
Translation/LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022 Atenfyr (UAssetAPI), Raymonf (WTT)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
25
Translation/README.md
Normal file
25
Translation/README.md
Normal file
@ -0,0 +1,25 @@
|
||||
# WTT
|
||||
|
||||
Based on [UAssetAPI](https://github.com/atenfyr/UAssetAPI).
|
||||
|
||||
It replaces existing strings, so you can't add new ones. Tested on version 3.7.10.
|
||||
|
||||
**Beware:** There is no error handling since this tool was originally meant for my personal use.
|
||||
|
||||
### Compilation
|
||||
|
||||
Compile like a normal .NET 6 application. WTT.sln has everything you will need if you use Visual Studio.
|
||||
|
||||
### Usage
|
||||
|
||||
When it asks, put in the path to your `Message` directory. Usually, this would be `C:\whatever\WindowsNoEditor\Mercury\Content\Message`.
|
||||
|
||||
Then, choose a mode:
|
||||
|
||||
* **bulk_export** - bulk export all the `uasset` files in the path given as toml files in the same directory
|
||||
* **bulk_import** - bulk import all the `toml` files
|
||||
* directory of TOML files: where your TOML files are
|
||||
* uasset directory: where your uasset files are (useful as a way to back up the original uasset files)
|
||||
* output uasset directory: where your new uasset files will be put
|
||||
* **e** - export single toml file from uasset
|
||||
* **i** - import single uasset file from toml
|
201
Translation/UAssetAPI/AC7Decrypt.cs
Normal file
201
Translation/UAssetAPI/AC7Decrypt.cs
Normal file
@ -0,0 +1,201 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
public class AC7XorKey
|
||||
{
|
||||
public int NameKey;
|
||||
public int Offset;
|
||||
public int pk1;
|
||||
public int pk2;
|
||||
|
||||
public void SkipCount(int count)
|
||||
{
|
||||
int num = count % 217;
|
||||
pk1 += num;
|
||||
if (pk1 >= 217)
|
||||
{
|
||||
pk1 -= 217;
|
||||
}
|
||||
int num2 = count % 1024;
|
||||
pk2 += num2;
|
||||
if (pk2 >= 1024)
|
||||
{
|
||||
pk2 -= 1024;
|
||||
}
|
||||
}
|
||||
|
||||
public AC7XorKey(int nameKey, int offset)
|
||||
{
|
||||
NameKey = nameKey;
|
||||
Offset = offset;
|
||||
}
|
||||
}
|
||||
|
||||
public class AC7Decrypt
|
||||
{
|
||||
private static byte[] AC7FullKey = new byte[0];
|
||||
|
||||
public AC7Decrypt()
|
||||
{
|
||||
if (AC7FullKey.Length == 0) AC7FullKey = Properties.Resources.AC7Key;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Decrypts an Ace Combat 7 encrypted asset on disk.
|
||||
/// </summary>
|
||||
/// <param name="input">The path to an encrypted asset on disk.</param>
|
||||
/// <param name="output">The path that the decrypted asset should be saved to.</param>
|
||||
public void Decrypt(string input, string output)
|
||||
{
|
||||
AC7XorKey xorKey = GetXorKey(Path.GetFileNameWithoutExtension(input));
|
||||
byte[] doneData = DecryptUAssetBytes(File.ReadAllBytes(input), xorKey);
|
||||
File.WriteAllBytes(output, doneData);
|
||||
try
|
||||
{
|
||||
byte[] doneData2 = DecryptUexpBytes(File.ReadAllBytes(Path.ChangeExtension(input, "uexp")), xorKey);
|
||||
File.WriteAllBytes(Path.ChangeExtension(output, "uexp"), doneData2);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Encrypts an Ace Combat 7 encrypted asset on disk.
|
||||
/// </summary>
|
||||
/// <param name="input">The path to a decrypted asset on disk.</param>
|
||||
/// <param name="output">The path that the encrypted asset should be saved to.</param>
|
||||
public void Encrypt(string input, string output)
|
||||
{
|
||||
AC7XorKey xorKey = GetXorKey(Path.GetFileNameWithoutExtension(output));
|
||||
byte[] doneData = EncryptUAssetBytes(File.ReadAllBytes(input), xorKey);
|
||||
File.WriteAllBytes(output, doneData);
|
||||
try
|
||||
{
|
||||
byte[] doneData2 = EncryptUexpBytes(File.ReadAllBytes(Path.ChangeExtension(input, "uexp")), xorKey);
|
||||
File.WriteAllBytes(Path.ChangeExtension(output, "uexp"), doneData2);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
public byte[] DecryptUAssetBytes(byte[] uasset, AC7XorKey xorkey)
|
||||
{
|
||||
if (xorkey == null) throw new NullReferenceException("Null key provided");
|
||||
byte[] array = new byte[uasset.Length];
|
||||
BitConverter.GetBytes(UAsset.UASSET_MAGIC).CopyTo(array, 0);
|
||||
for (int i = 4; i < array.Length; i++)
|
||||
{
|
||||
array[i] = GetXorByte(uasset[i], ref xorkey);
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
public byte[] EncryptUAssetBytes(byte[] uasset, AC7XorKey xorkey)
|
||||
{
|
||||
if (xorkey == null) throw new NullReferenceException("Null key provided");
|
||||
byte[] array = new byte[uasset.Length];
|
||||
BitConverter.GetBytes(UAsset.ACE7_MAGIC).CopyTo(array, 0);
|
||||
for (int i = 4; i < array.Length; i++)
|
||||
{
|
||||
array[i] = GetXorByte(uasset[i], ref xorkey);
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
public byte[] DecryptUexpBytes(byte[] uexp, AC7XorKey xorkey)
|
||||
{
|
||||
if (xorkey == null) throw new NullReferenceException("Null key provided");
|
||||
byte[] array = new byte[uexp.Length];
|
||||
for (int i = 0; i < array.Length; i++)
|
||||
{
|
||||
array[i] = GetXorByte(uexp[i], ref xorkey);
|
||||
}
|
||||
BitConverter.GetBytes(UAsset.UASSET_MAGIC).CopyTo(array, array.Length - 4);
|
||||
return array;
|
||||
}
|
||||
|
||||
public byte[] EncryptUexpBytes(byte[] uexp, AC7XorKey xorkey)
|
||||
{
|
||||
if (xorkey == null) throw new NullReferenceException("Null key provided");
|
||||
byte[] array = new byte[uexp.Length];
|
||||
for (int i = 0; i < uexp.Length; i++)
|
||||
{
|
||||
array[i] = GetXorByte(uexp[i], ref xorkey);
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generates an encryption key for a particular asset on disk.
|
||||
/// </summary>
|
||||
/// <param name="fname">The name of the asset being encrypted on disk without the extension.</param>
|
||||
/// <returns>An encryption key for the asset.</returns>
|
||||
public static AC7XorKey GetXorKey(string fname)
|
||||
{
|
||||
AC7XorKey key = new AC7XorKey(CalcNameKey(fname), 4);
|
||||
CalcPKeyFromNKey(key.NameKey, key.Offset, out key.pk1, out key.pk2);
|
||||
return key;
|
||||
}
|
||||
|
||||
private static int CalcNameKey(string fname)
|
||||
{
|
||||
fname = fname.ToUpper();
|
||||
int num = 0;
|
||||
for (int i = 0; i < fname.Length; i++)
|
||||
{
|
||||
int num2 = (byte)fname[i];
|
||||
num ^= num2;
|
||||
num2 = num * 8;
|
||||
num2 ^= num;
|
||||
int num3 = num + num;
|
||||
num2 = ~num2;
|
||||
num2 = (num2 >> 7) & 1;
|
||||
num = num2 | num3;
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
private static void CalcPKeyFromNKey(int nkey, int dataoffset, out int pk1, out int pk2)
|
||||
{
|
||||
long num = (uint)((long)nkey * 7L);
|
||||
System.Numerics.BigInteger bigInteger = new System.Numerics.BigInteger(5440514381186227205L);
|
||||
num += dataoffset;
|
||||
System.Numerics.BigInteger bigInteger2 = bigInteger * num;
|
||||
long num2 = (long)(bigInteger2 >> 70);
|
||||
long num3 = num2 >> 63;
|
||||
num2 += num3;
|
||||
num3 = num2 * 217;
|
||||
num -= num3;
|
||||
pk1 = (int)(num & 0xFFFFFFFFu);
|
||||
long num4 = (uint)((long)nkey * 11L);
|
||||
num4 += dataoffset;
|
||||
num2 = 0L;
|
||||
num2 &= 0x3FF;
|
||||
num4 += num2;
|
||||
num4 &= 0x3FF;
|
||||
long num5 = num4 - num2;
|
||||
pk2 = (int)(num5 & 0xFFFFFFFFu);
|
||||
}
|
||||
|
||||
private static byte GetXorByte(byte tagb, ref AC7XorKey xorkey)
|
||||
{
|
||||
if (xorkey == null)
|
||||
{
|
||||
return tagb;
|
||||
}
|
||||
tagb = (byte)((uint)(tagb ^ AC7FullKey[xorkey.pk1 * 1024 + xorkey.pk2]) ^ 0x77u);
|
||||
xorkey.pk1++;
|
||||
xorkey.pk2++;
|
||||
if (xorkey.pk1 >= 217)
|
||||
{
|
||||
xorkey.pk1 = 0;
|
||||
}
|
||||
if (xorkey.pk2 >= 1024)
|
||||
{
|
||||
xorkey.pk2 = 0;
|
||||
}
|
||||
return tagb;
|
||||
}
|
||||
}
|
||||
}
|
207
Translation/UAssetAPI/AssetBinaryReader.cs
Normal file
207
Translation/UAssetAPI/AssetBinaryReader.cs
Normal file
@ -0,0 +1,207 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using UAssetAPI.Kismet.Bytecode;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
public class AssetBinaryReader : BinaryReader
|
||||
{
|
||||
public UAsset Asset;
|
||||
|
||||
public AssetBinaryReader(Stream stream, UAsset asset) : base(stream)
|
||||
{
|
||||
Asset = asset;
|
||||
}
|
||||
|
||||
private byte[] ReverseIfBigEndian(byte[] data)
|
||||
{
|
||||
if (!BitConverter.IsLittleEndian) Array.Reverse(data);
|
||||
return data;
|
||||
}
|
||||
|
||||
public override short ReadInt16()
|
||||
{
|
||||
return BitConverter.ToInt16(ReverseIfBigEndian(base.ReadBytes(2)), 0);
|
||||
}
|
||||
|
||||
public override ushort ReadUInt16()
|
||||
{
|
||||
return BitConverter.ToUInt16(ReverseIfBigEndian(base.ReadBytes(2)), 0);
|
||||
}
|
||||
|
||||
public override int ReadInt32()
|
||||
{
|
||||
return BitConverter.ToInt32(ReverseIfBigEndian(base.ReadBytes(4)), 0);
|
||||
}
|
||||
|
||||
public override uint ReadUInt32()
|
||||
{
|
||||
return BitConverter.ToUInt32(ReverseIfBigEndian(base.ReadBytes(4)), 0);
|
||||
}
|
||||
|
||||
public override long ReadInt64()
|
||||
{
|
||||
return BitConverter.ToInt64(ReverseIfBigEndian(base.ReadBytes(8)), 0);
|
||||
}
|
||||
|
||||
public override ulong ReadUInt64()
|
||||
{
|
||||
return BitConverter.ToUInt64(ReverseIfBigEndian(base.ReadBytes(8)), 0);
|
||||
}
|
||||
|
||||
public override float ReadSingle()
|
||||
{
|
||||
return BitConverter.ToSingle(ReverseIfBigEndian(base.ReadBytes(4)), 0);
|
||||
}
|
||||
|
||||
public override double ReadDouble()
|
||||
{
|
||||
return BitConverter.ToDouble(ReverseIfBigEndian(base.ReadBytes(8)), 0);
|
||||
}
|
||||
|
||||
public override string ReadString()
|
||||
{
|
||||
return ReadFString()?.Value;
|
||||
}
|
||||
|
||||
public virtual Guid? ReadPropertyGuid()
|
||||
{
|
||||
if (Asset.EngineVersion >= UE4Version.VER_UE4_PROPERTY_GUID_IN_PROPERTY_TAG)
|
||||
{
|
||||
bool hasPropertyGuid = ReadBoolean();
|
||||
if (hasPropertyGuid) return new Guid(ReadBytes(16));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public virtual FString ReadFString()
|
||||
{
|
||||
int length = this.ReadInt32();
|
||||
switch (length)
|
||||
{
|
||||
case 0:
|
||||
return null;
|
||||
default:
|
||||
if (length < 0)
|
||||
{
|
||||
byte[] data = this.ReadBytes(-length * 2);
|
||||
return new FString(Encoding.Unicode.GetString(data, 0, data.Length - 2), Encoding.Unicode);
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] data = this.ReadBytes(length);
|
||||
return new FString(Encoding.ASCII.GetString(data, 0, data.Length - 1), Encoding.ASCII);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public virtual FString ReadNameMapString(out uint hashes)
|
||||
{
|
||||
FString str = this.ReadFString();
|
||||
hashes = 0;
|
||||
|
||||
if (Asset.EngineVersion >= UE4Version.VER_UE4_NAME_HASHES_SERIALIZED && !string.IsNullOrEmpty(str.Value))
|
||||
{
|
||||
hashes = this.ReadUInt32();
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
public virtual FName ReadFName()
|
||||
{
|
||||
int nameMapPointer = this.ReadInt32();
|
||||
int number = this.ReadInt32();
|
||||
return new FName(Asset, nameMapPointer, number);
|
||||
}
|
||||
|
||||
public string XFERSTRING()
|
||||
{
|
||||
List<byte> readData = new List<byte>();
|
||||
while (true)
|
||||
{
|
||||
byte newVal = this.ReadByte();
|
||||
if (newVal == 0) break;
|
||||
readData.Add(newVal);
|
||||
}
|
||||
return Encoding.ASCII.GetString(readData.ToArray());
|
||||
}
|
||||
|
||||
public string XFERUNICODESTRING()
|
||||
{
|
||||
List<byte> readData = new List<byte>();
|
||||
while (true)
|
||||
{
|
||||
byte newVal1 = this.ReadByte();
|
||||
byte newVal2 = this.ReadByte();
|
||||
if (newVal1 == 0 && newVal2 == 0) break;
|
||||
readData.Add(newVal1);
|
||||
readData.Add(newVal2);
|
||||
}
|
||||
return Encoding.Unicode.GetString(readData.ToArray());
|
||||
}
|
||||
|
||||
public void XFERTEXT()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public FName XFERNAME()
|
||||
{
|
||||
return this.ReadFName();
|
||||
}
|
||||
|
||||
public FName XFER_FUNC_NAME()
|
||||
{
|
||||
return this.XFERNAME();
|
||||
}
|
||||
|
||||
public FPackageIndex XFERPTR()
|
||||
{
|
||||
return new FPackageIndex(this.ReadInt32());
|
||||
}
|
||||
|
||||
public FPackageIndex XFER_FUNC_POINTER()
|
||||
{
|
||||
return this.XFERPTR();
|
||||
}
|
||||
|
||||
public KismetPropertyPointer XFER_PROP_POINTER()
|
||||
{
|
||||
if (Asset.EngineVersion >= KismetPropertyPointer.XFER_PROP_POINTER_SWITCH_TO_SERIALIZING_AS_FIELD_PATH_VERSION)
|
||||
{
|
||||
int numEntries = this.ReadInt32();
|
||||
FName[] allNames = new FName[numEntries];
|
||||
for (int i = 0; i < numEntries; i++)
|
||||
{
|
||||
allNames[i] = this.ReadFName();
|
||||
}
|
||||
FPackageIndex owner = this.XFER_OBJECT_POINTER();
|
||||
return new KismetPropertyPointer(new FFieldPath(allNames, owner));
|
||||
}
|
||||
else
|
||||
{
|
||||
return new KismetPropertyPointer(this.XFERPTR());
|
||||
}
|
||||
}
|
||||
|
||||
public FPackageIndex XFER_OBJECT_POINTER()
|
||||
{
|
||||
return this.XFERPTR();
|
||||
}
|
||||
|
||||
public KismetExpression[] ReadExpressionArray(EExprToken endToken)
|
||||
{
|
||||
List<KismetExpression> newData = new List<KismetExpression>();
|
||||
KismetExpression currExpression = null;
|
||||
while (currExpression == null || currExpression.Token != endToken)
|
||||
{
|
||||
if (currExpression != null) newData.Add(currExpression);
|
||||
currExpression = ExpressionSerializer.ReadExpression(this);
|
||||
}
|
||||
return newData.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
176
Translation/UAssetAPI/AssetBinaryWriter.cs
Normal file
176
Translation/UAssetAPI/AssetBinaryWriter.cs
Normal file
@ -0,0 +1,176 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using UAssetAPI.Kismet.Bytecode;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
public class AssetBinaryWriter : BinaryWriter
|
||||
{
|
||||
public UAsset Asset;
|
||||
|
||||
public AssetBinaryWriter(UAsset asset) : base()
|
||||
{
|
||||
Asset = asset;
|
||||
}
|
||||
|
||||
public AssetBinaryWriter(Stream stream, UAsset asset) : base(stream)
|
||||
{
|
||||
Asset = asset;
|
||||
}
|
||||
|
||||
public AssetBinaryWriter(Stream stream, Encoding encoding, UAsset asset) : base(stream, encoding)
|
||||
{
|
||||
Asset = asset;
|
||||
}
|
||||
|
||||
public AssetBinaryWriter(Stream stream, Encoding encoding, bool leaveOpen, UAsset asset) : base(stream, encoding, leaveOpen)
|
||||
{
|
||||
Asset = asset;
|
||||
}
|
||||
|
||||
private byte[] ReverseIfBigEndian(byte[] data)
|
||||
{
|
||||
if (!BitConverter.IsLittleEndian) Array.Reverse(data);
|
||||
return data;
|
||||
}
|
||||
|
||||
public override void Write(short value)
|
||||
{
|
||||
this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));
|
||||
}
|
||||
|
||||
public override void Write(ushort value)
|
||||
{
|
||||
this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));
|
||||
}
|
||||
|
||||
public override void Write(int value)
|
||||
{
|
||||
this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));
|
||||
}
|
||||
|
||||
public override void Write(uint value)
|
||||
{
|
||||
this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));
|
||||
}
|
||||
|
||||
public override void Write(long value)
|
||||
{
|
||||
this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));
|
||||
}
|
||||
|
||||
public override void Write(ulong value)
|
||||
{
|
||||
this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));
|
||||
}
|
||||
|
||||
public override void Write(float value)
|
||||
{
|
||||
this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));
|
||||
}
|
||||
|
||||
public override void Write(double value)
|
||||
{
|
||||
this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));
|
||||
}
|
||||
|
||||
public override void Write(string value)
|
||||
{
|
||||
Write(new FString(value));
|
||||
}
|
||||
|
||||
public virtual int Write(FString value)
|
||||
{
|
||||
switch (value?.Value)
|
||||
{
|
||||
case null:
|
||||
this.Write((int)0);
|
||||
return sizeof(int);
|
||||
default:
|
||||
string nullTerminatedStr = value.Value + "\0";
|
||||
this.Write(value.Encoding is UnicodeEncoding ? -nullTerminatedStr.Length : nullTerminatedStr.Length);
|
||||
byte[] actualStrData = value.Encoding.GetBytes(nullTerminatedStr);
|
||||
this.Write(actualStrData);
|
||||
return actualStrData.Length + 4;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Write(FName name)
|
||||
{
|
||||
this.Write(name.Index);
|
||||
this.Write(name.Number);
|
||||
}
|
||||
|
||||
public virtual void WritePropertyGuid(Guid? guid)
|
||||
{
|
||||
if (Asset.EngineVersion >= UE4Version.VER_UE4_PROPERTY_GUID_IN_PROPERTY_TAG)
|
||||
{
|
||||
Write(guid != null);
|
||||
if (guid != null) Write(((Guid)guid).ToByteArray());
|
||||
}
|
||||
}
|
||||
|
||||
public int XFERSTRING(string val)
|
||||
{
|
||||
long startMetric = this.BaseStream.Position;
|
||||
this.Write(Encoding.ASCII.GetBytes(val + "\0"));
|
||||
return (int)(this.BaseStream.Position - startMetric);
|
||||
}
|
||||
|
||||
public int XFERUNICODESTRING(string val)
|
||||
{
|
||||
long startMetric = this.BaseStream.Position;
|
||||
this.Write(Encoding.Unicode.GetBytes(val + "\0"));
|
||||
return (int)(this.BaseStream.Position - startMetric);
|
||||
}
|
||||
|
||||
public int XFERNAME(FName val)
|
||||
{
|
||||
this.Write(val);
|
||||
return 12; // FScriptName's iCode offset is 12 bytes, not 8
|
||||
}
|
||||
|
||||
public int XFER_FUNC_NAME(FName val)
|
||||
{
|
||||
return this.XFERNAME(val);
|
||||
}
|
||||
|
||||
private static readonly int PointerSize = sizeof(ulong);
|
||||
|
||||
public int XFERPTR(FPackageIndex val)
|
||||
{
|
||||
this.Write(val.Index);
|
||||
return PointerSize; // For the iCode offset, we return the size of a pointer in memory rather than the size of an FPackageIndex on disk
|
||||
}
|
||||
|
||||
public int XFER_FUNC_POINTER(FPackageIndex val)
|
||||
{
|
||||
return this.XFERPTR(val);
|
||||
}
|
||||
|
||||
public int XFER_PROP_POINTER(KismetPropertyPointer val)
|
||||
{
|
||||
if (Asset.EngineVersion >= KismetPropertyPointer.XFER_PROP_POINTER_SWITCH_TO_SERIALIZING_AS_FIELD_PATH_VERSION)
|
||||
{
|
||||
this.Write(val.New.Path.Length);
|
||||
for (int i = 0; i < val.New.Path.Length; i++)
|
||||
{
|
||||
this.XFERNAME(val.New.Path[i]);
|
||||
}
|
||||
this.XFER_OBJECT_POINTER(val.New.ResolvedOwner);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.XFERPTR(val.Old);
|
||||
}
|
||||
return PointerSize;
|
||||
}
|
||||
|
||||
public int XFER_OBJECT_POINTER(FPackageIndex val)
|
||||
{
|
||||
return this.XFERPTR(val);
|
||||
}
|
||||
}
|
||||
}
|
233
Translation/UAssetAPI/CRCGenerator.cs
Normal file
233
Translation/UAssetAPI/CRCGenerator.cs
Normal file
@ -0,0 +1,233 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
public static class CRCGenerator
|
||||
{
|
||||
public static uint GenerateHash(FString text)
|
||||
{
|
||||
return GenerateHash(text?.Value, text?.Encoding);
|
||||
}
|
||||
|
||||
public static uint GenerateHash(string text)
|
||||
{
|
||||
return GenerateHash(text, Encoding.ASCII);
|
||||
}
|
||||
|
||||
public static uint GenerateHash(string text, Encoding encoding)
|
||||
{
|
||||
uint algor1 = Strihash_DEPRECATED(text, encoding);
|
||||
uint algor2 = StrCrc32(text);
|
||||
return (algor1 & 0xFFFF) | ((algor2 & 0xFFFF) << 16);
|
||||
}
|
||||
|
||||
private static char ToUpper(char input)
|
||||
{
|
||||
return (char)((uint)input - ((((uint)input - 'a' < 26u) ? 1 : 0) << 5));
|
||||
}
|
||||
|
||||
private static uint Strihash_DEPRECATED(string text, Encoding encoding)
|
||||
{
|
||||
uint hash = 0;
|
||||
for (int i = 0; i < text.Length; i++)
|
||||
{
|
||||
char B = ToUpper(text[i]);
|
||||
byte[] rawDataForCharacter = encoding.GetBytes(new char[1] { B });
|
||||
foreach (byte rawByte in rawDataForCharacter)
|
||||
{
|
||||
hash = ((hash >> 8) & 0x00FFFFFF) ^ CRCTable_DEPRECATED[(hash ^ rawByte) & 0x000000FF];
|
||||
}
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
||||
// Accurate as-is for both WIDECHAR and ANSICHAR
|
||||
private static uint StrCrc32(string text, uint CRC = 0)
|
||||
{
|
||||
CRC = ~CRC;
|
||||
for (int i = 0; i < text.Length; i++)
|
||||
{
|
||||
char Ch = text[i];
|
||||
CRC = (CRC >> 8) ^ CRCTablesSB8[0, (CRC ^ Ch) & 0xFF];
|
||||
Ch >>= 8;
|
||||
CRC = (CRC >> 8) ^ CRCTablesSB8[0, (CRC ^ Ch) & 0xFF];
|
||||
Ch >>= 8;
|
||||
CRC = (CRC >> 8) ^ CRCTablesSB8[0, (CRC ^ Ch) & 0xFF];
|
||||
Ch >>= 8;
|
||||
CRC = (CRC >> 8) ^ CRCTablesSB8[0, (CRC ^ Ch) & 0xFF];
|
||||
}
|
||||
return ~CRC;
|
||||
}
|
||||
|
||||
private static readonly uint[] CRCTable_DEPRECATED = new uint[256]
|
||||
{
|
||||
0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9, 0x130476DC, 0x17C56B6B, 0x1A864DB2, 0x1E475005, 0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6, 0x2B4BCB61, 0x350C9B64, 0x31CD86D3, 0x3C8EA00A, 0x384FBDBD,
|
||||
0x4C11DB70, 0x48D0C6C7, 0x4593E01E, 0x4152FDA9, 0x5F15ADAC, 0x5BD4B01B, 0x569796C2, 0x52568B75, 0x6A1936C8, 0x6ED82B7F, 0x639B0DA6, 0x675A1011, 0x791D4014, 0x7DDC5DA3, 0x709F7B7A, 0x745E66CD,
|
||||
0x9823B6E0, 0x9CE2AB57, 0x91A18D8E, 0x95609039, 0x8B27C03C, 0x8FE6DD8B, 0x82A5FB52, 0x8664E6E5, 0xBE2B5B58, 0xBAEA46EF, 0xB7A96036, 0xB3687D81, 0xAD2F2D84, 0xA9EE3033, 0xA4AD16EA, 0xA06C0B5D,
|
||||
0xD4326D90, 0xD0F37027, 0xDDB056FE, 0xD9714B49, 0xC7361B4C, 0xC3F706FB, 0xCEB42022, 0xCA753D95, 0xF23A8028, 0xF6FB9D9F, 0xFBB8BB46, 0xFF79A6F1, 0xE13EF6F4, 0xE5FFEB43, 0xE8BCCD9A, 0xEC7DD02D,
|
||||
0x34867077, 0x30476DC0, 0x3D044B19, 0x39C556AE, 0x278206AB, 0x23431B1C, 0x2E003DC5, 0x2AC12072, 0x128E9DCF, 0x164F8078, 0x1B0CA6A1, 0x1FCDBB16, 0x018AEB13, 0x054BF6A4, 0x0808D07D, 0x0CC9CDCA,
|
||||
0x7897AB07, 0x7C56B6B0, 0x71159069, 0x75D48DDE, 0x6B93DDDB, 0x6F52C06C, 0x6211E6B5, 0x66D0FB02, 0x5E9F46BF, 0x5A5E5B08, 0x571D7DD1, 0x53DC6066, 0x4D9B3063, 0x495A2DD4, 0x44190B0D, 0x40D816BA,
|
||||
0xACA5C697, 0xA864DB20, 0xA527FDF9, 0xA1E6E04E, 0xBFA1B04B, 0xBB60ADFC, 0xB6238B25, 0xB2E29692, 0x8AAD2B2F, 0x8E6C3698, 0x832F1041, 0x87EE0DF6, 0x99A95DF3, 0x9D684044, 0x902B669D, 0x94EA7B2A,
|
||||
0xE0B41DE7, 0xE4750050, 0xE9362689, 0xEDF73B3E, 0xF3B06B3B, 0xF771768C, 0xFA325055, 0xFEF34DE2, 0xC6BCF05F, 0xC27DEDE8, 0xCF3ECB31, 0xCBFFD686, 0xD5B88683, 0xD1799B34, 0xDC3ABDED, 0xD8FBA05A,
|
||||
0x690CE0EE, 0x6DCDFD59, 0x608EDB80, 0x644FC637, 0x7A089632, 0x7EC98B85, 0x738AAD5C, 0x774BB0EB, 0x4F040D56, 0x4BC510E1, 0x46863638, 0x42472B8F, 0x5C007B8A, 0x58C1663D, 0x558240E4, 0x51435D53,
|
||||
0x251D3B9E, 0x21DC2629, 0x2C9F00F0, 0x285E1D47, 0x36194D42, 0x32D850F5, 0x3F9B762C, 0x3B5A6B9B, 0x0315D626, 0x07D4CB91, 0x0A97ED48, 0x0E56F0FF, 0x1011A0FA, 0x14D0BD4D, 0x19939B94, 0x1D528623,
|
||||
0xF12F560E, 0xF5EE4BB9, 0xF8AD6D60, 0xFC6C70D7, 0xE22B20D2, 0xE6EA3D65, 0xEBA91BBC, 0xEF68060B, 0xD727BBB6, 0xD3E6A601, 0xDEA580D8, 0xDA649D6F, 0xC423CD6A, 0xC0E2D0DD, 0xCDA1F604, 0xC960EBB3,
|
||||
0xBD3E8D7E, 0xB9FF90C9, 0xB4BCB610, 0xB07DABA7, 0xAE3AFBA2, 0xAAFBE615, 0xA7B8C0CC, 0xA379DD7B, 0x9B3660C6, 0x9FF77D71, 0x92B45BA8, 0x9675461F, 0x8832161A, 0x8CF30BAD, 0x81B02D74, 0x857130C3,
|
||||
0x5D8A9099, 0x594B8D2E, 0x5408ABF7, 0x50C9B640, 0x4E8EE645, 0x4A4FFBF2, 0x470CDD2B, 0x43CDC09C, 0x7B827D21, 0x7F436096, 0x7200464F, 0x76C15BF8, 0x68860BFD, 0x6C47164A, 0x61043093, 0x65C52D24,
|
||||
0x119B4BE9, 0x155A565E, 0x18197087, 0x1CD86D30, 0x029F3D35, 0x065E2082, 0x0B1D065B, 0x0FDC1BEC, 0x3793A651, 0x3352BBE6, 0x3E119D3F, 0x3AD08088, 0x2497D08D, 0x2056CD3A, 0x2D15EBE3, 0x29D4F654,
|
||||
0xC5A92679, 0xC1683BCE, 0xCC2B1D17, 0xC8EA00A0, 0xD6AD50A5, 0xD26C4D12, 0xDF2F6BCB, 0xDBEE767C, 0xE3A1CBC1, 0xE760D676, 0xEA23F0AF, 0xEEE2ED18, 0xF0A5BD1D, 0xF464A0AA, 0xF9278673, 0xFDE69BC4,
|
||||
0x89B8FD09, 0x8D79E0BE, 0x803AC667, 0x84FBDBD0, 0x9ABC8BD5, 0x9E7D9662, 0x933EB0BB, 0x97FFAD0C, 0xAFB010B1, 0xAB710D06, 0xA6322BDF, 0xA2F33668, 0xBCB4666D, 0xB8757BDA, 0xB5365D03, 0xB1F740B4
|
||||
};
|
||||
|
||||
private static readonly uint[,] CRCTablesSB8 = new uint[8, 256]
|
||||
{
|
||||
{
|
||||
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
|
||||
0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
|
||||
0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
|
||||
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
|
||||
0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
|
||||
0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
|
||||
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
|
||||
0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
|
||||
0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
|
||||
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
|
||||
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
|
||||
0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
|
||||
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
|
||||
0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
|
||||
0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
|
||||
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
|
||||
},
|
||||
{
|
||||
0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, 0x87981ccf,
|
||||
0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, 0xd4413fdf, 0xcd5a0e9e,
|
||||
0x958424a2, 0x8c9f15e3, 0xa7b24620, 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae, 0x202a5aef, 0x0b07092c, 0x121c386d,
|
||||
0xdf4636f3, 0xc65d07b2, 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c,
|
||||
0xf0794f05, 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca,
|
||||
0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850, 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, 0x3d23419b,
|
||||
0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af, 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, 0xfb7e4629, 0xe2657768,
|
||||
0x2f3f79f6, 0x362448b7, 0x1d091b74, 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, 0x9a9107bb, 0xb1bc5478, 0xa8a76539,
|
||||
0x3b83984b, 0x2298a90a, 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180, 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484,
|
||||
0x71418a1a, 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5,
|
||||
0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0, 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167, 0x299fa026,
|
||||
0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, 0x7a468336, 0x635db277,
|
||||
0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842, 0x7e54a903, 0x5579fac0, 0x4c62cb81,
|
||||
0x8138c51f, 0x9823f45e, 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0,
|
||||
0x5e7ef3ec, 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23,
|
||||
0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, 0x9324fd72
|
||||
},
|
||||
{
|
||||
0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a, 0x0b5c473d,
|
||||
0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, 0x16b88e7a, 0x177ae44d,
|
||||
0x384d46e0, 0x398f2cd7, 0x3bc9928e, 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84, 0x3095d5b3, 0x32d36bea, 0x331101dd,
|
||||
0x246be590, 0x25a98fa7, 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad,
|
||||
0x709a8dc0, 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd,
|
||||
0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c, 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, 0x67e0698d,
|
||||
0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98, 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, 0x4249e62a, 0x438b8c1d,
|
||||
0x54f16850, 0x55330267, 0x5775bc3e, 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d,
|
||||
0xe1351b80, 0xe0f771b7, 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732, 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461, 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd,
|
||||
0xfd13b8f0, 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd,
|
||||
0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef, 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a, 0xd2241a5d,
|
||||
0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, 0xcfc0d31a, 0xce02b92d,
|
||||
0x91af9640, 0x906dfc77, 0x922b422e, 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24, 0x99770513, 0x9b31bb4a, 0x9af3d17d,
|
||||
0x8d893530, 0x8c4b5f07, 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d,
|
||||
0xa9e2d0a0, 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d,
|
||||
0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, 0xbe9834ed
|
||||
},
|
||||
{
|
||||
0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, 0x58631056,
|
||||
0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, 0xb0c620ac, 0x087a47c9,
|
||||
0xa032af3e, 0x188ec85b, 0x0a3b67b5, 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086, 0x525877e3, 0x40edd80d, 0xf851bf68,
|
||||
0xf02bf8a1, 0x48979fc4, 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7,
|
||||
0x9b14583d, 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b,
|
||||
0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5, 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, 0x936e1ff4,
|
||||
0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, 0xdbf98030, 0x6345e755,
|
||||
0x6b3fa09c, 0xd383c7f9, 0xc1366817, 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, 0x99557841, 0x8be0d7af, 0x335cb0ca,
|
||||
0xed59b63b, 0x55e5d15e, 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7, 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a, 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d,
|
||||
0xbd40e1a4, 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2,
|
||||
0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f, 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36, 0x15080953,
|
||||
0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, 0xfdad39a9, 0x45115ecc,
|
||||
0x764dee06, 0xcef18963, 0xdc44268d, 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be, 0x842736db, 0x96929935, 0x2e2efe50,
|
||||
0x2654b999, 0x9ee8defc, 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf,
|
||||
0xd67f4138, 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e,
|
||||
0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194, 0xde0506f1
|
||||
},
|
||||
{
|
||||
0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, 0x825097d1,
|
||||
0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, 0xdfd029e3, 0xe2b00053,
|
||||
0xc1c12f04, 0xfca106b4, 0xbb017c64, 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205, 0x3951ebb5, 0x7ef19165, 0x4391b8d5,
|
||||
0xa121b886, 0x9c419136, 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57,
|
||||
0x58f35849, 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98,
|
||||
0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b, 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, 0xba43581a,
|
||||
0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c, 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, 0x2602c92c, 0x1b62e09c,
|
||||
0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, 0x0142247e, 0x46e25eae, 0x7b82771e,
|
||||
0xb1e6b092, 0x8c869922, 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532, 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183, 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743,
|
||||
0xd1062710, 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1,
|
||||
0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7, 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7, 0xf2770847,
|
||||
0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, 0xaff7b675, 0x92979fc5,
|
||||
0xe915e8db, 0xd475c16b, 0x93d5bbbb, 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da, 0x11852c6a, 0x562556ba, 0x6b457f0a,
|
||||
0x89f57f59, 0xb49556e9, 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888,
|
||||
0x28d4c7df, 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e,
|
||||
0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, 0xca64c78c
|
||||
},
|
||||
{
|
||||
0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, 0xf156b2d5,
|
||||
0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, 0x39dc63eb, 0xf280b04e,
|
||||
0x07ac0536, 0xccf0d693, 0x4a64a43d, 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d, 0xbb3216e8, 0x3da66446, 0xf6fab7e3,
|
||||
0x047a07ad, 0xcf26d408, 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578,
|
||||
0x0f580a6c, 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9,
|
||||
0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1, 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, 0xfdd8ba22,
|
||||
0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37, 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, 0x32fe6e2a, 0xf9a2bd8f,
|
||||
0x0b220dc1, 0xc07ede64, 0x46eaacca, 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14,
|
||||
0x1eb014d8, 0xd5ecc77d, 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b, 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d,
|
||||
0x1d661643, 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496,
|
||||
0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026, 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e, 0xe84aa33b,
|
||||
0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, 0x20c07205, 0xeb9ca1a0,
|
||||
0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf, 0xad760d6a, 0x2be27fc4, 0xe0beac61,
|
||||
0x123e1c2f, 0xd962cf8a, 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa,
|
||||
0x16441b82, 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957,
|
||||
0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869, 0xe4c4abcc
|
||||
},
|
||||
{
|
||||
0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d, 0xf64870e9,
|
||||
0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, 0x37e1e793, 0x9196ec27,
|
||||
0xcfbd399c, 0x69ca3228, 0x582228b5, 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, 0xae6a585c, 0x9f8242c1, 0x39f54975,
|
||||
0xa863a552, 0x0e14aee6, 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb,
|
||||
0x440b7579, 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590,
|
||||
0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4, 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, 0xd59d995e,
|
||||
0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282, 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, 0xdb8937b8, 0x7dfe3c0c,
|
||||
0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2,
|
||||
0x8816eaf2, 0x2e61e146, 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08, 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b,
|
||||
0xefc8763c, 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5,
|
||||
0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd, 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833, 0xb1e3a387,
|
||||
0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, 0x704a34fd, 0xd63d3f49,
|
||||
0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff, 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62,
|
||||
0xabc30345, 0x0db408f1, 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac,
|
||||
0x03a0a617, 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe,
|
||||
0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184, 0x92364a30
|
||||
},
|
||||
{
|
||||
0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232, 0xd92012ac,
|
||||
0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, 0x69312319, 0xa59b2387,
|
||||
0xf9766256, 0x35dc62c8, 0xbb53652b, 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719, 0x62737787, 0xecfc7064, 0x205670fa,
|
||||
0x85cd537d, 0x496753e3, 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1,
|
||||
0x299dc2ed, 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041,
|
||||
0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c, 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, 0x8c06e16a,
|
||||
0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, 0xc561b289, 0x09cbb217,
|
||||
0xac509190, 0x60fa910e, 0xee7596ed, 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, 0x37558441, 0xb9da83a2, 0x7570833c,
|
||||
0x533b85da, 0x9f918544, 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c, 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776,
|
||||
0x2f80b4f1, 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d,
|
||||
0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7, 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be, 0x736df520,
|
||||
0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, 0xc37cc495, 0x0fd6c40b,
|
||||
0x7aa64737, 0xb60c47a9, 0x3883404a, 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278, 0xe1a352e6, 0x6f2c5505, 0xa386559b,
|
||||
0x061d761c, 0xcab77682, 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0,
|
||||
0x83d02561, 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd,
|
||||
0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678, 0x264b06e6
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
1109
Translation/UAssetAPI/CustomVersion.cs
Normal file
1109
Translation/UAssetAPI/CustomVersion.cs
Normal file
File diff suppressed because it is too large
Load Diff
217
Translation/UAssetAPI/ExportTypes/ClassExport.cs
Normal file
217
Translation/UAssetAPI/ExportTypes/ClassExport.cs
Normal file
@ -0,0 +1,217 @@
|
||||
using Newtonsoft.Json;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using UAssetAPI.JSON;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an interface that a UClass (<see cref="ClassExport"/>) implements.
|
||||
/// </summary>
|
||||
public struct SerializedInterfaceReference
|
||||
{
|
||||
public int Class;
|
||||
public int PointerOffset;
|
||||
public bool bImplementedByK2;
|
||||
|
||||
public SerializedInterfaceReference(int @class, int pointerOffset, bool bImplementedByK2)
|
||||
{
|
||||
Class = @class;
|
||||
PointerOffset = pointerOffset;
|
||||
this.bImplementedByK2 = bImplementedByK2;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents an object class.
|
||||
/// </summary>
|
||||
public class ClassExport : StructExport
|
||||
{
|
||||
/// <summary>
|
||||
/// Map of all functions by name contained in this class
|
||||
/// </summary>
|
||||
[JsonConverter(typeof(TMapJsonConverter<FName, FPackageIndex>))]
|
||||
public TMap<FName, FPackageIndex> FuncMap;
|
||||
|
||||
/// <summary>
|
||||
/// Class flags; See <see cref="EClassFlags"/> for more information
|
||||
/// </summary>
|
||||
public EClassFlags ClassFlags;
|
||||
|
||||
/// <summary>
|
||||
/// The required type for the outer of instances of this class
|
||||
/// </summary>
|
||||
public FPackageIndex ClassWithin;
|
||||
|
||||
/// <summary>
|
||||
/// Which Name.ini file to load Config variables out of
|
||||
/// </summary>
|
||||
public FName ClassConfigName;
|
||||
|
||||
/// <summary>
|
||||
/// The list of interfaces which this class implements, along with the pointer property that is located at the offset of the interface's vtable.
|
||||
/// If the interface class isn't native, the property will be empty.
|
||||
/// </summary>
|
||||
public SerializedInterfaceReference[] Interfaces;
|
||||
|
||||
/// <summary>
|
||||
/// This is the blueprint that caused the generation of this class, or null if it is a native compiled-in class
|
||||
/// </summary>
|
||||
public FPackageIndex ClassGeneratedBy;
|
||||
|
||||
/// <summary>
|
||||
/// Does this class use deprecated script order?
|
||||
/// </summary>
|
||||
public bool bDeprecatedForceScriptOrder;
|
||||
|
||||
/// <summary>
|
||||
/// Used to check if the class was cooked or not
|
||||
/// </summary>
|
||||
public bool bCooked;
|
||||
|
||||
/// <summary>
|
||||
/// The class default object; used for delta serialization and object initialization
|
||||
/// </summary>
|
||||
public FPackageIndex ClassDefaultObject;
|
||||
|
||||
public ClassExport(Export super) : base(super)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public ClassExport(UAsset asset, byte[] extras) : base(asset, extras)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public ClassExport()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Read(AssetBinaryReader reader, int nextStarting)
|
||||
{
|
||||
base.Read(reader, nextStarting);
|
||||
|
||||
int numFuncIndexEntries = reader.ReadInt32();
|
||||
FuncMap = new TMap<FName, FPackageIndex>();
|
||||
for (int i = 0; i < numFuncIndexEntries; i++)
|
||||
{
|
||||
FName functionName = reader.ReadFName();
|
||||
FPackageIndex functionExport = FPackageIndex.FromRawIndex(reader.ReadInt32());
|
||||
|
||||
FuncMap.Add(functionName, functionExport);
|
||||
}
|
||||
|
||||
ClassFlags = (EClassFlags)reader.ReadUInt32();
|
||||
|
||||
if (Asset.EngineVersion < UE4Version.VER_UE4_CLASS_NOTPLACEABLE_ADDED)
|
||||
{
|
||||
ClassFlags ^= EClassFlags.CLASS_NotPlaceable;
|
||||
}
|
||||
|
||||
ClassWithin = new FPackageIndex(reader.ReadInt32());
|
||||
ClassConfigName = reader.ReadFName();
|
||||
Asset.AddNameReference(ClassConfigName.Value);
|
||||
|
||||
int numInterfaces = 0;
|
||||
long interfacesStart = 0;
|
||||
if (Asset.EngineVersion < UE4Version.VER_UE4_UCLASS_SERIALIZE_INTERFACES_AFTER_LINKING)
|
||||
{
|
||||
interfacesStart = reader.BaseStream.Position;
|
||||
numInterfaces = reader.ReadInt32();
|
||||
reader.BaseStream.Seek(interfacesStart + sizeof(int) + numInterfaces * (sizeof(int) * 3), SeekOrigin.Begin);
|
||||
}
|
||||
|
||||
// Linking procedure here; I don't think anything is really serialized during this
|
||||
ClassGeneratedBy = new FPackageIndex(reader.ReadInt32());
|
||||
|
||||
long currentOffset = reader.BaseStream.Position;
|
||||
if (Asset.EngineVersion < UE4Version.VER_UE4_UCLASS_SERIALIZE_INTERFACES_AFTER_LINKING)
|
||||
{
|
||||
reader.BaseStream.Seek(interfacesStart, SeekOrigin.Begin);
|
||||
}
|
||||
numInterfaces = reader.ReadInt32();
|
||||
Interfaces = new SerializedInterfaceReference[numInterfaces];
|
||||
for (int i = 0; i < numInterfaces; i++)
|
||||
{
|
||||
Interfaces[i] = new SerializedInterfaceReference(reader.ReadInt32(), reader.ReadInt32(), reader.ReadInt32() == 1);
|
||||
}
|
||||
if (Asset.EngineVersion < UE4Version.VER_UE4_UCLASS_SERIALIZE_INTERFACES_AFTER_LINKING)
|
||||
{
|
||||
reader.BaseStream.Seek(currentOffset, SeekOrigin.Begin);
|
||||
}
|
||||
|
||||
bDeprecatedForceScriptOrder = reader.ReadInt32() == 1;
|
||||
|
||||
reader.ReadInt64(); // None
|
||||
|
||||
if (Asset.EngineVersion >= UE4Version.VER_UE4_ADD_COOKED_TO_UCLASS)
|
||||
{
|
||||
bCooked = reader.ReadInt32() == 1;
|
||||
}
|
||||
|
||||
ClassDefaultObject = new FPackageIndex(reader.ReadInt32());
|
||||
|
||||
// CDO serialization usually comes after this export has finished serializing
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
|
||||
writer.Write(FuncMap.Count);
|
||||
for (int i = 0; i < FuncMap.Count; i++)
|
||||
{
|
||||
writer.Write(FuncMap.Keys.ElementAt(i));
|
||||
writer.Write(FuncMap[i].Index);
|
||||
}
|
||||
|
||||
EClassFlags serializingClassFlags = ClassFlags;
|
||||
if (Asset.EngineVersion < UE4Version.VER_UE4_CLASS_NOTPLACEABLE_ADDED)
|
||||
{
|
||||
serializingClassFlags ^= EClassFlags.CLASS_NotPlaceable;
|
||||
}
|
||||
writer.Write((uint)serializingClassFlags);
|
||||
|
||||
writer.Write(ClassWithin.Index);
|
||||
writer.Write(ClassConfigName);
|
||||
|
||||
if (Asset.EngineVersion < UE4Version.VER_UE4_UCLASS_SERIALIZE_INTERFACES_AFTER_LINKING)
|
||||
{
|
||||
SerializeInterfaces(writer);
|
||||
}
|
||||
|
||||
// Linking procedure here; I don't think anything is really serialized during this
|
||||
writer.Write(ClassGeneratedBy.Index);
|
||||
|
||||
if (Asset.EngineVersion >= UE4Version.VER_UE4_UCLASS_SERIALIZE_INTERFACES_AFTER_LINKING)
|
||||
{
|
||||
SerializeInterfaces(writer);
|
||||
}
|
||||
|
||||
writer.Write(bDeprecatedForceScriptOrder ? 1 : 0);
|
||||
|
||||
writer.Write(new FName(writer.Asset, "None"));
|
||||
|
||||
if (Asset.EngineVersion >= UE4Version.VER_UE4_ADD_COOKED_TO_UCLASS)
|
||||
{
|
||||
writer.Write(bCooked ? 1 : 0);
|
||||
}
|
||||
|
||||
writer.Write(ClassDefaultObject.Index);
|
||||
}
|
||||
|
||||
private void SerializeInterfaces(BinaryWriter writer)
|
||||
{
|
||||
writer.Write(Interfaces.Length);
|
||||
for (int i = 0; i < Interfaces.Length; i++)
|
||||
{
|
||||
writer.Write(Interfaces[i].Class);
|
||||
writer.Write(Interfaces[i].PointerOffset);
|
||||
writer.Write(Interfaces[i].bImplementedByK2 ? 1 : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
108
Translation/UAssetAPI/ExportTypes/DataTableExport.cs
Normal file
108
Translation/UAssetAPI/ExportTypes/DataTableExport.cs
Normal file
@ -0,0 +1,108 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UAssetAPI.PropertyTypes.Objects;
|
||||
using UAssetAPI.PropertyTypes.Structs;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
/// <summary>
|
||||
/// Imported spreadsheet table.
|
||||
/// </summary>
|
||||
public class UDataTable
|
||||
{
|
||||
public List<StructPropertyData> Data;
|
||||
|
||||
public UDataTable()
|
||||
{
|
||||
Data = new List<StructPropertyData>();
|
||||
}
|
||||
|
||||
public UDataTable(List<StructPropertyData> data)
|
||||
{
|
||||
Data = data;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Export for an imported spreadsheet table. See <see cref="UDataTable"/>.
|
||||
/// </summary>
|
||||
public class DataTableExport : NormalExport
|
||||
{
|
||||
public UDataTable Table;
|
||||
|
||||
public DataTableExport(Export super) : base(super)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public DataTableExport(UDataTable data, UAsset asset, byte[] extras) : base(asset, extras)
|
||||
{
|
||||
Table = data;
|
||||
}
|
||||
|
||||
public DataTableExport()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Read(AssetBinaryReader reader, int nextStarting)
|
||||
{
|
||||
base.Read(reader, nextStarting);
|
||||
|
||||
// Find an ObjectProperty named RowStruct
|
||||
FName decidedStructType = FName.DefineDummy(reader.Asset, "Generic");
|
||||
foreach (PropertyData thisData in Data)
|
||||
{
|
||||
if (thisData.Name.Value.Value == "RowStruct" && thisData is ObjectPropertyData thisObjData && thisObjData.Value.IsImport())
|
||||
{
|
||||
decidedStructType = thisObjData.ToImport(reader.Asset).ObjectName;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
reader.ReadInt32();
|
||||
|
||||
Table = new UDataTable();
|
||||
|
||||
int numEntries = reader.ReadInt32();
|
||||
for (int i = 0; i < numEntries; i++)
|
||||
{
|
||||
FName rowName = reader.ReadFName();
|
||||
var nextStruct = new StructPropertyData(rowName)
|
||||
{
|
||||
StructType = decidedStructType
|
||||
};
|
||||
nextStruct.Read(reader, false, 1);
|
||||
Table.Data.Add(nextStruct);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
|
||||
// Find an ObjectProperty named RowStruct
|
||||
FName decidedStructType = FName.DefineDummy(writer.Asset, "Generic");
|
||||
foreach (PropertyData thisData in Data)
|
||||
{
|
||||
if (thisData.Name.Value.Value == "RowStruct" && thisData is ObjectPropertyData thisObjData)
|
||||
{
|
||||
decidedStructType = thisObjData.ToImport(writer.Asset).ObjectName;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
writer.Write((int)0);
|
||||
|
||||
writer.Write(Table.Data.Count);
|
||||
for (int i = 0; i < Table.Data.Count; i++)
|
||||
{
|
||||
var thisDataTableEntry = Table.Data[i];
|
||||
thisDataTableEntry.StructType = decidedStructType;
|
||||
writer.Write(thisDataTableEntry.Name);
|
||||
thisDataTableEntry.Write(writer, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
155
Translation/UAssetAPI/ExportTypes/EnumExport.cs
Normal file
155
Translation/UAssetAPI/ExportTypes/EnumExport.cs
Normal file
@ -0,0 +1,155 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
/// <summary>How this enum is declared in C++. Affects the internal naming of enum values.</summary>
|
||||
public enum ECppForm
|
||||
{
|
||||
Regular,
|
||||
Namespaced,
|
||||
EnumClass
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reflection data for an enumeration.
|
||||
/// </summary>
|
||||
public class UEnum
|
||||
{
|
||||
/// <summary>List of pairs of all enum names and values.</summary>
|
||||
public List<Tuple<FName, long>> Names;
|
||||
|
||||
/// <summary>How the enum was originally defined.</summary>
|
||||
public ECppForm CppForm = ECppForm.Regular;
|
||||
|
||||
public void Read(AssetBinaryReader reader, UAsset asset)
|
||||
{
|
||||
if (asset.EngineVersion < UE4Version.VER_UE4_TIGHTLY_PACKED_ENUMS)
|
||||
{
|
||||
int numEntries = reader.ReadInt32();
|
||||
for (int i = 0; i < numEntries; i++)
|
||||
{
|
||||
FName tempName = reader.ReadFName();
|
||||
Names.Add(new Tuple<FName, long>(tempName, i));
|
||||
}
|
||||
}
|
||||
else if (asset.GetCustomVersion<FCoreObjectVersion>() < FCoreObjectVersion.EnumProperties)
|
||||
{
|
||||
int numEntries = reader.ReadInt32();
|
||||
for (int i = 0; i < numEntries; i++)
|
||||
{
|
||||
FName tempName = reader.ReadFName();
|
||||
byte tempVal = reader.ReadByte();
|
||||
Names.Add(new Tuple<FName, long>(tempName, tempVal));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int numEntries = reader.ReadInt32();
|
||||
for (int i = 0; i < numEntries; i++)
|
||||
{
|
||||
FName tempName = reader.ReadFName();
|
||||
long tempVal = reader.ReadInt64();
|
||||
Names.Add(new Tuple<FName, long>(tempName, tempVal));
|
||||
}
|
||||
}
|
||||
|
||||
if (asset.EngineVersion < UE4Version.VER_UE4_ENUM_CLASS_SUPPORT)
|
||||
{
|
||||
bool bIsNamespace = reader.ReadInt32() == 1;
|
||||
CppForm = bIsNamespace ? ECppForm.Namespaced : ECppForm.Regular;
|
||||
}
|
||||
else
|
||||
{
|
||||
CppForm = (ECppForm)reader.ReadByte();
|
||||
}
|
||||
}
|
||||
|
||||
public void Write(AssetBinaryWriter writer, UAsset asset)
|
||||
{
|
||||
writer.Write(Names.Count);
|
||||
if (asset.EngineVersion < UE4Version.VER_UE4_TIGHTLY_PACKED_ENUMS)
|
||||
{
|
||||
var namesForSerialization = new Dictionary<long, FName>();
|
||||
for (int i = 0; i < Names.Count; i++) namesForSerialization.Add(Names[i].Item2, Names[i].Item1);
|
||||
for (int i = 0; i < Names.Count; i++)
|
||||
{
|
||||
if (namesForSerialization.ContainsKey(i)) writer.Write(namesForSerialization[i]);
|
||||
}
|
||||
}
|
||||
else if (asset.GetCustomVersion<FCoreObjectVersion>() < FCoreObjectVersion.EnumProperties)
|
||||
{
|
||||
for (int i = 0; i < Names.Count; i++)
|
||||
{
|
||||
writer.Write(Names[i].Item1);
|
||||
writer.Write((byte)Names[i].Item2);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < Names.Count; i++)
|
||||
{
|
||||
writer.Write(Names[i].Item1);
|
||||
writer.Write(Names[i].Item2);
|
||||
}
|
||||
}
|
||||
|
||||
if (asset.EngineVersion < UE4Version.VER_UE4_ENUM_CLASS_SUPPORT)
|
||||
{
|
||||
writer.Write(CppForm == ECppForm.Namespaced ? 1 : 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.Write((byte)CppForm);
|
||||
}
|
||||
}
|
||||
|
||||
public UEnum()
|
||||
{
|
||||
Names = new List<Tuple<FName, long>>();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Export data for an enumeration. See <see cref="UEnum"/>.
|
||||
/// </summary>
|
||||
public class EnumExport : NormalExport
|
||||
{
|
||||
/// <summary>The enum that is stored in this export.</summary>
|
||||
public UEnum Enum;
|
||||
|
||||
public EnumExport(Export super) : base(super)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public EnumExport(UAsset asset, byte[] extras) : base(asset, extras)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public EnumExport()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Read(AssetBinaryReader reader, int nextStarting)
|
||||
{
|
||||
base.Read(reader, nextStarting);
|
||||
reader.ReadInt32();
|
||||
|
||||
Enum = new UEnum();
|
||||
Enum.Read(reader, Asset);
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write((int)0);
|
||||
|
||||
Enum.Write(writer, Asset);
|
||||
}
|
||||
}
|
||||
}
|
199
Translation/UAssetAPI/ExportTypes/Export.cs
Normal file
199
Translation/UAssetAPI/ExportTypes/Export.cs
Normal file
@ -0,0 +1,199 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Field)]
|
||||
internal class DisplayIndexOrderAttribute : Attribute
|
||||
{
|
||||
internal int DisplayingIndex = 0;
|
||||
internal DisplayIndexOrderAttribute(int displayingIndex)
|
||||
{
|
||||
DisplayingIndex = displayingIndex;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// UObject resource type for objects that are contained within this package and can be referenced by other packages.
|
||||
/// </summary>
|
||||
[JsonObject(MemberSerialization.OptOut)]
|
||||
public class Export : FObjectResource, ICloneable
|
||||
{
|
||||
///<summary>Location of this export's class (import/other export). 0 = this export is a UClass</summary>
|
||||
[DisplayIndexOrder(2)]
|
||||
public FPackageIndex ClassIndex;
|
||||
///<summary>Location of this export's parent class (import/other export). 0 = this export is not derived from UStruct</summary>
|
||||
[DisplayIndexOrder(3)]
|
||||
public FPackageIndex SuperIndex;
|
||||
///<summary>Location of this export's template (import/other export). 0 = there is some problem</summary>
|
||||
[DisplayIndexOrder(4)]
|
||||
public FPackageIndex TemplateIndex;
|
||||
///<summary>The object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.</summary>
|
||||
[DisplayIndexOrder(5)]
|
||||
public EObjectFlags ObjectFlags;
|
||||
///<summary>The number of bytes to serialize when saving/loading this export's UObject.</summary>
|
||||
[DisplayIndexOrder(6)]
|
||||
public long SerialSize;
|
||||
///<summary>The location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.</summary>
|
||||
[DisplayIndexOrder(7)]
|
||||
public long SerialOffset;
|
||||
///<summary>Was this export forced into the export table via OBJECTMARK_ForceTagExp?</summary>
|
||||
[DisplayIndexOrder(8)]
|
||||
public bool bForcedExport;
|
||||
///<summary>Should this export not be loaded on clients?</summary>
|
||||
[DisplayIndexOrder(9)]
|
||||
public bool bNotForClient;
|
||||
///<summary>Should this export not be loaded on servers?</summary>
|
||||
[DisplayIndexOrder(10)]
|
||||
public bool bNotForServer;
|
||||
///<summary>If this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated</summary>
|
||||
[DisplayIndexOrder(11)]
|
||||
public Guid PackageGuid;
|
||||
///<summary>If this export is a top-level package, this is the flags for the original package</summary>
|
||||
[DisplayIndexOrder(12)]
|
||||
public EPackageFlags PackageFlags;
|
||||
///<summary>Should this export be always loaded in editor game?</summary>
|
||||
[DisplayIndexOrder(13)]
|
||||
public bool bNotAlwaysLoadedForEditorGame;
|
||||
///<summary>Is this export an asset?</summary>
|
||||
[DisplayIndexOrder(14)]
|
||||
public bool bIsAsset;
|
||||
|
||||
/// <summary>
|
||||
/// The export table must serialize as a fixed size, this is used to index into a long list, which is later loaded into the array. -1 means dependencies are not present. These are contiguous blocks, so CreateBeforeSerializationDependencies starts at FirstExportDependency + SerializationBeforeSerializationDependencies.
|
||||
/// </summary>
|
||||
internal int FirstExportDependencyOffset;
|
||||
internal int SerializationBeforeSerializationDependenciesSize;
|
||||
internal int CreateBeforeSerializationDependenciesSize;
|
||||
internal int SerializationBeforeCreateDependenciesSize;
|
||||
internal int CreateBeforeCreateDependenciesSize;
|
||||
|
||||
[DisplayIndexOrder(15)]
|
||||
public List<FPackageIndex> SerializationBeforeSerializationDependencies = new List<FPackageIndex>();
|
||||
[DisplayIndexOrder(16)]
|
||||
public List<FPackageIndex> CreateBeforeSerializationDependencies = new List<FPackageIndex>();
|
||||
[DisplayIndexOrder(17)]
|
||||
public List<FPackageIndex> SerializationBeforeCreateDependencies = new List<FPackageIndex>();
|
||||
[DisplayIndexOrder(18)]
|
||||
public List<FPackageIndex> CreateBeforeCreateDependencies = new List<FPackageIndex>();
|
||||
|
||||
/// <summary>
|
||||
/// Miscellaneous, unparsed export data, stored as a byte array.
|
||||
/// </summary>
|
||||
public byte[] Extras;
|
||||
|
||||
/// <summary>
|
||||
/// The asset that this export is parsed with.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public UAsset Asset;
|
||||
|
||||
public Export(UAsset asset, byte[] extras)
|
||||
{
|
||||
Asset = asset;
|
||||
Extras = extras;
|
||||
}
|
||||
|
||||
public Export()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public virtual void Read(AssetBinaryReader reader, int nextStarting = 0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public virtual void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private static FieldInfo[] _allFields = null;
|
||||
private static void InitAllFields()
|
||||
{
|
||||
if (_allFields != null) return;
|
||||
_allFields = UAPUtils.GetOrderedFields<Export>();
|
||||
}
|
||||
|
||||
public static FieldInfo[] GetAllObjectExportFields()
|
||||
{
|
||||
InitAllFields();
|
||||
|
||||
return _allFields;
|
||||
}
|
||||
|
||||
public static string[] GetAllFieldNames()
|
||||
{
|
||||
InitAllFields();
|
||||
|
||||
string[] allFieldNames = new string[_allFields.Length];
|
||||
for (int i = 0; i < _allFields.Length; i++)
|
||||
{
|
||||
allFieldNames[i] = _allFields[i].Name;
|
||||
}
|
||||
return allFieldNames;
|
||||
}
|
||||
|
||||
public FName GetExportClassType()
|
||||
{
|
||||
return this.ClassIndex.IsImport() ? this.ClassIndex.ToImport(Asset).ObjectName : FName.DefineDummy(Asset, this.ClassIndex.Index.ToString());
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
InitAllFields();
|
||||
|
||||
var sb = new StringBuilder();
|
||||
foreach (var info in _allFields)
|
||||
{
|
||||
var value = info.GetValue(this) ?? "(null)";
|
||||
sb.AppendLine(info.Name + ": " + value.ToString());
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public object Clone()
|
||||
{
|
||||
var res = (Export)MemberwiseClone();
|
||||
res.SerializationBeforeSerializationDependencies = this.SerializationBeforeSerializationDependencies.ToList();
|
||||
res.CreateBeforeSerializationDependencies = this.CreateBeforeSerializationDependencies.ToList();
|
||||
res.SerializationBeforeCreateDependencies = this.SerializationBeforeCreateDependencies.ToList();
|
||||
res.CreateBeforeCreateDependencies = this.CreateBeforeCreateDependencies.ToList();
|
||||
res.Extras = (byte[])this.Extras.Clone();
|
||||
res.PackageGuid = new Guid(this.PackageGuid.ToByteArray());
|
||||
return res;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a child export instance with the same export details as the current export.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The type of child export to create.</typeparam>
|
||||
/// <returns>An instance of the child export type provided with the export details copied over.</returns>
|
||||
public T ConvertToChildExport<T>() where T : Export, new()
|
||||
{
|
||||
InitAllFields();
|
||||
|
||||
Export res = new T();
|
||||
res.SerializationBeforeSerializationDependencies = this.SerializationBeforeSerializationDependencies.ToList();
|
||||
res.CreateBeforeSerializationDependencies = this.CreateBeforeSerializationDependencies.ToList();
|
||||
res.SerializationBeforeCreateDependencies = this.SerializationBeforeCreateDependencies.ToList();
|
||||
res.CreateBeforeCreateDependencies = this.CreateBeforeCreateDependencies.ToList();
|
||||
res.Asset = this.Asset;
|
||||
res.Extras = this.Extras;
|
||||
res.ObjectName = this.ObjectName;
|
||||
res.OuterIndex = this.OuterIndex;
|
||||
foreach (var info in _allFields)
|
||||
{
|
||||
info.SetValue(res, info.GetValue(this));
|
||||
}
|
||||
return (T)res;
|
||||
}
|
||||
}
|
||||
}
|
46
Translation/UAssetAPI/ExportTypes/FieldExport.cs
Normal file
46
Translation/UAssetAPI/ExportTypes/FieldExport.cs
Normal file
@ -0,0 +1,46 @@
|
||||
using System.Linq;
|
||||
using UAssetAPI.FieldTypes;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
/// <summary>
|
||||
/// Export data for a <see cref="UField"/>.
|
||||
/// </summary>
|
||||
public class FieldExport : NormalExport
|
||||
{
|
||||
public UField Field;
|
||||
|
||||
public FieldExport(Export super) : base(super)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public FieldExport(UAsset asset, byte[] extras) : base(asset, extras)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public FieldExport()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Read(AssetBinaryReader reader, int nextStarting)
|
||||
{
|
||||
base.Read(reader, nextStarting);
|
||||
reader.ReadInt32();
|
||||
|
||||
Field = new UField();
|
||||
Field.Read(reader);
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write((int)0);
|
||||
|
||||
Field.Write(writer);
|
||||
}
|
||||
}
|
||||
}
|
42
Translation/UAssetAPI/ExportTypes/FunctionExport.cs
Normal file
42
Translation/UAssetAPI/ExportTypes/FunctionExport.cs
Normal file
@ -0,0 +1,42 @@
|
||||
using System.IO;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
/// <summary>
|
||||
/// Export data for a blueprint function.
|
||||
/// </summary>
|
||||
public class FunctionExport : StructExport
|
||||
{
|
||||
public EFunctionFlags FunctionFlags;
|
||||
public FunctionExport(Export super) : base(super)
|
||||
{
|
||||
Asset = super.Asset;
|
||||
Extras = super.Extras;
|
||||
}
|
||||
|
||||
public FunctionExport(UAsset asset, byte[] extras) : base(asset, extras)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public FunctionExport()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Read(AssetBinaryReader reader, int nextStarting)
|
||||
{
|
||||
base.Read(reader, nextStarting);
|
||||
FunctionFlags = (EFunctionFlags)reader.ReadUInt32();
|
||||
// TODO
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write((uint)FunctionFlags);
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
}
|
101
Translation/UAssetAPI/ExportTypes/LevelExport.cs
Normal file
101
Translation/UAssetAPI/ExportTypes/LevelExport.cs
Normal file
@ -0,0 +1,101 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
public class NamespacedString
|
||||
{
|
||||
public FString Namespace;
|
||||
public FString Value;
|
||||
|
||||
public NamespacedString(FString Namespace, FString Value)
|
||||
{
|
||||
this.Namespace = Namespace;
|
||||
this.Value = Value;
|
||||
}
|
||||
|
||||
public NamespacedString()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class LevelExport : NormalExport
|
||||
{
|
||||
public List<int> IndexData;
|
||||
public NamespacedString LevelType;
|
||||
public ulong FlagsProbably;
|
||||
public List<int> MiscCategoryData;
|
||||
|
||||
public LevelExport(Export super) : base(super)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public LevelExport(UAsset asset, byte[] extras) : base(asset, extras)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public LevelExport()
|
||||
{
|
||||
|
||||
}
|
||||
public override void Read(AssetBinaryReader reader, int nextStarting)
|
||||
{
|
||||
base.Read(reader, nextStarting);
|
||||
|
||||
reader.ReadInt32();
|
||||
int numIndexEntries = reader.ReadInt32();
|
||||
|
||||
IndexData = new List<int>();
|
||||
for (int i = 0; i < numIndexEntries; i++)
|
||||
{
|
||||
IndexData.Add(reader.ReadInt32());
|
||||
}
|
||||
|
||||
var nms = reader.ReadFString();
|
||||
reader.ReadInt32(); // null
|
||||
var val = reader.ReadFString();
|
||||
LevelType = new NamespacedString(nms, val);
|
||||
|
||||
reader.ReadInt64(); // null
|
||||
FlagsProbably = reader.ReadUInt64();
|
||||
|
||||
MiscCategoryData = new List<int>();
|
||||
while (reader.BaseStream.Position < nextStarting - 1)
|
||||
{
|
||||
MiscCategoryData.Add(reader.ReadInt32());
|
||||
}
|
||||
|
||||
reader.ReadByte();
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
|
||||
writer.Write((int)0);
|
||||
writer.Write(IndexData.Count);
|
||||
for (int i = 0; i < IndexData.Count; i++)
|
||||
{
|
||||
writer.Write(IndexData[i]);
|
||||
}
|
||||
|
||||
writer.Write(LevelType.Namespace);
|
||||
writer.Write((int)0);
|
||||
writer.Write(LevelType.Value);
|
||||
|
||||
writer.Write((long)0);
|
||||
writer.Write(FlagsProbably);
|
||||
|
||||
for (int i = 0; i < MiscCategoryData.Count; i++)
|
||||
{
|
||||
writer.Write(MiscCategoryData[i]);
|
||||
}
|
||||
|
||||
writer.Write((byte)0);
|
||||
}
|
||||
}
|
||||
}
|
116
Translation/UAssetAPI/ExportTypes/NormalExport.cs
Normal file
116
Translation/UAssetAPI/ExportTypes/NormalExport.cs
Normal file
@ -0,0 +1,116 @@
|
||||
using System.Collections.Generic;
|
||||
using UAssetAPI.PropertyTypes.Objects;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
/// <summary>
|
||||
/// A regular export, with no special serialization. Serialized as a None-terminated property list.
|
||||
/// </summary>
|
||||
public class NormalExport : Export
|
||||
{
|
||||
public List<PropertyData> Data;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the value associated with the specified key. This operation loops linearly, so it may not be suitable for high-performance environments.
|
||||
/// </summary>
|
||||
/// <param name="key">The key associated with the value to get or set.</param>
|
||||
public PropertyData this[FName key]
|
||||
{
|
||||
get
|
||||
{
|
||||
for (int i = 0; i < Data.Count; i++)
|
||||
{
|
||||
if (Data[i].Name == key) return Data[i];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
set
|
||||
{
|
||||
for (int i = 0; i < Data.Count; i++)
|
||||
{
|
||||
if (Data[i].Name == key)
|
||||
{
|
||||
Data[i] = value;
|
||||
Data[i].Name = key;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the value associated with the specified key. This operation loops linearly, so it may not be suitable for high-performance environments.
|
||||
/// </summary>
|
||||
/// <param name="key">The key associated with the value to get or set.</param>
|
||||
public PropertyData this[string key]
|
||||
{
|
||||
get
|
||||
{
|
||||
return this[FName.FromString(Asset, key)];
|
||||
}
|
||||
set
|
||||
{
|
||||
this[FName.FromString(Asset, key)] = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the value at the specified index.
|
||||
/// </summary>
|
||||
/// <param name="index">The index of the value to get or set.</param>
|
||||
public PropertyData this[int index]
|
||||
{
|
||||
get
|
||||
{
|
||||
return Data[index];
|
||||
}
|
||||
set
|
||||
{
|
||||
Data[index] = value;
|
||||
}
|
||||
}
|
||||
|
||||
public NormalExport(Export super)
|
||||
{
|
||||
Asset = super.Asset;
|
||||
Extras = super.Extras;
|
||||
}
|
||||
|
||||
public NormalExport(UAsset asset, byte[] extras) : base(asset, extras)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public NormalExport(List<PropertyData> data, UAsset asset, byte[] extras) : base(asset, extras)
|
||||
{
|
||||
Data = data;
|
||||
}
|
||||
|
||||
public NormalExport()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Read(AssetBinaryReader reader, int nextStarting = 0)
|
||||
{
|
||||
Data = new List<PropertyData>();
|
||||
PropertyData bit;
|
||||
while ((bit = MainSerializer.Read(reader, true)) != null)
|
||||
{
|
||||
Data.Add(bit);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
for (int j = 0; j < Data.Count; j++)
|
||||
{
|
||||
PropertyData current = Data[j];
|
||||
MainSerializer.Write(current, writer, true);
|
||||
}
|
||||
writer.Write(new FName(writer.Asset, "None"));
|
||||
}
|
||||
}
|
||||
}
|
46
Translation/UAssetAPI/ExportTypes/PropertyExport.cs
Normal file
46
Translation/UAssetAPI/ExportTypes/PropertyExport.cs
Normal file
@ -0,0 +1,46 @@
|
||||
using System.Linq;
|
||||
using UAssetAPI.FieldTypes;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
/// <summary>
|
||||
/// Export data for a <see cref="UProperty"/>.
|
||||
/// </summary>
|
||||
public class PropertyExport : NormalExport
|
||||
{
|
||||
public UProperty Property;
|
||||
|
||||
public PropertyExport(Export super) : base(super)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public PropertyExport(UAsset asset, byte[] extras) : base(asset, extras)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public PropertyExport()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Read(AssetBinaryReader reader, int nextStarting)
|
||||
{
|
||||
base.Read(reader, nextStarting);
|
||||
reader.ReadInt32();
|
||||
|
||||
FName exportClassType = this.GetExportClassType();
|
||||
Property = MainSerializer.ReadUProperty(reader, exportClassType);
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write((int)0);
|
||||
|
||||
MainSerializer.WriteUProperty(Property, writer);
|
||||
}
|
||||
}
|
||||
}
|
34
Translation/UAssetAPI/ExportTypes/RawExport.cs
Normal file
34
Translation/UAssetAPI/ExportTypes/RawExport.cs
Normal file
@ -0,0 +1,34 @@
|
||||
using System.IO;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
/// <summary>
|
||||
/// An export that could not be properly parsed by UAssetAPI, and is instead represented as an array of bytes as a fallback.
|
||||
/// </summary>
|
||||
public class RawExport : Export
|
||||
{
|
||||
public byte[] Data;
|
||||
|
||||
public RawExport(Export super)
|
||||
{
|
||||
Asset = super.Asset;
|
||||
Extras = super.Extras;
|
||||
}
|
||||
|
||||
public RawExport(byte[] data, UAsset asset, byte[] extras) : base(asset, extras)
|
||||
{
|
||||
Data = data;
|
||||
}
|
||||
|
||||
public RawExport()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
writer.Write(Data);
|
||||
}
|
||||
}
|
||||
}
|
77
Translation/UAssetAPI/ExportTypes/StringTableExport.cs
Normal file
77
Translation/UAssetAPI/ExportTypes/StringTableExport.cs
Normal file
@ -0,0 +1,77 @@
|
||||
using Newtonsoft.Json;
|
||||
using System.Linq;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
/// <summary>
|
||||
/// A string table. Holds Key->SourceString pairs of text.
|
||||
/// </summary>
|
||||
public class FStringTable : TMap<FString, FString>
|
||||
{
|
||||
[JsonProperty]
|
||||
public FString TableNamespace;
|
||||
|
||||
public FStringTable(FString tableNamespace) : base()
|
||||
{
|
||||
TableNamespace = tableNamespace;
|
||||
}
|
||||
|
||||
public FStringTable() : base()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Export data for a string table. See <see cref="FStringTable"/>.
|
||||
/// </summary>
|
||||
public class StringTableExport : NormalExport
|
||||
{
|
||||
[JsonProperty]
|
||||
public FStringTable Table;
|
||||
|
||||
public StringTableExport(Export super) : base(super)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public StringTableExport(FStringTable data, UAsset asset, byte[] extras) : base(asset, extras)
|
||||
{
|
||||
Table = data;
|
||||
}
|
||||
|
||||
public StringTableExport()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Read(AssetBinaryReader reader, int nextStarting)
|
||||
{
|
||||
base.Read(reader, nextStarting);
|
||||
reader.ReadInt32();
|
||||
|
||||
Table = new FStringTable(reader.ReadFString());
|
||||
|
||||
int numEntries = reader.ReadInt32();
|
||||
for (int i = 0; i < numEntries; i++)
|
||||
{
|
||||
Table.Add(reader.ReadFString(), reader.ReadFString());
|
||||
}
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write((int)0);
|
||||
|
||||
writer.Write(Table.TableNamespace);
|
||||
writer.Write(Table.Count);
|
||||
for (int i = 0; i < Table.Count; i++)
|
||||
{
|
||||
writer.Write(Table.Keys.ElementAt(i));
|
||||
writer.Write(Table[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
179
Translation/UAssetAPI/ExportTypes/StructExport.cs
Normal file
179
Translation/UAssetAPI/ExportTypes/StructExport.cs
Normal file
@ -0,0 +1,179 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using UAssetAPI.FieldTypes;
|
||||
using UAssetAPI.Kismet.Bytecode;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
/// <summary>
|
||||
/// Base export for all UObject types that contain fields.
|
||||
/// </summary>
|
||||
public class StructExport : FieldExport
|
||||
{
|
||||
/// <summary>
|
||||
/// Struct this inherits from, may be null
|
||||
/// </summary>
|
||||
public FPackageIndex SuperStruct;
|
||||
|
||||
/// <summary>
|
||||
/// List of child fields
|
||||
/// </summary>
|
||||
public FPackageIndex[] Children;
|
||||
|
||||
/// <summary>
|
||||
/// Properties serialized with this struct definition
|
||||
/// </summary>
|
||||
public FProperty[] LoadedProperties;
|
||||
|
||||
/// <summary>
|
||||
/// The bytecode instructions contained within this struct.
|
||||
/// </summary>
|
||||
public KismetExpression[] ScriptBytecode;
|
||||
|
||||
/// <summary>
|
||||
/// Bytecode size in total in deserialized memory. Filled out in lieu of <see cref="ScriptBytecode"/> if an error occurs during bytecode parsing.
|
||||
/// </summary>
|
||||
public int ScriptBytecodeSize;
|
||||
|
||||
/// <summary>
|
||||
/// Raw binary bytecode data. Filled out in lieu of <see cref="ScriptBytecode"/> if an error occurs during bytecode parsing.
|
||||
/// </summary>
|
||||
public byte[] ScriptBytecodeRaw;
|
||||
|
||||
/// <summary>
|
||||
/// A static bool that determines whether or not the serializer will attempt to parse Kismet bytecode.
|
||||
/// </summary>
|
||||
private static readonly bool ParseBytecode = true;
|
||||
|
||||
public StructExport(Export super) : base(super)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public StructExport(UAsset asset, byte[] extras) : base(asset, extras)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public StructExport()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Read(AssetBinaryReader reader, int nextStarting)
|
||||
{
|
||||
base.Read(reader, nextStarting);
|
||||
|
||||
SuperStruct = new FPackageIndex(reader.ReadInt32());
|
||||
|
||||
int numIndexEntries = reader.ReadInt32();
|
||||
Children = new FPackageIndex[numIndexEntries];
|
||||
for (int i = 0; i < numIndexEntries; i++)
|
||||
{
|
||||
Children[i] = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
if (Asset.GetCustomVersion<FCoreObjectVersion>() >= FCoreObjectVersion.FProperties)
|
||||
{
|
||||
int numProps = reader.ReadInt32();
|
||||
LoadedProperties = new FProperty[numProps];
|
||||
for (int i = 0; i < numProps; i++)
|
||||
{
|
||||
LoadedProperties[i] = MainSerializer.ReadFProperty(reader);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LoadedProperties = new FProperty[0];
|
||||
}
|
||||
|
||||
ScriptBytecodeSize = reader.ReadInt32(); // # of bytes in total in deserialized memory
|
||||
int scriptStorageSize = reader.ReadInt32(); // # of bytes in total
|
||||
long startedReading = reader.BaseStream.Position;
|
||||
|
||||
bool willParseRaw = true;
|
||||
try
|
||||
{
|
||||
if (ParseBytecode && Asset.EngineVersion >= UE4Version.VER_UE4_16)
|
||||
{
|
||||
var tempCode = new List<Kismet.Bytecode.KismetExpression>();
|
||||
while ((reader.BaseStream.Position - startedReading) < scriptStorageSize)
|
||||
{
|
||||
tempCode.Add(ExpressionSerializer.ReadExpression(reader));
|
||||
}
|
||||
ScriptBytecode = tempCode.ToArray();
|
||||
willParseRaw = false;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
#if DEBUG
|
||||
Debug.WriteLine(ex.StackTrace);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (willParseRaw)
|
||||
{
|
||||
reader.BaseStream.Seek(startedReading, SeekOrigin.Begin);
|
||||
ScriptBytecode = null;
|
||||
ScriptBytecodeRaw = reader.ReadBytes(scriptStorageSize);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
|
||||
writer.Write(SuperStruct.Index);
|
||||
|
||||
writer.Write(Children.Length);
|
||||
for (int i = 0; i < Children.Length; i++)
|
||||
{
|
||||
writer.Write(Children[i].Index);
|
||||
}
|
||||
|
||||
if (Asset.GetCustomVersion<FCoreObjectVersion>() >= FCoreObjectVersion.FProperties)
|
||||
{
|
||||
writer.Write(LoadedProperties.Length);
|
||||
for (int i = 0; i < LoadedProperties.Length; i++)
|
||||
{
|
||||
MainSerializer.WriteFProperty(LoadedProperties[i], writer);
|
||||
}
|
||||
}
|
||||
|
||||
if (ScriptBytecode == null)
|
||||
{
|
||||
writer.Write(ScriptBytecodeSize);
|
||||
writer.Write(ScriptBytecodeRaw.Length);
|
||||
writer.Write(ScriptBytecodeRaw);
|
||||
}
|
||||
else
|
||||
{
|
||||
long lengthOffset1 = writer.BaseStream.Position;
|
||||
writer.Write((int)0); // total iCode offset; to be filled out after serialization
|
||||
long lengthOffset2 = writer.BaseStream.Position;
|
||||
writer.Write((int)0); // size on disk; to be filled out after serialization
|
||||
|
||||
int totalICodeOffset = 0;
|
||||
long startMetric = writer.BaseStream.Position;
|
||||
for (int i = 0; i < ScriptBytecode.Length; i++)
|
||||
{
|
||||
totalICodeOffset += ExpressionSerializer.WriteExpression(ScriptBytecode[i], writer);
|
||||
}
|
||||
long endMetric = writer.BaseStream.Position;
|
||||
|
||||
// Write out total size in bytes
|
||||
long totalLength = endMetric - startMetric;
|
||||
long here = writer.BaseStream.Position;
|
||||
writer.Seek((int)lengthOffset1, SeekOrigin.Begin);
|
||||
writer.Write(totalICodeOffset);
|
||||
writer.Seek((int)lengthOffset2, SeekOrigin.Begin);
|
||||
writer.Write((int)totalLength);
|
||||
writer.Seek((int)here, SeekOrigin.Begin);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
19
Translation/UAssetAPI/FieldTypes/EArrayDim.cs
Normal file
19
Translation/UAssetAPI/FieldTypes/EArrayDim.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.FieldTypes
|
||||
{
|
||||
/// <summary>
|
||||
/// The type of array that this property represents. This is represented an integer in the engine.
|
||||
/// </summary>
|
||||
public enum EArrayDim : int
|
||||
{
|
||||
NotAnArray = 0,
|
||||
TArray = 1,
|
||||
CArray = 2
|
||||
}
|
||||
}
|
45
Translation/UAssetAPI/FieldTypes/ELifetimeCondition.cs
Normal file
45
Translation/UAssetAPI/FieldTypes/ELifetimeCondition.cs
Normal file
@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.FieldTypes
|
||||
{
|
||||
/// <summary>Secondary condition to check before considering the replication of a lifetime property.</summary>
|
||||
public enum ELifetimeCondition : byte
|
||||
{
|
||||
/// <summary>This property has no condition, and will send anytime it changes</summary>
|
||||
COND_None = 0,
|
||||
/// <summary>This property will only attempt to send on the initial bunch</summary>
|
||||
COND_InitialOnly = 1,
|
||||
/// <summary>This property will only send to the actor's owner</summary>
|
||||
COND_OwnerOnly = 2,
|
||||
/// <summary>This property send to every connection EXCEPT the owner</summary>
|
||||
COND_SkipOwner = 3,
|
||||
/// <summary>This property will only send to simulated actors</summary>
|
||||
COND_SimulatedOnly = 4,
|
||||
/// <summary>This property will only send to autonomous actors</summary>
|
||||
COND_AutonomousOnly = 5,
|
||||
/// <summary>This property will send to simulated OR bRepPhysics actors</summary>
|
||||
COND_SimulatedOrPhysics = 6,
|
||||
/// <summary>This property will send on the initial packet, or to the actors owner</summary>
|
||||
COND_InitialOrOwner = 7,
|
||||
/// <summary>This property has no particular condition, but wants the ability to toggle on/off via SetCustomIsActiveOverride</summary>
|
||||
COND_Custom = 8,
|
||||
/// <summary>This property will only send to the replay connection, or to the actors owner</summary>
|
||||
COND_ReplayOrOwner = 9,
|
||||
/// <summary>This property will only send to the replay connection</summary>
|
||||
COND_ReplayOnly = 10,
|
||||
/// <summary>This property will send to actors only, but not to replay connections</summary>
|
||||
COND_SimulatedOnlyNoReplay = 11,
|
||||
/// <summary>This property will send to simulated Or bRepPhysics actors, but not to replay connections</summary>
|
||||
COND_SimulatedOrPhysicsNoReplay = 12,
|
||||
/// <summary>This property will not send to the replay connection</summary>
|
||||
COND_SkipReplay = 13,
|
||||
/// <summary>This property will never be replicated</summary>
|
||||
COND_Never = 15,
|
||||
COND_Max = 16
|
||||
};
|
||||
}
|
371
Translation/UAssetAPI/FieldTypes/FField.cs
Normal file
371
Translation/UAssetAPI/FieldTypes/FField.cs
Normal file
@ -0,0 +1,371 @@
|
||||
using System.IO;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.FieldTypes
|
||||
{
|
||||
/// <summary>
|
||||
/// Base class of reflection data objects.
|
||||
/// </summary>
|
||||
public class FField
|
||||
{
|
||||
public FName SerializedType;
|
||||
public FName Name;
|
||||
public EObjectFlags Flags;
|
||||
|
||||
public virtual void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Name = reader.ReadFName();
|
||||
Flags = (EObjectFlags)reader.ReadUInt32();
|
||||
}
|
||||
|
||||
public virtual void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
writer.Write(Name);
|
||||
writer.Write((uint)Flags);
|
||||
}
|
||||
|
||||
public FField()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// An UnrealScript variable.
|
||||
/// </summary>
|
||||
public abstract class FProperty : FField
|
||||
{
|
||||
public EArrayDim ArrayDim;
|
||||
public int ElementSize;
|
||||
public EPropertyFlags PropertyFlags;
|
||||
public ushort RepIndex;
|
||||
public FName RepNotifyFunc;
|
||||
public ELifetimeCondition BlueprintReplicationCondition;
|
||||
|
||||
public object RawValue;
|
||||
|
||||
public void SetObject(object value)
|
||||
{
|
||||
RawValue = value;
|
||||
}
|
||||
|
||||
public T GetObject<T>()
|
||||
{
|
||||
return (T)RawValue;
|
||||
}
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
ArrayDim = (EArrayDim)reader.ReadInt32();
|
||||
ElementSize = reader.ReadInt32();
|
||||
PropertyFlags = (EPropertyFlags)reader.ReadUInt64();
|
||||
RepIndex = reader.ReadUInt16();
|
||||
RepNotifyFunc = reader.ReadFName();
|
||||
BlueprintReplicationCondition = (ELifetimeCondition)reader.ReadByte();
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write((int)ArrayDim);
|
||||
writer.Write(ElementSize);
|
||||
writer.Write((ulong)PropertyFlags);
|
||||
writer.Write(RepIndex);
|
||||
writer.Write(RepNotifyFunc);
|
||||
writer.Write((byte)BlueprintReplicationCondition);
|
||||
}
|
||||
|
||||
public FProperty()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class FEnumProperty : FProperty
|
||||
{
|
||||
///<summary>A pointer to the UEnum represented by this property</summary>
|
||||
public FPackageIndex Enum;
|
||||
///<summary>The FNumericProperty which represents the underlying type of the enum</summary>
|
||||
public FProperty UnderlyingProp;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
|
||||
Enum = new FPackageIndex(reader.ReadInt32());
|
||||
UnderlyingProp = MainSerializer.ReadFProperty(reader);
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
|
||||
writer.Write(Enum.Index);
|
||||
MainSerializer.WriteFProperty(UnderlyingProp, writer);
|
||||
}
|
||||
}
|
||||
|
||||
public class FArrayProperty : FProperty
|
||||
{
|
||||
public FProperty Inner;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
Inner = MainSerializer.ReadFProperty(reader);
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
MainSerializer.WriteFProperty(Inner, writer);
|
||||
}
|
||||
}
|
||||
|
||||
public class FSetProperty : FProperty
|
||||
{
|
||||
public FProperty ElementProp;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
ElementProp = MainSerializer.ReadFProperty(reader);
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
MainSerializer.WriteFProperty(ElementProp, writer);
|
||||
}
|
||||
}
|
||||
|
||||
public class FObjectProperty : FProperty
|
||||
{
|
||||
// UClass*
|
||||
public FPackageIndex PropertyClass;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
PropertyClass = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(PropertyClass.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class FSoftObjectProperty : FObjectProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class FClassProperty : FObjectProperty
|
||||
{
|
||||
// UClass*
|
||||
public FPackageIndex MetaClass;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
MetaClass = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(MetaClass.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class FSoftClassProperty : FObjectProperty
|
||||
{
|
||||
// UClass*
|
||||
public FPackageIndex MetaClass;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
MetaClass = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(MetaClass.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class FDelegateProperty : FProperty
|
||||
{
|
||||
// UFunction*
|
||||
public FPackageIndex SignatureFunction;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
SignatureFunction = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(SignatureFunction.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class FMulticastDelegateProperty : FDelegateProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class FMulticastInlineDelegateProperty : FMulticastDelegateProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class FInterfaceProperty : FProperty
|
||||
{
|
||||
// UFunction*
|
||||
public FPackageIndex InterfaceClass;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
InterfaceClass = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(InterfaceClass.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class FMapProperty : FProperty
|
||||
{
|
||||
public FProperty KeyProp;
|
||||
public FProperty ValueProp;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
KeyProp = MainSerializer.ReadFProperty(reader);
|
||||
ValueProp = MainSerializer.ReadFProperty(reader);
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
MainSerializer.WriteFProperty(KeyProp, writer);
|
||||
MainSerializer.WriteFProperty(ValueProp, writer);
|
||||
}
|
||||
}
|
||||
|
||||
public class FBoolProperty : FProperty
|
||||
{
|
||||
/// <summary>Size of the bitfield/bool property. Equal to ElementSize but used to check if the property has been properly initialized (0-8, where 0 means uninitialized).</summary>
|
||||
public byte FieldSize;
|
||||
/// <summary>Offset from the memeber variable to the byte of the property (0-7).</summary>
|
||||
public byte ByteOffset;
|
||||
/// <summary>Mask of the byte with the property value.</summary>
|
||||
public byte ByteMask;
|
||||
/// <summary>Mask of the field with the property value. Either equal to ByteMask or 255 in case of 'bool' type.</summary>
|
||||
public byte FieldMask;
|
||||
|
||||
public bool NativeBool;
|
||||
public bool Value;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
|
||||
byte BoolSize = (byte)ElementSize;
|
||||
FieldSize = reader.ReadByte();
|
||||
ByteOffset = reader.ReadByte();
|
||||
ByteMask = reader.ReadByte();
|
||||
FieldMask = reader.ReadByte();
|
||||
NativeBool = reader.ReadBoolean();
|
||||
Value = reader.ReadBoolean();
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(FieldSize);
|
||||
writer.Write(ByteOffset);
|
||||
writer.Write(ByteMask);
|
||||
writer.Write(FieldMask);
|
||||
writer.Write(NativeBool);
|
||||
writer.Write(Value);
|
||||
}
|
||||
}
|
||||
|
||||
public class FByteProperty : FProperty
|
||||
{
|
||||
/// <summary>A pointer to the UEnum represented by this property</summary>
|
||||
public FPackageIndex Enum;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
Enum = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(Enum.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class FStructProperty : FProperty
|
||||
{
|
||||
// UScriptStruct*
|
||||
public FPackageIndex Struct;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
Struct = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(Struct.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class FNumericProperty : FProperty
|
||||
{
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This is a UAssetAPI-specific property that represents anything that we don't have special serialization for
|
||||
/// </summary>
|
||||
public class FGenericProperty : FProperty
|
||||
{
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
}
|
||||
}
|
||||
}
|
423
Translation/UAssetAPI/FieldTypes/UField.cs
Normal file
423
Translation/UAssetAPI/FieldTypes/UField.cs
Normal file
@ -0,0 +1,423 @@
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.FieldTypes
|
||||
{
|
||||
/// <summary>
|
||||
/// Base class of reflection data objects.
|
||||
/// </summary>
|
||||
public class UField
|
||||
{
|
||||
/// <summary>
|
||||
/// Next Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array
|
||||
/// </summary>
|
||||
[DisplayIndexOrder(0)]
|
||||
public FPackageIndex Next;
|
||||
|
||||
public virtual void Read(AssetBinaryReader reader)
|
||||
{
|
||||
if (reader.Asset.GetCustomVersion<FFrameworkObjectVersion>() < FFrameworkObjectVersion.RemoveUField_Next)
|
||||
{
|
||||
Next = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
if (writer.Asset.GetCustomVersion<FFrameworkObjectVersion>() < FFrameworkObjectVersion.RemoveUField_Next)
|
||||
{
|
||||
writer.Write(Next.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public UField()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// An UnrealScript variable.
|
||||
/// </summary>
|
||||
public abstract class UProperty : UField
|
||||
{
|
||||
[DisplayIndexOrder(1)]
|
||||
public EArrayDim ArrayDim;
|
||||
[DisplayIndexOrder(2)]
|
||||
public int ElementSize;
|
||||
[DisplayIndexOrder(3)]
|
||||
public EPropertyFlags PropertyFlags;
|
||||
[DisplayIndexOrder(4)]
|
||||
public FName RepNotifyFunc;
|
||||
[DisplayIndexOrder(5)]
|
||||
public ELifetimeCondition BlueprintReplicationCondition;
|
||||
|
||||
public object RawValue;
|
||||
|
||||
public void SetObject(object value)
|
||||
{
|
||||
RawValue = value;
|
||||
}
|
||||
|
||||
public T GetObject<T>()
|
||||
{
|
||||
return (T)RawValue;
|
||||
}
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
ArrayDim = (EArrayDim)reader.ReadInt32();
|
||||
PropertyFlags = (EPropertyFlags)reader.ReadUInt64();
|
||||
RepNotifyFunc = reader.ReadFName();
|
||||
|
||||
if (reader.Asset.GetCustomVersion<FReleaseObjectVersion>() >= FReleaseObjectVersion.PropertiesSerializeRepCondition)
|
||||
{
|
||||
BlueprintReplicationCondition = (ELifetimeCondition)reader.ReadByte();
|
||||
}
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write((int)ArrayDim);
|
||||
writer.Write((ulong)PropertyFlags);
|
||||
writer.Write(RepNotifyFunc);
|
||||
|
||||
if (writer.Asset.GetCustomVersion<FReleaseObjectVersion>() >= FReleaseObjectVersion.PropertiesSerializeRepCondition)
|
||||
{
|
||||
writer.Write((byte)BlueprintReplicationCondition);
|
||||
}
|
||||
}
|
||||
|
||||
public UProperty()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class UEnumProperty : UProperty
|
||||
{
|
||||
///<summary>A pointer to the UEnum represented by this property</summary>
|
||||
[DisplayIndexOrder(6)]
|
||||
public FPackageIndex Enum;
|
||||
///<summary>The FNumericProperty which represents the underlying type of the enum</summary>
|
||||
[DisplayIndexOrder(7)]
|
||||
public FPackageIndex UnderlyingProp;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
|
||||
Enum = new FPackageIndex(reader.ReadInt32());
|
||||
UnderlyingProp = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
|
||||
writer.Write(Enum.Index);
|
||||
writer.Write(UnderlyingProp.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class UArrayProperty : UProperty
|
||||
{
|
||||
[DisplayIndexOrder(6)]
|
||||
public FPackageIndex Inner;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
Inner = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(Inner.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class USetProperty : UProperty
|
||||
{
|
||||
[DisplayIndexOrder(6)]
|
||||
public FPackageIndex ElementProp;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
ElementProp = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(ElementProp.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class UObjectProperty : UProperty
|
||||
{
|
||||
// UClass*
|
||||
[DisplayIndexOrder(6)]
|
||||
public FPackageIndex PropertyClass;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
PropertyClass = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(PropertyClass.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class USoftObjectProperty : UObjectProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class ULazyObjectProperty : UObjectProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class UClassProperty : UObjectProperty
|
||||
{
|
||||
// UClass*
|
||||
[DisplayIndexOrder(7)]
|
||||
public FPackageIndex MetaClass;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
MetaClass = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(MetaClass.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class USoftClassProperty : UObjectProperty
|
||||
{
|
||||
// UClass*
|
||||
[DisplayIndexOrder(7)]
|
||||
public FPackageIndex MetaClass;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
MetaClass = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(MetaClass.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class UDelegateProperty : UProperty
|
||||
{
|
||||
// UFunction*
|
||||
[DisplayIndexOrder(6)]
|
||||
public FPackageIndex SignatureFunction;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
SignatureFunction = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(SignatureFunction.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class UMulticastDelegateProperty : UDelegateProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class UMulticastInlineDelegateProperty : UMulticastDelegateProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class UInterfaceProperty : UProperty
|
||||
{
|
||||
// UFunction*
|
||||
[DisplayIndexOrder(6)]
|
||||
public FPackageIndex InterfaceClass;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
InterfaceClass = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(InterfaceClass.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class UMapProperty : UProperty
|
||||
{
|
||||
[DisplayIndexOrder(6)]
|
||||
public FPackageIndex KeyProp;
|
||||
[DisplayIndexOrder(7)]
|
||||
public FPackageIndex ValueProp;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
KeyProp = new FPackageIndex(reader.ReadInt32());
|
||||
ValueProp = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(KeyProp.Index);
|
||||
writer.Write(ValueProp.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class UBoolProperty : UProperty
|
||||
{
|
||||
[DisplayIndexOrder(6)]
|
||||
public bool NativeBool;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
|
||||
ElementSize = reader.ReadByte();
|
||||
NativeBool = reader.ReadBoolean();
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write((byte)ElementSize);
|
||||
writer.Write(NativeBool);
|
||||
}
|
||||
}
|
||||
|
||||
public class UByteProperty : UProperty
|
||||
{
|
||||
/// <summary>A pointer to the UEnum represented by this property</summary>
|
||||
[DisplayIndexOrder(6)]
|
||||
public FPackageIndex Enum;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
Enum = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(Enum.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class UStructProperty : UProperty
|
||||
{
|
||||
// UScriptStruct*
|
||||
[DisplayIndexOrder(6)]
|
||||
public FPackageIndex Struct;
|
||||
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
Struct = new FPackageIndex(reader.ReadInt32());
|
||||
}
|
||||
|
||||
public override void Write(AssetBinaryWriter writer)
|
||||
{
|
||||
base.Write(writer);
|
||||
writer.Write(Struct.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public class UNumericProperty : UProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class UDoubleProperty : UNumericProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class UFloatProperty : UNumericProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class UIntProperty : UNumericProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class UInt8Property : UNumericProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class UInt16Property : UNumericProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class UInt64Property : UNumericProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class UUInt8Property : UNumericProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class UUInt16Property : UNumericProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class UUInt64Property : UNumericProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class UNameProperty : UProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class UStrProperty : UProperty
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This is a UAssetAPI-specific property that represents anything that we don't have special serialization for
|
||||
/// </summary>
|
||||
public class UGenericProperty : UProperty
|
||||
{
|
||||
|
||||
}
|
||||
}
|
30
Translation/UAssetAPI/Import.cs
Normal file
30
Translation/UAssetAPI/Import.cs
Normal file
@ -0,0 +1,30 @@
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
/// <summary>
|
||||
/// UObject resource type for objects that are referenced by this package, but contained within another package.
|
||||
/// </summary>
|
||||
public class Import : FObjectResource
|
||||
{
|
||||
public FName ClassPackage;
|
||||
public FName ClassName;
|
||||
|
||||
public Import(string classPackage, string className, FPackageIndex outerIndex, string objectName, UAsset asset) : base(new FName(asset, objectName), outerIndex)
|
||||
{
|
||||
ClassPackage = new FName(asset, classPackage);
|
||||
ClassName = new FName(asset, className);
|
||||
}
|
||||
|
||||
public Import(FName classPackage, FName className, FPackageIndex outerIndex, FName objectName) : base(objectName, outerIndex)
|
||||
{
|
||||
ClassPackage = classPackage;
|
||||
ClassName = className;
|
||||
}
|
||||
|
||||
public Import()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
43
Translation/UAssetAPI/JSON/FNameJsonConverter.cs
Normal file
43
Translation/UAssetAPI/JSON/FNameJsonConverter.cs
Normal file
@ -0,0 +1,43 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI
|
||||
{
|
||||
public class FNameJsonConverter : JsonConverter
|
||||
{
|
||||
public Dictionary<FName, string> ToBeFilled;
|
||||
public int currentI = 0;
|
||||
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return objectType == typeof(FName);
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
||||
{
|
||||
var realVal = (FName)value;
|
||||
writer.WriteValue(realVal.DummyValue == null ? (realVal is null ? "null" : realVal.ToString()) : string.Empty);
|
||||
}
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||
{
|
||||
if (reader.Value == null) return null;
|
||||
var res = FName.DefineDummy(null, "temp", ++currentI);
|
||||
ToBeFilled[res] = Convert.ToString(reader.Value);
|
||||
return res;
|
||||
}
|
||||
|
||||
public FNameJsonConverter(Dictionary<FName, string> dict) : base()
|
||||
{
|
||||
ToBeFilled = dict;
|
||||
}
|
||||
}
|
||||
}
|
29
Translation/UAssetAPI/JSON/FPackageIndexJsonConverter.cs
Normal file
29
Translation/UAssetAPI/JSON/FPackageIndexJsonConverter.cs
Normal file
@ -0,0 +1,29 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.JSON
|
||||
{
|
||||
public class FPackageIndexJsonConverter : JsonConverter
|
||||
{
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return objectType == typeof(FPackageIndex);
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
||||
{
|
||||
writer.WriteValue((value as FPackageIndex).Index);
|
||||
}
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||
{
|
||||
return new FPackageIndex(Convert.ToInt32(reader.Value));
|
||||
}
|
||||
}
|
||||
}
|
55
Translation/UAssetAPI/JSON/FSignedZeroJsonConverter.cs
Normal file
55
Translation/UAssetAPI/JSON/FSignedZeroJsonConverter.cs
Normal file
@ -0,0 +1,55 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.JSON
|
||||
{
|
||||
public class FSignedZeroJsonConverter : JsonConverter
|
||||
{
|
||||
private static readonly decimal negativeZero = decimal.Negate(decimal.Zero);
|
||||
|
||||
private static bool IsNegativeZero(double x)
|
||||
{
|
||||
return x == 0.0 && double.IsNegativeInfinity(1.0 / x);
|
||||
}
|
||||
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return objectType == typeof(decimal) || objectType == typeof(float) || objectType == typeof(double);
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
||||
{
|
||||
double us = Convert.ToDouble(value);
|
||||
if (us == 0)
|
||||
{
|
||||
writer.WriteValue(IsNegativeZero(us) ? "-0" : "+0");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteValue(us);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||
{
|
||||
if (reader.Value is null) return 0;
|
||||
|
||||
if (reader.Value is string)
|
||||
{
|
||||
if (reader.Value == null || reader.Value.Equals("+0")) return Convert.ChangeType(0.0, objectType);
|
||||
if (reader.Value.Equals("-0")) return Convert.ChangeType(negativeZero, objectType);
|
||||
}
|
||||
|
||||
object res = Convert.ChangeType(reader.Value, objectType);
|
||||
if (res is null) return 0;
|
||||
return res;
|
||||
}
|
||||
}
|
||||
}
|
30
Translation/UAssetAPI/JSON/FStringJsonConverter.cs
Normal file
30
Translation/UAssetAPI/JSON/FStringJsonConverter.cs
Normal file
@ -0,0 +1,30 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.JSON
|
||||
{
|
||||
public class FStringJsonConverter : JsonConverter
|
||||
{
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return objectType == typeof(FString);
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
||||
{
|
||||
writer.WriteValue((value as FString)?.Value);
|
||||
}
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||
{
|
||||
if (reader.Value == null) return null;
|
||||
return new FString(Convert.ToString(reader.Value));
|
||||
}
|
||||
}
|
||||
}
|
66
Translation/UAssetAPI/JSON/FStringTableJsonConverter.cs
Normal file
66
Translation/UAssetAPI/JSON/FStringTableJsonConverter.cs
Normal file
@ -0,0 +1,66 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Specialized;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.JSON
|
||||
{
|
||||
public class FStringTableJsonConverter : JsonConverter
|
||||
{
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return objectType == typeof(FStringTable);
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
||||
{
|
||||
var realVal = (FStringTable)value;
|
||||
|
||||
ICollection keys = ((IOrderedDictionary)value).Keys;
|
||||
ICollection values = ((IOrderedDictionary)value).Values;
|
||||
IEnumerator valueEnumerator = values.GetEnumerator();
|
||||
|
||||
writer.WriteStartObject();
|
||||
writer.WritePropertyName("TableNamespace");
|
||||
writer.WriteValue(realVal.TableNamespace?.Value);
|
||||
writer.WritePropertyName("Value");
|
||||
writer.WriteStartArray();
|
||||
foreach (object key in keys)
|
||||
{
|
||||
valueEnumerator.MoveNext();
|
||||
|
||||
writer.WriteStartArray();
|
||||
serializer.Serialize(writer, key);
|
||||
serializer.Serialize(writer, valueEnumerator.Current);
|
||||
writer.WriteEndArray();
|
||||
}
|
||||
writer.WriteEndArray();
|
||||
writer.WriteEndObject();
|
||||
}
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||
{
|
||||
var dictionary = new FStringTable();
|
||||
|
||||
JObject tableJson = JObject.Load(reader);
|
||||
dictionary.TableNamespace = new FString(tableJson["TableNamespace"].ToObject<string>());
|
||||
JArray tokens = (JArray)tableJson["Value"];
|
||||
|
||||
foreach (var eachToken in tokens)
|
||||
{
|
||||
FString key = eachToken[0].ToObject<FString>(serializer);
|
||||
FString value = eachToken[1].ToObject<FString>(serializer);
|
||||
dictionary.Add(key, value);
|
||||
}
|
||||
|
||||
return dictionary;
|
||||
}
|
||||
}
|
||||
}
|
81
Translation/UAssetAPI/JSON/TMapJsonConverter.cs
Normal file
81
Translation/UAssetAPI/JSON/TMapJsonConverter.cs
Normal file
@ -0,0 +1,81 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Specialized;
|
||||
|
||||
/*
|
||||
The code in this file is modified from mattmc3's dotmore @ https://github.com/mattmc3/dotmore/tree/b032bbf871d46bffd698c9b7a233c533d9d2f0ebs for usage in UAssetAPI.
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 mattmc3
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.JSON
|
||||
{
|
||||
public class TMapJsonConverter<TKey, TValue> : JsonConverter
|
||||
{
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return typeof(IOrderedDictionary).IsAssignableFrom(objectType);
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
||||
{
|
||||
ICollection keys = ((IOrderedDictionary)value).Keys;
|
||||
ICollection values = ((IOrderedDictionary)value).Values;
|
||||
IEnumerator valueEnumerator = values.GetEnumerator();
|
||||
|
||||
writer.WriteStartArray();
|
||||
foreach (object key in keys)
|
||||
{
|
||||
valueEnumerator.MoveNext();
|
||||
|
||||
writer.WriteStartArray();
|
||||
serializer.Serialize(writer, key);
|
||||
serializer.Serialize(writer, valueEnumerator.Current);
|
||||
writer.WriteEndArray();
|
||||
}
|
||||
writer.WriteEndArray();
|
||||
}
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||
{
|
||||
var dictionary = new TMap<TKey, TValue>();
|
||||
JToken tokens = JToken.Load(reader);
|
||||
|
||||
foreach (var eachToken in tokens)
|
||||
{
|
||||
TKey key = eachToken[0].ToObject<TKey>(serializer);
|
||||
TValue value = eachToken[1].ToObject<TValue>(serializer);
|
||||
dictionary.Add(key, value);
|
||||
}
|
||||
return dictionary;
|
||||
}
|
||||
}
|
||||
}
|
27
Translation/UAssetAPI/JSON/UAssetContractResolver.cs
Normal file
27
Translation/UAssetAPI/JSON/UAssetContractResolver.cs
Normal file
@ -0,0 +1,27 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.JSON
|
||||
{
|
||||
public class UAssetContractResolver : DefaultContractResolver
|
||||
{
|
||||
public Dictionary<FName, string> ToBeFilled;
|
||||
|
||||
protected override JsonConverter ResolveContractConverter(Type objectType)
|
||||
{
|
||||
if (typeof(FName).IsAssignableFrom(objectType))
|
||||
{
|
||||
return new FNameJsonConverter(ToBeFilled);
|
||||
}
|
||||
return base.ResolveContractConverter(objectType);
|
||||
}
|
||||
|
||||
public UAssetContractResolver(Dictionary<FName, string> toBeFilled) : base()
|
||||
{
|
||||
ToBeFilled = toBeFilled;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode
|
||||
{
|
||||
/// <summary>
|
||||
/// Kinds of text literals
|
||||
/// </summary>
|
||||
public enum EBlueprintTextLiteralType : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// Text is an empty string. The bytecode contains no strings, and you should use FText::GetEmpty() to initialize the FText instance.
|
||||
/// </summary>
|
||||
Empty,
|
||||
/// <summary>
|
||||
/// Text is localized. The bytecode will contain three strings - source, key, and namespace - and should be loaded via FInternationalization
|
||||
/// </summary>
|
||||
LocalizedText,
|
||||
/// <summary>
|
||||
/// Text is culture invariant. The bytecode will contain one string, and you should use FText::AsCultureInvariant to initialize the FText instance.
|
||||
/// </summary>
|
||||
InvariantText,
|
||||
/// <summary>
|
||||
/// Text is a literal FString. The bytecode will contain one string, and you should use FText::FromString to initialize the FText instance.
|
||||
/// </summary>
|
||||
LiteralString,
|
||||
/// <summary>
|
||||
/// Text is from a string table. The bytecode will contain an object pointer (not used) and two strings - the table ID, and key - and should be found via FText::FromStringTable
|
||||
/// </summary>
|
||||
StringTableEntry
|
||||
}
|
||||
}
|
186
Translation/UAssetAPI/Kismet/Bytecode/EExprToken.cs
Normal file
186
Translation/UAssetAPI/Kismet/Bytecode/EExprToken.cs
Normal file
@ -0,0 +1,186 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode
|
||||
{
|
||||
/// <summary>
|
||||
/// Evaluatable expression item types.
|
||||
/// </summary>
|
||||
public enum EExprToken
|
||||
{
|
||||
/// <summary>A local variable.</summary>
|
||||
EX_LocalVariable = 0x00,
|
||||
/// <summary>An object variable.</summary>
|
||||
EX_InstanceVariable = 0x01,
|
||||
/// <summary>Default variable for a class context.</summary>
|
||||
EX_DefaultVariable = 0x02,
|
||||
/// <summary>Return from function.</summary>
|
||||
EX_Return = 0x04,
|
||||
/// <summary>Goto a local address in code.</summary>
|
||||
EX_Jump = 0x06,
|
||||
/// <summary>Goto if not expression.</summary>
|
||||
EX_JumpIfNot = 0x07,
|
||||
/// <summary>Assertion.</summary>
|
||||
EX_Assert = 0x09,
|
||||
/// <summary>No operation.</summary>
|
||||
EX_Nothing = 0x0B,
|
||||
/// <summary>Assign an arbitrary size value to a variable.</summary>
|
||||
EX_Let = 0x0F,
|
||||
/// <summary>Class default object context.</summary>
|
||||
EX_ClassContext = 0x12,
|
||||
/// <summary>Metaclass cast.</summary>
|
||||
EX_MetaCast = 0x13,
|
||||
/// <summary>Let boolean variable.</summary>
|
||||
EX_LetBool = 0x14,
|
||||
/// <summary>end of default value for optional function parameter</summary>
|
||||
EX_EndParmValue = 0x15,
|
||||
/// <summary>End of function call parameters.</summary>
|
||||
EX_EndFunctionParms = 0x16,
|
||||
/// <summary>Self object.</summary>
|
||||
EX_Self = 0x17,
|
||||
/// <summary>Skippable expression.</summary>
|
||||
EX_Skip = 0x18,
|
||||
/// <summary>Call a function through an object context.</summary>
|
||||
EX_Context = 0x19,
|
||||
/// <summary>Call a function through an object context (can fail silently if the context is NULL; only generated for functions that don't have output or return values).</summary>
|
||||
EX_Context_FailSilent = 0x1A,
|
||||
/// <summary>A function call with parameters.</summary>
|
||||
EX_VirtualFunction = 0x1B,
|
||||
/// <summary>A prebound function call with parameters.</summary>
|
||||
EX_FinalFunction = 0x1C,
|
||||
/// <summary>Int constant.</summary>
|
||||
EX_IntConst = 0x1D,
|
||||
/// <summary>Floating point constant.</summary>
|
||||
EX_FloatConst = 0x1E,
|
||||
/// <summary>String constant.</summary>
|
||||
EX_StringConst = 0x1F,
|
||||
/// <summary>An object constant.</summary>
|
||||
EX_ObjectConst = 0x20,
|
||||
/// <summary>A name constant.</summary>
|
||||
EX_NameConst = 0x21,
|
||||
/// <summary>A rotation constant.</summary>
|
||||
EX_RotationConst = 0x22,
|
||||
/// <summary>A vector constant.</summary>
|
||||
EX_VectorConst = 0x23,
|
||||
/// <summary>A byte constant.</summary>
|
||||
EX_ByteConst = 0x24,
|
||||
/// <summary>Zero.</summary>
|
||||
EX_IntZero = 0x25,
|
||||
/// <summary>One.</summary>
|
||||
EX_IntOne = 0x26,
|
||||
/// <summary>Bool True.</summary>
|
||||
EX_True = 0x27,
|
||||
/// <summary>Bool False.</summary>
|
||||
EX_False = 0x28,
|
||||
/// <summary>FText constant</summary>
|
||||
EX_TextConst = 0x29,
|
||||
/// <summary>NoObject.</summary>
|
||||
EX_NoObject = 0x2A,
|
||||
/// <summary>A transform constant</summary>
|
||||
EX_TransformConst = 0x2B,
|
||||
/// <summary>Int constant that requires 1 byte.</summary>
|
||||
EX_IntConstByte = 0x2C,
|
||||
/// <summary>A null interface (similar to EX_NoObject, but for interfaces)</summary>
|
||||
EX_NoInterface = 0x2D,
|
||||
/// <summary>Safe dynamic class casting.</summary>
|
||||
EX_DynamicCast = 0x2E,
|
||||
/// <summary>An arbitrary UStruct constant</summary>
|
||||
EX_StructConst = 0x2F,
|
||||
/// <summary>End of UStruct constant</summary>
|
||||
EX_EndStructConst = 0x30,
|
||||
/// <summary>Set the value of arbitrary array</summary>
|
||||
EX_SetArray = 0x31,
|
||||
EX_EndArray = 0x32,
|
||||
/// <summary>FProperty constant.</summary>
|
||||
EX_PropertyConst = 0x33,
|
||||
/// <summary>Unicode string constant.</summary>
|
||||
EX_UnicodeStringConst = 0x34,
|
||||
/// <summary>64-bit integer constant.</summary>
|
||||
EX_Int64Const = 0x35,
|
||||
/// <summary>64-bit unsigned integer constant.</summary>
|
||||
EX_UInt64Const = 0x36,
|
||||
/// <summary>A casting operator for primitives which reads the type as the subsequent byte</summary>
|
||||
EX_PrimitiveCast = 0x38,
|
||||
EX_SetSet = 0x39,
|
||||
EX_EndSet = 0x3A,
|
||||
EX_SetMap = 0x3B,
|
||||
EX_EndMap = 0x3C,
|
||||
EX_SetConst = 0x3D,
|
||||
EX_EndSetConst = 0x3E,
|
||||
EX_MapConst = 0x3F,
|
||||
EX_EndMapConst = 0x40,
|
||||
/// <summary>Context expression to address a property within a struct</summary>
|
||||
EX_StructMemberContext = 0x42,
|
||||
/// <summary>Assignment to a multi-cast delegate</summary>
|
||||
EX_LetMulticastDelegate = 0x43,
|
||||
/// <summary>Assignment to a delegate</summary>
|
||||
EX_LetDelegate = 0x44,
|
||||
/// <summary>Special instructions to quickly call a virtual function that we know is going to run only locally</summary>
|
||||
EX_LocalVirtualFunction = 0x45,
|
||||
/// <summary>Special instructions to quickly call a final function that we know is going to run only locally</summary>
|
||||
EX_LocalFinalFunction = 0x46,
|
||||
/// <summary>local out (pass by reference) function parameter</summary>
|
||||
EX_LocalOutVariable = 0x48,
|
||||
EX_DeprecatedOp4A = 0x4A,
|
||||
/// <summary>const reference to a delegate or normal function object</summary>
|
||||
EX_InstanceDelegate = 0x4B,
|
||||
/// <summary>push an address on to the execution flow stack for future execution when a EX_PopExecutionFlow is executed. Execution continues on normally and doesn't change to the pushed address.</summary>
|
||||
EX_PushExecutionFlow = 0x4C,
|
||||
/// <summary>continue execution at the last address previously pushed onto the execution flow stack.</summary>
|
||||
EX_PopExecutionFlow = 0x4D,
|
||||
/// <summary>Goto a local address in code, specified by an integer value.</summary>
|
||||
EX_ComputedJump = 0x4E,
|
||||
/// <summary>continue execution at the last address previously pushed onto the execution flow stack, if the condition is not true.</summary>
|
||||
EX_PopExecutionFlowIfNot = 0x4F,
|
||||
/// <summary>Breakpoint. Only observed in the editor, otherwise it behaves like EX_Nothing.</summary>
|
||||
EX_Breakpoint = 0x50,
|
||||
/// <summary>Call a function through a native interface variable</summary>
|
||||
EX_InterfaceContext = 0x51,
|
||||
/// <summary>Converting an object reference to native interface variable</summary>
|
||||
EX_ObjToInterfaceCast = 0x52,
|
||||
/// <summary>Last byte in script code</summary>
|
||||
EX_EndOfScript = 0x53,
|
||||
/// <summary>Converting an interface variable reference to native interface variable</summary>
|
||||
EX_CrossInterfaceCast = 0x54,
|
||||
/// <summary>Converting an interface variable reference to an object</summary>
|
||||
EX_InterfaceToObjCast = 0x55,
|
||||
/// <summary>Trace point. Only observed in the editor, otherwise it behaves like EX_Nothing.</summary>
|
||||
EX_WireTracepoint = 0x5A,
|
||||
/// <summary>A CodeSizeSkipOffset constant</summary>
|
||||
EX_SkipOffsetConst = 0x5B,
|
||||
/// <summary>Adds a delegate to a multicast delegate's targets</summary>
|
||||
EX_AddMulticastDelegate = 0x5C,
|
||||
/// <summary>Clears all delegates in a multicast target</summary>
|
||||
EX_ClearMulticastDelegate = 0x5D,
|
||||
/// <summary>Trace point. Only observed in the editor, otherwise it behaves like EX_Nothing.</summary>
|
||||
EX_Tracepoint = 0x5E,
|
||||
/// <summary>assign to any object ref pointer</summary>
|
||||
EX_LetObj = 0x5F,
|
||||
/// <summary>assign to a weak object pointer</summary>
|
||||
EX_LetWeakObjPtr = 0x60,
|
||||
/// <summary>bind object and name to delegate</summary>
|
||||
EX_BindDelegate = 0x61,
|
||||
/// <summary>Remove a delegate from a multicast delegate's targets</summary>
|
||||
EX_RemoveMulticastDelegate = 0x62,
|
||||
/// <summary>Call multicast delegate</summary>
|
||||
EX_CallMulticastDelegate = 0x63,
|
||||
EX_LetValueOnPersistentFrame = 0x64,
|
||||
EX_ArrayConst = 0x65,
|
||||
EX_EndArrayConst = 0x66,
|
||||
EX_SoftObjectConst = 0x67,
|
||||
/// <summary>static pure function from on local call space</summary>
|
||||
EX_CallMath = 0x68,
|
||||
EX_SwitchValue = 0x69,
|
||||
/// <summary>Instrumentation event</summary>
|
||||
EX_InstrumentationEvent = 0x6A,
|
||||
EX_ArrayGetByRef = 0x6B,
|
||||
/// <summary>Sparse data variable</summary>
|
||||
EX_ClassSparseDataVariable = 0x6C,
|
||||
EX_FieldPathConst = 0x6D,
|
||||
EX_Max = 0x100,
|
||||
};
|
||||
|
||||
public enum ECastToken {
|
||||
ObjectToInterface = 0x46,
|
||||
ObjectToBool = 0x47,
|
||||
InterfaceToBool = 0x49,
|
||||
Max = 0xFF,
|
||||
};
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode
|
||||
{
|
||||
public enum EScriptInstrumentationType : byte {
|
||||
Class = 0,
|
||||
ClassScope,
|
||||
Instance,
|
||||
Event,
|
||||
InlineEvent,
|
||||
ResumeEvent,
|
||||
PureNodeEntry,
|
||||
NodeDebugSite,
|
||||
NodeEntry,
|
||||
NodeExit,
|
||||
PushState,
|
||||
RestoreState,
|
||||
ResetState,
|
||||
SuspendState,
|
||||
PopState,
|
||||
TunnelEndOfThread,
|
||||
Stop
|
||||
}
|
||||
}
|
311
Translation/UAssetAPI/Kismet/Bytecode/ExpressionSerializer.cs
Normal file
311
Translation/UAssetAPI/Kismet/Bytecode/ExpressionSerializer.cs
Normal file
@ -0,0 +1,311 @@
|
||||
using System;
|
||||
using UAssetAPI.Kismet.Bytecode.Expressions;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode
|
||||
{
|
||||
public static class ExpressionSerializer
|
||||
{
|
||||
public static KismetExpression ReadExpression(AssetBinaryReader reader)
|
||||
{
|
||||
KismetExpression res = null;
|
||||
EExprToken token = (EExprToken)reader.ReadByte();
|
||||
switch (token)
|
||||
{
|
||||
case EExprToken.EX_LocalVariable:
|
||||
res = new EX_LocalVariable();
|
||||
break;
|
||||
case EExprToken.EX_InstanceVariable:
|
||||
res = new EX_InstanceVariable();
|
||||
break;
|
||||
case EExprToken.EX_DefaultVariable:
|
||||
res = new EX_DefaultVariable();
|
||||
break;
|
||||
case EExprToken.EX_Return:
|
||||
res = new EX_Return();
|
||||
break;
|
||||
case EExprToken.EX_Jump:
|
||||
res = new EX_Jump();
|
||||
break;
|
||||
case EExprToken.EX_JumpIfNot:
|
||||
res = new EX_JumpIfNot();
|
||||
break;
|
||||
case EExprToken.EX_Assert:
|
||||
res = new EX_Assert();
|
||||
break;
|
||||
case EExprToken.EX_Nothing:
|
||||
res = new EX_Nothing();
|
||||
break;
|
||||
case EExprToken.EX_Let:
|
||||
res = new EX_Let();
|
||||
break;
|
||||
case EExprToken.EX_ClassContext:
|
||||
res = new EX_ClassContext();
|
||||
break;
|
||||
case EExprToken.EX_MetaCast:
|
||||
res = new EX_MetaCast();
|
||||
break;
|
||||
case EExprToken.EX_LetBool:
|
||||
res = new EX_LetBool();
|
||||
break;
|
||||
case EExprToken.EX_EndParmValue:
|
||||
res = new EX_EndParmValue();
|
||||
break;
|
||||
case EExprToken.EX_EndFunctionParms:
|
||||
res = new EX_EndFunctionParms();
|
||||
break;
|
||||
case EExprToken.EX_Self:
|
||||
res = new EX_Self();
|
||||
break;
|
||||
case EExprToken.EX_Skip:
|
||||
res = new EX_Skip();
|
||||
break;
|
||||
case EExprToken.EX_Context:
|
||||
res = new EX_Context();
|
||||
break;
|
||||
case EExprToken.EX_Context_FailSilent:
|
||||
res = new EX_Context_FailSilent();
|
||||
break;
|
||||
case EExprToken.EX_VirtualFunction:
|
||||
res = new EX_VirtualFunction();
|
||||
break;
|
||||
case EExprToken.EX_FinalFunction:
|
||||
res = new EX_FinalFunction();
|
||||
break;
|
||||
case EExprToken.EX_IntConst:
|
||||
res = new EX_IntConst();
|
||||
break;
|
||||
case EExprToken.EX_FloatConst:
|
||||
res = new EX_FloatConst();
|
||||
break;
|
||||
case EExprToken.EX_StringConst:
|
||||
res = new EX_StringConst();
|
||||
break;
|
||||
case EExprToken.EX_ObjectConst:
|
||||
res = new EX_ObjectConst();
|
||||
break;
|
||||
case EExprToken.EX_NameConst:
|
||||
res = new EX_NameConst();
|
||||
break;
|
||||
case EExprToken.EX_RotationConst:
|
||||
res = new EX_RotationConst();
|
||||
break;
|
||||
case EExprToken.EX_VectorConst:
|
||||
res = new EX_VectorConst();
|
||||
break;
|
||||
case EExprToken.EX_ByteConst:
|
||||
res = new EX_ByteConst();
|
||||
break;
|
||||
case EExprToken.EX_IntZero:
|
||||
res = new EX_IntZero();
|
||||
break;
|
||||
case EExprToken.EX_IntOne:
|
||||
res = new EX_IntOne();
|
||||
break;
|
||||
case EExprToken.EX_True:
|
||||
res = new EX_True();
|
||||
break;
|
||||
case EExprToken.EX_False:
|
||||
res = new EX_False();
|
||||
break;
|
||||
case EExprToken.EX_TextConst:
|
||||
res = new EX_TextConst();
|
||||
break;
|
||||
case EExprToken.EX_NoObject:
|
||||
res = new EX_NoObject();
|
||||
break;
|
||||
case EExprToken.EX_TransformConst:
|
||||
res = new EX_TransformConst();
|
||||
break;
|
||||
case EExprToken.EX_IntConstByte:
|
||||
res = new EX_IntConstByte();
|
||||
break;
|
||||
case EExprToken.EX_NoInterface:
|
||||
res = new EX_NoInterface();
|
||||
break;
|
||||
case EExprToken.EX_DynamicCast:
|
||||
res = new EX_DynamicCast();
|
||||
break;
|
||||
case EExprToken.EX_StructConst:
|
||||
res = new EX_StructConst();
|
||||
break;
|
||||
case EExprToken.EX_EndStructConst:
|
||||
res = new EX_EndStructConst();
|
||||
break;
|
||||
case EExprToken.EX_SetArray:
|
||||
res = new EX_SetArray();
|
||||
break;
|
||||
case EExprToken.EX_EndArray:
|
||||
res = new EX_EndArray();
|
||||
break;
|
||||
case EExprToken.EX_PropertyConst:
|
||||
res = new EX_PropertyConst();
|
||||
break;
|
||||
case EExprToken.EX_UnicodeStringConst:
|
||||
res = new EX_UnicodeStringConst();
|
||||
break;
|
||||
case EExprToken.EX_Int64Const:
|
||||
res = new EX_Int64Const();
|
||||
break;
|
||||
case EExprToken.EX_UInt64Const:
|
||||
res = new EX_UInt64Const();
|
||||
break;
|
||||
case EExprToken.EX_PrimitiveCast:
|
||||
res = new EX_PrimitiveCast();
|
||||
break;
|
||||
case EExprToken.EX_SetSet:
|
||||
res = new EX_SetSet();
|
||||
break;
|
||||
case EExprToken.EX_EndSet:
|
||||
res = new EX_EndSet();
|
||||
break;
|
||||
case EExprToken.EX_SetMap:
|
||||
res = new EX_SetMap();
|
||||
break;
|
||||
case EExprToken.EX_EndMap:
|
||||
res = new EX_EndMap();
|
||||
break;
|
||||
case EExprToken.EX_SetConst:
|
||||
res = new EX_SetConst();
|
||||
break;
|
||||
case EExprToken.EX_EndSetConst:
|
||||
res = new EX_EndSetConst();
|
||||
break;
|
||||
case EExprToken.EX_MapConst:
|
||||
res = new EX_MapConst();
|
||||
break;
|
||||
case EExprToken.EX_EndMapConst:
|
||||
res = new EX_EndMapConst();
|
||||
break;
|
||||
case EExprToken.EX_StructMemberContext:
|
||||
res = new EX_StructMemberContext();
|
||||
break;
|
||||
case EExprToken.EX_LetMulticastDelegate:
|
||||
res = new EX_LetMulticastDelegate();
|
||||
break;
|
||||
case EExprToken.EX_LetDelegate:
|
||||
res = new EX_LetDelegate();
|
||||
break;
|
||||
case EExprToken.EX_LocalVirtualFunction:
|
||||
res = new EX_LocalVirtualFunction();
|
||||
break;
|
||||
case EExprToken.EX_LocalFinalFunction:
|
||||
res = new EX_LocalFinalFunction();
|
||||
break;
|
||||
case EExprToken.EX_LocalOutVariable:
|
||||
res = new EX_LocalOutVariable();
|
||||
break;
|
||||
case EExprToken.EX_DeprecatedOp4A:
|
||||
res = new EX_DeprecatedOp4A();
|
||||
break;
|
||||
case EExprToken.EX_InstanceDelegate:
|
||||
res = new EX_InstanceDelegate();
|
||||
break;
|
||||
case EExprToken.EX_PushExecutionFlow:
|
||||
res = new EX_PushExecutionFlow();
|
||||
break;
|
||||
case EExprToken.EX_PopExecutionFlow:
|
||||
res = new EX_PopExecutionFlow();
|
||||
break;
|
||||
case EExprToken.EX_ComputedJump:
|
||||
res = new EX_ComputedJump();
|
||||
break;
|
||||
case EExprToken.EX_PopExecutionFlowIfNot:
|
||||
res = new EX_PopExecutionFlowIfNot();
|
||||
break;
|
||||
case EExprToken.EX_Breakpoint:
|
||||
res = new EX_Breakpoint();
|
||||
break;
|
||||
case EExprToken.EX_InterfaceContext:
|
||||
res = new EX_InterfaceContext();
|
||||
break;
|
||||
case EExprToken.EX_ObjToInterfaceCast:
|
||||
res = new EX_ObjToInterfaceCast();
|
||||
break;
|
||||
case EExprToken.EX_EndOfScript:
|
||||
res = new EX_EndOfScript();
|
||||
break;
|
||||
case EExprToken.EX_CrossInterfaceCast:
|
||||
res = new EX_CrossInterfaceCast();
|
||||
break;
|
||||
case EExprToken.EX_InterfaceToObjCast:
|
||||
res = new EX_InterfaceToObjCast();
|
||||
break;
|
||||
case EExprToken.EX_WireTracepoint:
|
||||
res = new EX_WireTracepoint();
|
||||
break;
|
||||
case EExprToken.EX_SkipOffsetConst:
|
||||
res = new EX_SkipOffsetConst();
|
||||
break;
|
||||
case EExprToken.EX_AddMulticastDelegate:
|
||||
res = new EX_AddMulticastDelegate();
|
||||
break;
|
||||
case EExprToken.EX_ClearMulticastDelegate:
|
||||
res = new EX_ClearMulticastDelegate();
|
||||
break;
|
||||
case EExprToken.EX_Tracepoint:
|
||||
res = new EX_Tracepoint();
|
||||
break;
|
||||
case EExprToken.EX_LetObj:
|
||||
res = new EX_LetObj();
|
||||
break;
|
||||
case EExprToken.EX_LetWeakObjPtr:
|
||||
res = new EX_LetWeakObjPtr();
|
||||
break;
|
||||
case EExprToken.EX_BindDelegate:
|
||||
res = new EX_BindDelegate();
|
||||
break;
|
||||
case EExprToken.EX_RemoveMulticastDelegate:
|
||||
res = new EX_RemoveMulticastDelegate();
|
||||
break;
|
||||
case EExprToken.EX_CallMulticastDelegate:
|
||||
res = new EX_CallMulticastDelegate();
|
||||
break;
|
||||
case EExprToken.EX_LetValueOnPersistentFrame:
|
||||
res = new EX_LetValueOnPersistentFrame();
|
||||
break;
|
||||
case EExprToken.EX_ArrayConst:
|
||||
res = new EX_ArrayConst();
|
||||
break;
|
||||
case EExprToken.EX_EndArrayConst:
|
||||
res = new EX_EndArrayConst();
|
||||
break;
|
||||
case EExprToken.EX_SoftObjectConst:
|
||||
res = new EX_SoftObjectConst();
|
||||
break;
|
||||
case EExprToken.EX_CallMath:
|
||||
res = new EX_CallMath();
|
||||
break;
|
||||
case EExprToken.EX_SwitchValue:
|
||||
res = new EX_SwitchValue();
|
||||
break;
|
||||
case EExprToken.EX_InstrumentationEvent:
|
||||
res = new EX_InstrumentationEvent();
|
||||
break;
|
||||
case EExprToken.EX_ArrayGetByRef:
|
||||
res = new EX_ArrayGetByRef();
|
||||
break;
|
||||
case EExprToken.EX_ClassSparseDataVariable:
|
||||
res = new EX_ClassSparseDataVariable();
|
||||
break;
|
||||
case EExprToken.EX_FieldPathConst:
|
||||
res = new EX_FieldPathConst();
|
||||
break;
|
||||
default:
|
||||
throw new NotImplementedException("Unimplemented token " + token);
|
||||
}
|
||||
|
||||
if (res != null)
|
||||
{
|
||||
res.Read(reader);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public static int WriteExpression(KismetExpression expr, AssetBinaryWriter writer)
|
||||
{
|
||||
writer.Write((byte)expr.Token);
|
||||
return expr.Write(writer) + sizeof(byte);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_AddMulticastDelegate"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_AddMulticastDelegate : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_AddMulticastDelegate; } }
|
||||
|
||||
/// <summary>
|
||||
/// Delegate property to assign to.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression Delegate;
|
||||
|
||||
/// <summary>
|
||||
/// Delegate to add to the MC delegate for broadcast.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression DelegateToAdd;
|
||||
|
||||
public EX_AddMulticastDelegate()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Delegate = ExpressionSerializer.ReadExpression(reader);
|
||||
DelegateToAdd = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += ExpressionSerializer.WriteExpression(Delegate, writer);
|
||||
offset += ExpressionSerializer.WriteExpression(DelegateToAdd, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_ArrayConst"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_ArrayConst : KismetExpression<KismetExpression[]>
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_ArrayConst; } }
|
||||
|
||||
/// <summary>
|
||||
/// Pointer to this constant's inner property (FProperty*).
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetPropertyPointer InnerProperty;
|
||||
|
||||
/// <summary>
|
||||
/// Array constant entries.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression[] Elements;
|
||||
|
||||
public EX_ArrayConst()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
InnerProperty = reader.XFER_PROP_POINTER();
|
||||
int numEntries = reader.ReadInt32(); // Number of elements
|
||||
Elements = reader.ReadExpressionArray(EExprToken.EX_EndArrayConst);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += writer.XFER_PROP_POINTER(InnerProperty);
|
||||
writer.Write(Elements.Length); offset += sizeof(int);
|
||||
for (int i = 0; i < Elements.Length; i++)
|
||||
{
|
||||
offset += ExpressionSerializer.WriteExpression(Elements[i], writer);
|
||||
}
|
||||
offset += ExpressionSerializer.WriteExpression(new EX_EndArrayConst(), writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_ArrayGetByRef"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_ArrayGetByRef : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_ArrayGetByRef; } }
|
||||
|
||||
/// <summary>
|
||||
/// The array variable.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression ArrayVariable;
|
||||
|
||||
/// <summary>
|
||||
/// The index to access in the array.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression ArrayIndex;
|
||||
|
||||
public EX_ArrayGetByRef()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
ArrayVariable = ExpressionSerializer.ReadExpression(reader);
|
||||
ArrayIndex = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += ExpressionSerializer.WriteExpression(ArrayVariable, writer);
|
||||
offset += ExpressionSerializer.WriteExpression(ArrayIndex, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_Assert"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_Assert : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_Assert; } }
|
||||
|
||||
/// <summary>
|
||||
/// Line number.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public ushort LineNumber;
|
||||
|
||||
/// <summary>
|
||||
/// Whether or not this assertion is in debug mode.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public bool DebugMode;
|
||||
|
||||
/// <summary>
|
||||
/// Expression to assert.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression AssertExpression;
|
||||
|
||||
public EX_Assert()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
LineNumber = reader.ReadUInt16();
|
||||
DebugMode = reader.ReadBoolean();
|
||||
AssertExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
writer.Write(LineNumber); offset += sizeof(ushort);
|
||||
writer.Write(DebugMode); offset += sizeof(bool);
|
||||
offset += ExpressionSerializer.WriteExpression(AssertExpression, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_BindDelegate"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_BindDelegate : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_BindDelegate; } }
|
||||
|
||||
/// <summary>
|
||||
/// The name of the function assigned to the delegate.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public FName FunctionName;
|
||||
|
||||
/// <summary>
|
||||
/// Delegate property to assign to.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression Delegate;
|
||||
|
||||
/// <summary>
|
||||
/// Object to bind.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression ObjectTerm;
|
||||
|
||||
public EX_BindDelegate()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
FunctionName = reader.XFER_FUNC_NAME();
|
||||
Delegate = ExpressionSerializer.ReadExpression(reader);
|
||||
ObjectTerm = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += writer.XFER_FUNC_NAME(FunctionName);
|
||||
offset += ExpressionSerializer.WriteExpression(Delegate, writer);
|
||||
offset += ExpressionSerializer.WriteExpression(ObjectTerm, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_Breakpoint"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_Breakpoint : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_Breakpoint; } }
|
||||
|
||||
public EX_Breakpoint()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_ByteConst"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_ByteConst : KismetExpression<byte>
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_ByteConst; } }
|
||||
|
||||
public EX_ByteConst()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Value = reader.ReadByte();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
writer.Write(Value);
|
||||
return sizeof(byte);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_CallMath"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_CallMath : EX_FinalFunction
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_CallMath; } }
|
||||
|
||||
public EX_CallMath() : base()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return base.Write(writer);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_CallMulticastDelegate"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_CallMulticastDelegate : EX_FinalFunction
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_CallMulticastDelegate; } }
|
||||
|
||||
/// <summary>
|
||||
/// Delegate property.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression Delegate;
|
||||
|
||||
public EX_CallMulticastDelegate()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
StackNode = reader.XFER_FUNC_POINTER();
|
||||
Delegate = ExpressionSerializer.ReadExpression(reader);
|
||||
Parameters = reader.ReadExpressionArray(EExprToken.EX_EndFunctionParms);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += writer.XFER_FUNC_POINTER(StackNode);
|
||||
offset += ExpressionSerializer.WriteExpression(Delegate, writer);
|
||||
|
||||
for (int i = 0; i < Parameters.Length; i++)
|
||||
{
|
||||
offset += ExpressionSerializer.WriteExpression(Parameters[i], writer);
|
||||
}
|
||||
offset += ExpressionSerializer.WriteExpression(new EX_EndFunctionParms(), writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_ClassContext"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_ClassContext : EX_Context
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_ClassContext; } }
|
||||
|
||||
public EX_ClassContext()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return base.Write(writer);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_ClassSparseDataVariable"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_ClassSparseDataVariable : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_ClassSparseDataVariable; } }
|
||||
|
||||
/// <summary>
|
||||
/// A pointer to the variable in question.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetPropertyPointer Variable;
|
||||
|
||||
public EX_ClassSparseDataVariable()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Variable = reader.XFER_PROP_POINTER();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return writer.XFER_PROP_POINTER(Variable);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_ClearMulticastDelegate"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_ClearMulticastDelegate : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_ClearMulticastDelegate; } }
|
||||
|
||||
/// <summary>
|
||||
/// Delegate property to clear.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression DelegateToClear;
|
||||
|
||||
public EX_ClearMulticastDelegate()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
DelegateToClear = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return ExpressionSerializer.WriteExpression(DelegateToClear, writer);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_ComputedJump"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_ComputedJump : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_ComputedJump; } }
|
||||
|
||||
/// <summary>
|
||||
/// An integer expression corresponding to the offset to jump to.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression CodeOffsetExpression;
|
||||
|
||||
public EX_ComputedJump()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
CodeOffsetExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return ExpressionSerializer.WriteExpression(CodeOffsetExpression, writer);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_Context"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_Context : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_Context; } }
|
||||
|
||||
/// <summary>
|
||||
/// Object expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression ObjectExpression;
|
||||
|
||||
/// <summary>
|
||||
/// Code offset for NULL expressions.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public uint Offset;
|
||||
|
||||
/// <summary>
|
||||
/// Property corresponding to the r-value data, in case the l-value needs to be mem-zero'd. FField*
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetPropertyPointer RValuePointer;
|
||||
|
||||
/// <summary>
|
||||
/// Context expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression ContextExpression;
|
||||
|
||||
public EX_Context()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
ObjectExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
Offset = reader.ReadUInt32();
|
||||
RValuePointer = reader.XFER_PROP_POINTER();
|
||||
ContextExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += ExpressionSerializer.WriteExpression(ObjectExpression, writer);
|
||||
writer.Write(Offset); offset += sizeof(uint);
|
||||
offset += writer.XFER_PROP_POINTER(RValuePointer);
|
||||
offset += ExpressionSerializer.WriteExpression(ContextExpression, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_Context_FailSilent"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_Context_FailSilent : EX_Context
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_Context_FailSilent; } }
|
||||
|
||||
public EX_Context_FailSilent()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return base.Write(writer);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_CrossInterfaceCast"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_CrossInterfaceCast : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_CrossInterfaceCast; } }
|
||||
|
||||
/// <summary>
|
||||
/// A pointer to the interface class to convert to.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public FPackageIndex ClassPtr;
|
||||
|
||||
/// <summary>
|
||||
/// The target of this expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression Target;
|
||||
|
||||
public EX_CrossInterfaceCast()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
ClassPtr = reader.XFER_OBJECT_POINTER();
|
||||
Target = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += writer.XFER_OBJECT_POINTER(ClassPtr);
|
||||
offset += ExpressionSerializer.WriteExpression(Target, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_DefaultVariable"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_DefaultVariable : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_DefaultVariable; } }
|
||||
|
||||
/// <summary>
|
||||
/// A pointer to the variable in question.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetPropertyPointer Variable;
|
||||
|
||||
public EX_DefaultVariable()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Variable = reader.XFER_PROP_POINTER();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return writer.XFER_PROP_POINTER(Variable);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_DeprecatedOp4A"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_DeprecatedOp4A : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_DeprecatedOp4A; } }
|
||||
|
||||
public EX_DeprecatedOp4A()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_DynamicCast"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_DynamicCast : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_DynamicCast; } }
|
||||
|
||||
/// <summary>
|
||||
/// A pointer to the relevant class (UClass*).
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public FPackageIndex ClassPtr;
|
||||
|
||||
/// <summary>
|
||||
/// The target expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression TargetExpression;
|
||||
|
||||
public EX_DynamicCast()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
ClassPtr = reader.XFER_OBJECT_POINTER();
|
||||
TargetExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += writer.XFER_OBJECT_POINTER(ClassPtr);
|
||||
offset += ExpressionSerializer.WriteExpression(TargetExpression, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_EndArray"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_EndArray : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_EndArray; } }
|
||||
|
||||
public EX_EndArray()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_EndArrayConst"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_EndArrayConst : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_EndArrayConst; } }
|
||||
|
||||
public EX_EndArrayConst()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_EndFunctionParms"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_EndFunctionParms : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_EndFunctionParms; } }
|
||||
|
||||
public EX_EndFunctionParms()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_EndMap"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_EndMap : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_EndMap; } }
|
||||
|
||||
public EX_EndMap()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_EndMapConst"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_EndMapConst : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_EndMapConst; } }
|
||||
|
||||
public EX_EndMapConst()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_EndOfScript"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_EndOfScript : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_EndOfScript; } }
|
||||
|
||||
public EX_EndOfScript()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_EndParmValue"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_EndParmValue : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_EndParmValue; } }
|
||||
|
||||
public EX_EndParmValue()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_EndSet"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_EndSet : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_EndSet; } }
|
||||
|
||||
public EX_EndSet()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_EndSetConst"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_EndSetConst : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_EndSetConst; } }
|
||||
|
||||
public EX_EndSetConst()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_EndStructConst"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_EndStructConst : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_EndStructConst; } }
|
||||
|
||||
public EX_EndStructConst()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_False"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_False : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_False; } }
|
||||
|
||||
public EX_False()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_FieldPathConst"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_FieldPathConst : KismetExpression<KismetExpression>
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_FieldPathConst; } }
|
||||
|
||||
public EX_FieldPathConst()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Value = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return ExpressionSerializer.WriteExpression(Value, writer);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
using Newtonsoft.Json;
|
||||
using System.Collections.Generic;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_FinalFunction"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_FinalFunction : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_FinalFunction; } }
|
||||
|
||||
/// <summary>
|
||||
/// Stack node.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public FPackageIndex StackNode;
|
||||
|
||||
/// <summary>
|
||||
/// List of parameters for this function.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression[] Parameters;
|
||||
|
||||
public EX_FinalFunction()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
StackNode = reader.XFER_FUNC_POINTER();
|
||||
|
||||
Parameters = reader.ReadExpressionArray(EExprToken.EX_EndFunctionParms);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += writer.XFER_FUNC_POINTER(StackNode);
|
||||
|
||||
for (int i = 0; i < Parameters.Length; i++)
|
||||
{
|
||||
offset += ExpressionSerializer.WriteExpression(Parameters[i], writer);
|
||||
}
|
||||
offset += ExpressionSerializer.WriteExpression(new EX_EndFunctionParms(), writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.JSON;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_FloatConst"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_FloatConst : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_FloatConst; } }
|
||||
|
||||
/// <summary>
|
||||
/// The value of this float constant expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
[JsonConverter(typeof(FSignedZeroJsonConverter))]
|
||||
public float Value;
|
||||
|
||||
public EX_FloatConst()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Value = reader.ReadSingle();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
writer.Write(Value);
|
||||
return sizeof(float);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_InstanceDelegate"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_InstanceDelegate : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_InstanceDelegate; } }
|
||||
|
||||
/// <summary>
|
||||
/// The name of the function assigned to the delegate.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public FName FunctionName;
|
||||
|
||||
public EX_InstanceDelegate()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
FunctionName = reader.XFER_FUNC_NAME();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return writer.XFER_FUNC_NAME(FunctionName);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_InstanceVariable"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_InstanceVariable : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_InstanceVariable; } }
|
||||
|
||||
/// <summary>
|
||||
/// A pointer to the variable in question.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetPropertyPointer Variable;
|
||||
|
||||
public EX_InstanceVariable()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Variable = reader.XFER_PROP_POINTER();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return writer.XFER_PROP_POINTER(Variable);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_InstrumentationEvent"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_InstrumentationEvent : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_InstrumentationEvent; } }
|
||||
|
||||
[JsonProperty]
|
||||
public EScriptInstrumentationType EventType;
|
||||
[JsonProperty]
|
||||
public FName EventName;
|
||||
|
||||
public EX_InstrumentationEvent()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
EventType = (EScriptInstrumentationType)reader.ReadByte();
|
||||
|
||||
if (EventType.Equals(EScriptInstrumentationType.InlineEvent))
|
||||
{
|
||||
EventName = reader.XFER_FUNC_NAME();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
writer.Write((byte)EventType);
|
||||
if (EventType.Equals(EScriptInstrumentationType.InlineEvent)) {
|
||||
writer.XFER_FUNC_NAME(EventName);
|
||||
return 1 + 2 * sizeof(int);
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_Int64Const"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_Int64Const : KismetExpression<long>
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_Int64Const; } }
|
||||
|
||||
public EX_Int64Const()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Value = reader.ReadInt64();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
writer.Write(Value);
|
||||
return sizeof(long);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_IntConst"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_IntConst : KismetExpression<int>
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_IntConst; } }
|
||||
|
||||
public EX_IntConst()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Value = reader.ReadInt32();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
writer.Write(Value);
|
||||
return sizeof(int);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_IntConstByte"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_IntConstByte : KismetExpression<byte>
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_IntConstByte; } }
|
||||
|
||||
public EX_IntConstByte()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Value = reader.ReadByte();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
writer.Write(Value);
|
||||
return sizeof(byte);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_IntOne"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_IntOne : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_IntOne; } }
|
||||
|
||||
public EX_IntOne()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_IntZero"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_IntZero : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_IntZero; } }
|
||||
|
||||
public EX_IntZero()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_InterfaceContext"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_InterfaceContext : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_InterfaceContext; } }
|
||||
|
||||
/// <summary>
|
||||
/// Interface value.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression InterfaceValue;
|
||||
|
||||
public EX_InterfaceContext()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
InterfaceValue = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return ExpressionSerializer.WriteExpression(InterfaceValue, writer);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_InterfaceToObjCast"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_InterfaceToObjCast : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_InterfaceToObjCast; } }
|
||||
|
||||
/// <summary>
|
||||
/// The interface class to convert to.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public FPackageIndex ClassPtr;
|
||||
|
||||
/// <summary>
|
||||
/// The target of this expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression Target;
|
||||
|
||||
public EX_InterfaceToObjCast()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
ClassPtr = reader.XFER_OBJECT_POINTER();
|
||||
Target = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += writer.XFER_OBJECT_POINTER(ClassPtr);
|
||||
offset += ExpressionSerializer.WriteExpression(Target, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
47
Translation/UAssetAPI/Kismet/Bytecode/Expressions/EX_Jump.cs
Normal file
47
Translation/UAssetAPI/Kismet/Bytecode/Expressions/EX_Jump.cs
Normal file
@ -0,0 +1,47 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_Jump"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_Jump : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_Jump; } }
|
||||
|
||||
/// <summary>
|
||||
/// The offset to jump to.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public uint CodeOffset;
|
||||
|
||||
public EX_Jump()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
CodeOffset = reader.ReadUInt32();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
writer.Write(CodeOffset);
|
||||
return sizeof(uint);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_JumpIfNot"/> instruction.
|
||||
/// Conditional equivalent of the <see cref="EExprToken.EX_Jump"/> expression.
|
||||
/// </summary>
|
||||
public class EX_JumpIfNot : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_JumpIfNot; } }
|
||||
|
||||
/// <summary>
|
||||
/// The offset to jump to if the provided expression evaluates to false.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public uint CodeOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Expression to evaluate to determine whether or not a jump should be performed.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression BooleanExpression;
|
||||
|
||||
public EX_JumpIfNot()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
CodeOffset = reader.ReadUInt32();
|
||||
BooleanExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
writer.Write(CodeOffset); offset += sizeof(uint);
|
||||
offset += ExpressionSerializer.WriteExpression(BooleanExpression, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
56
Translation/UAssetAPI/Kismet/Bytecode/Expressions/EX_Let.cs
Normal file
56
Translation/UAssetAPI/Kismet/Bytecode/Expressions/EX_Let.cs
Normal file
@ -0,0 +1,56 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_Let"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_Let : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_Let; } }
|
||||
|
||||
/// <summary>
|
||||
/// A pointer to the variable.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetPropertyPointer Value;
|
||||
[JsonProperty]
|
||||
public KismetExpression Variable;
|
||||
[JsonProperty]
|
||||
public KismetExpression Expression;
|
||||
|
||||
public EX_Let()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Value = reader.XFER_PROP_POINTER();
|
||||
Variable = ExpressionSerializer.ReadExpression(reader);
|
||||
Expression = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += writer.XFER_PROP_POINTER(Value);
|
||||
offset += ExpressionSerializer.WriteExpression(Variable, writer);
|
||||
offset += ExpressionSerializer.WriteExpression(Expression, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_LetBool"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_LetBool : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_LetBool; } }
|
||||
|
||||
/// <summary>
|
||||
/// Variable expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression VariableExpression;
|
||||
|
||||
/// <summary>
|
||||
/// Assignment expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression AssignmentExpression;
|
||||
public EX_LetBool()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
VariableExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
AssignmentExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += ExpressionSerializer.WriteExpression(VariableExpression, writer);
|
||||
offset += ExpressionSerializer.WriteExpression(AssignmentExpression, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_LetDelegate"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_LetDelegate : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_LetDelegate; } }
|
||||
|
||||
/// <summary>
|
||||
/// Variable expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression VariableExpression;
|
||||
|
||||
/// <summary>
|
||||
/// Assignment expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression AssignmentExpression;
|
||||
|
||||
public EX_LetDelegate()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
VariableExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
AssignmentExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += ExpressionSerializer.WriteExpression(VariableExpression, writer);
|
||||
offset += ExpressionSerializer.WriteExpression(AssignmentExpression, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_LetMulticastDelegate"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_LetMulticastDelegate : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_LetMulticastDelegate; } }
|
||||
|
||||
/// <summary>
|
||||
/// Variable expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression VariableExpression;
|
||||
|
||||
/// <summary>
|
||||
/// Assignment expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression AssignmentExpression;
|
||||
|
||||
public EX_LetMulticastDelegate()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
VariableExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
AssignmentExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += ExpressionSerializer.WriteExpression(VariableExpression, writer);
|
||||
offset += ExpressionSerializer.WriteExpression(AssignmentExpression, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_LetObj"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_LetObj : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_LetObj; } }
|
||||
|
||||
/// <summary>
|
||||
/// Variable expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression VariableExpression;
|
||||
|
||||
/// <summary>
|
||||
/// Assignment expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression AssignmentExpression;
|
||||
|
||||
public EX_LetObj()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
VariableExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
AssignmentExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += ExpressionSerializer.WriteExpression(VariableExpression, writer);
|
||||
offset += ExpressionSerializer.WriteExpression(AssignmentExpression, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_LetValueOnPersistentFrame"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_LetValueOnPersistentFrame : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_LetValueOnPersistentFrame; } }
|
||||
|
||||
/// <summary>
|
||||
/// Destination property pointer.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetPropertyPointer DestinationProperty;
|
||||
|
||||
/// <summary>
|
||||
/// Assignment expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression AssignmentExpression;
|
||||
|
||||
public EX_LetValueOnPersistentFrame()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
DestinationProperty = reader.XFER_PROP_POINTER();
|
||||
AssignmentExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += writer.XFER_PROP_POINTER(DestinationProperty);
|
||||
offset += ExpressionSerializer.WriteExpression(AssignmentExpression, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_LetWeakObjPtr"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_LetWeakObjPtr : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_LetWeakObjPtr; } }
|
||||
|
||||
/// <summary>
|
||||
/// Variable expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression VariableExpression;
|
||||
|
||||
/// <summary>
|
||||
/// Assignment expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression AssignmentExpression;
|
||||
|
||||
public EX_LetWeakObjPtr()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
VariableExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
AssignmentExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += ExpressionSerializer.WriteExpression(VariableExpression, writer);
|
||||
offset += ExpressionSerializer.WriteExpression(AssignmentExpression, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_LocalFinalFunction"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_LocalFinalFunction : EX_FinalFunction
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_LocalFinalFunction; } }
|
||||
|
||||
public EX_LocalFinalFunction() : base()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return base.Write(writer);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_LocalOutVariable"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_LocalOutVariable : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_LocalOutVariable; } }
|
||||
|
||||
/// <summary>
|
||||
/// A pointer to the variable in question.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetPropertyPointer Variable;
|
||||
|
||||
public EX_LocalOutVariable()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Variable = reader.XFER_PROP_POINTER();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return writer.XFER_PROP_POINTER(Variable);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_LocalVariable"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_LocalVariable : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_LocalVariable; } }
|
||||
|
||||
/// <summary>
|
||||
/// A pointer to the variable in question.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetPropertyPointer Variable;
|
||||
|
||||
public EX_LocalVariable()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Variable = reader.XFER_PROP_POINTER();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return writer.XFER_PROP_POINTER(Variable);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_LocalVirtualFunction"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_LocalVirtualFunction : EX_VirtualFunction
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_LocalVirtualFunction; } }
|
||||
|
||||
public EX_LocalVirtualFunction() : base()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
base.Read(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return base.Write(writer);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_MapConst"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_MapConst : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_MapConst; } }
|
||||
|
||||
/// <summary>
|
||||
/// Pointer to this constant's key property (FProperty*).
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetPropertyPointer KeyProperty;
|
||||
|
||||
/// <summary>
|
||||
/// Pointer to this constant's value property (FProperty*).
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetPropertyPointer ValueProperty;
|
||||
|
||||
/// <summary>
|
||||
/// Set constant entries.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression[] Elements;
|
||||
|
||||
public EX_MapConst()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
KeyProperty = reader.XFER_PROP_POINTER();
|
||||
ValueProperty = reader.XFER_PROP_POINTER();
|
||||
int numEntries = reader.ReadInt32(); // Number of elements
|
||||
Elements = reader.ReadExpressionArray(EExprToken.EX_EndMapConst);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += writer.XFER_PROP_POINTER(KeyProperty);
|
||||
offset += writer.XFER_PROP_POINTER(ValueProperty);
|
||||
writer.Write(Elements.Length); offset += sizeof(int);
|
||||
for (int i = 0; i < Elements.Length; i++)
|
||||
{
|
||||
offset += ExpressionSerializer.WriteExpression(Elements[i], writer);
|
||||
}
|
||||
offset += ExpressionSerializer.WriteExpression(new EX_EndMapConst(), writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
using Newtonsoft.Json;
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_MetaCast"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_MetaCast : KismetExpression
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_MetaCast; } }
|
||||
|
||||
/// <summary>
|
||||
/// A pointer to the relevant class (UClass*).
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public FPackageIndex ClassPtr;
|
||||
|
||||
/// <summary>
|
||||
/// The target expression.
|
||||
/// </summary>
|
||||
[JsonProperty]
|
||||
public KismetExpression TargetExpression;
|
||||
|
||||
public EX_MetaCast()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
ClassPtr = reader.XFER_OBJECT_POINTER();
|
||||
TargetExpression = ExpressionSerializer.ReadExpression(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
int offset = 0;
|
||||
offset += writer.XFER_OBJECT_POINTER(ClassPtr);
|
||||
offset += ExpressionSerializer.WriteExpression(TargetExpression, writer);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
using UAssetAPI.UnrealTypes;
|
||||
|
||||
namespace UAssetAPI.Kismet.Bytecode.Expressions
|
||||
{
|
||||
/// <summary>
|
||||
/// A single Kismet bytecode instruction, corresponding to the <see cref="EExprToken.EX_NameConst"/> instruction.
|
||||
/// </summary>
|
||||
public class EX_NameConst : KismetExpression<FName>
|
||||
{
|
||||
/// <summary>
|
||||
/// The token of this expression.
|
||||
/// </summary>
|
||||
public override EExprToken Token { get { return EExprToken.EX_NameConst; } }
|
||||
|
||||
public EX_NameConst()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads out the expression from a BinaryReader.
|
||||
/// </summary>
|
||||
/// <param name="reader">The BinaryReader to read from.</param>
|
||||
public override void Read(AssetBinaryReader reader)
|
||||
{
|
||||
Value = reader.XFERNAME();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the expression to a BinaryWriter.
|
||||
/// </summary>
|
||||
/// <param name="writer">The BinaryWriter to write from.</param>
|
||||
/// <returns>The iCode offset of the data that was written.</returns>
|
||||
public override int Write(AssetBinaryWriter writer)
|
||||
{
|
||||
return writer.XFERNAME(Value);
|
||||
}
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user