SotA clone prototype WIP

Last week, I decided to roll up my sleeves and work on a prototype to replicate SotA. I talked about it before but now I'm just dedicating a single reddit thread to it.

Prototype: because I don't believe this would actually end up being a finished product and that, if it did, I'd have to hire a networking engineer to redo the backend. The prototype's goals is to make something playable, have solid server/client communications and have good game logic. Think of it as one of those fan-made Sonic the Hedgehog engines.


Clone/Replica: in this context, the terms are used very loosely. The idea is to match what is described in most of StoA's bullet point features without so much doing the same thing as SotA.

NPCs with daily schedules, Ultima 4 style dialogue system, class-less system, a focus on testing one’s virtues, non-instanced player housing, a sandbox single-player game with structured stories and quest lines that can be played online, etc.

 

Right now, I'm only dedicating my Sundays to work on this but, if the project (and interest) grows, who knows... maybe I'll dedicate more time to it.


In the hopes that this won't get moderated, here's an update:

(14/07/2019)

  • (Done) User account management. Creating accounts, login in, account expiration (a minute of offline inactivity, because prototype), etc.

  • (Done*) Server-authoritative character movement with low update frequency and predictions. *I have yet to find a good solution to allow the server to verify whenever or not clients are legitimately jumping. So no jumping in the game for now.

  • (Done) Enabled players to share their name-tags to specific players. Players (and NPCs) are anonymous by default.

(21/07/2019)

  • (Done) Server sending terrain data in chunks; namely props (trees, rocks, houses, etc) with ownership. Server owns trees and rocks, players own houses, etc.

  • (Done) Enabling players to edit terrain chunks. To remove server-owned props and place down props of their own on terrain that has enough free space. Only placement; moving props after the fact will be done another time.

  • (Done) Add an account-wide friend list and enable players to hide name-tags that aren't in the list. Store the name-tag info on the account to avoid having to share name-tags each time players log in.

  • (Bonus) Phase particular chunks of terrain for different modes: Persistent MMO (default), private (dungeons) and story (with multiple stages). System only, no content. Players outside-looking-in or vice versa can see each other; the phasing happens when both "groups" of players enter the same particular chunk of "instanced" terrain.

(28/07/2019)

  • (Done) Decay props from expired accounts. Either delete them entirely or make them destructible for others. Look into the possibility of a perpetual decay for props that are outdoors (ie: touching the ground floor). Repairing houses?

  • Respawn server-owned props that were previously removed (such as trees), assuming that they don't overlap with existing (player) props.

  • (Done) Phase particular chunks of terrain for different modes: Default is persistent MMO, another phases out other players for group play (private dungeons) and the last one for story-specific states (a ruined village vs rebuilt, etc). Just making the system, not the content.

  • (Done) Allow players to move/remove props that they own and put in place a prop limit per account.

  • (Bonus) mapped out the general layout of the world/continent. Faction starting locations (with story setup), story-specific dungeon themes and locations.

