C .
ODE
G
AMELET
# 視覺小說引擎(VisualNovelEngine) 本專案主要是用來製作視覺小說用的。 > 想要更完整、更精緻的視覺小說創作體驗嗎?歡迎前往 **[Phantasia](https://phantasia.cook1470.com/)** 試試看! > 目前尚未有教學文件,有需要的話歡迎到 Discord 找我。 <a href="cg://source/CG.VisualNovelEngine/README.ja.md" class="mat-raised-button mat-primary">日本語版を見る</a> <a href="cg://source/CG.VisualNovelEngine/README.en.md" class="mat-raised-button mat-primary">View English Version</a> 目前主要把最基本的場景、對話框、人物立繪、選項完成了,剩下的就是各種特效了,還有最麻煩的存檔系統。 想要更進一步討論關於此模組的人,可以加入 **[Discord - 嘎姆討論區](https://discord.gg/hZKQzRfPJM)** ,這是我個人自行創建的非官方 Discord 伺服器。 或是我的 Discord 使用者名稱(Username)為:`cook1470`,若不想加入群組的人,也可以直接加我 DC 喔! 加 DC 的時候請直接私訊我,不然我可能不會有回應喔! <font color=red>**本模組仍處於測試、開發階段,如有任何 BUG、功能不完善等問題,歡迎於討論區提出、回報,或是直接 Discord 找我也可以!**</font> 為協助優化本模組,歡迎填寫協助 **[回饋問卷](https://forms.gle/PUckLReQgFK7i7Z68)** 。 **[範例遊戲專案](https://code.gamelet.com/edit/VisualNovelGame?source=CG.VisualNovelGame/example.events)** ## 相關資源 - 文章 - **[巴哈姆特 - 【教學】在網頁上做一個視覺小說遊戲](https://home.gamer.com.tw/artwork.php?sn=5866046)** - **[IT邦幫忙 - [Day 03] CG 同人陣的運作原理](https://ithelp.ithome.com.tw/articles/10321203)** - **[IT邦幫忙 - [Day 11] 在 CG 上公開自己的作品](https://ithelp.ithome.com.tw/articles/10328457)** - **[IT邦幫忙 - [Day 12] 設定專案封面、將成品發布到 Gamelet.online](https://ithelp.ithome.com.tw/articles/10328935)** - **[IT邦幫忙 - 什麼!在網頁上也可以寫視覺小說?](https://ithelp.ithome.com.tw/articles/10337454)** - 影片 - **[【遊戲設計】介紹在網頁上製作視覺小說遊戲](https://www.youtube.com/live/5AUGRityOec?t=189s)** - **[【系統設計】CG 事件表的 UI 系統設計](https://www.youtube.com/live/BKRxSFObMlY?t=1000s)** - **[【遊戲設計】視覺小說引擎更新報告!](https://www.youtube.com/live/s19SacUQ0V4?t=1092s)** - **[【教學】視覺小說引擎-迷霧特效【CC 字幕】](https://www.youtube.com/watch?v=MyXBfAL2BJQ)** - 本站討論串 - **[變數決定結局](https://code.gamelet.com/discuss/p/liaw1/issue/3698/0)** - **[分支選項設置](https://code.gamelet.com/discuss/coding/topic/3706)** ## 網友成品遊戲列表 - **[小又生日活動【異世界大冒險】](https://a2569.gamelet.online/)** - **[God](https://godblesses.gamelet.online/)** - **[平凡的一天](https://dinvmip.gamelet.online/)** ## 作者 **[酷可](/profile/64897095@github)([Youtube](https://www.youtube.com/channel/UCe4mAxtv7eWFU2FDp6bMVVg)、[X](https://x.com/cook1470))** ## 素材網站推薦 - 背景圖 - **[みんちりえ](https://min-chi.material.jp/)** - **[KNT graphics](http://kntgraphics.web.fc2.com/)** - 角色立繪 - **[わたおきば](https://wataokiba.net/)** - 音訊 - **[フリー音楽素材 H/MIX GALLERY](http://www.hmix.net/)** - **[魔王魂](https://maou.audio/)** <a href="cg://source/CG.VisualNovelEngine/README.ja.md" class="mat-raised-button mat-primary">日本語版を見る</a> <a href="cg://source/CG.VisualNovelEngine/README.en.md" class="mat-raised-button mat-primary">View English Version</a>
# WovenFatesPerformanceModule WovenFatesPerformanceModule 是一組為 **平生願** 專案整理的演出與關卡機制擴充模組,讓對話、筆記、提示文字、角色動作與各種互動機制能更直接地接入事件表。 目前依功能分成以下模組: | 模組 | 主要功能 | | --- | --- | | **Dialogue** | 對話框、選項、文本履歷、互動選單、數字密碼與對話泡泡 | | **Notebook** | 筆記本、目錄、圖文條目、多跨頁內容與翻頁演出 | | **TypingAnimation** | 逐字動畫、音效、晃動與訊息堆疊顯示屏 | | **DamageTelegraph** | 可追蹤、瞄準與打斷的傷害預警區域 | | **VisionZones** | 受障礙物遮擋的視野區域與角色進出偵測 | | **DamageThresholdBarrier** | 依單次傷害門檻破裂的防護罩 | | **ActorExtensions** | 拖拽、最近點尋路、真實面向、面向鎖定、組合角色、距離檢查與裝彈觸發 | | **DisplayAttachment** | 讓顯示物件跟隨滑鼠或角色 | | **SpatialSound** | 音量隨聆聽角色與音源距離變化的座標音效 | | **GameTimer** | 隨遊戲暫停而停止累計的畫面計時器 | | **Input** | 滑鼠滾輪觸發與輸入資訊 | | **WorldItems** | 可拾取道具的數量與區域條件檢查 | | **Utilities** | 隨機順序陣列與目前月日 | | **EnginePatches** | 關閉 Shift 戰報選單 | 具體使用效果可以參考 [平生願重製版](https://woven-fates.gamelet.online/)。 **本模組依賴 CgEventsExp、CgEventsLib、TwilightWarsLib、TwilightWarsEvents 與 TwilightWarsEventsExp。** --- ## Dialogue|對話、選項與履歷 ### Action - **建立對話框** 建立包含頭像框、人物名字與文字區的對話介面,可設定版面與樣式。建立時對話框的透明度為 `0`,需配合「更新顯示物件」調整透明度後顯示。 - **更新對話框內容** 更新人物名字、台詞與頭像,支援逐字顯示。頭像可使用圖片、圖集動畫、圖集單一圖幀或 GAF 動畫。 - **對話選項** 顯示選項視窗,支援自訂選項文字、回傳值、位置與樣式;可等待玩家選擇,並將選擇結果寫入變數與文本履歷。 - **開啟文本履歷** 開啟履歷視窗,讓玩家查看先前記錄的對話內容。 - **關閉文本履歷** 關閉已開啟的履歷視窗。 - **互動選單** 適合較多選項的多欄選單。每個選項可設定顯示條件、啟用條件與選擇後的已選標記,並可保留隱藏選項原本的位置。 - **等待密碼輸入** 顯示數字鍵盤,讓玩家輸入指定位數的密碼,並把輸入結果存入指定的全域變數。支援隱藏輸入數字;密碼是否正確可接續用事件表判斷。 ### Trigger - **選中對話選項** 玩家選中對話選項後觸發,可取得選項視窗 ID 與選中的值,接續處理劇情分支。 ### 對話泡泡 Action - **建立對話泡泡顯示屏** 建立不需暫停遊戲的對話顯示區,可設定往上或往下堆疊、左右對齊、泡泡數量上限、間距與堆疊移動時間,也可將內容寫入指定的文本履歷。 - **顯示對話泡泡** 在指定顯示屏加入一段對話,可選擇頭像或名字,以及對話泡泡或極簡字幕樣式。支援逐字顯示、淡入淡出、依字數自動計時、忽略仍在顯示的重複內容,以及等待泡泡結束。 - **清除對話泡泡顯示屏** 將指定顯示屏中目前存在的泡泡全部淡出,可設定淡出時間及是否等待完成。 對話泡泡需先建立顯示屏,再使用相同的顯示屏 ID 新增或清除內容。 --- ## Notebook|筆記本 ### Action - **建立筆記本** 建立筆記本 UI 與控制器,包含封面、目錄、左右頁文字、插圖與翻頁演出。 - **筆記本開關** 開啟、關閉或切換筆記本的顯示狀態。 - **新增筆記條目** 新增含標題、左右頁內容與插圖的條目。可在左右內容中加入分頁標記,讓同一條目包含多個雙頁跨頁;預設標記為 `[[PAGE]]`,插圖顯示於第一個跨頁。 - **刪除筆記條目** 依條目 ID 或索引刪除指定條目。 - **顯示筆記條目** 顯示指定條目內容,或切回目錄頁,並配合翻頁效果切換。 ### Trigger - **筆記本事件觸發** 監聽筆記本開啟、關閉、回到目錄與選中條目等事件,將玩家的閱讀行為接入任務流程。 --- ## TypingAnimation|逐字動畫 ### Action - **特效逐字動畫** 在畫面上顯示逐字出現的文字,可搭配音效、晃動與淡出效果,用於提示、旁白、內心獨白或特殊文字演出,也可加入指定的逐字動畫顯示屏。 - **建立逐字動畫顯示屏** 建立可重用的文字顯示區,可設定背景、行距、最大行數、堆疊方向與推動動畫,讓多條訊息依序排列。 --- ## DamageTelegraph|傷害預警區域 ### Action - **建立傷害預警區域** 建立矩形、圓形或扇形的預警區域,填滿後對符合角色描述的目標造成一次或週期性傷害。可設定填滿方式、傷害類型、視覺與判定的保留時間,也能關閉傷害,只保留演出。 區域起點可跟隨角色;方向可固定、朝向角色或位置,或跟隨角色面向,並可設定追蹤鎖定時間。 - **打斷傷害預警區域** 依區域代碼打斷預警。預設會檢查區域是否允許打斷;需要強制中止時,可關閉「檢查可被打斷」。 若要使用預設的打斷檢查,建立區域時需勾選「可被打斷」。 --- ## VisionZones|視野區域 ### Action - **建立視野區域** 建立圓形或扇形視野,可放在固定位置,或跟隨角色位置與面向。支援障礙物遮擋、射線多邊形與格子兩種繪製模式、反向遮罩,以及偵測間隔與目標角色篩選。 - **設定視野區域顏色** 依區域代碼調整填色、透明度、邊線與圖形顯示狀態。 ### Trigger - **視野區域偵測** 可選擇「偵測到任意目標」「新進入目標」或「離開目標」三種模式,並將區域 ID、角色陣列與個別角色代碼存入區域變數。 --- ## ActorExtensions|角色擴充 ### Action - **角色拖拽** 讓角色經過一段移動過程到達指定位置,或朝目標方向、指定角度移動固定距離。 - **人物最近點尋路** 從候選座標中選擇最近且可到達的位置,控制角色前往。 - **鎖定角色面向** 在指定時間內維持目前面向、固定角度,或持續朝向目標角色/位置。 - **設定角色受擊半徑** 調整指定角色的受擊半徑,供特殊機制或測試使用。 ## DisplayAttachment|顯示物件跟隨 ### Action - **顯示物件跟隨滑鼠** 讓既有顯示物件跟隨滑鼠,移至最上層滑鼠圖層與關閉互動判定。 - **顯示物件在上層跟隨角色** 讓既有顯示物件跟隨角色位置,並保留在天花板/黑暗遮罩上方,適合角色提示、標記或頭頂資訊。 --- ## SpatialSound|座標音效 ### Action - **座標音效** 以角色或固定地圖座標作為音源,依音源與指定聆聽角色的距離調整音量。 --- ## GameTimer|遊戲計時器 ### Action - **遊戲經過時間計時器** 建立顯示於畫面的正向計時器,光暈戰記遊戲暫停時不會累計時間。 --- ## Input|輸入 ### Trigger - **滑鼠滾輪** 監聽向上、向下或任意方向的滾輪輸入,可取得玩家、滾動方向,適合用於文本履歷、翻頁或其他 UI 互動。 --- ## WorldItems|可拾取道具 ### Check - **計算地上可拾取道具** 計算指定種類的道具數量,支援選擇地上可拾取的道具,以及角色持有、可放回地上的道具。 --- ## Utilities|變數工具 ### Action - **建立隨機順序陣列** 依起始值、結束值與變化值建立數字序列,再打亂順序並存入全域變數。 - **取得今天日期** 取得執行當下的月份與日期,分別存入指定全域變數。 --- ## EnginePatches|系統調整 ### Action - **關閉Shift選單功能** 關閉以 Shift 開啟戰報選單的功能。 ---
# TWLibsBridge `TWLibsBridge` 是 `CG.TwilightWarsLib` 和 React function component 之間的橋接工具。 主要提供: - 在 React component 中取得目前的 `Game` - 取得目前的 controller - 取得目前玩家的 actor - 用 hooks 監聽 TwilightWarsLib 的 EventEmitter - 在 component 卸載或遊戲切換時,自動清理事件 listener - 使用 C.G 原本的 React 環境掛載 function component `TWLibsBridge` **不會另外保存一份遊戲狀態**,也不會取代 TwilightWarsLib 原本的 controller、socket、狀態機或 EventEmitter。 ## 基本使用方式 先在遊戲 UI 最外層放入 `TWLibsProvider`: ```ts function GameRoot(props: { game: CG.TwilightWarsLib.games.Game }) { return ( <CG.TWLibsBridge.TWLibsProvider game={props.game}> <GameUI /> </CG.TWLibsBridge.TWLibsProvider> ); } ``` 接著 component 裡就可以使用 bridge 提供的 hooks。 ```ts function GameUI() { const game = CG.TWLibsBridge.useTWGame(); const controller = CG.TWLibsBridge.useTWController(); const me = CG.TWLibsBridge.useTWMyActor(); return <div>{me ? me.code : "Waiting"}</div>; } ``` ## 文件入口 詳細使用說明已移到 website 文件站。 ## C.G 依賴 專案需要安裝: - `TwilightWarsLib` - `React` - `ReactMaterial` `TWLibLib` 會由 `TwilightWarsLib` 帶入,不需要在使用 bridge 的專案另外安裝。 ## 作者 **[DeLove](/profile/103439374071744052100@google)** 本模組僅供嘎姆擂台內部專案開發使用,不保證其穩定性。
# TwilightWarsLib A Top-down view shooting game framework. ## Getting Started These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. To start a .event ```typescript CG.TwilightWarsLib.initialize() .then(() => { CG.TwilightWarsLib.events.startEvents('test/test.events', 'arena'); }) ``` To manually setup the game: ```typescript CG.TwilightWarsLib.initialize() .then(() => let mapSource = 'test/test.twmap'; CG.Base.resourceManager.addAppSource(mapSource); CG.Base.resourceManager.load(() => { let mapResource = new CG.TWMap.resources.MapResource(); mapResource.importBase64(CG.Base.resourceManager.getText(mapSource)); mapResource.loadTextures(() => { CG.Base.pixi.initialize(600, 500); let game = new CG.TwilightWarsLib.games.Game(); CG.Base.pixi.root.addChild(game); game.initResources(mapResource); game.start(); console.log('tw game created'); let me = new CG.TwilightWarsLib.games.actors.Actor(game, 'me'); game.addActor(me, new MyActorController(me), 32, 100, 0, null); game.gameCamera.setFocus(me); game.interface.setMe(me); let ai = new CG.TwilightWarsLib.games.actors.Actor(game, 'ai'); ai.camp = CG.TwilightWarsLib.games.datas.Camp.CAMP2; ai.actorClip.headClip.clip.gotoAndStop(5); game.addActor(ai, new CG.TwilightWarsLib.games.actors.controllers.AIController(ai), 160, 300, 0, null); game.createStuff(null, 64 + 16, 128 + 16, CG.TwilightWarsLib.games.items.StuffInfo.getByCode('sword'), game.stuffManager.useNextStuffId(), true); }); }); }) ``` ## Versioning We use [SemVer](http://semver.org/) for versioning. ## Authors * **[Haskasu](/profile/Haskasu)** ## Acknowledgments * Hat tip to anyone who's code was used * Inspiration * etc
# 更好的 CG 事件表通用擴充模組(CgEventsBetterExp) 本模組延續 [**CgEventsExp**](https://code.gamelet.com/edit/CgEventsExp)(以下簡稱 EXP)的概念所設計,用於擴充 CG 事件表的**通用**功能——只依賴事件表引擎與 `CG.Base`,與特定遊戲、特定函式庫(如光暈戰記)皆無關,任何 CG 專案都能安裝使用。 由於 **EXP** 過於混雜,為優化模組架構與性能,將逐步進行程式碼重構,剔除許多不必要、或與平台官方功能重疊的功能,保留真正需要的功能。 程式碼搬遷將會是一個持續性的工程,如果你有建議可以優先搬遷的功能,歡迎直接告訴我。 本模組的所有功能都放在 **通用 (BetterExp)** 目錄底下,且所有功能皆有 (BetterExp) 後綴。 > 光暈戰記相依的事件表擴充,請改用 **TWEventsBetterExp**;本模組專注於純通用功能。 ## 注意事項 即使是作用相同的功能,由於程式碼重構的關係,使用上 **EXP** 還是會和本模組有所差異,沒辦法直接將資料無痛轉移,因此你應該將其視為兩個不同的模組。 如果你是曾使用過 **EXP** 的開發者,如今想要開發新的專案,會建議不要安裝 **EXP** 而改安裝此模組。 ## 作者 **酷可**:[**Code.Gamelet**](/profile/114899766849308759711@google)、[**Gamelet.Online**](https://gamelet.online/user/114899766849308759711@google/board)、[**Youtube**](https://www.youtube.com/@cook1470)
# 櫻色回憶 Sakura Memorial 櫻色回憶模組是一個用於擴充 TwilightWarsEvents 和 FairyEvents 功能的模組。 需要 TWLibLib, TwilightWarsLib 作為必要前置。 以及 TwilightWarsEvents, FairyEvents 作為可選前置。 本模組作者為 **[妮娜(LoliPrincessNina)](/profile/LoliPrincessNina)** 。 ## 模組提供的功能 <details open> <summary><strong>📋 觸發</strong></summary> #### 👤 角色 - 角色:座標改變 - 當人物改變光暈座標或生成時觸發。 </details> <details open> <summary><strong>✅ 檢查</strong></summary> - 正在開發中... </details> <details open> <summary><strong>⚡ 動作</strong></summary> #### 👤 角色 - 新增:AI角色 - 新增一個由AI控制的角色。 - 設置:角色類型配置 - 修改特殊角色類型的設定。 - 設置:角色屬性配置 - 設定一個角色的屬性或改變角色某些狀態。 - 角色:操作武器道具 - 讓一位角色裝備指定的武器道具,或按一個鍵盤按鍵。 #### 🔥 特效 - 特效:角色飛拳 - 生成一個角色飛拳特效。 - 特效:角色濾鏡 - 對一位角色設置濾鏡。 #### ⚙ 遊戲 - 遊戲:觸發天啟事件 - 在遊戲中觸發一項天啟事件。 - 系統:彈出技能限制訊息 - 彈出技能系統訊息並可選設定技能等級上限。 - 系統:儲存變數 - 將一個值儲存至一個變數。 - 系統:隨機輸出變數 - 根據給定的列表,隨機取出其中的一個值,並儲存至一個變數。 - 遊戲:規則配置 - 設定遊戲中使用的規則。 - 遊戲:環境聲效控制器 - 控制環境聲效。 #### 👁️ 可視化光暈任務表 - 生成:任務資訊 - 創建一個任務資訊。 - 生成:章節資訊 - 創建一個章節資訊。 - 生成:季度資訊 - 創建一個季度資訊。 - 生成:seasons.ts - 建立 seasons.ts ,或輸出任務/章節/季度/季度表的JSON。 - 生成:app.ts - 建立進入光暈戰記的 app.ts 檔案。 #### ⚔️ 武器道具 - 新增:武器道具 - 在地圖地面生成武器或任務道具。 #### ✨ 技能 - 角色:技能狀態配置 - 配置一名角色的技能狀態。 </details>
# 花靈宮模組 - 作者 **[妮娜](/profile/LoliPrincessNina)** - 使用此模組為你的專案增加新的陣營和技能 - 注意電腦AI使用技能時有機會比較蠢 - 過快使用技能將會有概率出BUG - 此為測試版本,有BUG很正常 - 查詢及回報請到<b><a href="https://gamelet.online/user/nina/board">我的留言板</a></b> # 說明 - 為了方便各位照搬/測試花靈宮的任務,此處將填上花靈宮裡所有用到的觸發/檢查/動作 - 有相當一部分代碼是來自TwilightWarsEventsExp和CgEventsExp(下方不列出;部分存在變更,與原版有差異) - 若希望使用以上觸發/檢查/動作,請用原版,此處不會有更新 ## 目前提供支援的有: ## 陣營 - 花靈宮 - 盜賊幫 - 無魂軍 - 智械兵團 - 蒼鎧營 <!-- --> ## 觸發 #### 角色 - 角色說話 - 人物受傷(內建排除傷害類型/傷害數值比對) #### 武器道具 - 使用消耗型道具(可儲存道具變數) #### 技能 - 發動技能 - 技能狀態改變 <!-- --> ## 檢查 #### 技能 - 角色技能狀態 - 手持武器技能 #### 角色 - 角色狀態附加 - 角色面向某物 - 角色燃燒狀態 - 角色B是否角色A的敵人 - 角色是否可直視某點/物 #### 地圖 - 可行走座標 - 兩點之間的距離 #### 存讀 - 儲存變數 - 在陣列中找到字串 - 以符號分離字串 - 是否存在專案資源 #### 地圖機關 - 燭火機關狀態 - 找出所有地圖機關(迴圈) <!-- --> ## 動作 - 筆記 #### 角色 - 新增角色 - 角色漂浮能力 - 設定角色演員 - 移動角色位置 - 設定角色大小 - 角色可否攻擊 - 角色死亡訊息 - 人物停止說話 - 角色特殊屬性 - 取得玩家陣營演員角色 - 角色醉酒管理 - 角色反彈子彈 - 放下旗幟 - 鎖定面向方向 - 傳送角色加血訊息 - 傳送角色傷害訊息 - 傳送角色閃現至定點訊息 - 設定最大血量 #### 技能 - 角色結束技能 - 限制使用技能 - 設定武器技能 - 傳送技能訊息(欲自定義參數可在此處查看:<a href="https://docs.google.com/spreadsheets/d/1GAJctoQ3f1A_DutUhTHeSFdPY4ex0_U-cUnnuCS5-_g/edit?usp=sharing">技能參數</a>) - 白鳥拳 - 正/反旋風劈掌 - 千手如來 - 百裂拳 - 元氣玉 - 釋放拳法 #### 任務流程 - 跳出系統訊息 - 更多遊戲規則 - 角色對己說話 - 改變任務代碼 #### 存讀 - 工作階段儲存空間數據庫存取 - 以符號分離字串 - 定義Json變數 - 轉換Json為字串 - 轉換Json為物件 - 預載單一資源 #### 特效 - 聖光術 - 角色燃燒狀態 - 應用攻擊屬性 - 震地 - 吸血/血刃 - 劍氣光彈 - 地圖痕跡 - 冰氣 - 火箭 - 快跳文字 - 光環 - 衝擊波 - 地圖動畫 - 擊退人物 - 光印 - 冷卻 - 防護罩 - 防護罩泡泡 - 冰魂護盾 - 血滴 - 自動移除動畫 - 反衝箭 - 定時炸彈 - 空心虛線圓 #### 武器道具 - 背包道具設定 - 攜帶式道具設定 - 切換預設武器 - 切換至另一手 - 裝填武器彈藥 - 新增任務道具 - 新增武器道具 - 人物裝備道具 - 人物裝備武器 - 移除武器道具 - 玩家背包道具擁有的數量 - 設定花靈宮道具 - 遊戲道具配置 #### 地圖 - 隨機可行走座標 #### 隨機 - 隨機設定陣營 - 隨機角色演員 - 隨機使用技能 - 隨機物件代碼 - 隨機字串 - 隨機角色 #### 陣營 - 設定陣營/暱稱/技能圖示 - 新增陣營 - 改變陣營色彩風格(4個子項被拆分成2個新動作) - 回朔至初始陣營 #### 地圖機關 - 控制燭火機關 - 新增可推石塊 - 新增告示牌(NPC角色包括同人陣營選項)
# 更好的光暈戰記事件表擴充模組(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)
<div align="center"> <img src="https://a.gamelet.online/gassets/asset/HeiwaEvents/HeiwaEvents.Thumbnail_Clear/heiwa_no_jikenshu_transparentX.png" alt="HeiwaEvents Cover" width="60%"/> </div> <br/> <div align="center"> # 世界ヘイワ <a href="https://gamelet.online/user/XMoiswnX_Official" target="_blank"><img src="https://gamelet.online/clients/assets/v1/img/gamelet_icon.png" height="16" style="vertical-align:middle"/><span style="vertical-align:middle"> 嘎姆擂台</span></a> <span style="vertical-align:middle">&nbsp;|&nbsp;</span> <a href="/profile/112096057923977127327@google" target="_blank"><img src="https://code.gamelet.com/img/logo_v1_100.png" height="16" style="vertical-align:middle"/><span style="vertical-align:middle"> 摳的嘎姆</span></a> <span style="vertical-align:middle">&nbsp;|&nbsp;</span> <a href="https://discord.gg/qBrDVXCPA3" target="_blank"><img src="https://cdn.simpleicons.org/discord/5865F2" height="16" style="vertical-align:middle"/><span style="vertical-align:middle"> Discord 群組</span></a> </div> --- <details> <summary> <a class="mat-raised-button mat-primary">可用模組</a> </summary> - 動作 - 角色 - **設定角色屬性** - 設定角色的數值屬性。 - **設定角色狀態** - 設定角色的狀態開關。 - **設定玩家可攻擊對象** - 決定玩家(及可選同陣營 AI 同伴)可以攻擊到哪些原本打不到的友軍,其餘設成打不到。 - **設定角色身分與外觀** - 設定角色的身分與外觀。 - **設定角色死亡音效** - 將角色死亡時播放的音效換成指定的音效資源、設為靜音,或恢復系統預設。 - **角色裝備武器** - 讓角色裝備指定武器。 - **角色切換武器** - 讓角色切換到指定的武器手。 - **角色切換預設武器** - 將所選手位裝回預設武器。 - **悄悄設定預設武器** - 設定角色每手的預設武器,不改變當下手持。 - **角色移到相對位置** - 將角色移動到目標角色面向基準下的相對位置。 - **角色交換位置** - 交換兩個角色的位置。 - **角色推拉目標** - 沿著角色與目標角色之間的連線推遠或拉近目標角色。 - **打斷集氣** - 打斷目標角色正在進行的集氣。 - **角色跳躍** - 令角色跳到目標,可關閉跳躍音效、起跳塵土與穿釘鞋落地踩傷。 - **鎖定自然回氣** - 鎖定角色的自然回氣,上鎖後氣只消耗不回升。 - **設定玩家控制鎖** - 鎖定或解除玩家的操作。 - **設定NPC控制鎖** - 鎖定或解除非玩家角色的移動、面向、攻擊、換武器與撿取(武器與道具)。 - **衝刺** - 令角色依面向或角度衝刺一段距離,無斬光、傷害與音效。 - **設定角色身體動畫** - 設定角色身體動畫並可播到指定結束幀;切換到下一段同名動畫時不會互相打斷。 - 技能 - **施展技能** - 讓目標角色直接發動(施展)一個技能。 - **居合斬** - 令一名角色執行一次居合斬攻擊,可選擇是否使用內建居合姿勢(關閉時保留武器原本的動畫)。 - **龍波** - 放出一條龍波,可設定能飛越的地形高度。 - 遊戲 - **觸發天啟事件** - 觸發光暈戰記原版的天啟事件。 - **顯示通知** - 顯示右上角遊戲通知訊息。 - 任務 - **設定計時器** - 開始、繼續、暫停或關閉任務計時器。 - 道具 - **設定拳譜書掉落** - 在指定位置掉落綁定指定拳譜的拳譜書。 - **給予拳譜** - 讓玩家角色學會拳譜或增加拳譜經驗。 - 特效 - **老花畫面** - 套用老花眼畫面效果。 - **下雨特效** - 效能最佳化的下雨,雨勢開高仍流暢;落下雨絲與落地水花,可設雨勢、顏色、風向、風速與雨聲,並可一起打雷。 - **下雪特效** - 效能最佳化的下雪,雪花飄落、隨時間在整張地圖累積成白雪覆蓋(避開水面、岩漿與室內、看得出地形),積雪不論多滿都只用一個顯示物件;可設雪量、顏色、風向、風速、飄擺幅度與積雪厚度,並可選擇停止時融化。 - **移除特效** - 移除一個或全部《へいわの事件集》畫面特效、角色的頭上標記,或停止下雨/下雪特效。 - **標題文字** - 在畫面上顯示標題文字,字體可填字體檔網址自動載入。 - **章節標題卡** - 顯示章節標題卡:黑幕、斜切強調色掃光、眉標與大標題。 - **頭上標記** - 在角色頭上跳出標記。 - 檢查 - 角色 - **角色屬性** - 檢查角色的數值屬性。 - **角色身分與外觀** - 檢查角色的身分與外觀。 - **角色武器** - 檢查角色的武器狀態。 - **角色集氣狀態** - 檢查角色是否正在集氣。 - **角色相對關係** - 檢查角色與目標角色之間的相對關係。 - **技能狀態** - 檢查角色是否正在進行技能。 - **自然回氣鎖狀態** - 檢查角色的自然回氣是否被鎖定。 - **角色戰鬥對象** - 檢查 AI 角色目前的戰鬥對象。 - 遊戲 - **玩家控制鎖狀態** - 檢查玩家操作目前是否被鎖定。 - 任務 - **計時器進度** - 檢查目前任務計時器進度。 - 觸發 - 角色 - **角色開始集氣** - 當角色開始集氣近身武器技能時觸發。 - **技能狀態結束** - 當角色技能狀態結束時觸發。 - **黑手套觸發** - 當角色被黑手套搓中、當前技能產生反應時觸發。 - **角色失去戰鬥目標** - 當 AI 角色從有戰鬥目標變成沒有目標時觸發。 - 遊戲 - **天啟狀態變更** - 當光暈戰記原版天啟事件開始或結束時觸發。 - 任務 - **計時器時間到** - 當符合條件的任務計時器歸零時觸發。 </details> --- <div align="center"> ## 靈感來源 TwilightWarsEvents by [Haskasu](https://code.gamelet.com/profile/Haskasu) TwilightWarsEventsExp by [cook1470](https://code.gamelet.com/profile/cook1470) TWEventsBetterExp by [cook1470](https://code.gamelet.com/profile/cook1470) </div>
# TwilightWarsEventsEnhFF 本專案為 **TwilightWarsEventsEnh** 模組的 **beta版本** ,「FF」是「Fast Forward」的縮寫,代表快速開發。 因為原模組的開發緩慢,所以會逐漸把原模組的功能移植至本專案完善。 ## 前言 本專案主要由 **[雪姬](/profile/setsuki)** 維護。 歡迎加入 **[Discord群組](https://discord.gg/seJwuzCbWq)** 。 ## 使用須知 ***本專案開源,若有不明之處可查看 [test](cg://source/test/README.md)*** 本專案的主要目的是要讓事件表編輯如同寫程式一般。 不只專注於 **效能** ,會更著重在提供更大的 **彈性** 。 另外,本專案不會立即修復不嚴重的錯誤。 當測試穩定後,未來會將事件表功能從本專案移植回原模組,屆時該功能可能會在一段時間後,於本模組移除。 Enh的測試、回報需要你的參與,歡迎加入 **[Discord群組](https://discord.gg/seJwuzCbWq)** 。 ## 作者 **[EnhProject](/profile/EnhProject)** - **[不會取名字](/profile/buhuechuminzu)** - **[雪姬](/profile/setsuki)** --- # TwilightWarsEventsEnhFF "FF" stands for "Fast Forward", and can be considered as **beta version** of original **TWEventsEnh**. Due to slow updates of the original Enh, the functionality from mainline Enh would be porting and refined here. ## Additional This project is mainly maintained by [雪姬](/profile/setsuki). The **[Enh Discord server](https://discord.gg/seJwuzCbWq)** is also welcoming participants! ## Important ***It is recommanded to read source code and [test](cg://source/test/README.md) of this project!*** The main concept is to make events work as code. Not just focused on **performance**, but also provide more **flexibility**. This project will not repair bugs instantly unless they are critical. If there are any bugs, they will be fixed before integrated into the main Enh. Enh needs your participate for testing, asking questions or reporting bugs! Features merged into the mainline Enh will be removed here. ## Authors **[EnhProject](/profile/EnhProject)** - **[不會取名字](/profile/buhuechuminzu)** - **[雪姬](/profile/setsuki)**
# Desperate City Armory — 武器系統模組使用教學 > ## ⚠️ !!注意!! 在使用前需要先初始化武器 > 在遊戲開始時(通常是「初始化」事件),**必須**先執行 `InitGameData` 動作,否則所有武器功能都不會正常運作。 > > ``` > 事件:初始化 > 動作:InitGameData > ├── 武器資料別名:datas_weaponType(預設) > ├── 殭屍資料別名:datas_zombieType(預設) > └── 除錯日誌:false(正式版請關閉) > ``` --- ## 目錄 1. [模組架構](#模組架構) 2. [初始化設定](#初始化設定) 3. [新增武器到地圖](#新增武器到地圖) 4. [讓角色裝備武器](#讓角色裝備武器) 5. [自訂武器處理器(Actions)](#自訂武器處理器) 6. [weapon_utils 工具函式](#weapon_utils-工具函式) 7. [datas_gameConfig 武器資料設定](#datas_gameconfig-武器資料設定) 8. [新增武器的完整流程](#新增武器的完整流程) 9. [注意事項與常見問題](#注意事項與常見問題) --- ## 模組架構 ``` datas/ ├── datas_gameConfig.ts ← 武器資料定義(FarWeaponData)與 WeaponTypeData 管理器 └── weapon/ ├── weapon_utils.ts ← 共用工具函式(registerWeapon、actorCustomGAF 等) ├── InitGameData.action.ts ← 【必須】初始化動作,負責事件監聽與切換偵測 ├── WeaponActions.action.ts ← WeaponSpawn(生成武器到地上) ├── WeaponEquip.action.ts ← WeaponEquip(讓角色裝備武器) └── weapons/ ├── Demo_actions.ts ← 新增武器用的模板 ├── Barret_actions.ts ├── AA12_actions.ts ├── M249_actions.ts ├── P90_actions.ts ├── MP5_actions.ts ├── SCAR_actions.ts ├── M200_actions.ts ├── Revolver_actions.ts ├── Gating_actions.ts ├── GrenadeGun_actions.ts ├── Crossbow_actions.ts ├── SR16_actions.ts ├── ElectricGun_actions.ts ├── AUG_actions.ts └── CombatShotgun_actions.ts ``` --- ## 初始化設定 > ### ⚠️ 使用前必須先執行 InitGameData,否則所有武器功能不會正常運作! `InitGameData` 會執行以下工作: - 載入所有武器資料(`WeaponTypeData`) - 建立自訂彈匣(`initMagazines`) - 註冊所有武器處理器(Handler) - 掛上 `ACTOR_PICKUP_STUFF`、`ACTOR_DROP_STUFF`、`ACTOR_FIRE` 事件監聽 - 啟動輪詢(每 100ms)偵測武器切換與裝填 **動作參數說明:** | 參數 | 說明 | 預設值 | |------|------|--------| | 武器資料別名 | JSON 資源的別名 | `datas_weaponType` | | 殭屍資料別名 | JSON 資源的別名 | `datas_zombieType` | | 除錯日誌 | 開啟後顯示詳細 log,上架前請關閉 | `false` | --- ## 新增武器到地圖 使用 `WeaponSpawn` 動作將武器放到地圖上。 **動作參數說明:** | 參數 | 說明 | |------|------| | 武器種類 | 從下拉選單選擇 | | 位置 | 在地圖上點選位置 | | 道具代碼 | 武器物件的事件代碼(`item*` 自動生成唯一代碼) | | 區域變數名稱 | 儲存道具代碼的區域變數 | | 除錯日誌 | 顯示生成 log | **支援的武器種類:** | 武器代碼 | 武器名稱 | 特效 | 自訂音效 | |---------|---------|------|---------| | `barret` | 巴雷特 | GAF ✅ | ✅ | | `m249` | M249 | GAF ✅ | ✅ | | `p90` | P90 | GAF ✅ | ✅ | | `mp5` | MP5 | GAF ✅ | ✅ | | `scar` | SCAR | GAF ✅ | ✅ | | `m200` | M200 | GAF ✅ | ✅ | | `revolver` | 左輪槍 | GAF ✅ | ✅ | | `gating` | 加特林 | GAF ✅ | ✅ | | `aa12` | AA-12 | GAF ✅ | ✅ | | `combat_shotgun` | 戰鬥霰彈槍 | — | ❌ | | `aug` | AUG | — | ✅ | | `sr16` | SR-16 | — | ✅ | | `electric_gun` | 電擊槍 | — | ✅ | | `grenadegun` | 榴彈槍 | ❌ | ❌ | | `crossbow` | 弩 | GAF ✅ | ✅ | | `uzi` | 烏茲 | — | — | | `mk18` | MK18 | — | — | | `svd` | SVD | — | — | | `glock17` | 格洛克17 | — | — | | `victor` | 維克托 | — | — | | `m2_machinegun` | M2機槍 | ❌ | ❌ | --- ## 讓角色裝備武器 使用 `WeaponEquip` 動作讓角色直接持有武器(不需要從地上撿起)。 **動作參數說明:** | 參數 | 說明 | 預設值 | |------|------|--------| | 角色代碼 | 目標角色 | 必填 | | 武器種類 | 從下拉選單選擇 | `barret` | | 裝備在哪一手 | -1 當前手 / 0 第一手 / 1 第二手 | `-1` | | 裝備後切換至此武器 | 裝備後立即切換 | `false` | | 在角色位置放下之前的武器 | 換武器時丟棄舊武器 | `false` | | 設為角色預設武器 | 手空時自動拿出 | `false` | | 除錯日誌 | 顯示裝備 log | `false` | --- ## 自訂武器處理器 每把有 GAF 動畫或自訂音效的武器,需要一個對應的 `_actions.ts` 檔案。**複製 `Demo_actions.ts` 作為起點。** ```typescript const myHandler: WeaponHandler = { stuffCode: 'cusfar_myWeapon', // 對應 WEAPON_DATAS 的 stuff 欄位 onPickup(actor, game, manager) { // 撿起武器:隱藏引擎動畫、設旗標、播 GAF setActorDisplayVisible(actor, 'rightHand', false); setActorDisplayVisible(actor, 'leftHand', false); setWeaponAlpha(actor, 0); setGlobal(manager, `${actor.code}_hold_myWeapon`, 1); actorCustomGAF({ ..., linkage: 'Idle', stop: true }); }, onFire(actor, game, manager) { // 開槍:播射擊動畫 + 音效 actorCustomGAF({ ..., linkage: 'Shoot' }); mapSoundEffect(game, actor, 'Desperate_City.myWeapon_music', 1.0); }, onReload(actor, game, manager) { // 裝填:播裝填動畫 actorCustomGAF({ ..., linkage: 'Reload' }); }, onUnequip(actor, game, manager) { // 卸除:移除 GAF、清旗標、恢復引擎動畫 actorCustomGAF({ actorCode: actor.code, actorCustomGAFCode: gafCode(actor), add: 'remove' }); setGlobal(manager, `${actor.code}_hold_myWeapon`, 0); setActorDisplayVisible(actor, 'rightHand', true); setActorDisplayVisible(actor, 'leftHand', true); setWeaponAlpha(actor, 100); }, }; export function registerMyWeapon(): void { registerWeapon(myHandler); } ``` --- ## 新增武器的完整流程 1. **複製 `Demo_actions.ts`**,改名為 `MyWeapon_actions.ts` 2. **修改三個常數**:`STUFF_CODE`、`GAF_ALIAS`、`HOLD_SUFFIX` 3. **調整各 handler** 的 linkage、fps、音效等細節 4. **`InitGameData.action.ts`** 加上 import 和 `registerMyWeapon()` 呼叫 5. **`datas_gameConfig.ts`** 的 `WEAPON_DATAS` 加上武器設定 --- ## 注意事項與常見問題 ### Q:武器沒有子彈特效? 確認 `SpawnedFarWeapon` 沒有 override `createBulletsData` 方法,必須使用引擎原始邏輯。 ### Q:onPickup 沒有觸發? 確認 `stuffCode` 能被 `_resolveStuffCode` 正確對應,系統嘗試順序: 1. 直接查 handler(如 `cusfar_barret`) 2. 去掉 `cusfar_` 前綴(如 `SCAR`、`p90`) 3. 去掉 `homemade_` 前綴(如 `m249`) ### Q:切換武器時 GAF 沒更新? 系統每 100ms 輪詢 `_currentWeapon`,偵測切換時觸發 `onUnequip`(舊)+ `onPickup`(新)。初次撿起由 `ACTOR_PICKUP_STUFF` 事件負責。 ### Q:引擎手持動畫沒有隱藏? 確認 `datas_gameConfig` 裡該武器設定 `hasCustomAnim: true`。 ### Q:clip 設什麼? - 使用 `TwilightWarsLib.actors` → 填 `lib_rifle`、`lib_handgun`、`lib_shotgun` 等 - 使用自訂資源 → 填該資源內的 linkage 名稱(如 `mp5_clip`、`barret_clip`) ### Q:weaponCode 需要手動填? 大多數情況不需要,系統自動從 `stuff` 推算。以下需手動填: - `gating`:`weaponCode: 'gating_gun'` - `m249`:`weaponCode: 'homemade_m249'` ## Authors **[Autumn](/profile/113266227571469019286@google)**
# JEventsEXP <table width="100%"> <tr> <th rowspan="2"> <a href="https://discord.gg/UNde4eaGuc" target="_blank"> <img src="https://imgur.com/HDw592N.png" width="110px"> <br> 珍・EventsEXP <br> <a href="https://discord.gg/UNde4eaGuc" class="mat-raised-button mat-primary "> 加入Discord </a> </a> </th> <th> 隨便寫的模組。 </th> <th> A casually written module. </th> </tr> <tr> <td> <pre> # 觸發 珍妮-擴充包/ └── 輸入/ └── 鍵盤序列 # 動作 珍妮-擴充包/ └── 變數/ └── 生成隨機整數陣列 └── 地圖/ └── 迷宮生成 └── 特效/ └── 角色/ └── 熱感應追蹤器 └── 自定熱感應追蹤器 └── 移除熱感應追蹤器 # 道具 └── 熱感應追蹤器 </pre> </td> <td> <pre> # Trigger Jennie-Expansions/ └── Input/ └── Keyboard Sequence # Actions Jennie-Expansions/ └── Variable/ └── Generate Random Integer Array └── Map/ └── Maze Generation └── Effect/ └── Actor/ └── Thermal Tracker └── Custom Thermal Tracker └── Remove Thermal Tracker # Item └── Thermal Tracker </pre> </td> </tr> </table> ## 作者 **[SinB.JN](/profile/108665576516229624668@google)** <details open> <summary> <a class="mat-raised-button mat-primary"> 更新日誌(Changlog) </a> </summary> ## [v0.1.5](/view/JEventsEXP/0.1.5) (2026-04-26) #### 新增 - [動作]特效/角色/自定熱感應追蹤器 - 顯示其他角色的即時位置熱感應追蹤 #### Added - [Actions]Effect/Actor/Custom Thermal Tracker - Show other actors' real-time positions with thermal tracking ## [v0.1.2](/view/JEventsEXP/0.1.2) (2025-06-25) #### 新增 - [動作]特效/角色/熱感應追蹤器 - 顯示其他角色的即時位置熱感應追蹤 - [動作]特效/角色/移除熱感應追蹤器 - 移除角色的熱感應追蹤器 #### Added - [Actions]Effect/Actor/Thermal Tracker - Show other actors' real-time positions with thermal tracking - [Actions]Effect/Actor/Remove Thermal Tracker - Remove thermal tracker from an actor ## [v0.0.8](/view/JEventsEXP/0.0.8) (2025-05-24) #### 新增 - [觸發]輸入/鍵盤序列 - 當一系列鍵盤按鍵和滑鼠按鍵依序被按下時觸發 #### Added - [Trigger]Input/KeyboardSequence - Trigger when a sequence of keyboard keys and mouse buttons is pressed ## [v0.0.7](/view/JEventsEXP/0.0.7) (2025-05-09) #### 新增 - [動作]地圖/迷宮生成 - 在選定的地圖區域(矩形或圓形)內以1x1物件生成迷宮 #### Added - [Actions]Map/Maze Generation - Generates a maze within a selected map region (rectangle or circle) with 1x1 object ## [v0.0.6](/view/JEventsEXP/0.0.6) (2024-08-31) #### 更改 - [動作]變數/生成隨機整數陣列 - 新增了對數量、最大重複次數和種子參數的變數輸入支持。 - 優化了錯誤處理和無效輸入的提示信息。 #### Changed - [Actions]Variable/Generate Random Integer Array - Added support for variable input for count, max repeats, and seed parameters. - Improved error handling and messaging for invalid inputs. ## [v0.0.5](/view/JEventsEXP/0.0.5) (2024-08-30) #### 更改 - [動作]變數/生成隨機整數陣列 - 新增了使用種子生成隨機數的選項。用戶現在可以選擇是否使用種子,並輸入一個特定的種子值來生成可重現的隨機數序列。 - 優化了用戶界面。 #### Changed - [Actions]Variable/Generate Random Integer Array - Added an option to use a seed for random number generation. Users can now choose whether to use a seed and input a specific seed value to generate reproducible random number sequences. - Improved the user interface. ## [v0.0.4](/view/JEventsEXP/0.0.4) (2024-08-29) #### 錯誤修復 - [動作]變數/生成隨機整數陣列 - 修復了當可用數字少於陣列長度時導致遊戲崩潰的問題。 #### Bug fixed - [Actions]Variable/Generate Random Integer Array - Fixed an issue where the game would crash when the number of usable integers was smaller than the array length. ## [v0.0.1](/view/JEventsEXP/0.0.1) (2024-08-29) #### 新增 - [動作]變數/生成隨機整數陣列 #### Added - [Actions]Variable/Generate Random Integer Array </details>
ⒸCode.Gamelet.com | Privacy Policy | Terms of Service