lemon.horse - Lemon Drop's Lair

Lemoncest

Start Date:
End Date:

Lemoncest is a private server project created for the My Little Pony themed MMO Legends of Equestria to originally provide access to gameplay despite official servers constantly being offline. It consists of a web front end created with Ruby on Rails which can be found here, as well as a custom server written in C# to drive the game itself upon connection. While development is no longer under way due to other more important projects taking priority, it is still available to play online for as long as it is reasonable to maintain it.

Early History

Legends of Equestria (LoE) originally existed as a game named Equestria Online (EO) created in 2011, starting the initial development of the project. This continued until an internal disagreement between the team and the project's owner caused the project to split off into a new game under the name Legends of Equestria, using the game's development up to that point but re-branding to be entirely disconnected with the original. From this point the game's development proceeded slowly, continually adding content and features such as new maps, quests, items, combat, crafting and more up to the point where it is now.

Before the game was officially released and open for everyone to play at any time like it is now, the only chance people had to play was during planned Open Server Weekend (OSW) events which took place usually every 6 months or so. The purpose of these events was to mainly test for bugs, show off new features and build hype for the game by teasing its release, though all in-game accomplishment done by players during these periods would not carry forwards to future events as a consequence. This strategy worked well for some time, but eventually many became frustrated with this pattern of releases and how they were run for a number of reasons, the most common of which were as follows:

  • Well-known bugs not being fixed, or regressions in functionality since the previous OSW.
  • Lack of progress on the actual game's development, each OSW typically only adding items or quests whereas overall gameplay, visuals and performance were often left unchanged.
  • Poor server performance resulting in difficulty playing due to high amounts of latency on actions such as attacks in combat, or an inability to even connect to begin with.
  • Needlessly small playtime windows where running a server continuously for such a relatively small and simple MMO should not have been difficult. Similar games such as Pony Town for example offered continuous server uptime throughout its existence, and while it did originally also have stability issues of its own, they were not much worse than LoE's.
  • Strict moderation combined with an insistence that the game's target demographic was children, alienating a large portion of the adult fanbase. Pony Town, also desiring to partially target a younger audience, solved this issue by simply having different servers with different sets of rules for different age groups, a solution which would've worked fine in LoE's case had they not doubled down on the way it was run.

Note that these are criticisms of issues I both observed myself and saw others discuss which makes them fairly anecdotal, and while I could dig up citations for each of these claims, that is not the main point of this post. Despite these issues, many still played the game (myself included) since at the time there was no other option, though this did spark the interest for the developments which was to follow.

mlkj's Private Server and /mlp/LoE

In late 2013 an individual by the name of mlkj (tux3 on GitHub) posted a thread (ID 13288911) on 4chan's /mlp/ board introducing an open source private server for LoE, which can still be found on GitHub here. This was a welcome development since the OSWs were notorious for being hosted on servers which constantly experienced networking issues such as randomly disconnecting users or refusing connection in the first place, as well as all the other previously stated issues. Shortly later during another thread (ID 15917264) pertaining to an OSW in early 2014, another version of the private server was mentioned, resulting in the formation of a small community to host the server and a series of general threads dubbed /mlp/LoE.

Over the next year multiple instances of the private server were hosted by various members of the community usually off of their own machines at home. Notable hosts during this period include Chip Chop, Neon, Mango Bloom and Fross T. While this worked somewhat well, uptime in some cases was less than ideal due to having no real dedicated servers and while mlkj's server did offer an environment to play in, various issues were present in it as well. Some examples of issues faced were various bugs which could crash the server through specific actions in-game (resulting in more downtime), instability in the server's networking and a lack of any real user account authentication system (as user authentication was handled locally). Around this time I started up my own instance of a fork of mlkj's server hosted on a proper dedicated machine with fixes to some of the bugs discovered by the community and additional features in place. This server filled the void left after the previous main server being used had shut down and began my main involvement in developing for this project.

Fruity Server

After some time hosting mlkj's server and making my own improvements, I decided that I'd attempt to create a server of my own with all the features I wanted which were more difficult to simply add on to the existing codebase. The most significant of changes I intended to add were to add support for a more recent version of the game client, as well as a proper centralized authentication and account source with a web frontend. To accomplish this, I used Wireshark to collect samples of the game's usual network communication with the official servers during the OSWs, .NET decompilers such as Redgate's .NET Reflector and JetBrain's dotPeek to decompile and analyze the game itself, and referenced previous research done by mlkj in a similar fashion. To more closely match the networking of the game itself and improve stability, C# was used with the PNet networking library instead of using C++ and an ad-hoc implementation of the networking as mlkj's attempt had done. With this, a functional server was able to be constructed quickly, taking name Fruity Server.

Once the game server itself was functional in testing, I used MySQL to create a data driven system for creation and storage of persistent information such as accounts, ponies, inventories and other in-game data rather than the not so efficient text files mlkj's server had utilized. Shortly afterwards, a web frontend utilizing Ruby on Rails was created, allowing for account management and typical static information display such as client download links and server rules. This web server also presented the needed HTTP login API to allow the game to communicate with the server and interface with existing session information rather than having to login locally with no session as was done before. One interesting improvement I made to the client itself relating to this was to change the password transmission from a SHA1 hash salted by username over plain HTTP to sending it directly over TLS as most modern login systems do. This effectively improved the transport security of the login process as well as allowed for a stronger bcrypt based password hash to be used server side which naturally improved password security in case of a database breach. Unfortunately it took a data breach for the official LoE team to actually realize they should probably have at least TLS on its web server, and that perhaps 1 iteration of salted SHA1 was probably not the most ideal hashing algorithm they could've used for their user's passwords.

After being released for all to use, there was still much work to be done as initially the early versions of the server only possessed a limited set of basic features such as an ability to join the game, create a pony, move around the world, chat and teleport between maps. While this was fine, I then set to work on adding more features such as local and whisper chat functionality, additional commands for moderation and roleplay utility, room loading zone triggers, trading, and support for newer client versions as they were released.

Decline and Legacy

While the server remained active with a stable community for the next year or two, eventually activity did start to drop off for a number of reasons. The main one was that there is really only so much to do in a game like LoE. Most of what was done was already beyond the actual main gameplay of the game, mosty focusing purely on roleplaying and using the game as a glorified 3D chatroom, very much like how Pony Town is used today. Unlike Pony Town however not too many people were interested in playing LoE (or at least not many people knew there were private servers for it), leading to no influx of new people to keep the community going. Additionally, due to being a rather large and resource-intensive program, it did not have the same ease of access as a small browser-based game like Pony Town had, further reducing the number of new users.

Currently only a small number of new accounts are made over time and only a few individuals still actually login every once and a while for nostalgia sake, leaving the server effectively dead by most accounts. Due to the lack of interest I stopped developing this project sometime in 2016 since it is simply not worth the time and effort unfortunately when I could be working on more important things. Additionally, now that the official game has opened for all to play at any time, the purpose of a private server is now merely in the community and moderation aspects rather than providing something that was not available in any other way like it once did. I am not sure how long I will keep the actual server and website running, they luckily do not require much maintenance, but they do still have a cost associated with them and will not last forever. For now at least I do not have any immediate plans on shutting it down, just so those who wish to can re-experience something from back then if they desire to.

Overall I am happy with what came of the project during its active years, having learned a lot about numerous things in programming through working on it and made a number of my good friends through the community that played regularly. Given how barebones the game was, it is incredible that multiple users have a recorded playtime of over 1000 hours, with one even reaching a bit over 4000 hours at the time of this writing (no doubt mostly AFKing, but still impressive none the less). To me all that is reason enough to say this project was a success.