Skip to content
This repository has been archived by the owner on Aug 31, 2021. It is now read-only.
/ tcc-ufsm-2020 Public archive

My bachelor's degree final project (PT-BR).

License

Notifications You must be signed in to change notification settings

pprobst/tcc-ufsm-2020

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tcc-ufsm-2020

(EN-US) This is the repository for my bachelor's degree final project at UFSM: a game prototype made to explore the Entity-Component-System (ECS) architecture and procedural dungeon generation. While the game is not fully playable (or even enjoyable) at the moment, it fulfills my expectations. A more profound development will occur independently in another repository, after my graduation.

(PT-BR) Este é o repositório do meu trabalho de conclusão de curso (TCC) na UFSM: um protótipo de jogo elaborado para explorar a arquitetura Entity-Component-System (ECS) e geração procedural de dungeons. Embora o jogo não seja totalmente jogável (ou mesmo divertido) no momento, ele cumpre minhas expectativas. Um desenvolvimento mais aprofundado ocorrerá de forma independente em outro repositório, após a minha graduação.

In-game screen.

Wait! I read your article from SBGames 2020! Where do I go?

/src/map_gen/ contains all the algorithms presented in the article. They're generally easy to follow, but for fully understanding WaveFunctionCollapse it would be wise to read Gridbugs' article (my implementation directly derives from it) or Karth & Smith research paper. Keep in mind that the procgen pipelines are still far from perfect, and I'll still keep working on them. I'm also working on the general game mechanics and in the future I'll play with procedural narrative -- a new interest for me.

However, this is a game prototype (not a procedural dungeon generation tool!) and still not ready for playing. But if you know your way around Rust and want to fiddle with the procgen algorithms, feel free to do it!

If you want to contact me for whatever reason, send me an email. You can use the email on my GitHub profile or the one in the paper.

Execution

First, install and configure Rust in your machine.

Then, clone this repository, navigate to it and run cargo run from your terminal emulator.

Tell me if you have any problems.

While in-game:

  • Use the Vi-keys to move or select targets.
  • Space for contextual action (e.g. open doors).
  • 'i' to access inventory.
  • 'e' to access equipment.
  • 'z' to switch between melee/ranged weapons.
  • 'f' to target and fire.
  • 'r' to reload.

Objetivos principais (TCC)

Ou, "seria bom se eu fizesse tudo isso!". Ordem de prioridade, mais ou menos.

  • Estruturar o básico do básico do bracket-lib (RLTK) + specs, utilizando o tutorial desenvolvido por Wolverson como base;
  • Movimento do jogador @;
  • Estrutura básica de um mapa;
  • Arquivo separado para a renderização do mapa e das entidades;
  • Sistema de FOV (field-of-view);
  • Câmera/viewport (divergências começam aqui);
  • Implementar uma UI básica e aproveitar para aprimorar os estados de jogo (game states);
  • Mobs e estrutura básica do sistema de combate;
  • Alguns métodos construtivos de geração de mapas:
    • Random Walkers;
    • Cellular Automata (CA);
      • Assegurar conectividade.
    • BSP (binary space partitioning) dungeons;
    • Diggers/Tunnelers.
      • Retoques finais.
  • Sistema de geração de mapas (pipeline) híbrido utilizando WFC em conjunto com outros algoritmos;
    • Carregar mapa externo desenhado manualmente;
    • Aplicar WFC sobre o mapa atual;
    • Assegurar conectividade pelo método do flood-fill (CA);
  • Inserção de estruturas pré-fabricadas no mapa;
  • Temáticas diferentes de mapas:
    • TDCL (top-down cavern-like);
    • TDML (top-down mansion-like);
    • Florestas;
    • Ruínas;
    • WFC como arquitetura externa/interna.
  • Inventário e consumo de itens;
  • Equipamento;
  • Baús de tesouro;
  • Seleção de regiões no mapa para aplicar algoritmos de geração;
  • Usar RON (e não JSON) para estruturar os raws;
  • Sistema de serialização/desserialização básico usando RON + serde para mobs, itens e cores.

Naturalmente, à medida que vou desenvolvendo posso ter de alterar/aprimorar itens da checklist já marcados. Isso é um processo natural; considere que itens marcados já possuem a estrutura básica concluída.

Problemas conhecidos, etc.

  • O sistema de spawning está longe do adequado.
  • Distorção dos tiles dependendo da resolução.
  • Alguns crashes ocorrem de vez em quando na etapa de geração de mapas.
    • Causa provável: acesso ao índice 0 do mapa (não utilizado).
  • Por enquanto, o WFC não reinicia quando há contradição (raro de acontecer).

Contribuições

Se você tiver alguma boa ideia ou sugestão, sinta-se livre para abrir um issue.

Referências e inspirações

Veja o arquivo da minha monografia para a lista de referências. Outros projetos do GitHub que tiveram porções de código utilizadas (ou que serviram de base para algo) estão referenciados em forma de comentários nos arquivos de código relevantes.