Turf War: Taipei角頭械鬥

Privacy

Last updated: 19 October 2026

Turf War: Taipei is a free browser game. There are no accounts and no passwords. You play anonymously: the game knows you only by a random ID kept in your browser. The game is for players aged 13 and older; pressing Play means you accept the Terms and this Privacy Policy.

Stored in your browser

Your settings, callsign, skins (your knife's look and Militia character), key bindings, touch layout, lobby choices, the game server you chose, your level, daily goal and daily streak (XP, rounds, wins and kills counted on this device, and the last day you played), which latest update you have seen, an anonymous game ID for each game server, a random share code (see Sharing a match), how many match cards and challenges you have shared, the share code of the link that brought you (if any), how many friends your links have brought (for the gold slipper), whether you have made your first kill, whether you have played the first-visit warm-up match (on CrazyGames), the Terms version you accepted by pressing Play and your "Exclude my matches from datasets" choice, a count of how many times you have opened the game, and where you first came from (the UTM tags of the link you followed, such as utm_source=threads, and the website's name from the referrer; never the full address or any ad click ID) are saved in your browser's local storage, so the game remembers them next time. They stay on your device. The analytics service below keeps its own random ID there too.

Sharing a match

When you share a match card or a 1v1 challenge, the picture is made in your browser and goes only where you send it. Its link carries your callsign, the map, your kills in that match, the code of a private room if you opened one, a random share code kept in this browser (when you play online, the game server keeps it with your game ID; see Game server), and plain "utm" tags saying what kind of link it is and which screen it came from (for example a share card from the end screen), so we can count how many players a shared link brings. When someone opens your link, the product analytics below record that a link with that share code was opened, accepted and played to the end.

Invite friends (邀請朋友) opens a private room; its link carries only the room's code and your random share code. The LINE and Threads buttons open that app's own share page with your message and the link, and what you post there is between you and that app. The game server counts how many players arrived through your share code and entered a room, and shows you only that number (three unlock the gold slipper). When a chat app fetches a preview of a challenge or invite link, our server draws the preview picture from what the link already says (callsign, map, kills or room code); it fetches the picture's font from Google Fonts, which is sent no information about you.

Game server

Online matches run on the game server you choose in Settings: Taipei (our own SpacetimeDB server in Taiwan) or US East (SpacetimeDB Maincloud in the United States). Until you choose, a new player whose browser time zone is in the Americas, Europe or Africa starts on US East and everyone else on Taipei; the page decides this from the time zone on your device. A link to a friend's room opens on that room's server. Each server keeps its own players and stats. While you are in an online match the server also holds your skins on your soldier, so the other players see them; they go when you leave. For each anonymous game ID the server keeps:

Your callsign and stats are public: other players see them in matches and on the in-game leaderboard. Chat messages go to the players in your room.

Before the move to Taipei, the game ran on a server in Singapore (SpacetimeDB hosted by InstaCloud) and, before that, on the US East one. The Singapore server is no longer offered: it was shut down and its data deleted on 2026-10-11. The US East server can still be chosen in Settings and keeps its data.

Match recording

We record match data (movement, aim, in-game controls and match events) and may license it, de-identified, to companies that build AI. The licensed data contains no callsign, chat or IDs. We do not try to re-identify it, and buyers must agree not to. This applies only to matches recorded from 15 October 2026. You can turn it off in Settings: "Exclude my matches from datasets".

When you play an online match on the Taipei server, we record it: every soldier's position, movement, aim, weapon, health and actions, 30 times a second, and your own in-game controls (mouse or touch movement, presses of the keys and buttons bound to the game, the effect of touch aim assist, and their timing), with your device type, game settings and connection quality (round-trip times). We do not record chat, your callsign, keys that are not game controls, or anything outside the game. We use the recordings to study the game and to train computer players (bots) that play more like people.

We keep two copies. Our internal copy is stored in Cloudflare R2 under a pseudonymous ID made from your game ID with a secret key, so we can delete it when you ask. A licensed copy is made from it and de-identified: it has no callsign, chat, game ID, IP address, share code or time zone; each player gets a new random number in each file, so files cannot be linked to each other; it keeps only the date, not the time; and it leaves out private rooms, 1v1 challenges, every match with a player in the EU, EEA, UK or Switzerland or whose region we cannot tell, and every match with a player who turned the switch on (also their earlier matches, from the next licensed copy on). We publicly commit to keep the licensed copy de-identified and not to try to re-identify it, and every buyer must sign a contract that forbids re-identification.

