Reset Password
Existing players used to logging in with their character name and moo password must signup for a website account.
- tomwar 1s
- SacredWest 15m
- Baguette 7s waow
- QueenZombean 0s
- spungkbubble 1m
- notloose 12m
- zxq 1m
- Napoleon 1h
a Mench 6h Doing a bit of everything.
And 22 more hiding and/or disguised
Connect to Sindome @ moo.sindome.org:5555 or just Play Now

Moo Coding
Testing the waters...

I just decided to play around with moo coding. I have no idea how far I'll get with this as I am not a good programmer and I tend to get bored easily but I figured it would be fun just to check things out. I also thought I would document my progress here. On one hand this will allow those in the know to give me pointers if they feel like it and and on the other it might allow others interested in giving this a go to learn from my blunders.
Setting up my test environment:

I am doing this all on my laptop that runs Linux (Arch + Minimal GUI).

The first thing I wanted to do was set up a little playground for myself. I was inspired to do this a few days ago when reading a town hall manuscript. (http://www.sindome.org/town-hall-01-14-17-raw-log.html)

Towards the end Nyron and Fengshui provide a few links and suggest one install a mood if one is interested in doing some code work.

The links provides are:

Fengshui: http://sindo.me/m6ntf7

Nyron: http://sindo.me/mjhgyy

These links both seem to be guides on coding LambdaMoo. I have started with Fengshui's for nor particular reason.

The first thing I did was clone the LambdaMoo repo Fengshui pointed to (Repo Location: https://github.com/wrog/lambdamoo).

Once on my system I read through the README and it turns out that building the moo is not hard at all. (I already had common dev tools installed [base-devel in arch]).

This included three steps for me (all in the lambdamoo directory where I cloned the lambdamoo source too from github):

1. I ran 'sh configure'

2. I edited options.h (nothing needed changed on my end so far)

3. I ran 'make'

And so the mo server was born!

Having read a little ahead in Fengshui's doc I decided to download the lambdacore database from the location he provided (http://lambda.moo.mud.org/pub/MOO/). I wasn't sure which database was best so I took LambdaCore-latest.dp. I put this into the lambdamoo directory. It looks like there is already a minimal.db that comes with the lambdamoo cource but Fengshui's doc suggests that there are programs in the lambdacore database that are useful but not present in the minimal database that comes with the source.

With the server built and the lambdacore database present it was time to start the moo. The lambdamoo README suggests you use the restart script as it does some nice database management stuff before running. It turns out, however, that this script is set to be executed by a c-shell and I only had bash available. I did not care to try and see if I could get the script working on bash (the scripting syntax can be very different I think) so I just installed tcsh on my arch maching and the script ran fine and started the moo.

Then I simply telneted to localhost on port 7777 and I was in my own lambdamoo - complete with one room!

I like this so far! I'll be keeping an eye on it.
The last thing I programmed was in Basic, to be run on a Commodore 64, so keeping up will probably be challenging. I'm interested in seeing how it goes for you, though.
Still not a a point where I am doing any actual coding but I did discover a few other things regarding installing and starting lambdamoo on Linux.

The first is that, though it is unmentioned in the README, there is a bourne-shell compatible version of the 'restart' script called 'restart.sh'. No need to install a c-shell.

However, the script tries to compress a copy of the old database file using the 'compress' command which was not on my system. I did a little research and this seems to be an older program and it ended up being easier to update 'restart.sh' to use gzip than finding and installing compress.

Training Videos by the Slither Man:

MOO Programming #1: The Basics of Lambda MOO Programming

MOO Programming #2: Make your Own Debugger

MOO Programming #3: Intro to Properties on Objects 1/3

MOO Programming #4: Properties on Objects Cont'd 2/3

MOO Programming #5: Properties on Objects Concluded 3/3

MOO Programming #6: Extending the MOO with Custom Verbs

Those six videos are a good intro to start hacking on objects.

I don't have a video for this, but a bit of advice once you're ready to start programming an environment ("game" or other type of environment) full of stuff is to program verbs and set properties on a generic object, and then create children of that object to put into the game world.

It's a little bit like prorotypes in Javascript, or a little bit like an abstract class in any object-oriented language, except that MOO doesn't have classes or prototypes. But you can make an object which you decide is a generic for all of the ones you'll put into your MOO world.

Thanks for the links Johnny. I'll look through them!

I was already thinking about this too Linekin. I was thinking about how in Java (something I haven't seriously touched in over six years) you have a class and you create objects from it. So I might have a weapon class with a gun descendant with a pistol descendant with a Beretta 9mm descendant. From then on I would create individual Beretta 9mm objects using the class.

I noticed that lambdamood did not seem to have classes, just objects. Which made me wonder how people go about organizing their objects and if they created object templates or something. Looking forward to learning more.

So, I ended op reading a few sections of the documentation Fengshui provided and It seems more like a solid reference doc that a tutorial. Nyron's link is more of a tutorial though. I have a hard time wading through log texts that define specs (though I love having them for reference) so I have switched over to Nyron's doc for now.

The problem is that Nyron's doc assumes you are doing work on already up and running lambdamoo and you just need a wizard (a lambdamoo superuser I think) to make your user a programmer. The default LambdaCore.db has a wizard account and I can use it to do anything I want but Fengshui's doc suggests it is better to avoid using the wizard account as much as possible.

To fix this I created a new user and then had my wizard account make it a programmer (just ran the @programmer command).

It turns out that this has two benefits. For now I am constantly logged into my programmer account (where I am doing the actual work) and the wizard. This way I can see how things look from multiple perspectives. I am betting that later on I will probably want to be logged into three or more characters so I can things from every angle.

Now that I have begin working on objects (a pet rock) following the tutorial provided by Nyron, I have noticed something interesting. From what I can see it looks like the lambdamoo server (a C program) does two main things. The first is provide obvious: it listens for connections and talks with whatever client one connects with - taking commands and providing output. The second part is acting like an interpreter. It runs the programs kind of like python, perl or bash. It is like a networked, interactive interpreter with lots of permissions.
Also of note is that it looks like the moo stores all programs in the database. In fact, many of them seem to be a part of various objects (probably all given that there seems to be some kind of master object). This means that a moo dev needs o extra access to do their work (just a character with the right permissions). It also means that what separates one lambdamoo game from another is probably entirely contained within the database. I would bet that most lambdamoos run unmodified servers but highly modified databases.

This is all just suspicion at this point...

Suspicions 100% correct :) You've got this.
Actually, the interpreter runs at program time, not at run time. You'll be prompted and won't be able to save your program if there are errors.

There is a compiler.

I'm not too clear on exactly when your program is compiled: Maybe at startup time, maybe at the time the program (or edits to it) are saved in the database of a running MOO, maybe both.

LambdaMOO database have source code. Source code compiled when verb run.

Say here: Anatomy of a LambdaMOO db file

For hacking around and learning, the LambdaCore Wizard account is fine. What I refer to in the doc you mentioned is that when working on a MOO like Sindome, using Wizard accounts as a new programmer is a bad idea as you can mess the MOO up. So for hacking around like you're doing, don't sweat it. Eventually though, you should have classes of developers/programmers with access to only what they need.

Love this thread!

I just watched Slither's videos on building lambdamoo and using the LambdaCore database. I wanted to be sure I wasn't too far off and I am happy to say that I was pretty much on track. The videos were really good too and I would recommend the to anyone who might be interested in installing lambdamoo for use as a personal playground.
Alright. After 4-6 hours of working at this I have:

- Installed lambdamoo with LambdaCore

- Created a pet rock

- Created a simple timer.

I have to say that based on this limited experience I am INCREDIBLY at where Sindome is today. All the time and effort if must have taken to get all the rooms, weapons, Armour, NPCs, electronics and so much more in place is just plain mind boggling.

All of you who have contributed to this game: You are awesome.

I'm not done yet. Next items on my list:

- Try and move my moo to a PI so I can remotely access it from anywhere. (I'm too cheap to pay for AWS).

- Watch Slither's videos.

- Start building my house in the moo.

The thing that bugs me most so far is having to edit and view all this in-moo. I miss editing source files using VIM/Geany/Whatever. I am curious how other people deal with this. Do most of you write everything up in a text editor and copy-paste it over? Do you just do everything in-moo? Something else entirely?

Good coder uses tools feels pain.

Better coder creates tools make pain go away.

@Grey0

@edit-options +local

That command will make edit pop open a text window so you can do all your editing offline. Then I just use sublime (with moo syntax highlighting) and paste it in there.

Awesome! Thanks for the tip aglidden. I look forward to trying this out soon.
If you're on Windows, get VMoo, it does client-side editing using that @edit-option. It's how we code and edit all sorts of things with the webclient too.

There is an older public fork of the webclient available here:

https://github.com/JavaChilly/dome-client.js

We need to update it with a stripped down version of what you all play with, pick up the bug fixes and improvements. (We take out all the SD specific bits)

I am only have/use Linux and BSD systems. Thanks for the suggestion though!

Do you mean an equivalent of LambdaCore.db? I had thought about suggesting a SindomeCore.db. It would be nice to see some of the scaffolding behind Sindome. Slither mentioned in one of his videos that there are some convenient additions the he uses when working on Sindome in one of his videos.

According to @mooinfo they use Custom ANSI; File I/O; XML; HTTP I/O and have a staggering 55473 database objects.
No, Johnny wasn't referring to a sanitized copy of the Sindome MOO database, he was referring to a genericized copy of the Sindome webclient application, which runs on a Node.js server.
Got it. I'll have to look into vmoo and the web client. Might even be able to run vmoo with wine.
Use Docker and docker-compose. One for server, one for VMOO/Wine. Less gray hair that way.
Pre-made docker images for fast start anyone can do LambdaMOO.

Step by step:

1. Install Docker (Windows, Linux, Mac OK!)

2. Go to command line.

3. mkdir data

4. docker run -p 8888:8888 -v data:/data toddsundsted/lambdamoo:1.8.1

5. telnet localhost 8888

No other steps!

Wine with docker also very easy!

http://alesnosek.com/blog/2015/07/04/running-wine-within-docker/

Step by step:

1. Install Docker. (Linux only)

2. docker run --rm wine1.4 wine "C:\windows\system32\notepad.exe"

So easy!