Installation using SWI-Prolog 7.1 or later:

?- pack_install('').

?- pack_install('').

A Prolog based MUD

Like "Hello world" that must be implemented in every language, a playable MUD server should also exist! (MUD servers examples are: LambdaMOO, DikuMUD, PerlMUD, CircleMUD.. etc)

However, for the Prolog language this is even more vital. Here in 2014, no one has created one?!

After doing the Nani-World tutorial at the AMZI-Prolog website students are excited by how simple it was. And for very little extra programming the program become better and better. They might go on to imagining if it was not simply a tutorial but a real game. Played with many people characters at once. That is what this project is about among other things. See what is meant by this at

What is it really?

It turns out that being a MUD keeps a sane description of the minimized version of the code. But really it is an application framework (much the way Tomcat is a web application hosting framework). Some games (PrologMUD is no different) end up becoming miniature operating systems with 1000s of moving pieces and the type of problems/solutions being worked on in the layers of the game involve very different methodologies; Take a game like Doom II with Pathfinding, physics, image asset delivery to networked clients, mini-C interpreter for AI and rockets powered weapons, 3D rendering, Client networking to stay in sync, AAS (Area Awareness System) etc etc etc. PrologMUD has all of these (except 2D rendering in place of 3D rendering) plus natural language understanding, theorem prover, behaviour planner, neural simulator, STRIPS, CYC, CG-KIF and a crap-load of other acronyms.

10% code is Process management and client networking 10% is the Object Orientation smoothing layer (isa/genls hierarchy)

What does playing it look like?

A text adventure game from the 1980s

Why is it over 400,000 lines of code?

First off, the author only had to write 100k lines to get it "bootstrapped" The rest is data and modules created over the last 30 years by research projects in the areas of artificial intelligence. etc Initial version was only 1000 lines of code.

Why is it in Prolog and not LISP or C++?

Prolog is required programming language at all 4 year universities (though most students only get 2 weeks to learn it! .. in which even then it is marginalized by the professor.. since really 2 weeks isn't long enough) PrologMUD would been OK in LISP but propositional resolution is a type of calculation PrologMUD does most often and in LISP that ends up 10x slower when compared to a Prolog-in-C native unifier.

Prolog files

pack.plShow source
prolog/prologmud/actions/actions_conf.pfc.plShow source
prolog/prologmud/actions/actions_db.pfc.plShow source
prolog/prologmud/actions/any.pfc.plShow source
prolog/prologmud/actions/as_agent.pfc.plShow source
prolog/prologmud/actions/attack.pfc.plShow source
prolog/prologmud/actions/chat.pfc.plShow source
prolog/prologmud/actions/climb.pfc.plShow source
prolog/prologmud/actions/create.pfc.plShow source
prolog/prologmud/actions/drink.pfc.plShow source
prolog/prologmud/actions/drop.pfc.plShow source
prolog/prologmud/actions/eat.pfc.plShow source
prolog/prologmud/actions/get_set.pfc.plShow source
prolog/prologmud/actions/help.pfc.plShow source
prolog/prologmud/actions/inventory.pfc.plShow source
prolog/prologmud/actions/kiss.pfc.plShow source
prolog/prologmud/actions/logon.pfc.plShow source
prolog/prologmud/actions/look.pfc.plShow source
prolog/prologmud/actions/move.pfc.plShow source
prolog/prologmud/actions/planner.pfc.plShow source
prolog/prologmud/actions/push.pfc.plShow source
prolog/prologmud/actions/put_at.pfc.plShow source
prolog/prologmud/actions/scansrc.pfc.plShow source
prolog/prologmud/actions/showdebug.pfc.plShow source
prolog/prologmud/actions/sit.pfc.plShow source
prolog/prologmud/actions/stats.pfc.plShow source
prolog/prologmud/actions/take.pfc.plShow source
prolog/prologmud/actions/teleport.pfc.plShow source
prolog/prologmud/actions/use.pfc.plShow source
prolog/prologmud/actions/where.pfc.plShow source
prolog/prologmud/mobs/affordance/improve.pfc.plShow source
prolog/prologmud/mobs/affordance/simbots.pfc.plShow source
prolog/prologmud/mobs/explorer.pfc.plShow source
prolog/prologmud/mobs/mobs_conf.pfc.plShow source
prolog/prologmud/mobs/monster.pfc.plShow source
prolog/prologmud/mobs/pddl_agent.pfc.plShow source
prolog/prologmud/mobs/predator.pfc.plShow source
prolog/prologmud/mobs/prey.pfc.plShow source
prolog/prologmud/mobs/vacuum.pfc.plShow source
prolog/prologmud/mud_builtin.pfc.plShow source
prolog/prologmud/mud_footer.plShow source
prolog/prologmud/mud_header.plShow source
prolog/prologmud/mud_loader.plShow source
prolog/prologmud/mud_startup.plShow source
prolog/prologmud/objs/basic_objs.pfc.plShow source
prolog/prologmud/parsing/parser_imperative.plShow source
prolog/prologmud/parsing/simple_decl_parser.plShow source
prolog/prologmud/server/mud_http_hmud.plShow source
prolog/prologmud/server/mud_irc.plShow source
prolog/prologmud/server/mud_telnet.plShow source
prolog/prologmud/server/mud_testing.plShow source
prolog/prologmud/vworld/world.pfc.plShow source
prolog/prologmud/vworld/world_2d.pfc.plShow source
prolog/prologmud/vworld/world_agent.pfc.plShow source
prolog/prologmud/vworld/world_effects.pfc.plShow source
prolog/prologmud/vworld/world_events.pfc.plShow source
prolog/prologmud/vworld/world_npc.pfc.plShow source
prolog/prologmud/vworld/world_text.pfc.plShow source
prolog/prologmud/vworld/world_text_output.pfc.plShow source
prolog/prologmud_web/src_webui/cliopatria_binding.plShow source
prolog/prologmud_web/src_webui/http/user_page.plShow source
prolog/prologmud_web/src_webui/launchcliopatria.plShow source
prolog/prologmud_web/src_webui/model/substance.plShow source
substance/1Term is a partially bound term, used to interrogate state of the MUD.Source
prolog/prologmud_web/src_webui/mudconsole/mudconsole.plShow source
mc_ask/2Ask a question.Source
mc_ask/4Ask a question.Source
mc_error_area/2Create an output area for errors and warnings.Source
mc_form_area/3Create a form-area.Source
mc_format/2Formats a string (like fmt/3) to the web console.Source
mc_format/3Formats a string (like fmt/3) to the web console.Source
mc_format/4Formats a string (like fmt/3) to the web console.Source
mc_html/1Adds an HTML element to the output area.Source
mc_html/2Adds an HTML element to the output area.Source
mc_html/3Adds an HTML element to the output area.Source
mc_output_area/3Creates a mudconsole div element.Source
mc_start/0Start the mudconsole.Source
mc_start/1Start the mudconsole.Source
prolog/prologmud_web/src_webui/mudconsole/mudconsolestart.plShow source
prolog/prologmud_web/src_webui/testwebconsole.plShow source
age/1Ask the user how old s/he is.Source
flag_table/0Show a table with all Prolog flags.Source
t/sanity_tests.plShow source