If you turn on "Exclude my matches from datasets", or your browser sends Global Privacy Control or Do Not Track, your later matches are in neither copy: your inputs are not logged and your soldier is blanked in the recording of the room. Matches played on CrazyGames and on the US East server are not recorded. Recordings with no usable play are deleted after 30 days; the rest are deleted 3 years after they were recorded. Licensed copies already delivered are kept under the buyer's contract.

Product analytics

We use PostHog to learn how the game is played: anonymous events such as page views, opening the lobby, starting or leaving a match, rounds, maps and modes played, vehicles used, store purchases, language changes, errors, how long the game server took to connect and your connection quality in online matches (ping and movement corrections), with your callsign, language, graphics setting, the game server you chose, your device type (phone, tablet or computer) and rounded screen size, and how you play on it: touch controls, whether the phone was held upright, whether the game was opened inside an app's built-in browser (such as Threads, Instagram, Messenger, Facebook, LINE or TikTok), how many times you have opened the game, whether your browser already had saved data for the game when the page loaded (and can save data at all), where you came from (the UTM tags of the link you followed, the referring website's name without its address, and only whether an ad click ID such as gclid or fbclid was present, never its value; the first of these is remembered in your browser and sent with every event), your touch aim assist setting, in each match your knife (slipper) kills, the bubble teas you drank and your frame rate (frames per second and the slowest 1%) with the name of your graphics card as your browser reports it (for example "Intel UHD Graphics 620", or that it draws without one) and the resolution scale the game drew at, the results of the performance check if you run it (frame rate, frame times, hitches and the same graphics card name), how long the page took to load, how long it took from pressing Play to being in a match, and your first kill ever. PostHog estimates your approximate country from the connection; we don't store IP addresses ourselves. When you play online, these events are linked to your anonymous game ID. There are no session recordings of the page. Product analytics capture no clicks or typing; match recording (below) captures your in-game controls in online matches, never chat or your callsign. If your browser sends Do Not Track or Global Privacy Control, no analytics events are sent.

Error reports include cleaned exception messages and stack traces (script URLs without query strings or fragments, function names, line and column numbers), the build version, server host, browser and operating system, in-app browser and whether a match is active. When the browser takes the game's graphics away (a lost WebGL context), the report also says how long the page had been open and in view, how long the graphics were gone, how long the first frame after took, how many times it happened on the page, your graphics setting, the resolution the game drew at and the map. When the game's files fail to load, the report also names the first file that failed (its host and path), how long the page had been open, whether it was in view or had been in the background, whether the browser said it was online and whether the offline cache (service worker) was in use. We remove known secret fields, email addresses and long identity strings from error text, and exclude callsign, room and attribution properties from error events. Error reports retain PostHog's anonymous device and session identifiers. We send at most five distinct failures and one opaque browser error per page. Early errors wait in memory until analytics starts; the same opt-out rules apply. Private source maps help us read minified stacks; they are not served with the website.

Website analytics

An optional server monitor counts panic and ERROR log lines. It can send fixed count summaries to an owner-selected webhook and keep the latest 200 summaries in a private, admin-only database view. These summaries contain no player identifiers or raw log text. Raw diagnostic logs remain on the server.

Vercel Web Analytics counts anonymous page views and visitors, without cookies.

Vercel serves the website, and Cloudflare serves the game's models, textures, sounds and fonts. Like any web host, they receive your IP address and browser details to send you the files.

Playing on CrazyGames

The game is also published on CrazyGames (crazygames.com). There, CrazyGames runs the page around the game and its own software (the CrazyGames SDK) inside it, may show video ads between matches, and handles its own accounts, ads and data under the CrazyGames privacy policy. From CrazyGames the game receives only your browser's language (to choose the game's language), CrazyGames' sound and chat settings, and, if you are logged in to CrazyGames, your CrazyGames username, which becomes your callsign and is shown to other players; we don't receive your CrazyGames account ID or email address. The game tells CrazyGames when it has loaded, when you start and stop playing, and the private room you are in with its code, so your CrazyGames friends can join you. On CrazyGames, CrazyGames' automatic progress save backs up everything the game stores in your browser (the list under "Data stored in your browser", including your callsign and anonymous game ID) and restores it when you come back; when you are logged in to CrazyGames it is kept with your CrazyGames account, so it follows you to other devices. Everything else on this page applies there too, and the product analytics events also say that you played on CrazyGames.

What we don't do

