Rookie Awards 2024 - Open for Entries!
Blade Of Ten
Share  

Blade Of Ten

Super Game Developer
by supergamedeveloper on 30 May 2020 for Rookie Awards 2020

A fighting adventure game revolving around a legendary sword of unfathomable power.

1 592 2
Round of applause for our sponsors

Blade Of Ten

Blade Of Ten is a video game I'm making.

I work on it alone and I use Unity as the engine, Blender for modeling and animating, LMMS for music, Audacity for sound effects and Gimp for UI and textures.

Gameplay And Setting

I suppose I would label it as a Fighting Adventure game. You can roam around freely in several medium sized maps (somewhat open-world), complete quests, fight a large variety of enemies, buy and equip items that affect your character's visuals and stats, and level up to upgrade perks and spells.

Items

NPCs sometimes drop items when they are defeated, items can also found hidden around the world or bought from shopkeepers. Items can be equipped to offer both aesthetic and stat changes.

Characters

There is a large variety of characters in the game. Humans, Animals, Monsters, Aliens, Robots etc... Some of them play a part in the game's storyline and some of them inhabit the world and do their own thing.

Equipment

Each type of item can be equipped individually, different armor sets can be mixed and matched however the player chooses.

NPC Conversations

The player can interact with NPCs to start quests, get clues about certain things or just make small talk.

How it works: When the player begins a conversation, the NPC rotates to face the camera, a new camera is then created and placed at the same position as the main camera. The new camera finds the NPC you are conversing with and smoothly zooms into their face. Certain post processing effects such as vignette are amplified to make the experience more cinematic and isolated from the rest of the game, changing the pace of the game temporarily.

The Inventory System

The inventory menu contains items in the player's inventory, stats for each item and a crafting menu allowing the player to upgrade items which can be upgraded. Inventory can be filtered by item type (weapons, consumables, boots etc...).

How it works: All items are based on an item class that contains properties such as stats, icon, mesh etc...

Equipping Items: Items are all grouped in an array containing all items in the game, when the player picks up an item, the item ID from that array gets added to the player's inventory List. Once an item is equipped, its stats and properties are added to the character's base stats.  Example: finalDamage = baseDamage + weaponDamage + gloveDamage etc...

Showing Items: All the items are modelled based on the player's armature, therefore I can duplicate the player mesh 6 times (once for each item type) and when an item is equipped, i replace the duplicated mesh with the item mesh to allow it to appear on the player, if no item is equipped the mesh renderer is disabled for that item type.

Dropping Items: In the inventory menu, items can be dropped, when an item is dropped it is added to a list, after the menu is closed, an object is created and placed on the ground near the player containing all the items in that list (to allow the player to pick them back up if they choose to), they are also removed from the player's inventory. Quest items cannot be dropped.

The Perk Menu

Somewhat incomplete, the menu presents the player with a number of perks and spells that can be upgraded once enough experience is gained.

How it works: There are two types of perks in the game, passive and active perks.

Passive perks affect variables from the player script such as lifestealAmount which determines how much life the player leeches from NPCs when they land a hit. Upgrading the Vampire perk once will change lifestealAmount from 0 to 7. In the damage calculation function, we now add 7% of the damage dealt to the player's current health.

Active perks are either projectiles or spells, they are handled the same way regardless. Active perks have a variable containing an object, once the perk is equipped, this variable is then transferred to the player script. When the player activates the spell or projectile, an object is spawned, the rest of the functionality is fully dependant on that spawned object. Some objects act as projectiles, dealing damage and perhaps applying some sort of debuff to NPCs, some objects summon minions or create a shield for the player etc...

Level Design

The world is split up into multiple medium sized levels. Each level is accompanied with it's own storyline, quests, characters, armor sets and items. I have 12 levels planned (I currently have 4 levels in development).

NPCs

Most characters in the game have NPC behavior. NPCs have stats such as health, damage, speed, etc... Each NPC is assigned an area to walk around in (or stand still), depending on the aggressiveness of the character, they may attack the player on sight, but most only respond when provoked.

How it works:

Movement: NPCs are given waypoints, they randomly select a waypoint's position to go to, once they reach that waypoint, they randomly select another one.

Combat: If they are provoked, they enter an alert state where the NPC UI becomes visible and they begin chasing the player. When they are in range (each NPC has different range), they start attacking. Most NPCs have 2 types of basic attacks, many have special abilities such as summoning spells, healing spells or charged attacks.

Death: When an NPC is defeated, the character is removed from the scene and is instantly replaced by an identical model with ragdoll physics that allows the mesh to interact more naturally with the environment.

Drops: NPCs usually drop items on death. Each NPC is given a percentage to drop certain items or some gold. When the NPC dies, they spawn an object containing the dropped items. The player can interact with the object to pick up any items they choose.

Optimization

With so many meshes being rendered, scripts running and NPCs running around doing stuff, performance can take a big hit.

As far as CPU optimization goes, I honestly haven't done much, I try to code my scripts as effeciently as I can and I try to avoid things that would cause CPU slowdowns, but I haven't had any issues yet.

As far as GPU optimization goes, I've ran into performance issues a few times. I have a GTX 960 and I want the game to run at full speed and max settings on that card. I start to notice lag when I reach a certain number of polygons being rendered on the screen.

I think the most impactful optimization technique I'm using is Level Of Detail (LOD). It allows me to have several lower quality meshes that I can switch my main mesh with the farther the object is from the camera. Since it's harder to see details on far away objects, you can use lower quality meshes once the object is far enough and if done correctly the player shouldn't notice a difference in quality, eventually you can even disable the mesh renderer completely at a certain distance.

You may have noticed that these meshes are lacking a tremendous amount of detail, to remedy this I use Normalmaps. You can attach a normalmap to your material to give the illusion of geometry, without actually adding polygons. It's a somewhat inexpensive way of adding extra detail to your objects.


I generate normalmaps by baking geometrical data from a high poly mesh directly onto a lower poly version of it using Blender.

Cutscenes

Right now, I have cutscenes at the start of the game and between each level. I animate the models in blender then I use the Timeline in Unity to put it all together.

Animation

I use Blender to animate my models.

Most NPCs follow the same animation pattern. By that I mean usually when I animate a character, I give them these basic animations: Idle, walk, run, fight stance and 2 attack animations.

Some NPCs (especially bosses) have additional animations for spells or special attacks. Bosses often have different sets of animations (several walk/run/attack cycles) that change based on their state or if they have a transformation of some sort.

Music

I originally wanted to use real instruments for music, but I wasn't able to record myself in high enough quality, so I downloaded LMMS and started learning the software.

The goal was to have ambient background music that would provide a lot of atmosphere without being too noticeable or distracting, I wanted the background music to make its contributions from the shadows.

As for the music that plays during fights I'm trying to have something more upbeat and high energy, the same goes for the boss battle music.

Story

I'm still in the process of developing the story, but I have some of the main ideas I want to focus on.

The story revolves around a powerful legendary sword. It was created by ten legendary blacksmiths, but later split into fragments to avoid giving anyone too much power. The fragments are guarded by Fragment Keepers who pass down their responsibilities to the next generations. One day, disaster strikes and the fragments are stolen. You play as a fragment keeper attempting to protect the world from extreme danger.

The story and the lore act as vehicles that house the real focus of the game which is to show the dynamics between two specific characters who have a very complicated relationship.


Comments (2)