Ferrum2D๋ Rust core, WebAssembly, TypeScript ํ๋ซํผ ๋ ์ด์ด, WebGL2 ๊ธฐ๋ณธ ๋ ๋๋ฌ, ์ ํ WebGPU ๋ ๋๋ฌ๋ก ๊ตฌ์ฑํ 2D ์น ๊ฒ์ ์์ง์ด๋ค.
ํ์ฌ package version์ 0.1.0์ด์ง๋ง, ๊ธฐ๋ฅ ์ํ๋ MVP ๊ฐ๋ฐ ์๋ฃ, ์์ฉ์ ํ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๋จ๊ณ๋ค. examples/starter-runtime์ ์ ํ์ฉ starter runtime ํ๋ฆ์ ๋ณด์ฌ์ฃผ๊ณ , examples/topdown-shooter, examples/breakout, examples/platformer, examples/physics-sandbox๋ ๊ฐ์ runtime/API๊ฐ ์ฌ๋ฌ ์ฅ๋ฅด์ ๋ฌผ๋ฆฌ authoring ํ๋ฆ์์ ๋์ํ๋์ง ๊ฒ์ฆํ๋ค. apps/placement-viewer๋ ๊ณต์ Scene/Object authoring viewer app์ผ๋ก scene/object authoring ํ๋ฆ์ ๊ฒ์ฆํ๋ค.
Ferrum2D์ ์ ํ ๋ชฉํ๋ ๊ธฐ์กด ๊ฒ์ ์์ง์ฒ๋ผ ๋น์ฃผ์ผ ์๋ํฐ๋ฅผ ์ค์ฌ์ ๋๋ ๊ฒ์ด ์๋๋ผ, AI agent๊ฐ Game Spec, Physics Spec, ํ๋ก์ ํธ ํ ํ๋ฆฟ, ๊ฒ์ฆ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํด ๊ฒ์์ ์์ฑํ๊ณ ์์ ํ๋ AI agent-first 2D game engine์ ๋ง๋๋ ๊ฒ์ด๋ค.
Ferrum2D๋ AI agent๊ฐ ์์ ํ๊ฒ ๊ฒ์์ ๋ง๋ค๊ณ , ์ฌ๋์ด ๊ฒ์ฆ ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ํ์ฅํ๋ ์๊ณ ๋น ๋ฅธ 2D runtime engine์ ์งํฅํ๋ค.
์์ผ๋ก ๊ธฐ๋ฅ์ ๊ณ ๋ํํ ๋๋ ๋ค์ ์์น์ ์ ์งํ๋ค.
- Agent-first, editor-second: ๊ธฐ๋ณธ ๊ฐ๋ฐ ํ๋ฆ์ visual editor๊ฐ ์๋๋ผ Game Spec, Physics Spec, template, skill, subagent, smoke, replay ๊ธฐ๋ฐ์ด๋ค. Visual editor๋ ํ์ํ ๋ ๋ณ๋ ์น์ธ๋ ๋ณด์กฐ ๋๊ตฌ๋ก๋ง ๊ฒํ ํ๋ค.
- Public API first: consumer game์
@ferrum2d/ferrum-webpublic entrypoint์ ๋ชฉ์ ๋ณ subpath๋ง ์ฌ์ฉํ๋ค.dist/*,pkg/*,src/*๋ด๋ถ import๊ฐ ํ์ํ๋ฉด ์์ง public API๊ฐ ๋ถ์กฑํ๋ค๋ ์ ํธ๋ก ๋ณด๊ณ API ์น๊ฒฉ์ ๊ฒํ ํ๋ค. - Data-driven gameplay: ๋ฌด๊ธฐ, ๋ฐ์ฌ์ฒด, ์ , ๋ฐธ๋ฐ์ค, ์ฌ, prefab, physics metadata๋ ๊ฐ๋ฅํ ํ ์ฝ๋๋ณด๋ค spec/authoring data๋ก ํํํ๋ค. ์ฝ๋ ๋ณ๊ฒฝ์ spec๊ณผ public runtime primitive๋ก ํํํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ์ ์ ํํ๋ค.
- Performance budget by default: 1000๊ฐ ์ด์ ๊ฐ์ฒด๋ฅผ ์ ์ ๋ก ์ค๊ณํ๋ค. frame loop์์ entity๋ณ JS/Wasm ์๋ณต ํธ์ถ, DOM ์กฐ์, ๋ฌธ์์ด/object hot-path ์ ๋ฌ์ ํผํ๊ณ bulk buffer์ ์ ๋น๋ adapter๋ฅผ ์ฐ์ ํ๋ค.
- Rust core / TypeScript platform ๊ฒฝ๊ณ ์ ์ง: Rust/Wasm์ simulation, entity, collision, render command ์์ฑ์ ๋ด๋นํ๊ณ , TypeScript๋ browser API, canvas, input, audio, asset loading, renderer ์ฐ๊ฒฐ์ ๋ด๋นํ๋ค.
- Deterministic and verifiable: โํ๋ฉด์์ ๋๋ ๊ฒ ๊ฐ๋คโ๋ณด๋ค validation report, replay hash, smoke check, runtime budget์ผ๋ก ๋ณ๊ฒฝ ๊ฒฐ๊ณผ๋ฅผ ์ฆ๋ช ํ๋ค. ์ ๊ธฐ๋ฅ์ ๊ฐ๋ฅํ๋ฉด ๊ฒ์ฆ ์คํฌ๋ฆฝํธ์ ํจ๊ป ์ถ๊ฐํ๋ค.
- Demo๋ ์ ํ ๊ฒ์ฆ์ฅ: demo์์ ๋ฐ๋ณต๋๋ ์๊ตฌ๋ ์์ ํ๋์ฝ๋ฉ์ผ๋ก ํค์ฐ๊ธฐ๋ณด๋ค public API, authoring primitive, template contract๋ก ์น๊ฒฉํ ์ง ํ๋จํ๋ค. demo ์ ์ฉ ํธ์ ์ฝ๋๋ ์์ง ๋ด๋ถ๋ฅผ ์ค์ผ์ํค์ง ์๋๋ค.
- ์์ primitive ์กฐํฉ: ํน์ ์ฅ๋ฅด ์ ์ฉ ์์ง์ด ์๋๋ผ projectile, behavior recipe, scene composition, input binding, asset pipeline, replay ๊ฐ์ ์์ ๋ฒ์ฉ primitive๋ฅผ ์ ๊ณตํ๊ณ ๊ฒ์์ ์ด๋ฅผ ์กฐํฉํ๋ค.
๊ธฐ๋ฅ ์ถ๊ฐ ์ฌ๋ถ๋ โ์ด ๋ณ๊ฒฝ์ด AI๊ฐ ์์ ํ๊ฒ ์์ ํ ์ ์๋ public/data/replay ๊ธฐ๋ฐ ๊ธฐ๋ฅ์ธ๊ฐ, ์๋๋ฉด ํน์ demo๋ฅผ ๋นจ๋ฆฌ ๋ง๋ค๊ธฐ ์ํ ์์ ํ๋์ฝ๋ฉ์ธ๊ฐ?โ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋จํ๋ค. ์ ์๋ ์์ง ๊ณ ๋ํ ํ๋ณด์ด๊ณ , ํ์๋ ์์ ์ฝ๋๋ก ๊ฒฉ๋ฆฌํ๋ค.
์ ์ด๋ฏธ์ง๋ Top-down Shooter ํ๋ฉด ๊ตฌ์ฑ์ ๋ณด์ฌ์ฃผ๋ ๋ฆด๋ฆฌ์ค preview๋ค. ์ค์ ๋ธ๋ผ์ฐ์ ์บก์ฒ๋ฅผ ๊ฐฑ์ ํ ๋๋ docs/development/quality/screenshots/README.md๋ฅผ ๋ฐ๋ฅธ๋ค.
Ferrum2D๋ ํ์ฌ 0.1.0 ์์ฉ์ ํ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๋จ๊ณ๋ค. public entrypoint์ import ๊ฐ๋ฅํ ์ด๋ฆ์ด ์๋๋ผ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ด ๊ฐ์ ์ฑ์๋์ ์ ํ ๊ณ์ฝ์ ์๋๋ค.
| ์ง์ ์์ค | ๊ถ์ฅ import | ์๋ฏธ | ๋ํ ํญ๋ชฉ |
|---|---|---|---|
| Core runtime | @ferrum2d/ferrum-web/core |
1.0 ์ ํ ๊ณ์ฝ ํ๋ณด. ๊ฒ์ ์คํ๊ณผ public API์ ์ค์ฌ์ด๋ค. | createFerrumRuntime(...), createEngine(...), WebGL2 renderer, input/audio/asset loading, Physics Spec/API, snapshot |
| Authoring primitive | @ferrum2d/ferrum-web/authoring |
์ฅ๋ฅด์ ํ ํ๋ฆฟ์ด ์กฐํฉํด ์ฐ๋ ๋ฐ์ดํฐ ๊ธฐ๋ฐ primitive๋ค. | Scene Composition, Data Scene spawn/role/handle registry helper, Behavior Recipe, projectile/weapon authoring, FSM install/replay, presentation effect registry |
| Starter scene/template | @ferrum2d/ferrum-web/starter-scenes |
์์ฑ ํ๋ก์ ํธ์ smoke์์ ๊ฒ์ฆํ๋ ์์์ ์ด๋ค. ์ฅ๋ฅด ์ ์ฒด๋ฅผ ์๋ ์ ์ํ๋ ๋ฒ์ฉ ์์ง ๋ชจ๋๋ ์๋๋ค. | minimal, topdown, platformer, breakout, Shooter Game Spec, starter input profile |
| Optional/lab | @ferrum2d/ferrum-web/labs |
์ง์ ํ๊ฒฝ์ด๋ ๋ช ์ opt-in์์ ์ฐ๋ ํ์ฅ ๊ธฐ๋ฅ์ด๋ค. ๊ธฐ๋ฅ๋ณ ์ ์ฝ์ Public API์ smoke ๋ฌธ์๋ฅผ ๋ฐ๋ฅธ๋ค. | WebGPU renderer, HD-2D helper, PixelMaskTerrain, material/VFX preset, texture atlas JSON helper |
| Quality infrastructure | @ferrum2d/ferrum-web/quality |
์ ํ ํ์ง์ ์งํค๋ ๊ฒ์ฆ ์ธํ๋ผ๋ค. ์ฌ์ฉ์-facing ๊ฒ์ ๊ธฐ๋ฅ๊ณผ ๋ถ๋ฆฌํด์ ๋ณธ๋ค. | smoke helper, runtime budget, package QA, replay/report validator |
| Compatibility/helper | @ferrum2d/ferrum-web |
๊ธฐ์กด root aggregate import๋ค. ์ ์ ํ ๊ธฐ๋ฅ์ ๊ธฐ์ค์ ๋ชฉ์ ๋ณ subpath๋ค. | ๊ธฐ์กด root import, Worker clock shim, spatial audio fallback |
์ฒ์ Ferrum2D๋ฅผ ๋ณด๋ ๊ฐ๋ฐ์๋ Showcase Hub์์ demo, ๊ธฐ๋ฅ๊ตฐ, agent workflow, ๊ฒ์ฆ ๋ช ๋ น์ ์ ์ฒด ์ง๋๋ฅผ ๋ณธ ๋ค ๊ฐ๋ฐ์ ํต์คํํธ๋ฅผ ์ฝ๋๋ค. ์ธ๋ถ API ๊ณ์ฝ๊ณผ ์ง์ ์์ค์ Public API, ๊ธฐ์กด import ์ด์ ์ ์ฐจ๋ Public API Migration Guide, ๋ฌผ๋ฆฌ ๋ฒ์๋ 2D ๋ฌผ๋ฆฌ์์ง ๊ธฐ๋ฅ ๋งต, Shooter authoring ๊ณ์ฝ์ Top-down Shooter Game Spec์ ๊ธฐ์ค์ผ๋ก ํ๋ค.
| ๊ธฐ๋ฅ | ์งง์ ์ค๋ช |
|---|---|
| Rust core update loop | ๊ฒ์ ์ํ์ ๋ฌผ๋ฆฌ, ์ฌ ๋ก์ง์ Rust์์ ๊ฐฑ์ ํ๋ค. |
| Wasm bridge | Rust buffer์ TypeScript renderer/audio/input์ ์ฐ๊ฒฐํ๋ค. |
createEngine(...) |
Wasm engine๊ณผ frame callback์ ๋ฌถ๋ ๋ฎ์ ์์ค ์คํ API๋ค. |
createFerrumRuntime(...) |
canvas, renderer, input, audio, UI๋ฅผ ํ ๋ฒ์ ๋ง๋๋ ๋ธ๋ผ์ฐ์ runtime์ด๋ค. |
| Frame pipeline | ์ ๋ ฅ ์ ๋ฌ, Rust update, buffer read, audio drain, render๋ฅผ ์์๋๋ก ์ฒ๋ฆฌํ๋ค. |
FrameState |
ํ frame์ ์ ์, ์นด๋ฉ๋ผ, sprite, audio, physics debug, action diagnostic ์ ๋ณด๋ฅผ ๋ด๋๋ค. |
| Bulk buffer ABI | render/audio/gameplay/collision/physics/frame telemetry ๋ฐ์ดํฐ๋ฅผ ์ซ์ buffer๋ก ํ ๋ฒ์ ๋๊ธด๋ค. |
| Game state snapshot | ์ธ์ด๋ธ์ฉ JSON snapshot์ ์บก์ฒ, ๋ณต์, ์ ์ฅ, ํด์ ๊ฒ์ฆํ๋ค. |
| Runtime profiler | frame/render/Rust update/asset load budget์ ์ํ๋งํ๋ค. |
| Diagnostic report | runtime๊ณผ package ์ํ๋ฅผ ์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ด report๋ก ๋ง๋ ๋ค. |
| ๊ธฐ๋ฅ | ์งง์ ์ค๋ช |
|---|---|
| WebGL2 renderer | ๊ธฐ๋ณธ 2D sprite renderer๋ค. |
| WebGPU renderer | ์ง์ ํ๊ฒฝ์์ ์ ํ ์ฌ์ฉํ๊ณ ์คํจํ๋ฉด WebGL2๋ก fallbackํ๋ค. WebGL2๊ฐ ๊ธฐ์ค renderer๋ค. |
| Render command buffer | Rust๊ฐ sprite draw command๋ฅผ ๋ง๋ค๊ณ TS๊ฐ GPU๋ก ๊ทธ๋ฆฐ๋ค. |
| Viewport render culling | ํ๋ฉด ๋ฐ tile, sprite, particle command ์์ฑ์ ์ค์ธ๋ค. |
| Camera preset | follow, dead-zone, look-ahead, shake ์นด๋ฉ๋ผ๋ฅผ Game Spec์ผ๋ก ์ค์ ํ๋ค. |
| Camera rig | CameraRigController๋ก dead-zone, bounds, optional smoothing ๊ธฐ๋ฐ camera center๋ฅผ ๊ณ์ฐํ๋ค. |
| Sprite batching | ๊ฐ์ texture/material draw๋ฅผ ๋ฌถ์ด draw call์ ์ค์ธ๋ค. |
| Sprite material preset | unlit, flash, additive, outline ๊ฐ์ ์ ์ฒด sprite pass ํจ๊ณผ๋ฅผ ์ ์ฉํ๋ค. |
| HD-2D render sort | floor, elevation, footY, render layer๋ก sprite command ์ ๋ ฌ์ ์์ ํํ๋ค. |
| Texture manager/registry | texture asset์ id/name์ผ๋ก ๊ด๋ฆฌํ๋ค. |
| Tilemap renderer | static/dynamic tile layer๋ฅผ render command๋ก ๊ทธ๋ฆฐ๋ค. |
| Particle system | Rust particle simulation๊ณผ burst render command๋ฅผ ์ ๊ณตํ๋ค. |
| VFX preset/emitter | hit spark, dust loop, motion trail ๊ฐ์ low-frequency VFX helper๋ค. |
| Lighting pass | ambient, point light, tile occluder shadow๋ฅผ platform renderer์์ ์ฒ๋ฆฌํ๋ค. |
| HD-2D lighting occluder helper | tile blocksVision๊ณผ occluderHeight๋ฅผ lighting shadow occluder๋ก ๋ฐ๊พผ๋ค. |
| Post-processing | WebGL2 fade/bloom/CRT/vignette/glitch fullscreen pass๋ฅผ ์ง์ํ๋ค. |
| WebGPU fade pass | WebGPU ๊ฒฝ๋ก์์๋ fade post-process๋ง ์ง์ํ๋ค. |
| Screen fade transition | ScreenFadeTransition์ผ๋ก ์๊ฐ ๊ธฐ๋ฐ fade-in/out state์ post-process pass๋ฅผ ๋ง๋ ๋ค. |
| PixelMaskTerrain texture upload | ํ๊ดด ๊ฐ๋ฅํ alpha mask texture์ dirty patch upload๋ฅผ ์ง์ํ๋ค. |
| Screenshot summary | smoke test์ฉ canvas pixel summary์ baseline ๋น๊ต๋ฅผ ๋ง๋ ๋ค. |
| ๊ธฐ๋ฅ | ์งง์ ์ค๋ช |
|---|---|
| InputManager | keyboard, mouse, pointer, touch, gamepad ์ ๋ ฅ์ snapshot์ผ๋ก ํฉ์น๋ค. |
| Action profile | raw input์ move, fire, jump ๊ฐ์ ๊ฒ์ action์ผ๋ก ๋ฐ๊พผ๋ค. |
| Virtual controls | ๋ชจ๋ฐ์ผ์ฉ joystick/button DOM control์ ์ ๊ณตํ๋ค. |
| AssetLoader | texture, sound, JSON asset์ ๋ก๋ํ๋ค. |
| Asset preload plan | loading screen์ฉ manifest, progress, cache version์ ๋ง๋ ๋ค. |
| IndexedDB asset cache | opt-in preload cache implementation์ ์ฃผ์ ํ์ ๋ JSON/binary body cache๋ก ๋ฐ๋ณต fetch๋ฅผ ์ค์ธ๋ค. |
| LoadingOverlay | asset load progress๋ฅผ DOM UI๋ก ํ์ํ๋ค. |
| Texture atlas packer | sprite ํฌ๊ธฐ/source metadata๋ฅผ deterministic atlas JSON๊ณผ game.json frame metadata๋ก ๋ฌถ๋ authoring helper๋ค. ์ค์ PNG ํฉ์ฑ์ ์ธ๋ถ ๋๊ตฌ๊ฐ ๋ด๋นํ๋ค. |
| Atlas metadata helper | sprite name/size/source ๋ชฉ๋ก์ deterministic atlas JSON์ผ๋ก ๋ณํํ๋ค. |
| Aseprite importer | Aseprite JSON frame metadata๋ฅผ Game Spec atlas frame์ผ๋ก ๋ฐ๊พผ๋ค. |
| Tiled importer | Tiled orthogonal map์ atlas/tilemap ์ค์ ์ผ๋ก ๋ฐ๊พผ๋ค. |
| LDtk importer | LDtk project/level/tile/entity metadata๋ฅผ Game Spec์ผ๋ก ๋ฐ๊พผ๋ค. |
| Tile rules/animated tiles | neighbor rule๊ณผ animated tile frame์ baked layer data๋ก ๋ง๋ ๋ค. |
| Level streaming helper | ํฐ tilemap chunk์ active/preload/retain/load/unload plan์ ๊ณ์ฐํ๋ค. |
| AudioManager | Web Audio ๊ธฐ๋ฐ์ผ๋ก BGM, SFX, UI sound๋ฅผ ์ฌ์ํ๋ค. |
| Audio bus volume | master/bgm/sfx/ui gain์ ๋ฐ๋ก ์กฐ์ ํ๋ค. |
| BGM fade | BGM loop, fade-in, fade-out์ ์ง์ํ๋ค. |
| Rust audio event channel | Rust audio event๋ฅผ BGM/SFX/UI bus๋ก ๋ผ์ฐํ ํ๋ค. |
| ๊ธฐ๋ฅ | ์งง์ ์ค๋ช |
|---|---|
| Shooter Game Spec | Top-down Shooter starter scene์ JSON์ผ๋ก ์ค์ ํ๋ค. |
| Physics Spec | rigid body, collider, joint, material, layer๋ฅผ JSON์ผ๋ก ์ ์ํ๋ค. |
| Physics HD-2D authoring | physics.hd2d, body floor/elevation/height, tile HD-2D metadata๋ฅผ ๊ฒ์ฆํ๊ณ runtime์ ์ ์ฉํ๋ค. |
| Physics authoring compiler | tooling metadata๋ฅผ ์ ๊ฑฐํ๊ณ runtime Physics Spec๋ง ์ถ์ถํ๋ค. |
| Scene composition | prefab, variant, reusable fragment๋ฅผ flat instance๋ก ๋ง๋ ๋ค. |
| Behavior recipe | health, damage, pickup, chase ๊ฐ์ ํํ ํ๋์ command๋ก ๋ณํํ๋ค. ๊ธฐ๋ณธ Rust adapter์ ์คํ ๋ฒ์๋ ํ์ฌ Shooter/component capability๋ฅผ ๋ฐ๋ฅธ๋ค. |
| Animation timeline | sprite frame, event, state transition์ ๋ฐ์ดํฐ๋ก ์ฌ์ํ๋ค. |
| Cutscene sequence | wait/camera/audio/dialogue command timeline์ ์คํํ๋ค. |
| HUD toolkit | meter, counter, prompt, message๋ฅผ UiOverlayState๋ก ๋ง๋ ๋ค. |
| Localization helper | locale fallback, placeholder, ์งง์ UI text layout์ ์ฒ๋ฆฌํ๋ค. |
| Dialogue session | ๋ํ node, choice, flag ์งํ์ ๊ด๋ฆฌํ๋ค. |
| Quest log | quest, stage, objective ์งํ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค. |
| Accessibility helper | reduced motion, subtitle, contrast palette, input assist๋ฅผ ์ ๊ทํํ๋ค. |
| Debug gizmo helper | path, spawn, prefab, collider authoring data๋ฅผ debug line์ผ๋ก ๋ง๋ ๋ค. |
| ๊ธฐ๋ฅ | ์งง์ ์ค๋ช |
|---|---|
| World/entity storage | entity id, generation, component storage๋ฅผ Rust๊ฐ ๊ด๋ฆฌํ๋ค. |
| Transform/velocity/sprite components | ๊ธฐ๋ณธ 2D ์ด๋๊ณผ ๋ ๋๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. |
| AABB collision | ๊ธฐ๋ณธ arcade collision๊ณผ overlap ํ์ ์ ์ ๊ณตํ๋ค. |
| Collider shapes | AABB, circle, capsule, oriented box, convex polygon, edge, chain์ ์ง์ํ๋ค. |
| Compound colliders | ํ rigid body์ ์ฌ๋ฌ collider๋ฅผ ๋ถ์ผ ์ ์๋ค. |
| Layer/filter/mask | collision category์ mask๋ก ์ถฉ๋ ๋์์ ์ ํํ๋ค. |
| HD-2D height span | floor/elevation/height๋ก ์๋ก ๋ค๋ฅธ ์ธต์ body ์ถฉ๋์ ๋ถ๋ฆฌํ๋ค. |
| HD-2D query filter | body/tile query, raycast, shape-cast, contact/manifold์ optional heightSpan filter๋ฅผ ์ ์ฉํ๋ค. |
| HD-2D runtime metadata API | body height span๊ณผ tile height/kind/ramp/bridge metadata๋ฅผ ๋ฎ์ ๋น๋ API๋ก ๋ฐ๊พผ๋ค. |
| HD-2D tile metadata | tile kind/ramp/blocking metadata๋ฅผ Game Spec, Tiled/LDtk importer, runtime API๋ก ์ค์ ํ๋ค. |
| HD-2D kinematic move | height span ๊ธฐ๋ฐ ์ด๋, ๋จ์ฐจ, ramp ๋ณด๊ฐ, ledge drop, bridge under-pass๋ฅผ ์ฒ๋ฆฌํ๋ค. |
| HD-2D bridge navigation | bridgePortal๊ณผ toHeightSpan์ผ๋ก ์/์๋ floor path๋ฅผ ๊ณ์ฐํ๋ค. |
| HD-2D projectile combat | projectile arc, bullet height span, blocksProjectile tile filter๋ฅผ ์ฒ๋ฆฌํ๋ค. |
| HD-2D snapshot/telemetry | height span snapshot sidecar์ player/filter debug ์งํ๋ฅผ ์ ๊ณตํ๋ค. |
| Contact/manifold | ์ถฉ๋ normal, penetration, contact point๋ฅผ ๊ณ์ฐํ๋ค. |
| Point/area query | point, AABB, circle, capsule, oriented box, polygon query๋ฅผ ์ ๊ณตํ๋ค. |
| Ray/segment/shape cast | raycast, segment cast, shape cast๋ก ์ด๋ ๊ฒฝ๋ก ์ถฉ๋์ ์ฐพ๋๋ค. |
| Tilemap collision cache | solid tile rect๋ฅผ chunk cache๋ก ๋ฌถ์ด query ๋ฒ์๋ฅผ ์ค์ธ๋ค. |
| Slope/one-way tile | platformer์ฉ slope์ one-way platform์ ์ง์ํ๋ค. |
| Tile obstacle queries | tile nearest/raycast/swept/contact/manifold query๋ฅผ ์ ๊ณตํ๋ค. |
| Kinematic controller | top-down/platformer ์ด๋, slide, ground probe, step offset์ ์ฒ๋ฆฌํ๋ค. |
| Rigid body solver | dynamic/static/kinematic body์ ํ, ์ถฉ๊ฒฉ๋, ์์น ๋ณด์ ์ ๊ณ์ฐํ๋ค. |
| Fixed timestep | ์์ ์ ์ธ ๋ฌผ๋ฆฌ step๊ณผ interpolation alpha๋ฅผ ์ ๊ณตํ๋ค. |
| CCD | ๋น ๋ฅธ rigid body์ tunneling์ ์ค์ธ๋ค. |
| Sleeping/islands | ์ฌ๋ rigid body์ island schedule๋ก solver ๋น์ฉ์ ์ค์ธ๋ค. |
| Joints | distance, rope, spring, pulley, revolute, prismatic, weld, gear joint๋ฅผ ์ง์ํ๋ค. |
| Vehicle rig helper | prismatic guide์ spring suspension์ผ๋ก ๊ฐ๋จํ ์ฐจ๋ rig๋ฅผ ๋ง๋ ๋ค. |
| Material/tuning | friction, restitution, density, damping ๊ฐ์ ๋ฌผ๋ฆฌ ๊ฐ์ ์ค์ ํ๋ค. |
| Physics debug lines | broadphase, contacts, manifolds, colliders, joints, sleeping, layers, CCD๋ฅผ ์ ์ผ๋ก ํ์ํ๋ค. |
| Collision lifecycle events | enter/stay/exit/hit/trigger event๋ฅผ opt-in์ผ๋ก ์ถ์ ํ๋ค. |
| Body state buffer | rigid body ์ํ๋ฅผ typed array๋ก bulk snapshot/restoreํ๋ค. |
| Physics snapshot/replay | Physics Spec world๋ฅผ ์บก์ฒ, ๋ณต์, replay hash๋ก ๊ฒ์ฆํ๋ค. |
| Replay Worker client | replay ๊ฒ์ฆ์ opt-in Web Worker์์ ์คํํ๋ค. |
| PixelMaskTerrain collision | alpha mask terrain์ collision tilemap/chain boundary๋ก ๋ณํํ๋ค. |
| ๊ธฐ๋ฅ | ์งง์ ์ค๋ช |
|---|---|
| Tilemap authoring API | tile definition, layer, tile edit, rect edit์ ์ ๊ณตํ๋ค. |
| Dirty chunk rebuild | ๋ณ๊ฒฝ๋ collision chunk๋ง ๋ค์ ๋ง๋ ๋ค. |
| Tile navigation | collision layer ๊ธฐ๋ฐ A* waypoint/path query์ HD-2D multi-floor path๋ฅผ ์ ๊ณตํ๋ค. |
| Boundary chain export | tilemap collision layer๋ฅผ Physics Spec chain body๋ก ๋ฐ๊พผ๋ค. |
| Starter Runtime | ๊ฐ์ฅ ์์ createFerrumRuntime(...) ์ฌ์ฉ ์์ ๋ค. |
| Top-down Shooter | Game Spec, combat, enemy wave, audio/VFX, tilemap์ ๊ฒ์ฆํ๋ starter scene์ด๋ค. |
| Breakout | built-in Breakout scene hook๊ณผ arcade starter ํ๋ฆ์ ๊ฒ์ฆํ๋ template์ด๋ค. |
| Platformer | built-in platformer scene hook, controller, slope, jump, ground state๋ฅผ ๊ฒ์ฆํ๋ template์ด๋ค. |
| Physics Sandbox | Physics Spec authoring/debug ํ๋ฆ์ ๊ฒ์ฆํ๋ ์์ ๋ค. |
@ferrum2d/ferrum-web |
๋ธ๋ผ์ฐ์ ๊ฒ์ runtime npm package๋ค. |
@ferrum2d/create-game |
์ Ferrum2D ๊ฒ์ ํ๋ก์ ํธ ์์ฑ CLI๋ค. |
@ferrum2d/agents |
consumer game ๊ฐ๋ฐ์ฉ agent/skill/command ์ค์น CLI๋ค. |
| Package QA scripts | tarball, exports, Wasm artifact, consumer import๋ฅผ ๊ฒ์ฆํ๋ ํ์ง ์ธํ๋ผ๋ค. |
| Pages build scripts | demo/docs GitHub Pages artifact๋ฅผ ์์ฑํ๋ ๋ฐฐํฌ ์ธํ๋ผ๋ค. |
| Smoke checks | headless/browser/spec/package/release ํ๊ท๋ฅผ ๊ฒ์ฆํ๋ ํ์ง ์ธํ๋ผ๋ค. |
- 3D ๋ ๋๋ง
- ์ ์ฒด ๊ฒ์ ๋ฃจํ์ Web Worker ์ด์
- Wasm threads / SharedArrayBuffer ๊ธฐ๋ณธ ๋น๋
- Full visual editor ์ค์ฌ ๊ฐ๋ฐ ๋ฐฉ์
- ๋ฉํฐํ๋ ์ด์ด
- user scripting/plugin runtime
- skeletal animation
- soft body, cloth, fluid ๊ฐ์ complex physics core ํ์ฅ
- spatial audio์ ๋ณต์กํ mixer automation
์ผ๋ถ ์ ์ธ ํญ๋ชฉ์ ์ด์ public API ์ด๋ฆ์ ๋ง์ด๊ทธ๋ ์ด์ ๋ฆฌ์คํฌ๋ฅผ ์ค์ด๊ธฐ ์ํ deprecated compatibility shim์ผ๋ก๋ง ๋จ์ ์์ ์ ์๋ค. ์ด shim์ ์ ํ ๋ฐํ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ผ๋ฉฐ, ๊ธฐ๋ณธ ์คํ ๊ฒฝ๋ก๋ WebGL2/WebGPU renderer, requestAnimationFrame, SFX, ์ง์ asset loading์ผ๋ก ์ ํํ๋ค.
Ferrum2D npm ๋ฐฐํฌ ๋จ์๋ ์ญํ ๋ณ๋ก ๋ถ๋ฆฌํ๋ค.
| package | ์ญํ |
|---|---|
@ferrum2d/ferrum-web |
๊ฒ์ ์คํ์ ํ์ํ ์์ง ๋ฐํ์ ๋ณธ์ฒด |
@ferrum2d/create-game |
์ Ferrum2D ๊ฒ์ ํ๋ก์ ํธ ์์ฑ CLI |
@ferrum2d/agents |
AI๋ก Ferrum2D ๊ฒ์์ ๊ฐ๋ฐํ ๋ ์ฌ์ฉํ๋ consumer agent/skill/command ์ค์น CLI. Agent Template Showcase ๊ธฐ์ค์ packages/agents/README.md๋ค. |
์ ๊ฒ์ ํ๋ก์ ํธ๋ ๋ค์ ํ๋ฆ์ผ๋ก ๋ง๋ ๋ค.
npm create @ferrum2d/game my-game
cd my-game
npm install
npm run devAI agent/skill์ ๋ช
์์ ์ผ๋ก ์ค์นํ๋ค. npm install @ferrum2d/ferrum-web๋ง์ผ๋ก ์ฌ์ฉ์ ํ๋ก์ ํธ์ .agents, .codex, .claude, .gemini ํ์ผ์ ๋ณ๊ฒฝํ์ง ์๋๋ค.
npx @ferrum2d/agents init --tools codex,claude,geminiFerrum2D๋ Rust/Wasm core์ TypeScript web package๋ฅผ ํจ๊ป ๋น๋ํ๋ค. Rust toolchain, Wasm target, wasm-pack, Node.js, pnpm์ด ๋ชจ๋ ํ์ํ๋ค.
Rust stable๊ณผ Wasm target์ ์ค๋นํ๋ค.
rustup default stable
rustup target add wasm32-unknown-unknownWasm package ์์ฑ์๋ wasm-pack์ด ํ์ํ๋ค.
cargo install wasm-pack
wasm-pack --versionNode.js๋ 22 ๋ฒ์ ์ ๊ถ์ฅํ๋ค. Corepack์ผ๋ก pnpm 10.8.0์ ํ์ฑํํ๋ค.
node --version
corepack enable
corepack prepare pnpm@10.8.0 --activate
pnpm --version์ ์ฅ์ ๋ฃจํธ์์ workspace ์์กด์ฑ์ ์ค์นํ๋ค.
pnpm install์ค์ ์ด ๋๋๋ฉด ๊ธฐ๋ณธ ๊ฒ์ฆ์ ์คํํ๋ค.
pnpm test
pnpm buildpnpm build๊ฐ wasm32-unknown-unknown target not found๋ก ์คํจํ๋ฉด PATH์์ rustup Rust๊ฐ ์๋ ๋ค๋ฅธ Rust๊ฐ ๋จผ์ ์กํ ์ํ์ผ ์ ์๋ค. ์ด ๊ฒฝ์ฐ which rustc, rustup which rustc, rustup target list --installed๋ฅผ ํ์ธํ๋ค.
์ต์ starter ์์ ๋ ๋ณ๋ asset ์์ด engine loop์ WebGL2 render path๋ฅผ ํ์ธํ๋ค.
pnpm dev:starter-runtime์ฅ๋ฅด ๊ฒ์ฆ ์์ ๋ ๊ฐ์ runtime/API ์์์ ์คํ๋๋ค.
pnpm dev:breakout
pnpm dev:platformerPhysics Spec ๊ธฐ๋ฐ generic rigid body sandbox๋ ๋ค์์ผ๋ก ์คํํ๋ค.
pnpm dev:physics-sandboxData Scene ๊ธฐ๋ฐ ์ค๋ธ์ ํธ ๋ฐฐ์น ํ์ธ์ฉ authoring viewer๋ ๋ค์์ผ๋ก ์คํํ๋ค.
pnpm dev:placement-viewerTop-down Shooter ์์ ๋ Rust core๋ฅผ ์์ ํ๊ฑฐ๋ ์ฒ์ ์คํํ๋ ๊ฒฝ์ฐ Wasm package๋ฅผ ๋จผ์ ๋ง๋ ๋ค.
pnpm build:wasm
pnpm --filter @ferrum2d/topdown-shooter dev๊ธฐ๋ณธ Vite URL์ ๋ค์๊ณผ ๊ฐ๋ค.
http://localhost:5173
DebugOverlay๋ฅผ ํ์ํ๋ ค๋ฉด URL์ ?debug=true๋ฅผ ๋ถ์ธ๋ค.
http://localhost:5173?debug=true
Enter๋๋Space: Title์์ ๊ฒ์ ์์W/A/S/D: ํ๋ ์ด์ด ์ด๋Mouse Left๋๋Space: ๋ง์ฐ์ค ๋ฐฉํฅ์ผ๋ก ๋ฐ์ฌSpace: GameOver์์ ์ฌ์์
์ ์ฒด ๋น๋:
pnpm buildRust ํ ์คํธ:
cargo test --manifest-path crates/ferrum-core/Cargo.tomlTypeScript ํ ์คํธ:
pnpm test:web์ ์ฒด ํ ์คํธ:
pnpm testGame Spec ๊ฒ์ฆ๊ณผ smoke check:
pnpm validate:game-spec
pnpm smoke:headless
pnpm smoke:checkํจํค์ง์ ๋ฆด๋ฆฌ์ค ํ๋ณด ๊ฒ์ฆ:
pnpm package:check
pnpm package:consumer-smoke
pnpm release:checkconsumer game์ ๊ธฐ๋ณธ ์ ํ ํ๋ฆ์ ์ ํ๋ก์ ํธ ์์ฑ, agent ์ค์น, machine-readable report ํ์ธ, ๊ฒ์ฆ ์์๋ก ๊ณ ์ ํ๋ค.
npm create @ferrum2d/game my-game -- --template minimal
cd my-game
npm install
npx @ferrum2d/agents init --tools codex,claude,gemini
npm run ferrum:report
npm run ferrum:validate
npm run ferrum:smoke
npm run ferrum:deploy-report
npm run previewferrum:report๋ ferrum2d.consumer.project.report JSON envelope๋ก package dependency, public import surface, template files์ ์ ์ ์น ๋ฐฐํฌ ๊ณ์ฝ์ ์์ฝํ๊ณ ์ต์์ recommendedCommands๋ฅผ ์ ๊ณตํ๋ค. ferrum:smoke๋ ์์ฑ ํ๋ก์ ํธ ์์์ validate/build ๊ธฐ์ค์ ํ ๋ฒ์ ํ์ธํ๋ ๊ธฐ๋ณธ gate๋ค. ferrum:deploy-report๋ production build ๋ค dist/์ HTML ๋ฐ ์ ์ ์ผ๋ก ํ๋ณ ๊ฐ๋ฅํ runtime/CSS asset ๊ฒฝ๋ก์ ์ฐธ์กฐ ํ์ผ์ ๊ฐ์ ํ์ HTTP ๊ฒฝ๋ก์์ ๊ฒ์ฌํ๊ณ , ์์ฑ ํ๋ก์ ํธ์ ์ค์ preview ๋ช
๋ น์ด Wasm์ application/wasm์ผ๋ก ์ ๊ณตํ๋์ง ํ์ธํด ferrum2d.consumer.deploy-readiness.report๋ฅผ ์ถ๋ ฅํ๋ค. file:// ์ง์ ์คํ์ ์ง์ํ์ง ์์ผ๋ฉฐ ๋ก์ปฌ ํ์ธ์ npm run preview๋ฅผ ์ฌ์ฉํ๋ค. pnpm package:consumer-smoke๋ ์ด ํ๋ฆ์ local tarball๋ก ์์ฑํ ์ค์ consumer project์์ ๊ฒ์ฆํ๊ณ , Chromium ๊ฐ์ ํ์ ๊ฒฝ๋ก์์ Playing ์ํ, ์ํฐํฐยทspriteยทrender command ์, ์๋ฃ๋ renderer frame 12๊ฐ์ template๋ณ draw-call budget, ๊ฐ์ RAF์ WebGL2 pixel readback ๋ฐ Wasm MIME๊น์ง ํ์ธํ๋ค.
์ค์ publish ํ๋ณด ์ ํ ์ ์ ์ฒด release gate๋ docs/development/operations/npm-release.md๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ค.
GitHub Pages demo/docs artifact ์์ฑ:
pnpm build
pnpm build:pagesPages home๊ณผ Showcase Hub๋ runtime demo, authoring workflow, physics, create-game/agent workflow, package/release readiness๋ฅผ ํ ๋ฒ์ ์ฐพ๋ ์ง์ ์ ์ด๋ค.
์์ฉ์ ํ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๊ธฐ๋ณธ ๊ฒ์ฆ:
cargo test --manifest-path crates/ferrum-core/Cargo.toml
pnpm lint
pnpm test
pnpm validate:game-spec
pnpm smoke:headless
pnpm package:check
pnpm package:consumer-smoke
pnpm release:check
pnpm build์๋ smoke check ๊ธฐ์ค์ Top-down Shooter ์ฒดํฌ๋ฆฌ์คํธ์ Smoke Check ๋ฌธ์๋ฅผ ๋ฐ๋ฅธ๋ค.
crates/ferrum-core/ Rust core, scenes, game state, collision/physics, render/audio command
packages/ferrum-web/ TypeScript platform layer, WasmBridge, WebGL2/WebGPU renderer
packages/create-game/ npm create์ฉ ๊ฒ์ ํ๋ก์ ํธ ์์ฑ CLI
packages/agents/ consumer game development์ฉ AI agent/skill ์ค์น CLI
examples/shared/ ์์ ๊ณตํต demo shell, metric panel, smoke hook
examples/starter-runtime/ createFerrumRuntime starter ์์
examples/minimal-game/ Minimal Runtime Lab; visual-runtime-lab/input-ui-lab smoke fixture
examples/breakout/ Breakout ์ฅ๋ฅด ๊ฒ์ฆ ์์
examples/platformer/ Platformer controller ๊ฒ์ฆ ์์
examples/topdown-shooter/ Top-down Shooter ๊ฒ์ฆ ์์
examples/physics-sandbox/ Physics Spec authoring/debug ๊ฒ์ฆ ์์
apps/placement-viewer/ Official Data Scene placement authoring viewer app
apps/placement-viewer-desktop/ Tauri desktop wrapper spike for the placement viewer
docs/ engine ์ค๋ช
๊ณผ development ๊ธฐ์ค ๋ฌธ์
scripts/ ์ ์ฅ์ ๋ณด์กฐ ์คํฌ๋ฆฝํธ
- ๋ฌธ์ ์ง๋
- Engine: ๊ฐ๋ฐ์ ํต์คํํธ, ์ฌ์ฉ์ ์ค๋ช ์, Public API, Public API Migration Guide, Physics Spec
- Examples: Top-down Shooter Game Spec
- Development Architecture: ์ํคํ ์ฒ, 2D ๋ฌผ๋ฆฌ์์ง ๊ธฐ๋ฅ ๋งต
- Development Quality: ์ฝ๋ ๋ฆฌ๋ทฐ ๊ธฐ์ค, Smoke Check
- Development Operations: GitHub Pages ๋ฐฐํฌ, npm ๋ฒ ํ ํจํค์ง, ๋ฆด๋ฆฌ์ค ๋ ธํธ ํ ํ๋ฆฟ
- ๋ณ๊ฒฝ ๊ธฐ๋ก
ํ์ฌ CI๋ main push์ main ๋์ pull request์์ Rust stable, wasm target, wasm-pack, Node.js 22, pnpm 10.8.0์ ์ค๋นํ ๋ค ๋ค์์ ์คํํ๋ค.
pnpm installcargo test --manifest-path crates/ferrum-core/Cargo.tomlpnpm smoke:physicspnpm smoke:runtime-budgetspnpm smoke:mass-objectspnpm smoke:topdown-mass-objectswasm-pack build crates/ferrum-core --target web --out-dir ../../packages/ferrum-web/pkgpnpm lintpnpm testpnpm buildpnpm package:checkpnpm validate:gameplay-authoring:reportpnpm smoke:gameplay-replay:reportpnpm validate:gameplay-report-artifactspnpm smoke:consumer-smoke-reportpnpm smoke:asset-pipelinepnpm smoke:create-game-template-catalogpnpm smoke:create-game-template-reportspnpm smoke:topdown-template-replay-report
pnpm build:pages๋ /starter-runtime/, /topdown-shooter/, /placement-viewer/, /physics-sandbox/, /breakout/, /platformer/ demo route์ docs/**/*.md ๊ธฐ๋ฐ ๋ฌธ์ HTML์ ๋ง๋ ๋ค. ferrum-web-v* tag push์์๋ ์ผ๋ฐ pnpm package:check ๋์ publish ํ๋ณด์ฉ pnpm package:publish-check:ferrum-web์ ์คํํ๋ค. ferrum-web-v* tag push ๋๋ ์๋ consumer_smoke opt-in์์๋ pnpm package:consumer-smoke -- --artifact-dir artifacts/consumer-smoke์ pnpm validate:consumer-smoke-report๋ ์คํํ๋ค. ๋ก์ปฌ ๋ฆด๋ฆฌ์ค ํ๋ณด ๊ฒ์ฆ์์๋ CI ๋ช
๋ น์ ๋ํด pnpm validate:game-spec์ ๋ธ๋ผ์ฐ์ ์๋ smoke check๋ฅผ ํจ๊ป ์คํํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค. ์ค์ npm publish๋ private: true ํด์ ์ npm ๊ถํ ํ์ธ์ด ์น์ธ๋ ๋ค ๋ณ๋๋ก ์ํํ๋ค.
Ferrum2D๋ MIT OR Apache-2.0 ๋์ผ ๋ผ์ด์ ์ค๋ก ๋ฐฐํฌํ๋ค. ์์ธํ ๋ด์ฉ์ LICENSE๋ฅผ ํ์ธํ๋ค.
