A downloadable project

1. Introdução

O jogo Slingshot Bunny: The Carrot War é um projeto que está sendo planejado e será desenvolvido para a disciplina de Programação Aplicada no curso de Design de Jogos e Entretenimento Digital.

O projeto conta a história de um coelho pirata chamado Slingshot que está em busca da lendária cenoura de ouro. Seguindo as pistas de um mapa, o coelho descobre que o raro tesouro está em uma ilha isolada, e que seu principal inimigo, uma raposa chamada Capitão Scratch, e sua tripulação também estão atrás do mesmo tesouro, e usarão toda sua força para impedi-lo de alcançar seu objetivo.

1.1. Objetivos

O objetivo geral é a criação de um jogo 2D de plataforma.

Objetivos específicos:

  • Desenvolver mecânicas complexas;
  • Definir scripts de forma simples;
  • Realizar testes de qualidade;
  • Refinar o jogo.

1.2. Procedimentos Metodológicos

Discussões foram realizadas para definir as mecânicas e estéticas dos personagens e inimigos, além de atribuir funções aos membros da equipe. Foram feitos também brainstormings para gerar ideias de mecânicas e o processo de eliminação para escolher as mais adequadas ao contexto do jogo. As referências foram baseadas em metodologias e características comuns na indústria de jogos de plataforma.

Durante o processo inicial do projeto o foco foi definir elementos básicos do jogo, como algumas mecânicas, gênero, estilo de arte, itens coletáveis, inimigos, personagem principal e objetivo do jogo, assim como uma idealização da estrutura das fases. Em relação à sonorização, o planejado é produzir uma música para as fases no geral e outra música para o boss. De efeitos sonoros terá sons para dano, ataque, bombas, habilidades, armas, morte, checkpoint (ponto de salvamento de progresso)  e passos.

1.2.1. Metodologia de Projeto

Para a metodologia do projeto, serão utilizadas ferramentas específicas para cada área. Para a arte, será usado o Aseprite para criar artes 2D em píxel arte. A programação será feita no motor de jogo Unity, e a sonorização será feita no site Soundtrap, onde serão criadas as trilhas e efeitos sonoros. 

2. Conceito

O jogo Slingshot Bunny: The Carrot Wars será um side-scroller 2D no estilo pixel arte e do gênero plataforma que será produzido no motor de jogo Unity. Jogos de plataforma envolvem desafios baseados em saltar entre plataformas, equilibrar-se e evitar obstáculos, enquanto o jogador navega por diferentes níveis (Cardoso, 2017). Side-scroller refere-se a jogos que ocorrem em um ambiente 2D, onde os jogadores precisam atravessar cada nível através de uma perspectiva lateral da câmera (Bell, 2017).  

Inicialmente, os assets, que incluem qualquer conteúdo digital como gráficos (personagens, ambientes, etc.), áudio, animações, scripts e outros elementos usados na criação de jogos, serão utilizados conforme o tutorial do curso “Criação de jogos de plataforma com Unity” do site Domestika, já que são disponibilizados pelo site. No entanto, posteriormente, esses assets serão substituídos por materiais desenvolvidos pelas acadêmicas, de forma a garantir maior coerência com a proposta do jogo.

2.1. Mecânicas

O personagem principal conta com 2 opções de ataque: uma espada para ataques de curto alcance e um estilingue para ataques de longo alcance. A espada funcionará com o clique do mouse, sendo o ataque direcionado para onde o jogador estiver mirando com o mouse, para a esquerda ou direita, dando assim mais vantagem em relação aos inimigos terrestres. O estilingue também funcionará dessa forma, e o jogador poderá atirar para cima e nas diagonais também, dando assim mais vantagem em relação aos inimigos aéreos. O coelho também poderá dar um super pulo, que contará com alguns segundos de cooldown.

2.2. Personagens Não Jogáveis

O jogo contará com três personagens não jogáveis: O boss, inimigos terrestres e inimigos aéreos.

O boss (raposa) tem como ataque 2 espadas, ele atacará normal a maior parte do tempo mas em determinados momentos ele poderá girar em direção ao jogador, causando dano em área.

