ultratears
Unofficial native Windows port of Tears of the Kingdom 1.4.3 using static recompilation. Builds locally from the player's own extracted game dump; no game files included.
pr0game용 무료 도구: 초정밀 비행 시간·재설정 계산기, ACS 전리품 계산기, IPM 계산기, 전투 시뮬레이터, 달 파괴 계산기 제공
Free tools for pr0game: second-accurate flight calculator with timing and retime, ACS loot calculator, IPM calculator, battle simulator and moon destruction calculator. Flugzeitrechner, AKS-Beuterechn
게임TypeScript · VueGitHub @Neffez온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Tools for pr0game.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗External analysis tool for pr0game based on manually copied pages: open a page in the game,
Ctrl+A, Ctrl+C, paste it into the hub. Data is collected per universe and group (alliance) and is only visible to members of that group.
Ctrl+U) or a saved page, with a preview before saving.
Player IDs, alliance IDs and rank changes are only available in HTML/page source. With plain text, players are matched by name.
Next to the hub, the deployment ships static pr0game tools (apps/tools) that work without the hub: no login,
no server, everything is calculated in the browser. The tools index at / links them and the hub. All tools are in
German and English, keep their input locally in the browser and put it into share links (URL hash).
/flight-calculator/): second-exact with the game's FleetFunctions (the same code as the
hub's raid planner, @pr0hub/flight)
/acs-loot/): shares the loot and debris of an ACS among up to 5 participants over
several battles; a pasted battle report fills in participants, ships, losses and loot, recycling reports the
debris. Covers losses and deuterium first, splits the profit equally or by investment and suggests deliveries
with as few flights as possible./ipm-calculator/): interplanetary missiles against a planet's defense: destroyed and
remaining defense per type (interceptors, primary target, weapons and armour as in the game), missiles needed,
range, flight time and the cost against the value destroyed; a pasted spy report fills in the target./battle-simulator/): runs a battle many times on the game's own battle engine (Battlerust,
with stun of ion cannons and shield domes): win chance, losses per unit (average and range), rebuilt defense, debris
field and recyclers, loot and moon chance, flight time and fuel per attacker, and the rounds of a typical battle.
ACS with several attacking and holding fleets; a pasted spy report fills in the planet; debris percentages and moon
chance are universe settings./moon-destruction/): chance to destroy a moon with Death Stars and to lose them,
per wave and in total over several waves (formulas of the game), and the fewest Death Stars per wave for a wanted
total chance; the diameter is typed in or taken from the pasted moon tooltip of the galaxy view.The hub links into the tools with prefilled values (e.g. from spy reports and the raid planner), but every tool can be used on its own.
| Area | Technology |
|---|---|
| Language | TypeScript (strict) throughout, ES modules |
| Runtime / tooling | Node.js 24 (LTS), pnpm workspaces (monorepo) |
| Parser | cheerio for HTML, own plain-text parsers; game element names and costs generated from the game source |
| Server | Fastify 5 with @fastify/cookie and @fastify/static; better-sqlite3 (SQLite) with numbered SQL migrations; session cookies, scrypt password hashes |
| Web app | Vue 3 (Composition API, <script setup>), Vue Router 4, vue-i18n (German/English), Chart.js; plain CSS with custom properties, no UI framework |
| Build | Vite 5 and vue-tsc for the web app, tsc for parser and server, tsx for the server in development |
| Tests | Vitest: parser tests against saved game pages (packages/parser/test/fixtures), flight math tests, API tests with Fastify's inject against an in-memory database, web unit tests for formatting and composables |
| Delivery | Multi-stage Docker image (node:24-trixie-slim), the server serves the built SPA; GitHub Actions for typecheck, tests and build, and on main publishing the images to ghcr.io/neffez/pr0game-hub and ghcr.io/neffez/pr0game-tools |
packages/parser @pr0hub/core – page parsers, deck calculation, element data (DE/EN)
packages/flight @pr0hub/flight – flight times, recall and fuel like the game's FleetFunctions
packages/loot @pr0hub/loot – ACS loot settlement: loot shares, covering losses, profit split, transfers
packages/battle @pr0hub/battle – battle simulation on the game's Rust engine (Battlerust as WebAssembly)
apps/server Fastify + SQLite: auth, ingest, data APIs, battle report crawler; serves the SPA
apps/web Vue 3 SPA (base path /hub/)
apps/tools static pr0game tools next to the hub: tools index, flight, ACS loot and IPM calculator, battle simulator
scripts generators for the element data (gen:tech, gen:costs)
Requires Node.js 24 and pnpm (corepack enable).
pnpm install
pnpm --filter "./packages/*" build # web and server import the built packages
# server (port 3000) + Vite (port 5173, proxies /hub/api)
ADMIN_BOOTSTRAP_USER=admin ADMIN_BOOTSTRAP_PASSWORD=changeme pnpm --filter @pr0hub/server dev
pnpm --filter @pr0hub/web dev
# -> http://localhost:5173/hub/
# tools (flight calculator), no server needed
pnpm --filter @pr0hub/tools dev
# -> http://localhost:5174/flight-calculator/, /acs-loot/, /ipm-calculator/, /battle-simulator/ and /moon-destruction/
pnpm typecheck # tsc / vue-tsc in all packages
pnpm test # vitest in all packages
pnpm build # all packages and apps
packages/parser/src/parsers/ and a fixture with a test.apps/server/migrations/; migrations run on startup.apps/server/src/context.ts), so data never leaves its group.apps/web/src/locales/ (de.ts, en.ts); the mobile layout starts below 800 px.Element names and costs are generated from the game source (codeberg.org/pr0game/pr0game)
checked out next to this repository: pnpm gen:tech and pnpm gen:costs. Combat values of units missing in the game's
install.sql (later ships, stun, ship shields) live in packages/battle/src/live.ts.
The battle simulator uses the game's battle engine Battlerust (Rust, by
Tsaranoga, used with permission), built to WebAssembly at a pinned commit in the battle-wasm stage of the
Dockerfile. pnpm build:battle exports it to packages/battle/wasm/ (needs Docker, no Rust toolchain); the battle
package's tests and the tools build need it.
First start: log in with the bootstrap admin and create a universe (e.g. u8) and a group under Admin, then add members (claim links appear in the members table).
The hub exposes the same JSON the web app uses under {BASE_PATH}/api (default /hub/api). Under Account you can create personal read-only API tokens (hubpat_…). Send Authorization: Bearer … and, for universe routes, the alliance group id as X-Hub-Group (or group query parameter).
OpenAPI 3.1: GET /hub/api/openapi.json (also .yaml). Token management requires a browser session cookie; data endpoints accept Bearer tokens for GET requests only.
The one exception is the battle simulator for scripts and AI agents, POST /hub/api/{uni}/battle/simulate: it fights a
battle many times on the game's engine (in a worker thread with a time limit) and returns win chances, losses, debris,
loot, moon chance, flight times and a link to the battle simulator page. Without a planet in the request it takes the
group's newest spy report of the target. It writes nothing, so read-only tokens may call it; see the OpenAPI spec
(simulateBattle) for the request and the limits.
curl -H "Authorization: Bearer hubpat_…" -H 'X-Hub-Group: 1' -H 'Content-Type: application/json' \n -d '{"attackers":[{"units":{"207":200,"203":50},"research":{"109":12,"110":12,"111":12}}],"target":"1:110:8"}' \n https://hub.example/hub/api/u8/battle/simulate
Changes are recorded in CHANGELOG.md. Contributions are welcome, see CONTRIBUTING.md.
| Variable | Default | |
|---|---|---|
PORT | 3000 | |
BASE_PATH | /hub | path prefix behind the proxy |
DATA_DIR | ./data (Docker: /data) | SQLite database hub.db |
ADMIN_BOOTSTRAP_USER / ADMIN_BOOTSTRAP_PASSWORD | – | creates the first admin while no user exists |
TRUST_PROXY | 1 | proxies trusted for X-Forwarded-For (Fastify trustProxy): hop count, true/false or comma-separated IPs/CIDRs; the login limit counts per client IP |
SECURE_COOKIES | true in production | |
SESSION_DAYS | 30 | |
BODY_LIMIT_MB | 8 | |
RAW_RETENTION_DAYS | 14 | pasted pages are kept this long for reparsing (universe.json uploads are not kept) |
CRAWLER_ENABLED | true | background archiving of public battle reports |
CRAWLER_INTERVAL_MS | 5000 | |
CRAWLER_GIVE_UP_HOURS | 6 | pause the crawler after the game was unreachable this long |
CRAWLER_HALL_HOURS | 6 | read the public battle hall of every universe with a game URL this often and add new entries to all its groups (0 = off) |
PUBLIC_URL | – | public origin of the hub (e.g. https://hub.example.org); Discord messages link to the hub's pages only when it is set |
TOOLS_URL | PUBLIC_URL, else / | base URL of the pr0game tools (e.g. https://tools.example.org/); the hub's tool links and the title in the menu point there. A universe can override it with its setting |
Docker image (Dockerfile, port 3000, volume /data), configured with the environment variables above.
The static tools are a second target of the same Dockerfile: docker build --target tools . gives an nginx image
with the tools index at /, the flight calculator at /flight-calculator/ (the hub links there), the ACS loot calculator at
/acs-loot/, the interplanetary missile calculator at /ipm-calculator/ (the hub links there from spy reports), the
battle simulator at /battle-simulator/ and the moon destruction calculator at /moon-destruction/ (the hub links
there from moons).
Push notifications need outbound HTTPS from the hub to the browsers' push services (Google, Mozilla, Apple, Microsoft),
Discord notifications to discord.com.
Live updates use Server-Sent Events (GET /hub/api/:uni/events): a reverse proxy in front of the hub must not buffer
that response (the hub sends X-Accel-Buffering: no for nginx) and should allow idle connections longer than the
25 s heartbeat.
CI (.github/workflows/ci.yml): typecheck, tests and build on every push and pull request. After green tests on main it can
send a repository_dispatch to a deployment repository (secrets DISPATCH_REPO = owner/name and DISPATCH_TOKEN = a token
with write access to its contents); without the secrets this step is skipped.
Copyright (c) 2026 Neffez. Licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-only). You may use, modify and fork the hub, but if you run a modified version as a network service or distribute it, you must offer its complete source code to its users under the same license. Versions up to 2026-10-25 were published under the MIT license; copies obtained under it stay MIT.
flightCalculatorUrlPUSH_CONTACT | – | contact for the push services (mailto:… or https://…); push notifications are off without it. The VAPID keys are created on the first start and kept in the database |