Em desenvolvimento de games o que é um ‘Game Design Document’ (GDD) e o que deve conter esse documento?

Post originalmente publicado no Quora em 22/07/2019

O Game Design Document (GDD) é muito mais que um documento de conceito ou proposta de negócio.

É normal que um GDD tenha algo entre 50 e passe de 200 páginas. O propósito do GDD não é servir de apoio para vender uma ideia. Pelo contrário, seu principal objetivo é ser um guia de referência ao processo de desenvolvimento de um jogo (game).

O GDD tem que focar no modo de jogo (gameplay), roteiro (storyline), personagens, interface e regras do jogo. O GDD deve especificar o projeto com detalhes suficientes e de tal forma que seja possível, em teoria, jogar o jogo sem o uso de um computador.

Inclusive poder jogar uma versão em papel do jogo construida a partir do GDD é na verdade um modo barato de se entender e depurar o projeto do jogo. A prototipagem em papel sempre deve ser considerada durante o processo de desenvolvimento do game.

Devido ao tamanho do GDD, um índice deve ser inserido logo após a página de título do documento. Esse documento tem que ser entendido como parte do processo de desenvolvimento do jogo e deve ser atualizado constantemente à medida que o projeto é desenvolvido.

Como boa prática deve-se ter certeza que o GDD esteja disponível a todos no projeto de tal forma que os membros do time possam fazer as atualizações conforme o necessário a qualquer tempo (obviamente um controle de versionamento tipo GIT deve ser adotado).

O GDD deve conter em sua descrição basicamente os seguintes elementos, não se limitando à lista abaixo:

  • Interface do jogo – indicando os elementos do jogo, tempo de produção, custo, requisitos das interfaces, viabilidade da interface, audiência e gênero do jogo.
  • Mundo do jogo – níveis e elementos presentes em cada nível do jogo bem como a descrição dos mesmos. Inclui arte, cinemática, animações, itens disponíveis e informações acerca de itens perigosos.
  • Habilidades dos personagens e itens – como funciona o ataque e defesa dos personagens, o que faz cada NPC, o que e como os personagens podem pegar de itens.
  • Game engine – o que pode ser feito e o que não pode ser feito no desenvolvimento do jogo. Esta parte do GDD serve para manter todos desenvolvedores alinhados com os recursos disponíveis e comportamento geral do jogo abordando tópicos como número de personagens por tela, animações por personagem, restrições de câmera, paleta do mapa de textura e outras informações que padronizem o desenvolvimento do game.

Você utilizará como game engine a interface 2D do GameSalad, ou utilizará a engine 3D do Unity? Sites exibidos logo a seguir. Essa decisão, por exemplo, é definida na seção Game Engine.

Página do GameSalad:

Página do Unity:


Finalizando:

Tenha em mente que o GDD pode variar dependendo no nível de detalhes e demandas do projeto, mas é para isso que ele serve e o que ele basicamente deve conter.

Fonte: NOVAK, Jeannie. GAME DEVELOPMENT ESSENTIALS: AN INTRODUCTION. 3. ed. United States: Delmar Cenage Learning, 2012. 514 p. ISBN 13: 978-1-111-30765-3.

Qual é a coisa mais hacker que você já fez na tentativa de fazer algo funcionar no seu computador?

Resposta originalmente postada no Quora em 16/07/2019

Tem sempre alguma coisa que a gente faz..

Vou citar uma aqui..

Certa feita tive de instalar um dual boot, Linux e Windows.

O Windows teve um update logo depois da instalação e zoou grandão o GRUB. O computador parou de funcionar.

Saquei meu script ‘reparagrub’ e rodei ele.

Programadores entenderão:

sudo mount /dev/sdb7 /mnt
for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
sudo chroot /mnt
update-grub
grub-install /dev/sda
update-grub
exit

Boot recuperado.

O que é OS Kernel

Resposta publicada no Quora em 16/07/2019

O OS Kernel ou Núcleo do Sistema Operacional é um programa de computador que é o coração do sistema operacional de um computador. Ele tem controle completo sobre tudo que acontece no sistema.

Abaixo tem a estrutura básica de um sistema operacional Unix, situando o modo núcleo.

Fonte: TANENBAUM

E aqui tem a estrutura básica de um sistema operacional Windows 7 situando o modo núcleo do sistema operacional:

Fonte: TANENBAUM

Na maioria dos sistemas ele é um dos primeiros programas a serem carregados na inicialização, logo após do carregador inicial (bootloader). Ele gerencia as demais inicializações assim como as requisições de entrada e saída do software, traduzindo-as em instruções de processamento de dados para o processador do computador. Ele também manuseia a memória e periféricos como teclado, monitor, impressoras e interface de áudio.

