XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Runtime.InteropServices;

namespace XFEEDToolBox.Plugin;

internal static unsafe partial class Navigation
{
    static uint GalaxyRouteStarClassFilterSelfTest()
    {
        var memory=Platform.Allocate(0x20000);if(memory==0)return 0;
        try
        {
            var expectedImage=memory-0x551FFC0;var main=memory+0x3000;var controller=memory+0x11000;
            var provider=memory+0x12000;var block=memory+0x13000;var storage=memory+0x15000;var rows=storage+8;
            Write(memory+0x78,expectedImage+0x3A68F60);Write(expectedImage+0x552D5C0+0x40,expectedImage+0x3B45E30);
            Write(expectedImage+0x552E100+0x28,expectedImage+0x3B8BA80);Write(expectedImage+0x552E100+0x30,expectedImage+0x3B178D0);
            Write(main,expectedImage+0x551FFC0);Write(main+0x280,-1);Write(main+0x288,controller+0x28);
            Write(controller,expectedImage+0x552D5C0);Write(controller+0x28,expectedImage+0x552D788);
            Write(controller+0x330,block);Write(controller+0x338,provider);Write(block+8,1);Write(block+0xC,1);
            Write(provider,expectedImage+0x552E100);Write(provider+0x60,5);Write(provider+0x80,(byte)1);Write(provider+0x81,(byte)1);
            Write(provider+0x90,15UL);Write(provider+0x98,32UL);Write(provider+0xA0,storage);Write(storage,0x7FFFUL);
            for(uint i=0;i<15;i++){Write(rows+i*0x38+8,i);Write(rows+i*0x38+0x30,(byte)(i<7?1:0));}
            bool Copy(out GalaxyRouteStarClassState state)=>CopyGalaxyRouteStarClassState(main,expectedImage,out state);
            uint passed=0;if(Copy(out var state)&&state.mask==0x807F&&state.provider==provider&&state.mapController==controller)passed|=1;
            Write(provider+0x81,(byte)0);var independent=Copy(out state)&&state.mask==0x7F;
            for(uint i=0;i<15;i++)Write(rows+i*0x38+0x30,(byte)0);Write(provider+0x81,(byte)1);
            if(independent&&Copy(out state)&&state.mask==0x8000)passed|=2;
            Write(rows+8,15u);var invalid=!Copy(out _);Write(rows+8,0u);Write(rows+0x38+8,0u);invalid&=!Copy(out _);Write(rows+0x38+8,1u);if(invalid)passed|=4;
            Write(provider+0x90,14UL);invalid=!Copy(out _);Write(provider+0x90,15UL);Write(provider+0x98,31UL);invalid&=!Copy(out _);Write(provider+0x98,32UL);
            Write(provider+0xA0,(nuint)0);invalid&=!Copy(out _);Write(provider+0xA0,storage);if(invalid)passed|=8;
            Write(provider+0x81,(byte)2);invalid=!Copy(out _);Write(provider+0x81,(byte)1);Write(provider+0x80,(byte)0);invalid&=!Copy(out _);Write(provider+0x80,(byte)1);
            Write(provider+0x60,6);invalid&=!Copy(out _);Write(provider+0x60,5);if(invalid)passed|=16;
            Write(provider,expectedImage+0x552E108);invalid=!Copy(out _);Write(provider,expectedImage+0x552E100);
            Write(expectedImage+0x552E100+0x28,expectedImage+0x3B8BA88);invalid&=!Copy(out _);Write(expectedImage+0x552E100+0x28,expectedImage+0x3B8BA80);
            Write(controller+0x330,(nuint)0);invalid&=!Copy(out _);Write(controller+0x330,block);if(invalid)passed|=32;
            Write(main+0x280,0);invalid=!Copy(out _);Write(main+0x280,-1);Write(main+0x288,(nuint)0);invalid&=!Copy(out _);Write(main+0x288,controller+0x28);
            if(invalid&&ValidGalaxyRouteStarMask(0)&&ValidGalaxyRouteStarMask(0xFFFF)&&!ValidGalaxyRouteStarMask(0x10000)&&!ValidGalaxyRouteStarMask(uint.MaxValue))passed|=64;
            var before=Platform.ReadBytes(memory,0x20000);if(Copy(out _)&&Platform.ReadBytes(memory,0x20000).AsSpan().SequenceEqual(before))passed|=128;
            return passed;
        }
        finally{Platform.Free(memory);}
    }
#if PLUGIN_NAVIGATION
    [UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyRouteStarClassFilterSelfTest")]
    internal static uint ExportGalaxyRouteStarClassFilterSelfTest()=>RunTest(GalaxyRouteStarClassFilterSelfTest);
#endif
}