Python Mud (2): eerste opzet driver en mudlib

Monday 05 March 2012, 22:14:00 | mud / i.f.

Vorige edities:

  1. Soul Emotes →Python Mud (1): Soul emotes

Wat meer werk gedaan aan de mud. Er is nu een soort van game 'driver' die de mudlib inleest, en een mainloop bevat voor invoer, verwerking en uitvoer.

Het is nog single-player en de code is nog rommelig (hardcoded commando's en zo) maar er zit wel een soort van vorm in die geschikt zou kunnen zijn voor een multiplayer input/process/output loop. De driver gebruikt de player/room/target messages uit de soul parser om de juiste tekst output te verdelen over de aanwezigen in een locatie (maar omdat het single-player is zie je op dit moment alleen nog maar de tekst die voor de speler zelf bedoeld is). Er zitten nog wat print-statements in, maar de meeste tekst output voor het scherm van de speler gaat nu al via een intern buffer i.p.v. rechstreeks naar het scherm. De driver leest dit buffer uit en kan het dan versturen waar het heen moet als hij daar aan toe is. Op dit moment alleen nog maar stdout naar het scherm, maar het is op deze manier later eenvoudig om te leiden naar de verbinding van elke speler.

De mudlib begint ook een beetje vorm te krijgen. Je kunt 'locations' (rooms) maken met beschrijving, 'exits' naar andere locations, en items en npc's bepalen die er in staan. Ik heb een soort van object hiƫrarchie bedacht (bv Living->Npc->Player) maar die staat nog een beetje in de kinderschoenen, wellicht later meer daarover. Er is een lijst van 'races' met een handvol 'stats' (overgenomen uit de Dark Souls mudlib) die je kunt toekennen aan een Living. Anders dan ze op het scherm kunnen printen met het 'stats' commando wordt er nog niks mee gedaan.

Voor de volgende versie ben ik van plan om iets te doen aan:

En voor nog later moet er een ontkoppeling komen van de input/process/output loop: het moet een 'driver heartbeat' loop worden die event-gestuurd is. Gezien het beperkte aantal gelijktijdige connecties zou alle parallelle processen best via threads gedaan kunnen worden, maar het lijkt me leuk om dat juist niet te doen en deze keer eindelijk een keer iets met coroutines of misschien zelfs greenlets te gaan doen. (elke NPC en speler in een eigen greenlet). We zien wel.

Een eerste sessie met een simpel aangemaakt karakter volgt hieronder...:

C:\Python27\python.exe E:/projects/Mud/driver.py

Welcome to 'Snakepit'.
Create default (w)izard, default (p)layer, (c)ustom player? c
Name? irmen
Gender m/f/n? m
Player races: dwarf, half-orc, halfling, elf, human, half-elf, orc
Race? half-elf
Wizard y/n? n

Welcome, Irmen.

  ___              _          ___  _  _
 / __| _ _   __ _ | |__ ___  | _ \(_)| |_
 \__ \| ' \ / _` || / // -_) |  _/| ||  _|  by Irmen de Jong
 |___/|_||_|\__,_||_\_\\___| |_|  |_| \__|  irmen@razorvine.net


[Essglen Town square]
The old town square of Essglen. It is not much really, and narrow
streets quickly lead away from the small fountain in the center.
A long straight lane leads north towards the horizon.
Laish the town crier, blubbering idiot, and rat are here.

>> stats
Irmen (irmen) - male half-elf player
Human sized humanoid, speaks Edhellen, weighs ~60.0 kg.
agi:30, cha:30, int:30, lck:30, spd:60, sta:30, str:15, wis:30

>> wave all but rat and me
You wave happily at Laish the town crier and blubbering idiot.

>> fear idiot
You fear blubbering idiot.

>> recoil idiot
You recoil with fear from blubbering idiot.

>> exa idiot
blubbering idiot.
This person's engine is running but there is nobody behind the wheel.
He is a few beers short of a six-pack. Three ice bricks shy of an igloo.
Not the sharpest knife in the drawer. Anyway you get the idea: it's an idiot.

>> chuckle sadis
You chuckle sadistically.

>> fail recoil rat
You try to recoil with fear from rat, but fail miserably.

>> look
[Essglen Town square]
The old town square of Essglen. It is not much really, and narrow
streets quickly lead away from the small fountain in the center.
A long straight lane leads north towards the horizon.
Laish the town crier, blubbering idiot, and rat are here.

>> ?
* Builtin commands: l/look, exa/examine, stats, quit.
* Help: ?/help with optional topic ('soul' for soul verb list).
* No further help available yet.

>> quit