On our own website: no ads. Nowhere do we sell or share your data for advertising, and the game itself adds no third-party advertising trackers (on CrazyGames, their ads are theirs; see Playing on CrazyGames). We may license de-identified match data to companies that build AI (see Match recording).

Clearing your data

Clear this site's data in your browser to remove everything stored there, including your anonymous game ID (you start fresh with a new one). To ask for your stats and match recordings to be removed, open an issue on GitHub with your callsign and roughly when you played. Deletion covers the internal copy and every later licensed copy, within 30 days; licensed copies already delivered hold no ID, so they cannot be found or deleted. Clearing your browser's data does not delete server recordings.

隱私權

最後更新:2026 年 10 月 19 日

角頭械鬥是一款免費的網頁遊戲。沒有帳號,也沒有密碼。你以匿名身分遊玩:遊戲只透過存在你瀏覽器中的一組隨機 ID 認得你。本遊戲供年滿 13 歲的玩家使用;按下開始即表示你同意服務條款與本隱私權政策。

存在你瀏覽器中的資料

你的設定、呼號、外觀(刀的造型與民兵角色)、按鍵配置、觸控配置、大廳選項、你選擇的遊戲伺服器、你的等級、每日目標與連續天數(在這台裝置上累計的經驗值、回合、勝場與擊殺,以及你最近一次遊玩的日期)、你看過的最新更新,每個遊戲伺服器各自的匿名遊戲 ID,一個隨機分享碼(見「分享戰績」)、你分享過幾次戰績卡與單挑、帶你來的連結上的分享碼(如果有)、你的連結帶來幾位朋友(解鎖金拖用)、你是否已拿下第一個擊殺、你是否已打過第一次來時的暖身賽(CrazyGames 上)、你按下開始時同意的服務條款版本與「不將我的對戰納入資料集」的選擇、你開啟遊戲的次數,以及你從哪裡來(你點的連結上的 UTM 標籤,例如 utm_source=threads,加上來源網站的名稱;絕不包含完整網址或廣告點擊 ID)會存在瀏覽器的本機儲存空間,讓遊戲下次記得。這些資料只留在你的裝置上。下方的分析服務也會在這裡存放它自己的隨機 ID。

分享戰績

你分享戰績卡或單挑連結時,圖片是在你的瀏覽器裡產生的,只會傳到你選擇分享的地方。連結裡帶有你的呼號、地圖、你在那場的擊殺數、你開的私人房代碼(如果有)、一個存在這個瀏覽器的隨機分享碼(線上遊玩時,遊戲伺服器會把它與你的遊戲 ID 一起保存;見「遊戲伺服器」),以及簡單的 utm 標記,說明這是哪種連結、從哪個畫面分享的(例如結算畫面的戰績卡),讓我們能算出一個分享連結帶來多少玩家。有人打開你的連結時,下方的產品分析會記錄帶這個分享碼的連結被打開、接受與打完。

「邀請朋友」會開一間私人房,它的連結只帶房間代碼與你的隨機分享碼。LINE 與 Threads 按鈕會打開該 App 自己的分享頁,帶上你的訊息與連結;你在那裡發出的內容適用該 App 的規範。遊戲伺服器會計算有幾位玩家透過你的分享碼進來並進過房間,並只讓你看到這個數字(滿三位解鎖金拖)。聊天 App 抓取單挑或邀請連結的預覽時,我們的伺服器會用連結本身已有的內容(呼號、地圖、擊殺數或房間代碼)畫出預覽圖,並向 Google Fonts 取得圖上用的字型,過程中不會送出任何關於你的資訊。

遊戲伺服器

線上對戰在你於設定中選擇的遊戲伺服器上進行:台北(我們自己在台灣的 SpacetimeDB 伺服器)或美東(位於美國的 SpacetimeDB Maincloud)。在你選擇之前,瀏覽器時區在美洲、歐洲或非洲的新玩家從美東開始,其他人從台北開始;這由網頁依你裝置上的時區決定。朋友房間的連結會在該房間的伺服器上開啟。各伺服器的玩家與戰績分開記錄。你在線上對戰中時,伺服器也會把你的外觀放在你的角色上,讓其他玩家看得到;離開後就不再保留。伺服器會為每個匿名遊戲 ID 保存:

你的呼號與戰績是公開的:其他玩家會在對戰中與遊戲內排行榜上看到。聊天訊息會傳給同一房間的玩家。