Os inimigos terrestres (cobras) tem como ataque uma investida na tentativa de morder o jogador. Já os inimigos aéreos (corujas) tem como ataque bombas que são jogadas no chão, na tentativa de acertar o jogador com um dano em área.

O jogo também conta com itens coletáveis que são beterrabas que recuperam vida do jogador, e conta com checkpoints para salvar o progresso do jogador.

2.3. Telas e Interfaces

A tela de início exibirá o nome do jogo(figura1) e, ao clicar, as opções de "Iniciar novo jogo", "Opções", "Créditos" e "Sair" são mostradas (figura 2). No menu, as opções serão "Retomar", "Opções", "Créditos" e "Sair" (figura 3). Durante o jogo, o HUD incluirá uma barra de saúde do personagem, informações sobre armas, habilidades e o score (figura 4).

3. Design Técnico

3.1. Motor de Jogo

Unity é um motor de jogo utilizado para criar jogos 2D e 3D. Ele oferece ferramentas fáceis de usar, suporte a várias plataformas (como PC, consoles e dispositivos móveis), também permitindo criar gráficos, física, animações e sons, além de usar scripts em C# para programar a lógica do jogo no Visual Studio Code.  

Para o desenvolvimento da programação, será utilizado o curso “Criação de jogos de plataforma com Unity” do site Domestika, para assim aprofundar os conhecimentos das acadêmicas sobre a programação do gênero plataforma. Inicialmente, os assets, que incluem qualquer conteúdo digital como gráficos (personagens, ambientes, etc.), áudio, animações, scripts e outros elementos usados na criação de jogos, serão utilizados conforme o tutorial, já que são disponibilizados pelo site. No entanto, posteriormente, esses assets serão substituídos por materiais desenvolvidos pelas acadêmicas, de forma a garantir maior coerência com a proposta do jogo.

3.2. Descrição dos Scripts

Como um primeiro passo, foi criado o Game Object (Unit 1, 2022) “Player”, e foram adicionadas as animações PlayerIdle, PlayerRun e PlayerAir, que são animações para quando o personagem jogável estiver parado, correndo e pulando respectivamente.

Foram adicionados 2 componentes (Unit 2, 2022) ao jogador: Rigid Body 2D (Unity 3, 2022), transformando assim o Game Object Player em um corpo rígido com física; e Box Collider 2D, para que o objeto Player colida com outros objetos que possuem colisão também. Logo em seguida, foi criado o objeto de jogo “ground-0”, que será utilizado como plataforma no jogo, e também foi adicionado o componente Box Collider 2D (Unity 4, 2022).

Um script foi criado para criar os controles do personagem e outros fatores. Foi criada uma variável pública estática do Player obj, para assim ter acesso ao objeto Player e para que todas as propriedades criadas a seguir possam ser acessadas e controladas. Foi também feita a variável pública inteira lives, que representa a quantidade de vida do Player. Em seguida, algumas propriedades públicas foram criadas: a booleana isGrounded (para identificar se o Player está no chão); a booleana isMoving (para identificar se o Player está se mexendo); a flutuante speed (para definir a velocidade do Player); a flutuante jumpForce (para definir a força de pulo do Player); e a flutuante movHor (que tem o valor do movimento horizontal, o movimento do eixo x). Também foram criadas a propriedade pública LayerMask groundLayer, a variável flutuante radius, e a variável groundRayDist para saber se o personagem está tocando o chão ou não.

Para ser possível o acesso dos componentes do personagem, foram criadas as propriedades privadas: uma para acessar o Rigid Body 2D (que será citado como rb), outra para acessar o Animator (que será citado como anim) e por fim para acessar SpriteRenderer (que será citado como spr).

Após essa parte, foi criada a função Awake, a primeira função que é executada, que faz com que o objeto seja igual ao objeto que existe na cena. Então é implementada a função privada void OnDestroy, que torna o objeto anunciado no início nulo.

