Coder Social home page Coder Social logo

tower-of-babel's Introduction

Tower of Babel

Tower of Babel is a work-in-progress Shin Megami Tensei fangame, created with Godot, Aseprite, and Blender.

Game Progress

  • Basic game architecture setup (state machine logic)
  • Basic combat and action system setup (skills, tactics, fighters, elements, status, etc.)
  • UI style and architecture setup
  • Basic text and input help displays
  • Basic dungeon navigation
  • Basic pause menu and transitions
  • Press turn UI
  • Fighter status HUD
  • Action menus and usage validation (enough health/stamina, targets available)
  • (IP) Encounter system and radar display
  • (IP) Party management and matching UI
  • (IP) UI polish and sound effects
  • Items in action menus and game structure
  • Transition to and from battle (excluding level-up screens for now)
  • Basic battle flow and committing actions
  • Basic attack animations
  • Fighter status screen
  • Fighter experience widgets
  • Fighter level up and skill learning
  • Save file implementation
  • Terminal and SaveFile state
  • Further dungeon navigation, such as NPC and item pickups
  • Cutscenes
  • Demon dialogue trees, develop tactics
  • Shop state
  • Option state
  • Demon fusion system
  • Cathedral state and its UI

Code Documentation

Game States

The game is organized into distinct states, each with their own logic on controlling the flow of the game.

Diagram of the flow of game logic

Game Domains

In order to make game state more manageable, the node tree is split into three distinct "roots" of gameplay domains. These root nodes do not implement logic themselves and instead act as an interface to children nodes that handle the details of each domain. Some nodes exist outside of this trio, but only implement small and specific parts of the code.

User Interface (UI)

Menus and displays of game state/data.

World

2D and 3D dungeon gameplay.

Combat

Battles and party state outside of combat.

UI Structure

The UI code is organized into four "imaginary" interfaces as described below. Godot does not support actual interfaces, hence them being imaginary. However, these descriptions standardize the structure and function of all UI scenes in the game.

Component

Base interface for all UI scenes. It is not necessary for a component to contain any of these functions, but a component should adhere to the headers when implementing a method with similar functionality.

  • [for transition_in and transition_out] signal completed
  • func initialize(Variant data ...) -> void
  • func clear() -> void
  • [coroutine] func transition_in() -> void
  • [coroutine] func transition_out() -> void

Unit [Button, Icon] extends Component

A small, immutable and instantiable representation of some sort of information. Units should not be standalone, but rather controlled entirely by some parent component that initializes them. Container units can have other unit children, but they should not manage the visibility or state of those units

Widget extends Component

A small, instantiable representation of some sort of information. Widgets are the same as units, except that they are mutable and usually represent a constantly changing state. Widgets should not handle other components.

Handler extends Component

A controller object that manages the appearance of other components, especially units. Handlers are characterized by having multiple states, set externally through methods. Any methods that accept input from the player should have the prefix query.

Code Order

In general, the order of code structures should be:

  • class_name MyClass
  • extends AnotherClass
  • const
  • enum
  • @export variables
  • @onready variables
  • state variables
  • virtual methods
  • signal methods
  • other methods

tower-of-babel's People

Contributors

kiwijuice56 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 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.