Geschreven door: Timo Krul (mrfan@dds.nl).
Laatste wijzigingen: Mei'95.
Een MOO is het best te beschrijven als een text-georiënteerde, virtuele (=niet reële) ruimte waar meerdere gebruikers op dezelfde tijd gebruik van kunnen maken. Het doet een beetje denken aan de oude tekst-adventures. (Misschien ken je Zork nog wel? HET spel van begin jaren '80 :)
Een groot verschil met een tekst-adventure is, dat een MOO nooit zal eindigen. Je kunt dus ook geen punten halen. Ook puzzeltjes oplossen gaat wat moeilijker in een MOO. Zoals je bij een tekst-adventure misschien eerst een opblaasboot bij de speelgoedwinkel moest pakken en opblazen met een fietspomp uit de tuinkast om een rivier over te kunnen steken. Bij een MOO gaat zoiets eenmaal niet, want als 1 speler toevallig de fietspomp de hele tijd bij zich blijft dragen, kom jij die rivier natuurlijk nooit meer over.
Zo heb je zelf ook een object-nummer. Tik bijvoorbeeld eens het commando waar in. Je ziet dan alle object-nummers van de aanwezigen in de metro en als bonus ook nog eens het object-nummer van de kamer waar ze uithangen.
Een object kan naast een nummer ook nog een naam hebben. Bijvoorbeeld de barman, De kiosk of een ijsje met chocola. Speciale namen zijn: me of mij (dat ben je altijd zelf) en hier (dit is altijd de kamer waar je je op dat moment in bevindt)
Het principe van object-georiënteerd programmeren is dat een object
kan afstammen van een ander object. Stel bijvoorbeeld dat we het object
stoel hebben. Dit object heeft natuurlijk bepaalde eigenschappen.
Zo kan je dit object zo programmeren dat je er op kan gaan zitten.
Nu kan je weer een nieuw object maken dat afstamt van de stoel,
bijvoorbeeld een metro-zitplaats. Dit object heeft dan dezelfde
eigenschappen als stoel, dus je hoeft niet meer helemaal alles te
schrijven wat je ook bij stoel hebt geprogrammeerd.
Aan de metro-zitplaats
kan je dan weer andere dingen toevoegen die je niet bij de gewone stoel
kwijt kon. (bijvoorbeeld dat je na 2 minuten toch maar weer opstaat, omdat
hij niet lekker zit :).
Uiteraard kan je van de metro-zitplaats weer andere metro-zitplaatsen
laten afstammen (denk aan een bekliederde metro-zitplaats).
Natuurlijk wil je nu meteen al allemaal stoelen gaan maken, maar eigenlijk valt er nog veel meer uit te leggen. Nouja, laten we toch eerst maar eens wat gaan bouwen, anders wordt het zo saai allemaal.
Allereerst moet je weten dat je maar een beperkt aantal dingen kan bouwen. Alles wat je maakt kost ruimte op de DDS-computer, dus houdt daar rekening mee. Als je wilt weten hoeveel objecten je kan maken, tik dan @quota in.
Natuurlijk is het eerste wat we gaan bouwen een eigen ruimte. Dit gaat met het commando @dig (we zitten tenslotte onder de grond :). Vraag ook eens een help op met @help @dig.
Welnu, laten we een eenvoudige werkplaats bouwen:
@dig "De werkplaats van <en dan hier je naam>"
Je krijgt nu het object-nummer van je eigen werkplaats! Maar waar hangt dat ding uit? Zomaar ergens dus. Hij zweeft ergens in cyberspace. Laten we onszelf er maar eens heen transporteren.
Het verplaatsen van objecten doe je met:
@verplaats <object> naar <ander object>
In ons geval wil je jezelf verplaatsen naar je werkplaats, dus doe je:
@verplaats me naar <het object-nummer wat je net terugkreeg>
Als je jezelf wilt verplaatsen kan dit ook korter met het commando ga <object-nummer van de kamer>. Als het goed is ben je nu in je eigen werkplaats beland. Hij heeft geen uitgangen en geen ingangen. Je kunt er dus (voorlopig) alleen nog maar in met het @verplaats of ga commando. Op deze manier kan je eerst werken aan je ruimte en pas als hij af is een in- en uitgang maken, zodat anderen er ook makkelijk in kunnen komen. Het koppelen van je kamer aan een andere ruimte moet natuurlijk wel in overleg gebeuren met de eigenaar van die andere ruimte.
Dat je nu ongestoord kunt werken is niet helemaal waar. Je kamer mag dan wel
geen ingang hebben, anderen kunnen er nog wel in met volg <jouw
naam>. Als je je kamer echt wilt afsluiten doe dan:
@zet hier.free_entry naar 0 (en 1 om hem weer
open te zetten)
Goed, je hebt nu dus je eigen huis (een plek onder de zon.. eh.. grond). Om dat even duidelijk te maken aan de MOO, tik je @thuis in. Elke keer als je dan huis of thuis intikt, kom je in je werkkamer terug.
Awel, je hebt nu wel een werkkamer, maar hij is nog wel heel erg leeg. Wat we gaan doen is eerst even een beschrijving maken.
Het beschrijven van objecten gaat met:
@beschrijf <object-nummer> als "beschrijving van dit
object"
Je weet wat object-nummer van je kamer is, maar je kan ook doen:
@beschrijf hier als "Hier beschrijf je dus hoe je kamer eruit ziet,
wat voor rommel je over de vloer hebt liggen of hoeveel ruiten er nog heel
zijn."
Als je de editor wilt gebruiken, doe dan /he.
Als je kijk intikt of wanneer je de kamer binnenstapt krijg je deze beschrijving te zien.
Ook is het mogelijk om dingen in de kamer te beschrijven, zonder dat het
objecten zijn:
@detail raam is "Het raam staat open."
Als je nu kijk raam intikt, krijg je de beschrijving te zien.
Het nadeel hiervan is dat raam niet als object wordt gezien. Je kunt er
dus niet veel andere dingen mee uitspoken.
Wat je er wel voor leuke dingen mee kan doen is dingen beschrijven die je
niet direct op het eerste gezicht in de kamer kan zien:
@beschrijf hier als "Je ziet hier allemaal
boeken."
@detail boek, boeken is "Het enige boek dat je herkent is de
bijbel."
@detail bijbel is "Er zit een boekenlegger in op pagina
131."
@detail boekenlegger is "De boekenlegger is gewoon een half
bierviltje."
Enzovoorts, enzovoorts...
Enkele handige commando's op dit punt zijn:
Elke keer als we nu iets met dit object willen doen, moeten we z'n volledige
naam intikken. Omdat dit nogal onhandig is, kunnen we dit object ook meerdere
namen geven. Dit kan meteen bij het creëren, door middel van:
@maak $ding genaamd "een teddy-beer":teddy-beer,
teddy
Of als we later nog wat vergeten zijn, door toe te voegen met
@addalias "beer" aan een teddy-beer
Nog mooier is:
@addalias "teddy*beer" aan een teddy-beer
Dit sterretje betekent dat teddy voldoende is om in te tikken, maar dat alle woorden die beginnen met teddy met daarna nog enkele letters van het woord beer ook geldig zijn. Je kunt je beer dus nu ook aanspreken met teddyb, teddybe, teddybee en teddybeer.
Wil je het helemaal erg maken, doe dan:
@addalias "teddy*" aan een teddy-beer
Nu zijn alle woorden die beginnen met teddy geldig. Dus ook teddyberin of zelfs teddyshoarmabroodje, je verzint het maar.
Het weghalen van een alias kan met @rmalias. Zie hiervoor @help @rmalias.
Even wat nuttige tips:
We hebben nu een teddy-beer gemaakt. Alles wat je maakt met
@maak, komt
altijd bij je bezittingen terecht (ja zelfs een olifant van 1000 kg).
Je kan hem in je kamer plaatsen door gebruik te maken van de eigenschap
dat het een $ding is en je hem kan pakken en neerleggen.
Ook kan je gebruik maken van het feit dat het nog steeds een object is:
@verplaats beer naar hier
Een probleem dat je misschien later tegen kan komen is dat je een object in een kamer hebt laten liggen, maar je weet niet meer precies waar. Het commando @verplaats beer naar hier werkt dan niet meer. Dit komt omdat een naam of alias van een object alleen gebruikt kan worden wanneer het object zich bevindt in de kamer waar je op dat moment bent of als je het bij je draagt. Je zult dan echt het object-nummer moeten gebruiken wanneer je er iets mee wilt doen.
Als je niet meer weet wat de nummers zijn van de objecten die je hebt, dan kan je met het commando @audit de hele lijst van jouw creaties opvragen en waar ze zich bevinden.
Met @audit <speler> kan je kijken wat de objecten zijn die
iemand anders heeft gemaakt.
Weet je van te voren waarnaar je op zoek bent dan kan je doen:
@audit <speler> for <object-naam>
Houd er rekening mee dat @verplaats alleen werkt op de objecten die je zelf gemaakt hebt. Maar als je een object dat van jezelf is wilt verplaatsen dan kan dat ook altijd, zelfs al heeft iemand anders het object in zijn bezittingen. Denk dus niet dat wanneer je een object oppakt dat het meteen van jou is: de rechtmatige eigenaar kan altijd @verplaats <object-nummer> naar mij doen!
Experimenteer nu een beetje met je teddy-beer. Geef hem een leuke
beschrijving of misschien ben je hem zat en snij je liever z'n kop af:
@hernoem beer to "een kapotte teddy-beer":teddy-beer, teddy,
beer
Je kan er natuurlijk ook een race-fiets met 20 versnellingen van maken.
Het nadeel van een $ding is, dat iedereen hem kan pakken en meenemen.
Een oplossing hiervoor is het commando @lock. Probeer
bijvoorbeeld:
@lock beer met mij
Nu kan jij hem alleen pakken of neerleggen. In het algemeen is het verstandiger om dingen aan een kamer te locken dan aan een persoon.
Als je er genoeg van hebt (je moet voorzichtig zijn met je quota):
@recycle beer
En de metro gaat door alsof je teddy-beer nooit bestaan heeft.
Let op: dit kost 2 objecten! Namelijk 1 om de kamers te verbinden en 1 voor de
slaapkamer zelf. Je kunt nu naar de slaapkamer door s in te
tikken.
En hoe gaan we terug? Met w natuurlijk! Maar dat werkt
niet!
Inderdaad we moeten vanuit hier ook een uitgang terug maken naar de werkkamer.
Dit gaat op dezelfde manier (stel je wil ook met werkkamer terug komen):
@dig w, werkkamer naar <object-nummer van je werkkamer>
Je had ook in 1 keer deze 2 uitgangen kunnen maken:
@dig s | w, werkkamer naar "De slaapkamer"
Houd er weer rekening mee dat elke verbinding een object kost! Probeer nu zelf eens wat nieuwe lokaties te maken.
Let op: Het is niet mogelijk de letters i, k en l te gebruiken voor uitgangen, omdat deze al een andere functie hebben.
Met @show kan je ook zien van waar het object van afstamt (wie z'n ouders zijn, zie ook @help @parents) en wie de eigenaar is. De eigenaar is degene die het object gemaakt heeft met @maak.
Tenslotte hebben we nog @dump die van alle verbs ook de programs geeft (vraag weer eens wat @help op).
Wat is nu precies een verb (vertaald uit het Engels:
werkwoord)?
Een verb is simpelweg gewoon een stukje programma wat bij het object
hoort. Bijvoorbeeld onze teddy-beer van hierboven was een $ding.
Dit object heeft al wat voorgeprogrameerde verbs zoals pak.
Als je verbs gaat programmeren, dan gebruik je ze in samenhang met het object waar ze bijhoren in de vorm <object>:<verb>. Dus doe bijvoorbeeld @list beer:pak (oef...)
Laten we eens wat programmeren:
@verb beer:knuffel this
We gaan nu zorgen dat er wat op het scherm komt als je knuffel
beer
zegt.
@edit beer:knuffel
Je komt nu in de editor om je programma te schrijven. Om het makkelijk te houden schrijven we een programma van 2 regels, tik in:
player:tell("Je geeft de teddy-beer een lekkere knuffel."); this.location:announce(player.name," knuffelt de teddy-beer!");
Schrijf dit weg en probeer het eens uit met knuffel beer. Vraag ook eens wat help op over de verb commando's. Je kunt er echt heel veel mee!
Het commando kijk op een object voert de verb object:look_self uit en deze laat je zien wat de inhoud van object.description is.
Doe eens @help @property en experimenteer eens wat.
Met @property beer.ogen maak je dus een eigenschap van de
beer.
Je zou kunnen doen @zet beer.ogen naar 2 of @zet beer.ogen naar 1 voor de kapotte teddy-beer. Dit kan je weer in je verbs gebruiken.
Een voorbeeldje:
Geef de beer 4 ogen en voeg toe aan je knuffel verb:
player:tell("Hij kijkt je lief aan met ", this.ogen, " ogen...");
Een speciaal voorbeeld van een property is een message. @messages
beer laat zien wat er gebeurt als je hem oppakt of neerlegt. Messages
zijn properties die eindigen op _msg. Zo heeft de beer bijvoorbeeld een
take_failed_msg. In plaats van @zet, kan je bij messages direct deze
property veranderen met:
@take_failed beer is "Hij is te zwaar!"
Ook bij het verlaten van een kamer kan je de messages veranderen. Als je bijvoorbeeld met s naar de slaapkamer gaat, doe: @messages s.
Tip: Heel veel objecten bevatten van dit soort messages. Er staan er ook een aantal op jezelf! Het veranderen van deze messages maakt het leven in de metro er een stuk leuker op.