Almost all the fonctionalities you can find in this package are implemented inside ActorComponents. So it is very modular and you can choose what functionalities you want to pick for your own projects if you don't need all the functionnalities.
This project implements the folowing fonctionalities :
- A top down controller responding for mouse control : interact with object like chest, or items, move to location, or attack an enemy.
- A Stats system : You can manage Abilities, Resistances, States and attack/move speed for your character or enemies.
- Abilities are points you can spend on Strengh, Dexterity,...
- Resistances are percentages which are taken into account while handling damages
- States are boolean which can be toggled, puting the pawn in a certain state : "Invincibility" will make the pawn ignore all damages for example, "rooted" wil prevent the pawn to move,...
- Move Speed and Attack Speed are percentage applied to the player velocity / attack animation.
- A Modifier system lets you manage apply modifiers to a pawn with a stats system. There are two kinds of Modifiers : Damage Modifiers and Stats Modifiers.
- Damage Modifiers modify the value of the life or stamina. You can modify the value over time or at once.
- Stats Modifiers modify a stat. It could be an Ability, a Resistance, a State, or event the Move Speed or Attack Speed.
- An Effect system allows you to handle Modifiers. Each effect will manage a type of modifier, so you have Damage Effects handling Damage Modifiers and Stats Effects which handles States Modifiers. Effect will automatically turns off (removing the hanlded modifier) after a certain time. You can also choose to keep an effect alive forever if you want to manually manage its duration (it's convenient for togglable effects).
- A Skill system : You can store skills inside skills sets. There are two types of skills : Skills which unlock passive abilities (using Stats modifiers) and skills which unlock spells.
- You can easily create Spells and weapons, by inheriting from base classes and tweaking parameters inside data tables.
- A leveling system. This system is also handled by the StatsComponent. Each time you kill an enemy, it give you some XP and this XP will make you gain levels. Each time you level up, you gain skill points you can use to unlock or upgrade a skill.
- A Inventory Component lets you manage Items. This Inventory Component is overriden by the EquipItem Component which will handle all equipment for the player.
- The Weapon Component will handle weapon owned by the players or the enemies. When you equip a weapon with the EquipItem Component, it let the Weapon Component spawn and attach the weapons to the player. For enemies, you can directly use a WeaponComponent without any need for an EquipItem Component.
- Items Container in the world : In the world, Items can be displayed in 4 different ways :
- Using ItemInWorld class, which allows you to set a 3D mesh representation for your Items.
- Using a Chest (Which is just a class with a Inventory Component attached to it).
- Using an ItemBag, which is similar to a chest, but this one will diseapear once all the items were remove for it.
- Using a LootChest : It is an interactible actor which will spawn loots around it when you interact with it.
- Main menu : A main menu is implemented, allowing you to choose a player class. You can choose between single player or multiplayer.
- Save/Load system : Everything which concerns the player (inventory, equipment, stats, location in world,...) can be save and loaded. The save/Load system doesn't take world items into account.
- Multiplayer : Every functionalities handle Replication.
- An in game menu will allow you to save you game and go back to the menu or quit the game.
- An in game player menu will allow you to see and handle your skills, spells, equipment and inventory.
- A basic AI which will attack the player.