Skip to content

Commit ce719b5

Browse files
feat: rename to AssetsAndMapEditor, add CI/CD pipeline, mismatch filter, category-aware merge/transplant
- Rename project from POriginsItemEditor to AssetsAndMapEditor - Add GitHub Actions release pipeline (Win x64 + macOS ARM64) - Add CHANGELOG.md - Add mismatch filter to client item catalog dropdown - Extend merge/transplant to support Items, Outfits, Effects, Missiles - Add close confirmation dialog, loading indicators, compact sprites - Find unmapped client items, find duplicate items tools - Protocol fix for PStory/Numb DAT (0x4B1E2CAA → 854) - All UI labels in English
1 parent ae8c076 commit ce719b5

53 files changed

Lines changed: 1434 additions & 162 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/release.yml

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
8+
permissions:
9+
contents: write
10+
11+
jobs:
12+
build:
13+
strategy:
14+
matrix:
15+
include:
16+
- os: windows-latest
17+
rid: win-x64
18+
artifact: AssetsAndMapEditor-Win64
19+
- os: macos-latest
20+
rid: osx-arm64
21+
artifact: AssetsAndMapEditor-macOS-ARM64
22+
23+
runs-on: ${{ matrix.os }}
24+
25+
steps:
26+
- name: Checkout
27+
uses: actions/checkout@v4
28+
29+
- name: Setup .NET
30+
uses: actions/setup-dotnet@v4
31+
with:
32+
dotnet-version: '10.0.x'
33+
34+
- name: Restore
35+
run: dotnet restore src/App/AssetsAndMapEditor.App.csproj -r ${{ matrix.rid }}
36+
37+
- name: Publish
38+
run: >
39+
dotnet publish src/App/AssetsAndMapEditor.App.csproj
40+
-c Release
41+
-r ${{ matrix.rid }}
42+
--self-contained true
43+
-p:PublishSingleFile=true
44+
-p:IncludeNativeLibrariesForSelfExtract=true
45+
-o publish/${{ matrix.artifact }}
46+
47+
- name: Zip (Windows)
48+
if: runner.os == 'Windows'
49+
run: Compress-Archive -Path publish/${{ matrix.artifact }}/* -DestinationPath ${{ matrix.artifact }}.zip
50+
51+
- name: Zip (macOS)
52+
if: runner.os == 'macOS'
53+
run: cd publish/${{ matrix.artifact }} && zip -r ../../${{ matrix.artifact }}.zip .
54+
55+
- name: Upload artifact
56+
uses: actions/upload-artifact@v4
57+
with:
58+
name: ${{ matrix.artifact }}
59+
path: ${{ matrix.artifact }}.zip
60+
61+
release:
62+
needs: build
63+
runs-on: ubuntu-latest
64+
65+
steps:
66+
- name: Checkout
67+
uses: actions/checkout@v4
68+
69+
- name: Download all artifacts
70+
uses: actions/download-artifact@v4
71+
with:
72+
path: artifacts
73+
74+
- name: Extract changelog for tag
75+
id: changelog
76+
run: |
77+
TAG="${GITHUB_REF#refs/tags/}"
78+
# Extract the section for this tag from CHANGELOG.md
79+
BODY=$(awk "/^## \\[${TAG//./\\.}\\]/{found=1; next} /^## \\[/{if(found) exit} found" CHANGELOG.md)
80+
if [ -z "$BODY" ]; then
81+
BODY="Release ${TAG}"
82+
fi
83+
# Write to file for the release body
84+
echo "$BODY" > release_notes.md
85+
86+
- name: Create GitHub Release
87+
uses: softprops/action-gh-release@v2
88+
with:
89+
body_path: release_notes.md
90+
files: |
91+
artifacts/AssetsAndMapEditor-Win64/AssetsAndMapEditor-Win64.zip
92+
artifacts/AssetsAndMapEditor-macOS-ARM64/AssetsAndMapEditor-macOS-ARM64.zip

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
bin/
33
obj/
44
out/
5+
publish/
6+
/tmp/
57

68
# IDE
79
.vs/
@@ -21,3 +23,6 @@ Thumbs.db
2123
# Rider
2224
.idea/
2325
*.sln.iml
26+
27+
# Python helper scripts (local only)
28+
*.py
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<Solution>
22
<Folder Name="/src/" />
33
<Folder Name="/src/App/">
4-
<Project Path="src/App/POriginsItemEditor.App.csproj" />
4+
<Project Path="src/App/AssetsAndMapEditor.App.csproj" />
55
</Folder>
66
<Folder Name="/src/OTB/">
7-
<Project Path="src/OTB/POriginsItemEditor.OTB.csproj" />
7+
<Project Path="src/OTB/AssetsAndMapEditor.OTB.csproj" />
88
</Folder>
99
</Solution>

CHANGELOG.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Changelog
2+
3+
All notable changes to Assets And Map Editor will be documented in this file.
4+
5+
## [v1.0.0] - 2026-03-28
6+
7+
### Added
8+
- **Category-aware mass migration** — Merge Session and Batch Transplant now support Items, Outfits, Effects, and Missiles (not just Items)
9+
- **Mismatch filter** — Filter client item catalog by OTB animation mismatch via dropdown
10+
- **Find Unmapped Client Items** — Scan DAT for items without OTB entries, preview and batch-create staged OTB entries
11+
- **Find Duplicate Items** — Pixel-based SHA-256 duplicate detection across all client items
12+
- **Compact Sprites** — Find empty/unreferenced sprite slots, remap to fill gaps
13+
- **Loading indicators** — Progress bar and async loading for DAT/SPR/OTB operations
14+
- **Close confirmation** — Save/Discard/Cancel dialog on window close with unsaved changes
15+
- **Cross-session merge** — Merge all items from a source session with sprite-based deduplication
16+
- **Multi-item transplant** — Batch transplant selected items across sessions with duplicate detection
17+
- **Minimap overlay** — Navigable, movable, resizable minimap on the map editor
18+
- **Brush system** — Full XML brush loader/writer, catalog, visual editor, palette integration
19+
- **Wall auto-alignment** — Automatic wall border placement
20+
- **Border Automagic** — Toggle between raw and brush-based tile placement
21+
- **Map editor** — Integrated OTBM map editor with palette, catalog, and canvas
22+
- **Sprite operations** — Copy/paste, drag-drop, export with RGBA alpha
23+
- **Composition grid** — Full width×height sprite composition with animation
24+
- **OBD import/export** — Object Builder format support
25+
- **Session persistence** — Viewport per session, remember map across restarts
26+
- **Multi-select & delete** — For both OTB and client item lists
27+
- **CI/CD** — GitHub Actions pipeline for Windows x64 and macOS ARM64 releases
28+
29+
### Fixed
30+
- Protocol detection for PStory/Numb DAT files (0x4B1E2CAA → 854)
31+
- Transplanted items now render correctly in target session
32+
- Ghost floor rendering z-order and opacity
33+
- Minimap crash during render pass
34+
- SPR save alongside DAT
35+
- Various crash fixes and UI improvements
36+
37+
### Changed
38+
- All UI labels in English (Save All, Modified)
39+
- Merge/transplant dialogs show per-category breakdowns

src/App/App.axaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Application xmlns="https://github.com/avaloniaui"
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3-
xmlns:conv="using:POriginsItemEditor.App.Converters"
4-
x:Class="POriginsItemEditor.App.App"
3+
xmlns:conv="using:AssetsAndMapEditor.App.Converters"
4+
x:Class="AssetsAndMapEditor.App.App"
55
RequestedThemeVariant="Dark">
66

77
<Application.Resources>

src/App/App.axaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
using Avalonia;
22
using Avalonia.Controls.ApplicationLifetimes;
33
using Avalonia.Markup.Xaml;
4-
using POriginsItemEditor.App.ViewModels;
4+
using AssetsAndMapEditor.App.ViewModels;
55

6-
namespace POriginsItemEditor.App;
6+
namespace AssetsAndMapEditor.App;
77

88
public partial class App : Application
99
{

src/App/AppSettings.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System.Text.Json;
22

3-
namespace POriginsItemEditor.App;
3+
namespace AssetsAndMapEditor.App;
44

55
public class SavedSession
66
{
@@ -25,7 +25,7 @@ public class AppSettings
2525
private static string SettingsFilePath =>
2626
Path.Combine(
2727
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
28-
"POriginsItemEditor",
28+
"AssetsAndMapEditor",
2929
"settings.json");
3030

3131
public static AppSettings Load()
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<TargetFramework>net10.0</TargetFramework>
55
<Nullable>enable</Nullable>
66
<ImplicitUsings>enable</ImplicitUsings>
7+
<AssemblyName>AssetsAndMapEditor</AssemblyName>
78
<ApplicationManifest>app.manifest</ApplicationManifest>
89
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
910
</PropertyGroup>
@@ -24,7 +25,7 @@
2425
</ItemGroup>
2526

2627
<ItemGroup>
27-
<ProjectReference Include="..\OTB\POriginsItemEditor.OTB.csproj" />
28+
<ProjectReference Include="..\OTB\AssetsAndMapEditor.OTB.csproj" />
2829
</ItemGroup>
2930

3031
<ItemGroup>

src/App/BrushData.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System.Xml.Linq;
22

3-
namespace POriginsItemEditor.App;
3+
namespace AssetsAndMapEditor.App;
44

55
// ═══════════════════════════════════════════════════════════════════
66
// Brush data model — loaded from XML, used by palette + map editor

src/App/BrushEditorWindow.axaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<Window xmlns="https://github.com/avaloniaui"
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3-
xmlns:vm="using:POriginsItemEditor.App.ViewModels"
3+
xmlns:vm="using:AssetsAndMapEditor.App.ViewModels"
44
xmlns:i="https://github.com/projektanker/icons.avalonia"
5-
x:Class="POriginsItemEditor.App.BrushEditorWindow"
5+
x:Class="AssetsAndMapEditor.App.BrushEditorWindow"
66
x:DataType="vm:BrushEditorViewModel"
77
Title="Brush Editor"
88
Width="1060" Height="720"

0 commit comments

Comments
 (0)