Skip to content

Releases: RanvierMUD/ranviermud

Version 3: The Great Divide

02 Feb 04:15
Compare
Choose a tag to compare

Version 3 brings the biggest changes to the engine since its complete rewrite a bit over 2 years ago. There have been major changes not only to the engine in the form of features and bugfixes but also the project structure and the entire Ranvier ecosystem.

Structure

To start, all things Ranvier now exist under a new Ranvier Github organization. This was necessary because the ranviermud repo has been hit with a big ol' axe and split into three main repos:

  • ranviermud still acts as the "main" repository. If you want to use Ranvier, this is the repo you clone. It contains the skeleton of the project structure necessary to use the Ranvier engine. Think of it like the "starter kit" for using the core.
  • core is the engine itself, whose code is no longer part of the ranviermud repository. Instead it is included as an NPM dependency
  • docs now live in their own repo as well as being part of a nice new deployment runway that really only I care about. The docs being in their own repo makes it much easier for people to contribute doc changes if they are not programmers as they don't have to dig through code or setup the original project anymore

This split greatly lessens the considerable effort it took to merge in engine updates while simultaneously working on your game inside the ranviermud repo. Previously this required a very annoying dance involving rebasing, merging, and resolving sometimes dozens of conflicts. Now it's a simple npm update

Taking things a step further all the bundles previously included in the ranviermud repo have each been split into their own repository for the same reasons. The bundle installation and management strategy going forward is now handled through git submodules by default. Git submodules are a little tricky but best fit our project's needs for including subprojects while still allowing for modifying their code or receiving upstream updates. As always there are thorough docs on the new process.

Overall the new project structure, while very different, is much friendlier experience both from a version control perspective and this split allows for Ranvier code to be much cleaner and simpler as well.

Major Features

Entity Loaders

The largest change in version 3, hands down, is the new entity loader system. Ranvier no longer locks you down into storing game data in YAML and/or JSON. You are now free to store/load your entities and account/player data in MySQL or Postgres or a CSV or any type of storage system you want. Each entity in the game can be customized to be loaded from a difference source; maybe you want to store game entities in JSON but account/player data in a database. Entity loaders are similar to the TransportStream adapter system released in version 2 which allowed you to customize the networking layer, in that it allows you to write simple adapter classes to customize the data layer.

New Script Structure

Because the core engine is now part of NPM the structure of script files is much simpler.

Before

module.exports = (srcPath) => {
  const Broadcast = require(srcPath + 'Broadcast');
  const Logger = require(srcPath + 'Logger');

  return { /* some object */ };
};

After

const { Broadcast, Logger } = require('ranvier');

module.exports = { /* some object */ };

For backwards compatibility the old format is still supported.

Room coordinates

Rooms in Ranvier now support having an optional 3D coordinate. This allows you to have areas in Euclidian space. The coordinates for a room are local to its area, rather than global to the entire game. This allows for builders of different areas to freely layout their area without having to worry about conflicts. You are still free to link any room to any other directly by id with an arbitrary exit name for maximum flexibility.

Attributes overhaul

Ranvier now supports computed attributes. From the very basic stats such as "mana is intelligence * 10" to the very complex "armor is the (greater of strength * 2 or dex * 2) + a racial bonus". The new system also allows for nested computed property, i.e., a computed property that relies on a computed property. This also allows for having percentage based bonuses.

Quest system overhaul

Quests no longer require builders to write code to create quests. The new system allows for builders to compose configurable Goal and Reward types created by coders to create exactly the workflow and rewards they want for the player.

Scriptable Areas

Areas, now joining the rest of the entities in the game, can have behaviors and/or a script. As part of this the core engine no longer has any concept of respawn. This has been moved under the control of bundles. This allows you to write the respawn system you want, even having different areas use different techniques.

Scriptable Channels

You can now hook into the usage of channels as well as the output of channels in your scripts.

Ranvier 2.0

17 Aug 00:57
Compare
Choose a tag to compare

Big Changes (Core)

Complete rewrite of the network layer

The network layer of Ranvier has been scrapped and rebuilt: the Ranvier game engine is no longer specifically a MUD
engine. Out of the box it still defaults to being a Diku-like MUD but the engine can now also be used to make any
kind of multiplayer RPG since the network layer is now controlled by the bundles as well.

Their are two new example bundles provided:

  • ranvier-telnet (enabled by default) which will act exactly as Ranvier 1.0 does: a server allowing telnet connections.
  • ranvier-websocket (off by default) which will enable websocket connections, to be used with the websocket client
    also created for Ranvier 2.0: Neuro (details below)

Note it is entirely possible to have both telnet and websocket enabled at the same time; the system was designed with
having multiple transport types enabled at once (See Extending/Server in the docs.) With the network layer rewrite it's
now possible to use Ranvier as a generalized RPG game engine instead of only for a MUD which I find very exciting.

Attributes

