Skip to content

silbaram/ferrum2d

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

143 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Ferrum2D

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-web public 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

์œ„ ์ด๋ฏธ์ง€๋Š” 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์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.

Runtime / Wasm

๊ธฐ๋Šฅ ์งง์€ ์„ค๋ช…
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๋กœ ๋งŒ๋“ ๋‹ค.

Rendering / Visual

๊ธฐ๋Šฅ ์งง์€ ์„ค๋ช…
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 ๋น„๊ต๋ฅผ ๋งŒ๋“ ๋‹ค.

Input / Audio / Assets

๊ธฐ๋Šฅ ์งง์€ ์„ค๋ช…
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๋กœ ๋ผ์šฐํŒ…ํ•œ๋‹ค.

Authoring / Gameplay Data

๊ธฐ๋Šฅ ์งง์€ ์„ค๋ช…
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์œผ๋กœ ๋งŒ๋“ ๋‹ค.

Physics / Collision

๊ธฐ๋Šฅ ์งง์€ ์„ค๋ช…
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 / Scenes / Packaging

๊ธฐ๋Šฅ ์งง์€ ์„ค๋ช…
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์œผ๋กœ ์ œํ•œํ•œ๋‹ค.

npm ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ

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 dev

AI agent/skill์€ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์น˜ํ•œ๋‹ค. npm install @ferrum2d/ferrum-web๋งŒ์œผ๋กœ ์‚ฌ์šฉ์ž ํ”„๋กœ์ ํŠธ์˜ .agents, .codex, .claude, .gemini ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.

npx @ferrum2d/agents init --tools codex,claude,gemini

๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ค์ •

Ferrum2D๋Š” 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-unknown

Wasm package ์ƒ์„ฑ์—๋Š” wasm-pack์ด ํ•„์š”ํ•˜๋‹ค.

cargo install wasm-pack
wasm-pack --version

Node.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 build

pnpm 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:platformer

Physics Spec ๊ธฐ๋ฐ˜ generic rigid body sandbox๋Š” ๋‹ค์Œ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.

pnpm dev:physics-sandbox

Data Scene ๊ธฐ๋ฐ˜ ์˜ค๋ธŒ์ ํŠธ ๋ฐฐ์น˜ ํ™•์ธ์šฉ authoring viewer๋Š” ๋‹ค์Œ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.

pnpm dev:placement-viewer

Top-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 build

Rust ํ…Œ์ŠคํŠธ:

cargo test --manifest-path crates/ferrum-core/Cargo.toml

TypeScript ํ…Œ์ŠคํŠธ:

pnpm test:web

์ „์ฒด ํ…Œ์ŠคํŠธ:

pnpm test

Game Spec ๊ฒ€์ฆ๊ณผ smoke check:

pnpm validate:game-spec
pnpm smoke:headless
pnpm smoke:check

ํŒจํ‚ค์ง€์™€ ๋ฆด๋ฆฌ์Šค ํ›„๋ณด ๊ฒ€์ฆ:

pnpm package:check
pnpm package:consumer-smoke
pnpm release:check

consumer 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 preview

ferrum: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:pages

Pages 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/                    ์ €์žฅ์†Œ ๋ณด์กฐ ์Šคํฌ๋ฆฝํŠธ

์ƒ์„ธ ๋ฌธ์„œ

GitHub Actions

ํ˜„์žฌ CI๋Š” main push์™€ main ๋Œ€์ƒ pull request์—์„œ Rust stable, wasm target, wasm-pack, Node.js 22, pnpm 10.8.0์„ ์ค€๋น„ํ•œ ๋’ค ๋‹ค์Œ์„ ์‹คํ–‰ํ•œ๋‹ค.

  • pnpm install
  • cargo test --manifest-path crates/ferrum-core/Cargo.toml
  • pnpm smoke:physics
  • pnpm smoke:runtime-budgets
  • pnpm smoke:mass-objects
  • pnpm smoke:topdown-mass-objects
  • wasm-pack build crates/ferrum-core --target web --out-dir ../../packages/ferrum-web/pkg
  • pnpm lint
  • pnpm test
  • pnpm build
  • pnpm package:check
  • pnpm validate:gameplay-authoring:report
  • pnpm smoke:gameplay-replay:report
  • pnpm validate:gameplay-report-artifacts
  • pnpm smoke:consumer-smoke-report
  • pnpm smoke:asset-pipeline
  • pnpm smoke:create-game-template-catalog
  • pnpm smoke:create-game-template-reports
  • pnpm 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 ๊ถŒํ•œ ํ™•์ธ์ด ์Šน์ธ๋œ ๋’ค ๋ณ„๋„๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค.

License

Ferrum2D๋Š” MIT OR Apache-2.0 ๋“€์–ผ ๋ผ์ด์„ ์Šค๋กœ ๋ฐฐํฌํ•œ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE๋ฅผ ํ™•์ธํ•œ๋‹ค.

About

No description, website, or topics provided.

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors