# Desenhar jogos

Este documento aborda alguns pontos-chave a considerar ao projetar um jogo para Decentraland. Considerações como a adjacência de outras scenes e a propriedade distribuída da LAND tornam Decentraland um lugar único, que exige que você reconsidere premissas que talvez tenha de jogos anteriores.

Por exemplo, você precisa entender que, ao contrário de outras plataformas de jogos, os jogos em Decentraland não existem no vácuo. Você não tem controle sobre o que há nas scenes adjacentes, e também não tem controle sobre certos detalhes, como os avatares do jogador ou os itens que ele pode trazer de outros jogos. Isso abre a porta para possibilidades empolgantes e exige que você pense de forma diferente sobre as mecânicas de jogo.

A coisa mais próxima nos jogos mainstream hoje é Roblox, onde o conteúdo gerado pelos usuários na comunidade pode então se tornar um ponto de encontro para que outros explorem, joguem e interajam. Ao contrário de Roblox, você navega pelas scenes não por meio de um menu de experiências não relacionadas, mas explorando fisicamente um terreno onde todas as scenes são adjacentes umas às outras. Decentraland também faz uso da blockchain como uma forma de gerenciar a propriedade de terrenos, avatares, assets etc.

Estamos melhorando continuamente o SDK, então algumas das limitações a seguir serão removidas com atualizações futuras antes que Decentraland seja aberto aos usuários finais.

## Limites das scenes

**Seu jogo deve caber inteiramente na \_LAND**\_\*\* sobre a qual sua scene é construída.\*\* Para scenes pequenas, pense em jogos como futebol, em que as regras do jogo mantêm a interação relevante dentro de um espaço confinado, embora os jogadores possam sair do campo de jogo. Os jogadores podem sair dos limites de uma scene, mas qualquer asset ou entidades que pertençam à scene devem permanecer dentro da scene.

Os jogadores que saem da sua scene continuam a renderizá-la enquanto ela estiver em um alcance visível. Se eles se afastarem demais, deixarão de renderizá-la completamente.

Você também poderia criar um jogo que se espalhe por vários lotes de terreno desconectados, desconhecidos para os jogadores, e onde a exploração do resto do mundo se torne parte da jogabilidade. Um jogo assim seria composto por várias *scenes*, que poderiam compartilhar dados entre si por meio de um servidor.

### Inventário do usuário

**Atualmente não existe um inventário onde os jogadores possam armazenar itens do jogo enquanto caminham entre scenes.** As seguintes alternativas estão disponíveis hoje:

* Você pode armazenar informações de inventário na própria scene e vinculá-las ao endereço Ethereum de cada jogador (isso pode ser usado como um id persistente). Essas informações só poderiam ser lidas a partir da sua scene.
* Você pode usar um armazenamento externo personalizado e sincronizar todas as suas scenes com ele. Esta é uma solução mais robusta, capaz de lidar com volumes maiores de jogadores. Também pode estender o acesso a esse inventário para múltiplas scenes separadas que você ou outras pessoas possuam.
* Use tokens na blockchain para lidar com a propriedade de itens.

Ao ganhar um item do jogo, ele poderia ser armazenado como um token especial na wallet Ethereum do jogador. Quando um jogador que possui o token entrar na sua scene, sua scene poderia conceder ao jogador certas características dentro do jogo.

Outras scenes também poderiam responder ao mesmo token de maneiras diferentes, o que pode gerar interações interessantes entre jogos.

A desvantagem de usar a blockchain para armazenar itens do inventário é que todas as transações têm um custo para o jogador e não são imediatas. Leia mais sobre a blockchain em uma seção especializada mais abaixo.

Em versões futuras, os jogadores terão um inventário que levarão para todos os lugares, incluindo assets on-chain e off-chain.

### Experiências portáteis

{% hint style="warning" %}
**📔 Nota**: Experiências portáteis e smart wearables ainda estão em fase exploratória e ainda não estão disponíveis para criadores da comunidade.
{% endhint %}

