Skip to content

Commit 508a60d

Browse files
committed
chore: rebase main
1 parent 0cf6f85 commit 508a60d

34 files changed

+1135
-0
lines changed

.gitmodules

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[submodule "unreal-cpp-net-fps/Plugins/Ecsact"]
2+
path = unreal-cpp-net-fps/Plugins/Ecsact
3+
url = https://github.com/ecsact-dev/ecsact_unreal
4+
branch = main
5+
[submodule "unreal-cpp-net-fps/Plugins/EcsactNet"]
6+
path = unreal-cpp-net-fps/Plugins/EcsactNet
7+
url = https://github.com/seaube/ecsact-net-unreal
8+
branch = main
9+
[submodule "unreal-cpp-benchmark/Plugins/Ecsact"]
10+
path = unreal-cpp-benchmark/Plugins/Ecsact
11+
url = [email protected]:ecsact-dev/ecsact_unreal.git

unreal-cpp-benchmark/.gitignore

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# Visual Studio 2015 user specific files
2+
.vs/
3+
4+
# Compiled Object files
5+
*.slo
6+
*.lo
7+
*.o
8+
*.obj
9+
10+
# Precompiled Headers
11+
*.gch
12+
*.pch
13+
14+
# Compiled Dynamic libraries
15+
*.so
16+
*.dylib
17+
*.dll
18+
19+
# Fortran module files
20+
*.mod
21+
22+
# Compiled Static libraries
23+
*.lai
24+
*.la
25+
*.a
26+
*.lib
27+
28+
# Executables
29+
*.exe
30+
*.out
31+
*.app
32+
*.ipa
33+
34+
# These project files can be generated by the engine
35+
*.xcodeproj
36+
*.xcworkspace
37+
*.sln
38+
*.suo
39+
*.opensdf
40+
*.sdf
41+
*.VC.db
42+
*.VC.opendb
43+
44+
# Precompiled Assets
45+
SourceArt/**/*.png
46+
SourceArt/**/*.tga
47+
48+
# Binary Files
49+
Binaries/*
50+
Plugins/**/Binaries/*
51+
52+
# Builds
53+
Build/*
54+
55+
# Whitelist PakBlacklist-<BuildConfiguration>.txt files
56+
!Build/*/
57+
Build/*/**
58+
!Build/*/PakBlacklist*.txt
59+
60+
# Don't ignore icon files in Build
61+
!Build/**/*.ico
62+
63+
# Built data for maps
64+
*_BuiltData.uasset
65+
66+
# Configuration files generated by the Editor
67+
Saved/*
68+
69+
# Compiled source files for the engine to use
70+
Intermediate/*
71+
Plugins/**/Intermediate/*
72+
73+
# Cache files for the editor to use
74+
DerivedDataCache/*
75+
76+
# Clangd
77+
.cache
78+
compile_commands.json
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#!/usr/bin/env pwsh
2+
3+
# This is an example batch file for building your Ecsact system implementations
4+
# with Emscripten. In a more sophisticated setup you will likely use a build
5+
# system such as bazel, cmake, zig, etc.
6+
7+
param (
8+
[Parameter(Mandatory)] $ProjectDir
9+
)
10+
11+
if (${env:UE-ZenSubprocessDataPath})
12+
{
13+
Write-Host "Detected live coding enabled"
14+
Write-Host "Skipping system impl re-build"
15+
exit 0
16+
}
17+
18+
$ErrorActionPreference = 'Stop'
19+
20+
if (-not $env:EMSDK)
21+
{
22+
if (Test-Path -Path "C:\emsdk\emsdk_env.ps1" -PathType Leaf)
23+
{
24+
(. C:\emsdk\emsdk_env.ps1) 2> $null
25+
}
26+
27+
if (-not $env:EMSDK)
28+
{
29+
throw "Unable to find the Emscripten SDK installed on your system"
30+
}
31+
}
32+
33+
$EcsactFiles = @(
34+
"$ProjectDir/Source/EcsactBenchmark/EcsactBenchmark.ecsact"
35+
)
36+
37+
$Sources = @(
38+
"$ProjectDir/SystemImpls/EcsactSystemImpls.cpp"
39+
)
40+
41+
$GeneratedOutDir = "$ProjectDir/SystemImpls/generated"
42+
43+
# TODO: don't hard set generated sources
44+
$GeneratedSources = @(
45+
"$ProjectDir/SystemImpls/generated/EcsactBenchmark.ecsact.systems.cc"
46+
)
47+
48+
$EcsactInc = (ecsact config include_dir)
49+
50+
ecsact codegen $EcsactFiles `
51+
--plugin=cpp_header `
52+
--plugin=systems_header `
53+
--plugin=cpp_systems_header `
54+
--plugin=cpp_systems_source `
55+
--outdir=$GeneratedOutDir
56+
57+
emcc -v
58+
59+
mkdir -Force "$ProjectDir/Binaries" | Out-Null
60+
61+
$WasmOutputFilePath = "$ProjectDir/Binaries/SystemImpls.wasm"
62+
63+
Write-Host "Building $WasmOutputFilePath ..."
64+
65+
# NOTE: PURE_WASI=1 removes emscripten_* functions that are not compatible with the Ecsact SI Wasm host
66+
emcc -std=c++20 --no-entry -I"$EcsactInc" -I"SystemImpls/generated" `
67+
-s ERROR_ON_UNDEFINED_SYMBOLS=0 `
68+
-s WASM=1 `
69+
-s STANDALONE_WASM=1 `
70+
-s PURE_WASI=1 `
71+
-O3 `
72+
-Wno-js-compiler `
73+
-o $WasmOutputFilePath `
74+
$Sources `
75+
$GeneratedSources
76+
77+
if (-not $?)
78+
{
79+
throw "emcc exited with code ${LastExitCode}"
80+
}
81+
82+
83+
Write-Host "Uploading $WasmOutputFilePath to Ecsact Net ..."
84+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[/Script/Ecsact.EcsactSettings]
2+
bEnableBuild=True
3+
CustomEcsactRuntimeLibraryPath=
4+
BuildReportFilter=None
5+
+Recipes=rt_entt
6+
+Recipes=si_wasmer
7+
Runner=Automatic
8+
CustomRunnerClass=None
9+
bAutoCollectBlueprintRunnerSubsystems=True
10+
+RunnerSubsystems=/Game/Blueprints/BP_EcsactBenchmarkMassSpawner.BP_EcsactBenchmarkMassSpawner_C
11+

unreal-cpp-benchmark/Config/DefaultEditor.ini

Whitespace-only changes.
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
2+
3+
[/Script/EngineSettings.GameMapsSettings]
4+
GameDefaultMap=/Engine/Maps/Templates/OpenWorld
5+
6+
[/Script/Engine.RendererSettings]
7+
r.AllowStaticLighting=False
8+
9+
r.GenerateMeshDistanceFields=True
10+
11+
r.DynamicGlobalIlluminationMethod=1
12+
13+
r.ReflectionMethod=1
14+
15+
r.SkinCache.CompileShaders=True
16+
17+
r.RayTracing=True
18+
19+
r.Shadow.Virtual.Enable=1
20+
21+
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
22+
23+
r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8
24+
25+
r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8
26+
27+
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
28+
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
29+
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
30+
-D3D12TargetedShaderFormats=PCD3D_SM5
31+
+D3D12TargetedShaderFormats=PCD3D_SM6
32+
-D3D11TargetedShaderFormats=PCD3D_SM5
33+
+D3D11TargetedShaderFormats=PCD3D_SM5
34+
Compiler=Default
35+
AudioSampleRate=48000
36+
AudioCallbackBufferFrameSize=1024
37+
AudioNumBuffersToEnqueue=1
38+
AudioMaxChannels=0
39+
AudioNumSourceWorkers=4
40+
SpatializationPlugin=
41+
SourceDataOverridePlugin=
42+
ReverbPlugin=
43+
OcclusionPlugin=
44+
CompressionOverrides=(bOverrideCompressionTimes=False,DurationThreshold=5.000000,MaxNumRandomBranches=0,SoundCueQualityIndex=0)
45+
CacheSizeKB=65536
46+
MaxChunkSizeOverrideKB=0
47+
bResampleForDevice=False
48+
MaxSampleRate=48000.000000
49+
HighSampleRate=32000.000000
50+
MedSampleRate=24000.000000
51+
LowSampleRate=12000.000000
52+
MinSampleRate=8000.000000
53+
CompressionQualityModifier=1.000000
54+
AutoStreamingThreshold=0.000000
55+
SoundCueCookQualityIndex=-1
56+
57+
[/Script/LinuxTargetPlatform.LinuxTargetSettings]
58+
-TargetedRHIs=SF_VULKAN_SM5
59+
+TargetedRHIs=SF_VULKAN_SM6
60+
61+
[/Script/HardwareTargeting.HardwareTargetingSettings]
62+
TargetedHardwareClass=Desktop
63+
AppliedTargetedHardwareClass=Desktop
64+
DefaultGraphicsPerformance=Maximum
65+
AppliedDefaultGraphicsPerformance=Maximum
66+
67+
[/Script/WorldPartitionEditor.WorldPartitionEditorSettings]
68+
CommandletClass=Class'/Script/UnrealEd.WorldPartitionConvertCommandlet'
69+
70+
[/Script/Engine.UserInterfaceSettings]
71+
bAuthorizeAutomaticWidgetVariableCreation=False
72+
FontDPIPreset=Standard
73+
FontDPI=72
74+
75+
[/Script/Engine.Engine]
76+
+ActiveGameNameRedirects=(OldGameName="TP_Blank",NewGameName="/Script/EcsactBenchmark")
77+
+ActiveGameNameRedirects=(OldGameName="/Script/TP_Blank",NewGameName="/Script/EcsactBenchmark")
78+
79+
[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings]
80+
bEnablePlugin=True
81+
bAllowNetworkConnection=True
82+
SecurityToken=636BE87843D087D62604C5917E6F5CA0
83+
bIncludeInShipping=False
84+
bAllowExternalStartInShipping=False
85+
bCompileAFSProject=False
86+
bUseCompression=False
87+
bLogFiles=False
88+
bReportStats=False
89+
ConnectionType=USBOnly
90+
bUseManualIPAddress=False
91+
ManualIPAddress=
92+
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
2+
[/Script/EngineSettings.GeneralProjectSettings]
3+
ProjectID=96F09A7E4BCF19A5F9C692A8E6975C7C
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
[/Script/Engine.InputSettings]
2+
-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
3+
-AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
4+
-AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
5+
-AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
6+
-AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f))
7+
-AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f))
8+
-AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f))
9+
+AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
10+
+AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
11+
+AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
12+
+AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
13+
+AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False))
14+
+AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False))
15+
+AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False))
16+
+AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
17+
+AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
18+
+AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
19+
+AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
20+
+AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
21+
+AxisConfig=(AxisKeyName="Vive_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
22+
+AxisConfig=(AxisKeyName="Vive_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
23+
+AxisConfig=(AxisKeyName="Vive_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
24+
+AxisConfig=(AxisKeyName="Vive_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
25+
+AxisConfig=(AxisKeyName="Vive_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
26+
+AxisConfig=(AxisKeyName="Vive_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
27+
+AxisConfig=(AxisKeyName="MixedReality_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
28+
+AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
29+
+AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
30+
+AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
31+
+AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
32+
+AxisConfig=(AxisKeyName="MixedReality_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
33+
+AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
34+
+AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
35+
+AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
36+
+AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
37+
+AxisConfig=(AxisKeyName="OculusTouch_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
38+
+AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
39+
+AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
40+
+AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
41+
+AxisConfig=(AxisKeyName="OculusTouch_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
42+
+AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
43+
+AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
44+
+AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
45+
+AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
46+
+AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
47+
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
48+
+AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
49+
+AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
50+
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
51+
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
52+
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
53+
+AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
54+
+AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
55+
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
56+
+AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
57+
+AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
58+
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
59+
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
60+
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
61+
bAltEnterTogglesFullscreen=True
62+
bF11TogglesFullscreen=True
63+
bUseMouseForTouch=False
64+
bEnableMouseSmoothing=True
65+
bEnableFOVScaling=True
66+
bCaptureMouseOnLaunch=True
67+
bEnableLegacyInputScales=True
68+
bEnableMotionControls=True
69+
bFilterInputByPlatformUser=False
70+
bShouldFlushPressedKeysOnViewportFocusLost=True
71+
bAlwaysShowTouchInterface=False
72+
bShowConsoleOnFourFingerTap=True
73+
bEnableGestureRecognizer=False
74+
bUseAutocorrect=False
75+
DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown
76+
DefaultViewportMouseLockMode=LockOnCapture
77+
FOVScale=0.011110
78+
DoubleClickTime=0.200000
79+
DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput
80+
DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent
81+
DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks
82+
-ConsoleKeys=Tilde
83+
+ConsoleKeys=Tilde
84+
Binary file not shown.
8.72 KB
Binary file not shown.

0 commit comments

Comments
 (0)