遷至台北之前,遊戲曾在新加坡的伺服器(SpacetimeDB,由 InstaCloud 託管)上運行,更早則在美東。新加坡的伺服器已不再提供:它已於 2026-10-11 關閉並刪除其資料。美東伺服器仍可在設定中選擇,其資料仍保存在那裡。

對戰錄製

我們會錄製對戰資料(移動、瞄準、遊戲操作與對戰事件),並可能在去識別化後授權給開發 AI 的公司。授權的資料不含呼號、聊天內容或任何 ID。我們不會嘗試重新識別這些資料,買方也必須同意不這麼做。這只適用於 2026 年 10 月 15 日起錄製的對戰。你可以在設定中關閉:「不將我的對戰納入資料集」。

你在台北伺服器上進行線上對戰時,我們會錄製對戰:每個角色每秒 30 次的位置、移動、瞄準、武器、生命值與動作,以及你自己的遊戲操作(滑鼠或觸控移動、遊戲按鍵與按鈕的按壓、觸控輔助瞄準的作用及其時間),並附上你的裝置類型、遊戲設定與連線品質(來回時間)。我們不錄製聊天、呼號、非遊戲操作的按鍵,或遊戲以外的任何內容。我們用這些錄製研究遊戲,並訓練玩起來更像真人的電腦玩家(機器人)。

我們保留兩份。內部版本存放在 Cloudflare R2,使用一組由你的遊戲 ID 與秘密金鑰產生的假名 ID,讓我們能在你要求時刪除。授權版本由內部版本產生並經去識別化:不含呼號、聊天、遊戲 ID、IP 位址、分享碼或時區;每位玩家在每個檔案中都有一個新的隨機編號,檔案之間無法互相連結;只保留日期,不保留時間;不包含私人房、1v1 單挑、任何有位於歐盟、歐洲經濟區、英國或瑞士(或無法判斷所在地區)之玩家的對戰,以及任何有開啟排除開關之玩家的對戰(自下一份授權版本起,也包含他們先前的對戰)。我們公開承諾維持授權版本的去識別化,不嘗試重新識別,且每位買方都必須簽署禁止重新識別的合約。

若你開啟「不將我的對戰納入資料集」,或你的瀏覽器送出「全球隱私控制」或「不要追蹤」,你之後的對戰不會進入任何一份:不記錄你的操作,你的角色在房間的錄製中會被清空。在 CrazyGames 與美東伺服器上的對戰不會被錄製。沒有可用遊玩內容的錄製會在 30 天後刪除;其餘在錄製後 3 年刪除。已交付的授權版本依買方合約保存。

產品分析

我們使用 PostHog 了解大家怎麼玩:匿名的事件,例如瀏覽頁面、開啟大廳、開始或離開對戰、回合、玩過的地圖與模式、使用載具、商店購買、切換語言、錯誤、遊戲伺服器連線所需的時間,以及線上對戰的連線品質(延遲與移動修正),並附上你的呼號、語言、畫質設定、你選擇的遊戲伺服器、裝置類型(手機、平板或電腦)與概略的螢幕尺寸,以及你怎麼玩:是否使用觸控操作、手機是否直拿、是否在 App 內建瀏覽器(例如 Threads、Instagram、Messenger、Facebook、LINE 或 TikTok)中開啟、你開啟遊戲的次數、頁面載入時你的瀏覽器是否已存有這個遊戲的資料(以及是否能儲存資料)、你從哪裡來(你點的連結上的 UTM 標籤、來源網站的名稱但不含網址,以及是否帶有 gclid 或 fbclid 這類廣告點擊 ID,僅記錄有或沒有,不記錄其值;第一次的來源會記在你的瀏覽器中,並隨每個事件送出)、觸控輔助瞄準的設定,每場對戰中的藍白拖擊殺數、喝了幾杯珍奶與畫面流暢度(每秒畫格數與最慢的 1%),以及瀏覽器回報的顯示卡名稱(例如「Intel UHD Graphics 620」,或是沒有使用顯示卡繪圖)與遊戲繪製時的解析度比例,若你執行效能檢測則包含其結果(畫面流暢度、每畫格時間、卡頓次數與同樣的顯示卡名稱),頁面載入花了多久、從按下開始到進入對戰花了多久,以及你的第一個擊殺。PostHog 會從連線推估你大致所在的國家;我們自己不保存 IP 位址。線上遊玩時,這些事件會與你的匿名遊戲 ID 連結。不錄製操作畫面。產品分析不擷取點擊或輸入;下方的「對戰錄製」會擷取你在線上對戰中的遊戲操作,但絕不擷取聊天或呼號。如果你的瀏覽器送出「不要追蹤」(Do Not Track)或全球隱私控制(Global Privacy Control),就不會傳送任何分析事件。

