OhMyGame
OhMyGame은 AI로 게임을 만들 수 있는 오픈소스 스튜디오로, 디자인·구축·플레이테스트·출판을 하나의 앱에서 모델 키와 함께 수행합니다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Underframe Desktop: a Windows build planner and damage simulator for Warframe guns, running Underframe's engine.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A Windows desktop app for planning Warframe gun builds and simulating their damage. It is a friendlier front end for Underframe and runs Underframe's damage engine locally, used with the Underframe developer's permission.
Get the latest version from the Releases page:
Underframe-Desktop-Setup-<version>.exe: the installer (you can pick the folder; Start menu and desktop shortcuts)Underframe-Desktop-<version>-Portable.exe: the portable app, which runs without installingWindows 10 or 11, 64-bit. The app isn't code-signed, so Windows SmartScreen may warn the first time you run it: choose More info, then Run anyway. Everything runs on your PC: builds and rivens are saved locally, and screenshots are read with Windows' own text recognition, never uploaded.
The installed app keeps itself up to date: it asks github.com for a newer release 10 seconds after it starts and every 6 hours, downloads it in the background and installs it when you choose Restart to update or quit the app. About › Check for updates automatically turns the checks off; Check for updates checks now. The portable app can't replace itself: it only tells you a newer version is out. Versions from before the updater (2026.10.25) need the new installer once.
Versions are named by their release date (2026.10.25).
cc, drain<=6, pol:v, is:exilus, "Did you mean"), filters,
drag and drop and keyboard pick-up; compatibility and conflict checks on every cardRequirements:
npm run dist)core submodule to run the engine (see below)git clone --recurse-submodules https://github.com/NevermindNilas/underframe-desktop.git
cd underframe-desktop
npm install
npm start
core/ is a private submodule (Underframe's engine and game data). Without
access, the clone succeeds but core/ stays empty: you can still read and
modify the UI, main process and shared logic, and npm test covers pure logic
that does not need the engine, but the app cannot load data or run simulations.
| Command | What it does |
|---|---|
npm start | Build the renderer, then run the app in development |
npm run build:renderer | Build the React renderer with Vite into build/renderer/ |
npm test | Run the test suite (node --test) |
npm run dist | Build the renderer, then an NSIS installer and a portable exe into dist/ |
npm run release -- <notes.md> | Build a release and upload it to GitHub as a draft; --dry-run only checks and prints the plan. See docs/releasing.md |
npm run update-core | Refresh core/ from underframe.site (maintainers with core access); then commit inside core/ and bump the submodule pointer here |
src/main/ Electron main process, app:// protocol, preload, build storage
src/renderer/ UI: React 19 + Fluent UI React v9 (ui/*.jsx), the app controller and pure
model modules, the engine Web Worker and its client
src/shared/ Pure logic: damage types, factions, enemy scaling, mods, stats, engine input
build/ Vite output (gitignored); the app serves build/renderer
docs/ UX spec for the Fluent 2 UI, port specs, how to release
scripts/ release.mjs: builds a release and uploads it to GitHub as a draft
test/ node --test suites
core/ Private submodule: Underframe engine (.wasm + loader) and data.json
@fluentui/react-components,
Fluent 2), Fluent System Icons and @fluentui/react-charts, built with Vite.
The window uses a Mica backdrop on Windows 11 22H2+ (solid fallback otherwise)
and a custom title bar over native caption buttons.app://local protocol that maps
only the renderer build (/renderer/ -> build/renderer) and the needed
core/ files, rejects path traversal and sets a strict CSP per response
(script-src 'self'; inline styles are allowed for Fluent's CSS-in-JS).contextIsolation, sandbox, no Node); a small
preload exposes window.uf for app info, saved builds, upstream version
checks, app updates and allowlisted external links.electron-updater (src/main/updater.js).
Only the packaged app checks, never development, smoke or scene runs. Automatic
checks fail silently; About › Check for updates says what happened.unsafe-eval/wasm-unsafe-eval, which the Emscripten/embind loader needs.cache_app_state; each simulation
then passes only the build and target.seed_rng) so multi-run averages are reproducible.src/shared/
(tested independently); Underframe's engine does the time-based damage
simulation (crits, procs, armor, shields, overguard).builds.json under the Electron user data folder,
written atomically and validated on read.core/images/
and are served at app://local/core/images/; without them every card is drawn
as a text card.src/main/ocr/, unpacked from the asar); nothing is uploaded.| Environment | Effect |
|---|---|
UF_SMOKE=1 | Scripted end-to-end run of the real UI; prints UF_SMOKE_RESULT <json> and exits 0 or 1. UF_SMOKE_SCREENSHOT=<file.png> saves screenshots. |
UF_SCENES=<dir> | Drives the UI through the review scenes, saves a PNG of each into <dir> and prints UF_SCENES_DONE <json list>. UF_SCENE_BOOT_ERROR=1 captures the loading and boot-error screens instead. UF_AXE=<axe.min.js> also writes an axe-core report per scene. |
| `UF_THEME=light | dark` |
UF_WINDOW_SIZE=WxH | Initial window size (minimum 1100x700). |
UF_NO_MICA=1 | Uses the solid background instead of Mica. |
UF_SECOND_MONITOR=1 | Opens the window at x=-3400, y=40. |
UF_NO_CARD_IMAGES=1 | Draws every card as a text card, as without core/images. |
UF_SMOKE_OCR_IMAGE=<file> | With UF_SMOKE=1: also runs real screenshot recognition on a local screenshot. |
UF_UPDATE_FEED=http://127.0.0.1:<port>/ | Packaged app only: checks this local update feed (a folder with latest.yml and the installer it names) instead of GitHub, and prints each update state as UF_UPDATE_STATE <json>. Only http://127.0.0.1 and http://localhost URLs are accepted. |
UF_UPDATE_TEST_RESTART=1 | With UF_UPDATE_FEED: installs a downloaded update straight away, as Restart to update does. |
This repository's code is AGPL-3.0-only (LICENSE). The core/
submodule is proprietary, all rights reserved, and included with permission.
See NOTICE.md for details.