Giter Club home page Giter Club logo

tcc-ufsm-2020's Introduction

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.

tcc-ufsm-2020's People

Contributors

pprobst avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.