C .
ODE
G
AMELET
# TWPerfPatch 本模組為 `TwilightWarsLib` 的效能優化補丁。只要在專案中載入模組,優化邏輯即會自動生效,無需手動初始化。 ## 優化項目 ### 1\. GAF 動畫循環控制 (GAFMovieClip) * **自動切斷循環**:執行 `stop()` 時會同步停止 `requestAnimationFrame` 遞迴,確保動畫停止時不再消耗 CPU 運算資源。 * **重啟時間校正**:在執行 `play()` 時重置時間戳記,確保動畫從停止處精準接續播放。 * **記憶體壓力優化**:透過手動管理動畫回呼函式,大幅減少重複產生暫存資料造成的記憶體堆積。 ### 2\. 深度資源清理 (Game Destroy) * **強制遞迴清理**:覆寫 `destroy` 邏輯並預設開啟 `children: true`,確保場景銷毀時會自動連同所有子物件掃描並清理乾淨。 * **紋理引用釋放**:預設開啟 `texture: true`,在場景銷毀時主動釋放該場景佔用的圖片資源(Texture),提升系統回收記憶體的效率。 * **背景循環掃描**:在執行 `dispose()` 時進行深度掃描,確保所有層級中還在執行的動畫循環皆已關閉。 ## 注意事項 (Disclaimer) * **非官方補丁**:本模組非由 `TwilightWarsLib` 官方開發,屬於第三方效能優化。 * **使用風險**:本補丁會直接修改函式庫的原型邏輯(Prototype)。 * **副作用說明**:由於強制開啟了銷毀子物件與紋理的功能,若專案中有「跨場景共用且未重新加載」的圖片資源,可能導致顯示異常。建議載入後完整測試一次場景切換流程。 * **優化程度說明**:本補丁並非 100% 解決所有洩漏問題。目前仍有部分潛在的 `requestAnimationFrame` 調用深埋於函式庫內部難以追蹤,且部分 `GAFTexture` 仍可能存在無法被完全釋放的情況,僅能就目前已知路徑進行最大化優化。 ## Authors **[cook1470](/profile/cook1470)**
# WovenFatesPerformanceModule WovenFatesPerformanceModule 是一組為 **Woven Fates** 專案整理的演出用擴充模組,主要聚焦在三個方向: - **Dialogue**:對話框、選項、對話履歷與相關互動觸發 - **Notebook**:可建立、開關、增刪條目並支援翻頁演出的筆記本系統 - **Typing Animation**:可直接顯示於畫面,或掛載到顯示屏上的逐字動畫特效 這個模組的目標不是提供底層框架,而是補足事件表中常用的 **劇情演出能力**,讓對話、筆記、提示文字與資訊呈現能更直接地接入任務流程。 具體使用效果可以參考平生願重製版:https://woven-fates.gamelet.online/ --- **非常抱歉,匯入模組時會多出現許多未加載模組的資料夾和過多未必要資源的問題,現已解決。** **還請在更新後使用,本模組僅依賴 CgEventsExp + CgEventsLib + TwillightWarsLib。** **對於對各位的專案帶來的整理麻煩,真的十分抱歉,本人也是第一次弄模組。** **如遇到刷新任務後,逐字動畫顯示屏消失的問題,請勾選「已存在時重建」。** --- # DIALOGUE ## Action: - **建立對話框** 建立對話框 UI,初始化對話介面的版面、文字區與顯示結構,作為後續顯示台詞與操作履歷的基礎。 - **顯示對話內容** 更新對話框中的角色名稱與台詞內容,用於一般劇情推進與對話演出。 - **顯示對話選項** 顯示可供玩家選擇的對話選項視窗,支援自訂選項內容、位置、字體與外框樣式,可選擇是否等待玩家作答。 - **開啟對話履歷** 開啟對話紀錄視窗,讓玩家查看先前已顯示過的對話內容。 - **關閉對話履歷** 關閉對話紀錄視窗,回到一般對話流程。 ## Trigger: - **選中對話選項** 在玩家選中對話選項後觸發,可取得選項視窗 ID 與選中的值,方便把選項結果接回事件表邏輯。 - **滑鼠滾輪觸發** 監聽滑鼠滾輪輸入,可用於開關對話履歷、切換頁面或其他 UI 滾輪互動。 --- # NOTEBOOK ## Action: - **建立筆記本** 建立筆記本 UI 與控制器,初始化封面、頁面、目錄、條目內容、圖片區與翻頁機制。 - **開關筆記本** 控制筆記本的開啟、關閉或切換狀態,可用於劇情中隨時調出或收起筆記本介面。 - **新增筆記條目** 將新條目加入筆記本,支援標題、左右頁內容與圖片資料,適合用於調查、線索收集與資訊整理。 - **刪除筆記條目** 依照條目 ID 或索引刪除指定條目,可用於更新資料、覆蓋舊資訊或同步任務進度。 - **顯示筆記條目** 顯示指定條目內容,或切回筆記本目錄頁,並配合翻頁效果切換內容。 ## Trigger: - **筆記本事件觸發** 監聽筆記本的開啟、關閉、回到目錄與選中特定條目等事件,可直接把玩家閱讀行為接入事件表。 --- # TYPING ANIMATION ## Action: - **特效逐字動畫** 在畫面上顯示逐字出現的文字,並可搭配音效、晃動與淡出等效果,用於提示、旁白、內心獨白或特殊文字演出。 - **建立逐字動畫顯示屏** 建立可重用的逐字動畫顯示區,支援背景、行距、最大行數、堆疊方向與推動動畫設定,可讓多條逐字訊息依序堆疊顯示,而不互相重疊。
# 更好的光暈戰記事件表擴充模組(TWEventsBetterExp) 本模組延續 [**TwilightWarsEventsExp**](https://code.gamelet.com/edit/TwilightWarsEventsExp)(以下簡稱 EXP)的概念所設計,並基於 [**TwilightWarsEvents**](https://code.gamelet.com/edit/TwilightWarsEvents) 建立,用於擴充 [**光暈戰記**](https://twilightwars.gamelet.online/) 事件表功能的模組。 由於 **EXP** 過於混雜,為優化模組架構與性能,將逐步進行程式碼重構,剔除許多不必要,或與 **TwilightWarsEvents** 重疊的功能,保留真正需要的功能。 程式碼搬遷將會是一個持續性的工程,如果你有建議可以優先搬遷的功能,歡迎直接告訴我。 本模組的所有功能都放在 **光暈戰記 (BetterExp)** 目錄底下,且所有功能皆有 (BetterExp) 後綴。 ## 注意事項 即使是作用相同的功能,由於程式碼重構的關係,使用上 **EXP** 還是會和本模組有所差異,沒辦法直接將資料無痛轉移,因此你應該將其視為兩個不同的模組。 如果你是曾使用過 **EXP** 的開發者,如今想要開發新的專案,會建議不要安裝 **EXP** 而改安裝此模組。 ## 玩家社群 ### Discord - [**嘎姆討論區**](https://discord.gg/hZKQzRfPJM):於 2021/05/08 創立的非官方社群,主要用於討論嘎姆擂台的相關資訊。 ## 作者 **酷可**:[**Code.Gamelet**](/profile/114899766849308759711@google)、[**Gamelet.Online**](https://gamelet.online/user/114899766849308759711@google/board)、[**Youtube**](https://www.youtube.com/@cook1470)
# P2P檔案分享 ## TL;DR EnhServer與TURN伺服器不會記錄你傳輸之資料,擔心隱私或資安問題請自行考慮後再決定是否使用本專案。 檔案最大應為 (2GiB - 2MiB) (已測試chrome/edge、firefox),若超過建議是採用壓縮檔分包個別傳輸。 註: - Windows的GB是GiB,即1024^3 Bytes - Linux的GB是1000^3 Bytes ## 使用須知 本專案使用WebRTC傳輸資料,藉由EnhServer協助使用者交換連線資訊,以順利建立連線。 本專案無需於EnhServer註冊帳號便可直接使用。 本專案由 **[雪姬](/profile/setsuki)** 提供STUN/TURNS伺服器,最大100Mbps總中轉頻寬。 伺服器可能並不算穩定,若有問題可至 [Discord 群組](https://discord.gg/seJwuzCbWq) 提醒我修復伺服器。 (TURNS為有加密之TURN伺服器,自建預設無加密,有需要可以使用ACME Client/Certbot向Let's encrypt申請證書以啟用加密) 若想要使用自有的STUN/TURN伺服器,請參閱 [Coturn Project on Github](https://github.com/coturn/coturn) 學習如何使用。 也可以自行建立自己的EnhServer,確保流量都可受自己控制,原始碼開源於 [EnhServer-monorepo on github](https://github.com/setsuk1/EnhServer-monorepo) 上。 ## 起因 有時想臨時分享檔案,但又擔心透過雲端硬碟傳遞資料沒有隱私。 因此建立起此專案,可以不讓第三方擁有自己的資料。 雖然也可透過EnhServer提供之訊息交換功能傳遞分塊。 但一來會對EnhServer的頻寬與記憶體帶來挑戰,二來則是瀏覽器端不便對資料進行處理。 再加上會帶來一些些複雜度,於是便透過WebRTC簡化這個流程。 ## 細節 (不關心可跳過) 首先先了解何為WebRTC。 WebRTC為於網路上實現之實時通訊。 需要兩類資料以建立連線:SDP資訊(offer/answer)與ICE資訊(IP、port、etc.) 首先使用者雙方須先交換SDP資訊,此部分如同連線之鑰匙與鎖,雙方不匹配就無法成功建立連線,該部分由EnhServer中轉。 當SDP交換完成時,雙方會各自向STUN/TURN伺服器取得可使用的連線資訊(ICE Candidate)。 之後會再透過EnhServer交換ICE資訊,並嘗試建立起連線。 而取得資訊可以透過兩類協議:STUN協議、TURN協議。 前者用來產生端到端連線,沒有任何中轉,但是對網路(NAT類型)有所要求。 後者則是透過一中轉伺服器轉發流量到對方一側,對NAT類型無要求,連線成功率提高許多,通常於STUN失敗時使用。 ## References MDN(Mozilla Developer Network Web docs) - **[RTCPeerConnection API](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/RTCPeerConnection)** - **[RTCDataChannel API](https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel)** - **[RTCDataChannel Example](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Simple_RTCDataChannel_sample)** iT邦幫忙 - **[菜雞前端邁入網頁即時通訊(WebRTC)之旅](https://ithelp.ithome.com.tw/users/20129521/ironman/3138)** ## Authors **[雪姬](/profile/setsuki)** **[不會取名字](/profile/buhuechuminzu)**
ⒸCode.Gamelet.com | Privacy Policy | Terms of Service