Atalaia

本頁由 AI 模型翻譯,尚未經過審閱。你用中文玩生存遊戲嗎?歡迎協助審閱:請見 GitHub 儲存庫的 docs/translations。

路線圖

六個階段,每個階段都以一次真實場地測試收尾,也就是它的「關卡」。軟體進度跑在硬體前面:第 1 到 3 階段的軟體已完成(真實開發板已在工作台上玩完整場遊戲,iOS App 已在 iPhone 上通過檢查清單);第 4、5 階段的軟體已完成。關卡在等組裝好的盒子、場地測試、一台真正的伺服器和專案的登錄庫金鑰。

各部分如何互相溝通:架構圖 →

  1. 已完成

    0 · 基礎

    共用核心、Lua 沙箱、Skirmesh-RF 編解碼器和瀏覽器模擬器。關卡已通過。

    已完成的部分

    • 共用核心,每個平台都執行的遊戲邏輯。
    • Lua 沙箱,遊戲模式的腳本在其中執行。
    • Skirmesh-RF 編解碼器,無線電訊息的格式。
    • 瀏覽器模擬器,能執行佔點與炸彈模式。

    關卡:模擬器能用 Lua 腳本執行佔點與炸彈模式。已通過。

  2. 軟體已完成

    1 · 單一盒子

    Field Box 韌體與組裝手冊;真實開發板已能在工作台上玩完整場遊戲,螢幕、按鍵和按鈕也已用散線接好(照片和影片在組裝頁)。還在等一個組裝完成的盒子。

    已完成的部分

    • Field Box 的 ESP32 韌體,附盒子上的預設遊戲,已在模擬器中執行。
    • 盒子的小螢幕以四種語言顯示按住進度條、分數和佔領時間。
    • 附接線圖的組裝手冊。
    • 第一塊開發板(Heltec V4.3,2026 年 10 月 20 日)在工作台上:能開機、啟動無線電、讀取按鈕,並在自己的小螢幕上玩完整場遊戲,包括炸彈模式(啟動、拆除、時間用完)。
    • 遊戲計時條:限時遊戲進行時,小螢幕底部的一條色帶顯示還剩多少時間,OLED 則顯示時鐘。軟體已完成,還沒在真正的螢幕上看過。
    • 情境傳給盒子的設定會一直重送,直到每個盒子確認收到,盒子現在也會回傳這個確認。僅軟體與主機測試,還沒在真正的開發板上試過。
    • 盒子管理選單裡的「綁定新場地」,可用配對碼把已綁定的盒子換到另一個場地。僅主機測試,還沒在真正的開發板上試過。
    • 盒子不再顯示場地的標誌:它的開機畫面是 Atalaia 的塔,這是建置時可以替換的一個檔案(正式發布的映像檔一律帶著這座塔,發布建置會檢查)。在工作台上,盒子記憶體耗盡的原因就是下載標誌。曾保留舊標誌的盒子會在第一次開機時把它刪掉(主機測試)。
    • 更大的分割表:盒子的兩個韌體區各 4 MB(映像檔原本佔了 2 MB 的 93 %),設定和金鑰留在原處。僅主機測試和建置,還沒燒錄到開發板上。使用舊分割表的盒子需要用 USB 燒錄一次;之後無線更新照舊。
    • Field Box 當作 iBeacon:從加入遊戲到遊戲結束,盒子會發出藍牙信標(每 500 毫秒一次,Wi-Fi 使用中時絕不發出),讓附近的手機能判斷玩家在哪一層樓或哪個房間。場地自己的識別碼由場地的加入金鑰推導而來,GM 可以依場地或依盒子關閉盒子的信標功能。盒子的內部記憶體在工作台上於加入遊戲時耗盡之後(Wi-Fi 失敗,接著看門狗重置)重新設計:在工作台上量得開機時有 241 KB 可用,開著信標玩遊戲時最低 102 KB,預算縮得太小時 CI 會讓建置失敗。還沒確認手機能不能聽到真正盒子的信標。
    • 更新或模式下載被拒絕或失敗之後,盒子的螢幕會在 8 秒後回到該狀態的畫面(在工作台上,被拒絕的訊息會一直停在螢幕上,直到有人看到)。僅主機測試。
    • 在正式發行版本中,盒子的序列主控台上,給盒子加入金鑰或啟動更新的指令(@joinkey、@update)需要管理員 PIN,沒有設定 PIN 時會拒絕;測試台版本為了測試台腳本保持開放。只有主機端測試,還沒在真實開發板上試過。
    • Field Box 的第一個工作台組裝(2026 年 10 月 31 日):一塊 Heltec V4 開發板,接上 2.8 吋 TFT、OLED、4×3 按鍵和隊伍按鈕,用散線連接、沒有外殼,和工作台上的控制器玩佔點模式。有照片和影片。
    • 大螢幕現在與小螢幕一致:佔領後開始計時的佔領條、持續增加的佔領時間,以及各隊的分數顯示在角落;適用於佔點、主站與衛星(標題為「主站」/「衛星」,主站顯示隊伍總分)、漸進佔點與 VIP / 護送。已在工作台上看到佔領模式的畫面(影片在組裝頁面);其他三個模式只有韌體參考圖與測試。
    • 大螢幕開機時會顯示啟動畫面,內含塔與韌體版本,和小螢幕一樣,不再空白到第一個遊戲畫面出現。僅有主機測試與一張參考圖,尚未在第一塊工作台開發板以外的板子上確認。
    • 不穩定的 I2C 匯流排不再讓盒子重新啟動:按鍵、小螢幕、NFC 讀卡機與電池電量計改用較新的 ESP-IDF 驅動程式,有逾時、匯流排重設與退避機制,會把故障的零件先擱置,所以壞掉的按鍵只會被當成沒有按鍵,遊戲照常進行。重新啟動現在會回報真正的原因(電源、欠壓、軟體、當機、看門狗),不再一律是「電源」,GM 控制台會顯示「有盒子當機並重新啟動」。這是在工作台上發現的:焊點不良的按鍵讓一塊板子三分鐘內重啟六次。只有主機測試;修正後的工作台測試尚未進行。
    • 放不下的螢幕文字在檢查模式時會被拒絕,繪製失敗的文字會顯示「?」而不是空白(過去四種語言的長文字在盒子上會悄悄變空白)。已在電腦上測試。
    • 數量為一時使用單數(「1 ponto」,而不是「1 pontos」):盒子螢幕、App、GM 控制台與工作人員頁面皆然。已在軟體中測試。

    下一步,以及在等什麼

    • 一個組裝好的盒子,跑完一場 2 小時的社團遊戲,中途不必重新啟動。
    • 在真正的螢幕上看到計時條。
    • 在真正的開發板上試設定重送和換場地。
    • 用真正的手機聽 Field Box 的信標,並在加入遊戲時用新的記憶體預算啟動 Wi-Fi。
    • 在真正的開發板上燒錄新的分割表(用 USB 燒錄一次,不必清除,針對使用舊分割表的盒子)。
    • 強化過的正式發行映像(快閃記憶體加密、安全啟動):目前只寫成計畫,沒有建置,也沒在任何開發板上試過。
    • 在按鍵接線不良的板子上試試 I2C 故障處理,並在第一塊工作台開發板以外確認啟動畫面與新的螢幕。

    關卡:一個盒子跑完一場 2 小時的社團遊戲,中途不必重新啟動。尚未通過,要等到有組裝好的盒子做到。

  3. 軟體已完成

    2 · 場地網路

    LoRa 上的 Skirmesh-RF、場地控制器、API、GM 控制台和一組模式,已在軟體中測試;在工作台上,真實開發板透過無線電和控制器玩完整場遊戲,工作台上發現的問題已在軟體中修正。正在等場地上 5 個組裝好的盒子。

    已完成的部分

    • 加密的 Skirmesh-RF 無線電協定,以及 USB 無線電數據機。
    • 附 API 的場地控制器。
    • 主辦控制台,附記分板。
    • 用 NFC 卡或 QR code 加入遊戲。
    • 盒子韌體和控制器之間的通訊。
    • 一組模式:全佔點(同時守住所有盒子才得分)、最後一人(只剩三個據點之一時開始落敗倒數)、炸彈模式中各隊自己的啟動密碼,以及密碼附加規則(按鍵密碼可以給分、給提示或解鎖,並告訴 GM 是誰用的)。
    • 以上都已在模擬器、仿真器和電腦上測試過,包括整場遊戲;在工作台上,真實開發板透過無線電和控制器玩完整場遊戲:邀請、佔領、以代碼配對、無線更新、取得缺少的模式。
    • 盒子先聽再說:每個盒子發送前先確認頻道空閒,減少訊息碰撞。在模擬器中,20 個盒子的場地收到 89 % 的更新,原本是 65 %。
    • GM 在全佔點中也可以設定或釋放盒子的擁有者,和其他模式一樣。
    • 控制器可以把自己的無線電訊框一個一個、隔開時間送出。已經做好,在場地測試決定之前先關閉。
    • 無線電拒絕韌體更新的提議時,Pi 控制器會立刻讓更新失敗。
    • 設定好的盒子可以回到 Wi-Fi 設定:從需要管理員 PIN 的選單項目,或 USB 主控台的指令。設定頁有英文、葡萄牙文、德文和繁體中文,手機會自己開啟它。
    • 控制台的「遊戲」分頁會顯示給玩家的記分板 QR code。
    • 情境可以用德文和繁體中文撰寫,目標名稱也包括在內。
    • 破壞(Sabotage),新的模式:炸彈一回合接一回合,直到遊戲時間結束。進攻方啟動,防守方拆除;爆炸為進攻方得一分,拆除為防守方得一分,之後盒子休息,下一回合開始。得分較多的隊伍獲勝,同分為平手。已在模擬器和測試中,也在 Field Box 的預設遊戲裡;還沒在真正的開發板上試過。
    • USB 無線電數據機的小螢幕說葡萄牙文、英文、德文和繁體中文,和盒子一樣。僅主機測試,還沒在真正的開發板上試過。
    • GM 控制台的表單會保留主辦輸入的內容直到儲存:玩家報到或控制台的時鐘不再把已儲存的值放回去。
    • 更換場地頻道不再讓空閒的盒子失聯:控制器會告訴它們它去了哪裡(一種新的加密無線電訊息 MOVE,在舊頻道上說三次),「尋找盒子」可以掃過最近四個頻道,找出錯過的盒子。這是在工作台上發現的:一次無線電掃描移動了頻道,閒置的盒子就什麼也聽不到了。已在兩種控制器、模擬器和盒子的程式碼中完成;兩塊開發板上的檢查還沒做。
    • 開始、暫停或繼續大約一秒內就會送到盒子,而不是最多 30 秒:控制器會在 1、2.5、5 和 10 秒後把狀態當作 TIME 訊息再送一次(在工作台上,有個盒子晚了 21 秒才知道遊戲開始)。兩塊開發板上的檢查還沒做。在無線電佔用時間模型中,重送、MOVE 和一次掃描,讓控制器在典型的一小時內於預設子頻段多佔用約 2 秒。
    • GM 控制台會說明更換頻道對空閒盒子做了什麼(三次 MOVE 已說了幾次,然後是控制器已經移動),設定頁有「尋找盒子」按鈕,顯示一次掃描的結果。在占空比低於 10 % 的子頻段,每小時的掃描次數有上限(子頻段預算的 5 %),被拒絕時以及下一次何時可行,控制台都會說明。僅軟體,兩種控制器都有。
    • 預測分數會跟著佔領走:盒子的兩則 STATE 訊息之間,控制器會繼續為佔領事件所指的隊伍計分,直到盒子的下一則 STATE。在工作台上,佔領後緊接著遺失一則 STATE 時預測會出錯;有了這項變更,同樣的工作台設定通過了,盒子的扣分也在工作台上檢查過。
    • 盒子的遊戲結束會結束遊戲:在控制器上沒有場地邏輯的模式(破壞的時間限制、炸彈),遊戲中任一盒子送出的第一個 game.end 就會結束遊戲,以該盒子指定的勝方或平手收場。在炸彈 / Rush 中,爆炸現在會結束遊戲,由啟動炸彈的隊伍獲勝;拆除則不會。這是在工作台上用破壞模式發現的,炸彈的爆炸也在那裡檢查過。
    • 被錄下來的無線電指令不能再於日後重放:每個接收端(盒子、USB 無線電模組和兩種控制器)都為每個發送端保留一個重放視窗,盒子會拒絕比它最後套用的更舊的開始、暫停、繼續、結束或 TIME。遺失了世代(epoch)紀錄的盒子會抽一個新的世代,而不是重複使用 nonce。空中傳輸的格式沒有改變:舊盒子繼續可用,但在更新之前仍然暴露。已在模擬器和電腦上測試,C、Python 和 Dart 共用同一組測試向量;還沒在真實開發板上試過無線電重放。
    • 安全審查帶來的場地控制器強化:限制請求大小;開啟 HTTPS 時,GM 和玩家的權杖在一般 HTTP 上被拒絕(控制台在 https://<控制器>:8443/console/ 開啟);場地的 MQTT 走 TLS(8883 埠;Pi 上未加密的 1883 只在本機回送位址);工作人員 ATAK 串流使用 TLS;HSTS;Pi 上強化過的服務單元;經簽署模式的撤銷採失敗即封閉(清單遺失或無法讀取時不安裝任何東西;離線的控制器沿用最後一份清單 30 天)。已在電腦上測試,還沒在場地上的真實 Pi 或手機上試過。
    • 遺失紀元(epoch)儲存、因此以隨機高紀元回來的盒子,現在找得回來:收不開 HELLO 或 TIME 的接收端會搜尋紀元範圍的其餘部分(每次搜尋一段,在既有額度內),聽到這種盒子的控制器則用新的 CMD 訊息把它的紀元告訴其他裝置,這個訊息只能調高紀元。沒有紀錄而繼續的遊戲,控制器的紀元也從隨機值開始,所以 nonce 不會重複。舊盒子會忽略新訊息。在模擬器與電腦上測試,尚未在真實電路板上試過。
    • 第二次遺失紀元儲存時,不會再抽到更低的紀元:盒子、Pi 和手機控制器會在每把金鑰的紀錄之外,另外記住自己用過的最高紀元,抽取從它之上開始;已在某場遊戲中發射過的控制器,不會再以舊節點編號被重新邀請(它會拿到新的編號);Wi-Fi 道具現在也會收到指出控制器紀元的 CMD 訊息,並轉給它的 I/O 模組(兩種控制器都是)。RFC 0001 修訂 25。在模擬器與電腦上測試,尚未在真實電路板上試過。
    • 模式的 rand() 現在除了遊戲種子與節點編號,還由遊戲金鑰設定,所以玩家從 API 看到的內容無法再推算出來(駭客終端的密碼、標靶時窗的隊伍),遊戲種子也不再顯示給玩家和記分板。同一場遊戲重播結果相同,但在此變更前錄下的遊戲會重播出不同的隨機值:不要在遊戲進行中更新盒子。C、Python、Dart 共用測試向量;尚未在電路板上試過。
    • Lua 沙箱補上了記憶體檢查工具審查發現的漏洞:表格函式、協程與長串回呼都會計量,ESP32 的 C 堆疊深度有上限,超出範圍的節點編號或計時器不再繞回。堆疊數值是計算出來的,尚未在電路板上量測。
    • 天線增益成為編譯選項(--antenna-dbi,0 到 20 dBi,預設 2):裝了較強天線的盒子會把傳導功率降低相同的增益,並向下取整,讓輻射功率維持在子頻段的限制內。僅主機測試。
    • 即時串流的存取代碼不再出現在網址:控制台把它放在標頭,App 放在 Authorization 標頭,控制器與場地伺服器的日誌會把網址中的代碼值遮蔽(舊網址在過渡期內仍可使用)。日誌曾被分享出去的場地,應更換 GM 與唯讀代碼。
    • 沒有玩家編號的隊伍成績,現在兩種控制器也保存 365 天(遊戲紀錄 90 天),GM 可唯讀查看。已在電腦上測試。
    • 一份從零件到盒子加入遊戲的無線電數據機設定指南:現成版本或自行編譯、在 Windows、Linux 與 macOS 上燒錄、連接埠、檢查項目與疑難排解表(Set up the radio modem,英文)。已在工作台上試過,控制器在 WSL2 的 Docker 中執行;尚未在 Raspberry Pi 或 macOS 上試過,也未在場地使用。
    • 遺失 epoch 紀錄的控制器,會從下限之上空間的下半段抽取新的 epoch,並保留餘量(若 epoch 檔案不見則餘量更大),因此連續遺失十四次以上也不會用盡範圍。這原本看似不穩定的測試,其實是產品的錯誤。已在電腦上測試;Field Box 本身的抽取方式稍後跟進。

    下一步,以及在等什麼

    • 無線電開發板,以及 5 個組裝好的盒子,用來做場地測試。
    • 用 20 個盒子做場地測試,比較開啟和關閉「先聽再說」。
    • 是否開啟控制器的間隔送出,由 20 個盒子的場地測試決定。
    • 在兩塊開發板上檢查:更換頻道後閒置的盒子還在,開始大約一秒內就送到(操作手冊已寫好)。
    • 在真實開發板和真正的 Pi 上試重放視窗和強化後的控制器(在測試台上把錄下的指令重放一次)。
    • 在兩塊桌面開發板上清除盒子的紀元儲存,確認它會被重新找到,連做兩次,並讓原本的領導控制器重新加入(操作手冊已寫好)。

    關卡:在 CQB 場地和戶外場地各用 5 個盒子,佔領一次都沒漏掉。尚未通過。

  4. 軟體已完成

    3 · Android 與玩家

    Android 道具、I/O 模組、玩家 App 和需要手機的模式:軟體已完成,包括 iOS(已在 iPhone 上檢查)。場地測試在等真正的手機和 I/O 模組。

    已完成的部分

    • App:給玩家、裁判和 GM 使用,有葡萄牙文和英文,支援 Android 和 iOS(iOS 版已在 iPhone 上通過檢查清單)。
    • Android 手機可以當作盒子,任何模式都能玩並顯示模式自己的畫面,並透過 QR code、NFC 卡或文字加入遊戲。
    • 手機當場地控制器:軟體已完成,正在等真正的手機;它自己執行遊戲和場地的各項服務。
    • I/O 模組:韌體把一塊 Heltec 開發板的按鈕、按鍵、燈、警報器、NFC 讀卡機和 LoRa 無線電借給手機使用。
    • 使用手機和標籤的模式:擊殺確認、復活與命數、玩家報到、醫護包和印鈔廠。
    其餘已完成的部分,依主題分類

    模式與畫面

    • 擊殺確認、復活與命數和玩家報到會讀取玩家經簽署的 NFC 標籤。
    • 醫護包:中彈的玩家掃描自己的標籤並按住按鈕來接受治療,治療次數有限。
    • 印鈔廠:某隊守住工廠時工廠會產生金錢;玩家用自己的標籤收取,再到另一個盒子存入,場地控制器記住每位玩家身上帶了多少。
    • 以 YAML 描述、由 Field Box 和 App 以相同方式繪製的模式畫面。

    玩家與裁判

    • 玩家在場地掃描印出來的海報就能報到(不需要帳號、不需要網路),說明要用哪幾把槍,並看到自己是否已通過測速。
    • 報到測速:能量、各級別的限制、抽查、由裁判簽署的測速值。裁判依照「待測速槍枝」清單作業,他們簽署的測速值會把每把槍標為通過或拒絕;他們也有槍枝登記冊和玩家標籤。
    • 玩家可以在遊戲中分享自己的位置,由控制器決定誰看得到。
    • 自己架設控制器的場地或社團,可以在 App、記分板和海報上顯示自己的標誌、桌布和顏色,並幫自己的隊伍取名字、加隊徽。
    • 檢查報到海報在印出後被更改時,GM 控制台會通知。
    • 裁判和測速畫面說的就是 App 實際做的事,限制清單也已翻譯。
    • App 用 Android Keystore 封存更多機密資料:場地伺服器金鑰、玩家的機密和伺服器登入。
    • 玩家的 NFC 標籤由場地控制器簽署,可從 GM 控制台、手機控制器或裁判的 App 寫入。裁判不必再為此持有場地金鑰。
    • 槍枝標籤:App 顯示、分享或列印每把槍的 QR 貼紙,GM 控制台可為所有已報到的玩家列印。裁判的待測佇列會掃描它們。
    • 室內位置:GM 在平面圖上放置 BLE 信標,聽到信標的手機會回報自己所在的房間,而不是 GPS。Android 上軟體已完成並以模擬測試,還沒用真正的信標試過。在 iPhone 上,一個建立在 Apple CoreLocation 上的外掛,在 App 開在畫面上時做同樣的事(否則用 GPS 和最後的樓層);它已寫好並在 CI 上編譯過,還沒在 iPhone 上試過。
    • App 可以從記分板的 QR code 跟上一場遊戲,手機控制器以自己的場地 CA 提供 HTTPS 時也可以。軟體已完成,還沒在真正的手機上試過。
    • 玩家選擇自己在哪一個樓層,並看到場地平面圖和他們可以看到的位置。
    • App 中的遊戲歷史:玩家參加過的遊戲,最新的在最前面。
    • App 可用 Google、Microsoft、Apple 或通行金鑰登入,並有帳號畫面。Android,以及以 Swift 寫的 iOS(社群登入的瀏覽器用 ASWebAuthenticationSession,通行金鑰走 Apple 的平台憑證;iOS 上的通行金鑰要在建置時選用,且需要付費的 Apple 開發者計畫)。iOS 這一部分由 CI 編譯,還沒在 iPhone 上執行過;App 的登入還沒在真正的手機上試過(場地伺服器那一側已用 Google 和 Microsoft 試過,見第 4 階段)。
    • 玩家的場地平面圖可以顯示場地的網格和玩家自己所在的格子。
    • 裁判登記複製品時,可以綁定一張 NFC 貼紙。
    • 裁判的手機不再保存場地加入金鑰:只有道具(它的加入卡)和手機控制器會保存,升級時會從裁判的手機清除。
    • 固定場地自己 CA 的記分板連結會依場地記住,CA 更換時就忘掉。
    • 進行中的遊戲在玩家畫面開著時,Android 前景服務會帶著通知讓 App 持續執行,所以 App 關閉或螢幕熄滅時震動提示仍會響。iOS 沒有。還沒在真正的手機上試過。
    • Field Box 也算信標:已放置的盒子會和 GM 自己的信標一起登記為信標,已經在分享位置的手機會在遊戲中接收登記表的變更。僅軟體,還沒用手機和真正的盒子試過。
    • App 裡的隱私聲明:帳號上次看到的是另一個版本時顯示「閱讀並確認」,聲明以 App 的語言顯示,什麼都不會被擋住。App 在顯示聲明之後可以建立帳號(密碼或社群登入),並有「我已年滿 16 歲」的勾選框;未滿 16 歲的玩家不需要帳號,可在場地報到。社群登入註冊會附上當事人看到的聲明版本,對較舊的自架伺服器,登入也仍能運作。託管中樞各場地之間的測速連結(一次性代碼)只在託管模式下顯示。僅軟體。
    • 報到時的卡片檢查:場地檢查會員資格時,報到會保持待處理,直到裁判或 GM 手上拿著實體卡片勾選「已見卡片,相符」;之後會員編號會從控制器刪除(只保留結果和到期日),沒有卡片時也可以放行,理由會記錄下來,但絕不記錄編號。已在控制台、App 的裁判佇列和兩種控制器中完成。僅軟體。
    • 分享位置是報到時一個獨立、預設不勾選的選項(在 App 和控制台的手動報到中),並說明誰看得到;拒絕既不會擋住報到,也不會擋住遊戲,玩家隨時可以開啟或關閉。沒有它,控制器會拒絕位置。僅軟體。
    • App 的安全審查:固定的場地 CA 剛好是一張憑證;Android 上沒有全 App 的明文 HTTP(只有本機回送位址、模擬器的主機、192.168.4.1 和 atalaia.local);正式版 APK 絕不會誤用除錯金鑰簽署;社群登入的票證綁定在 App 實例上。還沒在真實手機上試過;正式版簽署金鑰仍要由維護者建立。
    • 玩家的事件清單與遊戲紀錄不再顯示對玩家沒有文字說明的例行事件(盒子確認設定、節點上線或離線、標籤掃描、標靶中彈),不再顯示原始的類型名稱。

    Android 道具與 I/O 模組

    • Android 道具透過場地的 Wi-Fi 加入控制器的遊戲,或透過 I/O 模組用無線電加入。
    • I/O 模組的韌體會透過 USB 或藍牙,把一塊 Heltec 開發板的隊伍按鈕、按鍵、燈、警報器、NFC 讀卡機、外殼開關和 LoRa 無線電借給手機使用。
    • App 會自己重新連上遺失連線的 I/O 模組。還沒用真正的 I/O 模組試過。
    • Android 道具像盒子一樣,向自己的控制器取得已簽署的模式包。軟體已完成。
    • GM 控制台可以用無線電把 I/O 模組的設定送過去:四個按鈕的顏色、LED 環的亮度、音量,以及外殼開關是否回報。模組像驗證其他指令一樣驗證它,把設定存在自己的快閃記憶體並回應;控制器會一直重送,直到收到回應。以前這些是在建置韌體時決定的。軟體已完成,並以電腦上的模組程式碼測試,還沒用真正的模組試過。
    • Android 道具的盒子扣分現在會送到控制器,經由 Wi-Fi 連線和無線電連線都可以。僅軟體。

    手機當場地控制器

    • 遊戲引擎:在共用核心上執行模式的 field.lua,附 MQTT broker 和位置過濾器;REST API、即時串流和 MQTT 主題;重新啟動後保留遊戲;加入資料。
    • 在它的 Wi-Fi 上的 Android 道具、以 I/O 模組當作它的無線電、使用玩家權杖的場地報到、「待測速槍枝」清單和玩家位置。用和 Pi 控制器相同的合約測試案例檢查,並在電腦上搭配 I/O 模組和 Field Box 自己的程式碼執行。
    • 它的畫面:App 首頁上的角色、螢幕關閉時仍持續運作、由 App 提供的 GM 控制台,以及以手機上建立的場地 CA 提供 HTTPS。
    • 場地平面圖(每層一張平面圖、它在地圖上的位置、含場地邊界的地圖標記,以及從地圖載入的場地,因此越界警告在這裡也能運作)和無線電頻道,可透過 I/O 模組尋找安靜的頻道。
    • 透過無線電操作盒子:以密封邀請把盒子邀進下一場遊戲;遊戲結束時通知盒子,即使手機重新啟動後沒有遊戲金鑰也可以;用盒子顯示的代碼或手機以 NFC 寫入的場地卡綁定新盒子;在遊戲之間更新韌體(透過 I/O 模組或 Pi 的 USB 無線電數據機,手機的無線電送不出去時會說明原因)。
    • 預設組合、上傳的模式和經簽署的模式套件(會送給缺少它們的盒子)、在手機上編譯的劇本、遊戲中的角色模式套件,以及隊伍名稱和隊徽。
    • Pi 其餘的功能也有:故障轉移(手機和 Pi 可以互為備援控制器)、與場地伺服器同步(有網路時上傳遊戲、紀錄和分數;從那裡取得報名名單、場地品牌和劇本庫)、遠端 GM 和 ATAK 資訊。
    • GM 控制台可在手機上使用:報到和裁判的表格會上下堆疊,頁面不必左右捲動。
    • 手機控制器自己的畫面可以匯入報名名單(用 Android 的檔案選擇器選 CSV 或 JSON 檔),不需要 GM 控制台。
    • 備援控制器會從它的加入資料取得盒子的信標設定(場地開關、被停用的盒子、房間)和盒子的位置,因此故障轉移後,手機拿到的信標登記表相同;已經在備援控制器上開啟的控制台會立刻移動盒子的標記,不必重新載入。僅軟體,兩種控制器都有;標記移動已在無頭瀏覽器中測試。
    • 手機控制器跟上 Pi 控制器的安全審查:已簽署模式的撤銷在失敗時安全處理(每個模式有版本下限,離線手機有天數上限,都在「模式套件」畫面設定),工作人員的 ATAK 資料可用 TLS 並釘選憑證機構。已在軟體中測試;尚未在場地的手機上試過。

    iOS

    • 專案已在儲存庫中,CI 會在 Mac 上建置,也已在 iPhone 上執行過。
    • 2026-10-26 已在 iPhone 上通過裝置上的檢查清單:12 項自動檢查,加上手動檢查:用相機掃描 QR、以場地海報透過 HTTPS 報到、App 開在畫面上時分享位置、出界警告和震動,以及 atalaia:// 連結。
    • 室內信標:一個建立在 CoreLocation 上的 Swift 外掛,和 Android 使用相同的通道,只需要定位權限,App 開在畫面上時運作。它在 CI 上能編譯;還沒有人在 iPhone 上執行過。

    下一步,以及在等什麼

    • 用真正的手機和 I/O 模組進行的場地測試(計畫階段 G)正在等硬體。到目前為止,App 已在 Android 模擬器和連上工作台控制器的 iPhone 上執行過,I/O 模組的韌體也只以它自己的程式碼在電腦上跑過。
    • 手機當場地控制器,正在等真正的手機。
    • 在 iOS 上,NFC 需要付費的 Apple 帳號;道具和手機當場地控制器仍只支援 Android。
    • 在 iPhone 上試信標外掛(要在 Mac 上建置),並用真正的信標試,Android 也一樣。
    • 在 iPhone 上試 iOS 的網站登入(社群登入的瀏覽器與通行金鑰)。
    • 用真正的手機和 I/O 模組試記分板 QR code、樓層選擇、遊戲歷史和 I/O 模組重新連線。
    • 在真正的手機上試 App 的登入。
    • 在場地上和真實手機上試卡片檢查、報到時的位置選項、固定的 CA 以及 App 的註冊帳號。

    關卡:一場遊戲混用 ESP32 和 Android 道具,沒有任何問題。

  5. 軟體已完成

    4 · 場地伺服器與進階玩法

    場地伺服器、遊戲排程與報名、自訂劇本、進階模式、ATAK。軟體的每個步驟都已完成;用 Google 和 Microsoft 登入已在測試伺服器上用真正的登入服務試過。還需要一台真正的伺服器、託管模式的上線條件和硬體上的測試。

    已完成的部分

    • 進階模式:主站與衛星、駭客終端、VIP / 護送,以及標靶時窗的邏輯。
    • 自訂劇本:在場地控制器上的執行環境、YAML 劇本的編譯器、GM 控制台中的編輯器,以及 App 中的任務目標。
    • ATAK 資料:盒子和據點顯示在 ATAK 地圖上,在場地上,以及透過場地伺服器提供給不在場地的工作人員。
    • 場地伺服器:附兩步驟驗證碼的帳號、個人資料權利、控制器同步、測速登記冊、遊戲歷史和劇本庫。
    • 遊戲排程與報名:附公開場地頁面、行事曆資料訂閱和社團檔案。
    • 託管模式:在一台伺服器上服務多個場地,彼此隔離,並附它的部署。
    其餘已完成的部分,依主題分類

    模式

    • 主站與衛星:和主站一起被守住的衛星會提高主站的分數;主站易手會讓衛星恢復中立。
    • 駭客終端:按鍵上的一道謎題,破解後會揭露一組密碼或佔領這台終端。
    • VIP / 護送:一隊護送自己的 VIP 或一支有 GPS 的手機到撤離區;檢查點盒子被守住時會得分;位置資料只留在場地控制器和手機上。
    • 標靶時窗的規則:標靶顯示某隊顏色時打中它,就替那一隊得分。標靶擴充模組還沒做出來。
    • 核心中的地理工具:給每個腳本用的距離和區域計算,在每個平台上都完全相同。

    自訂劇本

    • 執行環境:劇本在場地控制器上執行,告訴內建任務目標套件的盒子要扮演什麼(一個要佔領的點、一組密碼、要掃描的標籤或卡片、一個炸彈點);盒子回報,劇本計分。
    • 編譯器:一個包含七種任務目標類型的 YAML 劇本,有相依關係、揭露和時間區間,檢查時會標出每個問題的位置並加以說明,再從命令列編譯。
    • 在 GM 控制台中:編輯器會在主辦輸入時列出每個問題,並安裝劇本;盒子加入時會拿到劇本的名稱。
    • 在 App 中:玩家看到給自己的任務目標,附名稱和各自的進度,隱藏的目標要等揭露後才看得到;每個小隊可以有自己的任務鏈,一次只有一個任務目標,完成後才揭露下一個,可以告訴整個小隊或只告訴小隊長。

    ATAK 與場地地圖

    • ATAK 資料:盒子和據點透過場地 Wi-Fi 顯示在 ATAK 地圖上,用佔領者的顏色標示,只要給場地圖片的兩個角落標上地圖位置就能定位。
    • GM 可以在場地平面圖上標出安全區、各隊的復活點和 HQ、停車場、急救站和任務目標,以圖釘、圓圈或區域呈現,每一個都可以設定給所有人、給某一隊或只給主辦看,顯示在控制台和 ATAK 上。
    • 場地可以從地圖載入:GM 可以從自己所在的位置或用地點名稱找到場地,在 OpenStreetMap 上描出場地的外框,瀏覽器就用 OpenStreetMap 的資料畫出場地圖片,疊在該國的開放空照影像上(葡萄牙本土、西班牙、法國含海外領土、荷蘭、比利時、盧森堡、瑞士、列支敦斯登、德國十一個邦、波蘭與捷克)。外框就是場地邊界,外面的區域會變暗。
    • 玩家離開邊界時,手機會用自己的 GPS 以橫幅和震動提醒,不會傳送任何資料。
    • 玩家位置絕不會給所有人看,只有在場地開啟時才會傳給工作人員的裝置。不在場地的工作人員可以透過場地伺服器拿到同樣的資料,連線經過加密,每台裝置都有一張由場地發出、可以立即撤銷的憑證;位置只會給 GM 或裁判。
    • 控制台中的多樓層場地:每個樓層一張平面圖,每個盒子放在自己的樓層。
    • 還沒用真正的 ATAK 手機試過,也還沒在真正的場地試過。
    • 漸進式佔點讓某個盒子成為目前啟用的盒子時,ATAK 上會標示出來。
    • 手機當場地控制器時,場地地圖頁面也能用。
    • ATAK 會把室內的玩家標在他們的信標位置,並在備註中寫上房間。
    • ATAK 裡的網格,以及可列印的網格地圖。
    • 遠端 GM 在玩家分享位置時看得到他們的位置。
    • ATAK 裝置憑證有效 90 天(原本是 7 天),工作人員的 ATAK 頁面會在憑證 14 天內到期時提醒。
    • 場地可以關閉控制台的地圖取得功能(設定,地圖取得):關閉後,「從地圖載入場地」不會連到 OpenStreetMap、Overpass、Nominatim 或空拍影像。預設為開啟。

    場地伺服器、帳號與資料

    • 它的骨架:資料庫、資料庫遷移和健康檢查,在自己的容器中。
    • 帳號:密碼、主辦和裁判必須使用兩步驟驗證碼、各場地的登入工作階段和角色。
    • 個人資料權利:查閱、匯出、更正、刪除、同意紀錄和每日依保存期限清除。
    • 控制器同步:場地控制器把它們的遊戲、紀錄和分數推送上來,離線優先,重送也安全。還沒用真正的 4G 連線試過。
    • 測速登記冊:經簽署的測速值經過驗證後以簽署原樣保存,只用公鑰,經同意後可在場地之間分享。還沒用真正的測速器試過。
    • reset-totp:營運者可以重設遺失驗證器的帳號的兩步驟驗證碼。
    • 場地控制器會為名單上的玩家拉取其他場地的測速紀錄,只有在每位玩家同意時才會拉取。這些紀錄與自己的測速值分開保存,也絕不會被判定。
    • 控制器從場地伺服器取得場地的設定和品牌,更改會立刻傳到 Pi 和手機控制器。軟體已完成。
    • 可用 Google、Microsoft 或 Apple 登入,也可用 passkey。密碼是選用的;工作人員仍然需要第二個驗證因素。Google 和 Microsoft 已在測試伺服器(tests.atalaia-project.link)上用真正的登入服務試過;Apple 還沒試。
    • 工作人員的帳號頁面,每個人在這裡管理自己的登入方式:passkey、連結的帳號、密碼和兩步驟驗證碼。
    • 情境、預設遊戲和賽程的變更會立刻送到控制器。
    • 場地保存資料多久是場地的設定:遊戲歷史和測速紀錄各有保存期限,可在控制器、GM 控制台或場地伺服器的工作人員設定頁設定:遊戲歷史預設 90 天(不含玩家 ID 的隊伍成績 365 天),測速紀錄 365 天。每日清除會刪除超過期限的已結束遊戲,而且絕不會在場地伺服器收到全部資料之前刪除。沒有用到的「每個帳號保存期限」欄位已移除。
    • 在場地控制器上清除某位玩家時,下次同步會自動傳到場地伺服器(絕不含姓名),伺服器也會清除那位玩家的測速紀錄。
    • 隱私聲明、資料處理協議和跨場地分享條款的範本,有葡萄牙文和英文(協議另有葡萄牙語 pt-PT 版),還有資料保護影響評估的範本:它們寫明維護者的律師在 2026 年 10 月 30 日認可的立場(帳號以契約為基礎、最低年齡 16 歲,報到時檢查會員卡並刪除編號,違規依正當利益處理,位置分享依同意,不設資料保護長)。仍然是各場地自己要填寫的範本,不是針對某個場地的法律意見。
    • 場地伺服器會發布營運者提供的隱私聲明,以網頁和 API 提供四種語言,聲明版本改變時再次向帳號顯示(帳號以契約為基礎,而不是同意)。不會封鎖任何功能:匯出和清除仍可使用。已在電腦上測試。
    • 社群帳號在建立後馬上到帳號頁選擇使用者名稱(可略過;只有當事人要求時才使用登入服務提供的名稱)。任何帳號都可以用自己的登入方式改名,同一個人的兩個帳號在當事人證明兩者都是自己的之後可以合併(絕不會併入有工作人員角色的帳號,也不會從那樣的帳號併出)。缺少同意的錯誤會顯示在核取方塊旁。已在電腦上測試;選擇使用者名稱的步驟和合併還沒在測試伺服器上試過。
    • 社群登入註冊會記錄當事人實際看到的隱私聲明版本:伺服器會拒絕過期的版本,並在建立帳號前再檢查一次。已在電腦上測試。
    • 每日的保存期限清理也會刪除匿名化的帳號(刪除或合併後留下的),只要不再有任何資料指向它們。已在電腦上測試。
    • 更改帳號的登入方式需要第二因素:新增、重新命名或移除 passkey、設定或關閉兩步驟驗證碼、更改密碼、連結社群登入和確認合併,除非這個連線已通過 TOTP 或 passkey 的加強驗證,否則一律拒絕(單靠社群登入不算);合併絕不會把 passkey 帶進工作人員帳號。工作人員帳號頁和 App 會先要求這個加強驗證。已在電腦上測試,還沒用真正的登入服務試過。
    • 場地伺服器自己的安全審查:限制請求內容大小(超過 1 MiB 回 413,上傳為 4 MiB);「沒有這個帳號」和被拒絕的授權給出相同回應;場地匯出只含該場地的稽核紀錄;App 查詢場地時遵守公開頁面的開關;必須設定公開網址;社群登入的簽發者與其主體一起儲存;代理伺服器後面的一般 HTTP 請求會被導向 HTTPS;健康檢查只回答 ok。部分是在預覽伺服器上發現的。
    • 帳號以契約為基礎,而不是同意:註冊時會記錄顯示的是哪個版本的隱私聲明,並附「我已年滿 16 歲」的勾選框(在工作人員頁面和 App 中);不保存出生日期;沒有發布聲明時,註冊是關閉的。舊的同意已轉成聲明紀錄。已在電腦上測試。
    • 隱私審查的程式部分:稽核紀錄的網路位址 180 天後刪除(可設定);24 個月沒使用的帳號會先收到警告,30 天後匿名化;某人的刪除或撤回的測速分享同意會傳到其他場地的控制器,它們會丟棄副本;刪除紀錄以雜湊值存在資料庫之外的紀錄簿,還原後會再套用一次;新的工作人員頁面只把累犯標示為提示(單純的警告絕不計入),禁賽預設 12 個月後結束;遊戲歷史連同玩家 ID 保存 90 天,不含玩家 ID 的隊伍成績保存 365 天。已在電腦上測試。
    • 場地在分享測速紀錄之前,要先接受跨場地分享條款(由場地管理員在設定頁接受);版本、日期和帳號都會記錄,條款改版時,分享會暫停,直到重新接受。場地是其玩家資料的控制者,託管中樞的營運者是它的處理者,而共同分享的場地只在這一步是共同控制者。已在電腦上測試。
    • 維運人員可以用命令列為既有帳號設定密碼(set-password,輸入兩次且不回顯,不會出現在命令列中):給沒有第二因素、因此無法從網站更改登入方式的工作人員帳號的解法。

    遊戲、社團與工作人員頁面

    • 遊戲排程,每個場地有一個公開頁面,並提供它的遊戲的開放 iCalendar 和 JSON 資料訂閱(上面沒有個人資料)。
    • 這些遊戲的報名,可預先登記槍枝並取得報到票券:場地控制器會拉取名單並回報誰到場了。可從 App 報名;可匯入從其他平台匯出的報名名單(CSV 或 JSON)。
    • 社團檔案:名稱、顏色、標誌和隊徽、成員、一個預設關閉、附檢舉按鈕和管理機制的公開頁面。場地的品牌和儲存的隊伍會同步到它的控制器,讓社團的隊徽出現在每個存了它的隊伍的場地。
    • 遊戲歷史:每場遊戲的分數時間軸和事件紀錄;玩家和觀眾看到的進行中遊戲會延遲一分鐘,不含機密或玩家編號。每個場地有公開記分板(預設關閉)。
    • 場地的劇本庫和它的遊戲預設,以場地控制器的方式檢查,並由場地的每一台控制器安裝,包括備援控制器。
    • 給場地工作人員的網頁,有葡萄牙文和英文,手機也能用:以兩步驟驗證碼登入、遊戲歷史、劇本庫(存檔前顯示每個問題、修訂版本和預設)、裝置狀態,以及遠端 GM 的即時畫面和指令。已在無頭瀏覽器中測試,還沒在真正的伺服器上跑過。
    • 控制器會移除場地伺服器已封存或刪除的劇本或預設,除非還有遊戲在用。
    • 排程的工作人員頁面:列出、建立、編輯、發布和取消遊戲,時間以場地的時區顯示。
    • 報名的工作人員頁面:誰報了名、更改名稱、隊伍或聯盟編號、撤回報名,以及 CSV 匯出和匯入。
    • 可列印的比賽日名單頁面,並顯示控制器上次拉取的時間。
    • 對報名的工作人員操作:已付款或未付款(伺服器不處理付款)、缺席、移到另一場遊戲、恢復、編輯槍枝。已在無頭瀏覽器中測試,還沒在真正的伺服器上跑過。
    • 給工作人員的頁面:角色、同步金鑰、品牌、社團、平台連結、韌體和管理。
    • 遠端 GM 頁面即時更新,不必重新載入。
    • 報名和報到時會檢查協會會員資格:葡萄牙的場地使用 APD,其他國家可用任何協會或聯盟。
    • 場地設定的工作人員頁面:公開頁面、報到規則、會員資格、計速器分享和國家。
    • 初速檢測紀錄會顯示複製品超出上限多少,並標出累犯。
    • 場地人員用的頁面,可匯出場地資料並查看額度用量。
    • 以遊戲時間計的分數時間軸。
    • 社團頁面列出社團打球的場地,工作人員頁面也一樣。
    • 控制器自己就能匯入報名 CSV,不需要場地伺服器。
    • 名稱含有盒子畫不出的字時,控制台會發出警告:隊伍名稱、遊戲名稱、情境名稱和它的目標名稱。
    • 報名名單多了協會 ID 和會員資格到期日這兩個選用欄位,報名匯出檔也可以原樣再匯入。

    盒子與場地

    • 裝置狀態:依控制器傳來的資料,顯示每個盒子的電量、連線和韌體;場地控制器會回報變安靜或重新出現的盒子,以及低電量,有電量計的盒子也會自己回報。還沒在真實開發板上試過。
    • 只列出以受信任金鑰簽署之版本的韌體目錄,以及 Field Box 的無線韌體更新:GM 把經簽署的版本上傳到場地控制器,在兩場遊戲之間更新盒子,絕不在遊戲進行中更新;每個盒子透過場地 Wi-Fi 下載,用自己韌體內建的金鑰檢查簽章,安裝到備用槽位,如果新韌體無法啟動就回到舊韌體。軟體已完成,還沒在真實開發板上試過。
    • 用 NFC 場地卡、控制器的 USB 線或盒子顯示的 6 位數代碼把盒子綁定到場地,透過無線電配對。軟體已完成,還沒在真實開發板上試過。
    • 透過無線電邀請盒子加入下一場遊戲,不需要卡片或 QR code(加入資料以從場地加入金鑰衍生的金鑰加密傳送),而且一場遊戲要等每個角色都有盒子才會開始,除非 GM 選擇「仍然開始」。已在兩塊工作台開發板上搭配場地控制器測試。
    • 每場新遊戲都聽得到的盒子(無線電的 nonce 計數器現在依遊戲分開,這是在工作台上發現的修正),以及跟著遊戲變化(就緒、等待中、中立)並使用場地語言(英文或葡萄牙文)的盒子畫面。已在兩塊工作台開發板上測試。
    • 遊戲中途重新啟動的控制器會接續遊戲;遺失遊戲金鑰的控制器仍會透過場地無線電告訴它的盒子遊戲已結束;管理 PIN 碼輸錯時等待時間會越來越長,而且跨重新啟動累計,真實的盒子上沒有預設 PIN 碼。軟體已完成,還沒在工作台開發板上試過。
    • 遠端 GM:具有 GM 角色、以兩步驟驗證碼登入的主辦,可以看到進行中的遊戲,並開始、暫停、繼續或結束它,或送出訊息或模式指令,連線由場地控制器自己建立,只有在場地開啟時才會連線,每個指令兩端都有紀錄。
    • 控制台的「控制器」分頁列出遠端 GM 的狀態和它收到的每個指令。

    部署與託管模式

    • 部署:透過 Caddy 提供 HTTPS 和自動憑證、一個會產生所有機密的設定腳本、加密的每日備份,以及還原到全新資料庫。已在電腦上的 Docker 中測試,還沒在有真實網域的真正伺服器上跑過。
    • 託管模式:一台伺服器服務多個場地,每個場地在自己的資料庫結構中、使用自己的位址,底層有資料列層級安全機制,讓任何場地都看不到別的場地的資料,另有營運者用來匯出或刪除某個場地資料的指令。已在 Docker 中對 PostgreSQL 測試。
    • 它的部署:一個會建立中樞資料庫角色的設定腳本、每個場地使用自己的位址和只有啟用中場地名稱才能取得的憑證,以及加密備份還原後每個場地仍彼此隔離。已在 Docker 中測試,還沒在有真實網域的真正託管伺服器上跑過。
    • 託管模式:每個場地有配額、場地管理員可以下載的資料匯出,而且已刪除場地的連線會立刻關閉。
    • 託管模式:儲存空間額度,以及每個場地各自的自訂網域。
    • 代管模式:每個場地都有自己的資料庫角色,因此 SQL 注入不能再靠改變列層級安全原本使用的設定,切換到別的場地的資料。需要第二個 SQL 陳述式的一個缺口仍未關閉,並已寫在文件中。已在 Docker 中以 PostgreSQL 測試。
    • 代管模式:共享測速紀錄的場地,現在也能在同一個樞紐的各場地之間共享,透過需要同意的唯讀檢視;一個人用一次性代碼把自己在兩個場地的帳號連起來,不會用電子郵件或名稱去比對。已在 Docker 中以 PostgreSQL 測試。
    • 給預覽伺服器的唯讀即時展示:真正的場地控制器搭配三個模擬的 Field Box,不停地玩遊戲,輪流在開放場地和一棟虛構的三層樓建築裡進行(每層一張平面圖、十五個信標、十二位模擬玩家:六位用信標定位、五位用 GPS 並選了樓層、一位不確定),訪客可以看到 GM 控制台、記分板和玩家畫面,什麼都改不了,也沒有個人資料。自 2026 年 10 月 29 日起在 demo.atalaia-project.link 上線;它的玩家畫面以無頭瀏覽器測試。
    • 託管模式:整個中樞只用一個社群登入回呼(選用):營運者為每個登入服務註冊一個重新導向位址;中樞簽署狀態、在自己的登記冊中檢查場地,再交給場地自己的回呼。已在 Docker 中測試,還沒用真正的登入服務試過。
    • 給營運者的上線檢查清單:在任何場地可使用託管模式之前的六個條件(每個場地簽署的資料處理協議、分享條款、附件中且位於歐盟的每個次處理者、填好的隱私聲明、營運者若為自然人要有自己的文件,以及在真正伺服器上的驗證)。
    • 預覽伺服器(tests.atalaia-project.link)從 10 月 30 日起一直在執行這一切,並有自己的隱私聲明(版本 preview-2026-10-31:帳號以契約為基礎、16 歲以上、沒有資料保護長)。
    • 預覽伺服器每次啟動與更新都會自行安裝隱私權聲明(某版本的檔案缺少時會停止),線上展示會送出 HSTS,另有一組用完即丟的測試堆疊(代管中樞、假的登入供應商與場地控制器,只在 127.0.0.1)可針對今天的程式碼進行經授權的安全測試。

    下一步,以及在等什麼

    • 一台有網域的真正伺服器。
    • 託管模式的上線條件(每個場地簽署的資料處理協議、分享條款、填好的聲明),以及各場地填寫自己的聲明和影響評估。維護者的律師已在 2026 年 10 月 30 日認可法律立場;託管模式仍不提供。10 月 30 日的安全、無線電和法律工作,沒有任何一項在真實開發板或手機上試過:它們在軟體和預覽伺服器上執行。
    • 在硬體上的測試:真實開發板、真正的 ATAK 手機、真正的 4G 連線、真正的測速器。
    • 標靶擴充模組,標靶時窗的規則在等它。
    • 用真正的 Apple 試登入,並在測試伺服器上試選擇使用者名稱的步驟和帳號合併。
    • jogarairsoft.pt:維護者在 2026 年 10 月 28 日寫信給他們,提議整合(他們的活動、隊伍和 APD 交給我們;我們的遊戲資料訂閱、場地檔案、公開社團和成績交給他們)。正在等他們回覆;沒有承諾任何事。

    關卡:一場週末的軍事模擬遊戲從頭到尾都在 Atalaia 上進行。

  6. 軟體已完成

    5 · 社群

    視覺化模式編輯器、經簽署的模式套件、作為範本的模式登錄庫、德文和繁體中文、組裝指南。軟體的每個步驟都已完成。

    已完成的部分

    • 視覺化模式編輯器:模擬器裡的一個頁面,用積木組出一個模式(隊伍按住按鈕時會發生什麼、計時器、分數、畫面和音效、地圖上的據點、GM 指令、多個角色、GM 可以調整的設定,以及場地控制器跨盒子的邏輯)。它會隨著你的操作寫出模式的 Lua 腳本和清單,有葡萄牙文和英文,而且能離線使用,按一個按鈕就能立刻在模擬器中試玩這個模式。它的三個範例通過和手寫模式相同的測試。
    • 經簽署的模式套件:一個封存檔,像韌體版本一樣簽署。編輯器能自己產生模式的套件,並顯示模式金鑰會簽署什麼,以及簽署用的指令;簽署仍在作者自己的電腦上離線進行。
    • 場地控制器只用自己信任的金鑰安裝經簽署的模式,並顯示每個模式是誰簽署的、專案是否審閱過。
    • 每次修改都會跑一組沙箱逃脫嘗試測試;已經堵住兩個讓腳本超過時間限制的方法。
    • GM 控制台中的傳送缺少的模式:缺少遊戲模式的盒子會透過場地 Wi-Fi 從場地控制器取得經簽署的套件,只在兩場遊戲之間進行,遊戲會等它;盒子用韌體內建的金鑰檢查並保存套件。已在電腦上測試,還沒在真實的盒子上試過。
    • 在 GM 控制台中用積木組成的劇本:盒子、任務目標和誰看得到它們、什麼時候開放、什麼條件完成以及完成後給什麼,用滑鼠、觸控或鍵盤操作,手機上也能用。場地控制器會像手寫的一樣檢查並安裝它們。
    • 模式登錄庫,已準備好作為範本:附經簽署模式的 pull request 會自動檢查(它的簽章、原始碼是否就是被簽署的內容、授權條款、在模擬器中的測試),專案審閱過的模式會得到已驗證徽章,也就是專案自己的簽章,有了它模式才能送到盒子上。如何提交模式、審閱檢查清單、金鑰和管理規則都已寫成文件。
    • 德文和繁體中文(台灣使用的寫法):本頁、GM 控制台、模式編輯器、App、Field Box 的畫面、內建模式和場地伺服器的頁面。都是 AI 草稿,還沒有經過說這些語言的玩家審閱。
    • 登錄庫的儲存庫已建立(2026 年 10 月 26 日),它的頁面會列出模式,目前還沒有任何模式。
    • 衛星盒、I/O 模組和標靶擴充模組的文字版組裝指南。目前還沒有任何盒子是依它們組裝的。
    • 給玩家、GM、裁判和 Field Box 操作者的使用手冊,有英文和葡萄牙文。
    • 組裝手冊附每塊板子的腳位表、韌體指南(下載已發佈的版本或自行編譯)和控制器安裝指南,提供英文和葡萄牙文版本。
    • 模擬器的網頁介面有模式用到的每個輸入:標籤、鍵盤、命中和 GM 指令,還能下載事件紀錄。
    • GM 控制台的情境區塊有語言清單,四種語言都有。
    • 專案的模式金鑰:一把離線保存的根金鑰,以及登錄庫用來簽署「已驗證」標章的金鑰。盒子、App 和控制器預設信任這兩把金鑰。
    • 韌體指南和組裝手冊說明了使用舊分割表的盒子需要用 USB 燒錄一次,以及設定和金鑰會保留下來。
    • 安全審查帶來的 CI 與發行強化:每個 action 以提交固定,建置映像以摘要值固定,每個 pip 安裝都來自有雜湊值的檔案,簽署工作在受保護的環境中執行並拒絕不在 main 上的標籤,另外每週更新相依套件。維護者仍須建立受保護的環境並把簽署用的機密移過去(步驟已寫下)。
    • Lua 的字串模式和 string.rep 現在在沙箱中計量(惡意的模式曾能讓盒子卡到看門狗重置),略過巢狀 CBOR 資料有深度限制,CBOR 解碼器也有惡意輸入的測試。

    下一步,以及在等什麼

    • 審閱德文和中文:如果你用德文或中文玩,請幫我們審閱。其他語言的翻譯從 docs/translations(英文)開始。
    • 硬體:載板 PCB(一塊做好的電路板,讓組裝更簡單)在第一批盒子組裝好之後做,還有實際組裝的照片和在場地上產生的社群內容。

    第一個正式版本發布後持續進行。