readme.md hinzugefügt
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
# FrankieSDK v1
|
||||
|
||||
> Include this in your arcade game to talk to Frankie OS.
|
||||
|
||||
|
||||
## Game Structure
|
||||
|
||||
Your game must be packaged as a `.zip` containing:
|
||||
|
||||
my-game.zip
|
||||
├── frankie-game.json ← Erforderliches Manifest (Format siehe unten)
|
||||
├── index.html ← Erforderlicher Einstiegspunkt
|
||||
└── assets/ ← Optional: JS, CSS, Bilder, Audio, etc.
|
||||
|
||||
## frankie-game.json Format
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "my-game", // slug: lowercase letters, digits, hyphens (1-64 chars)
|
||||
"version": "1.0.0", // your game version
|
||||
"title": "My Game", // shown on the cartridge
|
||||
"tagline": "A one-line pitch", // shown under the title
|
||||
"icon": "🎮", // emoji shown on the cartridge
|
||||
"kind": "ARCADE", // badge: ARCADE | VS | LLM | PET
|
||||
"author": "Your Name", // shown in the admin panel
|
||||
"order": 50, // sort position in the arcade grid (lower = first)
|
||||
"sdk_version": 1 // must be 1; future versions may be incompatible
|
||||
}
|
||||
```
|
||||
|
||||
Lifecycle Hooks (Events Received FROM Frankie)
|
||||
```javascript
|
||||
sdk.on('init', ({ userId, username, gameId, theme }) => { ... })
|
||||
```
|
||||
Called once after the iframe loads. Initialize your game here.
|
||||
You MUST call sdk.emit('ready') when your game has finished loading.
|
||||
```javascript
|
||||
sdk.on('pause', () => { ... })
|
||||
```
|
||||
Called when the arcade overlay loses focus (e.g. user switches tab).
|
||||
Pause timers, animations, and any ongoing audio.
|
||||
|
||||
```javascript
|
||||
sdk.on('resume', () => { ... })
|
||||
```
|
||||
Called when the overlay regains focus. Resume paused state.
|
||||
|
||||
Events Emitted TO Frankie
|
||||
```javascript
|
||||
sdk.emit('ready')
|
||||
```
|
||||
|
||||
Tell Frankie your game is loaded and ready. Required after 'init'.
|
||||
```javascript
|
||||
sdk.emit('xp', { amount: number, reason: string })
|
||||
```
|
||||
|
||||
Award XP to the player. reason is a short label shown in toasts.
|
||||
```javascript
|
||||
sdk.emit('win')
|
||||
```
|
||||
|
||||
Record a win for this game (increments win counter and awards XP).
|
||||
```javascript
|
||||
sdk.emit('score', { value: number })
|
||||
```
|
||||
|
||||
Submit a high score. Frankie keeps the all-time best per game.
|
||||
|
||||
```javascript
|
||||
sdk.emit('close')
|
||||
```
|
||||
|
||||
Close the game and return to the arcade grid.
|
||||
|
||||
LLM Access (for kind: "LLM" games)
|
||||
```javascript
|
||||
const reply = await sdk.llm([
|
||||
{ role: 'system', content: 'You are a trivia host.' },
|
||||
{ role: 'user', content: 'Ask me a question.' }
|
||||
])
|
||||
console.log(reply) // string — the model's response text
|
||||
Example (Vanilla JS)
|
||||
import sdk from './frankie-sdk.js'
|
||||
|
||||
sdk.on('init', ({ username }) => {
|
||||
document.querySelector('#welcome').textContent = `Hello, ${username}!`
|
||||
sdk.emit('ready')
|
||||
})
|
||||
|
||||
sdk.on('pause', () => clearInterval(gameLoop))
|
||||
sdk.on('resume', () => { gameLoop = setInterval(tick, 16) })
|
||||
|
||||
function onPlayerWin() {
|
||||
sdk.emit('win')
|
||||
sdk.emit('xp', { amount: 50, reason: 'Victory' })
|
||||
sdk.emit('score', { value: playerScore })
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user