Compare commits
2 commits
luneraria/
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
55effca874 | ||
|
|
7b86973197 |
|
|
@ -711,6 +711,7 @@ namespace Luneraria.Core
|
||||||
// H1: leap and ultimate counters ride in the flag bits (8 bits each, compared for change only).
|
// H1: leap and ultimate counters ride in the flag bits (8 bits each, compared for change only).
|
||||||
unit.LeapSerial = (flags >> 2) & 0xFF;
|
unit.LeapSerial = (flags >> 2) & 0xFF;
|
||||||
unit.UltimateSerial = (flags >> 10) & 0xFF;
|
unit.UltimateSerial = (flags >> 10) & 0xFF;
|
||||||
|
unit.NetStunned = (flags & (1 << 18)) != 0;
|
||||||
unit.AttackProgress = data[baseIndex + 7];
|
unit.AttackProgress = data[baseIndex + 7];
|
||||||
unit.HitCount = (int)data[baseIndex + 8];
|
unit.HitCount = (int)data[baseIndex + 8];
|
||||||
unit.AttackSerial = (int)data[baseIndex + 9];
|
unit.AttackSerial = (int)data[baseIndex + 9];
|
||||||
|
|
@ -731,6 +732,13 @@ namespace Luneraria.Core
|
||||||
building.Hp = buildingHp[index];
|
building.Hp = buildingHp[index];
|
||||||
building.Alive = building.Hp > 0.0;
|
building.Alive = building.Hp > 0.0;
|
||||||
}
|
}
|
||||||
|
for (int team = 0; team < 2 && buildingHp.Length >= buildings.Count + 4; team++)
|
||||||
|
{
|
||||||
|
int lane = (int)buildingHp[buildings.Count + team * 2] - 1;
|
||||||
|
float left = buildingHp[buildings.Count + team * 2 + 1];
|
||||||
|
combat.GlyphLane[team] = lane >= 0 && lane < 3 ? LuneMap.Lanes[lane] : "";
|
||||||
|
combat.GlyphUntil[team] = lane >= 0 ? combat.Elapsed + left : -1.0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -813,7 +821,7 @@ namespace Luneraria.Core
|
||||||
{
|
{
|
||||||
if (!unit.IsMobile())
|
if (!unit.IsMobile())
|
||||||
continue;
|
continue;
|
||||||
int flags = (unit.Alive ? 1 : 0) | (unit.InRange ? 2 : 0) | ((unit.LeapSerial & 0xFF) << 2) | ((unit.UltimateSerial & 0xFF) << 10);
|
int flags = (unit.Alive ? 1 : 0) | (unit.InRange ? 2 : 0) | ((unit.LeapSerial & 0xFF) << 2) | ((unit.UltimateSerial & 0xFF) << 10) | (unit.Stunned() ? 1 << 18 : 0);
|
||||||
data.Add(unit.Id);
|
data.Add(unit.Id);
|
||||||
data.Add((float)unit.Position.X);
|
data.Add((float)unit.Position.X);
|
||||||
data.Add((float)unit.Position.Y);
|
data.Add((float)unit.Position.Y);
|
||||||
|
|
@ -834,7 +842,19 @@ namespace Luneraria.Core
|
||||||
public float[] BuildingHpArray()
|
public float[] BuildingHpArray()
|
||||||
{
|
{
|
||||||
IReadOnlyList<BuildingDef> buildings = MatchState.Map.Buildings;
|
IReadOnlyList<BuildingDef> buildings = MatchState.Map.Buildings;
|
||||||
var data = new float[buildings.Count];
|
// S4: four more values after the buildings carry the running glyph of each team (lane
|
||||||
|
// index + 1, seconds left) so guests see the glyph ring; older guests ignore them.
|
||||||
|
var data = new float[buildings.Count + 4];
|
||||||
|
LuneCombat glyphs = MatchState.Phase == Phase.Combat ? MatchState.Combat : null;
|
||||||
|
for (int team = 0; team < 2 && glyphs != null; team++)
|
||||||
|
{
|
||||||
|
double left = glyphs.GlyphUntil[team] - glyphs.Elapsed;
|
||||||
|
if (glyphs.GlyphLane[team].Length > 0 && left > 0.0)
|
||||||
|
{
|
||||||
|
data[buildings.Count + team * 2] = LuneMap.LaneIndex(glyphs.GlyphLane[team]) + 1;
|
||||||
|
data[buildings.Count + team * 2 + 1] = (float)left;
|
||||||
|
}
|
||||||
|
}
|
||||||
for (int index = 0; index < buildings.Count; index++)
|
for (int index = 0; index < buildings.Count; index++)
|
||||||
{
|
{
|
||||||
double hp;
|
double hp;
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,40 @@ namespace Luneraria.Core
|
||||||
return match.Map.LanePoint(0, lane, match.Map.LanePaths[lane].Length * 0.5, 0.0);
|
return match.Map.LanePoint(0, lane, match.Map.LanePaths[lane].Length * 0.5, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// S4: everything that gives the team sight in the shown combat (or planning preview):
|
||||||
|
/// own living units, own standing buildings (from the match, so the planning preview has
|
||||||
|
/// them too) and the team's wards. Each as point, radius and zone.
|
||||||
|
/// </summary>
|
||||||
|
public static List<KeyValuePair<Vec2, double>> Vision(LuneMatch match, LuneCombat shown, int team, string zone = "lane")
|
||||||
|
{
|
||||||
|
var result = new List<KeyValuePair<Vec2, double>>();
|
||||||
|
if (match == null || team < 0 || team > 1)
|
||||||
|
return result;
|
||||||
|
if (shown != null)
|
||||||
|
{
|
||||||
|
foreach (LuneUnit unit in shown.Units)
|
||||||
|
{
|
||||||
|
if (unit.Team == team && unit.Alive && unit.IsMobile() && unit.Zone == zone)
|
||||||
|
result.Add(new KeyValuePair<Vec2, double>(unit.Position, UnitSight));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (zone == "lane")
|
||||||
|
{
|
||||||
|
foreach (BuildingDef definition in match.Map.Buildings)
|
||||||
|
{
|
||||||
|
if (definition.Team == team && match.BuildingHp[definition.Id] > 0.0)
|
||||||
|
result.Add(new KeyValuePair<Vec2, double>(definition.Position, BuildingSight));
|
||||||
|
}
|
||||||
|
foreach (string lane in LuneMap.Lanes)
|
||||||
|
{
|
||||||
|
if (match.Boss.Wards[team * 3 + LuneMap.LaneIndex(lane)] > 0)
|
||||||
|
result.Add(new KeyValuePair<Vec2, double>(WardPoint(match, lane), WardSight));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Ids of the enemy units the team cannot see in the shown combat (the live combat, or
|
/// Ids of the enemy units the team cannot see in the shown combat (the live combat, or
|
||||||
/// the planning preview when planning). Empty without the extended rules or for team -1.
|
/// the planning preview when planning). Empty without the extended rules or for team -1.
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,11 @@ namespace Luneraria.Core
|
||||||
public int AbilitySerial;
|
public int AbilitySerial;
|
||||||
public int LeapSerial;
|
public int LeapSerial;
|
||||||
public int UltimateSerial;
|
public int UltimateSerial;
|
||||||
|
/// <summary>S4: stunned as reported by the host's frame (guests have no effects); presentation only.</summary>
|
||||||
|
public bool NetStunned;
|
||||||
|
|
||||||
|
/// <summary>Stunned for the view: the own effect on the host, the frame flag on a guest.</summary>
|
||||||
|
public bool ShowsStun() { return NetStunned || Stunned(); }
|
||||||
public double HitFlash;
|
public double HitFlash;
|
||||||
public bool InRange;
|
public bool InRange;
|
||||||
public double DeathTime = -1.0;
|
public double DeathTime = -1.0;
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ namespace Luneraria.EditorTools
|
||||||
}
|
}
|
||||||
library.HeroRing = Marker("Ring_Hero", LuneMaterialFactory.Hex("f2c96b"), 2.2f, false);
|
library.HeroRing = Marker("Ring_Hero", LuneMaterialFactory.Hex("f2c96b"), 2.2f, false);
|
||||||
library.MoonBurst = Marker("Ring_MoonBurst", LuneMaterialFactory.Hex("8fb8ff"), 4f, false);
|
library.MoonBurst = Marker("Ring_MoonBurst", LuneMaterialFactory.Hex("8fb8ff"), 4f, false);
|
||||||
|
library.FogOverlay = FogMaterial();
|
||||||
for (int team = 0; team < 2; team++)
|
for (int team = 0; team < 2; team++)
|
||||||
{
|
{
|
||||||
library.OwnerRing[team] = Marker("Ring_Owner_" + team, LuneMaterialFactory.TeamColor[team], 3f, false);
|
library.OwnerRing[team] = Marker("Ring_Owner_" + team, LuneMaterialFactory.TeamColor[team], 3f, false);
|
||||||
|
|
@ -180,6 +181,24 @@ namespace Luneraria.EditorTools
|
||||||
return existing;
|
return existing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>S4: the fog of war overlay material (night blue, alpha from the grid's vertices).</summary>
|
||||||
|
static Material FogMaterial()
|
||||||
|
{
|
||||||
|
string path = LuneMaterialFactory.Folder + "/Markers/Fog_Overlay.mat";
|
||||||
|
Directory.CreateDirectory(Path.GetDirectoryName(path));
|
||||||
|
Shader shader = Shader.Find("Luneraria/FogOverlay");
|
||||||
|
var material = AssetDatabase.LoadAssetAtPath<Material>(path);
|
||||||
|
if (material == null)
|
||||||
|
{
|
||||||
|
material = new Material(shader);
|
||||||
|
AssetDatabase.CreateAsset(material, path);
|
||||||
|
}
|
||||||
|
material.shader = shader;
|
||||||
|
material.SetColor("_Color", new Color(.03f, .04f, .08f, 1f));
|
||||||
|
EditorUtility.SetDirty(material);
|
||||||
|
return material;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>Unshaded marker colour (Godot _flat with emission energy); bars draw on top.</summary>
|
/// <summary>Unshaded marker colour (Godot _flat with emission energy); bars draw on top.</summary>
|
||||||
static Material Marker(string name, Color srgb, float energy, bool onTop)
|
static Material Marker(string name, Color srgb, float energy, bool onTop)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
31
Assets/Luneraria/Materials/Markers/Fog_Overlay.mat
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!21 &2100000
|
||||||
|
Material:
|
||||||
|
serializedVersion: 8
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: Fog_Overlay
|
||||||
|
m_Shader: {fileID: 4800000, guid: 7633b9f391704a8f84ae742a82128282, type: 3}
|
||||||
|
m_Parent: {fileID: 0}
|
||||||
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords: []
|
||||||
|
m_InvalidKeywords: []
|
||||||
|
m_LightmapFlags: 4
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: -1
|
||||||
|
stringTagMap: {}
|
||||||
|
disabledShaderPasses: []
|
||||||
|
m_LockedProperties:
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs: []
|
||||||
|
m_Ints: []
|
||||||
|
m_Floats: []
|
||||||
|
m_Colors:
|
||||||
|
- _Color: {r: 0.03, g: 0.04, b: 0.08, a: 1}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
|
m_AllowLocking: 1
|
||||||
8
Assets/Luneraria/Materials/Markers/Fog_Overlay.mat.meta
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7846e5bf0b03a456ab8720cbca2c8d9d
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 2100000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -273,6 +273,7 @@ MonoBehaviour:
|
||||||
- {fileID: 2100000, guid: 77d940cdf3d6043cb93c647607c3e35e, type: 2}
|
- {fileID: 2100000, guid: 77d940cdf3d6043cb93c647607c3e35e, type: 2}
|
||||||
HeroRing: {fileID: 2100000, guid: 862d58435f9824d969aecf8551257a64, type: 2}
|
HeroRing: {fileID: 2100000, guid: 862d58435f9824d969aecf8551257a64, type: 2}
|
||||||
MoonBurst: {fileID: 2100000, guid: c79261fd1aa5e42479782d3bac53f7ba, type: 2}
|
MoonBurst: {fileID: 2100000, guid: c79261fd1aa5e42479782d3bac53f7ba, type: 2}
|
||||||
|
FogOverlay: {fileID: 2100000, guid: 7846e5bf0b03a456ab8720cbca2c8d9d, type: 2}
|
||||||
BarBack: {fileID: 2100000, guid: 8efe289a463614fee8dcb19e789f2bf8, type: 2}
|
BarBack: {fileID: 2100000, guid: 8efe289a463614fee8dcb19e789f2bf8, type: 2}
|
||||||
BarFill:
|
BarFill:
|
||||||
- {fileID: 2100000, guid: 778bc4f74208340e38dc099b897f3db3, type: 2}
|
- {fileID: 2100000, guid: 778bc4f74208340e38dc099b897f3db3, type: 2}
|
||||||
|
|
|
||||||
39
Assets/Luneraria/Shaders/LuneFogOverlay.shader
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
// S4 fog of war: a ground-hugging grid whose vertex alpha darkens what the viewer's team cannot see.
|
||||||
|
Shader "Luneraria/FogOverlay"
|
||||||
|
{
|
||||||
|
Properties
|
||||||
|
{
|
||||||
|
_Color("Fog colour", Color) = (0.03, 0.04, 0.07, 1)
|
||||||
|
}
|
||||||
|
SubShader
|
||||||
|
{
|
||||||
|
Tags { "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" "Queue" = "Transparent-50" }
|
||||||
|
Pass
|
||||||
|
{
|
||||||
|
Name "Fog"
|
||||||
|
Tags { "LightMode" = "UniversalForward" }
|
||||||
|
Blend SrcAlpha OneMinusSrcAlpha
|
||||||
|
ZWrite Off
|
||||||
|
ZTest LEqual
|
||||||
|
Cull Off
|
||||||
|
HLSLPROGRAM
|
||||||
|
#pragma vertex Vert
|
||||||
|
#pragma fragment Frag
|
||||||
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||||
|
CBUFFER_START(UnityPerMaterial)
|
||||||
|
half4 _Color;
|
||||||
|
CBUFFER_END
|
||||||
|
struct Attributes { float4 positionOS : POSITION; half4 color : COLOR; };
|
||||||
|
struct Varyings { float4 positionCS : SV_POSITION; half alpha : TEXCOORD0; };
|
||||||
|
Varyings Vert(Attributes input)
|
||||||
|
{
|
||||||
|
Varyings output;
|
||||||
|
output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
|
||||||
|
output.alpha = input.color.a;
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
half4 Frag(Varyings input) : SV_Target { return half4(_Color.rgb, _Color.a * input.alpha); }
|
||||||
|
ENDHLSL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
9
Assets/Luneraria/Shaders/LuneFogOverlay.shader.meta
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7633b9f391704a8f84ae742a82128282
|
||||||
|
ShaderImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
defaultTextures: []
|
||||||
|
nonModifiableTextures: []
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -50,7 +50,7 @@ namespace Luneraria.Core.Tests
|
||||||
|
|
||||||
public static IList<CheckSuite> All()
|
public static IList<CheckSuite> All()
|
||||||
{
|
{
|
||||||
return new List<CheckSuite> { new ContentSuite(), new CoreRulesSuite(), new M2RulesSuite(), new GoldenSuite(), new DeterminismSuite(), new NetSuite(), new NetRoundsSuite(), new H1HeroSuite(), new S1RulesSuite(), new S2RulesSuite(), new S3RulesSuite(), new H2HeroSuite() };
|
return new List<CheckSuite> { new ContentSuite(), new CoreRulesSuite(), new M2RulesSuite(), new GoldenSuite(), new DeterminismSuite(), new NetSuite(), new NetRoundsSuite(), new H1HeroSuite(), new S1RulesSuite(), new S2RulesSuite(), new S3RulesSuite(), new H2HeroSuite(), new S4NetSuite() };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
55
Assets/Luneraria/Tests/Core/S4NetSuite.cs
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace Luneraria.Core.Tests
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// S4: what guests see of the extended rules. Over the in-process loopback a guest receives
|
||||||
|
/// the running glyph of each team (extra values after the building HP of a frame) and the
|
||||||
|
/// stun flag of every unit, and its fog sources match the host's (LuneFog.Vision).
|
||||||
|
/// </summary>
|
||||||
|
public sealed class S4NetSuite : CheckSuite
|
||||||
|
{
|
||||||
|
public override string Name { get { return "s4"; } }
|
||||||
|
|
||||||
|
protected override void RunChecks()
|
||||||
|
{
|
||||||
|
var hub = new LuneLoopback();
|
||||||
|
LuneSession host = hub.Attach(1, new LuneSession());
|
||||||
|
var options = new MatchOptions { Seed = 42, HumanSlot = 0, Extended = true,
|
||||||
|
Bunds = new List<string> { "glutpakt", "wurzelbund", "glutpakt", "wurzelbund", "glutpakt", "wurzelbund" } };
|
||||||
|
Check(host.HostNetwork(options, "Host"), "host starts");
|
||||||
|
LuneSession guest = hub.Attach(10, new LuneSession());
|
||||||
|
guest.JoinNetwork("Gast");
|
||||||
|
guest.OnClientConnected();
|
||||||
|
Check(guest.MatchState != null && guest.MatchState.Extended, "the guest's match has the extended rules");
|
||||||
|
host.PlanBotSeats();
|
||||||
|
host.Submit(Command.Buy("g01"));
|
||||||
|
host.ReadyUp();
|
||||||
|
guest.Submit(Command.Buy(guest.MatchState.BaseIds(guest.MatchState.Players[guest.LocalSlot].Bund)[0]));
|
||||||
|
guest.ReadyUp();
|
||||||
|
for (int i = 0; i < 20 && host.MatchState.Phase != Phase.Combat; i++)
|
||||||
|
host.HostTick(LuneNet.FrameInterval);
|
||||||
|
Check(host.MatchState.Phase == Phase.Combat && guest.MatchState.Phase == Phase.Combat, "both sides are in combat");
|
||||||
|
LuneCombat combat = host.MatchState.Combat;
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
host.MatchState.StepCombat();
|
||||||
|
combat.GlyphLane[0] = "mid";
|
||||||
|
combat.GlyphUntil[0] = combat.Elapsed + 3.0;
|
||||||
|
LuneUnit target = combat.Units.First(u => u.IsMobile() && u.Team == 1 && u.Alive);
|
||||||
|
target.ApplyEffect("valkyrie_stun", "stun", 1.0, 2.0);
|
||||||
|
host.HostTick(LuneNet.FrameInterval);
|
||||||
|
LuneCombat mirror = guest.MatchState.Combat;
|
||||||
|
Check(mirror.GlyphLane[0] == "mid" && mirror.GlyphLane[1] == "", "the guest knows Blau's glyph on mid");
|
||||||
|
LuneUnit tower;
|
||||||
|
Check(mirror.Buildings.TryGetValue("blau_mid_outer", out tower) && mirror.Glyphed(tower), "the guest sees the mid tower glyphed");
|
||||||
|
LuneUnit copy = mirror.Units.FirstOrDefault(u => u.Id == target.Id);
|
||||||
|
Check(copy != null && copy.ShowsStun(), "the guest sees the stun");
|
||||||
|
Check(mirror.Units.Where(u => u.Id != target.Id && u.IsMobile()).All(u => !u.ShowsStun()), "nobody else looks stunned");
|
||||||
|
int team = 0;
|
||||||
|
int hostSources = LuneFog.Vision(host.MatchState, combat, team).Count;
|
||||||
|
int guestSources = LuneFog.Vision(guest.MatchState, mirror, team).Count;
|
||||||
|
Check(hostSources == guestSources && hostSources > 0, "fog sources agree on host and guest (" + hostSources + "/" + guestSources + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Luneraria/Tests/Core/S4NetSuite.cs.meta
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: df9ba1b1ef594679b037f9c14faa13c0
|
||||||
|
|
@ -56,5 +56,6 @@ namespace Luneraria.Core.Tests
|
||||||
[Test] public void S2Rules() { RunSuite(new S2RulesSuite()); }
|
[Test] public void S2Rules() { RunSuite(new S2RulesSuite()); }
|
||||||
[Test] public void S3Rules() { RunSuite(new S3RulesSuite()); }
|
[Test] public void S3Rules() { RunSuite(new S3RulesSuite()); }
|
||||||
[Test] public void H2Heroes() { RunSuite(new H2HeroSuite()); }
|
[Test] public void H2Heroes() { RunSuite(new H2HeroSuite()); }
|
||||||
|
[Test] public void S4Net() { RunSuite(new S4NetSuite()); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
87
Assets/Luneraria/Tests/UI/PlayMode/S4PolishViewsTests.cs
Normal file
|
|
@ -0,0 +1,87 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Linq;
|
||||||
|
using Luneraria.Core;
|
||||||
|
using Luneraria.View;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.TestTools;
|
||||||
|
|
||||||
|
namespace Luneraria.UI.Tests
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// S4 in the real scene: the fog of war darkens the terrain outside the team's vision (light
|
||||||
|
/// at the own base, dark at the enemy base), and a stunned unit shows the gold ring over its
|
||||||
|
/// head. S4Bilder (explicit) captures both at 1920×1080; LUNE_EVIDENCE names the folder below
|
||||||
|
/// docs/port/screenshots (default s4/spiel).
|
||||||
|
/// </summary>
|
||||||
|
public sealed class S4PolishViewsTests
|
||||||
|
{
|
||||||
|
static float AlphaAt(LuneFogOverlay fog, Vec2 point)
|
||||||
|
{
|
||||||
|
int side = Mathf.CeilToInt((float)(LuneMap.HalfExtent * 2.0) / LuneFogOverlay.Cell) + 1;
|
||||||
|
int column = Mathf.Clamp(Mathf.RoundToInt((float)((point.X + LuneMap.HalfExtent) / LuneFogOverlay.Cell)), 0, side - 1);
|
||||||
|
int row = Mathf.Clamp(Mathf.RoundToInt((float)((point.Y + LuneMap.HalfExtent) / LuneFogOverlay.Cell)), 0, side - 1);
|
||||||
|
return fog.Alpha[row * side + column];
|
||||||
|
}
|
||||||
|
|
||||||
|
static IEnumerator Fight(HudSession s)
|
||||||
|
{
|
||||||
|
yield return s.Starter();
|
||||||
|
s.Leave();
|
||||||
|
s.Game.Key(KeyCode.Space);
|
||||||
|
yield return HudSession.Frames(2);
|
||||||
|
yield return s.Fight(4.0);
|
||||||
|
yield return HudSession.Frames(4);
|
||||||
|
}
|
||||||
|
|
||||||
|
[UnityTest, Timeout(600000)]
|
||||||
|
public IEnumerator S4Views()
|
||||||
|
{
|
||||||
|
var s = new HudSession();
|
||||||
|
yield return s.Open(1920, 1080, seed: 4, startRound: 6, extraGold: 500, extended: true);
|
||||||
|
yield return Fight(s);
|
||||||
|
LuneFogOverlay fog = s.Game.View.Fog;
|
||||||
|
Assert.IsNotNull(fog, "an extended match with a human seat has the fog overlay");
|
||||||
|
Assert.IsTrue(fog.gameObject.activeSelf && fog.Refreshes > 0, "the fog is active and refreshed");
|
||||||
|
Assert.Less(AlphaAt(fog, s.Match.Map.CorePosition(0)), .05f, "the own Ancient stands in light");
|
||||||
|
Assert.Greater(AlphaAt(fog, s.Match.Map.CorePosition(1)), .5f, "the enemy Ancient lies in the fog");
|
||||||
|
LuneUnit victim = s.Match.Combat.Units.First(u => u.IsMobile() && u.Alive && u.Team == 0);
|
||||||
|
victim.ApplyEffect("valkyrie_stun", "stun", 1.0, 3.0);
|
||||||
|
yield return HudSession.Frames(3);
|
||||||
|
LuneUnitView view = UnityEngine.Object.FindObjectsByType<LuneUnitView>(FindObjectsSortMode.None).First(v => v.Unit == victim);
|
||||||
|
Transform ring = view.transform.Find("StunRing");
|
||||||
|
Assert.IsTrue(ring != null && ring.gameObject.activeSelf, "a stunned unit shows the stun ring");
|
||||||
|
s.Close();
|
||||||
|
var reference = new HudSession();
|
||||||
|
yield return reference.Open(1920, 1080, seed: 4, startRound: 6, extraGold: 500);
|
||||||
|
yield return Fight(reference);
|
||||||
|
Assert.IsTrue(reference.Game.View.Fog == null || !reference.Game.View.Fog.gameObject.activeSelf, "no fog under the reference rules");
|
||||||
|
reference.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
[UnityTest, Timeout(600000), Explicit("Bildwerkzeug: nur gezielt per -testFilter")]
|
||||||
|
public IEnumerator S4Bilder()
|
||||||
|
{
|
||||||
|
string evidence = Environment.GetEnvironmentVariable("LUNE_EVIDENCE");
|
||||||
|
string folder = "docs/port/screenshots/" + (string.IsNullOrEmpty(evidence) ? "s4/spiel" : evidence) + "/";
|
||||||
|
var s = new HudSession();
|
||||||
|
yield return s.Open(1920, 1080, seed: 4, startRound: 6, extraGold: 500, extended: true);
|
||||||
|
yield return Fight(s);
|
||||||
|
s.Driver.Paused = true;
|
||||||
|
s.Rig.LookAt(new Vec2(0.0, 0.0), 60f, true);
|
||||||
|
yield return new WaitForSecondsRealtime(.6f);
|
||||||
|
yield return s.Shot(folder + "01-nebel-uebersicht.png");
|
||||||
|
LuneUnit front = s.Match.Combat.Units.Where(u => u.IsMobile() && u.Alive && u.Team == 0 && u.Lane == "mid").OrderByDescending(u => u.Progress).First();
|
||||||
|
s.Rig.LookAt(front.Position, 22f, true);
|
||||||
|
yield return new WaitForSecondsRealtime(.5f);
|
||||||
|
yield return s.Shot(folder + "02-nebelgrenze-mid.png");
|
||||||
|
foreach (LuneUnit unit in s.Match.Combat.Units.Where(u => u.IsMobile() && u.Alive && u.Position.DistanceTo(front.Position) < 6.0))
|
||||||
|
unit.ApplyEffect("valkyrie_stun", "stun", 1.0, 10.0);
|
||||||
|
s.Rig.LookAt(front.Position, 9f, true);
|
||||||
|
yield return new WaitForSecondsRealtime(.6f);
|
||||||
|
yield return s.Shot(folder + "03-betaeubung.png");
|
||||||
|
s.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 62a4209ed52348a182c63f43dc65a85b
|
||||||
91
Assets/Luneraria/View/LuneFogOverlay.cs
Normal file
|
|
@ -0,0 +1,91 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Luneraria.Core;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Luneraria.View
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// S4 fog of war in the terrain: a grid over the map (2 m cells) that follows the ground and
|
||||||
|
/// darkens every point no vision source of the viewer's team reaches (LuneFog.Vision: own
|
||||||
|
/// units 9 m, own buildings 10 m, wards 12 m). The alpha has a soft 2 m edge and is
|
||||||
|
/// recomputed ten times a second. Presentation only; the rules never read it.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class LuneFogOverlay : MonoBehaviour
|
||||||
|
{
|
||||||
|
public const float Cell = 2f;
|
||||||
|
public const float Darkness = .55f;
|
||||||
|
public const float Edge = 2f;
|
||||||
|
public const float Interval = .1f;
|
||||||
|
|
||||||
|
Mesh _mesh;
|
||||||
|
Vec2[] _points;
|
||||||
|
Color32[] _colors;
|
||||||
|
float _timer;
|
||||||
|
|
||||||
|
/// <summary>Darkness of every grid point (0 = seen), for tests.</summary>
|
||||||
|
public float[] Alpha { get; private set; }
|
||||||
|
public int Refreshes { get; private set; }
|
||||||
|
|
||||||
|
public void Build(LuneGround ground, Material material)
|
||||||
|
{
|
||||||
|
int side = Mathf.CeilToInt((float)(LuneMap.HalfExtent * 2.0) / Cell) + 1;
|
||||||
|
var vertices = new Vector3[side * side];
|
||||||
|
_points = new Vec2[side * side];
|
||||||
|
for (int row = 0; row < side; row++)
|
||||||
|
{
|
||||||
|
for (int column = 0; column < side; column++)
|
||||||
|
{
|
||||||
|
var map = new Vec2(-LuneMap.HalfExtent + column * Cell, -LuneMap.HalfExtent + row * Cell);
|
||||||
|
float height = ground != null ? ground.StandHeight(map) : 0f;
|
||||||
|
_points[row * side + column] = map;
|
||||||
|
vertices[row * side + column] = LuneSpace.World(map, height + .45f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var triangles = new List<int>();
|
||||||
|
for (int row = 0; row + 1 < side; row++)
|
||||||
|
{
|
||||||
|
for (int column = 0; column + 1 < side; column++)
|
||||||
|
{
|
||||||
|
int a = row * side + column;
|
||||||
|
triangles.AddRange(new[] { a, a + side, a + 1, a + 1, a + side, a + side + 1 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_colors = new Color32[vertices.Length];
|
||||||
|
Alpha = new float[vertices.Length];
|
||||||
|
_mesh = new Mesh { name = "FogOverlay", indexFormat = UnityEngine.Rendering.IndexFormat.UInt32 };
|
||||||
|
_mesh.SetVertices(vertices);
|
||||||
|
_mesh.SetTriangles(triangles, 0);
|
||||||
|
_mesh.SetColors(_colors);
|
||||||
|
_mesh.RecalculateBounds();
|
||||||
|
gameObject.AddComponent<MeshFilter>().sharedMesh = _mesh;
|
||||||
|
var renderer = gameObject.AddComponent<MeshRenderer>();
|
||||||
|
renderer.sharedMaterial = material;
|
||||||
|
renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
|
||||||
|
renderer.receiveShadows = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Recomputes the darkness at most every Interval seconds (force: now).</summary>
|
||||||
|
public void Tick(float dt, List<KeyValuePair<Vec2, double>> sources, bool force = false)
|
||||||
|
{
|
||||||
|
_timer -= dt;
|
||||||
|
if (!force && _timer > 0f)
|
||||||
|
return;
|
||||||
|
_timer = Interval;
|
||||||
|
Refreshes++;
|
||||||
|
for (int i = 0; i < _points.Length; i++)
|
||||||
|
{
|
||||||
|
double best = double.PositiveInfinity;
|
||||||
|
foreach (KeyValuePair<Vec2, double> source in sources)
|
||||||
|
{
|
||||||
|
double gap = _points[i].DistanceTo(source.Key) - source.Value;
|
||||||
|
if (gap < best)
|
||||||
|
best = gap;
|
||||||
|
}
|
||||||
|
float t = Mathf.Clamp01((float)(best + Edge * .5) / Edge);
|
||||||
|
Alpha[i] = Darkness * t;
|
||||||
|
_colors[i] = new Color32(0, 0, 0, (byte)Mathf.RoundToInt(Alpha[i] * 255f));
|
||||||
|
}
|
||||||
|
_mesh.SetColors(_colors);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Luneraria/View/LuneFogOverlay.cs.meta
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a539f6fdd87d43728442d53d45a23e97
|
||||||
|
|
@ -74,6 +74,29 @@ namespace Luneraria.View
|
||||||
/// <summary>Ids of the units hidden in the fog this frame.</summary>
|
/// <summary>Ids of the units hidden in the fog this frame.</summary>
|
||||||
public HashSet<int> Hidden { get; private set; } = new HashSet<int>();
|
public HashSet<int> Hidden { get; private set; } = new HashSet<int>();
|
||||||
static readonly HashSet<int> Empty = new HashSet<int>();
|
static readonly HashSet<int> Empty = new HashSet<int>();
|
||||||
|
/// <summary>S4: the darkening grid of the fog (null until a fogged match runs).</summary>
|
||||||
|
public LuneFogOverlay Fog { get; private set; }
|
||||||
|
|
||||||
|
void FogTick(LuneMatch match, float dt)
|
||||||
|
{
|
||||||
|
bool on = FogSlot >= 0 && FogSlot < match.Players.Count && match.Extended && Library != null && Library.FogOverlay != null;
|
||||||
|
if (!on)
|
||||||
|
{
|
||||||
|
if (Fog != null && Fog.gameObject.activeSelf)
|
||||||
|
Fog.gameObject.SetActive(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Fog == null)
|
||||||
|
{
|
||||||
|
var go = new GameObject("FogOverlay");
|
||||||
|
go.transform.SetParent(transform, false);
|
||||||
|
Fog = go.AddComponent<LuneFogOverlay>();
|
||||||
|
Fog.Build(Library.Ground, Library.FogOverlay);
|
||||||
|
}
|
||||||
|
if (!Fog.gameObject.activeSelf)
|
||||||
|
Fog.gameObject.SetActive(true);
|
||||||
|
Fog.Tick(dt, LuneFog.Vision(match, _combat, match.Players[FogSlot].Team));
|
||||||
|
}
|
||||||
/// <summary>Main-thread cost of the last frame's view update (milliseconds).</summary>
|
/// <summary>Main-thread cost of the last frame's view update (milliseconds).</summary>
|
||||||
public double LastSyncMs { get; private set; }
|
public double LastSyncMs { get; private set; }
|
||||||
readonly System.Diagnostics.Stopwatch _clock = new System.Diagnostics.Stopwatch();
|
readonly System.Diagnostics.Stopwatch _clock = new System.Diagnostics.Stopwatch();
|
||||||
|
|
@ -117,6 +140,7 @@ namespace Luneraria.View
|
||||||
Hidden = FogSlot >= 0 && FogSlot < match.Players.Count && showUnits
|
Hidden = FogSlot >= 0 && FogSlot < match.Players.Count && showUnits
|
||||||
? LuneFog.Hidden(match, _combat, match.Players[FogSlot].Team, planning, planning ? match.Players[FogSlot].Draft : null)
|
? LuneFog.Hidden(match, _combat, match.Players[FogSlot].Team, planning, planning ? match.Players[FogSlot].Draft : null)
|
||||||
: Empty;
|
: Empty;
|
||||||
|
FogTick(match, dt);
|
||||||
float alpha = Driver.Runner.Current == LuneMatchRunner.Stage.Combat ? (float)Driver.Runner.Clock.Alpha : 1f;
|
float alpha = Driver.Runner.Current == LuneMatchRunner.Stage.Combat ? (float)Driver.Runner.Clock.Alpha : 1f;
|
||||||
if (showUnits)
|
if (showUnits)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,8 @@ namespace Luneraria.View
|
||||||
public Material HeroRing;
|
public Material HeroRing;
|
||||||
/// <summary>H1: expanding ring of a hero's ultimate (moon light).</summary>
|
/// <summary>H1: expanding ring of a hero's ultimate (moon light).</summary>
|
||||||
public Material MoonBurst;
|
public Material MoonBurst;
|
||||||
|
/// <summary>S4: fog of war overlay (Luneraria/FogOverlay, vertex alpha).</summary>
|
||||||
|
public Material FogOverlay;
|
||||||
public Material BarBack;
|
public Material BarBack;
|
||||||
public Material[] BarFill = new Material[3];
|
public Material[] BarFill = new Material[3];
|
||||||
public Material[] Bolt = new Material[3];
|
public Material[] Bolt = new Material[3];
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,8 @@ namespace Luneraria.View
|
||||||
/// <summary>H1: expanding moon ring of an ultimate (seconds left, 0 = none).</summary>
|
/// <summary>H1: expanding moon ring of an ultimate (seconds left, 0 = none).</summary>
|
||||||
Transform _burst;
|
Transform _burst;
|
||||||
float _burstTime;
|
float _burstTime;
|
||||||
|
/// <summary>S4: a small gold ring circling over the head of a stunned unit.</summary>
|
||||||
|
Transform _stun;
|
||||||
float _attackFlash;
|
float _attackFlash;
|
||||||
float _time;
|
float _time;
|
||||||
Vector3 _lastVisual;
|
Vector3 _lastVisual;
|
||||||
|
|
@ -116,6 +118,9 @@ namespace Luneraria.View
|
||||||
_burst.localPosition = new Vector3(0f, .08f, 0f);
|
_burst.localPosition = new Vector3(0f, .08f, 0f);
|
||||||
_burst.gameObject.SetActive(false);
|
_burst.gameObject.SetActive(false);
|
||||||
}
|
}
|
||||||
|
_stun = Marker("StunRing", library.RingRound, library.HeroRing);
|
||||||
|
_stun.localScale = new Vector3(.55f, 1f, .55f);
|
||||||
|
_stun.gameObject.SetActive(false);
|
||||||
transform.position = Ground(unit.Position);
|
transform.position = Ground(unit.Position);
|
||||||
transform.rotation = LuneSpace.Facing(unit.Facing);
|
transform.rotation = LuneSpace.Facing(unit.Facing);
|
||||||
_lastVisual = transform.position;
|
_lastVisual = transform.position;
|
||||||
|
|
@ -164,6 +169,14 @@ namespace Luneraria.View
|
||||||
if (ultimate && _burst != null)
|
if (ultimate && _burst != null)
|
||||||
_burstTime = BurstSeconds;
|
_burstTime = BurstSeconds;
|
||||||
Burst(dt);
|
Burst(dt);
|
||||||
|
bool stunned = Unit.Alive && Unit.ShowsStun();
|
||||||
|
if (_stun.gameObject.activeSelf != stunned)
|
||||||
|
_stun.gameObject.SetActive(stunned);
|
||||||
|
if (stunned)
|
||||||
|
{
|
||||||
|
_stun.localPosition = new Vector3(0f, _height + .15f, 0f);
|
||||||
|
_stun.Rotate(0f, 360f * dt, 0f, Space.Self);
|
||||||
|
}
|
||||||
if (attacked || ability)
|
if (attacked || ability)
|
||||||
_attackFlash = .28f;
|
_attackFlash = .28f;
|
||||||
_attackFlash = Mathf.Max(0f, _attackFlash - dt);
|
_attackFlash = Mathf.Max(0f, _attackFlash - dt);
|
||||||
|
|
|
||||||
46
docs/luneraria/HAUPTSTAND.md
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
# Hauptstand · 11. Oktober 2026
|
||||||
|
|
||||||
|
Stand: 11. Oktober 2026 · Branch `main` (vorgerückt) · Tag `stand-2026-10-11`.
|
||||||
|
|
||||||
|
Champions of Luneraria in Unity mit allen Phasen bis S4.
|
||||||
|
- **Zusammenführung:** `main` enthielt bisher nur den ersten Commit („Unity-Projekt angelegt“). Alle Phasen-Branches liegen in einer Linie; `main` wurde ohne Konflikte auf den Endstand vorgerückt.
|
||||||
|
- **Phasen-Branches:** Sie bleiben als Nachweis erhalten.
|
||||||
|
|
||||||
|
## Was der Stand enthält
|
||||||
|
|
||||||
|
| Phase | Inhalt | Doku |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| U1–U5.5 | Port aus Godot mit Verhaltensgleichheit, Welt, HUD, Netzwerk, PBR-Grafik, alle zehn Glutpakt-Truppen als Meshy-Figuren | `docs/port/PORT-STATUS.md`, `PORT-QA.md` |
|
||||||
|
| Konzept | Ideensammlung Strategie/MOBA, sieben neue Champions, Skin-Regeln | [IDEEN.md](IDEEN.md), [CHAMPIONS-KONZEPT.md](CHAMPIONS-KONZEPT.md) |
|
||||||
|
| H1 | Sylvara: Ultimate-Auslöser in der Planung, Skin-System (Blutmond) | [H1-SYLVARA.md](H1-SYLVARA.md) |
|
||||||
|
| S1 | Regelschalter „Erweitert“: Söldner-Einkommen, Kasernen, Rückkauf, Mondsegen | [S1-STRATEGIE.md](S1-STRATEGIE.md) |
|
||||||
|
| S2 | Glyphe, Item-Rezepte, Ancient-Stufen, Grottenjagd der Bots | [S2-STRATEGIE.md](S2-STRATEGIE.md) |
|
||||||
|
| S3 | frühe Bot-Helden (Rotationsfehler behoben), Neutrallager, Fog of War mit Spähern | [S3-STRATEGIE.md](S3-STRATEGIE.md) |
|
||||||
|
| H2 | Brunhild: Markierung, Betäubung, Skin Eiswalküre | [H2-BRUNHILD.md](H2-BRUNHILD.md) |
|
||||||
|
| S4 | Betäubung sichtbar, Nebel im Gelände, Glyphe und Betäubung für Gäste | [S4-FEINSCHLIFF.md](S4-FEINSCHLIFF.md) |
|
||||||
|
|
||||||
|
## Spielen
|
||||||
|
|
||||||
|
- **Startbildschirm:** „Allein spielen“, „Hosten“ oder „Beitreten“. Der Schalter **REGELN** steht auf ERWEITERT (Legion TD 2, Dota 2, LoL); REFERENZ spielt die Regeln des Godot-Originals.
|
||||||
|
- **Helden (5):** Ringborke, Quellgeflecht, Funkenlanze, Sylvara, Brunhild. Ultimate-Auslöser und Skin wählst du im Heldenfenster unter „Ultimate & Skin“.
|
||||||
|
- **Team-Aktionen im Teampanel links:** Glyphe, Ancient-Stufe, Späher, Lager-Übersicht.
|
||||||
|
- **macOS-Player:** `Builds/macOS/Luneraria.app` im Arbeitsordner, aus dem der Stand gebaut wurde. Ein frischer Bau entsteht mit `LunePlayerBuild.BuildMac`.
|
||||||
|
|
||||||
|
## Prüfstand
|
||||||
|
|
||||||
|
| Prüfung | Ergebnis |
|
||||||
|
| --- | --- |
|
||||||
|
| Kern (.NET 8) | 627/627: content 77, core 91, m2 73, golden 157, determinism 6, net 43, net_rounds 12, h1 42, s1 31, s2 34, s3 31, h2 22, s4 8 |
|
||||||
|
| Parität zur Godot-Referenz | Golden 51.221 Werte, 0 Abweichungen; Bot-Fingerabdrücke `DCE95C96556F3A1A` (Seed 2) und `7B8E43AEFC0D60C5` (Seed 9 ab Welle 21) unverändert. Alle neuen Regeln wirken nur mit `MatchOptions.Extended` |
|
||||||
|
| Unity | EditMode 35/35, PlayMode 20/20, Verify A–I 718/0, Player-Selbsttest 30/30 |
|
||||||
|
|
||||||
|
## Offene Punkte
|
||||||
|
|
||||||
|
- **Build-Module für Windows und Linux** (Zielplattformen) fehlen weiterhin; Installation nur nach Freigabe.
|
||||||
|
- **Git LFS:** Das Repo wächst mit jeder Figur um rund 40 bis 60 MB.
|
||||||
|
- **Weitere Helden des Konzepts:** Thalion, Ilyra, Isolde, Aurelian, Rowan (Meshy-Guthaben 110 Credits, nächste Gutschrift im November).
|
||||||
|
- **Regeln, die du entscheiden musst:**
|
||||||
|
- manuelles Ultimate im Kampf (braucht Kampfbefehle im Netz)
|
||||||
|
- Quellgeflecht-Dominanz in Probe-Vergleichen (Referenzbalance)
|
||||||
|
- kürzere Partien mit Lagern beobachten
|
||||||
|
- **Netz:** Der Nebel ist Darstellung, keine Geheimhaltung; Gäste erhalten alle Einheiten.
|
||||||
32
docs/luneraria/S4-FEINSCHLIFF.md
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
# S4 · Feinschliff: Betäubung, Nebel im Gelände, Glyphe für Gäste
|
||||||
|
|
||||||
|
Stand: 11. Oktober 2026 · Branch `luneraria/s4-feinschliff` (von `luneraria/h2-brunhild`).
|
||||||
|
Auftrag: „1 und 2 durchführen“. Punkt 1 ist der Feinschliff aus S3 und H2 ohne Meshy-Credits, Punkt 2 die Zusammenführung zum Hauptstand (siehe unten).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Inhalt
|
||||||
|
|
||||||
|
| Punkt | Umsetzung |
|
||||||
|
| --- | --- |
|
||||||
|
| Betäubung sichtbar | Ein goldener Ring kreist über dem Kopf jeder betäubten Einheit (`LuneUnitView`, Marker `StunRing`). Gäste sehen ihn ebenfalls: Der Host überträgt den Zustand als Bit 18 in den Flags des Kampfrahmens (`LuneUnit.NetStunned`, `ShowsStun()`) |
|
||||||
|
| Nebel im Gelände | `LuneFogOverlay` ist ein Gitter aus 2-m-Zellen über die ganze Karte, das dem Gelände folgt (0,45 m darüber). Die Deckkraft der Gitterpunkte wird zehnmal pro Sekunde aus den Sichtquellen berechnet, mit weicher Kante von 2 m: außerhalb jeder Sicht 55 % Nachtblau, innerhalb klar. Shader `Luneraria/FogOverlay` (transparent, Deckkraft aus den Vertexfarben). Die Sichtquellen kommen aus `LuneFog.Vision`; dieselbe Funktion steuert das Ausblenden. Der Nebel ist nur aktiv mit erweiterten Regeln und einem menschlichen Sitz |
|
||||||
|
| Glyphe für Gäste | Der Kampfrahmen hängt an die Gebäude-Lebenspunkte vier Werte an: je Team die Lane der laufenden Glyphe und die Restsekunden. Gäste setzen damit `GlyphLane`/`GlyphUntil` und sehen den Glyphen-Ring. Ältere Gäste lesen nur die Gebäudewerte und ignorieren den Rest |
|
||||||
|
|
||||||
|
Die Simulation ist unberührt: Betäubungs-Ring, Nebel-Gitter und Gast-Glyphe sind reine Darstellung.
|
||||||
|
|
||||||
|
## Tests und Nachweise
|
||||||
|
|
||||||
|
| Prüfung | Ergebnis |
|
||||||
|
| --- | --- |
|
||||||
|
| Kern (.NET 8) | 627/627, darunter **s4 8**: Über die Loopback-Verbindung sieht der Gast die Glyphe von Blau auf Mid, den Mid-Turm als geschützt und die Betäubung genau einer Einheit; Host und Gast zählen gleich viele Sichtquellen |
|
||||||
|
| Golden und Fingerabdrücke | 0 Abweichungen; `DCE95C96556F3A1A` unverändert |
|
||||||
|
| Unity EditMode | 35/35 |
|
||||||
|
| Unity PlayMode | 20/20, neu `S4PolishViewsTests.S4Views`: Nebel aktiv, eigener Ancient im Licht (< 5 %), gegnerischer Ancient im Nebel (> 50 %), Betäubungs-Ring sichtbar, kein Nebel unter den Referenzregeln. Verify A–I 718/0 |
|
||||||
|
| Player-Selbsttest | macOS 30/30 |
|
||||||
|
| Leistung | Benchmark (Bot-Partie, sechs Brunhilds): Karte 148,6–151,5 fps, Mid nah 163,4–167,3 fps, Ansichten 0,19–0,22 ms. Der Benchmark hat keinen menschlichen Sitz, der Nebel ist dort also aus. Nicht gemessene Schätzung für den Nebel: 1.521 Gitterpunkte gegen 50–90 Sichtquellen, zehnmal pro Sekunde |
|
||||||
|
|
||||||
|
Bilder in `docs/port/screenshots/s4/spiel/`:
|
||||||
|
1. Nebel in der Übersicht
|
||||||
|
2. Nebelgrenze auf Mid
|
||||||
|
3. Betäubung
|
||||||
|
|
@ -324,6 +324,17 @@ Die Glutpakt-Arbeit entstand als Kette aufeinander aufbauender Zweige (`lunerari
|
||||||
| Bild | `screenshots/h2/spiel/`, `figur/` |
|
| Bild | `screenshots/h2/spiel/`, `figur/` |
|
||||||
| Commits | `luneraria/h2-brunhild` (H2A `cbff678`) |
|
| Commits | `luneraria/h2-brunhild` (H2A `cbff678`) |
|
||||||
|
|
||||||
|
## S4 · Feinschliff (Betäubung, Nebel im Gelände, Glyphe für Gäste)
|
||||||
|
|
||||||
|
| Punkt | Ergebnis |
|
||||||
|
| --- | --- |
|
||||||
|
| Tests | Kern .NET 627/627 (neu `s4` 8), EditMode 35/35, PlayMode 20/20 (neu `S4Views`), Verify A–I 718/0, Player-Selbsttest 30/30 |
|
||||||
|
| Parität | Golden 0 Abweichungen, Fingerabdruck `DCE95C96556F3A1A` gleich; alles Darstellung |
|
||||||
|
| Inhalt | Betäubungs-Ring (auch für Gäste über Bit 18 der Rahmen-Flags), Nebel-Gitter im Gelände (`LuneFogOverlay`, Shader `Luneraria/FogOverlay`), Glyphe im Kampfrahmen für Gäste |
|
||||||
|
| Leistung | Karte 148,6–151,5 fps, Mid nah 163,4–167,3 fps (Bot-Partie ohne Nebel); die Nebelkosten sind nicht gemessen |
|
||||||
|
| Bild | `screenshots/s4/spiel/` |
|
||||||
|
| Commits | `luneraria/s4-feinschliff` |
|
||||||
|
|
||||||
## Ausblick
|
## Ausblick
|
||||||
|
|
||||||
Der Pilot entscheidet über eine Serie weiterer Meshy-Figuren (Kosten je Figur, Lizenz, Stilgleichheit). Offen bleiben außerdem Künstler-Sculpts für Anatomie/Gesicht/Haar, LOD und Material-Atlanten sowie die Build-Module für Windows und Linux.
|
Der Pilot entscheidet über eine Serie weiterer Meshy-Figuren (Kosten je Figur, Lizenz, Stilgleichheit). Offen bleiben außerdem Künstler-Sculpts für Anatomie/Gesicht/Haar, LOD und Material-Atlanten sowie die Build-Module für Windows und Linux.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Port-Status · Champions of Luneraria in Unity
|
# Port-Status · Champions of Luneraria in Unity
|
||||||
|
|
||||||
Stand: 11. Oktober 2026 (H2, Brunhild).
|
Stand: 11. Oktober 2026 (Hauptstand: `main` = S4, Tag `stand-2026-10-11`; Übersicht [../luneraria/HAUPTSTAND.md](../luneraria/HAUPTSTAND.md)).
|
||||||
|
|
||||||
Referenz ist der Godot-Stand `luneraria/g3` (`1b540f2`) in `../saumwacht-godot`; er wird nicht mehr verändert. Engine: Unity 6.3 LTS (6000.3.20f1), Renderer URP. HDRP ist ausgeschlossen, bis ein Vergleich mit einer echten Szene etwas anderes nahelegt.
|
Referenz ist der Godot-Stand `luneraria/g3` (`1b540f2`) in `../saumwacht-godot`; er wird nicht mehr verändert. Engine: Unity 6.3 LTS (6000.3.20f1), Renderer URP. HDRP ist ausgeschlossen, bis ein Vergleich mit einer echten Szene etwas anderes nahelegt.
|
||||||
|
|
||||||
|
|
@ -19,6 +19,7 @@ Zielplattformen sind Fedora 44 und Windows 11; macOS ist die Entwicklungsplattfo
|
||||||
| S2 · Glyphe, Rezepte, Ancient | **fertig** (`luneraria/s2-strategie`): Glyphe (Dota 2), Item-Rezepte (Dota 2/LoL), Ancient-Stufen (Legion TD 2), Grottenjagd der Bots; hinter dem Regelschalter „Erweitert“ | [../luneraria/S2-STRATEGIE.md](../luneraria/S2-STRATEGIE.md) |
|
| S2 · Glyphe, Rezepte, Ancient | **fertig** (`luneraria/s2-strategie`): Glyphe (Dota 2), Item-Rezepte (Dota 2/LoL), Ancient-Stufen (Legion TD 2), Grottenjagd der Bots; hinter dem Regelschalter „Erweitert“ | [../luneraria/S2-STRATEGIE.md](../luneraria/S2-STRATEGIE.md) |
|
||||||
| S3 · Bots, Neutrallager, Fog of War | **fertig** (`luneraria/s3-strategie`): frühe Bot-Helden und Rotationsfehler behoben, Neutrallager mit LoL-Buffs, Fog of War mit Spähern (Dota 2) und Aufklärung in der Planung; hinter dem Regelschalter „Erweitert“ | [../luneraria/S3-STRATEGIE.md](../luneraria/S3-STRATEGIE.md) |
|
| S3 · Bots, Neutrallager, Fog of War | **fertig** (`luneraria/s3-strategie`): frühe Bot-Helden und Rotationsfehler behoben, Neutrallager mit LoL-Buffs, Fog of War mit Spähern (Dota 2) und Aufklärung in der Planung; hinter dem Regelschalter „Erweitert“ | [../luneraria/S3-STRATEGIE.md](../luneraria/S3-STRATEGIE.md) |
|
||||||
| H2 · Brunhild | **fertig** (`luneraria/h2-brunhild`): zweite Heldin des Champions-Konzepts mit Markierung und Betäubung, Skin Eiswalküre; Referenzpartien unverändert | [../luneraria/H2-BRUNHILD.md](../luneraria/H2-BRUNHILD.md) |
|
| H2 · Brunhild | **fertig** (`luneraria/h2-brunhild`): zweite Heldin des Champions-Konzepts mit Markierung und Betäubung, Skin Eiswalküre; Referenzpartien unverändert | [../luneraria/H2-BRUNHILD.md](../luneraria/H2-BRUNHILD.md) |
|
||||||
|
| S4 · Feinschliff | **fertig** (`luneraria/s4-feinschliff`): Betäubung sichtbar, Nebel im Gelände, Glyphe und Betäubung für Gäste | [../luneraria/S4-FEINSCHLIFF.md](../luneraria/S4-FEINSCHLIFF.md) |
|
||||||
|
|
||||||
QA je Meilenstein: [PORT-QA.md](PORT-QA.md).
|
QA je Meilenstein: [PORT-QA.md](PORT-QA.md).
|
||||||
|
|
||||||
|
|
|
||||||
20
docs/port/logs/s4/core-tests-dotnet.json
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"suites": [
|
||||||
|
{"suite": "content", "checks": 77, "failures": 0, "seconds": 0.02, "failed": [], "notes": ["map geometry: largest deviation lanes 0.00E+000 m, buildings 0.00E+000 m"]},
|
||||||
|
{"suite": "core", "checks": 91, "failures": 0, "seconds": 1.69, "failed": [], "notes": ["full match seed 2 -> Rot after 9 rounds"]},
|
||||||
|
{"suite": "m2", "checks": 73, "failures": 0, "seconds": 0.39, "failed": [], "notes": []},
|
||||||
|
{"suite": "golden", "checks": 157, "failures": 0, "seconds": 1.55, "failed": [], "notes": ["golden values compared: 51221", "largest deviation angle: 0.00E+000 over 1140 values (tolerance 1E-004)", "largest deviation effect: 0.00E+000 over 264 values (tolerance 1E-006)", "largest deviation hp: 0.00E+000 over 5679 values (tolerance 1E-002)", "largest deviation other: 0.00E+000 over 34 values (tolerance 1E-006)", "largest deviation position: 0.00E+000 over 3420 values (tolerance 1E-003)", "largest deviation time: 0.00E+000 over 780 values (tolerance 1E-006)", "domain ancients: 246 values, 0 differences, largest numeric deviation 0.00E+000", "domain announcements: 44 values, 0 differences, largest numeric deviation 0.00E+000", "domain boss: 1559 values, 0 differences, largest numeric deviation 0.00E+000", "domain combat: 676 values, 0 differences, largest numeric deviation 0.00E+000", "domain commands: 410 values, 0 differences, largest numeric deviation 0.00E+000", "domain events: 6937 values, 0 differences, largest numeric deviation 0.00E+000", "domain facing: 1140 values, 0 differences, largest numeric deviation 0.00E+000", "domain gold: 3584 values, 0 differences, largest numeric deviation 0.00E+000", "domain heroes: 1512 values, 0 differences, largest numeric deviation 0.00E+000", "domain hp: 3420 values, 0 differences, largest numeric deviation 0.00E+000", "domain other: 119 values, 0 differences, largest numeric deviation 0.00E+000", "domain positions: 3420 values, 0 differences, largest numeric deviation 0.00E+000", "domain purchases: 9311 values, 0 differences, largest numeric deviation 0.00E+000", "domain rounds: 119 values, 0 differences, largest numeric deviation 0.00E+000", "domain targets: 1140 values, 0 differences, largest numeric deviation 0.00E+000", "domain towers: 1994 values, 0 differences, largest numeric deviation 0.00E+000", "domain units: 14164 values, 0 differences, largest numeric deviation 0.00E+000", "domain waves: 731 values, 0 differences, largest numeric deviation 0.00E+000", "domain winner: 695 values, 0 differences, largest numeric deviation 0.00E+000"]},
|
||||||
|
{"suite": "determinism", "checks": 6, "failures": 0, "seconds": 1.52, "failed": [], "notes": []},
|
||||||
|
{"suite": "net", "checks": 43, "failures": 0, "seconds": 0.01, "failed": [], "notes": []},
|
||||||
|
{"suite": "net_rounds", "checks": 12, "failures": 0, "seconds": 0.07, "failed": [], "notes": []},
|
||||||
|
{"suite": "h1", "checks": 42, "failures": 0, "seconds": 1.27, "failed": [], "notes": ["sylvara-bot match seed 12: 15/1"]},
|
||||||
|
{"suite": "s1", "checks": 31, "failures": 0, "seconds": 0.43, "failed": [], "notes": ["extended seed 17: 10/0, income bonus 24,0,24,0,0,15, blessing 0/0"]},
|
||||||
|
{"suite": "s2", "checks": 34, "failures": 0, "seconds": 2.10, "failed": [], "notes": ["12 extended matches: expeditions 12, Mondsegen 4, recipe heroes 0, glyphs 19, Ancient levels 34; seed 1 10/0"]},
|
||||||
|
{"suite": "s3", "checks": 31, "failures": 0, "seconds": 0.61, "failed": [], "notes": []},
|
||||||
|
{"suite": "h2", "checks": 22, "failures": 0, "seconds": 0.00, "failed": [], "notes": []},
|
||||||
|
{"suite": "s4", "checks": 8, "failures": 0, "seconds": 0.00, "failed": [], "notes": []}
|
||||||
|
],
|
||||||
|
"runtime": ".NET 8.0.27",
|
||||||
|
"label": ".NET 8.0.27, Release",
|
||||||
|
"os": "Darwin 27.0.0 Darwin Kernel Version 27.0.0: Tue Aug 11 21:02:59 PDT 2026; root:xnu-13432.1.9~1/RELEASE_ARM64_T8142 Arm64"
|
||||||
|
}
|
||||||
379
docs/port/logs/s4/editmode-results.xml
Normal file
|
|
@ -0,0 +1,379 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<test-run id="2" testcasecount="35" result="Passed" total="35" passed="35" failed="0" inconclusive="0" skipped="0" asserts="0" engine-version="3.5.0.0" clr-version="4.0.30319.42000" start-time="2026-10-11 15:44:34Z" end-time="2026-10-11 15:46:18Z" duration="103.3902789">
|
||||||
|
<test-suite type="TestSuite" id="1000" name="luneraria-unity" fullname="luneraria-unity" runstate="Runnable" testcasecount="35" result="Passed" start-time="2026-10-11 15:44:34Z" end-time="2026-10-11 15:46:18Z" duration="103.390279" total="35" passed="35" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="platform" value="EditMode" />
|
||||||
|
</properties>
|
||||||
|
<test-suite type="Assembly" id="1018" name="Luneraria.Core.Tests.dll" fullname="/private/tmp/lune-konzept/Library/ScriptAssemblies/Luneraria.Core.Tests.dll" runstate="Runnable" testcasecount="15" result="Passed" start-time="2026-10-11 15:44:34Z" end-time="2026-10-11 15:45:53Z" duration="78.283975" total="15" passed="15" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_PID" value="37834" />
|
||||||
|
<property name="_APPDOMAIN" value="Unity Child Domain" />
|
||||||
|
<property name="platform" value="EditMode" />
|
||||||
|
<property name="EditorOnly" value="True" />
|
||||||
|
</properties>
|
||||||
|
<test-suite type="TestSuite" id="1019" name="Luneraria" fullname="Luneraria" runstate="Runnable" testcasecount="15" result="Passed" start-time="2026-10-11 15:44:34Z" end-time="2026-10-11 15:45:53Z" duration="78.283704" total="15" passed="15" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestSuite" id="1020" name="Core" fullname="Luneraria.Core" runstate="Runnable" testcasecount="15" result="Passed" start-time="2026-10-11 15:44:34Z" end-time="2026-10-11 15:45:53Z" duration="78.283495" total="15" passed="15" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestSuite" id="1021" name="Tests" fullname="Luneraria.Core.Tests" runstate="Runnable" testcasecount="15" result="Passed" start-time="2026-10-11 15:44:34Z" end-time="2026-10-11 15:45:53Z" duration="78.283229" total="15" passed="15" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestFixture" id="1001" name="CoreIntegrationTests" fullname="Luneraria.Core.Tests.CoreIntegrationTests" classname="Luneraria.Core.Tests.CoreIntegrationTests" runstate="Runnable" testcasecount="2" result="Passed" start-time="2026-10-11 15:44:34Z" end-time="2026-10-11 15:44:34Z" duration="0.071599" total="2" passed="2" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1003" name="CoreFloatArithmeticMatchesGodot" fullname="Luneraria.Core.Tests.CoreIntegrationTests.CoreFloatArithmeticMatchesGodot" methodname="CoreFloatArithmeticMatchesGodot" classname="Luneraria.Core.Tests.CoreIntegrationTests" runstate="Runnable" seed="107261932" result="Passed" start-time="2026-10-11 15:44:34Z" end-time="2026-10-11 15:44:34Z" duration="0.066655" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[float probe: length 4000/4000, length_squared 4000/4000, distance_to 4000/4000, distance_squared_to 4000/4000, dot 4000/4000, normalized 4000/4000, lerp 4000/4000, limit_length 4000/4000, multiply 4000/4000, divide 4000/4000, sub_normalized 4000/4000, atan2 4000/4000
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1002" name="CoreHasNoEngineReferences" fullname="Luneraria.Core.Tests.CoreIntegrationTests.CoreHasNoEngineReferences" methodname="CoreHasNoEngineReferences" classname="Luneraria.Core.Tests.CoreIntegrationTests" runstate="Runnable" seed="903255537" result="Passed" start-time="2026-10-11 15:44:34Z" end-time="2026-10-11 15:44:34Z" duration="0.000311" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1004" name="CoreSuiteTests" fullname="Luneraria.Core.Tests.CoreSuiteTests" classname="Luneraria.Core.Tests.CoreSuiteTests" runstate="Runnable" testcasecount="13" result="Passed" start-time="2026-10-11 15:44:34Z" end-time="2026-10-11 15:45:53Z" duration="78.210803" total="13" passed="13" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1005" name="Content" fullname="Luneraria.Core.Tests.CoreSuiteTests.Content" methodname="Content" classname="Luneraria.Core.Tests.CoreSuiteTests" runstate="Runnable" seed="930309601" result="Passed" start-time="2026-10-11 15:44:34Z" end-time="2026-10-11 15:44:34Z" duration="0.013726" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[content: map geometry: largest deviation lanes 0.00E+000 m, buildings 0.00E+000 m
|
||||||
|
LUNE_U1_PASS content: 77 checks
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1006" name="CoreRules" fullname="Luneraria.Core.Tests.CoreSuiteTests.CoreRules" methodname="CoreRules" classname="Luneraria.Core.Tests.CoreSuiteTests" runstate="Runnable" seed="1436593523" result="Passed" start-time="2026-10-11 15:44:34Z" end-time="2026-10-11 15:44:40Z" duration="5.321400" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[core: full match seed 2 -> Rot after 9 rounds
|
||||||
|
LUNE_U1_PASS core: 91 checks
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1009" name="Determinism" fullname="Luneraria.Core.Tests.CoreSuiteTests.Determinism" methodname="Determinism" classname="Luneraria.Core.Tests.CoreSuiteTests" runstate="Runnable" seed="2053697287" result="Passed" start-time="2026-10-11 15:44:40Z" end-time="2026-10-11 15:44:53Z" duration="13.730174" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_U1_PASS determinism: 6 checks
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1008" name="GoldenReplays" fullname="Luneraria.Core.Tests.CoreSuiteTests.GoldenReplays" methodname="GoldenReplays" classname="Luneraria.Core.Tests.CoreSuiteTests" runstate="Runnable" seed="1627200637" result="Passed" start-time="2026-10-11 15:44:53Z" end-time="2026-10-11 15:45:07Z" duration="13.868623" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[golden: golden values compared: 51221
|
||||||
|
golden: largest deviation angle: 0.00E+000 over 1140 values (tolerance 1E-004)
|
||||||
|
golden: largest deviation effect: 0.00E+000 over 264 values (tolerance 1E-006)
|
||||||
|
golden: largest deviation hp: 0.00E+000 over 5679 values (tolerance 1E-002)
|
||||||
|
golden: largest deviation other: 0.00E+000 over 34 values (tolerance 1E-006)
|
||||||
|
golden: largest deviation position: 0.00E+000 over 3420 values (tolerance 1E-003)
|
||||||
|
golden: largest deviation time: 0.00E+000 over 780 values (tolerance 1E-006)
|
||||||
|
golden: domain ancients: 246 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain announcements: 44 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain boss: 1559 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain combat: 676 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain commands: 410 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain events: 6937 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain facing: 1140 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain gold: 3584 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain heroes: 1512 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain hp: 3420 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain other: 119 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain positions: 3420 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain purchases: 9311 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain rounds: 119 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain targets: 1140 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain towers: 1994 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain units: 14164 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain waves: 731 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
golden: domain winner: 695 values, 0 differences, largest numeric deviation 0.00E+000
|
||||||
|
LUNE_U1_PASS golden: 157 checks
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1012" name="H1Heroes" fullname="Luneraria.Core.Tests.CoreSuiteTests.H1Heroes" methodname="H1Heroes" classname="Luneraria.Core.Tests.CoreSuiteTests" runstate="Runnable" seed="408816745" result="Passed" start-time="2026-10-11 15:45:07Z" end-time="2026-10-11 15:45:19Z" duration="11.554235" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[h1: sylvara-bot match seed 12: 15/1
|
||||||
|
LUNE_U1_PASS h1: 42 checks
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1016" name="H2Heroes" fullname="Luneraria.Core.Tests.CoreSuiteTests.H2Heroes" methodname="H2Heroes" classname="Luneraria.Core.Tests.CoreSuiteTests" runstate="Runnable" seed="375337043" result="Passed" start-time="2026-10-11 15:45:19Z" end-time="2026-10-11 15:45:19Z" duration="0.014546" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_U1_PASS h2: 22 checks
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1007" name="M2Rules" fullname="Luneraria.Core.Tests.CoreSuiteTests.M2Rules" methodname="M2Rules" classname="Luneraria.Core.Tests.CoreSuiteTests" runstate="Runnable" seed="415400525" result="Passed" start-time="2026-10-11 15:45:19Z" end-time="2026-10-11 15:45:22Z" duration="3.399756" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_U1_PASS m2: 73 checks
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1010" name="NetProtocol" fullname="Luneraria.Core.Tests.CoreSuiteTests.NetProtocol" methodname="NetProtocol" classname="Luneraria.Core.Tests.CoreSuiteTests" runstate="Runnable" seed="1971154753" result="Passed" start-time="2026-10-11 15:45:22Z" end-time="2026-10-11 15:45:22Z" duration="0.068419" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_U1_PASS net: 43 checks
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1011" name="NetRounds" fullname="Luneraria.Core.Tests.CoreSuiteTests.NetRounds" methodname="NetRounds" classname="Luneraria.Core.Tests.CoreSuiteTests" runstate="Runnable" seed="1317151176" result="Passed" start-time="2026-10-11 15:45:22Z" end-time="2026-10-11 15:45:23Z" duration="0.581983" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_U1_PASS net_rounds: 12 checks
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1013" name="S1Rules" fullname="Luneraria.Core.Tests.CoreSuiteTests.S1Rules" methodname="S1Rules" classname="Luneraria.Core.Tests.CoreSuiteTests" runstate="Runnable" seed="1057465390" result="Passed" start-time="2026-10-11 15:45:23Z" end-time="2026-10-11 15:45:27Z" duration="3.850179" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[s1: extended seed 17: 10/0, income bonus 24,0,24,0,0,15, blessing 0/0
|
||||||
|
LUNE_U1_PASS s1: 31 checks
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1014" name="S2Rules" fullname="Luneraria.Core.Tests.CoreSuiteTests.S2Rules" methodname="S2Rules" classname="Luneraria.Core.Tests.CoreSuiteTests" runstate="Runnable" seed="137525762" result="Passed" start-time="2026-10-11 15:45:27Z" end-time="2026-10-11 15:45:47Z" duration="19.941361" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[s2: 12 extended matches: expeditions 12, Mondsegen 4, recipe heroes 0, glyphs 19, Ancient levels 34; seed 1 10/0
|
||||||
|
LUNE_U1_PASS s2: 34 checks
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1015" name="S3Rules" fullname="Luneraria.Core.Tests.CoreSuiteTests.S3Rules" methodname="S3Rules" classname="Luneraria.Core.Tests.CoreSuiteTests" runstate="Runnable" seed="1328749086" result="Passed" start-time="2026-10-11 15:45:47Z" end-time="2026-10-11 15:45:53Z" duration="5.853746" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_U1_PASS s3: 31 checks
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1017" name="S4Net" fullname="Luneraria.Core.Tests.CoreSuiteTests.S4Net" methodname="S4Net" classname="Luneraria.Core.Tests.CoreSuiteTests" runstate="Runnable" seed="1242366733" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.004941" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_U1_PASS s4: 8 checks
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="Assembly" id="1027" name="Luneraria.Net.Tests.dll" fullname="/private/tmp/lune-konzept/Library/ScriptAssemblies/Luneraria.Net.Tests.dll" runstate="Runnable" testcasecount="4" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.127653" total="4" passed="4" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_PID" value="37834" />
|
||||||
|
<property name="_APPDOMAIN" value="Unity Child Domain" />
|
||||||
|
<property name="platform" value="EditMode" />
|
||||||
|
<property name="EditorOnly" value="True" />
|
||||||
|
</properties>
|
||||||
|
<test-suite type="TestSuite" id="1028" name="Luneraria" fullname="Luneraria" runstate="Runnable" testcasecount="4" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.029621" total="4" passed="4" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestSuite" id="1029" name="Net" fullname="Luneraria.Net" runstate="Runnable" testcasecount="4" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.028425" total="4" passed="4" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestSuite" id="1030" name="Tests" fullname="Luneraria.Net.Tests" runstate="Runnable" testcasecount="4" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.028061" total="4" passed="4" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestFixture" id="1022" name="LuneWireTests" fullname="Luneraria.Net.Tests.LuneWireTests" classname="Luneraria.Net.Tests.LuneWireTests" runstate="Runnable" testcasecount="4" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.027878" total="4" passed="4" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1023" name="CommandRoundTrips" fullname="Luneraria.Net.Tests.LuneWireTests.CommandRoundTrips" methodname="CommandRoundTrips" classname="Luneraria.Net.Tests.LuneWireTests" runstate="Runnable" seed="1394399232" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.013068" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1026" name="LobbyAndOptionsRoundTrip" fullname="Luneraria.Net.Tests.LuneWireTests.LobbyAndOptionsRoundTrip" methodname="LobbyAndOptionsRoundTrip" classname="Luneraria.Net.Tests.LuneWireTests" runstate="Runnable" seed="914420489" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.001439" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1024" name="StateRoundTrips" fullname="Luneraria.Net.Tests.LuneWireTests.StateRoundTrips" methodname="StateRoundTrips" classname="Luneraria.Net.Tests.LuneWireTests" runstate="Runnable" seed="382721647" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.006154" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1025" name="UnitsAndFrameRoundTrip" fullname="Luneraria.Net.Tests.LuneWireTests.UnitsAndFrameRoundTrip" methodname="UnitsAndFrameRoundTrip" classname="Luneraria.Net.Tests.LuneWireTests" runstate="Runnable" seed="993999595" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.005527" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="Assembly" id="1044" name="Luneraria.UI.Tests.EditMode.dll" fullname="/private/tmp/lune-konzept/Library/ScriptAssemblies/Luneraria.UI.Tests.EditMode.dll" runstate="Runnable" testcasecount="12" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.249808" total="12" passed="12" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_PID" value="37834" />
|
||||||
|
<property name="_APPDOMAIN" value="Unity Child Domain" />
|
||||||
|
<property name="platform" value="EditMode" />
|
||||||
|
<property name="EditorOnly" value="True" />
|
||||||
|
</properties>
|
||||||
|
<test-suite type="TestSuite" id="1045" name="Luneraria" fullname="Luneraria" runstate="Runnable" testcasecount="12" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.249371" total="12" passed="12" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestSuite" id="1046" name="UI" fullname="Luneraria.UI" runstate="Runnable" testcasecount="12" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.249141" total="12" passed="12" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestSuite" id="1047" name="Tests" fullname="Luneraria.UI.Tests" runstate="Runnable" testcasecount="12" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.248918" total="12" passed="12" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestFixture" id="1031" name="HudModelTests" fullname="Luneraria.UI.Tests.HudModelTests" classname="Luneraria.UI.Tests.HudModelTests" runstate="Runnable" testcasecount="12" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.248454" total="12" passed="12" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1036" name="AnnouncedDangersRaiseTheThreat" fullname="Luneraria.UI.Tests.HudModelTests.AnnouncedDangersRaiseTheThreat" methodname="AnnouncedDangersRaiseTheThreat" classname="Luneraria.UI.Tests.HudModelTests" runstate="Runnable" seed="935837599" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.012518" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1037" name="BattlefieldCountsTheLaneUnits" fullname="Luneraria.UI.Tests.HudModelTests.BattlefieldCountsTheLaneUnits" methodname="BattlefieldCountsTheLaneUnits" classname="Luneraria.UI.Tests.HudModelTests" runstate="Runnable" seed="9670403" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.047628" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1034" name="BossLaneChoiceIsPrivateToTheChooser" fullname="Luneraria.UI.Tests.HudModelTests.BossLaneChoiceIsPrivateToTheChooser" methodname="BossLaneChoiceIsPrivateToTheChooser" classname="Luneraria.UI.Tests.HudModelTests" runstate="Runnable" seed="1339201813" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.004828" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1038" name="BossStatesFromPublicState" fullname="Luneraria.UI.Tests.HudModelTests.BossStatesFromPublicState" methodname="BossStatesFromPublicState" classname="Luneraria.UI.Tests.HudModelTests" runstate="Runnable" seed="950009974" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.000792" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1043" name="BotMatchStillStartsByItself" fullname="Luneraria.UI.Tests.HudModelTests.BotMatchStillStartsByItself" methodname="BotMatchStillStartsByItself" classname="Luneraria.UI.Tests.HudModelTests" runstate="Runnable" seed="1059707782" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.001952" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1032" name="EverySeatSeesTheSamePublicPicture" fullname="Luneraria.UI.Tests.HudModelTests.EverySeatSeesTheSamePublicPicture" methodname="EverySeatSeesTheSamePublicPicture" classname="Luneraria.UI.Tests.HudModelTests" runstate="Runnable" seed="1032970802" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.046867" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1042" name="HumanSeatPlanningWaitsForReady" fullname="Luneraria.UI.Tests.HudModelTests.HumanSeatPlanningWaitsForReady" methodname="HumanSeatPlanningWaitsForReady" classname="Luneraria.UI.Tests.HudModelTests" runstate="Runnable" seed="1176788613" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.062748" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1035" name="LaneThreatFollowsTowerHealth" fullname="Luneraria.UI.Tests.HudModelTests.LaneThreatFollowsTowerHealth" methodname="LaneThreatFollowsTowerHealth" classname="Luneraria.UI.Tests.HudModelTests" runstate="Runnable" seed="2070107633" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.001146" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1039" name="NextWaveIsTheRulesWave" fullname="Luneraria.UI.Tests.HudModelTests.NextWaveIsTheRulesWave" methodname="NextWaveIsTheRulesWave" classname="Luneraria.UI.Tests.HudModelTests" runstate="Runnable" seed="251806882" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.001697" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1041" name="NumbersAreFormattedAsInGodot" fullname="Luneraria.UI.Tests.HudModelTests.NumbersAreFormattedAsInGodot" methodname="NumbersAreFormattedAsInGodot" classname="Luneraria.UI.Tests.HudModelTests" runstate="Runnable" seed="1315738708" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.000560" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1033" name="OtherSeatsPlansStayPrivateUntilCombat" fullname="Luneraria.UI.Tests.HudModelTests.OtherSeatsPlansStayPrivateUntilCombat" methodname="OtherSeatsPlansStayPrivateUntilCombat" classname="Luneraria.UI.Tests.HudModelTests" runstate="Runnable" seed="1277302636" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.064264" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1040" name="ReadyLocksThePlan" fullname="Luneraria.UI.Tests.HudModelTests.ReadyLocksThePlan" methodname="ReadyLocksThePlan" classname="Luneraria.UI.Tests.HudModelTests" runstate="Runnable" seed="1134601554" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.000917" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="Assembly" id="1053" name="Luneraria.View.Tests.EditMode.dll" fullname="/private/tmp/lune-konzept/Library/ScriptAssemblies/Luneraria.View.Tests.EditMode.dll" runstate="Runnable" testcasecount="4" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:46:18Z" duration="24.725799" total="4" passed="4" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_PID" value="37834" />
|
||||||
|
<property name="_APPDOMAIN" value="Unity Child Domain" />
|
||||||
|
<property name="platform" value="EditMode" />
|
||||||
|
<property name="EditorOnly" value="True" />
|
||||||
|
</properties>
|
||||||
|
<test-suite type="TestSuite" id="1054" name="Luneraria" fullname="Luneraria" runstate="Runnable" testcasecount="4" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:46:18Z" duration="24.712838" total="4" passed="4" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestSuite" id="1055" name="View" fullname="Luneraria.View" runstate="Runnable" testcasecount="4" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:46:18Z" duration="24.712619" total="4" passed="4" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestSuite" id="1056" name="Tests" fullname="Luneraria.View.Tests" runstate="Runnable" testcasecount="4" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:46:18Z" duration="24.712403" total="4" passed="4" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestFixture" id="1048" name="FrameRateIndependenceTests" fullname="Luneraria.View.Tests.FrameRateIndependenceTests" classname="Luneraria.View.Tests.FrameRateIndependenceTests" runstate="Runnable" testcasecount="4" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:46:18Z" duration="24.712227" total="4" passed="4" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1052" name="ClockRunsWholeStepsOnly" fullname="Luneraria.View.Tests.FrameRateIndependenceTests.ClockRunsWholeStepsOnly" methodname="ClockRunsWholeStepsOnly" classname="Luneraria.View.Tests.FrameRateIndependenceTests" runstate="Runnable" seed="1388069764" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:45:53Z" duration="0.000929" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1049" name="FullBotMatchSeed2IsTheSameAtEveryFrameRate" fullname="Luneraria.View.Tests.FrameRateIndependenceTests.FullBotMatchSeed2IsTheSameAtEveryFrameRate" methodname="FullBotMatchSeed2IsTheSameAtEveryFrameRate" classname="Luneraria.View.Tests.FrameRateIndependenceTests" runstate="Runnable" seed="1268957414" result="Passed" start-time="2026-10-11 15:45:53Z" end-time="2026-10-11 15:46:03Z" duration="9.669904" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_FPS seed 2 30 fps: 19315 frames, 12690 steps, hash DCE95C96556F3A1A (core DCE95C96556F3A1A)
|
||||||
|
LUNE_FPS seed 2 60 fps: 38597 frames, 12690 steps, hash DCE95C96556F3A1A (core DCE95C96556F3A1A)
|
||||||
|
LUNE_FPS seed 2 120 fps: 77169 frames, 12690 steps, hash DCE95C96556F3A1A (core DCE95C96556F3A1A)
|
||||||
|
LUNE_FPS seed 2 unlimited (0.4-3.9 ms jitter): 569627 frames, 12690 steps, hash DCE95C96556F3A1A (core DCE95C96556F3A1A)
|
||||||
|
LUNE_FPS seed 2 stutter (stalls up to 0.4 s): 26845 frames, 12690 steps, hash DCE95C96556F3A1A (core DCE95C96556F3A1A)
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1050" name="HighWaveMatchFromRound21IsTheSameAtEveryFrameRate" fullname="Luneraria.View.Tests.FrameRateIndependenceTests.HighWaveMatchFromRound21IsTheSameAtEveryFrameRate" methodname="HighWaveMatchFromRound21IsTheSameAtEveryFrameRate" classname="Luneraria.View.Tests.FrameRateIndependenceTests" runstate="Runnable" seed="517063560" result="Passed" start-time="2026-10-11 15:46:03Z" end-time="2026-10-11 15:46:08Z" duration="5.480644" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_FPS seed 9 30 fps: 6342 frames, 4195 steps, hash 7B8E43AEFC0D60C5 (core 7B8E43AEFC0D60C5)
|
||||||
|
LUNE_FPS seed 9 60 fps: 12678 frames, 4195 steps, hash 7B8E43AEFC0D60C5 (core 7B8E43AEFC0D60C5)
|
||||||
|
LUNE_FPS seed 9 120 fps: 25352 frames, 4195 steps, hash 7B8E43AEFC0D60C5 (core 7B8E43AEFC0D60C5)
|
||||||
|
LUNE_FPS seed 9 unlimited (0.4-3.9 ms jitter): 99090 frames, 4195 steps, hash 7B8E43AEFC0D60C5 (core 7B8E43AEFC0D60C5)
|
||||||
|
LUNE_FPS seed 9 stutter (stalls up to 0.4 s): 8796 frames, 4195 steps, hash 7B8E43AEFC0D60C5 (core 7B8E43AEFC0D60C5)
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1051" name="MatchSpeedDoesNotChangeTheMatch" fullname="Luneraria.View.Tests.FrameRateIndependenceTests.MatchSpeedDoesNotChangeTheMatch" methodname="MatchSpeedDoesNotChangeTheMatch" classname="Luneraria.View.Tests.FrameRateIndependenceTests" runstate="Runnable" seed="926040479" result="Passed" start-time="2026-10-11 15:46:08Z" end-time="2026-10-11 15:46:18Z" duration="9.557888" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_FPS seed 2 30 fps: 2418 frames, 12690 steps, hash DCE95C96556F3A1A (core DCE95C96556F3A1A)
|
||||||
|
LUNE_FPS seed 2 60 fps: 4831 frames, 12690 steps, hash DCE95C96556F3A1A (core DCE95C96556F3A1A)
|
||||||
|
LUNE_FPS seed 2 120 fps: 9658 frames, 12690 steps, hash DCE95C96556F3A1A (core DCE95C96556F3A1A)
|
||||||
|
LUNE_FPS seed 2 unlimited (0.4-3.9 ms jitter): 37713 frames, 12690 steps, hash DCE95C96556F3A1A (core DCE95C96556F3A1A)
|
||||||
|
LUNE_FPS seed 2 stutter (stalls up to 0.4 s): 3428 frames, 12690 steps, hash DCE95C96556F3A1A (core DCE95C96556F3A1A)
|
||||||
|
Saving results to: /Users/martin/Library/Application Support/DefaultCompany/luneraria-unity/TestResults.xml
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-run>
|
||||||
15
docs/port/logs/s4/player-benchmark-brunhild-run1.json
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"build": "OSXPlayer player, 6000.3.20f1, release",
|
||||||
|
"device": "Mac17,2; Apple M5; Apple M5",
|
||||||
|
"graphics_api": "Metal",
|
||||||
|
"resolution": "1920x1080",
|
||||||
|
"vsync": 0,
|
||||||
|
"match": "seed 9 from round 2, army held_brunhild x6, speed 1x, measured after 10 s of combat",
|
||||||
|
// moving units at the start of the first window: w04 11, w06 11, g04 10, g02 9, g06 9, e01 7, w02 7, brunhild 6, g08 4, g10 4, w08 4, w10 3
|
||||||
|
"windows": [
|
||||||
|
{"view": "overview (zoom 64)", "frames": 3030, "fps": 151.5, "frame_ms_avg": 6.60, "frame_ms_median": 2.91, "frame_ms_p95": 22.00, "frame_ms_p99": 28.61, "frame_ms_max": 52.39, "frames_over_16_7_ms": 307, "of_them_with_simulation_step": 24, "gc_collections": 20, "simulation_ms_per_frame": 0.059, "views_ms_per_frame": 0.219, "ui_ms_per_frame": 0.058, "units_alive_max": 85},
|
||||||
|
// timings overview (zoom 64): main thread avg 2.26 / median 2.14 / p95 3.10 ms, render thread avg 1.66 / median 1.65 / p95 1.96 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.33 / median 0.27 / p95 19.63 ms
|
||||||
|
{"view": "mid lane close (zoom 22)", "frames": 1652, "fps": 165.0, "frame_ms_avg": 6.06, "frame_ms_median": 2.91, "frame_ms_p95": 21.41, "frame_ms_p99": 28.50, "frame_ms_max": 37.30, "frames_over_16_7_ms": 154, "of_them_with_simulation_step": 13, "gc_collections": 8, "simulation_ms_per_frame": 0.037, "views_ms_per_frame": 0.190, "ui_ms_per_frame": 0.043, "units_alive_max": 38}
|
||||||
|
// timings mid lane close (zoom 22): main thread avg 1.82 / median 1.71 / p95 2.68 ms, render thread avg 1.32 / median 1.31 / p95 1.56 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.26 / median 0.99 / p95 19.39 ms
|
||||||
|
]
|
||||||
|
}
|
||||||
15
docs/port/logs/s4/player-benchmark-brunhild-run2.json
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"build": "OSXPlayer player, 6000.3.20f1, release",
|
||||||
|
"device": "Mac17,2; Apple M5; Apple M5",
|
||||||
|
"graphics_api": "Metal",
|
||||||
|
"resolution": "1920x1080",
|
||||||
|
"vsync": 0,
|
||||||
|
"match": "seed 9 from round 2, army held_brunhild x6, speed 1x, measured after 10 s of combat",
|
||||||
|
// moving units at the start of the first window: w04 11, w06 11, g04 10, g02 9, g06 9, e01 7, w02 7, brunhild 6, g08 4, g10 4, w08 4, w10 3
|
||||||
|
"windows": [
|
||||||
|
{"view": "overview (zoom 64)", "frames": 2974, "fps": 148.6, "frame_ms_avg": 6.73, "frame_ms_median": 2.90, "frame_ms_p95": 21.52, "frame_ms_p99": 27.56, "frame_ms_max": 37.02, "frames_over_16_7_ms": 328, "of_them_with_simulation_step": 23, "gc_collections": 20, "simulation_ms_per_frame": 0.062, "views_ms_per_frame": 0.222, "ui_ms_per_frame": 0.059, "units_alive_max": 85},
|
||||||
|
// timings overview (zoom 64): main thread avg 2.30 / median 2.21 / p95 3.11 ms, render thread avg 1.71 / median 1.70 / p95 1.99 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.42 / median 0.25 / p95 19.22 ms
|
||||||
|
{"view": "mid lane close (zoom 22)", "frames": 1635, "fps": 163.4, "frame_ms_avg": 6.12, "frame_ms_median": 2.70, "frame_ms_p95": 21.19, "frame_ms_p99": 29.10, "frame_ms_max": 32.90, "frames_over_16_7_ms": 164, "of_them_with_simulation_step": 27, "gc_collections": 8, "simulation_ms_per_frame": 0.037, "views_ms_per_frame": 0.187, "ui_ms_per_frame": 0.042, "units_alive_max": 38}
|
||||||
|
// timings mid lane close (zoom 22): main thread avg 1.78 / median 1.70 / p95 2.49 ms, render thread avg 1.33 / median 1.32 / p95 1.56 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.36 / median 0.46 / p95 19.07 ms
|
||||||
|
]
|
||||||
|
}
|
||||||
15
docs/port/logs/s4/player-benchmark-brunhild-run3.json
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"build": "OSXPlayer player, 6000.3.20f1, release",
|
||||||
|
"device": "Mac17,2; Apple M5; Apple M5",
|
||||||
|
"graphics_api": "Metal",
|
||||||
|
"resolution": "1920x1080",
|
||||||
|
"vsync": 0,
|
||||||
|
"match": "seed 9 from round 2, army held_brunhild x6, speed 1x, measured after 10 s of combat",
|
||||||
|
// moving units at the start of the first window: w04 11, w06 11, g04 10, g02 9, g06 9, e01 7, w02 7, brunhild 6, g08 4, g10 4, w08 4, w10 3
|
||||||
|
"windows": [
|
||||||
|
{"view": "overview (zoom 64)", "frames": 2990, "fps": 149.4, "frame_ms_avg": 6.69, "frame_ms_median": 2.90, "frame_ms_p95": 22.31, "frame_ms_p99": 28.33, "frame_ms_max": 47.03, "frames_over_16_7_ms": 333, "of_them_with_simulation_step": 33, "gc_collections": 20, "simulation_ms_per_frame": 0.061, "views_ms_per_frame": 0.220, "ui_ms_per_frame": 0.058, "units_alive_max": 85},
|
||||||
|
// timings overview (zoom 64): main thread avg 2.28 / median 2.18 / p95 3.10 ms, render thread avg 1.68 / median 1.67 / p95 1.97 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.40 / median 0.26 / p95 19.90 ms
|
||||||
|
{"view": "mid lane close (zoom 22)", "frames": 1673, "fps": 167.3, "frame_ms_avg": 5.98, "frame_ms_median": 2.69, "frame_ms_p95": 20.81, "frame_ms_p99": 31.71, "frame_ms_max": 38.50, "frames_over_16_7_ms": 152, "of_them_with_simulation_step": 16, "gc_collections": 8, "simulation_ms_per_frame": 0.036, "views_ms_per_frame": 0.186, "ui_ms_per_frame": 0.039, "units_alive_max": 38}
|
||||||
|
// timings mid lane close (zoom 22): main thread avg 1.73 / median 1.67 / p95 2.39 ms, render thread avg 1.32 / median 1.31 / p95 1.54 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.26 / median 0.91 / p95 19.17 ms
|
||||||
|
]
|
||||||
|
}
|
||||||
11
docs/port/logs/s4/player-smoke.json
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"build": "OSXPlayer player, 6000.3.20f1, release",
|
||||||
|
"device": "Mac17,2; Apple M5; Apple M5",
|
||||||
|
"graphics_api": "Metal",
|
||||||
|
"resolution": "1920x1080",
|
||||||
|
"seconds": 11.6,
|
||||||
|
"passed": ["Startbildschirm sichtbar", "Partie wartet: Spielcontroller und Treiber aus", "vor dem Start kein HUD", "„Allein spielen“ bedienbar", "Offline: Startbildschirm verborgen", "Offline: Spielcontroller und Treiber laufen", "Offline: HUD sichtbar", "Offline: neue Partie, Sitz 1 (Mid)", "Offline: Planung", "Offline: lokale Sitzung", "„Startaufstellung“ bedienbar", "Startaufstellung gekauft (3 Einheiten)", "„Bereit“ bedienbar", "Bereit: Kampf beginnt", "Kampf: Figuren im Feld", "„Menü“ bedienbar", "Verlassen-Dialog mit „Zum Menü“", "Zurück: Startbildschirm sichtbar", "Zurück: HUD verborgen", "Zurück: Spielcontroller und Treiber aus", "Zurück: Sitzung beendet", "Zurück: keine Figuren im Feld", "Zurück: Kamera ruht", "Zurück: „Allein spielen“ bedienbar", "Zweite Partie: Startbildschirm verborgen, HUD sichtbar", "Zweite Partie: neue Partie in der Planung", "SSAO folgt der Einstellung", "Option „Umgebungsverdeckung“ sichtbar", "Option schaltet SSAO um", "Option stellt SSAO zurück"],
|
||||||
|
"failed": [],
|
||||||
|
"photos": ["00-startbildschirm.jpg", "01-planung.jpg", "02-kampf.jpg", "03-verlassen.jpg", "04-zurueck-im-startbildschirm.jpg", "05-zweite-partie.jpg", "06-optionen.jpg"],
|
||||||
|
"result": "PASS"
|
||||||
|
}
|
||||||
471
docs/port/logs/s4/playmode-results.xml
Normal file
|
|
@ -0,0 +1,471 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<test-run id="2" testcasecount="33" result="Passed" total="33" passed="20" failed="0" inconclusive="0" skipped="13" asserts="0" engine-version="3.5.0.0" clr-version="4.0.30319.42000" start-time="2026-10-11 15:46:36Z" end-time="2026-10-11 15:51:50Z" duration="313.7388335">
|
||||||
|
<test-suite type="TestSuite" id="1061" name="luneraria-unity" fullname="luneraria-unity" runstate="Runnable" testcasecount="33" result="Passed" start-time="2026-10-11 15:46:36Z" end-time="2026-10-11 15:51:50Z" duration="313.738834" total="33" passed="20" failed="0" inconclusive="0" skipped="13" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="platform" value="PlayMode" />
|
||||||
|
</properties>
|
||||||
|
<test-suite type="Assembly" id="1046" name="Luneraria.UI.Tests.PlayMode.dll" fullname="/private/tmp/lune-konzept/Library/ScriptAssemblies/Luneraria.UI.Tests.PlayMode.dll" runstate="Runnable" testcasecount="31" result="Passed" start-time="2026-10-11 15:46:36Z" end-time="2026-10-11 15:47:07Z" duration="30.547717" total="31" passed="18" failed="0" inconclusive="0" skipped="13" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_PID" value="38117" />
|
||||||
|
<property name="_APPDOMAIN" value="Unity Child Domain" />
|
||||||
|
<property name="platform" value="PlayMode" />
|
||||||
|
<property name="EditorOnly" value="False" />
|
||||||
|
</properties>
|
||||||
|
<test-suite type="TestSuite" id="1047" name="Luneraria" fullname="Luneraria" runstate="Runnable" testcasecount="31" result="Passed" start-time="2026-10-11 15:46:36Z" end-time="2026-10-11 15:47:07Z" duration="30.547432" total="31" passed="18" failed="0" inconclusive="0" skipped="13" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestSuite" id="1048" name="UI" fullname="Luneraria.UI" runstate="Runnable" testcasecount="31" result="Passed" start-time="2026-10-11 15:46:36Z" end-time="2026-10-11 15:47:07Z" duration="30.547212" total="31" passed="18" failed="0" inconclusive="0" skipped="13" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestSuite" id="1049" name="Tests" fullname="Luneraria.UI.Tests" runstate="Runnable" testcasecount="31" result="Passed" start-time="2026-10-11 15:46:36Z" end-time="2026-10-11 15:47:07Z" duration="30.546809" total="31" passed="18" failed="0" inconclusive="0" skipped="13" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestFixture" id="1001" name="ArmyViewsTests" fullname="Luneraria.UI.Tests.ArmyViewsTests" classname="Luneraria.UI.Tests.ArmyViewsTests" runstate="Explicit" testcasecount="1" result="Skipped" label="Explicit" site="SetUp" start-time="2026-10-11 15:46:36Z" end-time="2026-10-11 15:46:36Z" duration="0.002862" total="1" passed="0" failed="0" inconclusive="0" skipped="1" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_SKIPREASON" value="Bildwerkzeug: nur gezielt per -testFilter" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
<test-case id="1002" name="Glutpakt" fullname="Luneraria.UI.Tests.ArmyViewsTests.Glutpakt" methodname="Glutpakt" classname="Luneraria.UI.Tests.ArmyViewsTests" runstate="Runnable" seed="1410751918" result="Skipped" label="Explicit" site="Parent" start-time="0001-01-01 00:00:00Z" end-time="0001-01-01 00:00:00Z" duration="0.000000" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="900000" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1003" name="FigureViewsTests" fullname="Luneraria.UI.Tests.FigureViewsTests" classname="Luneraria.UI.Tests.FigureViewsTests" runstate="Explicit" testcasecount="1" result="Skipped" label="Explicit" site="SetUp" start-time="2026-10-11 15:46:36Z" end-time="2026-10-11 15:46:36Z" duration="0.000074" total="1" passed="0" failed="0" inconclusive="0" skipped="1" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_SKIPREASON" value="Bildwerkzeug: nur gezielt per -testFilter" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
<test-case id="1004" name="Kohlenbeisser" fullname="Luneraria.UI.Tests.FigureViewsTests.Kohlenbeisser" methodname="Kohlenbeisser" classname="Luneraria.UI.Tests.FigureViewsTests" runstate="Runnable" seed="1327504255" result="Skipped" label="Explicit" site="Parent" start-time="0001-01-01 00:00:00Z" end-time="0001-01-01 00:00:00Z" duration="0.000000" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="900000" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1005" name="H1HeroViewsTests" fullname="Luneraria.UI.Tests.H1HeroViewsTests" classname="Luneraria.UI.Tests.H1HeroViewsTests" runstate="Runnable" testcasecount="2" result="Passed" start-time="2026-10-11 15:46:36Z" end-time="2026-10-11 15:46:39Z" duration="2.687648" total="2" passed="1" failed="0" inconclusive="0" skipped="1" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1007" name="SylvaraBilder" fullname="Luneraria.UI.Tests.H1HeroViewsTests.SylvaraBilder" methodname="SylvaraBilder" classname="Luneraria.UI.Tests.H1HeroViewsTests" runstate="Explicit" seed="1513690794" result="Skipped" label="Explicit" start-time="2026-10-11 15:46:36Z" end-time="2026-10-11 15:46:36Z" duration="0.000180" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="900000" />
|
||||||
|
<property name="_SKIPREASON" value="Bildwerkzeug: nur gezielt per -testFilter" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1006" name="SylvaraHud" fullname="Luneraria.UI.Tests.H1HeroViewsTests.SylvaraHud" methodname="SylvaraHud" classname="Luneraria.UI.Tests.H1HeroViewsTests" runstate="Runnable" seed="1076625979" result="Passed" start-time="2026-10-11 15:46:36Z" end-time="2026-10-11 15:46:39Z" duration="2.685073" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="600000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1008" name="H2HeroViewsTests" fullname="Luneraria.UI.Tests.H2HeroViewsTests" classname="Luneraria.UI.Tests.H2HeroViewsTests" runstate="Runnable" testcasecount="2" result="Passed" start-time="2026-10-11 15:46:39Z" end-time="2026-10-11 15:46:39Z" duration="0.465161" total="2" passed="1" failed="0" inconclusive="0" skipped="1" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1010" name="BrunhildBilder" fullname="Luneraria.UI.Tests.H2HeroViewsTests.BrunhildBilder" methodname="BrunhildBilder" classname="Luneraria.UI.Tests.H2HeroViewsTests" runstate="Explicit" seed="1843788356" result="Skipped" label="Explicit" start-time="2026-10-11 15:46:39Z" end-time="2026-10-11 15:46:39Z" duration="0.000001" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="900000" />
|
||||||
|
<property name="_SKIPREASON" value="Bildwerkzeug: nur gezielt per -testFilter" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1009" name="BrunhildHud" fullname="Luneraria.UI.Tests.H2HeroViewsTests.BrunhildHud" methodname="BrunhildHud" classname="Luneraria.UI.Tests.H2HeroViewsTests" runstate="Runnable" seed="500166216" result="Passed" start-time="2026-10-11 15:46:39Z" end-time="2026-10-11 15:46:39Z" duration="0.461230" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="600000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1011" name="HudCaptureTests" fullname="Luneraria.UI.Tests.HudCaptureTests" classname="Luneraria.UI.Tests.HudCaptureTests" runstate="Runnable" testcasecount="1" result="Passed" start-time="2026-10-11 15:46:39Z" end-time="2026-10-11 15:46:40Z" duration="0.395429" total="1" passed="1" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1012" name="PlanningHudOverTheScene" fullname="Luneraria.UI.Tests.HudCaptureTests.PlanningHudOverTheScene" methodname="PlanningHudOverTheScene" classname="Luneraria.UI.Tests.HudCaptureTests" runstate="Runnable" seed="156569232" result="Passed" start-time="2026-10-11 15:46:39Z" end-time="2026-10-11 15:46:40Z" duration="0.391472" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="600000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_HUD syncs 1 sync ms 0.167 portraits 15 scale 1 size (1706.67, 960.00)
|
||||||
|
LUNE_HUD region top (x:425.78, y:12.44, width:855.11, height:83.56)
|
||||||
|
LUNE_HUD region system (x:1559.11, y:12.44, width:136.00, height:35.56)
|
||||||
|
LUNE_HUD region left (x:12.44, y:12.44, width:312.00, height:466.67)
|
||||||
|
LUNE_HUD region right (x:1372.44, y:56.00, width:322.67, height:248.00)
|
||||||
|
LUNE_HUD region bottom (x:12.44, y:761.78, width:1432.00, height:186.67)
|
||||||
|
LUNE_HUD region ready (x:1455.11, y:616.00, width:240.00, height:84.44)
|
||||||
|
LUNE_HUD region minimap (x:1455.11, y:708.44, width:240.00, height:240.00)
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1013" name="HudPlaytest" fullname="Luneraria.UI.Tests.HudPlaytest" classname="Luneraria.UI.Tests.HudPlaytest" runstate="Explicit" testcasecount="1" result="Skipped" label="Explicit" site="SetUp" start-time="2026-10-11 15:46:40Z" end-time="2026-10-11 15:46:40Z" duration="0.000086" total="1" passed="0" failed="0" inconclusive="0" skipped="1" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_SKIPREASON" value="Spieltest: wartet auf Befehlsdateien" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Spieltest: wartet auf Befehlsdateien]]></message>
|
||||||
|
</reason>
|
||||||
|
<test-case id="1014" name="Play" fullname="Luneraria.UI.Tests.HudPlaytest.Play" methodname="Play" classname="Luneraria.UI.Tests.HudPlaytest" runstate="Runnable" seed="1750787280" result="Skipped" label="Explicit" site="Parent" start-time="0001-01-01 00:00:00Z" end-time="0001-01-01 00:00:00Z" duration="0.000000" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="2147483647" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Spieltest: wartet auf Befehlsdateien]]></message>
|
||||||
|
</reason>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1015" name="HudVerifyTests" fullname="Luneraria.UI.Tests.HudVerifyTests" classname="Luneraria.UI.Tests.HudVerifyTests" runstate="Runnable" testcasecount="9" result="Passed" start-time="2026-10-11 15:46:40Z" end-time="2026-10-11 15:46:52Z" duration="12.116958" total="9" passed="9" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1016" name="A_Layout" fullname="Luneraria.UI.Tests.HudVerifyTests.A_Layout" methodname="A_Layout" classname="Luneraria.UI.Tests.HudVerifyTests" runstate="Runnable" seed="1474983886" result="Passed" start-time="2026-10-11 15:46:40Z" end-time="2026-10-11 15:46:44Z" duration="4.502641" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="1800000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_VERIFY A: 585 checks, 0 failed
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1017" name="B_Status" fullname="Luneraria.UI.Tests.HudVerifyTests.B_Status" methodname="B_Status" classname="Luneraria.UI.Tests.HudVerifyTests" runstate="Runnable" seed="615242257" result="Passed" start-time="2026-10-11 15:46:44Z" end-time="2026-10-11 15:46:44Z" duration="0.417089" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="900000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_VERIFY B: 21 checks, 0 failed
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1018" name="C_HeroItemsUnits" fullname="Luneraria.UI.Tests.HudVerifyTests.C_HeroItemsUnits" methodname="C_HeroItemsUnits" classname="Luneraria.UI.Tests.HudVerifyTests" runstate="Runnable" seed="2115775" result="Passed" start-time="2026-10-11 15:46:44Z" end-time="2026-10-11 15:46:45Z" duration="0.756387" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="900000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_VERIFY C: 23 checks, 0 failed
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1019" name="D_ChampionsAndBoss" fullname="Luneraria.UI.Tests.HudVerifyTests.D_ChampionsAndBoss" methodname="D_ChampionsAndBoss" classname="Luneraria.UI.Tests.HudVerifyTests" runstate="Runnable" seed="1226437700" result="Passed" start-time="2026-10-11 15:46:45Z" end-time="2026-10-11 15:46:46Z" duration="0.558635" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="900000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_VERIFY D: 16 checks, 0 failed
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1020" name="E_ReadyBotsPrivacy" fullname="Luneraria.UI.Tests.HudVerifyTests.E_ReadyBotsPrivacy" methodname="E_ReadyBotsPrivacy" classname="Luneraria.UI.Tests.HudVerifyTests" runstate="Runnable" seed="1073391563" result="Passed" start-time="2026-10-11 15:46:46Z" end-time="2026-10-11 15:46:47Z" duration="1.411138" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="900000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_VERIFY E: 17 checks, 0 failed
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1021" name="F_Input" fullname="Luneraria.UI.Tests.HudVerifyTests.F_Input" methodname="F_Input" classname="Luneraria.UI.Tests.HudVerifyTests" runstate="Runnable" seed="19796220" result="Passed" start-time="2026-10-11 15:46:47Z" end-time="2026-10-11 15:46:51Z" duration="3.426542" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="900000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_VERIFY F: 18 checks, 0 failed
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1022" name="G_EventsAndMotion" fullname="Luneraria.UI.Tests.HudVerifyTests.G_EventsAndMotion" methodname="G_EventsAndMotion" classname="Luneraria.UI.Tests.HudVerifyTests" runstate="Runnable" seed="2106235626" result="Passed" start-time="2026-10-11 15:46:51Z" end-time="2026-10-11 15:46:51Z" duration="0.537718" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="900000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_VERIFY G: 14 checks, 0 failed
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1023" name="H_RatesAndPortraits" fullname="Luneraria.UI.Tests.HudVerifyTests.H_RatesAndPortraits" methodname="H_RatesAndPortraits" classname="Luneraria.UI.Tests.HudVerifyTests" runstate="Runnable" seed="1076750353" result="Passed" start-time="2026-10-11 15:46:51Z" end-time="2026-10-11 15:46:51Z" duration="0.202539" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="900000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_VERIFY rates planning 18/2s combat 10/2s sync 0.221 ms portraits 16
|
||||||
|
LUNE_VERIFY H: 5 checks, 0 failed
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1024" name="I_Field" fullname="Luneraria.UI.Tests.HudVerifyTests.I_Field" methodname="I_Field" classname="Luneraria.UI.Tests.HudVerifyTests" runstate="Runnable" seed="1119995107" result="Passed" start-time="2026-10-11 15:46:51Z" end-time="2026-10-11 15:46:52Z" duration="0.300928" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="900000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_VERIFY I: 19 checks, 0 failed
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1025" name="HudViewsTests" fullname="Luneraria.UI.Tests.HudViewsTests" classname="Luneraria.UI.Tests.HudViewsTests" runstate="Explicit" testcasecount="4" result="Skipped" label="Explicit" site="SetUp" start-time="2026-10-11 15:46:52Z" end-time="2026-10-11 15:46:52Z" duration="0.000216" total="4" passed="0" failed="0" inconclusive="0" skipped="4" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_SKIPREASON" value="Bildwerkzeug: nur gezielt per -testFilter" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
<test-case id="1028" name="Motifs_1280x720" fullname="Luneraria.UI.Tests.HudViewsTests.Motifs_1280x720" methodname="Motifs_1280x720" classname="Luneraria.UI.Tests.HudViewsTests" runstate="Runnable" seed="481465809" result="Skipped" label="Explicit" site="Parent" start-time="0001-01-01 00:00:00Z" end-time="0001-01-01 00:00:00Z" duration="0.000000" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="1800000" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1026" name="Motifs_1920x1080" fullname="Luneraria.UI.Tests.HudViewsTests.Motifs_1920x1080" methodname="Motifs_1920x1080" classname="Luneraria.UI.Tests.HudViewsTests" runstate="Runnable" seed="712636040" result="Skipped" label="Explicit" site="Parent" start-time="0001-01-01 00:00:00Z" end-time="0001-01-01 00:00:00Z" duration="0.000000" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="1800000" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1029" name="Motifs_2560x1080" fullname="Luneraria.UI.Tests.HudViewsTests.Motifs_2560x1080" methodname="Motifs_2560x1080" classname="Luneraria.UI.Tests.HudViewsTests" runstate="Runnable" seed="1149282381" result="Skipped" label="Explicit" site="Parent" start-time="0001-01-01 00:00:00Z" end-time="0001-01-01 00:00:00Z" duration="0.000000" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="1800000" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1027" name="Motifs_2560x1440" fullname="Luneraria.UI.Tests.HudViewsTests.Motifs_2560x1440" methodname="Motifs_2560x1440" classname="Luneraria.UI.Tests.HudViewsTests" runstate="Runnable" seed="1710397216" result="Skipped" label="Explicit" site="Parent" start-time="0001-01-01 00:00:00Z" end-time="0001-01-01 00:00:00Z" duration="0.000000" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="1800000" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1030" name="S1RulesViewsTests" fullname="Luneraria.UI.Tests.S1RulesViewsTests" classname="Luneraria.UI.Tests.S1RulesViewsTests" runstate="Runnable" testcasecount="2" result="Passed" start-time="2026-10-11 15:46:52Z" end-time="2026-10-11 15:46:53Z" duration="1.665708" total="2" passed="1" failed="0" inconclusive="0" skipped="1" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1032" name="S1Bilder" fullname="Luneraria.UI.Tests.S1RulesViewsTests.S1Bilder" methodname="S1Bilder" classname="Luneraria.UI.Tests.S1RulesViewsTests" runstate="Explicit" seed="1307412873" result="Skipped" label="Explicit" start-time="2026-10-11 15:46:52Z" end-time="2026-10-11 15:46:52Z" duration="0.000001" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="600000" />
|
||||||
|
<property name="_SKIPREASON" value="Bildwerkzeug: nur gezielt per -testFilter" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1031" name="S1Hud" fullname="Luneraria.UI.Tests.S1RulesViewsTests.S1Hud" methodname="S1Hud" classname="Luneraria.UI.Tests.S1RulesViewsTests" runstate="Runnable" seed="1524292985" result="Passed" start-time="2026-10-11 15:46:52Z" end-time="2026-10-11 15:46:53Z" duration="1.663693" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="600000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1033" name="S2RulesViewsTests" fullname="Luneraria.UI.Tests.S2RulesViewsTests" classname="Luneraria.UI.Tests.S2RulesViewsTests" runstate="Runnable" testcasecount="2" result="Passed" start-time="2026-10-11 15:46:53Z" end-time="2026-10-11 15:46:54Z" duration="0.321237" total="2" passed="1" failed="0" inconclusive="0" skipped="1" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1035" name="S2Bilder" fullname="Luneraria.UI.Tests.S2RulesViewsTests.S2Bilder" methodname="S2Bilder" classname="Luneraria.UI.Tests.S2RulesViewsTests" runstate="Explicit" seed="1661918112" result="Skipped" label="Explicit" start-time="2026-10-11 15:46:53Z" end-time="2026-10-11 15:46:53Z" duration="0.000003" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="600000" />
|
||||||
|
<property name="_SKIPREASON" value="Bildwerkzeug: nur gezielt per -testFilter" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1034" name="S2Hud" fullname="Luneraria.UI.Tests.S2RulesViewsTests.S2Hud" methodname="S2Hud" classname="Luneraria.UI.Tests.S2RulesViewsTests" runstate="Runnable" seed="803820144" result="Passed" start-time="2026-10-11 15:46:53Z" end-time="2026-10-11 15:46:54Z" duration="0.317082" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="600000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1036" name="S3RulesViewsTests" fullname="Luneraria.UI.Tests.S3RulesViewsTests" classname="Luneraria.UI.Tests.S3RulesViewsTests" runstate="Runnable" testcasecount="2" result="Passed" start-time="2026-10-11 15:46:54Z" end-time="2026-10-11 15:46:55Z" duration="1.552592" total="2" passed="1" failed="0" inconclusive="0" skipped="1" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1038" name="S3Bilder" fullname="Luneraria.UI.Tests.S3RulesViewsTests.S3Bilder" methodname="S3Bilder" classname="Luneraria.UI.Tests.S3RulesViewsTests" runstate="Explicit" seed="958100196" result="Skipped" label="Explicit" start-time="2026-10-11 15:46:54Z" end-time="2026-10-11 15:46:54Z" duration="0.000001" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="600000" />
|
||||||
|
<property name="_SKIPREASON" value="Bildwerkzeug: nur gezielt per -testFilter" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1037" name="S3Hud" fullname="Luneraria.UI.Tests.S3RulesViewsTests.S3Hud" methodname="S3Hud" classname="Luneraria.UI.Tests.S3RulesViewsTests" runstate="Runnable" seed="910466762" result="Passed" start-time="2026-10-11 15:46:54Z" end-time="2026-10-11 15:46:55Z" duration="1.548971" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="600000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1039" name="S4PolishViewsTests" fullname="Luneraria.UI.Tests.S4PolishViewsTests" classname="Luneraria.UI.Tests.S4PolishViewsTests" runstate="Runnable" testcasecount="2" result="Passed" start-time="2026-10-11 15:46:55Z" end-time="2026-10-11 15:46:56Z" duration="0.558907" total="2" passed="1" failed="0" inconclusive="0" skipped="1" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1041" name="S4Bilder" fullname="Luneraria.UI.Tests.S4PolishViewsTests.S4Bilder" methodname="S4Bilder" classname="Luneraria.UI.Tests.S4PolishViewsTests" runstate="Explicit" seed="927200824" result="Skipped" label="Explicit" start-time="2026-10-11 15:46:55Z" end-time="2026-10-11 15:46:55Z" duration="0.000002" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="600000" />
|
||||||
|
<property name="_SKIPREASON" value="Bildwerkzeug: nur gezielt per -testFilter" />
|
||||||
|
</properties>
|
||||||
|
<reason>
|
||||||
|
<message><![CDATA[Bildwerkzeug: nur gezielt per -testFilter]]></message>
|
||||||
|
</reason>
|
||||||
|
</test-case>
|
||||||
|
<test-case id="1040" name="S4Views" fullname="Luneraria.UI.Tests.S4PolishViewsTests.S4Views" methodname="S4Views" classname="Luneraria.UI.Tests.S4PolishViewsTests" runstate="Runnable" seed="349829057" result="Passed" start-time="2026-10-11 15:46:55Z" end-time="2026-10-11 15:46:56Z" duration="0.557132" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="600000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1042" name="StartScreenTests" fullname="Luneraria.UI.Tests.StartScreenTests" classname="Luneraria.UI.Tests.StartScreenTests" runstate="Runnable" testcasecount="1" result="Passed" start-time="2026-10-11 15:46:56Z" end-time="2026-10-11 15:47:06Z" duration="10.705268" total="1" passed="1" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1043" name="StartScreenLeadsIntoTheMatchAndBack" fullname="Luneraria.UI.Tests.StartScreenTests.StartScreenLeadsIntoTheMatchAndBack" methodname="StartScreenLeadsIntoTheMatchAndBack" classname="Luneraria.UI.Tests.StartScreenTests" runstate="Runnable" seed="1636570169" result="Passed" start-time="2026-10-11 15:46:56Z" end-time="2026-10-11 15:47:06Z" duration="10.703321" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="300000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_SMOKE ok Startbildschirm sichtbar
|
||||||
|
LUNE_SMOKE ok Partie wartet: Spielcontroller und Treiber aus
|
||||||
|
LUNE_SMOKE ok vor dem Start kein HUD
|
||||||
|
LUNE_SMOKE ok „Allein spielen“ bedienbar
|
||||||
|
LUNE_SMOKE ok Offline: Startbildschirm verborgen
|
||||||
|
LUNE_SMOKE ok Offline: Spielcontroller und Treiber laufen
|
||||||
|
LUNE_SMOKE ok Offline: HUD sichtbar
|
||||||
|
LUNE_SMOKE ok Offline: neue Partie, Sitz 1 (Mid)
|
||||||
|
LUNE_SMOKE ok Offline: Planung
|
||||||
|
LUNE_SMOKE ok Offline: lokale Sitzung
|
||||||
|
LUNE_SMOKE ok „Startaufstellung“ bedienbar
|
||||||
|
LUNE_SMOKE ok Startaufstellung gekauft (3 Einheiten)
|
||||||
|
LUNE_SMOKE ok „Bereit“ bedienbar
|
||||||
|
LUNE_SMOKE ok Bereit: Kampf beginnt
|
||||||
|
LUNE_SMOKE ok Kampf: Figuren im Feld
|
||||||
|
LUNE_SMOKE ok „Menü“ bedienbar
|
||||||
|
LUNE_SMOKE ok Verlassen-Dialog mit „Zum Menü“
|
||||||
|
LUNE_SMOKE ok Zurück: Startbildschirm sichtbar
|
||||||
|
LUNE_SMOKE ok Zurück: HUD verborgen
|
||||||
|
LUNE_SMOKE ok Zurück: Spielcontroller und Treiber aus
|
||||||
|
LUNE_SMOKE ok Zurück: Sitzung beendet
|
||||||
|
LUNE_SMOKE ok Zurück: keine Figuren im Feld
|
||||||
|
LUNE_SMOKE ok Zurück: Kamera ruht
|
||||||
|
LUNE_SMOKE ok Zurück: „Allein spielen“ bedienbar
|
||||||
|
LUNE_SMOKE ok Zweite Partie: Startbildschirm verborgen, HUD sichtbar
|
||||||
|
LUNE_SMOKE ok Zweite Partie: neue Partie in der Planung
|
||||||
|
LUNE_SMOKE_PASS 26 ok, 0 Fehler
|
||||||
|
LUNE_START_SCREEN 26 checks passed
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1044" name="UiToolkitProbeTests" fullname="Luneraria.UI.Tests.UiToolkitProbeTests" classname="Luneraria.UI.Tests.UiToolkitProbeTests" runstate="Runnable" testcasecount="1" result="Passed" start-time="2026-10-11 15:47:06Z" end-time="2026-10-11 15:47:07Z" duration="0.073319" total="1" passed="1" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1045" name="PanelRendersIntoTexture" fullname="Luneraria.UI.Tests.UiToolkitProbeTests.PanelRendersIntoTexture" methodname="PanelRendersIntoTexture" classname="Luneraria.UI.Tests.UiToolkitProbeTests" runstate="Runnable" seed="1446584506" result="Passed" start-time="2026-10-11 15:47:06Z" end-time="2026-10-11 15:47:07Z" duration="0.072836" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_SPIKE corner RGBA(0.565, 0.635, 0.506, 1.000) panel RGBA(0.196, 0.227, 0.204, 1.000) layout (x:12.44, y:12.44, width:760.00, height:530.67)
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="Assembly" id="1054" name="Luneraria.View.Tests.PlayMode.dll" fullname="/private/tmp/lune-konzept/Library/ScriptAssemblies/Luneraria.View.Tests.PlayMode.dll" runstate="Runnable" testcasecount="2" result="Passed" start-time="2026-10-11 15:47:07Z" end-time="2026-10-11 15:51:50Z" duration="283.187951" total="2" passed="2" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_PID" value="38117" />
|
||||||
|
<property name="_APPDOMAIN" value="Unity Child Domain" />
|
||||||
|
<property name="platform" value="PlayMode" />
|
||||||
|
<property name="EditorOnly" value="False" />
|
||||||
|
</properties>
|
||||||
|
<test-suite type="TestSuite" id="1055" name="Luneraria" fullname="Luneraria" runstate="Runnable" testcasecount="2" result="Passed" start-time="2026-10-11 15:47:07Z" end-time="2026-10-11 15:51:50Z" duration="283.187234" total="2" passed="2" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestSuite" id="1056" name="View" fullname="Luneraria.View" runstate="Runnable" testcasecount="2" result="Passed" start-time="2026-10-11 15:47:07Z" end-time="2026-10-11 15:51:50Z" duration="283.187042" total="2" passed="2" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestSuite" id="1057" name="Tests" fullname="Luneraria.View.Tests" runstate="Runnable" testcasecount="2" result="Passed" start-time="2026-10-11 15:47:07Z" end-time="2026-10-11 15:51:50Z" duration="283.186772" total="2" passed="2" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-suite type="TestFixture" id="1050" name="SceneFrameRateTests" fullname="Luneraria.View.Tests.SceneFrameRateTests" classname="Luneraria.View.Tests.SceneFrameRateTests" runstate="Runnable" testcasecount="1" result="Passed" start-time="2026-10-11 15:47:07Z" end-time="2026-10-11 15:48:57Z" duration="110.620354" total="1" passed="1" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1051" name="SceneMatchIsTheSameAtRealFrameRates" fullname="Luneraria.View.Tests.SceneFrameRateTests.SceneMatchIsTheSameAtRealFrameRates" methodname="SceneMatchIsTheSameAtRealFrameRates" classname="Luneraria.View.Tests.SceneFrameRateTests" runstate="Runnable" seed="1733368402" result="Passed" start-time="2026-10-11 15:47:07Z" end-time="2026-10-11 15:48:57Z" duration="110.618331" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_SCENE_FPS 30 fps: 815 frames in 27.1 s = 30.0 fps, up to 19 steps per frame, hash DCE95C96556F3A1A, same=True
|
||||||
|
LUNE_SCENE_FPS 60 fps: 1626 frames in 27.1 s = 60.0 fps, up to 11 steps per frame, hash DCE95C96556F3A1A, same=True
|
||||||
|
LUNE_SCENE_FPS 120 fps: 3222 frames in 26.9 s = 119.7 fps, up to 10 steps per frame, hash DCE95C96556F3A1A, same=True
|
||||||
|
LUNE_SCENE_FPS unlimited: 84176 frames in 26.8 s = 3138.1 fps, up to 8 steps per frame, hash DCE95C96556F3A1A, same=True
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
<test-suite type="TestFixture" id="1052" name="VerticalFunctionTests" fullname="Luneraria.View.Tests.VerticalFunctionTests" classname="Luneraria.View.Tests.VerticalFunctionTests" runstate="Runnable" testcasecount="1" result="Passed" start-time="2026-10-11 15:48:57Z" end-time="2026-10-11 15:51:50Z" duration="172.566075" total="1" passed="1" failed="0" inconclusive="0" skipped="0" asserts="0">
|
||||||
|
<properties />
|
||||||
|
<test-case id="1053" name="BotMatchesRunVisiblyAndMatchTheCore" fullname="Luneraria.View.Tests.VerticalFunctionTests.BotMatchesRunVisiblyAndMatchTheCore" methodname="BotMatchesRunVisiblyAndMatchTheCore" classname="Luneraria.View.Tests.VerticalFunctionTests" runstate="Runnable" seed="748549110" result="Passed" start-time="2026-10-11 15:48:57Z" end-time="2026-10-11 15:51:50Z" duration="172.561288" asserts="0">
|
||||||
|
<properties>
|
||||||
|
<property name="_JOINTYPE" value="UnityCombinatorial" />
|
||||||
|
<property name="Timeout" value="3600000" />
|
||||||
|
<property name="retryIteration" value="0" />
|
||||||
|
<property name="repeatIteration" value="0" />
|
||||||
|
</properties>
|
||||||
|
<output><![CDATA[LUNE_U2D shot 01-runde1-aufmarsch round 1 Combat
|
||||||
|
LUNE_U2D shot 02-runde1-mid-kampf round 1 Combat
|
||||||
|
LUNE_U2D shot 03-turm-faellt round 7 Combat
|
||||||
|
LUNE_U2D shot 04-turm-ruine round 7 Combat
|
||||||
|
LUNE_U2D shot 05-grotte-bosskampf round 8 Combat
|
||||||
|
LUNE_U2D shot 06-held-kaempft round 9 Combat
|
||||||
|
LUNE_U2D shot 07-boss-auf-der-lane round 9 Combat
|
||||||
|
LUNE_U2D shot 08-ancient-faellt round 9 Over
|
||||||
|
LUNE_U2D shot 09-ancient-ruine round 9 Over
|
||||||
|
LUNE_U2D shot 10-ende-uebersicht round 9 Over
|
||||||
|
LUNE_U2D shot 11-welle21-uebersicht round 21 Combat
|
||||||
|
LUNE_U2D shot 12-welle21-kampf round 21 Combat
|
||||||
|
LUNE_U2D shot 13-ancient-rot-faellt round 22 Over
|
||||||
|
LUNE_U2D shot 14-welle-ende round 22 Over
|
||||||
|
Saving results to: /Users/martin/Library/Application Support/DefaultCompany/luneraria-unity/TestResults.xml
|
||||||
|
]]></output>
|
||||||
|
</test-case>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-suite>
|
||||||
|
</test-run>
|
||||||
11
docs/port/logs/s4/scene-frame-rates.json
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"match": "seed 2, bots, speed 24x",
|
||||||
|
"core_hash": "DCE95C96556F3A1A",
|
||||||
|
"core_steps": 12690,
|
||||||
|
"runs": [
|
||||||
|
{"target": "30 fps", "frames": 815, "seconds": 27.142, "measured_fps": 30.027, "max_steps_per_frame": 19, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true},
|
||||||
|
{"target": "60 fps", "frames": 1626, "seconds": 27.12, "measured_fps": 59.956, "max_steps_per_frame": 11, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true},
|
||||||
|
{"target": "120 fps", "frames": 3222, "seconds": 26.91, "measured_fps": 119.733, "max_steps_per_frame": 10, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true},
|
||||||
|
{"target": "unlimited", "frames": 84176, "seconds": 26.824, "measured_fps": 3138.057, "max_steps_per_frame": 8, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true}
|
||||||
|
]
|
||||||
|
}
|
||||||
16
docs/port/logs/s4/vertical-function-test.json
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"runs": [
|
||||||
|
{"label": "match-seed2", "seed": 2, "start_round": 1, "extra_gold": 0, "speed": 6, "winner": 1, "end_note": "Ancient von Blau zerstört.", "steps": 12690, "hash": "DCE95C96556F3A1A", "core_hash": "DCE95C96556F3A1A", "same_as_core": true,
|
||||||
|
"units_alive_max": 84, "heroes_alive_max": 4, "boss_log": ["round 8: won team 1 ", "round 9: deployed team 1 bot"],
|
||||||
|
"rounds": [{"round": 1, "combat_seconds": 44.9, "lost": [], "boss": "none", "end": "cleared"}, {"round": 2, "combat_seconds": 57.1, "lost": [], "boss": "none", "end": "cleared"}, {"round": 3, "combat_seconds": 54.1, "lost": [], "boss": "none", "end": "cleared"}, {"round": 4, "combat_seconds": 62.9, "lost": [], "boss": "none", "end": "cleared"}, {"round": 5, "combat_seconds": 60.7, "lost": [], "boss": "none", "end": "cleared"}, {"round": 6, "combat_seconds": 62.1, "lost": [], "boss": "none", "end": "cleared"}, {"round": 7, "combat_seconds": 66.5, "lost": ["blau_bot_outer"], "boss": "none", "end": "cleared"}, {"round": 8, "combat_seconds": 89.65, "lost": ["rot_top_outer", "rot_top_inner"], "boss": "won", "end": "cleared"}, {"round": 9, "combat_seconds": 136.55, "lost": ["blau_bot_inner", "blau_base_2", "blau_base_1", "blau_ancient"], "boss": "deployed", "end": "core"}],
|
||||||
|
"events": ["round 7: blau_bot_outer destroyed", "round 8: rot_top_outer destroyed", "round 8: rot_top_inner destroyed", "round 8: grotto boss won", "round 9: blau_bot_inner destroyed", "round 9: blau_base_2 destroyed", "round 9: blau_base_1 destroyed", "round 9: blau_ancient destroyed", "round 9: grotto boss deployed"],
|
||||||
|
"shots": ["01-runde1-aufmarsch", "02-runde1-mid-kampf", "03-turm-faellt", "04-turm-ruine", "05-grotte-bosskampf", "06-held-kaempft", "07-boss-auf-der-lane", "08-ancient-faellt", "09-ancient-ruine", "10-ende-uebersicht"],
|
||||||
|
"performance": null},
|
||||||
|
{"label": "match-seed9-round21", "seed": 9, "start_round": 21, "extra_gold": 4000, "speed": 6, "winner": 0, "end_note": "Ancient von Rot zerstört.", "steps": 4195, "hash": "7B8E43AEFC0D60C5", "core_hash": "7B8E43AEFC0D60C5", "same_as_core": true,
|
||||||
|
"units_alive_max": 125, "heroes_alive_max": 6, "boss_log": [],
|
||||||
|
"rounds": [{"round": 21, "combat_seconds": 121.8, "lost": ["rot_mid_outer", "rot_top_outer", "rot_mid_inner"], "boss": "none", "end": "cleared"}, {"round": 22, "combat_seconds": 87.95, "lost": ["rot_top_inner", "rot_base_1", "blau_bot_outer", "rot_base_2", "rot_ancient"], "boss": "none", "end": "core"}],
|
||||||
|
"events": ["round 21: rot_mid_outer destroyed", "round 21: rot_top_outer destroyed", "round 21: rot_mid_inner destroyed", "round 22: rot_top_inner destroyed", "round 22: rot_base_1 destroyed", "round 22: blau_bot_outer destroyed", "round 22: rot_base_2 destroyed", "round 22: rot_ancient destroyed"],
|
||||||
|
"shots": ["11-welle21-uebersicht", "12-welle21-kampf", "13-ancient-rot-faellt", "14-welle-ende"],
|
||||||
|
"performance": {"window": "20 s real time at 1x speed, unlimited frame rate, round 21", "frames": 48567, "fps": 2428.338, "frame_ms_avg": 0.412, "frame_ms_p95": 0.414, "simulation_ms_per_frame": 0.004, "views_ms_per_frame": 0.147, "units_alive_max": 116}}
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
docs/port/screenshots/s4/ablauf/01-runde1-aufmarsch.jpg
Normal file
|
After Width: | Height: | Size: 583 KiB |
BIN
docs/port/screenshots/s4/ablauf/02-runde1-mid-kampf.jpg
Normal file
|
After Width: | Height: | Size: 599 KiB |
BIN
docs/port/screenshots/s4/ablauf/03-turm-faellt.jpg
Normal file
|
After Width: | Height: | Size: 536 KiB |
BIN
docs/port/screenshots/s4/ablauf/04-turm-ruine.jpg
Normal file
|
After Width: | Height: | Size: 528 KiB |
BIN
docs/port/screenshots/s4/ablauf/05-grotte-bosskampf.jpg
Normal file
|
After Width: | Height: | Size: 598 KiB |
BIN
docs/port/screenshots/s4/ablauf/06-held-kaempft.jpg
Normal file
|
After Width: | Height: | Size: 615 KiB |
BIN
docs/port/screenshots/s4/ablauf/07-boss-auf-der-lane.jpg
Normal file
|
After Width: | Height: | Size: 567 KiB |
BIN
docs/port/screenshots/s4/ablauf/08-ancient-faellt.jpg
Normal file
|
After Width: | Height: | Size: 612 KiB |
BIN
docs/port/screenshots/s4/ablauf/09-ancient-ruine.jpg
Normal file
|
After Width: | Height: | Size: 612 KiB |
BIN
docs/port/screenshots/s4/ablauf/10-ende-uebersicht.jpg
Normal file
|
After Width: | Height: | Size: 426 KiB |
BIN
docs/port/screenshots/s4/ablauf/11-welle21-uebersicht.jpg
Normal file
|
After Width: | Height: | Size: 580 KiB |
BIN
docs/port/screenshots/s4/ablauf/12-welle21-kampf.jpg
Normal file
|
After Width: | Height: | Size: 638 KiB |
BIN
docs/port/screenshots/s4/ablauf/13-ancient-rot-faellt.jpg
Normal file
|
After Width: | Height: | Size: 591 KiB |
BIN
docs/port/screenshots/s4/ablauf/14-welle-ende.jpg
Normal file
|
After Width: | Height: | Size: 570 KiB |
BIN
docs/port/screenshots/s4/spiel/01-nebel-uebersicht.jpg
Normal file
|
After Width: | Height: | Size: 654 KiB |
BIN
docs/port/screenshots/s4/spiel/02-nebelgrenze-mid.jpg
Normal file
|
After Width: | Height: | Size: 668 KiB |
BIN
docs/port/screenshots/s4/spiel/03-betaeubung.jpg
Normal file
|
After Width: | Height: | Size: 748 KiB |