github TEdit/Terraria-Map-Editor 5.2.1-alpha1
TEdit 5.2.1-alpha1

latest release: 5.1.3
pre-release11 hours ago

Important

Supports Terraria 1.4.5.5 (world file version 318)

Caution

Initial experimental support for tModLoader 1.4.4.9

🎉 New Features
  • Add ReactiveUI v23 module initializer for test project

  • Add spray support to morph tool

  • Morph tool now supports spray mode (density, speed controls)

  • Inherits brush line shapes, outline mode, and transforms

  • Morph target setup runs before first spray tick

  • Add item id and search to chests fixes #2189

  • Add mica fix and fallback for windows fixes #2184

  • Add CAD-style wire routing for pencil tool

  • Add WireRouter with 90° elbow and 45° miter routing algorithms (4-connectivity only)

  • Add click-to-click drawing: first click sets anchor, preview renders to cursor, second click commits

  • W key cycles routing modes: Wire 90° → Wire 45° → Normal → repeat (anchor preserved)

  • Q key toggles direction: Auto ↔ → Horizontal-first ↓ → Vertical-first

  • Right-click or Escape cancels anchor, second Escape exits CAD mode

  • Render colored preview tiles in XNA matching active wire color

  • Add status bar indicator with localized mode text and Unicode direction arrows

  • Add 59 unit tests for WireRouter covering all quadrants, edge cases, and 4-connectivity

  • Works with all paint modes (tile/wall, wire, liquid)

  • Add bus routing fixes #2190

  • Add wire routing scripting API

  • Add routeWire() and routeBus() to draw API for CAD-style routing

  • Add routeWirePath() and routeBusPath() for coordinate-only queries

  • Support 90° elbow and 45° miter modes with auto/h/v direction

  • Bus wireCount auto-converts to brush size based on spacing

  • Works with any picker config (wires, tiles, liquids)

  • Add 10 unit tests for routing API

  • Add overflow menu to activity bar for short windows

  • Add OverflowTabPanel that replaces TabPanel in the activity bar

  • Hidden tabs appear in a context menu anchored bottom-right

  • Icon foreground bound explicitly to avoid black-on-startup

  • Add line drawing previews to pencil

  • Add shift+line preview for pencil and brush tools

  • Show preview line from last click position to cursor when holding shift

  • Brush tool supports full brush shape preview (High Quality Brush Preview setting)

  • Preview computed at render time to avoid input/render thread race conditions

  • Uses same transparent blue color as the standard cursor preview

  • Normal cursor preview at tip remains visible during line preview

  • Add debounce for high quality brush line preview

  • Cache HQ brush preview and debounce recomputation by 250ms

  • Show stale cache while cursor is moving, recompute when paused

  • Simple Bresenham line preview (pencil/LQ) remains instant

  • Clear cache when shift is released

🐛 Bug Fixes
  • Fix Calamity2 tile loading: support new dense .twld format #1075
  • Add ParseTileDataDense/ParseWallDataDense for new tileData/wallData format
  • Add BuildTileDataDense/BuildWallDataDense for round-trip save
  • Fix 1-based saveType indexing (0=vanilla, 1+=mod tile map index)
  • Add bounds checking for stream desync resilience
  • Fix legacy format to read initial skip bytes before first record
  • Add 4 Calamity2 real-world tests (parse, quadrants, round-trip)
  • Add RawTileData/RawWallData properties to TwldData
  • Fix mod tile/wall rendering: accurate colors, layer depth, Safe prefix #1075
  • Sample tile/wall colors from first texture frame instead of full-sheet average
  • Add SampleFirstFrameColor() to TmodTextureExtractor for rawimg textures
  • Fix tile fallback colored square rendering at LayerTileTextures depth
  • Add Safe* prefix wall matching (mirrors existing Unsafe* fix)
  • Log unmatched wall names at debug level for diagnostics
  • Fix pre-existing unit test failures
  • Add SaveTypeToTileMapIndex/SaveTypeToWallMapIndex lookup population in TwldFileTests
  • Fix ModTileEntry_FromTag expected SaveType (index+1 when no "value" key)
  • Fix WallProperty.Id serialization: add JsonIgnoreCondition.Never to prevent
    WhenWritingDefault from skipping Id=0 (which deserializes to default -1)
  • Add textureWrap data for tile 185 (Small Decos) in tiles.json
  • Fix ApplicationInsights v3 API changes: use GlobalProperties for removed context properties
  • Fix LuaCSharp 0.5.3 API changes: update delegate signatures and exception types
  • Fix ReactiveUI v23 build: replace RxApp with RxSchedulers, update ReactiveUI.WPF
  • Fix for weird chest sizes
  • Fix build