錯誤報告包含經清理的例外訊息與堆疊追蹤(不含查詢參數或片段的程式網址、函式名稱、行號與欄號)、版本、伺服器主機、瀏覽器與作業系統、App 內建瀏覽器,以及是否正在對戰。瀏覽器收回遊戲畫面(WebGL 繪圖環境遺失)時,報告也會包含頁面已開啟與顯示在前景的時間、畫面中斷了多久、恢復後第一個畫格花了多久、這個頁面發生的次數、你的畫質設定、遊戲繪製的解析度與地圖。遊戲檔案載入失敗時,報告也會包含第一個失敗的檔案(主機與路徑)、頁面已開啟的時間、是否顯示在前景或曾切到背景、瀏覽器是否回報有網路連線,以及是否使用離線快取(service worker)。我們會從錯誤文字移除已知的機密欄位、電子郵件地址與長身分識別字串,並排除錯誤事件中的呼號、房間與來源屬性。錯誤報告保留 PostHog 的匿名裝置與工作階段識別碼。每頁最多傳送五種不同錯誤與一次瀏覽器未提供細節的錯誤。啟動初期的錯誤會先保存在記憶體,等待分析功能啟動;同樣遵守拒絕追蹤設定。私有原始碼對照檔協助我們讀取壓縮程式的堆疊,不會隨網站公開提供。

網站分析

可選用的伺服器監控會計算 panic 與 ERROR 日誌行數。它可將固定格式的數量摘要傳給擁有者指定的 webhook,並在僅管理員可讀取的私有資料庫檢視保留最新 200 筆摘要。摘要不包含玩家識別資料或原始日誌文字。原始診斷日誌保留在伺服器上。

Vercel Web Analytics 計算匿名的瀏覽次數與訪客數,不使用 Cookie。

網站由 Vercel 提供,遊戲的模型、材質、音效與字型由 Cloudflare 提供。如同任何網站主機,它們會收到你的 IP 位址與瀏覽器資訊,以便把檔案傳給你。

在 CrazyGames 上遊玩

本遊戲也發布在 CrazyGames(crazygames.com)。在那裡,遊戲外圍的頁面由 CrazyGames 經營,遊戲中也會執行它的軟體(CrazyGames SDK);CrazyGames 可能在對戰之間播放影片廣告,並依CrazyGames 隱私權政策處理它自己的帳號、廣告與資料。遊戲從 CrazyGames 只收到:你瀏覽器的語言(用來選擇遊戲語言)、CrazyGames 的音效與聊天設定,以及在你登入 CrazyGames 時的 CrazyGames 使用者名稱,它會成為你的呼號並顯示給其他玩家;我們不會收到你的 CrazyGames 帳號 ID 或電子郵件地址。遊戲會告訴 CrazyGames 遊戲何時載入完成、你何時開始與停止遊玩,以及你所在的私人房間與房號,讓你的 CrazyGames 好友能加入你。在 CrazyGames 上,CrazyGames 的自動進度儲存會備份遊戲存在你瀏覽器中的所有資料(即「存在你瀏覽器中的資料」所列的內容,包括你的呼號與匿名遊戲 ID),並在你回來時還原;你登入 CrazyGames 時,這些資料會與你的 CrazyGames 帳號一起保存,換裝置也會跟著你。本頁其他內容在那裡同樣適用,產品分析事件也會註明你是在 CrazyGames 上遊玩。

我們不做的事

我們自己的網站沒有廣告。我們在任何地方都不為廣告販售或分享你的資料,遊戲本身也不加入第三方廣告追蹤器(CrazyGames 上的廣告屬於 CrazyGames,見「在 CrazyGames 上遊玩」)。我們可能將去識別化的對戰資料授權給開發 AI 的公司(見「對戰錄製」)。

清除你的資料

在瀏覽器中清除本網站的資料,即可移除存在那裡的一切,包括你的匿名遊戲 ID(之後會以新的 ID 重新開始)。若要請我們刪除戰績與對戰錄製,請在 GitHub 上開一個 issue,附上你的呼號與大約的遊玩時間。刪除會在 30 天內涵蓋內部版本與之後的每一份授權版本;已交付的授權版本不含任何 ID,因此無法找到或刪除。清除瀏覽器資料不會刪除伺服器上的錄製。