Para a movimentação básica do personagem, na função privada void Update, é igualado o movHor com os inputs do usuário, fazendo assim ser possível mudar os valores do eixo x para positivo ou negativo utilizando as setas ou as teclas A e S do teclado. Na função Start, foi feito com que as variáveis Rigid Body 2D, Animator e Sprite Renderer tenham acesso aos componentes do Game Object Player. Depois desse processo, é criada a função privada void FixedUpdate, que permite mover o personagem utilizando o Rigid Body 2D e na velocidade imposta pela variável speed.

Na função privada void Update, é então estabelecido que isMoving é diferente de 0, o que permite que agora é possível verificar se o personagem está se movimentando ou não. Foi também feito com que seja possível verificar se o personagem está no chão utilizando o isGrounded, o que é muito importante para programar o salto, para que ele só salte quando estiver tocando no chão.

É criada então a função privada void jump, para programar o salto do personagem. Foi adicionada uma condição que não permite que o personagem pule sem estar tocando no chão, e é adicionada também uma força ascendente no personagem através do Rigid Body 2D e utilizando a variável jumpForce criada anteriormente. E então, no void Update, é criada uma condição de que se o jogador clicar a tecla espaço, o personagem pula (é ativada a função jump).

Para que o personagem se vire na direção em que o jogador indicar, foi feita a função Flip, que muda o sprite do personagem de acordo com o valor do eixo x (se é positivo ou negativo), e foi implementada essa função na função Update para que ela seja executada sempre.

Por fim, na Unity, foi feita a transição entre as animações do personagem utilizando isGrounded, em que se o personagem não estiver tocando o chão, toca a animação PlayerAir, mas para tocar tanto a animação de PlayerIdle quanto a animação PlayerRun ele precisa estar encostando no chão. Também é utilizado o isMoving, em que se o personagem estiver se movendo, pode tocar tanto a animação Player Run quanto PlayerAir, mas não pode tocar a animação PlayerIdle, porque o personagem precisaria estar parado. Assim, com essas condições, é possível definir no script, na função Update, que as animações irão tocar dependendo se as condições isGrounded e isMoving são verdadeiras ou falsas.

3.3. Inteligência Artificial

A inteligência artificial no projeto será implementada para definir os comportamentos e padrões de movimentação dos inimigos.

Cada inimigo terá movimentos e ataques programados de acordo com suas características, como as cobras que investem em ataques rápidos no solo e as corujas que lançam bombas do ar. A IA também será responsável por ajustar as reações dos inimigos com base nas ações do jogador, criando uma melhor experiência de combate.

Ao localizarem o jogador, os inimigos cobras irão em sua direção para atacá-lo, enquanto as corujas procuram o jogador na tentativa de jogar bombas perto de sua localização. Quando estiverem longe da localização do jogador, eles o perdem e continuam sua rota normal.

A rota normal dos inimigos cobra ocorre em uma pequena área, em que ela anda, para, e em seguida anda para a direção contrária, repetindo o ciclo. As corujas efetuam uma movimentação parecida, porém de maneira área.

3.4. Delineamento de Testes

O planejamento de testes será simples, focando na verificação de mecânicas, interface, desempenho e balanceamento do jogo. Serão feitos testes manuais que incluem verificar cada parte do jogo (mecânicas e integração), avaliar o desempenho e realizar testes com usuários. O sucesso será medido pelo funcionamento correto das mecânicas, interface sem erros e desempenho estável. 

3.5. Cronograma

PeríodoAtividade
Outubro- Programação das mecânicas principais (movimentação, pulo, - ataques básicos). 
- Criação das artes de personagens.
- Início da programação das mecânicas complexas.
- Início da produção da sonorização .
- Criação das artes dos cenários.
Novembro- Finalização das artes dos cenários.
- Finalização da arte dos personagens.
- Implementação da sonorização.
- Finalização da programação das mecânicas complexas.
Novembro - Dezembro- Testes de jogabilidade (mecânicas, bugs, feedback).
- Ajustes e refinamentos conforme os testes.
- Polimento final.

Tarefas mais específicas serão organizadas no site Trello. 

