Debug panel for displaying FPS, current XYZ position, and other stats can be opened on the player client by pressing f3.
Directional keys + Return key will cause player to autorun in the same direction of keys being pressed.
Page Up and Keypad 9, Page Down and Keypad 3 will raise and lower the camera respectively.
Keypad 5 will center the player's camera vertically.
Login, World Select, Account Creation, Character Select, and Character Creation views have been redesigned.
Account creation view will only be displayed during development. For alpha and beyond players will need to use an existing Funkhouse Games SSO account with the proper roles.
Each player account can have at most 8 characters per world.
NPCs will face the player and wait after being hailed before resuming with their current action.
Zone UI on player client will scale based on current resolution.
Camera will not move when dragging a UI window, even if the cursor moves beyond the UI panel.
Incrementing and decrementing a character's attributes during creation will correctly increase and lower the remaining points label.
[0.3.1] - 2/22/21
Decay rules for a NPC' corpse can be overriden via a new property on the NpcTemplate entity.
Increase delay between a NPC checking for its enemy's position from 250ms to 500ms.
NPC corpses decay based on level. The higher level of a NPC, the longer its corpse will take to decay.
Player client's cursor renders correctly on build.
Recipe option maps (faces, skin color, hair, facial hair, etc) for UMA humanoid races.
Zone servers will only load spawn points for the zone which is currently hosted when sourcing entities from content management site.
Corpses which had decayed were not being removed from zone.
[0.3.0] - 2/19/21
Quickly search and resend previous chat messages by pressing Left Shift + Up or Left Shift + Down.
Quickly Reply to direct message from player by pressing R key. Rotate through players by using the Tab key.
Chat messages are persisted across zone boundaries (until the player logs off).
Player specific UI configuration file that is referenced upon logging in or changing zones. When a player logs off or leaves their current zone their respective configuration file will be updated.
Persist hotkeys on hotbar and action window after a player has logged off within the player's UI configuration file.
Persist location and size of most UI windows after a player has logged off within the player's UI configuration file. At this time, only windows which do not need to be opened (or closed) are persisted.
/who command to lookup players that are locally in zone based on provided filters.
/who all command to lookup players across the world based on provided filters.
Camera filters when rendering underwater on player client.
Characters who are underwater will play a swimming animation on player client.
Gravity is reduced when underwater, allowing a player to swim to the surface or down to the floor.
Swimming skill which will directly affect a player's lung capacity. If a player runs out of air, they will begin taking damage.
Authoritatively check and persist a player's swimming state even when they are offline. Camping will not save you.
Air Remaining window to track how close a player is to drowning.
Generic framework for tracking and synchronizing objects in a zone across all clients. Interaction with objects can be restricted based on many different types of conditions, such as the player having a minimum level, skill, flag, key, etc.
Opening and closing of doors is synchronized across all clients.
New races: Bat, Rat, Scarab, Spider, Skeleton, and Snake
NPCs can configured to aggro other NPCs based on the other NPCs faction, whether the other NPC is an animal, or whether the other NPC is undead.
NPC spawn groups can be configured so that multiple NPCs are spawned within a particular boundary in the world. These NPCs will roam their designated boundary rather than sticking to particular waypoint.
Populate half of Cape Commons with roaming NPCs and city guards near the city walls of Cliffport.
Animation-triggering actions, such as sit, death, swim, movement, which are mapped to custom animation controllers for each race.
Pressing Num Lock will toggle auto run.
Each race can be configured with their own logic for determining the type of melee attack. For example, a snake may always bite whereas a humanoid will evaluate the skill being used (slash, crush, punch, kick).
Each race can be configured with their own logic for playing audio clips. This allows each race to make their own independent sound on death, attack, wound, aggro, etc.
Update Unity to 2019.4.12f1 for all tools & clients.
Scripted NPC behaviors have been moved to an external library which can be updated without rebuilding authoritative client.
Decouple authoritative events from libraries which are visible by player clients. Events can now be authoritative client specific, player client specific, server specific, or shared across multiple clients.
Greatly reduce size of player and npc movement packets by using smaller data types and inferring more values.
NPCs that are stuck off of the navmesh (i.e. under the terrain) will automatically warp to the nearest navmesh location.
[0.2.6] - 7/31/20
/camp command will remove player from zone and return them to character select after 30 seconds of sitting.
Passive/defensive skills which are evaluated on each hit: Dodge, Parry, Block, and Riposte.
Backstab ability for rogues. Players must be behind their target and wielding a 1 hand piercer to use this ability.
Endurance points which are regenerated every tick, similar to hit points and mana points.
Support Mana Point and Endurance Point buffs.
SpellEffect can be configured with ExchangePoints and ExchangePointsOverTime to support lifetap and twitch spells, both instant and over time.
ClearAggro SpellEffect type which can be used to clear an npc's aggro list.
Lay Hands ability for Paladins. Note that this ability triggers as a healing spell.
Mend ability for Monks which allows them to replenish health. At lower skill levels mend can critically fail, taking away hitpoints. At higher skill levels mend can critically succeed, greatly increasing the character's health.
Additional kick and punch abilities for Monks. As a Monk levels they will unlock these new martial art skills, each of which will be more powerful than the last.
Stat type to modify a player's aggro modifier. This can be used to build beneficial or detrimental buffs which increase or reduces the amount of aggro a player will generate.
Dual Wield skill which allows for characters to attempt an attack from their offhand when auto attack is on.
Ranked roles for guild members that determine whether a guildy can perform specific actions. Such as update the message of the day, invite other players, etc.
Guild Message of the Day which can be updated by guild officers.
Ability to promote and demote guild mates.
Decouple jumping from movement API so that we can authoritatively allow the player to jump.
Only allow a jump if the player has enough endurance. After performing a jump, the player's endurance is reduced.
Prevent equipping of any item in secondary slot if two handed weapon exists in primary.
Prevent equipping of a weapon in secondary slot if character does not have Dual Wield skill.
Delay for hand to hand attacks will scale based on a Monk's and Beastlord's level. All other classes have a static hand to hand delay.
Wardrobe recipes which attach to a bone (primarily weapons and shields) would often not render when switching between characters at character select screen.
[0.2.5] - 6/28/20
Forage ability which can be used by certain races and classes to search for nearby food, water, items, etc.
Foragable items can be configured globally (i.e. for all zones) or for a particular zone. Generally, the zone specific pool of forageable items will be used, however, ocassionally the global list will be used.
Combat ability window which contains common combat actions such as ranged attack, auto attack, kick, and other combat abilities.
Ranged attack combat ability which will consume ammo and trigger firing of an equipped bow or throwing weapon.
Mapped all weapon item types to the appropriate animation. Beforehand, only daggers and swords would animate correctly. Now, 1h/2h swords, blunt weapons, piercing weapons, shields, and bows will render for the correct slot (primary, secondary, or range) that the item is equipped in.
Play combat music upon enabling attack.
Play merchant music while merchant window is open.
Play configured music for current zone.
Play appropriate footsteps based on terrain. For example, walking on wood, sand, dirt, etc.
Play audio for failed and successful attacks. Each type of weapon is mapped to a different set of clips. This includes Archery and Throwing.
Track and persist Game Time on world server, keeping zone servers and all clients in sync.
/time command on player client to display the current Game Time and Earth Time.
Weather transitions which can be configured independently between each zone. Transitions are driven by the zone servers and synchronized between all player clients.
Equipping a weapon in your primary/secondary slot or enabling auto attack will force your melee weapons to render. However, equipping a ranged item or triggering a ranged attack will force your ranged weapon to render. This logic exists because you can have both melee weapons and ranged weapons equipped at the same time.
Upon dying, the player's camera will move above and face their corpse.
Characters and corpses no longer disappear before the current zone is unloaded.
Use Game Time to drive rendering of day/night cycle on player clients.
Looting of corpses which do not have any items.
[0.2.4] - 5/29/20
Ability to destroy item or coins on cursor.
Definition and use of zone lines. The triggering of which will remove a player from one zone and load them into another.
Item detail window to view the stats for a particular item.
Escape hotkey will close the previously opened window.
Holding the left control key will cause the player to strafe left/right
/Follow for players to automatically follow nearby party members.
Wardrobe Model which can be used to define different color schemes for a player client model.
Support for Teleport, Evacuate, and Gate spells.
Initial support of Resurrection spells. This includes a confirmation window for players to accept, as well as keeping track of whether a corpse may reclaim experience on resurrection. Upon being resurrected, a player will lose most of their health, all of their mana, and all active spells will be removed.
Containerize all game servers & authoritative client into a linux based OS.
Helm charts to deploy game servers & authoritiative client to Kubernetes.
Loot window can render more than 30 items at a time.
All windows on the player client share common functions for opening, closing, toggling, etc.
Players, npcs, and corpses no longer collide with each other.
Reskinned zone UI on the player client.
Wardrobe recipes can be configured to use a particular model's color scheme.
Merchants will no longer buy No Drop and No Rent items.
Target nearest NPC hotkey will work for NPCs who are right up against the camera.
Stop showing player trade window after zoning.
Stop showing npc trade window after zoning.
Could not loot corpses after zoning.
Rendering of equipped armor slots for player corpses.
Unlock corpses being looted by player upon leaving (or disconnecting) from zone.
Networked characters initial animation state is rendered correctly, even if they are performing an action upon load.
Containered items not transferring back to inventory on player client after cancelling trade with NPC.
Searching for player when guild inviting by name is now case insensitive.
Rotation of player will be based on the direction of their character, rather than based on the direction of their camera.
Only render mana bar in CharacterInformationWindow for spellcasters.
Only render mana stat in InventoryWindow for spellcasters.
Corpse's display name in loot window no longer overflowing onto loot slots.
Stop rendering an empty line in the chat window when a /command does not produce a chat message.
Selling items which have been looted from a player's corpse.
[0.2.3] - 4/1/20
Wardrobe Recipe entity/models that can be used to map multiple layers of clothing to particular items. When equipped, all layers in the recipe will be rendered on the client.
Wardrobe Collection entity/models that can be used to build the base clothing for a group of NPCs.
Content service & web application to handle creation of nearly all entities in the game.
Highlight targeted character with a color that indicates its level difference/difficulty.
Tab key will target the nearest NPC in view.
BackQuote key will cycle between the NPCs in view, ordered by their distance.
F1 key will target the current player.
Add deity selection to character creation view
Add starting location/zone selection to character creation view
Chance to automatically skillup whenever using a skill.
Add volumetric clouds and lighting to zone scene.
Support for non playable races which can then be assigned to NPCs.
Multiple texture/model/etc support for non playable races.
New Race: "Wolf"
New Race: "Bear".
New Zone: "Cape Commons".
Servers & clients can be configured to pull from a remote content service rather
Legacy method for rendering weapons on the player client has been updated to the new Wardrobe framework.
Migrate all game servers to .NET Core 3.1.
Upgrade to Unity 2019.3.5f1
Loading screen will clear if a player or npc leaves the zone before initialization.
Smoothen networked character movement.
Character mouths no longer hang open.
Performance issues on World server after the same async TCP client would disconnect/reconnect.
[0.2.2] - 1/2/20
Tons of new assets: item and spell icons, weapon and armor models, etc.
Framework for loading yaml configuration files on the Authoritative & Player Unity clients.
Override host config file during Player client release. For now, released player clients will point to the public test server.
Loading of weapon models on player client.
[0.2.1] - 12/31/19
NPC Trading Window where players can give NPCs items and coins.
NPC behavior hook to define custom actions when given particular coins or items
Player Trading Window where players can trade items (including containers) and coins with each other.
Player client will render secondary weapon slots for all characters who have an item equipped.
Authoritative APIs for awarding coins, items, experience, and faction to players. NPCs can use these APIs during a behavior hook such as when receiving a particular message or when receiving a specific set of items.
SSO service that will live outside of the game login server, but will be able to authenticate and authorize users for both logging into the game and submitting changes to the upcoming Content Submission web app.
Ability to authenticate/authorize a player using the Funkhouse SSO service. If enabled, the remote SSO service will be used. If disabled, the login server will handle authentication.
Apply domain driven design architecture to corpses on server side.
Stop synchronizing inventory items in the database upon every change. Instead, save the player's inventory state after important flows or when logging off.
Lookup of inventory items is handled entirely by the assigned slot. The identifier is only used when persisting in the database.
Rather than relying on the client/server character DTO object to keep track of a character's state, both clients have their own state machine components. The DTO is only used for requests made between the client/server.
All inventory-related windows on the player client are now reponsible for keeping track of their respective item/coinpurses. Beforehand, all inventory-related states were associated to the player DTO object.
Container slots are now searched on behaviors that look for an empty inventory slot such as looting or purchasing an item.
Upgrade to Unity 2019.3.0f3
Moved common Data and Security patterns into shared Funkhouse libraries.
Upgraded Content Submission Service to .NET Core 3.0.
Content Submission Service will authorize a user's identity with the SSO service on Create, Update, and Delete of content.
Player client is rendering equipment of other characters again.
[0.2.0] - 10/30/19
Sense Heading, Sneak, Hide, Slam, Bash, and Harm Touch abilities.
Compass UI which displays the current direction. The accuracy of the compass improves as the player increases their sense heading skill.
Invisibility, See Invisibility, and Stun spell effects
New starting town for Humans with guards and merchants.
Ability to define a skill line for each ability. Prevent abilities from the same skill line from being used at the same time.
Scripts to define custom NPC behavior such as responding to specific text, moving to a custom waypoint, giving a custom response on aggro.
H hotkey will automatically hail the target.
Introduce Shadow Knight as a playable class for Humans.
Players can pick up coins onto the cursor and deposit directly into the bank or inventory.
Assets for platinum, gold, silver, and copper coins.
Support for stackable items. This includes splitting stacks, merging stacks, etc.
Support for buying and selling stackable items.
Player client no longer reuses the same exact scene when zoning. Instead, the current scene will be unloaded and a new zone scene will be started.
Player client must wait for response from server before transferring coins to the bank.
[0.1.9] - 10/14/19
Action Window UI has a tab that will allow players to load abilities that are available for their character.
Hotbar Window UI which can be assigned abilities from the Action Window.
API to activate an ability.
Persist ability cooldown while logged off.
Tracking Window UI which allows Bard, Druid and Ranger players to find the direction of a nearby NPC.
Kick, Taunt, Feign Death and Tracking abilities.
Button to toggle between walking and running on the Action Window UI.
Action Window UI now supports multiple tabs.
Updated starting skill data structure to map a class to a skill, along with the class' skill cap and other class specific configurations.
[0.1.8] - 10/7/19
Players can remove a memorized spell by right clicking on the spell bar slot.
Prevent spell from being casted again until its recast timer is up.
All spells are unmemorized from player upon death.
Prevent detrimental spells from being casted if target is not visible or out of range.
Prevent beneficial spells from being casted if target is out of range.
Improve NPC aggro performance by filtering raycast checks for character objects only.
Force all Player clients to start in maximized window mode.
Overwrite existing spell if casted by a player of the same level or higher.
Fix crashing during character creation on MacOS.
Fix ocassionaly crashing when zoning after death on MacOS.
[0.1.7] - 10/3/19
Feign death support. Note that a NPC will not lose aggro until it has returned to its bind.
Feign death spell effect + spells.
Introduce Necromancer as a playable class for Dark Elves.
Force all Player clients to start in the device's native resolution.
MacOS clients would crash when serialization cross platform characters.
NPCs face in the direction that they're moving.
NPCs would not turn attack back on if they were in melee range of target when reaggroed.
Players health and mana were not being updated to 100% after dying.
[0.1.6] - 9/26/19
Add RPG.Client.Player to Funkhouse Games launcher with Windows & MacOS support.
[0.1.5] - 9/15/19
Introduce Wood Elves as a playable race.
Start the player client in maximized windowed mode.
Allow player client window to be resized.
Only include assets that are being used in the player client build. With this change the client will shrink to roughly 2GB from 8.5GB.
Races were not loading their DNA correctly. I.e. all races had the same chest size, head size, leg size, etc.
Fixed exception that was occurring when adjusting a character's DNA slot during character creation.
Fixed many shader issues (UMA character, trees, etc).
Attack was not being turned off if the target dies.
Fixed bug where player could move while kneeling.
[0.1.4] - 9/8/19
Players can remove beneficial active spells (i.e. buffs) by clicking on the spell effect
Map spells to a spell line. Create restrictions between spell lines that will prevent a spell from landing.
Beneficial damage shield spell effects. A new event will be fired whenever a character takes damage.
Mesmerize spell effects. A character is locked into place / cannot attack whenever they're mesmerized.
Poison, Magic, Disease, Fire, and Cold resist attributes added to all characters.
Resist attributes can be set as a starting stat for a particular race / class.
Resist attributes can be set as part of a npc template.
Player spells have a chance to fizzle, stopping the spell cast and costing the player mana.
Spells can be resisted by a character. The larger the level difference, the bigger the chance of resisting.
Direct damage spells can be partially resisted. In this case, the damage done will not be for the full amount.
Player can swap deposit and withdraw coins to/from the bank.
[0.1.3] - 8/27/19
Persist a player's buffs/debuffs while offline
Npcs will generate aggro on players who buff an already hated player
Handle aggro for all spell effects, for all targets, per tick and upon the spell landing
Spell effects to increase/decrease spell counters & ability to cure a debuff with counters
Spell effect to root a character in place
Fix parties (broken since move to Domain Driven Design)
Fix bug preventing other character animations from rendering
[0.1.2] - 8/24/19
Keep track of spells that have a set duration
Damage over time spell effects
Stat buff and debuff spell effects
Enchanter, Shaman, and Cleric are playable and start with some level 1 spells
Calculate player and npc movement based on a movement speed stat
Spells to raise and lower movement speed
Calculate melee combat delay using a combat speed stat
Spells to raise and lower combat speed
Keep track of player/npc mana
Regen player mana every tick
Populate mana related GUI components on player client
Prevent spellcast if character does not have enough mana
Consume mana when spell is cast successfully
[0.1.1] - 8/17/19
Healing spell effects / spells
Animate successful spell cast
Add particles for fire spells, healng spells
Auto select corpse upon target dying
Reduce chance of spell interrupting when character has suddenly stopped moving
Changing directions will not interrupt a character's spellcast
Prevent melee combat from a character whom is casting a spell
[0.1.0] - 8/14/19
Ability to memorize a spell from the spellbook into the spellbar
Spellbook progress bar to track spell scribing, spell memorizing
Spellbook Casting Window to show time until the current spell completes
Single Target & Area Effect direct damage spell effects
Replace custom queues used for asynchronous callbacks with UnityMainThreadDispatcher.
Implemented domain driven design pattern throughout server side code.
Implemented repository-like pattern for loading, unloading, caching entities from the database.
Improved player HP calculation
Removed Sun/Moon gameobjects and scripts from Zone scene / controller as they were wrecking the environment's lighting.
[0.0.4] - 7/8/19
Keep Alive UDP request to keep connections between Client and Server open
Spell book which displays all spells that the player has scribed.
Ability to scribe a spell into the spellbook using a spell scroll.
Other NPCs/Players will still move after 5 minutes of idle activity
[0.0.3] - 7/6/19
UI to display the coins in the bank window.
Database tables to support NPC & player spellcasting
API for clients to fetch spell information
API for a player to scribe a spell into their spellbook
API for a player to memorize a spell onto their spellbar
Initialize a player's scribed/memorized spells upon loading into a zone
Icons for spell bundled into Clients.Core.Resources submodule.
More logging for UDP functionality as part of MMORPG-42 investigation
Restrucuted Data Access Layer (DAL) classes & namespaces
Move AssetType out of the database and into C# classes
Define DB entity defaults via constructor, rather than annotation.
[0.0.2] - 6/29/19
API and data model updates for player to bank coins.
File logging on all game components.
Rename Bronze to Copper throughout the game.
Reference Funkhouse.Networking.Socket libraries from the new Funkhouse NuGet source rather than the MMO.Tools.Networking libraries from /Dependencies.
Replace console logging in all game components with the Funkhouse.Logging API.
Unlock all corpses being looted by a character when that character leaves zone.
Removed /Dependencies in favor of the Funkhouse NuGet source.
[0.0.1] - 6/23/19
Flag to control whether or not database tables will be initialized on Login, World, and Zone servers.
Flag to control whether or not launching as a development build. A development build requires that you launch the Zone server and Authoritative client. A non development build will launch/manage the Zone servers and Authoritative clients from the World server automatically for you.
Flexible/generic command line parser for servers.
ShutdownHandler classes to decouple the shutdown logic for each server from Application.cs.
Zone host configuration (inbound requests) can be passed to the zone server via command line arguments.
Zone host configuration (outbound requests) can be passed to the Authoritative client via command line arguments.
Ability to kick and re-launch Authoritative client if its heartbeat is more than 1 minute old
Ability to kick and re-launch Zone server if its heartbeat is more than 1 minute old
Release jobs for all components necessary to host the Game
Release jobs can be ran manually for each component, but will also build upon merging a pull request into the master branch.
Deploy jobs to automatically update the public test world upon a new release
Deploy jobs that allow us to deploy a particular release of a particular component
Build job to validate every PR and report whether or not the RPG solution will build and whether the Changelog has a new/valid version
Trolls & Dark Elves spawn in the Test Dungeon zone. Dwarves & Humans spawn in the Misty Crater zone. Only the Test Dungeon will be launched for development builds.
Separated RPGHost information out of RPGZone. RPGZoneHost now keeps track of which host is running a particular zone.
NPCs that do not have a waypoint will not return to their spawn location after being aggroed.