(04/08/2019)

  • (Done) Respawn server-owned props that were previously removed (such as trees), assuming that they don't overlap with existing props.

  • (Done*) Allow players to move/remove props that they own. *Moving a prop that has other props attached (such as a table with dishes) will move all props involved. This was not planned (it's much easier to force players to remove all props attached prior) but I figured out a solution at the last minute.

  • (Done) Add faction data to players and props (both player-owned and community props).

  • (Bonus) Build mock-ups for basic props: house, candle (light source), tree, ore.

(11/08/2019)

  • (Done*) Player chat functionality (with resizable box). No whispers or guild chat yet. *Given the potential of multiple characters capable of sharing the same name, there's no reliable (and safe) way to allow players to whisper one another. Unlike other games like Elder Scrolls Online, clients do not know account names of anyone. Group and Guild chat is possible through channel addresses. Functionality is in but can't be used yet as there are no group or guild systems implemented.

  • (Done) Brain-dead NPCs with preliminary dialogue window.

  • (Done) Build mock-ups for basic props: house, candle (light source), tree, ore.

  • Add doors to houses. Enable owners to lock doorsDebugged issues related to how props were being handled in instances.

18/08/2019 - Vacation

25/08/2019 - Vacation

(01/09/2019)

  • (Done) Add doors to houses. Enable owners to lock doors.

  • (Inconclusive*) Design: What happens when players surround other players (or their doorway) with props? How to prevent trapping of players? *I currently can't think of a solution without compromising on the idea of being able to put practically any item anywhere in the world... at least, not one that wouldn't require the server to run a pathfinding algorithm (not ideal for performance reasons).

  • (Inconclusive*) Design: What happens when one faction dominates another? How to prevent players from completely blocking NPC town infrastructure from being rebuilt after being defeated? *I came up with the idea that, as a faction loses territories, all of the NPC soldiers that would be in said territories would respawn at the nearest faction-own territory... making it that much harder for the opposing factions to progress and settle. It's a neat idea but it doesn't actually solve the issue. Players always find a way.

(08/09/2019)

  • Build voxel-based terrain editor. While voxel-based terrain is doable (and I'm a huge fan of that sort of thing), I changed my mind about implemented it. I came to the conclusion that it would complicate (and, thus, slow down) the process of content creation for no real benefit to game-play and would require me to build separate editor tools.

  • Save/Load voxel data. As per the reason mentioned on the point above, I won't be implementing this.

  • (Done) Assign texture "tile-set" to specific chunks of terrain.

  • Work on a preliminary Final Fantasy 14-esque in-game cinematic dialogue system. The kind where the camera is more intimate and the dialogue pauses until you click to continue*Real-life got in the way.

  • (Started*) Start sculpting the preliminary landscape of the terrain. Either work on one of the 3 starting locations or build from 0,0,0 which would be the center of the continent where a lot of the initial end-game would happen. *I'm working out the scale of the world. The world is divided in multiple zones/provinces but I'm trying to determine how big each of them should be. Build it too small and you're stuck expanding the world by adding new islands (something I want to avoid). Build it too large and it becomes a near impossible task to design (not to mention a lot more things to track for the server).

(15/09/2019)

Delays were caused by a combinations of RL events and the fact that I list these goals 3 weeks in advance. While I believe I'm pretty good at estimating how long it takes for me to do particular tasks, some times circumstances throws you a curve ball and you simply didn't allocate enough time to tackle a problem that deserves more attention.

  • (Delayed) Prevent players from spawning inside other people's houses (or into geometry) if they logged off prior to the props being placed down. Also, logging out from other people's houses and logging back in might result in being trapped if the house's doors are locked. So... never log back inside a house unless it's your own.

  • (Delayed) Elaborate on NPC dialogue text-parser.

  • (Delayed) Build the foundation for custom-made pathfinding for NPCs.

(22/09/2019)

  • (Done) Prep the server/client for a stress test. The test won't happen on the 22nd but I'll be spending most of that day to clean up code and do a tiny bit of QA. The first (phase one) stress test is to have the server run on the east coast while I connect from the west coast and see if there aren't any issues with losing packets.

(29/09/2019)

  • (Done*) Phase One stress test*tons of bug fixes.

  • (Done) Added the ability to sprint. There's no concept of stamina yet but the server does make sure that the distance traveled is legit.

(06/10/2019)

  • Candidate for Phase Two stress test. Put the server on a VPS and provide a client to the public. I plan on pulling NPCs out completely from the build to prevent NPC-related bugs from interfering with the server's performance (unless I manage to debug it in time).

  • Prep the server/client for Phase Two stress test. Got drafted into LDjam's "build a game in a weekend" competition. Failed miserably.

(13/10/2019)

  • (Done) Prep the server/client for Phase Two stress test.

(20/10/2019)

  • (Inconclusive*) Candidate for Phase Two stress test. Put the server on a VPS and provide a client to the public. I plan on pulling NPCs out completely from the build to prevent NPC-related bugs from interfering with the server's performance (unless I manage to debug it in time). *Not enough players to really stress test the server's code efficiency but I managed to find and fix a good amount of bugs.

(27/10/2019)

  • Instead of working on my main RPG project, I dedicated the entire week (from the 20th to the 27th) on Phase Two. Find bugs, fix 'em, recompiling, etc.

  • (Done) Refined what was already established.

(03/11/2019)

  • (Done) Elaborate on NPC dialogue text-parser.

(10/11/2019)

  • (Done) Elaborate on NPC dialogue text-parser.

(17/11/2019)

  • (In progress) Build the foundation for custom-made pathfinding for NPCs.

  • (Done) Added a (rough) spellchecker that allows NPCs to recognize words typed by players even if the words have typos.

(24/11/2019)

  • (In progress) Build the foundation for custom-made pathfinding for NPCs.

  • (Done) Modified the text parser's spellchecker so that it's more strict as the words are shorter and is more loose when the words are longer. So that, "tamorow" still registers as "tomorrow" but "tom" isn't registering as "mom".

(01/12/2019) - US Thanksgiving weekend.

(08/12/2019)

  • (In progress) Build the foundation for custom-made pathfinding for NPCs.

(15/12/2019)

  • Build the foundation for custom-made pathfinding for NPCs.

(22/12/2019) - Holidays

(29/12/2019) - Holidays.

(05/01/2020) - Holidays.

(05/01/2020) - Holidays.

(12/01/2020) - Holidays <- I may get some work done depending on when I get back home.

(19/01/2020)

  • Build the foundation for server-authoritative "mini games" for things like gathering, lock-picking and tavern activities.


That's it for now. I'd show screenshots but it's really not that great to look at; just a bunch of coloured cubes. I've written down some pretty nifty ideas on what could be done so I guess I'm slightly more into it than I originally thought I was going to be.

Comments

Popular posts from this blog

One year later

MMO Prototype - Mini update

MMO Prototype - April report