Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
DrawableSuits
Draw directly on your Lethal Company suit in a third-person in-game editor with decals, stickers, text, save/load, design codes, and multiplayer apply/save sync.
CHANGELOG
Changelog
0.5.77
- Removed the JetpackWarning compatibility guard, including its log scanning, Harmony unpatching, config entry, and session-safety diagnostics.
0.5.76
- Removed the external decal picker path. The Decals menu now copies the Decals folder path and relies on manual PNG/JPG placement plus
Refresh. - Moved runtime components onto a dedicated hidden
DrawableSuitsRuntimeRootinstead of the BepInEx plugin GameObject. - Removed the old full-scene closed-editor stray-object repair scan and repeated startup repair loop.
- Rewrote the README with safer decal instructions, clearer multiplayer sync notes, and Thunderstore review guidance.
0.5.75
- Fixed UV-panel Decal, Sticker, and Text placement at 90/270 degree panel rotations by transforming the full placement frame instead of only the angle.
- Reflowed the editor shortcut help text so the UV rotation and placement shortcut instructions no longer clip.
0.5.74
- Fixed rotated UV-panel Decal, Sticker, and Text placement so the final stamp uses the same visible orientation as the preview.
- Corrected the dead-body spawn patch signature and added suit-ID snapshots so corpses/ragdolls can inherit the player's applied DrawableSuits texture more reliably.
- Improved diagnostics for UV placement rotation and dead-body suit material application.
0.5.73
- Fixed Decal, Sticker, and Text stamping in the rotated UV panel so the final stamp keeps the same visible rotation as the preview.
- Applied synced/current suit textures to dead bodies and ragdolls, with short retry passes for late body renderers.
- Added diagnostics for UV placement rotation resolution and dead-body suit application.
0.5.72
- Fixed multiplayer sync chunk receiving so incoming texture chunks read into an allocated buffer instead of failing with a null destination.
- Added player-slot identity to sync payloads and active-design caching so received suit textures apply to the correct player more reliably.
- Improved sync diagnostics for owner resolution, payload matching, chunk read failures, and player identity snapshots.
0.5.71
- Fixed multiplayer suit sync reliability by normalizing local owner client IDs before broadcasting applied/saved designs.
- Added server-side active design caching so late joiners can receive the latest applied player suit textures.
- Added retry reapplication after sync receive, player spawn/connect, and suit-switch events so remote renderers get synced materials when they appear late.
- Raised the default/effective legacy multiplayer sync payload limit to 4 MB and added clearer sync skip/apply diagnostics.
0.5.70
- Added view-only UV panel rotation in 90-degree steps with
[/]and controllerLB/RB. - Updated UV panel pointer mapping, overlays, zoom, and pan to respect the rotated view.
- Replaced bumper camera rotation with UV panel rotation; right stick remains the camera orbit control.
0.5.69
- Fixed the Design action buttons overflowing past their section border.
- Spread Recent Colors across the available Color section width for a cleaner layout.
- Added layout diagnostics for the Design, Undo History, and Recent Colors rects.
0.5.68
- Polished editor layout spacing and button row formatting after the 0.5.67 layout pass.
- Added clearer UV panel grouping and lighter section cards without changing editor behavior.
0.5.67
- Cleaned up editor layout spacing after the debug HUD removal.
- Rebalanced the left and right editor columns, enlarged the UV panel slot, and added subtle section grouping diagnostics.
0.5.66
- Tightened the pause-menu inline prefix spacing so
DrawableSuitsaligns more closely with native menu rows. - Added a Ko-Fi support section to the README noting that donations help development and commissions are available.
0.5.65
- Fixed the pause-menu
DrawableSuitsprefix alignment by using an inline>fallback when the native row does not expose a prefix child. - Removed the fragile separately positioned pause-menu prefix text object from the injected row.
- Added diagnostics for preserved-child versus inline-label prefix handling.
0.5.64
- Fixed the pause-menu
DrawableSuitsrow so it preserves or synthesizes the native>prefix. - Adjusted pause-menu insertion to preserve native row spacing instead of reflowing every existing row.
- Added diagnostics for prefix handling, row placement, target graphic mapping, and navigation.
0.5.63
- Made the pause-menu
DrawableSuitsrow clone the native Resume row style first so it matches surrounding menu buttons. - Preserved native pause-menu prefix/arrow text while replacing only the primary row label.
- Added pause-menu style diagnostics for template selection, preserved labels, navigation, and button colors.
0.5.62
- Reclaimed the empty left-panel space left by the removed editor diagnostics block.
- Rewrote the README into a shorter informational guide without install instructions.
- Kept the right-column UV panel and editor tool behavior unchanged.
0.5.61
- Removed visible startup/F9 debug HUDs and the editor diagnostics text block while keeping file-based diagnostics logging.
- Stopped creating obsolete
DebugOverlayKey,ShowStartupDiagnostics, andStartupDiagnosticsSecondsconfig entries for new configs. - Removed the fallback diagnostics canvas; editor UI build failures now log to
diagnostics.logand report a concise open failure.
0.5.60
- Added Decal and Sticker placement rotation shortcuts: keyboard
,rotates left,.rotates right, and controller D-pad left/right rotates by 5 degrees per press. - Rotation shortcuts now sync the placement rotation slider/label, invalidate previews, and log
PlacementRotationShortcutApplieddiagnostics. - Shortcuts are ignored while modal panels are open, text fields are focused, or UI controls are being dragged.
0.5.59
- Froze the third-person editor avatar proxy after the initial setup bake so idle breathing animation no longer moves the paint target.
- Stopped normal world raycasts and editor updates from rebaking the skinned suit mesh every frame.
- Added
WorldAvatarProxyRebakedandWorldAvatarProxyPoseFrozendiagnostics for explicit proxy rebuilds.
0.5.58
- Isolated Decal/Sticker edit modals from world/UV placement preview generation so slider changes no longer trigger full-quality edited stamp generation.
- Deferred full-quality placement stamp creation until after target checks and the settled world-preview idle delay.
- Added
PlacementPreviewSkippedForModalandPlacementPreviewStampDeferreddiagnostics.
0.5.57
- Replaced Decal edit-panel full-quality preview jobs with a small preview-resolution CPU render path so crop, stretch, flip, and filter sliders stay responsive.
- Kept final Decal placement previews and stamped pixels full quality while separating modal-preview cache keys from placement/stamp cache keys.
- Added
DecalEditPreviewFastUpdated,DecalEditPreviewFastCacheHit,DecalEditPreviewFastSkipped, andEditedDecalFullQualityGenerateddiagnostics.
0.5.56
- Moved full-quality Decal temporary edit preview rendering into a latest-only async CPU job so slider changes no longer block Unity's main thread.
- Completed Decal edit-preview jobs now populate the same full-quality edited stamp cache used by placement previews and final stamping.
- Added
DecalEditPreviewJobQueued,DecalEditPreviewJobCompleted,DecalEditPreviewJobDiscarded, andDecalEditPreviewJobApplieddiagnostics.
0.5.55
- Cached Decal edit-panel source pixels and switched preview-quality rendering to manual CPU bilinear sampling so large decal previews no longer call Unity texture APIs per pixel.
- Kept final Decal and Sticker placement/stamping full quality while the edit-panel preview remains lightweight and responsive.
- Added placement source pixel cache diagnostics for cached, reused, and cleared preview source buffers.
0.5.54
- Restored real-time Decal/Sticker edit-panel previews by rendering a lightweight preview-quality stamp while keeping final placement and stamping full quality.
- Split temporary placement edit caches into preview-quality and full-quality stamp textures with cleanup on source changes, reset, close, and plugin shutdown.
- Increased the shared orange slider dot handle size slightly while keeping long selected-decal filenames safely truncated inside compact UI boxes.
0.5.53
- Deferred Decal/Sticker temporary edit preview rebuilds while crop, stretch, and filter sliders are moving, keeping the last preview visible until the new preview is ready.
- Replaced the large rectangular slider handles with compact orange dot handles across the editor and edit panels.
- Middle-ellipsized long selected decal filenames in compact display boxes so they no longer overflow the UI.
0.5.52
- Fixed edited Decals stamping the original image by routing final Decal placement through the same temporary edited stamp texture used by previews.
- Replaced single Decal/Sticker filter selection with fixed multi-filter rows, each with its own intensity.
- Fixed the temporary edit panel preview so crop and width/height stretch preserve the generated stamp aspect instead of stretching into a square.
0.5.51
- Added temporary Decal and Sticker edit panels for crop, width/height stretch, flip X/Y, and preset filters.
- Edited decal/sticker stamps now affect previews and future placements only; source decal files and built-in sticker masks are not modified.
- Routed edited Decal and Sticker stamps through the existing third-person projection, UV panel preview, Mirror, undo history, and recent-color behavior.
0.5.50
- Added controller right-stick panning for the zoomed UV panel while the cursor is over the panel.
- Kept right-stick third-person camera orbit unchanged when the cursor is outside the UV panel.
- Updated UV panel diagnostics/help text to reflect contextual controller pan behavior.
0.5.49
- Added UV panel zoom and pan: wheel or controller D-pad zooms the UV panel while the cursor is over it, and right-mouse drag pans the zoomed texture view.
- UV panel painting, erasing, fill, decals, text, stickers, eyedropper, Mirror previews, and brush cursor sizing now respect the zoomed texture viewport.
- Added
UvPanelViewChangeddiagnostics and included UV panel zoom/uvRectin texture-panel and UI input diagnostics.
0.5.48
- Retired the previous in-process file-selection approach after it proved unsafe in-game.
- Kept manual Decals-folder placement plus
Refreshas the fallback. - Added import-path diagnostics while preserving decal validation, row refresh, and selection behavior.
0.5.47
- Added an earlier decal image import workflow in the Decals menu.
- Imported decals were validated, copied under a safe unique filename, refreshed, and selected automatically.
- Kept manual folder placement plus
Refreshas the fallback path.
0.5.46
- Added a
Clear Historybutton that clears undo/redo history without changing the current suit texture. - Added two-step
Delete Selectedcontrols to the Saved Designs and Decals menus, limited to files inside the DrawableSuits save/decal folders. - Clearing or deleting now logs explicit diagnostics and cancels stale delete confirmations when selections, refreshes, or modals change.
0.5.45
- Changed third-person Decal and Sticker previews to hide while the cursor is moving, then rebuild only after the cursor has been still briefly.
- Kept final Decal and Sticker stamping immediate and full quality, while leaving UV-panel previews immediate.
- Added settled-preview diagnostics for waiting, hidden-while-moving, and idle rebuilds.
0.5.44
- Replaced inline decal and sticker selectors with separate modal menus so they no longer cover the UV editor or each other.
- Fixed the Sticker toolbar icon asset so it tints with the same brightness as the other terminal icons.
- Reduced third-person Decal and Sticker preview rebuild cost with preview caching, throttling, and coarser hover keys while keeping final stamps full quality.
0.5.43
- Added a UI-only Sticker tool with built-in shape stamps, live preview, one-shot placement, Mirror support, undo history, and recent-color tracking.
- Added Circle, Square, Triangle, Diamond, Star, Heart, Arrow, Lightning Bolt, Plus/Cross, Ring, Crescent, and Shield sticker shapes.
- Kept stickers baked into the suit texture after stamping, with no editable layer system or new shortcuts.
0.5.42
- Replaced the package icon with the new terminal artwork, cropped and resized for the 256x256 mod icon.
0.5.41
- Replaced the procedural toolbar glyphs with generated embedded PNG icon masks for Paint, Erase, Fill, Decal, Text, Eyedropper, and Mirror.
- Kept the red terminal toolbar styling, active-state tinting, and mouse/controller button behavior unchanged.
- Retained the old procedural icon renderer as a diagnostics fallback if an embedded icon asset fails to load.
0.5.40
- Refined the generated Paint, Fill, and Eyedropper tool icons so they read as a paint brush, paint bucket, and eyedropper.
- Kept the 0.5.39 terminal UI style and existing button/controller behavior unchanged.
0.5.39
- Restyled the editor with an Imperium-inspired red/dark terminal overlay.
- Replaced the tool text buttons with generated icon buttons for Paint, Erase, Fill, Decal, Text, Eyedropper, and Mirror.
- Added active-tool labeling and refreshed button, slider, list, input, modal, and diagnostics styling while preserving existing editor behavior.
0.5.38
- Changed Undo History's selected-row action to undo only the selected history entry instead of undoing every newer entry.
- Renamed the deliberate history action button to
Undo Selected. - Rewrote newer undo snapshots after selective undo so later one-step Undo does not resurrect the removed action.
0.5.37
- Changed Undo History rows to select a target action instead of immediately undoing.
- Added an explicit
Undo To Selectedbutton for deliberate multi-step history undo. - Added stable undo-entry IDs and selection diagnostics so stale history row indices cannot undo the wrong range.
0.5.36
- Moved saved designs into a separate modal menu so controller help no longer overlaps saved rows.
- Made Undo History rows clickable to undo through a selected labeled action while preserving redo history.
- Shortened the controller help line on the main editor overlay.
0.5.35
- Added a compact Undo History panel with labels for recent undoable actions.
- Labeled Brush stroke, Erase, Decal placed, Text placed, Color fill, Reset, Load design, and Import code undo entries.
- Kept Undo/Redo snapshot behavior while tracking matching redo labels and capped history diagnostics.
0.5.34
- Added persistent Recent Colors swatches below the color picker.
- Recent colors are added only after successful Paint, Fill, or Text writes.
- Clicking a recent swatch restores the brush color without adding duplicate entries.
0.5.33
- Added a Brush Shape dropdown for Paint and Erase.
- Added Circle, Square, Pixel, Spray Paint, Soft Airbrush, and Noise/Scatter brush shapes.
- Updated third-person surface painting, UV panel painting, Mirror, cursor visuals, and diagnostics to respect the selected brush shape.
0.5.32
- Removed the manual suit selector from the editor.
- Locked editor operations to the local player's currently worn suit.
- Added README guidance that ModelReplacementAPI is not compatible with DrawableSuits.
0.5.25
- Made the UV texture panel visible alongside the third-person editor instead of requiring a normal view toggle.
- Added target-based input routing so hovering the UV panel edits the texture panel while hovering the world edits the third-person suit.
- Kept texture-only fallback behavior for
StartInUvFallbackModeand failed third-person setup. - Added
TexturePanel[...]diagnostics for UV panel assignment and input target distinction.
0.5.24
- Moved the UV fallback preview into a reserved right-column slot so it no longer covers the color picker or brush controls.
- Rebalanced the right-column design/action/list controls around the new UV preview area.
- Added UV preview sibling index and anchored position diagnostics to
TexturePreview[...]logs.
0.5.23
- Added a UI-only Fill Bucket tool with a visible Fill Tolerance slider.
- Fill flood-fills the contiguous matching texture region under the cursor using the current brush color and opacity.
- Added single-shot mouse/controller RT fill behavior with one undo entry for primary plus mirrored fills.
- Added anatomical Mirror support for Fill when a mirror target is available.
- Added
FillBucketAppliedandFillBucketSkippeddiagnostics.
0.5.22
- Changed third-person Paint and Erase to project brush strokes onto the visible suit surface before resolving to texture UVs.
- Added filled surface-brush coverage with seam guards so strokes no longer cut off at normal UV island boundaries while avoiding unrelated-island bleeding.
- Kept UV fallback Paint and Erase as direct UV-layout editing.
- Added
BrushSurfaceStrokeApplied,BrushSurfaceStrokeSkipped, andBrushSurfaceProjectionWarningdiagnostics.
0.5.21
- Replaced the native software cursor renderer with a direct editor-canvas cursor drawn through the same UGUI canvas as the visible editor controls.
- Kept dynamic Paint and Erase brush rings plus dot-mode cursor behavior without relying on Unity native cursor textures, IMGUI, or a separate cursor canvas.
- Stopped controller cursor rendering from depending on OS mouse warping while preserving existing virtual-cursor UI targeting.
- Added
CanvasCursorBuilt,CanvasCursorUpdated, andCanvasCursorHiddendiagnostics.
0.5.20
- Replaced the IMGUI cursor renderer with Unity's native software cursor path using generated cursor textures.
- Restored visible native cursor handling while the editor is open, including dynamic Paint and Erase brush rings plus dot-mode cursor behavior.
- Added controller cursor warping so the native cursor follows the virtual cursor during gamepad editing.
- Added
NativeCursorUpdated,NativeCursorWarped,NativeCursorReset, andNativeCursorSetFaileddiagnostics.
0.5.19
- Replaced the unreliable UGUI cursor canvas with an immediate-mode overlay cursor drawn through
OnGUI. - Kept dynamic Paint and Erase brush rings plus dot-mode cursor behavior without relying on Canvas, Image, CanvasScaler, sorting order, EventSystem, or raycasters.
- Hid the native Unity cursor while the editor is open so the immediate cursor is the only editor pointer.
- Added
ImmediateCursorUpdatedandImmediateCursorDrawSkippeddiagnostics for the new cursor renderer.
0.5.18
- Fixed the invisible dynamic cursor caused by assigning the cursor canvas sorting order above Unity's safe signed range.
- Moved the editor canvas below the cursor canvas and kept the cursor canvas at
sortingOrder=32767with override sorting enabled. - Slightly increased dot cursor contrast/size and expanded cursor diagnostics with requested versus actual canvas order.
0.5.17
- Fixed the missing dynamic cursor by moving it to a dedicated topmost
DrawableSuitsCursorCanvas. - Rebuilt cursor visuals as layered non-raycastable dot/ring images with a dark backing for contrast.
- Kept Paint and Erase brush rings dynamic while UI hover, invalid targets, Decal, Text, Eyedropper, and normal navigation use a small dot.
- Added
CursorCanvasStatediagnostics and expandedDynamicCursorUpdatedcursor visibility details.
0.5.16
- Replaced the fixed square editor cursor with a dynamic UGUI cursor.
- Added hollow Paint and Erase brush rings that scale to the active brush radius in third-person and UV fallback modes.
- Changed non-paint tools, invalid targets, and UI hover to use a small dot cursor while keeping the old filled brush indicator and world sphere marker hidden.
- Added rate-limited
DynamicCursorUpdateddiagnostics for cursor mode, target, brush size, computed diameter, UV, triangle, and fallback sizing.
0.5.15
- Fixed third-person decal tearing by rasterizing projected decal coverage between valid surface samples instead of writing only individual projected points.
- Added seam guards so projected decals skip cells that jump across UV islands instead of bleeding into unrelated atlas regions.
- Expanded decal projection diagnostics with sample, hit, rasterized-cell, seam-skip, off-suit, and written-pixel counts.
0.5.14
- Added compact lossless
DSUIT2:share codes while keeping legacyDSUIT1:import compatibility. - Preserved third-person camera yaw, pitch, and zoom when importing a design code.
- Changed third-person Decal preview and stamping to project onto the visible suit surface, matching the Text projection path and avoiding UV island clipping/rotation issues.
- Added
DecalSurfacePreviewUpdated,DecalSurfaceStampCommitted, and expanded design-code diagnostics for payload and code lengths.
0.5.13
- Added shareable
DSUIT1:design codes that export the current editable suit texture and metadata into a copy/paste code. - Added an import/export design code panel with Copy Current, Paste, Import, and Close controls.
- Imports validate code prefix, Base64Url, compressed JSON, PNG data, texture dimensions, and design name before loading into the current suit without auto-saving or broadcasting.
- Added
DesignCodeExported,DesignCodeImportRequested,DesignCodeImported, andDesignCodeImportFaileddiagnostics without logging full codes.
0.5.12
- Fixed third-person Text preview and stamping appearing horizontally mirrored by preserving camera-right alignment in the surface projection basis.
- Added focused
TextProjectionFrameBuiltdiagnostics for text projection orientation, handedness, sample order, and camera alignment. - Kept mirrored Text behavior limited to the UI-only Mirror toggle.
0.5.11
- Changed third-person Text stamping to project glyph pixels onto the visible suit surface instead of applying a flat UV rectangle.
- Added third-person Text preview and stamp diagnostics for projected world size, written pixels, skipped glyph pixels, hit point, and hit normal.
- Kept UV fallback Text stamping as direct UV editing while preserving transparent alpha-mask text rendering from 0.5.10.
0.5.10
- Fixed Text stamps rendering with an opaque black background by converting rendered glyphs into transparent alpha-mask textures.
- Fixed clipped Text stamps by trimming generated glyph bounds with padding so first and last letters are preserved.
- Updated Text diagnostics to log raw render size, glyph bounds, final texture size, visible pixel count, and alpha extraction mode.
0.5.9
- Added a UI-only
Texttool that previews and stamps single-line text onto the suit in third-person mode and UV fallback. - Text stamps use the built-in Arial font, current brush color, brush opacity, size/rotation placement controls, and one undo entry per stamp.
- Added Mirror support for text stamps plus
TextPreviewUpdated,TextPreviewHidden,TextStampCommitted, andTextStampSkippeddiagnostics.
0.5.8
- Added a UI-only one-shot
Eyedroppertool for sampling colors from the third-person suit surface or UV fallback preview. - Sampling updates the brush color, swatch, hue/SV picker, and hex input, then returns to the previous Paint, Erase, or Decal tool.
- Added
EyedropperSampledand rate-limited miss diagnostics without adding undo entries or new keyboard/controller shortcuts.
0.5.7
- Replaced UV-axis mirror painting with anatomical surface-map mirroring in third-person mode.
- Added mesh-based mirror lookup for UV fallback when the clicked UV maps to the suit mesh.
- Updated mirrored decal previews and stamps to use the resolved opposite suit surface instead of
uv.x = 1 - uv.x. - Added mirror diagnostics for source local point, reflected local point, selected mirror triangle, distance, and skipped mirror targets.
0.5.6
- Added a UI-only
Mirrortoggle that duplicates Paint, Erase, and Decal edits across the suit texture's left-right UV axis. - Mirrored decal stamping now places the primary and mirrored decal in one click or right-trigger press, with one undo entry.
- Added mirrored decal placement previews in third-person mode and UV fallback mode.
- Added mirror diagnostics for primary and mirrored UV/pixel coordinates.
0.5.5
- Removed the part picker and restored full-suit third-person editing as the only active editing workflow.
- Stopped filtering third-person proxy meshes, UV fallback textures, paint strokes, erase strokes, and decal stamps through generated part masks.
- Stopped creating the
PartPresetsfolder during runtime setup; existing user files are left untouched but ignored by the editor. - Updated diagnostics so active editor logs report full proxy mesh state instead of part classifier output.
0.5.4
- Tightened the vanilla humanoid part preset so Helmet no longer absorbs upper torso geometry.
- Moved central upper-body and strap geometry back into Torso before arm classification, preventing the right arm from including chest strap pieces.
- Added vanilla preset correction diagnostics for
helmetToTorso,otherToTorso,armStrapToTorso,otherToArm, and per-part connected-component ranges. - Preserved the improved vanilla leg classification from 0.5.3 while correcting Helmet, Torso, Arm, and Other cleanup behavior.
0.5.3
- Added preset-based part classification for the vanilla Lethal Company humanoid suit, matched by renderer, mesh, material, and texture fingerprint.
- Added optional JSON part preset loading from
BepInEx/config/DrawableSuits/PartPresetsfor future modded suit overrides. - Reworked vanilla Helmet, Torso, Arm, and Leg selection to use the vanilla suit's baked mesh orientation instead of loose broad bounds thresholds.
- Expanded part diagnostics with mesh fingerprints, preset match results, preset triangle counts, and clearer fallback reporting.
0.5.2
- Reworked part isolation to use corrected bone-token classification as the primary path, with bounds fallback only for weak or missing bone data.
- Fixed right-side bone names such as
arm.R_lowerbeing misread as left-side names. - Rebuilt selected third-person parts as compact proxy meshes so hidden triangles and unused vertices no longer leak into selected-part bounds, colliders, or visuals.
- Changed part cleanup diagnostics to report suspicious tiny components without aggressively reassigning bone-classified triangles.
0.5.1
- Reworked suit part classification to use geometry gates first and bone weights only when they match plausible helmet, torso, arm, or leg regions.
- Fixed vanilla helmet detection when suit bones do not expose a usable head/helmet bone, so the Helmet selector can be available from top-cap geometry.
- Added connected-component cleanup for tiny stray triangle islands that previously made torso/limb selections show fragments from other parts.
- Changed part button availability to use visible geometry instead of requiring editable UV pixels, with visible-only warnings when a part cannot paint.
- Reduced false shared-UV warnings by ignoring tiny raster edge overlaps and expanded part classifier diagnostics with raw/cleaned counts, bounds, components, and mapped bones.
0.5.0
- Added
All,Helmet,Torso,Left Arm,Right Arm,Left Leg,Right Leg, and conditionalOtherpart selection controls. - Added automatic proxy classification using recognized bone influences with normalized geometry fallback for modded or unrecognized suit meshes.
- Filtered the third-person avatar proxy and paint collider so only the selected part is shown and targetable while editing.
- Added UV masks that clip paint, erase, decal preview, and decal stamps to the selected part, with overlap diagnostics for suits that reuse UV pixels across body parts.
- Applied part isolation to UV fallback mode by displaying and editing only the selected part's UV islands while retaining full-texture save/load/sync compatibility.
0.4.8
- Added a translucent decal placement preview in third-person paint mode using a temporary proxy-only preview texture/material.
- Added a non-raycastable rotated decal preview overlay for UV fallback mode.
- Refactored decal compositing so preview and final stamping use the same placement math.
- Changed Decal tool input to place one decal per mouse click or controller RT press instead of repeatedly stamping while held.
- Added rate-limited
DecalPreviewUpdated,DecalPreviewHidden, andDecalStampCommitteddiagnostics.
0.4.7
- Replaced decal and saved-design list rebuilds with stable row pools so Reset, Save, and Load cannot hit stale list row buttons during the same click.
- Changed Save to preserve only an already selected saved-design row instead of auto-selecting the newly saved file.
- Fixed hue ring and saturation/value handle placement by parenting handles to their own picker rects and using shared coordinate conversion for input and visuals.
- Preserved third-person camera yaw, pitch, and zoom when loading a design or switching suits while the editor is open.
- Reduced repeated world proxy material diagnostics to change-based/rate-limited logs.
0.4.6
- Rebuilt the color picker layout so the saturation/value square sits beside the hue ring instead of covering it.
- Replaced the color handle squares with small outline handles and added editable
#RRGGBBhex color input. - Added a controller virtual-cursor arming guard so the first
Apress after opening cannot close the menu or switch suits before the stick is moved. - Removed the duplicate decal refresh button and kept one short-status
Refresh Decalsaction. - Further neutralized normal button highlight/selection state while preserving selected styling for tools, decals, and saves.
0.4.5
- Reworked controller virtual-cursor
Aclicks to resolve only actionable UI controls under the cursor, including buttons, input fields, DrawableSuits sliders, and the new color picker. - Stopped normal buttons from keeping stale selected/highlight colors after unrelated clicks while preserving selected styling for tools, decals, and saved designs.
- Replaced RGB brush sliders with a compact hue-ring and saturation/value color picker with a live hex swatch.
- Shortened the in-game
Refresh Decalsstatus message so it no longer overlaps the world-help text or diagnostics area. - Added diagnostics for raw UI raycast hits, resolved virtual-cursor targets, press targets, and release targets.
0.4.4
- Made active edited textures player-specific by owner client ID instead of global per suit ID, so editing one player no longer changes every player or rack using the same base suit.
- Added owner client ID to multiplayer texture sync and late-join active design responses.
- Stopped mutating
UnlockableItem.suitMaterialand suit rack materials for player-specific edits. - Removed right trigger from third-person camera zoom; right trigger now paints only and controller zoom uses D-pad up/down.
- Disabled the filled UV fallback brush indicator that looked like a second color-changing cursor.
- Added first-person overlay hiding/filtering for nearby helmet, visor, viewmodel, arms, hands, camera, and held-item renderers while the editor is open.
- Added proxy material filtering and diagnostics for visible editor-camera renderers, hidden first-person overlays, proxy material slots, and player-specific sync state.
0.4.3
- Replaced direct live local-player rendering in third-person editor mode with a DrawableSuits-owned
DrawableSuitsWorldAvatarProxy. - Added renderer candidate scoring and diagnostics so the editor selects a body/suit
SkinnedMeshRendererinstead of first-person arms, held items, camera children, or viewmodel pieces. - Hid and restored local player/camera renderers while editing so the third-person camera shows the proxy model without first-person rig clutter.
- Updated world painting to raycast only against the proxy collider layer and to keep the proxy renderer using the active DrawableSuits runtime material.
- Added diagnostics for selected source renderer, hidden renderer count, avatar proxy, proxy material, camera mask, and restore behavior.
0.4.2
- Added
AutoDisableBrokenJetpackWarningLateUpdatePatch, enabled by default, to disable only the brokenJetpackWarning.Patches.PlayerControllerB_LateUpdate_Postfixafter repeated null-reference errors are detected inBepInEx/LogOutput.log. - Made
SessionSafetyCheckrun inSampleSceneRelayeven whenCamera.mainis null and added diagnostics forCamera.main, active cameras, local player flags, prompt-related fields, local renderer materials, and JetpackWarning guard status. - Kept DrawableSuits editor cameras, paint proxies, brush markers, input locks, and local renderer overrides repaired/restored while
EditorOpen=False. - Gated early scene/session material reapplies until unlockables and player scripts are ready, reducing non-editor startup side effects.
- Disabled the startup HUD by default for normal builds;
F9still toggles the debug HUD when needed.
0.4.1
- Added closed-session safety checks on plugin start, scene load, player connect/spawn, and early gameplay frames.
- Destroyed or disabled stray DrawableSuits third-person/preview cameras, paint proxies, and brush markers whenever the editor is closed.
- Restored closed-editor cursor/input/renderer state and added
SessionSafetyCheckdiagnostics for active cameras and local renderer materials. - Stopped applying DrawableSuits runtime materials to the local first-person arms/body outside the editor by default.
- Added
ApplyLocalFirstPersonArms, disabled by default and documented as experimental. - Hardened third-person editor lifetime so the editor camera is created only during open and remains disabled until setup succeeds.
- Added a one-time diagnostic warning when the active BepInEx log shows repeated external
JetpackWarningPlayerControllerB.LateUpdatenull-reference errors.
0.4.0
- Replaced the UV texture-preview workflow as the default editor with an in-world third-person paint mode.
- Added a third-person editor camera around the local player and force-shows the local suit renderer while editing.
- Added a hidden baked
MeshColliderpaint proxy fromPlayerControllerB.thisPlayerModeland raycasts from the editor camera to paint/erase/place decals on suit UV coordinates. - Added a surface brush marker and third-person orbit/zoom controls for mouse and controller.
- Kept the UV texture preview as
Use UV Fallbackand addedStartInUvFallbackModeplusThirdPersonCameraDistanceconfig entries. - Replaced fragile ScrollRect/layout decal and save lists with deterministic anchored row buttons and page controls.
- Broadened gameplay input suppression aliases for scan, item use, and inventory switching while the editor is open.
- Updated diagnostics for world camera setup, renderer visibility, paint proxy baking, raycast hits, UV/pixel paint data, and list row creation.
0.3.6
- Added PaintAttempt/PaintApplied diagnostics for the texture preview paint path, including pointer source, UV, pixel coordinate, active tool, brush size, opacity, and decal state.
- Prevented Decal mode from silently no-oping when no decal is selected; the editor now keeps Paint active and shows a clear status message.
- Added a brush indicator over the texture preview so small brush sizes are easier to see.
- Disabled and restored known global Lethal Company gameplay actions while the editor is open, including scan, item use, inventory switching, crouch, utility slot, and emote actions where present.
- Added guarded optional Harmony blocks for leaked PlayerControllerB gameplay callbacks so missing method names do not break startup.
0.3.5
- Replaced the camera/RenderTexture model preview as the default editor view with a deterministic live suit texture preview.
- Changed paint, erase, and decal placement to map the mouse/controller cursor directly to preview texture coordinates, avoiding the black 3D viewport failure path.
- Added
EnableExperimentalModelPreview, disabled by default, for the old 3D preview diagnostic path. - Added black RenderTexture readback detection that falls back to the texture preview when experimental model rendering produces an empty frame.
- Improved preview diagnostics with active preview mode, editable texture details, UI texture assignment, and pointer-to-texture coordinates.
0.3.4
- Delayed pause-menu editor opening until after
QuickMenuManager.CloseQuickMenu()has had a frame to release cursor/UI state. - Reapplied editor cursor unlock while open and logged cursor lock recovery when the game recaptures it.
- Made mouse the default editor pointer even when a controller is connected; controller virtual cursor only takes over while actively used.
- Avoided preview layer 31 and rebuilt preview rendering around a pivoted, centered mesh with a RenderTexture-targeted camera.
- Kept the preview camera enabled while it targets the RenderTexture and rendered the preview every frame.
- Added pointer-source, mouse position, gamepad stick, cursor-lock, and preview camera diagnostics.
0.3.3
- Isolated the preview rig from the gameplay world by normalizing the baked suit mesh, rendering through a disabled manual preview camera, and avoiding active world-lighting side effects.
- Added preview diagnostics for selected layer, camera enabled state, culling masks, normalized bounds, scale, and RenderTexture state.
- Added Harmony input guards that block Lethal Company jump, look, interact, and item-interact callbacks while the DrawableSuits editor is open.
- Removed gamepad
Afrom Unity UI submit and routed it through DrawableSuits' virtual-cursor raycast so it clicks only the control under the visible cursor. - Replaced Unity
Slidercontrols with DrawableSuits-owned slider controls to prevent stretched orange fill/handle blocks. - Disabled the in-game Windows file dialog import path; decals are now refreshed from
BepInEx/config/DrawableSuits/Decalsonly. - Updated troubleshooting for white-world rendering, missing preview model, controller jump, cursor offset, and import crashes.
0.3.2
- Moved the suit preview into an editor-owned camera and RenderTexture shown inside the UI, so the model is not hidden by the world camera, ship geometry, or darkness.
- Changed painting, erasing, and decals to raycast through the editor preview viewport instead of
Camera.main. - Fixed slider child rect setup so fill and handle graphics no longer stretch into large orange blocks.
- Added a DrawableSuits-owned
InputSystemUIInputModulewhile the editor is open, then restored the game's UI input modules on close. - Made the virtual cursor marker ignore UI raycasts so mouse clicks can reach buttons, sliders, and inputs.
- Disabled the local player's
PlayerActions.Movementmap while editing and restored it on close, preventing controllerAfrom jumping in the menu. - Removed the global controller
AApply shortcut;Anow submits the selected UI control only. - Added UI input, raycast, preview camera, preview viewport, and RenderTexture diagnostics.
0.3.1
- Rebuilt the editor panel with deterministic anchored Unity UI controls to fix the blue translucent panel with missing labels/buttons.
- Added detailed editor control-tree diagnostics for visible controls, text, images, and selectable state.
- Locked local player movement and look input while the editor is open, then restored the previous input state on close.
- Closed the editor automatically on full scene changes and main-menu transitions so main-menu navigation is not left captured.
- Ignored normal editor open shortcuts outside gameplay context while keeping
F10available for diagnostics. - Prevented controller submit from triggering Apply while a UI button or design-name input field is selected.
0.3.0
- Restored the usable suit editor on the stable 0.2.x runtime host.
- Replaced the diagnostic-only editor shell with a full built-in Unity UI editor canvas.
- Added live controls for suit selection, paint, erase, decals, brush size, opacity, RGB color, decal scale/rotation, undo, redo, reset, apply, save, load, refresh, import, and close.
- Re-enabled real-time preview painting, erase, decal placement, save/load, and apply flows.
- Added explicit UI selectable navigation and kept controller virtual-cursor painting support.
- Kept diagnostics/status text visible when suit, player model, camera, or preview dependencies are missing.
0.2.1
- Replaced active editor/runtime keyboard and mouse polling with Unity Input System reads for Lethal Company v81.
- Stopped repeated legacy
UnityEngine.Inputexceptions when the game is configured for Input System only. - Kept a one-time guarded legacy fallback for unusual cases where no Input System keyboard is available.
- Cleaned up the diagnostic editor shell so the log path uses the readable config-relative path and panel text has more room.
- Updated troubleshooting notes for the Input System-only runtime path.
0.2.0
- Rebuilt runtime lifetime around the stable BepInEx plugin host instead of a separate early runtime object.
- Added
EnsureRuntimeReady()recreation for registry, sync, editor, and runtime host components. - Centralized
F8,F10, and controller open-chord polling inDrawableSuitsRuntimeHost. - Changed
F10to open-only emergency behavior so it cannot immediately close the editor. - Replaced the debug HUD with a runtime-host-owned bootstrap HUD using built-in Unity UI/Text and
OnGUI. - Simplified the editor to a reliable diagnostic shell while painting/decal/save/load controls are restored after runtime stability is confirmed.
- Hardened Harmony patch and pause-menu button paths with try/catch diagnostics and runtime recreation before open requests.
- Added Gale
BepInEx/LogOutput.logtroubleshooting notes.
0.1.5
- Added an independent lightweight debug HUD that appears briefly on startup and can be toggled with
F9. - Added a second forced
F10emergency-open path outside the editor controller so input/editor failures are easier to separate. - Logged debug HUD state, active scene, quick-menu state, editor canvas state, EventSystem, camera, and diagnostics log path.
- Documented how to tell the difference between "plugin is not loading" and "editor canvas is not opening."
0.1.4
- Added deep diagnostics to BepInEx logs and
BepInEx/config/DrawableSuits/Logs/diagnostics.log. - Made the editor overlay open as a diagnostic shell even when suit, player model, camera, or preview detection is incomplete.
- Added visible editor diagnostics for selected suit id, suit count, local player, player model, camera, and preview collider state.
- Changed pause-menu opening to close the quick menu first, then open DrawableSuits on the next frame with detailed click and row-placement logging.
- Added
F10emergency diagnostics overlay shortcut. - Added a fallback Unity
Textdiagnostics canvas if TMP editor canvas construction fails.
0.1.3
- Replaced the drawing menu renderer with a Unity UI overlay canvas.
- Prevented cursor-only failed opens by making editor opening report success or an explicit failure reason.
- Added EventSystem fallback creation for the DrawableSuits overlay when the game scene does not expose one.
- Updated README troubleshooting for cursor-only editor failures.
0.1.2
- Fixed the pause-menu
DrawableSuitsbutton overlapping Resume and other menu rows. - Added explicit controller navigation for the injected pause-menu button.
- Improved
F8andView/Back + Yfallback shortcut reliability through Unity Input System polling. - Added clearer warnings when the editor cannot open because a player model or editable suit is unavailable.
- Updated README troubleshooting for pause-menu placement and player-model load timing.
0.1.1
- Added a
DrawableSuitsbutton to the in-game pause menu. - Improved editor opening reliability for keyboard and controller users.
- Kept
F8andView/Back + Yas fallback editor shortcuts. - Updated README documentation for the pause-menu opening flow.
0.1.0
- Initial DrawableSuits implementation.
- Added BepInEx plugin scaffold with GUID
com.toxcgang.drawablesuits. - Added in-game suit editor with keyboard, mouse, and controller controls.
- Added 3D mesh UV painting, erase, undo, redo, reset, and decal placement.
- Added save/load support using JSON metadata and PNG textures.
- Added decal import from the DrawableSuits decal folder and optional Windows file dialog.
- Added apply/save multiplayer sync using Unity Netcode named messages.
- Added vanilla and modded suit material reapplication patches.
- Added Thunderstore manifest metadata.