4. Considerações Finais

O desenvolvimento deste projeto busca integrar conceitos de design, programação e sonorização para criar uma experiência de jogo balanceada e coerente. O projeto usa metodologias e ferramentas para garantir a qualidade em cada fase do desenvolvimento, desde a criação das mecânicas e personagens até a implementação das interfaces e testes finais. O objetivo é entregar um jogo funcional e imersivo, atendendo aos requisitos da disciplina e proporcionando uma base sólida para o crescimento técnico das acadêmicas envolvidas. 

5. Referências

CARDOSO, B. Jogo de plataforma? Saiba tudo sobre esses tipos de games. Disponível em: https://seugame.com/jogo-de-plataforma/<https: seugame.com="" jogo-de-plataforma="">. Acesso em: 10 out. 2024.</https:><https: seugame.com="" jogo-de-plataforma=""> </https:>

<https: seugame.com="" jogo-de-plataforma="">DURÁN, S. Criação de jogos de plataforma com Unity. Disponível em: <https: www.domestika.org="" pt="" courses="" 910-criacao-de-jogos-de-plataforma-com-unity="">. Acesso em: 10 out. 2024d.</https:></https:>

How to write technical design docs. Disponível em: https://dev.to/mage_ai/how-to-write-technical-design-docs-c02 <https: dev.to="" mage_ai="" how-to-write-technical-design-docs-c02="">. Acesso em: 10 out. 2024.</https:>

PREVIOUS ARTICLES. What is Side-Scrolling? [Gaming Definition, Meaning]. Disponível em: https://honeysanime.com/what-is-side-scrolling/ <https: honeysanime.com="" what-is-side-scrolling="">. Acesso em: 10 out. 2024. </https:>

<https: honeysanime.com="" what-is-side-scrolling=""></https:>

RAJPUROHIT, P. The complete workflow for game asset creation. Disponível em: https://300mind.studio/blog/guide-to-game-asset-creation/<https: 300mind.studio="" blog="" guide-to-game-asset-creation="">. Acesso em: 10 out. 2024.</https:>

Unity 1: UNITY TECHNOLOGIES. GameObject. Disponível em: https://docs.unity3d.com/ScriptReference/GameObject.html <https: docs.unity3d.com="" scriptreference="" gameobject.html="">. Acesso em: 10 out. 2024. </https:>

<https: 300mind.studio="" blog="" guide-to-game-asset-creation="">Unity 2: </https:>UNITY TECHNOLOGIES. Component. Disponível em: https://docs.unity3d.com/ScriptReference/Component.html <https: docs.unity3d.com="" scriptreference="" component.html="">. Acesso em: 10 out. 2024b.</https:>

Unity 3: UNITY TECHNOLOGIES. Rigidbody2D. Disponível em: https://docs.unity3d.com/ScriptReference/Rigidbody2D.html <https: docs.unity3d.com="" scriptreference="" rigidbody2d.html="">. Acesso em: 10 out. 2024c.</https:>

Unity 4: UNITY TECHNOLOGIES. BoxCollider2D. Disponível em:  https://docs.unity3d.com/ScriptReference/BoxCollider2D.html <https: docs.unity3d.com="" scriptreference="" boxcollider2d.html="">. Acesso em: 10 out. 2024d.</https:>

Ficha completa da equipe:

Ana Beatriz Aquino Saiss - Artista de personagens/animação/programação/ sonorização/roteiro - aanabeatrizas

Gabriela Lopes Dal Mago -Artista de cenário/level designer/programação/ sonorização/roteiro - gabriela-dal-mago

Universidade do Vale do Itajaí - UNIVALI

Cesar Albenes Zeferino | Diretor Escola Politécnica

Giorgio Gilwan | Coordenador do Curso de Design de Jogos

Rafael Kojiio | Coordenador Gamelab UNIVALI

-‌---

Projeto  desenvolvido como requisito parcial para obtenção de aprovação nas disciplinas: (i) Programação Aplicada - Professor - Marcelo Dornbusch Lopes


Leave a comment

Log in with itch.io to leave a comment.