MedievaLands [closed source] is a a recreation of an early MMORPG. The desktop client runs on .NET Framework on Windows and macOS. The server runs on .NET Core on Linux. The website is written in PHP and runs on Apache on Linux. 126,500 lines of C#.
Whereas the code for Yserbius and Twinion can only run Yserbius style games (and even more specifically, only Yserbius and Twinion), Cawdor runs on a new client/server dungeon crawler engine that is somewhat more generic than the yserbius/twinion specific code that is currently found in the game. This issue will track two things: First, how generic should the new engine be, and second, what yserbius-specific systems must be written to support the new engine. .... this will be a work in progress ....
To evaluate:
Reviewed systems, already generic
Server Achievements - generic, but I got rid of the achievement bootstrapping, which was not generic.
Server Automaps - generic, generated by client
Server BattleSystem - generic.
Server Guilds, Partying - generic
Server Treasure tables/picking - generic
Server Gallery - only 6 slots, otherwise generic. I'm leaving this as is because of the shared names feature.
Server ChallengeSystem - generic.
Server, may retain Yserbius specific code for Cawdor:
Entities, Player - Yserbius focused - but NEED NOT REWRITE FOR CAWDOR?!
Entities, Monster - Yserbius focused.
Battle - Yserbius focused. This is stateful code and would be difficult to properly rewrite ... and then keep in sync with the original :(
Server, must make generic:
[x] KeepSystem - mostly generic, but will need to
[x] remove references to original game's template items...
[x] and bank expand costs are hardcoded in the bank code. I might need to make this a separate system.
[x] Buffs - Yserbius focused. Must rewrite. #1008
[x] Entities, Item - Must rewrite and then do an in-place database upgrade. #1009
[ ] Maps - Want new CwMap class, inherits from LegacyMap.
[ ] World - Yserbius focused, but easy to rewrite.?
[ ] Make YsWorld the core Yserbius/Twinion world type, inheriting from AWorld.
[ ] Make CwWorld a separate world type, using Cawdor graphics but else
[ ] SmsgBattleRound - Yserbius focused.
[ ] SpellMethods/SkillMethods/SpellArgs - must be completely rewritten with generic ability use class.
Client, mostly generic.
Will need to rewrite GameIDs, ModeEditChar, YsAppearanceData and FaceRenderers, SubmodeCombat, identity strings, ability use check, and the tooltip generator for buffs. Most of this will be easy.
First major issue discovered: the WorldMedieva items are (of course!) only fancy yserbius items. Same attributes, same classes allowed field, same protection types.
Whereas the code for Yserbius and Twinion can only run Yserbius style games (and even more specifically, only Yserbius and Twinion), Cawdor runs on a new client/server dungeon crawler engine that is somewhat more generic than the yserbius/twinion specific code that is currently found in the game. This issue will track two things: First, how generic should the new engine be, and second, what yserbius-specific systems must be written to support the new engine. .... this will be a work in progress ....
To evaluate:
Reviewed systems, already generic
Server, may retain Yserbius specific code for Cawdor:
Server, must make generic:
Client, mostly generic.