Experiências portáteis são partes da jogabilidade que os jogadores levam consigo enquanto se movem pelo metaverso. Elas não estão vinculadas a parcelas de terreno; às vezes estão vinculadas a tokens, ou às vezes são iniciadas pelo explorer. Por exemplo, um jogador poderia pegar uma bola de neve na sua scene, ir para outra scene e lançar a bola de neve em outro jogador que também esteja jogando o mesmo jogo.

Smart wearables são um tipo de experiência portátil vinculada a um wearable token e ativada quando o jogador veste a peça de roupa. Smart wearables podem conceder aos jogadores novas habilidades, como um jetpack que permite voar, ou adicionar uma nova camada de conteúdo sobre o restante do mundo, como colocar aleatoriamente moedas para serem coletadas em toda Genesis City.

Lembre-se de que os jogadores podem estar usando a experiência portátil de outra pessoa enquanto estiverem na sua scene. Veja [Dados do usuário](/creator/content-creator-pt/scenes-sdk7/interatividade/user-data.md#get-portable-experiences) para aprender como verificar quais experiências portáteis um jogador tem ativadas no momento.

## Persistência do jogo

**Decentraland é um mundo persistente, sua scene pode ser visitada por jogadores a qualquer momento.** Sua scene não tem fase de início nem fim, então você deve projetar as mecânicas do jogo de forma que permita também a participação de jogadores que entram ou saem a qualquer momento.

Sua scene pode ter um mecanismo de reset que a define para um estado inicial, mas você deve ter cuidado para não atrapalhar o jogo dos jogadores que já estão jogando.

### Sincronizar o estado da scene

**Atualmente, os estados das scenes não são compartilhados entre os jogadores, a menos que sejam implementados manualmente.** Esta é a maneira mais simples de criar uma scene, mas não é ideal para experiências sociais.

Você pode usar o MessageBus para usar a mesma arquitetura de mensagens usada para compartilhar mudanças de posição dos jogadores e chat. Essas mudanças de estado não são armazenadas em nenhum lugar. Se não houver jogadores próximos da scene e carregando-a no momento, a scene será redefinida para um estado padrão na próxima vez em que for carregada.

**Você pode hospedar seu próprio servidor para armazenar informações sobre sua scene e manter todos os jogadores sincronizados com ele.** Isso garante boas velocidades de conexão e mantém a scene em execução continuamente, mesmo quando não há jogadores por perto. Se você fizer isso, suas limitações de latência não serão diferentes das de qualquer outro jogo online amplamente jogado.

Hospedar seu próprio servidor também é uma medida de segurança recomendada para jogos que envolvem transações com itens de jogo valiosos, pois você pode manter certas informações, como tokens de segurança, apenas no servidor, sem nunca expô-las fora dele.

{% hint style="warning" %}
**📔 Nota**: Em versões futuras, forneceremos soluções prontas e exemplos de código de como implementar seu próprio servidor.
{% endhint %}

### Tempo de jogo

**Jogos que usam a arquitetura de comunicações padrão devem levar em conta que pode haver atraso entre os jogadores** e não devem depender de reações rápidas entre as ações de diferentes jogadores. Recomendamos jogos por turnos ou que sejam, em sua maior parte, baseados em interações de jogador versus ambiente.

Para jogos em que o timing das ações entre jogadores é crítico, como um first person shooter, você deve implementar seu próprio servidor como uma fonte autoritativa de verdade em tempo real entre todos os jogadores na sua scene.

## Jogadores na scene

**Os jogadores são identificados em Decentraland usando o endereço da sua wallet Ethereum.** Essa wallet é usada como um ID persistente que já está associado a todos os tokens que o jogador possui.

**Atualmente não há maneira de limitar quantos jogadores podem estar presentes em Decentraland ao mesmo tempo.** Ao contrário de muitos outros jogos, em que podem existir diferentes sessões de jogo hospedadas em servidores separados, há apenas uma instância de Decentraland compartilhada entre todos os jogadores, pelo menos por enquanto.

Você precisa ter em mente que pode haver vários jogadores circulando pela sua scene a qualquer momento. Alguns deles podem estar apenas passando e não participando do jogo. Certifique-se de que as mecânicas do jogo não possam ser facilmente interrompidas por isso.

**O loop de jogo da sua scene não pode afetar os jogadores diretamente**, a scene adota uma abordagem reativa às ações do jogador. Se um jogador estiver em cima de uma entidade e a entidade se mover ou girar, o jogador se moverá junto com essa entidade. Isso é especialmente útil para elevadores, plataformas flutuantes e similares.

Como proprietário de uma scene, você não pode empurrar à força nem teleportar um jogador infrator para fora da sua scene. No entanto, você poderá colocar jogadores em uma blacklist no servidor de sinalização. Você também pode implementar uma blacklist no código da sua scene e negar certos serviços a jogadores nessa blacklist.

## Limitações de conteúdo da scene

**Por favor, crie sua scene com cuidado extra em relação à eficiência do seu código.** Decentraland precisa rodar em navegadores web e dispositivos móveis, e os jogadores estarão renderizando várias scenes ao mesmo tempo enquanto caminham pelo metaverso.

**Você também deve tentar manter a scene leve.** Ao contrário de outros jogos online em que as mesmas texturas e assets são repetidamente usados de forma conveniente em um grande mundo aberto, em Decentraland cada scene pode ter seu próprio conjunto completamente diferente de assets. À medida que os jogadores caminham por várias scenes, eles devem conseguir baixar todo o conteúdo da scene, incluindo texturas, arquivos de som etc., a uma velocidade razoável.

Por causa disso, impusemos alguns limites para evitar o uso excessivo de recursos computacionais. Veja [limitações da scene](/creator/content-creator-pt/scenes-sdk7/otimizacao/scene-limitations.md) para detalhes sobre quais são esses limites.

## Acesso às scenes

**O mapa de Decentraland foi projetado para que haja estradas e praças públicas,** isso garante fácil acesso a várias partes do mapa, independentemente do que outras pessoas construam. Lotes de terreno que não sejam adjacentes a nenhuma estrada ou praça correm o risco de ficar isolados por scenes vizinhas, embora esperemos que a maioria das scenes seja transitável e não bloqueie as outras.

Novos jogadores começarão sua experiência em Genesis Plaza, no centro do mapa, onde serão incentivados a seguir algumas atividades de tutorial e depois explorar o mundo.

Os jogadores também podem digitar manualmente uma URL para uma coordenada específica no mapa de Decentraland para spawnar nesse local. Você também pode compartilhar links para URLs que tenham coordenadas iniciais codificadas.

Tenha em mente que, se um jogador começar em um local isolado ou abaixo do nível do terreno, isso não será uma experiência agradável. Para evitar isso, existe uma forma de definir um conjunto de locais específicos na sua scene que sejam seguros para spawn. Veja [scene metadata](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/scene-metadata.md) para detalhes.

Em versões futuras, os jogadores também poderão navegar rapidamente pelo mundo usando mapas com spawn points, listas de locais populares e locais de amigos. O SDK também tornará possível adicionar teleports na sua scene que possam transportar para outras partes do mundo.

## UI do usuário

**A UI sobreposta padrão que os jogadores veem ao entrar em Decentraland tem apenas o essencial.** Você pode adicionar elementos extras a essa UI enquanto o jogador estiver na sua scene. Tenha em mente que a UI padrão de Decentraland é exibida acima de qualquer coisa da sua scene, então projete sua UI de forma que ela não se sobreponha a isso.

Quando um jogador sai da scene, todos os elementos de UI são removidos para não interferir com outras scenes. Os jogadores também têm um botão disponível na tela para desativar todos os elementos de UI na scene; isso é útil principalmente para prevenir comportamentos abusivos de scenes que possam querer cobrir todo o campo de visão do jogador.

## Física

Tenha em mente que o SDK não fornece seu próprio motor de física. Se você quiser usar física na sua scene, pode importar uma biblioteca ou programar o comportamento você mesmo.

## Entradas do controlador

**Os controles do seu jogo devem ser limitados a movimentos básicos, salto, point and click, além de um botão primário e um secundário.** Daremos suporte a controles móveis e de Virtual Reality, então não podemos assumir que todos tenham um teclado.

Temos suporte para eventos globais de *button up* e *button down* para todos os três botões. Todos os três botões também têm eventos de hit que permitem identificar se uma entidade estava na mira do jogador.

## Avatares

**Os jogadores podem construir seus avatares com base em um conjunto de wearable items padrão.** Expandiremos a lista de wearables e opções disponíveis e, no futuro, também tornaremos possível que terceiros criem e vendam wearables.

## Comunicação entre jogadores

**Os usuários conseguem conversar entre si. Atualmente, os avatares não têm uma forma de transmitir linguagem corporal além do uso dos controles básicos de movimento.**

Em versões futuras, eles também poderão fazer voice chat e realizar gestos como dançar ou franzir a testa com seus avatares. Também poderão exibir um emoji temporário acima do avatar para se expressar. Os jogadores também poderão exibir os tokens que possuem para que outros jogadores possam vê-los.

## Notificações do jogo

**Atualmente não existe um sistema de notificações entre scenes.** Qualquer jogo que exija notificações exibidas fora da scene atual terá de implementá-las usando um serviço externo.

## Usando a blockchain

**Em Decentraland, a blockchain é usada para armazenar informações sobre propriedade.** Hoje isso se refere principalmente à propriedade de LAND, mas também pode ser usado para propriedade de itens do jogo, wearables, avatares especiais, emotes e tokens que podem garantir certos privilégios no jogo ou acesso a jogos.

A blockchain não é usada para armazenar o estado do jogo, a posição do jogador ou qualquer coisa que precise mudar em tempo real.

### LAND e MANA

**Os jogadores não precisam possuir parcelas de terreno para participar do metaverso.** Na verdade, a grande maioria dos jogadores não possui. Os avatares dos jogadores e os tokens de LAND que eles possuem não estão conectados de forma direta.

**Os jogadores não precisam possuir previamente uma wallet Ethereum ou tokens MANA para entrar em Decentraland.** Se a sua jogabilidade depender muito da posse de tokens, você estará excluindo a maioria dos jogadores. Um modelo de jogo freemium pode ser a maneira ideal de atender a ambas as bases de usuários.

### Outros NFTs

**Você pode usar tokens não fungíveis especiais (NFTs) para representar itens do jogo, avatares personalizados ou wearables.** Se um jogador possuir um desses tokens, sua scene poderá responder a ele de diferentes maneiras.

Leia sobre o que são NFTs em [este post de blog](https://decentraland.org/blog/technology/what-are-nfts/).

### Transações no jogo

**Sua scene pode oferecer suporte a transações em blockchain para que os jogadores comprem ou ganhem tokens.**

As transações em blockchain não são imediatas, elas exigem tempos de verificação e têm um custo em Ether; tanto o tempo quanto o custo variam dependendo do uso atual da rede.

Decentraland está trabalhando na criação de uma side-chain que poderá lidar com transações mais rápidas e mais baratas do que a rede Ethereum. Essa side-chain será ideal para transações no jogo, pois as mudanças podem ocorrer mais perto do tempo real e a um custo muito baixo. A main Ethereum chain ainda será recomendada para transações que exijam maior segurança e que possam ser mais caras e demorar mais.

O jogador deve sempre aprovar explicitamente essas transações no seu cliente Ethereum. Por exemplo, ao usar Metamask, o Metamask solicita que o jogador aceite cada transação antes de ela ser processada.

Os jogadores também poderiam assinar um contrato que aprova automaticamente todas as transações solicitadas por um endereço específico ou dentro de certas restrições, para evitar interrupções para aprovar transações.

Você também pode usar smart contracts para condicionar transações com base em condições personalizadas. Por exemplo, os jogadores poderiam apostar no resultado de um jogo, e os pagamentos correspondentes ocorreriam automaticamente assim que o resultado fosse conhecido.

Para implementar interações de blockchain no código da sua scene, você deve usar bibliotecas externas que se conectem à rede Ethereum. Versões futuras do SDK fornecerão uma API personalizada para expor essas funcionalidades de maneira mais simples.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-pt/scenes-sdk7/desenhar-a-experiencia/design-games.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
