OhMyGame
OhMyGame은 AI로 게임을 만들 수 있는 오픈소스 스튜디오로, 디자인·구축·플레이테스트·출판을 하나의 앱에서 모델 키와 함께 수행합니다
플레이 가능한 세계를 선택하고 지도·이벤트를 시각적으로 편집한 뒤 재생, 브라우저에서 무료 시작·RPGJS 소스 내보내기
Choose a playable world, customize maps and events visually, then press Play. Start free in your browser and export your RPGJS source.
게임TypeScript · CSSGitHub @RSamaium온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Framework to create an RPG or MMORPG (with the same code) in the browser with Typescript
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗RPGJS is a TypeScript framework for 2D RPGs and MMORPGs in the browser. Maps, events, dialogs, inventory, skills, combat, save/load, GUI and multiplayer synchronization are already there — you write the game, not the engine.
npx degit rpgjs/starter#v5 my-rpg-game
cd my-rpg-game
npm install
npm run dev
VITE v8.0.16 ready in 654 ms
➜ Local: http://localhost:5173/
RPGJS v5.0.0 RPG
➜ Game: ./src/standalone.ts
➜ Server: runs in the browser (standalone)
Open the link: your hero is already walking around a map. Prefer to follow along? Watch the 5-step getting started tutorial.
The gameplay you write runs on a server-owned model from day one. Switching from a single-player RPG to an MMORPG is a runtime choice, not a rewrite.
startGame({
...config,
providers: [provideRpg(startServer)],
});
npm run dev
startGame({
...config,
providers: [provideMmorpg({})],
});
RPG_TYPE=mmorpg npm run dev
In MMORPG mode the server stays authoritative, each map becomes a synchronized room, and the client predicts movement so the game still feels instant.
import { type EventDefinition, type RpgPlayer } from "@rpgjs/server";
export function Merchant(): EventDefinition {
return {
name: "Merchant",
onInit() {
this.setGraphic("merchant");
},
async onAction(player: RpgPlayer) {
const choice = await player.showChoices("Need something for the road?", [
{ text: "A potion (20 gold)", value: "potion" },
{ text: "Just looking", value: "no" },
]);
if (choice?.value === "potion" && player.gold >= 20) {
player.gold -= 20;
player.addItem("potion");
await player.showText("Safe travels!");
}
},
};
}
Want enemies that fight back? Give an event a battle AI:
new BattleAi(this, { enemyType: EnemyType.Aggressive });
| 🗺️ World | Maps, world maps, Tiled support, events, shared and per-player scenarios, weather, lighting, day/night |
| ⚔️ Gameplay | Items, skills, states, classes, real-time action battle, projectiles, hotbar, save/load |
| 🌐 Multiplayer | Authoritative server, map rooms, client prediction and reconciliation, live map updates, accounts, chat |
| 🖼️ Interface | Title screen, dialogs, menus, shop, HUD, character select, themes, mobile controls, gamepad, Vue overlays |
| 🌍 i18n | One translation catalog for server dialogs, client menus and modules |
| 🛠️ Tooling | TypeScript first, Vite, Vitest testing helpers, dependency injection, modules and plugins |
| ☁️ Deploy | Node or Cloudflare Workers, with no lock-in to a database or host |
Teach your coding assistant how RPGJS v5 works:
npx skills add https://github.com/RSamaium/RPG-JS#v5
Want the ideas behind the architecture? Read the RPGJS philosophy.
Coming from RPGJS v4? compatibilityV4Plugin() from @rpgjs/vite runs a
v4 project layout on the v5 runtime. See the
migration guide.
If RPGJS helps you build your game, a ⭐ on GitHub helps others find it.
MIT — free for commercial use.