DrawableSuits is a Lethal Company v81 BepInEx mod that lets players draw on suits in-game, place image decals, save and load designs, and apply edited textures to vanilla or modded suits.
- Default third-person paint editor: opening DrawableSuits switches to an editor camera around the local player so you can paint directly on the visible suit.
- Imperium-inspired terminal overlay with red/dark panels, generated asset-backed Paint, Erase, Fill, Decal, Text, Sticker, Eyedropper, and Mirror icon buttons, brush shape selector, brush/fill sliders, a hue/SV color picker, persistent recent color swatches, decal/text/sticker controls, design name, Decals/Stickers/Saved Designs menus, share-code import/export, Undo, Redo, a selectable labeled undo history panel, Reset, Apply, Save, and Close.
- The editor always edits the local player's currently worn suit. Manual cross-suit selection is not available in the editor.
- Fill Bucket flood-fills contiguous matching texture regions under the cursor using the current brush color, opacity, and Fill Tolerance slider.
- Brush shapes for Paint and Erase: Circle, Square, Pixel, Spray Paint, Soft Airbrush, and Noise/Scatter.
- Mirror painting duplicates Paint, Erase, Fill, Decal, Text, and Sticker edits onto the opposite suit surface using the editor's baked avatar mesh, without adding keyboard or controller shortcuts.
- Decal placement preview: Decal mode shows a translucent live preview before stamping, then places one projected decal per click or right-trigger press in third-person mode.
- Text stamping: Text mode previews typed single-line text on the suit as a transparent alpha-mask stamp, then bakes it into the texture once per click or right-trigger press. In third-person mode, text is projected onto the visible suit surface instead of stamped as a flat UV rectangle.
- Sticker stamping: Sticker mode previews built-in transparent shape masks such as Star, Heart, Arrow, Ring, and Shield, then bakes one tinted sticker into the suit texture per click or right-trigger press.
- Pause-menu entry point: use the
DrawableSuitsbutton below Resume. - Fallback shortcuts:
F8on keyboard orView/Back + Yon controller. - Emergency open shortcut:
F10, which opens the editor and does not toggle it closed. - Controller support: left stick moves the editor cursor,
Aclicks exactly the UI control under the cursor, right trigger paints only, right stick/bumpers orbit the camera, D-pad up/down zooms,Ycycles tools,Xundoes, and Start saves. - Direct surface painting: the editor bakes a hidden mesh collider from the local player model and paints by raycasting from the third-person camera to suit UV coordinates.
- Always-visible UV texture panel: while third-person editing is active, the right-column texture panel stays visible and editable without toggling views. Texture-only fallback is still available for diagnostics or third-person setup failures.
- PNG/JPG decals from
BepInEx/config/DrawableSuits/Decals. The Decals menuAdd Decalbutton launches an external Windows image picker process, copies the selected PNG/JPG/JPEG into the Decals folder, refreshes the rows, and loads the imported decal. - Reusable saved designs stored as JSON metadata plus PNG texture files.
- Compact lossless
DSUIT2:design codes for copy/paste import and export between profiles or players, with legacyDSUIT1:import compatibility. - Apply/save multiplayer sync for other players who also have DrawableSuits installed, keyed per player so two players wearing the same suit can have different edits.
- Vanilla and modded suit support as long as the suit exposes a normal suit material and texture.
- Install BepInExPack for Lethal Company.
- Build this project with
dotnet build -c Release. - Copy
dist/DrawableSuits/BepInEx/plugins/DrawableSuits/DrawableSuits.dllinto your mod profile, or package thedist/DrawableSuitsfolder for Thunderstore.
Keyboard and mouse:
- Pause menu
DrawableSuits: primary open path. F8: toggle editor.F10: emergency open.- Left mouse: paint/erase continuously; in Fill mode, fill once per press; in Decal, Text, or Sticker mode, stamp one preview at the cursor location.
- Brush Shape: choose Circle, Square, Pixel, Spray Paint, Soft Airbrush, or Noise/Scatter from the Brush dropdown. Pixel ignores the brush size slider and edits one texture pixel.
- Tool icons: Paint, Erase, Fill, Decal, Text, Sticker, Eyedropper, and Mirror are selected with compact red icon buttons. The active tool label names the current icon selection, and the icons are embedded generated PNG masks tinted by the terminal UI.
- Recent Colors: click a recent swatch below the color picker to restore that brush color. Colors are added only after Paint, Fill, Text, or Sticker successfully writes onto the suit.
- Fill: click the
FillUI button, adjust Fill Tolerance if needed, then left-click a contiguous color region on the suit. - Text: click the
TextUI button, type up to 64 characters, then left-click the suit to stamp it. Text uses the current brush color and opacity. - Decal: click the
DecalUI button, open theDecalsmenu to choose a decal, then left-click the suit to stamp it. - Sticker: click the
StickerUI button, open theStickersmenu to choose a built-in shape, then left-click the suit to stamp it. Stickers use the current brush color and opacity. - Eyedropper: click the
EyedropperUI button, then left-click the suit to sample that texture color. It returns to the previous tool after one successful sample. - Mirror: click the
MirrorUI button to duplicate paint, erase, fill, decal stamps, text stamps, and sticker stamps onto the opposite suit surface. - Export Code / Import Code: use the design code panel to copy the current editable texture as a compact
DSUIT2:code or paste a sharedDSUIT2:or legacyDSUIT1:code into the current suit. - Saved Designs: open the
Designsmenu to select and load saved designs into the current suit. - Undo History: click a history row to select it, then press
Undo Selectedto undo only that labeled action where possible. Use Undo/Redo to step one action at a time. - UV texture panel: move the cursor over the right-column texture panel to paint, erase, fill, stamp decals/text/stickers, or sample colors directly on the UV layout while the third-person view remains active.
- Right mouse: orbit the third-person editor camera.
- Mouse wheel: zoom the third-person camera.
- Ctrl + mouse wheel: change brush size.
- Escape or Close: close the editor.
Controller:
View/Back + Y: open or close.- Left stick: move the editor cursor.
A: click the button, field, slider, or color picker region directly under the cursor.- Tool icons: move the virtual cursor over a red icon button and press
A; the active tool label confirms the selected tool. - Text: move the virtual cursor over the
TextUI button and pressA, type text with the UI field, then aim at the suit and press right trigger once to stamp it. - Decal: move the virtual cursor over the
DecalUI button and pressA, openDecals, choose a decal row withA, then aim at the suit and press right trigger once to stamp it. - Sticker: move the virtual cursor over the
StickerUI button and pressA, openStickers, choose a built-in sticker shape withA, then aim at the suit and press right trigger once to stamp it. - Fill: move the virtual cursor over the
FillUI button and pressA, adjust Fill Tolerance if needed, then aim at a matching color region and press right trigger once. - Brush Shape: move the virtual cursor over the Brush Shape dropdown and press
A, then pick a shape withA. - Recent Colors: move the virtual cursor over a recent color swatch and press
Ato restore that brush color. - Eyedropper: move the virtual cursor over the
EyedropperUI button, pressA, then aim at the suit and press right trigger once to sample a color. It returns to the previous tool after one successful sample. - Mirror: move the virtual cursor over the
MirrorUI button and pressA; there is no controller shortcut for this modifier. - Export Code / Import Code: use
Aon the design code UI buttons. There are no shortcuts for import/export. - Saved Designs: move the virtual cursor over
Designs, pressA, select a saved design row, then pressLoad Selected. - Undo History: move the virtual cursor over a history row and press
Ato select it, then pressAonUndo Selectedto undo only that action where possible. UseXor the Undo/Redo buttons for one-step history. - Right trigger: paint/erase continuously; in Fill mode, fill once per press; in Decal, Text, or Sticker mode, stamp one preview at the cursor location.
- Right stick or bumpers: orbit the third-person editor camera.
- D-pad up/down: zoom the third-person editor camera.
Y: cycle Paint/Erase/Decal. Fill, Text, Sticker, Eyedropper, Mirror, and Brush Shape are UI-only and are not part of this shortcut.X: undo.- Start: save.
DrawableSuits creates these folders after launch:
BepInEx/config/DrawableSuits/Savesstores.jsondesign metadata.BepInEx/config/DrawableSuits/Texturesstores saved design.pngtextures.BepInEx/config/DrawableSuits/Decalsstores user decal images.BepInEx/config/DrawableSuits/Logsstores the diagnostics log.
Use the in-game Decals menu Add Decal button to copy a .png, .jpg, or .jpeg into Decals. The picker runs in a separate PowerShell process so the game never calls the Windows common dialog in-process. Manual folder placement still works: put image files in Decals, open the Decals menu, and press Refresh.
Edited suits update locally while painting. Other mod users receive your player-specific texture only when you press Apply or Save. Texture payloads are chunked through Unity Netcode custom messages with the owner client ID and validated with a hash before being applied.
Players without DrawableSuits can still join normally, but they will see the original suit textures.
DrawableSuits no longer replaces every rack/player using the same base suit when one player edits their suit. Saved designs are reusable, but active in-session edits are applied to the selected player only.
Share codes embed a PNG copy of the current editable texture plus metadata. Importing a code loads it into the local player's current suit editor texture only. It creates one undo entry, does not auto-save, and does not sync to multiplayer until you press Apply or Save.
New exports use the shorter lossless DSUIT2: format. Older DSUIT1: codes still import normally, but newly copied codes default to DSUIT2:.
DrawableSuits works with modded suits by detecting unlockables that expose a suitMaterial. Saved designs are reusable on any suit, but loading a design onto a suit with a different UV layout can stretch or misplace drawings and decals.
DrawableSuits is not compatible with ModelReplacementAPI. Replacement models can use separate runtime renderers and materials that DrawableSuits cannot safely map to the current suit texture, so the third-person editor may show incorrect geometry, duplicate helmets, or an uneditable model. If you use ModelReplacementAPI, use the UV texture panel where possible or disable the replacement while editing.
The BepInEx config file controls:
- Open editor key.
- Emergency diagnostics overlay key.
- Debug HUD toggle key.
- Startup diagnostics HUD enable/disable and display duration.
- Controller cursor speed.
- Max editable texture size.
- Undo history size.
- Multiplayer sync enable/disable.
- Max sync payload size and chunk size.
StartInUvFallbackMode, disabled by default, opens directly into texture-only UV panel mode for diagnostics.ThirdPersonCameraDistance, the default third-person editor camera distance.RecentColors, a comma-separated list of up to 12 recent#RRGGBBbrush colors populated only after Paint, Fill, Text, or Sticker writes to the suit.ApplyLocalFirstPersonArms, disabled by default, is experimental and allows edited materials on local first-person arms/body outside the editor.AutoDisableBrokenJetpackWarningLateUpdatePatch, enabled by default, disables only the broken JetpackWarningPlayerControllerB.LateUpdatepostfix after repeated null-reference errors are detected.EnableExperimentalModelPreview, disabled by default, keeps the old RenderTexture model preview as diagnostics only.EnableOsFileDialogis a legacy ignored setting. The Decals menuAdd Decalbutton uses an external Windows picker process instead.
DrawableSuits writes detailed startup, pause-menu, input, editor, camera, collider, raycast, suit-detection, list-row, and paint logs to BepInEx/config/DrawableSuits/Logs/diagnostics.log.
When testing with Gale, also search BepInEx/LogOutput.log in the active Gale profile for DrawableSuits.
Expected 0.5.50 behavior:
- Opening the editor shows an Imperium-inspired red/dark terminal overlay and a third-person camera view of the local player.
- Paint, Erase, Fill, Decal, Text, Sticker, Eyedropper, and Mirror use embedded generated PNG icon masks instead of large text tool buttons or procedural mesh glyphs. The active tool label names the current icon, and Mirror remains a UI-only modifier.
- Paint, Fill, and Eyedropper icons should read clearly as a paint brush, paint bucket, and eyedropper at the in-game toolbar size.
- The editor edits only the local player's currently worn suit. The old Previous, Use Current, and Next suit-selection buttons are not present.
- The diagnostics text should show
Preview mode: WorldThirdPersonwhen the default path succeeds. - The UV texture panel is visible at the same time as the third-person suit and can be edited directly by moving the cursor over it.
- The visible editor model is
DrawableSuitsWorldAvatarProxy, a baked suit/body proxy on an isolated layer, not the live first-person local rig. First-person helmet/viewmodel renderers are hidden during editing and restored on close. - Normal session startup should log
SessionSafetyCheckwithEditorOpen=False, no active DrawableSuits cameras,Camera.mainstate, local player state, prompt context, andjetpackWarningGuardstatus. - If third-person setup fails, the editor falls back to texture-only
TextureFallbackand logs the reason. - The UV texture panel shows the editable texture in a reserved right-column preview slot below the placement controls. It should not cover the color picker, brush controls, tools, design controls, or modal selectors.
- Decals, Stickers, and saved designs open in separate modal menus with larger selectable rows/buttons.
- Controller right trigger paints only. Camera zoom uses mouse wheel or controller D-pad up/down.
- Active edited textures are per player/client, not global per suit type.
- The color changer is a compact side-by-side hue ring and saturation/value square with a swatch and editable
#RRGGBBhex field. - Recent Colors swatches appear below the color picker. Dragging the picker, typing hex, or using Eyedropper does not add a swatch until that color is placed by Paint, Fill, Text, or Sticker.
- Undo History shows the newest undoable action labels first, including Brush stroke, Erase, Decal placed, Text placed, Sticker placed, Color fill, Reset, Load design, and Import code. Clicking a row only selects it;
Undo Selectedremoves only that selected action where the snapshot diff can be isolated, preserves newer overlapping pixels, and keeps redo history available. Clear Historyclears undo and redo history without changing the current suit texture.- The Saved Designs and Decals menus include two-step
Delete Selectedbuttons. Deletes are permanent and only remove the selected save.jsonor selected decal image file from the DrawableSuits folder. - Color picker handles are tied to the same coordinate conversion used for mouse/controller input, so the visible handle positions should match the selected hue, saturation, value, and typed hex color.
- Reset and Save no longer rebuild list hitboxes during the click; decal rows only change selection when their rows are clicked directly, and saved-design rows live in the separate Designs menu.
- Third-person camera yaw, pitch, and distance are preserved when loading a design or importing a design code while the editor is open.
- Controller
Adoes not activate UI immediately after opening; move the left stick once to arm the virtual cursor, thenAclicks the control under the cursor. - Normal buttons should not stay highlighted after unrelated clicks; only selected tools, decals, and saved designs keep orange selection styling.
- The decal section has a
Decalsmenu button. Its modalAdd Decalbutton starts an external Windows picker process, waits asynchronously for a selected PNG/JPG/JPEG, validates and copies it into the Decals folder, refreshes decal rows, selects the imported image, and shows only a short status line.Refreshstill reloads decal rows after manual folder changes. - In Decal or Sticker mode over the third-person suit, the projected preview hides while the cursor is moving and appears after the cursor has been still briefly. Click/RT still stamps immediately even before the preview appears.
- Decal placement is single-shot: holding left mouse or RT places one decal until the input is released and pressed again.
- Third-person Decal preview and stamping project onto the visible suit surface and fill between valid projected samples, so decals avoid both UV-island wrapping and small suit-background cracks on curved geometry. The UV panel keeps direct flat UV decal stamping.
- The editor cursor is dynamic and rendered as a top-level non-raycastable graphic inside the visible editor canvas: Paint and Erase show a hollow brush ring sized to the current editable target, while UI hover, invalid targets, Decal, Text, Sticker, Eyedropper, and normal navigation show a small white dot.
- The old filled UV brush indicator and world-space sphere marker are kept hidden, so there should not be a colored square or blob following the cursor.
- In Text mode, the text input uses Unity's built-in Arial font, accepts one line up to 64 characters, and shows
Previewing text. Click/RT to stamp.when the cursor is over a valid suit target. - Text stamps are generated as transparent alpha-mask textures and tinted with the current brush color/opacity, so they should not stamp a black rectangle behind the letters.
- In third-person mode, Text stamps project onto the visible suit surface and skip glyph pixels that fall off the suit instead of wrapping them through unrelated UV islands.
- Third-person Text should read left-to-right from the editor camera. Mirrored Text should only appear when the UI-only
Mirrorbutton is enabled. - The UV panel keeps direct flat UV Text stamping for texture-layout editing.
- Text is baked into the suit texture after stamping. It is not an editable layer after placement.
- In Sticker mode, the
Stickersmenu offers Circle, Square, Triangle, Diamond, Star, Heart, Arrow, Lightning Bolt, Plus/Cross, Ring, Crescent, and Shield. Stickers use the current brush color and opacity, preview live on the suit or UV panel, stamp once per press, and are baked into the texture. - The
Fillbutton is a UI-only tool. It flood-fills the contiguous same-color region under the cursor using the current brush color and opacity. - Fill is single-shot: holding left mouse or controller RT fills once until the input is released and pressed again.
- The Fill Tolerance slider appears when Fill is active. Lower tolerance fills tighter matching regions; higher tolerance accepts more color variation.
Export Codecopies a compact losslessDSUIT2:code to the clipboard and fills the design code field.Import Codevalidates a pastedDSUIT2:or legacyDSUIT1:code and loads it into the current suit without auto-saving, broadcasting, or resetting the third-person camera.- The UV panel shows a non-interactive rotated decal preview over the texture panel.
- The UV panel can zoom from
1xto8xwhile the cursor is over it. Mouse wheel or controller D-pad up/down zooms around the cursor, and right-mouse drag or controller right stick pans the zoomed view. - Controller right stick is contextual: it pans the UV panel while the cursor is over the panel, and still orbits the third-person camera when the cursor is outside the panel.
- UV-panel Paint, Erase, Fill, Decal, Text, Sticker, Eyedropper, Mirror previews, and the brush cursor all use the currently visible zoomed texture view.
- The
Mirrorbutton is a UI-only modifier. When it is orange, paint, erase, fill, decal stamps, text stamps, and sticker stamps use a surface-map mirror target on the opposite side of the baked suit mesh in one undo action. - Mirrored decal previews show both the primary and mirrored decal. The mirrored decal is horizontally flipped and uses inverse rotation.
- The UV panel also uses the mesh mirror map when the clicked UV maps back to a suit triangle. If no mirror target is available, DrawableSuits applies the primary edit only and shows a short status.
- The
Eyedropperbutton is a UI-only one-shot tool. It samples the editable suit texture at the cursor hit point, updates the swatch, color picker, hex field, and brush color, then returns to the previous Paint, Erase, or Decal tool. - Eyedropper does not create undo entries and Mirror does not affect sampling.
- The part picker is removed. Third-person mode always shows the full avatar proxy, and the UV panel always shows the full editable suit texture.
- Paint and Erase in third-person mode project onto the visible suit surface and fill between valid projected samples, so brush strokes avoid UV-island cutoffs while still guarding against unrelated UV island bleeding. The UV panel keeps direct flat UV brush painting.
- Brush Shape changes Paint and Erase only. Circle keeps the classic brush, Square paints a square footprint, Pixel edits one texture pixel, Spray Paint and Noise/Scatter use deterministic sparse coverage per stroke, and Soft Airbrush uses a softer circular falloff.
- Paint, erase, decal preview, and decal stamping operate on the full editable texture.
- Active editor diagnostics report full proxy mesh/collider state through
WorldAvatarProxy updated;PartClassifierBuiltshould not appear during normal editor use.
Troubleshooting:
- If no decal preview appears, confirm a decal row is selected and Decal tool is active, then check
DecalPreviewUpdatedorDecalPreviewHiddendiagnostics. - If a design or decal delete button does nothing on the first click, that is the confirmation step. Press
Confirm Deleteto permanently remove the selected file, or change selection/refresh/close the modal to cancel. - If Decal or Sticker preview movement feels laggy, confirm the installed package is 0.5.45 or newer and check
PlacementPreviewWaitingForIdle,PlacementPreviewHiddenWhileMoving,PlacementPreviewIdleRebuilt,DecalPreviewUpdated, orStickerPreviewUpdateddiagnostics. Third-person placement previews now wait until the cursor stops moving before rebuilding, while final stamps still use the full-quality projection path. - If decals stamp repeatedly while holding input, confirm the installed package is 0.4.8 or newer and check for
DecalStampCommittedentries; there should be one per press/release cycle. - If Mirror does not appear to find the opposite side, check
MirrorSurfaceMap builtandMirrorSurfaceTargetdiagnostics. Asymmetric or unusual modded meshes may not have a reliable opposite surface for every hit. - If entering a session starts on a black screen before opening DrawableSuits, check
SessionSafetyChecklines. They listCamera.main, active cameras, camera target textures, local player flags, prompt context such as grab/hover fields, local renderer materials, and any repaired DrawableSuits objects. DrawableSuits should report no active DrawableSuits cameras whileEditorOpen=False. - If the black screen shows
Grab: [E]andSessionSafetyCheckreportsCamera.main=null, inspectLogOutput.logfor repeatedJetpackWarningPlayerControllerB.LateUpdateNullReferenceException. By default, DrawableSuits disables onlyJetpackWarning.Patches.PlayerControllerB_LateUpdate_Postfixafter repeated failures and logs the unpatch result indiagnostics.log. SetAutoDisableBrokenJetpackWarningLateUpdatePatch=falseto turn this compatibility guard off. - If third person shows first-person arms, a giant helmet, held items, or another partial rig, check
World renderer candidate,Hidden nearby first-person overlay renderer,World editor visible renderer candidate, andWorldAvatarProxy updatedlines. The selected renderer should be a body/suit renderer and the proxy should use only the player-specific DrawableSuits material for suit-compatible submeshes. - If you use ModelReplacementAPI and the editor shows the wrong model, duplicate helmets, or an uneditable suit, this is expected. DrawableSuits is not compatible with ModelReplacementAPI; use the UV panel where possible or disable the replacement while editing.
- If action buttons such as Reset, Save, or Load also select decal/save rows, confirm the installed package is 0.4.7 or newer. Lists now use stable row pools and log
ListRowsUpdatedinstead of rebuilding/destroying row buttons during normal UI refresh. - If controller
Aclicks the wrong UI item, confirm the installed package is 0.4.7 or newer, move the left stick before the firstApress, then checkVirtual cursor A pressandVirtual cursor A releasediagnostics. They should show the same resolved button or control that is visually under the cursor. - If button highlights stick around, confirm the installed package is 0.4.7 or newer. Normal button selected colors are neutral.
- If the color picker handles do not line up with the selected color, check
ColorPickerInputdiagnostics for hue, saturation, value, local pointer coordinates, and final handle positions. - If loading a design or importing a design code resets the third-person camera, confirm the installed package is 0.4.7 or newer and check for
World camera state preserveddiagnostics. - If the color picker does not update paint color, check the swatch, editable hex field, and
DrawableColorPickerBuiltdiagnostics. Hex input accepts#RRGGBBorRRGGBB. - If right trigger zooms the third-person camera, confirm the installed package is 0.4.4 or newer. In 0.4.4, right trigger is paint-only and D-pad up/down controls controller zoom.
- If the UV panel or texture-only fallback shows a second colored cursor, confirm the installed package is 0.4.4 or newer. The old filled brush indicator is disabled because it looked like another cursor.
- If editing one player changes every other player wearing the same skin, confirm the installed package is 0.4.4 or newer. Active edits now sync with owner client IDs and do not mutate suit rack/global suit materials.
- If you cannot see the local suit in third person, check
diagnostics.logforWorldThirdPerson setup,WorldAvatarProxy updated, andWorldEditorCamera updated. - If painting misses the suit, check
PaintAttemptentries forworld paint input, UV coordinates, and whether the cursor is over the editor panel. - If Eyedropper does not sample a color, check
EyedropperMissentries for whether the cursor was over the visible suit or UV panel. A successful sample logsEyedropperSampledwith UV, pixel, sampled hex color, and return tool. - If Text does not preview or stamp, check that the text field is not empty, then search
diagnostics.logforTextStampRendered,TextPreviewUpdated,TextPreviewHidden,TextStampCommitted, orTextStampSkipped. - If Sticker does not preview or stamp, confirm Sticker tool is active and a shape is selected, then search
diagnostics.logforStickerShapeSelected,StickerPreviewUpdated,StickerPreviewHidden,StickerStampCommitted, orStickerStampSkipped. - If Text stamps with a black rectangle, confirm the installed package is 0.5.10 or newer.
TextStampRenderedshould reportalphaMode=luminance, glyph bounds, and a trimmed final texture size. - If third-person Text drops side letters, confirm the installed package is 0.5.11 or newer and check
TextSurfacePreviewUpdated,TextSurfaceStampCommitted, orTextSurfaceStampSkippedfor written and skipped glyph-pixel counts. - If third-person Text appears backwards, confirm the installed package is 0.5.12 or newer and check
TextProjectionFrameBuiltfor camera-right alignment and sample order diagnostics. - If decals rotate unexpectedly or get clipped on third-person suit seams, confirm the installed package is 0.5.14 or newer and check
DecalSurfacePreviewUpdated,DecalSurfaceStampCommitted, orDecalSurfaceStampSkippeddiagnostics for projected written/skipped pixels. - If third-person decals show small suit-background cracks through the decal, confirm the installed package is 0.5.15 or newer and check the same decal surface diagnostics for sample, hit, rasterized-cell, seam-skip, off-suit, and written-pixel counts. High seam-skip counts mean DrawableSuits is intentionally avoiding UV island bleeding.
- If Paint or Erase strokes cut off on third-person suit seams, confirm the installed package is 0.5.22 or newer and check
BrushSurfaceStrokeApplied,BrushSurfaceStrokeSkipped, andBrushSurfaceProjectionWarningdiagnostics for sample, hit, rasterized-cell, seam-skip, off-suit, and written-pixel counts. High seam-skip counts mean DrawableSuits is intentionally avoiding UV island bleeding. - If Fill affects too much or too little of the suit, adjust Fill Tolerance and check
FillBucketApplieddiagnostics for seed color, tolerance, checked pixel count, matched pixels, written pixels, and mirror target. Fill is texture-contiguous, so separated UV islands may require separate fills. - If the UV panel covers the color picker or other controls, confirm the installed package is 0.5.25 or newer and check
TexturePanel[...]diagnostics for the preview viewport rect, sibling index, and anchored position. - If UV-panel edits land in the wrong place while zoomed, confirm the installed package is 0.5.49 or newer and check
UvPanelViewChanged,TexturePanel[...], andUiInputDiagnosticsforuvPanelZoom,uvRect, andpreviewUv. - If controller right stick does not pan the zoomed UV panel, confirm the installed package is 0.5.50 or newer, place the cursor over the UV panel, and check
UvPanelViewChangedforsource=GamepadRightStickPan. - If the cursor is missing, confirm the installed package is 0.5.21 or newer and check
CanvasCursorBuilt,CanvasCursorUpdated, orCanvasCursorHiddendiagnostics. The editor now draws the cursor directly inside the same UGUI canvas as the visible editor controls. - If the cursor is still a filled square or colored world blob, confirm the installed package is 0.5.21 or newer and check
CanvasCursorUpdateddiagnostics. Paint and Erase should usemode=BrushRing; Decal, Text, Eyedropper, UI hover, and invalid targets should usemode=Dot. - If the Paint or Erase ring size looks wrong, check
CanvasCursorUpdatedfortarget=WorldThirdPerson,target=TexturePanel, ortarget=TextureFallback, the computed diameter, hit triangle, UV, canvas-local position, and any fallback reason. - If the controller cursor does not line up with the visible cursor, check
CanvasCursorUpdatedand the virtual cursor diagnostics. The visible cursor follows DrawableSuits' virtual cursor directly instead of warping the OS mouse cursor. - If importing a design code resets the third-person camera, confirm the installed package is 0.5.14 or newer and check
DesignCodeImportedplusWorld camera state preserveddiagnostics. - If a design code does not import, confirm it starts with
DSUIT2:orDSUIT1:and checkDesignCodeImportFaileddiagnostics for prefix, Base64Url, decompression, binary/JSON payload, PNG, or texture-size validation errors. DrawableSuits never logs the full code. - If decals or saved designs do not appear, check
RefreshFileLists completeandListRowsUpdatedentries. - If scan, inventory scroll, or item use still happen while the editor is open, check for
Global gameplay actions lockedandBlocked PlayerControllerBentries. - If keyboard or controller shortcuts do not open the editor, use the pause-menu
DrawableSuitsbutton. - If the mouse cannot move after opening from pause, check cursor unlock and
pointerSource=Mousediagnostics. - If
Add Decalis canceled or unavailable, manually place image files inBepInEx/config/DrawableSuits/Decals, then openDecalsand pressRefresh. CheckDecalImportPickerStarted,DecalImportPickerCompleted,DecalImportPickerCanceled,DecalImportPickerFailed,DecalImported, orDecalImportFaileddiagnostics for picker/import details. - If you quit to the main menu while the editor is open, DrawableSuits closes the editor during the scene change so main-menu navigation is restored.
- Lethal Company v81 uses Unity's Input System path; repeated
UnityEngine.Inputexceptions should not appear from DrawableSuits.
- Third-person Paint, Erase, Decal, Text, and Sticker project onto the visible suit surface before resolving to texture UVs. Unusual modded suit UV layouts may still make edits appear somewhere unexpected, and seam guards may skip ambiguous pixels instead of bleeding across unrelated islands.
- Mirror mode uses a mesh surface map, so unusual or asymmetric meshes may skip the mirrored edit when no reliable opposite surface can be found.
- Text stamps use Unity's built-in Arial font only in this version and are baked as tinted transparent alpha masks. Third-person Text projection can still skip letters that physically land off the visible suit surface.
- Cross-suit loading depends on UV compatibility.
- Share codes can still be long because they embed PNG image data.
DSUIT2:removes the older inner Base64 PNG-in-JSON overhead, but it is still lossless and does not downscale or reduce quality. - Very large decal images are resized to the configured maximum texture size.
- Multiplayer sync is designed for applied designs, not every brush stroke.
- Texture-only fallback remains available for debugging and edge cases.