Nearly of the opinionated code surrounding attributes in the core was removed. I originally had it there to act as an
example but in reality it seems to have just confused people. Instead the base attributes for players are now defined
in the bundles: in the example case inside of the ranvier-input-events bundle's finish-player script.

This gives a lot more flexibility to let you create the game you want without having to modify the core.

Channels

Channels now support having a required role to use the channel. Coinciding with that addition there is a new
ChannelAudience to use for your channel: RoleAudience that will restrict the receipients to players with a given
role or above, e.g., admin only channels.

Lockable Doors/Items

Rooms can now have lockable doors and contains can be closed/locked. See the Room documentation on the main website for
more detail.

Documentation

There are now generated jsdoc docs available at: ranviermud.com/jsdoc/. Personally I
find grepping the code easier but to each their own.

Neuro

Neuro is a websocket client meant to act as a base for you to develop a custom web or desktop client for your MUD. As
with Ranvier it comes pre-built with some common examples you might want in a client. It is built with Electron and
Polymer both of which I consider the simplest, fastest way to build out a web or desktop application. Though it is
in electron you can use it as a web client simply by pointing your web server to the repo and render the index.html.

Here is a look at what Ranvier + Neuro looks like:

https://gfycat.com/SociablePlasticGander

Features out of the box

  • Player HUD for health/mana/etc.
  • Active effect list
  • Quest list
  • Persistent options for font size/select last command
  • Target health frames with support for multiple targets
  • Command history
  • System menu bar for hiding/showing quests and effects
  • Draggable windows (Just add Neuro.DraggableBehavior to any element)
  • Auto-linking urls

Big Changes (Bundles)

  • There is a new scriptable event: server-events This is the bundle type that ranvier-telnet and ranvier-websocket
    are built on. These events let you hook into the startup and shutdown of the game server executable itself to do
    whatever you like: start a network server, start a web server, do data stuffs, whatever you want.
  • Included Example Bundle Updates
    • ranvier-combat got a complete overhaul. It now allows for NPCs to fight without a player being involved.
    • ranvier-npc-behaviors: This is a new example bundle providing well... example NPC behaviors.
      • ranvier-wander: Behavior for letting an NPC wander around the game optionally restricting it to certain rooms or
        an area.
      • ranvier-aggro: Make an NPC aggressive to other players or other NPCs. Limit the NPC aggro list to specific NPCs
        and you now have NPC faction combat.
      • ranvier-sentient: conversational AI enabled by API.AI. Want to have an RP-based shopkeeper:
        use the ranvier-sentient behavior and your players can speak to the NPC naturally: "What's for sale?"/"What've
        you got?"/etc. to see their item list instead of typing shop list. This was really fun to implement. The bundle
        comes with a sample API.AI configuration that you can import into the service.
    • ranvier-quests: The formerly opinionated rendering of quest progress in the core has been moved into a bundle so
      you can customize how quest progress is displayed to the player without having to modify the core.
    • ranvier-commands: There are a number of new commands
      • Rooms and containers can now have lockable doors so open/close/lock/unlock were added.
      • New bug command to report issues to admins

There are many other bugfixes not listed here and I want to thank all the contributors who submitted issues or went above
and beyond and event fixed bugs. I am so thankful for the other developers contributing to this project in any way they
can: submitting bugs, suggesting changes, adding features, or just explaining the game they want to make, all of it
is welcome.

v1.1.0

23 Jun 20:52
Compare
Choose a tag to compare

