Pular para o conteúdo
NUGANUGA
Entrar

SDK Web da NUGANUGA

Seu jogo roda em um iframe isolado em https://play.nuganuga.com. O SDK é o único canal para a plataforma — você nunca implementa autenticação, ranking, compartilhamento, publicidade ou analytics por conta própria.

1. Carregar o SDK

Sempre por este caminho absoluto exato. A plataforma serve e versiona ele.

<script src="/sdk/nuga-sdk.js"></script>
<script src="./game.js"></script>

2. As quatro chamadas

const ctx = await Nuga.ready();       // esperar a plataforma
await Nuga.game.start();              // quando o jogador realmente começa uma partida
await Nuga.score.submit({ score });    // exatamente uma pontuação numérica por partida
await Nuga.game.finish();             // a plataforma desenha a tela de resultado

Não desenhe sua própria tela de resultado, botão de repetir, botão de compartilhar ou ranking — a plataforma renderiza isso depois de finish(), igual para todos os jogos.

3. Todo o resto

Nuga.game.getContext();
Nuga.player.get();
Nuga.challenge.get();
Nuga.storage.get(key);
Nuga.storage.set(key, value);
Nuga.audio.setMuted(true);
Nuga.locale.get();               // 'en' | 'ko' | ...
Nuga.event.track('level_up', { level: 3 });
Nuga.on('pause', () => pauseLoop());

4. O manifesto

nuga.json na raiz do seu pacote:

{
  "schemaVersion": 1,
  "name": "Reaction Hunter",
  "slug": "reaction-hunter",
  "description": "Click 10 targets as fast as possible.",
  "rule": "Tap every target as fast as you can.",
  "category": "REACTION",
  "orientation": "PORTRAIT",
  "duration": { "min": 5, "max": 30 },
  "input": ["POINTER", "TOUCH"],
  "ranking": { "type": "LOW_TIME", "unit": "ms" },
  "entry": "index.html",
  "locales": {
    "ko": { "name": "리액션 헌터", "description": "10개의 타겟을 빠르게 클릭하세요." }
  }
}

Tipos de ranking: HIGH_SCORE, LOW_SCORE, LOW_TIME, HIGH_TIME, CUSTOM. Categorias: REACTION, TIMING, ACCURACY, MEMORY, PUZZLE, LUCK, ARCADE.

5. Regras do ambiente isolado

A validação estática rejeita qualquer pacote que quebre uma destas, antes que ele chegue a um jogador:

Baixar o kit inicial

6. As pontuações são verificadas

Cada partida recebe uma sessão no servidor. Seu jogo nunca vê o token da sessão — a casca da plataforma guarda ele e envia por você — e o servidor confere a pontuação contra a duração real e os limites declarados no manifesto antes de ela entrar em um ranking.

Dá para fazer melhor. Gere a aleatoriedade a partir da semente emitida pelo servidor e registre o que realmente aconteceu: o servidor recalcula a partida com seus eventos em vez de confiar no número. Uma pontuação que sua repetição não sustenta é recusada na hora.

const rng = Nuga.random();          // semeado pelo servidor — reproduzível, diferente de Math.random()
const target = rng.int(0, 8);

Nuga.replay.record('hit', 172);     // um resultado relevante para a pontuação, até 400 por partida

Declare a mecânica em nuga.json para ligar isso. Sem ela seu jogo continua no ranking, só com as checagens de duração e limites.

"verification": { "kind": "REPLAY_V1", "mechanic": "REACTION",
                   "params": { "rounds": 5 } }

7. Publicar

Compacte a raiz do pacote (não a pasta) e envie no console do criador. Validação estática, build e os testes de runtime, responsividade, jogabilidade e segurança rodam automaticamente; publicar libera quando todos passarem.