O Kernel faz a interface entre o software da aplicação e o hardware do computador.

A parte crítica do código do Kernel é normalmente carregada em uma área separada da memória a qual é protegida de ser acessada pelos programas ou outras partes menos críticas do sistema operacional.

O Kernel executa suas tarefas como rodar processos, gerenciar dispositivos de hardware com o HD, fazer o gerenciamento de interrupções dentro da área protegida do Kernel.

Por outro lado, tudo o que o usuário faz é executado na área do usuário (user space) como escrever um texto no editor de texto, rodar programas em uma interface gráfica (GUI) e etc.

Essa separação previne que os dados dos programas do usuário e os dados do Kernel acabem interferindo um no outro o que pode causar instabilidade no sistema, lentidão no processamento, erros nos programas e até causar erros catastróficos no sistema operacional.

Fonte: Kernel (operating system) – Wikipedia

Fonte das figuras: TANENBAUM, Andrew S.. Organização Estruturada de Computadores. 6. ed. São Paulo: Pearson, 2013. 605 p. ISBN13: 978-85-8143-539-8.

By Renato de Pierri – 16/07/2019

O que é um sistema operacional de tempo real?

Resposta originalmente traduzida no Quora em 06/07/2019.

Sistema Operacional de Tempo Real (Real Time Operating System) é um sistema operacional especializado que é responsável por gerenciar os processos em um sistema de tempo real ( real time system.)

  • Ele é responsável pelo gerenciamento de processos e alocação de recursos.
  • O sistema operacional em tempo real pode ser baseado em um kernel padrão que é usado inalterado ou modificado para uma aplicação específica.
  • Normalmente, não inclui recursos como gerenciamento de arquivos.

Componentes do Sistema Operacional de Tempo Real:

  1. Relógio de tempo real: (Real-time clock) Ele fornece informação para agendamento de tarefas
  2. Gerenciador de interrupções: (Interrupt handler) Gerencia solicitações de serviços assíncronas .
  3. Agendador: (Scheculer) Seleciona o próximo processo a ser executado.
  4. Gerenciador de recursos: (Resource Manager) Aloca os recursos de processador e memória.
  5. Despachante: (Dispatcher) Inicia a execução dos processos.

Os componentes de um sistema operacional de tempo real pode ser conforme abaixo:


-Adição do tradutor Renato de Pierri-

Diferenças entre o sistema operacional de tempo real e o de tempo não real – original: (Differences between Real time and Non-real time Operating system)

Clique na figura para ampliar.

Ashwin Dhakal é autor do livro “Software Engineering” ISBN:978-9937-0-3279-7

Para que serve o Garbage Collector

Publicado como resposta no Quora em 02/07/2019

O garbage collector (GC) serve para gerenciar automaticamente os pedidos de alocação dinâmica de memória.

Figura abaixo mostra a arquitetura do HotSpot JVM com o Garbage Collector

Fonte: Getting Started with the G1 Garbage Collector

Ele faz o gerenciamento automático e dinâmico da memória da seguinte forma:

  • Aloca memória do e a devolve para o sistema operacional.
  • Gerencia a memória para a aplicação à medida em que a aplicação requisita memória.
  • Determina quais partes da memória irão permanecer em uso pela aplicação.
  • Realoca memória não utilizada destinando-a para outra aplicação.

O Java HotSpot garbage collectors empregam várias técnicas para melhorar a eficiência dessas operações, entre elas:

  • Utiliza o algoritmo de reclamação de armazenamento de memória “generational scavenging” em conjunção com métodos de datação dos dados na memória a fim de concentrar os esforços nas áreas que contenham mais dados suscetíveis a serem reclamados.
  • Utiliza múltiplas threads para execução de operações paralelas, ou executa operações de longo tempo de execução em segundo plano enquanto rodando uma aplicação principal.
  • Procura liberar grandes blocos contíguos de memória pela compactação de objetos ativos (live objects).

Qual vantagem de se utilizar o Garbage Collector?

A vantagem de se utilizar o garbage collector é que ele libera o desenvolvedor de aplicações da tarefa manual de se fazer o gerenciamento de alocação de memória.

O desenvolvedor é liberado da necessidade de cuidar das alocações e liberações de memória e fica livre de ter que tomar conta das tarefas que alocam dinamicamente a memória.

Isso elimina completamente alguns tipos de erros relacionados a gerenciamento de memória bem como otimiza o tempo de execução da aplicação. O Java HotSpot VM possui um conjunto de algoritmos que executam essa tarefa.


Fonte, Documentação da Oracle: HotSpot Virtual Machine Garbage Collection Tuning Guide

Para saber mais: Getting Started with the G1 Garbage Collector