New Features

  • Skills now support multiple resources costs (#218)
  • Effects can now be marked non-persistent so they are lost on logout

Default Bundle Additions

  • New Paladin class
  • Crafting with gathering of resources.
  • Updates to prompts/classes to allow classes to have their own resources (Warrior has Energy, Paladin has Favor, etc.)
  • Add 'speak' effect for NPCs to say multiple phrases over time
  • New teleport debug command
  • Rooms can now have room-specific context commands via the 'commands' behavior.
    • See example in bundles/ranvier-areas/areas/limbo/rooms.yml: Room Context Commands with its corresponding script 10-context.js

Full change list

6429323 Fix rat not being able to use skill from its script
ce501be Round overall goal percent that is displayed to avoid long repeating numbers. (#221)
29305be Proxy room events (#220)
4cccb15 Check inventory then equipment for containers after checking room. (#209)
be06ab3 Fix rat script to compensate for changes to multi resource costs (#219)
ae2a57d Multi resource costs (#218)
2a2a492 Doc edits (#217)
2cfa432 Fix bug with Windows not being able to run because of symlinks
616c8eb fix bug with crafted items not being hydrated
aa18ba7 fixes #207 move choose-class up the event chain
1dbc515 Return out of command to disallow quitting during a fight. (#208)
c46f310 Use RoomBehaviorManager within the Room class (#205)
6d489e3 Fix getting the starting room from RoomManager (#203)
2dd690c Add Paladin's Smite skill
d478f54 Whoops, actually correct skill cost fix
c958ea9 Fix FetchQuest removing all instances of target item on completion instead of just the amount they care about
7e2b580 Don't make skills deduct resource cost if skill exits
544a314 Add Paladin's Plea of Light skill
d90a850 Add 'speak' effect for NPCs to say multiple phrases over time
da62962 Allow for non-persisted effects
9b4c886 Add teleport command to debug-commands bundle (#201)
8695f9b Lower damage of Judge
56dd2fb Fix bug with trying to complete a quest you're not on throwing an error
893ee1f Make FetchGoal check player's inventory on start
d336b86 Change Favor to be a resource that drains over time
229ead3 Fix armor reducing incoming heals...
b4d03ed Add Paladin class with Judge skill
bfa3e3a Fix bug in group invite
c09d06f Fix node error when trying to remove invalid equipment
ad20cb0 Fix bug with effects that modify outgoing damage
1f407f0 Fix lootable behavior not hydrating dropped items
c2480a5 Show mana for mages on score
fed4caf Mages use mana
35cb8f7 Have warrior class implement example of giving player a special resource
5a63d95 Make prompt renderer more flexible, allow more character attributes than those specified in base
545677e Send a message to the new room when a player enters (#202)
c00d105 Whoops, broken things that were using renderItem without hydrating the item
af8cfe4 Fix issue with behavior config being shared between item instances
f865ac9 Fix version # in motd
79d6675 closes #199 Add credits/license doc and credits command
1f0e5dc closes #200 add helpfile for craft, move quest helpfile
c755b8a Fix error when listing items in shops
c4a42e4 Add crafting to feature list
c272c7b Document crafting
6bd48b0 Implement 'craft create'
5816d82 Implement 'craft list'
c24586c Small refactor of resource rendering into Crafting class
63770b2 Implement resources command
306ae13 Implement gather command
7ecdbeb Allow room-specific commands to have arguments
b4e5cd6 Implement feature in ranvier bundle allowing for room-specific commands
d890153 Wait to remove item from inventory until after checking for an open slot. (#197)
5dd235e Fix compass now showing up/down

v1.0.0 - Took a while but here it is

13 Mar 04:49
Compare
Choose a tag to compare

v1.0.0 - March 13, 2017

After a lot of work Ranvier is now at 1.0. It's at a point where you could actually build a playable MUD with it. The core now supports every feature I can think of a MUD wanting and the default bundles have example implementations of most of them. Things like clans or crafting can all be implemented without having to modify the core code at all.

v0.4.1 - The Revisit

09 Jan 08:10
Compare
Choose a tag to compare
v0.4.1 - The Revisit Pre-release
Pre-release

v0.4.1 - The Revisit - Jan 9, 2017

Ranvier has been almost completely been rewritten from the bottom up. Not all of its old features are there but they will be back soon. The most important changes are as follows:

What's Changed?

  • Localization is gone. I really wanted this to work but every fork I saw just ignored it and used 'en'. It also complicated a lot of the engine so it's gone.
  • Damn-near everything is in a bundle. Documentation will be on the wiki soon. Any of the old folders that weren't src/ but held game data like entities/ or behaviors/ are now bundle-able. So you could write a set of commands and create a bundles/my-bundle/commands/awesome-command.js and share it with someone else and it will be 100% compatible. Even if you both use two completely different command parsers
  • Areas are now really areas. Before an "area" was only rooms. All vnums were shared across all rooms, items, and npcs. Now "areas" are actually groupings of items, npcs, and rooms and the vnums are only unique to the area.
  • Commands, events, channels, anything that was in a script file before is now much easier to write due to the new GameState object.
  • The old telnet library was scrapped and rewritten from scratch. It's much less wonky and commands no longer have to do stupid stuff like check to make sure data isn't accidentally telnet control characters

What does this mean going forward

The following is implemented in brand new code and is in a much less shitty state than it was when originally written.

  • Command Interpreter
  • Input events (login, character creation, actual command input itself)
  • Items
  • Rooms
  • Npcs
  • Commands
  • Channels
  • Players
  • The data layer
  • The distribution of items/npcs within an area

What's new

  • Accounts - Players are now account based
  • Channels - There were channels before but it's been completely rewritten in a much more usable structure
  • Bundles (as described above)
  • Real areas
  • Helpfiles - The structure of these might change so this is tentatively in place
  • Our sweet new logo and website

What isn't done yet, but will be soon

  • Custom events for Player, npc, item, and room aren't re-implemented yet but are the next item on the list
  • Containers
  • Effects
  • Leveling
  • Skills
  • Combat
  • Plugins - The only plugin I know of was written my me, so plugins are on the back burner for the time being. Plugins were scripts you could attach to the game that would have access to all the game data but weren't actually related to the game itself (e.g., the web-based builder I scrapped)

This list essentially reads "You know, the game part of the game" but having the core on a solid foundation now makes it a lot easier to implement these features in a maintainable way