✨ Enhancements
  • Update dependency VirtualizingWrapPanel to 2.5.0 (#2183)
  • Update actions/setup-dotnet action to v5
  • Update actions/checkout action to v6
  • Update dependency Microsoft.ApplicationInsights to v3
  • Update dependency coverlet.collector to v8
  • Update Avalonia
  • Update dependency SkiaSharp to 3.119.2
  • Update dependency LuaCSharp to 0.5.3
  • Update actions/upload-artifact action to v6
  • Update dependency System.Drawing.Common to v10
  • Update dependency ReactiveUI to v23
  • Update crowdin link
📦 Other Changes
  • TModLoader .twld support: NBT parser, tile/wall overlay, round-trip save #1075

  • Add BigEndianReader/Writer for tModLoader's big-endian NBT format (TEdit.Common/IO)

  • Add TagCompound and TagIO: GZip-compressed NBT serializer compatible with tModLoader

  • Add TModLoader/ module: TwldFile, TwldData, ModTileEntry, ModWallEntry, ModTileData, ModWallData

  • Parse .twld sidecar: header, tile/wall maps, binary tile/wall data, chest items, NPCs, tile entities

  • Overlay mod tiles/walls onto World.Tiles using virtual IDs beyond vanilla range

  • Register dynamic TileProperty/WallProperty with stable hash-based placeholder colors

  • Strip mod data before vanilla .wld save, re-apply after (transparent round-trip)

  • Preserve unmodified .twld sections (modData, bestiary, killCounts, etc.) for lossless save

  • 25 new tests: TagCompound round-trip, BigEndian encoding, binary tile parsing, entry serialization

  • ModScraper: extract tile/wall colors from .tmod archives #1075

  • Add TEdit.ModScraper console app to scan .tmod files for tile/wall textures

  • Support both PNG and tModLoader .rawimg texture formats

  • Sample weighted average colors from non-transparent pixels

  • Output modColors.json mapping mod:tile → hex color

  • Search Steam Workshop and tModLoader Mods directories by default

  • Add modColors.json loading to TwldFile for better mod tile rendering

  • Fall back to hash-based colors when no scraped color available

  • Cache mod colors after first load for performance

  • Add 8 regression tests: vanilla world guards, modColors.json parsing

  • All 21 TwldFile tests pass, 0 regressions

  • World Explorer: add Vanilla/tModLoader toggle button #1075

  • Add toggle button in search bar to switch between Vanilla and tModLoader worlds

  • Filter world list by IsTModLoader flag from world header

  • Scan tModLoader worlds folder (My Games/Terraria/tModLoader/Worlds)

  • Show world count for each mode in the toggle button

  • Auto-select tModLoader mode when no vanilla worlds exist

  • Add localization keys: world_explorer_tab_vanilla, world_explorer_tab_tmodloader

  • Convert .wld test files to LFS pointers

  • Files were committed as raw binaries before LFS was configured

  • Re-stage through LFS clean filter to store as proper pointers

  • Load mod tile/wall textures from .tmod archives at world load #1075

  • Add TmodTextureExtractor to read .tmod archives and extract tile/wall textures (PNG + rawimg)

  • Add name-to-virtual-ID mapping in TwldFile for bridging texture paths to tile/wall IDs

  • Wire LoadModTextures into WorldViewModel load pipeline after RegisterModSprites

  • Add Texture2D loading helpers for PNG bytes and raw RGBA with color key transparency

  • Process texture queue in render loop for deferred mod texture creation

  • Fix rawimg decoder to handle version=1 header prefix (3 int32s not 2)

  • Find .tmod files via cascading search: tModLoader Mods folder, Steam workshop

  • Add 19 unit tests for rawimg decoding, name mapping, and real .tmod integration

  • Add tmodloader-support.md tracking remaining mod support work

  • Item editing

  • Mod chest item editing: copy/paste, UI display, item textures #1075

  • Copy/paste now carries mod fields (ModName, ModItemName, prefix, NBT data)

  • NetId setter clears mod identity so vanilla item selection works cleanly

  • Chest editor shows italic mod item name when IsModItem is true

  • Extract item textures from .tmod archives, display 24x24 previews

  • FastChestItem template uses MultiBinding for mod+vanilla preview lookup

  • Add ModItemPreviewCache (string-keyed) and ItemPreviewMultiConverter

  • Fix pre-existing: UndoManager TileImportance bounds check for mod tiles

  • Fix pre-existing: ClipboardView binding path (Buffer.Name)

  • Mod item support for tile entity editors #1075

  • Add mod fields (ModName, ModItemName, etc.) to TileEntityItem and TileEntity

  • TileEntity.ToItem()/FromItem() helpers for single-item entities

  • TileEntityItem carries mod identity through Copy, ToItem, and implicit operators

  • Item.ToTileEntityItem() and implicit operator preserve mod fields

  • ApplyModTileEntityItems: overlay .twld NBT mod data onto tile entities at load

  • RebuildModTileEntityItems: serialize mod data back to NBT at save

  • Fix sync save path missing RebuildModChestItems call

  • Copy/paste now works for all single-item entity types with mod identity

  • XAML bindings for IsModItem/ModItemDisplayName on all tile entity editors

  • Updated tmodloader-support.md with tile entity architecture notes

  • Merge remote-tracking branch 'origin/renovate/actions-setup-dotnet-5.x' (#2076)

  • Merge remote-tracking branch 'origin/renovate/actions-checkout-6.x' (#2102)

  • Merge remote-tracking branch 'origin/renovate/major-applicationinsights-dotnet-monorepo' (#2129)

  • Merge remote-tracking branch 'origin/renovate/coverlet.collector-8.x' (#2154)

  • Merge remote-tracking branch 'origin/renovate/avalonia' (#2157)

  • Merge remote-tracking branch 'origin/renovate/skiasharp-monorepo' (#2158)

  • Merge remote-tracking branch 'origin/renovate/luacsharp-0.x' (#2161)

  • Merge remote-tracking branch 'origin/renovate/major-github-artifact-actions' (#2162)

  • Merge remote-tracking branch 'origin/renovate/major-dotnet-monorepo' (#2163)

  • Merge remote-tracking branch 'origin/renovate/reactiveui-23.x'

Conflicts:

src/TEdit/TEdit.csproj (#2176)

  • New Crowdin translations by GitHub Action

  • New Crowdin translations by GitHub Action

  • Merge main into feature/modloader

  • Resolve conflicts: take main's dependency updates (ReactiveUI v23,
    System.Drawing.Common v10, ApplicationInsights v3)

  • Keep modloader's Mode=OneWay bindings in PaintModeView for mod tile support

  • Re-add modloader localization keys dropped during merge (nbt_explorer_title,
    world_explorer_tab_vanilla, world_explorer_tab_tmodloader)

  • Restore Xunit.SkippableFact package reference for modloader tests

  • Fix ReactiveUI v23 module initializer for TEdit.Terraria.Tests

  • Merge remote-tracking branch 'origin/main' into feature/modloader

  • Drag ClipboardBuffer

  • Wire mode and paste improvements

👥 Contributors

Don't miss a new Terraria-Map-Editor release

NewReleases is sending notifications on new releases.