Adjustable Chat
Resize and reposition your chat panel — it finally obeys you!
模組介紹 作者原文
Outward Adjustable Chat
Resize and reposition your chat panel — it finally obeys you!
Overview
Outward Adjustable Chat gives you complete control over your in-game
chat panel. Stuck in the corner with no way to move it? Forced to use
a tiny chat window that ruins your immersion? Those days are over —
now you can drag your chat anywhere on screen, resize it to fit your
needs, and your settings travel with your character across saves.
Features
- Drag to Reposition — Click and drag anywhere on non-interactive areas of the chat panel to move it wherever you want
- Resize with Style — Pull the golden handle in the bottom-right corner to resize the panel freely
- Persistent Settings — Your position and size are saved automatically with each character save
- Smart Sprite Handling — Uses Sliced image type so the panel background stays crisp and unstretched when resized
Technical Details
XML Data Storage
Chat panel settings are stored per-character in XML format. Each character maintains their own panel configuration that follows them across save/load cycles.
File Location: BepInEx/config/gymmed.Mods_Communicator/Adjust_Chat/{characterUID}/ChatPanelState.xml
Data Structure:
- DisplaySize — The size of the "Display" child element (x, y)
- PositionOffset — The screen position of the "Chat - Panel" parent element (x, y)
- BackgroundSize — The size of the background element (x, y)
Load Flow:
- Harmony patch intercepts CharacterSaveInstanceHolder.ApplyLoadedSaveToChar()
- XML file is loaded and stored as pending state
- When ChatPanel.StartInit() completes, the component's Start() method applies the saved values
- Position is applied to the parent "Chat - Panel" RectTransform, size to the child "Display" RectTransform
Save Flow:
- Harmony patch intercepts SaveInstance.Save()
- Current position is read from the "Chat - Panel" parent RectTransform
- Current size is read from the "Display" child RectTransform
- Data is serialized to XML using System.Xml.Serialization
Sprite Styling
The mod enhances the chat panel's visual quality using Unity's built-in image handling:
- Trigger: SideLoader's SL.OnSceneLoaded event calls ChatPanelStyler.ApplyToAllCharacters() for each active character
- Problem: The original sprite (tex_men_backgroundChat) stretches when the panel is resized, causing blurry/pixelated edges
- Solution: Uses UnityEngine.Sprite.Create() with custom border parameters (14px for sides, 58px for bottom) to create a styled sprite
- Result: Sets UnityEngine.UI.Image.type = Image.Type.Sliced so the corners remain sharp and borders intact during resize
- Optimization: The styled sprite is created once and cached for reuse across all characters
Drag & Resize Implementation
- Dragging: Uses Unity's native EventTrigger system (PointerDown, Drag, PointerUp events) rather than polling in Update()
- Resizing: Creates a 10x10 golden-colored handle at the bottom-right corner of the "Display" element
- Position Tracking: Position is saved from the "Chat - Panel" parent (not the child "Display") to ensure absolute screen positioning
How to set up
To manually set up, do the following
- Create the directory: Outward\BepInEx\plugins\OutwardAdjustableChat\.
- Extract the archive into any directory(recommend empty).
- Move the contents of the plugins\ directory from the archive into the BepInEx\plugins\OutwardAdjustableChat\ directory you created.
- It should look like Outward\BepInEx\plugins\OutwardAdjustableChat\OutwardAdjustableChat.dll
Launch the game.
If you liked the mod leave a star on GitHub it's free
安裝與使用 安裝:BepInEx 外掛
- 本站下載的壓縮包就是模組本體,通常是 BepInEx 外掛(解壓後得到 .dll 或外掛資料夾)。
- 建議流程:用社群模組管理器(如 r2modman)選中本遊戲後匯入該模組,管理器會自動裝好 BepInEx 前置並處理依賴。
- 手動流程:先在遊戲目錄裝好 BepInEx 載入器,再把解壓出的 .dll 或外掛資料夾放進 BepInEx/plugins/。
- 啟動遊戲,BepInEx 控制台會列印載入日誌;確認這個模組出現在日誌裡即為安裝成功。
帶「前置依賴」的模組需要一併安裝,否則不會載入。功能開關通常在遊戲內或外掛自帶的設定檔裡調整。
下面這些內容需要先安裝,否則該模組不會生效: