Here Be The Title

pipeline status

Read "Usage" section for instructions on running

Developers

Name Handle Maintains Code Reviews Tests Git log
Dylan McKay @mckaydyla Pathfinding, Game logic Entity, Parsing git log --author="Dylan McKay"
Mark Metcalfe @metcalmark Entity system Parser git log --author="Mark Metcalfe"
Jacob Woods @mckiewjaco Controller, Audio Game logic Graphics git log --author="J Woods"
Jordan Milburn @milburjord Map parser Entity, Pathfinding git log --author="Aposematism"
Josh Weir @weirjosh Game Graphics GUI, Game logic git log --author="Josh"

Statistics and information

Name Link
Commit log GitLab
Branch list GitLab
Commit versus time graphs GitLab
History tree GitLab

Usage

Here Be The Title uses Maven for compilation and running tests.

All generated class files and executables are placed into the target/ folder.

The JAR must be run alongside the res/ folder. It is sufficient to create the JAR, and put the res/ folder next to it to get it working.

# Creates an executable JAR file
# Will be placed at target/herebethetitle-0.0.1.jar
mvn package

# Compiles and runs all JUnit tests
mvn verify

Layout

All source code is located in the src/ folder.

All third-party libraries can be found in JAR form inside the lib/ folder.

Libraries

Pathfinding (Dylan McKay)

com.swen.herebethetitle.pathfinding

This library implements the A* search algorithm.

This is used by the other libraries to perform tasks such as plotting a path for an enemy to take in order to attack the player.

Tests are located inside the com.swen.herebethetitle.pathfinding.test package.

Pathfinding is done via the Graph class with the findPath method in particular.

Game logic (Dylan McKay)

com.swen.herebethetitle.logic

This library is responsible for all updates to the game state.

In order to move a player on the board, interact with objects, or even attack an enemy, the GameLogic class is used.

This library is also responsible for

  • Controlling the non playable characters, such as monsters.
  • Timing and triggering of discussions with non-playable characters

Tests are located inside the com.swen.herebethetitle.logic.test package.

Entity system (Mark Metcalfe)

com.swen.herebethetitle.entity (and its subpackages)

This library implements both interative and static game objects such as items, NPCs, terrain elements and the like.

This is used by other libraries to load, save, interact and draw the game objects.

Interactions are handled by interact(), of which every entity has its own implementation.

Tests are located inside the com.swen.herebethetitle.entity.tests package.

Control (Jacob Woods)

com.swen.herebethetitle.control

This library wraps the game graphics in a JavaFX application and handles events from user input. The Graphics library is used to draw the world. Menus are built here using JavaFX.

Controller also handles the "main loop", running from a JavaFX timeline that periodically calls update() internally, which calls internal methods and methods in GameLogic to update the game state and then renders the world.

Through the UI built by Controller, the player can load and save the game with the parsing library.

Audio (Jacob Woods)

com.swen.herebethetitle.audio

Library for playing sounds and songs in the main JavaFX thread. Loads all sounds as AudioClips internally on construct, which are then played when observer-pattern methods are called on it by the game logic, or externally by use of integer soundcodes to play specific sounds or songs.

Map parser (Jordan Milburn)

com.swen.herebethetitle.parser

Game Graphics (Josh Weir)

This library is responsible for rendering the game, World and HUD included. It has helper classes for drawing text boxes, health bars, inventory slots, and also manages the transformation of game world coordinates (grid based) into screen coordinates (pixel based). com.swen.herebethetitle.graphics