15 Commits
0.15 ... master

Author SHA1 Message Date
Olli Graf
b1b4a99dff Item 48 Beschreibung 2022-07-10 16:43:16 +02:00
Olli Graf
183fe11075 letzte Hilfeseiten. 2022-06-30 14:54:40 +02:00
Olli Graf
4a0bfb901d Victorytext 2022-06-21 13:40:29 +02:00
Olli Graf
1b96299edc FileReader
hilfe
2022-06-21 06:17:46 +02:00
Olli Graf
740833541b Henry spricht wieder.
Boxsack ist benutzbar.
2022-06-20 18:00:34 +02:00
Olli Graf
e1bf16aa96 None abgefangen. 2022-06-18 17:25:33 +02:00
Olli Graf
6876dab8df Uhr in der Küche.
unversionierte Dateien
2022-06-18 11:01:26 +02:00
Olli Graf
a986d14fbc fehlende Itembeschreibungen ergänzt. 2022-06-18 10:06:42 +02:00
Olli Graf
2cb7358eca Zuul. 2022-06-15 18:48:13 +02:00
Olli Graf
0240e5f441 Der Diamant wird nach der Maueröffnung aus dem Inventar genommen. 2022-06-14 07:19:21 +02:00
Olli Graf
8bd0897af1 Endgame 2022-06-13 17:56:35 +02:00
Olli Graf
ebdf22f6a6 Diamant und Sockel werden sichtbar. 2022-06-13 14:59:55 +02:00
Olli Graf
7bd3ecaba0 Bis Statuenkopf.
Diamant wird sichtbar.
2022-06-12 16:04:41 +02:00
Olli Graf
0ff17aac13 uto: bis zur Klippe. 2022-06-11 14:08:42 +02:00
Olli Graf
3b848ffb80 Schwimmweste anziehen. 2022-06-10 10:26:41 +02:00
46 changed files with 869 additions and 49 deletions

View File

@@ -120,10 +120,13 @@ class ActionBasics:
return None return None
def personVonRaumNachRaum(self, person, vonRaumId, nachRaumId): def personVonRaumNachRaum(self, person, vonRaumId, nachRaumId):
logging.debug(f'person Von Raum {vonRaumId} nach {nachRaumId}')
vonRaum = self.world.findRaumById(vonRaumId) vonRaum = self.world.findRaumById(vonRaumId)
nachRaum = self.world.findRaumById(nachRaumId) nachRaum = self.world.findRaumById(nachRaumId)
del vonRaum.personen[person.id] if person.id in vonRaum.personen:
del vonRaum.personen[person.id]
nachRaum.personen[person.id] = person nachRaum.personen[person.id] = person
person.raumid = nachRaumId person.raumid = nachRaumId

View File

@@ -2,6 +2,7 @@
import logging import logging
from ActionBasics import ActionBasics from ActionBasics import ActionBasics
import HilfeModul
class ActionModul(ActionBasics): class ActionModul(ActionBasics):
@@ -14,6 +15,8 @@ class ActionModul(ActionBasics):
def __init__(self, world): def __init__(self, world):
super().__init__(world) super().__init__(world)
self.hilfemodul = HilfeModul.HilfeModul(world)
def warte(self): def warte(self):
print('Du wartest') print('Du wartest')
@@ -108,6 +111,9 @@ class ActionModul(ActionBasics):
item.zustand = item.OFFEN item.zustand = item.OFFEN
self.macheItemSichtbar(karte) self.macheItemSichtbar(karte)
self.vanishItem(item) self.vanishItem(item)
elif item.id == self.world.ITEM_KUEHLSCHRANK:
logging.debug('öffne Kühlschrank')
self.world.printText('zuul')
@@ -123,16 +129,36 @@ class ActionModul(ActionBasics):
if item.id ==self.world.ITEM_JACKE: if item.id ==self.world.ITEM_JACKE:
self.setFehler('Also du die Jacke anziehst, findest du einen kleine Schlüssel in der Tasche.') self.setFehler('Also du die Jacke anziehst, findest du einen kleine Schlüssel in der Tasche.')
self.findeTruhenschluessel() self.findeTruhenschluessel()
elif item.id == self.world.ITEM_LEITER: elif self.isItem(item,self.world.ITEM_LEITER):
if(self.world.aktuellerRaum.id == self.world.RAUM_ESSZIMMER): if(self.world.aktuellerRaum.id == self.world.RAUM_ESSZIMMER):
logging.debug(f'aktuellerRaum ist {self.world.aktuellerRaum.id}') logging.debug(f'aktuellerRaum ist {self.world.aktuellerRaum.id}')
self.rauf() self.rauf()
elif item.id == self.world.ITEM_PLANKE: elif self.isItem(item,self.world.ITEM_PLANKE):
if self.isAktuellerRaum(self.world.RAUM_BACH): if self.isAktuellerRaum(self.world.RAUM_BACH):
self.baueBruecke() self.baueBruecke()
self.setFehler('Du legst die Planke über den Bach und es ensteht eine Brücke.') self.setFehler('Du legst die Planke über den Bach und es ensteht eine Brücke.')
else: else:
self.setFehler('Das macht hier keinen Sinn.') self.setFehler('Das macht hier keinen Sinn.')
elif self.isItem(item, self.world.ITEM_SCHWIMMWESTE):
item.zustand = item.ANGEZOGEN
self.setFehler('Du ziehst die Schwimmweste an.')
elif self.isItem(item,self.world.ITEM_DIAMANT):
if self.isAktuellerRaum(self.world.RAUM_MAUER):
geist = self.world.findPersonById(self.world.PERSON_GEIST)
self.world.printText('graböffnung')
self.world.aktuellerRaum.ausgaenge[self.world.SUED] = self.world.RAUM_GRAB
self.personVonRaumNachRaum(geist, geist.raum.id, self.world.RAUM_GRAB)
self.world.printText('victory')
# self.world.aktuellerRaum.personen[self.world.PERSON_GEIST] = geist
self.ausDemInventar(item)
elif self.isItem(item,self.world.ITEM_BOXSACK):
self.schlage(parsedCommand)
else:
self.setFehler('Nichts passiert.')
def about(self):
self.world.printAbout()
def baueBruecke(self): def baueBruecke(self):
@@ -180,6 +206,11 @@ class ActionModul(ActionBasics):
if self.isAktuellerRaum(self.world.RAUM_TUNNEL): if self.isAktuellerRaum(self.world.RAUM_TUNNEL):
self.world.printText(f'raum-{self.world.RAUM_TUNNEL}') self.world.printText(f'raum-{self.world.RAUM_TUNNEL}')
self.world.aktuellerRaum.ausgaenge[self.world.OST] = self.world.RAUM_HAFEN self.world.aktuellerRaum.ausgaenge[self.world.OST] = self.world.RAUM_HAFEN
elif self.isAktuellerRaum(self.world.RAUM_KOPF):
diamant = self.world.findItemById(self.world.ITEM_DIAMANT)
self.macheItemSichtbar(diamant)
def untersuchePerson(self,person): def untersuchePerson(self,person):
@@ -199,6 +230,10 @@ class ActionModul(ActionBasics):
def schlage(self, parsedCommand): def schlage(self, parsedCommand):
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand) item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
if item == None:
self.setFehler('Das sehe ich hier nicht.')
return
if item.id == self.world.ITEM_BOXSACK: if item.id == self.world.ITEM_BOXSACK:
self.setFehler('Der Boxsack sagt: Hmm, hmm?') self.setFehler('Der Boxsack sagt: Hmm, hmm?')
@@ -260,7 +295,6 @@ class ActionModul(ActionBasics):
logging.debug(f'untersuche() suche nach Gegenstand: {parsedCommand.gegenstand}') logging.debug(f'untersuche() suche nach Gegenstand: {parsedCommand.gegenstand}')
if parsedCommand.gegenstand == None: if parsedCommand.gegenstand == None:
self.untersucheAktuellenRaum(parsedCommand) self.untersucheAktuellenRaum(parsedCommand)
return return
item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand) item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand)
@@ -269,6 +303,7 @@ class ActionModul(ActionBasics):
return return
if item != None: if item != None:
logging.debug(f'item.id = {item.id}')
if item.id == self.world.ITEM_PFLANZE: if item.id == self.world.ITEM_PFLANZE:
krug = self.world.findRaumItemById(self.world.ITEM_KRUG) krug = self.world.findRaumItemById(self.world.ITEM_KRUG)
logging.debug(f'mache Gegenstand {krug.name} sichtbar') logging.debug(f'mache Gegenstand {krug.name} sichtbar')
@@ -300,6 +335,16 @@ class ActionModul(ActionBasics):
self.ausDemInventar(item) self.ausDemInventar(item)
elif self.isItem(item,self.world.ITEM_KARTE): elif self.isItem(item,self.world.ITEM_KARTE):
self.world.printKarte() self.world.printKarte()
elif self.isItem(item, self.world.ITEM_KOPF):
self.zeigeItemBeschreibung(item)
diamant = self.world.findItemById(self.world.ITEM_DIAMANT)
self.macheItemSichtbar(diamant)
elif self.isItem(item, self.world.ITEM_MAUER):
self.setFehler('In der Mauer wird ein Sockel sichtbar.')
sockel = self.world.findItemById(self.world.ITEM_SOCKEL)
self.macheItemSichtbar(sockel)
else: else:
self.zeigeItemBeschreibung(item) self.zeigeItemBeschreibung(item)
@@ -313,9 +358,7 @@ class ActionModul(ActionBasics):
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand) item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
if item != None: if item != None:
#alter Code! pass
if item.id == 8:
self.world.stdscr.addstr('Du ziehst den Hebel und es passiert.... nichts!')
else: else:
self.setFehler('Das sehe ich hier nicht.') self.setFehler('Das sehe ich hier nicht.')
@@ -411,9 +454,10 @@ class ActionModul(ActionBasics):
def nimm(self,parsedCommand): def nimm(self,parsedCommand):
logging.debug(f'start nimm() {parsedCommand.gegenstand}')
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand) item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
logging.debug(f'nimm(): item == {item}') logging.debug(f'nimm(): item == {item.name}')
if item != None: if item != None:
if item.imobil: if item.imobil:
text = self.world.msg[item.pickupmsg] text = self.world.msg[item.pickupmsg]
@@ -454,6 +498,21 @@ class ActionModul(ActionBasics):
def spring(self,parsedCommand):
if self.isAktuellerRaum(self.world.RAUM_KLIPPE):
weste = self.world.findItemImInventarById(self.world.ITEM_SCHWIMMWESTE)
logging.debug(f'weste={weste.zustand}')
if weste != None and weste.zustand == weste.ANGEZOGEN:
imwasser = self.world.findRaumById(self.world.RAUM_WASSER)
self.wechsleRaum(imwasser)
else:
self.setFehler('Das Wasser ist viel zu tief, du würdest ertrinken.')
else:
self.setFehler('Hieh-Hüpf')
def sprich(self,parsedCommand): def sprich(self,parsedCommand):
person = self.world.findPersonImAktuellenRaum(parsedCommand.gegenstand) person = self.world.findPersonImAktuellenRaum(parsedCommand.gegenstand)
@@ -463,10 +522,7 @@ class ActionModul(ActionBasics):
self.setFehler(f'{parsedCommand.gegenstand} ist nicht im Raum.') self.setFehler(f'{parsedCommand.gegenstand} ist nicht im Raum.')
def hilfe(self,parsedCommand): def hilfe(self,parsedCommand):
if parsedCommand.gegenstand == 'befehle': self.hilfemodul.hilfe(parsedCommand.gegenstand)
self.world.printBefehle()
else:
self.world.printText('hilfe')
def geheNachItem(self,parsedCommand): def geheNachItem(self,parsedCommand):
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand) item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
@@ -509,6 +565,9 @@ class ActionModul(ActionBasics):
self.geheNach(richtung) self.geheNach(richtung)
elif richtung == 'rauf': elif richtung == 'rauf':
self.rauf() self.rauf()
self.geheNach(richtung)
elif richtung == 'runter':
self.runter()
else: else:
self.geheNachItem(parsedCommand) self.geheNachItem(parsedCommand)
@@ -549,11 +608,14 @@ class ActionModul(ActionBasics):
def entzuende(self,parsedCommand): def entzuende(self,parsedCommand):
logging.debug(f'entzünde {parsedCommand.gegenstand}')
item = self.world.findItemImInventar(parsedCommand.gegenstand) item = self.world.findItemImInventar(parsedCommand.gegenstand)
if item == None: if item == None:
self.setFehler('Das besitzt du nicht.') self.setFehler('Das besitzt du nicht.')
return
logging.debug(f'item={item}')
if self.isItem(item, self.world.ITEM_FACKEL): if self.isItem(item, self.world.ITEM_FACKEL):
self.toggleFackel(item) self.toggleFackel(item)
@@ -577,6 +639,7 @@ class ActionModul(ActionBasics):
logging.debug(f'gefundener Ausgang: {ausgang}') logging.debug(f'gefundener Ausgang: {ausgang}')
if ausgang != None: if ausgang != None:
raum = self.world.sucheRaum(ausgang) raum = self.world.sucheRaum(ausgang)
else: else:
logging.warn('Keine AusgandId gefunde') logging.warn('Keine AusgandId gefunde')
self.setFehler("In diese Richtung gibt's keine Ausgang!") self.setFehler("In diese Richtung gibt's keine Ausgang!")
@@ -607,10 +670,6 @@ class ActionModul(ActionBasics):
def runter(self): def runter(self):
self.geheNach(self.world.RUNTER) self.geheNach(self.world.RUNTER)
def about(self):
print("Tomb Version " + self.world.VERSION)
self.world.waitForCR
def raumaction(self): def raumaction(self):
raumid = self.world.aktuellerRaum.id raumid = self.world.aktuellerRaum.id

13
BewegungsModul.py Normal file
View File

@@ -0,0 +1,13 @@
# Bewegungsmodul - Steuert die Bewegungen aller NPC.
import logging
class BewegungsModul:
def __init__(self, world):
self.world = world
def bewegeNPCS(self):
skip

9
ConfigError.py Normal file
View File

@@ -0,0 +1,9 @@
class ConfigError(Exception):
def __init_(self,message):
self.message = message
super().__init(message)
def __str__(self):
return self.message

29
FileReader.py Normal file
View File

@@ -0,0 +1,29 @@
class FileReader() :
__zeilen__ = []
__dateiname__ = ""
def __init__(self,dateiname):
self.__zeilen__ = []
self.__dateiname__ = dateiname
def lines(self):
with open(self.__dateiname__,"r" ) as file:
for zeile in file:
self.__zeilen__.append(zeile.strip())
return self.__zeilen__
def __str__(self):
return str(self.__zeilen__)
class CsvReader(FileReader):
def __init__(self,dateiname):
super().__init__(dateiname)
def lines(self):
zeilen = super().lines()
liste = []
return [zeile.split() for zeile in zeilen]
# for zeile in zeilen:
# liste.append(zeile.split(","))
# return liste

77
HilfeModul.py Normal file
View File

@@ -0,0 +1,77 @@
import logging
import FileReader
from os.path import exists
class HilfeModul():
def isBlank(self,str):
if str != None and len(str.strip()) == 0:
return True
return False
def __init__(self, world):
self.world = world
self.check()
def readTxt(self, datei):
logging.debug(f'öffne Hilfedatei {datei}')
reader = FileReader.FileReader(datei)
lines = reader.lines()
reader = None
# reader.close()
return lines
def check(self):
for id in self.world.befehle:
befehl = self.world.befehle[id]
helptxt = self.baueHilfedatei(befehl.key)
logging.debug(f'suche Hilfedatei {helptxt}')
if not exists(helptxt):
logging.warn(f'Hilfedatei {helptxt} existiert nicht')
def hilfe(self, command):
generalHelp = True
if not self.isBlank(command):
helptxt = self.findHilfetext(command)
logging.debug(f'Hilfetext: {helptxt}')
if helptxt != None:
lines = self.readTxt(helptxt)
logging.debug(f'lines: {lines}')
self.world.printHilfe(lines)
generalHelp = False
if generalHelp:
if command == 'befehle':
self.world.printBefehle()
else:
self.world.printText('hilfe')
def baueHilfedatei(self, key):
return f'ascii/hilfe/cmd-{key}.txt'
def findHilfetext(self, command):
logging.debug(f'suche Hilfetext zu {command}')
for cmdid in range(0,len(self.world.befehle)):
if str(cmdid) in self.world.befehle:
befehl = self.world.befehle[str(cmdid)]
logging.debug(f'cmdid= {cmdid}')
logging.debug(f'vergleiche {befehl.name.lower()} mit {command.lower()}')
if befehl.name.lower() == command.lower():
logging.debug(f'gefundener Befehl: {befehl.name}')
return self.baueHilfedatei(befehl.key)
return None

View File

@@ -19,11 +19,11 @@ class TestModule:
def testOeffneTruhe(self): def testOeffneTruhe(self):
logging.debug('===== Beginn Testmodul Truhe =====') logging.debug('===== Beginn Testmodul Truhe =====')
pcmd = self.parseInput('nimm Truhe')
#Auf den Dachboden #Auf den Dachboden
self.ac.rauf() self.ac.rauf()
self.schrittzaehler += 1 self.schrittzaehler += 1
pcmd = self.parseInput('nimm Truhe')
self.ac.nimm(pcmd) self.ac.nimm(pcmd)
self.schrittzaehler += 1 self.schrittzaehler += 1
@@ -44,7 +44,6 @@ class TestModule:
self.ac.untersuche(pcmd) self.ac.untersuche(pcmd)
self.schrittzaehler += 1 self.schrittzaehler += 1
self.debug(f'Ausgänge: {self.world.aktuellerRaum.ausgaenge}')
# In den Keller # In den Keller
self.ac.runter() self.ac.runter()
self.schrittzaehler += 1 self.schrittzaehler += 1
@@ -147,8 +146,6 @@ class TestModule:
self.testTeich() self.testTeich()
logging.debug('===== Beginn Testmodul Stier =====') logging.debug('===== Beginn Testmodul Stier =====')
pcmd = self.parseInput('nimm Fisch')
self.ac.nimm(pcmd)
# zum Bach # zum Bach
self.ac.west() self.ac.west()
@@ -358,3 +355,101 @@ class TestModule:
self.ac.ost() self.ac.ost()
self.schrittzaehler += 1 self.schrittzaehler += 1
def testKlippe(self):
self.testInsel()
logging.debug('===== Beginn Testmodul Klippe =====')
pcmd = self.parseInput('entzünde Fackel')
self.ac.entzuende(pcmd)
self.schrittzaehler += 1
#Loch
self.ac.runter()
self.schrittzaehler += 1
pcmd = self.parseInput('nimm Schwimmweste')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
# Insel
self.ac.rauf()
self.schrittzaehler += 1
# Palme
self.ac.rauf()
self.schrittzaehler += 1
# Insel
self.ac.runter()
self.schrittzaehler += 1
#Beiboot
self.ac.ost()
self.schrittzaehler += 1
#Boot
self.ac.rauf()
self.schrittzaehler += 1
#klippe
self.ac.nord()
self.schrittzaehler += 1
pcmd = self.parseInput('benutze Schwimmweste')
self.ac.benutze(pcmd)
self.schrittzaehler += 1
#Wasser
pcmd = self.parseInput('spring')
self.ac.spring(pcmd)
self.schrittzaehler += 1
def testStatue(self):
self.testKlippe()
#Strand
self.ac.sued()
self.schrittzaehler += 1
#Wald
self.ac.ost()
self.schrittzaehler += 1
#Statue
self.ac.nord()
self.schrittzaehler += 1
#Kopf
self.ac.rauf()
self.schrittzaehler += 1
pcmd = self.parseInput('untersuche Kopf')
self.ac.untersuche(pcmd)
self.schrittzaehler += 1
pcmd = self.parseInput('nimm Diamant')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
#Statue
self.ac.runter()
self.schrittzaehler += 1
def testMauer(self):
self.testStatue()
# Mauer
self.ac.ost()
pcmd = self.parseInput('untersuche Mauer')
self.ac.untersuche(pcmd)
pcmd = self.parseInput('benutze Diamant')
self.ac.benutze(pcmd)
#Grab
self.ac.sued()

View File

@@ -15,12 +15,33 @@ class World:
def clearScreen(self): def clearScreen(self):
self.stdscr.clear() self.stdscr.clear()
def printAbout(self):
s = self.stdscr
self.clearScreen()
s.addstr(1,0,'Das Grab des Azteken', curses.color_pair(2))
s.addstr(2,0,f'Version {self.VERSION}')
self.waitForCR()
def printText(self,textid): def printText(self,textid):
self.clearScreen() self.clearScreen()
self.stdscr.addstr(1,0,self.texte[textid].name) self.stdscr.addstr(1,0,self.texte[textid].name)
self.waitForCR() self.waitForCR()
self.printRaum() self.printRaum()
def printHilfe(self,lines):
self.clearScreen()
s = self.stdscr
s.addstr(1,0, lines[0])
s.addstr(3,0, lines[2], curses.color_pair(2)) # Befehl
s.addstr(4,0, lines[3]) #Parameter
s.addstr(5,0, lines[4]) # siehe auch
s.addstr(8,0, lines[7]) #Text 1
s.addstr(9,0, lines[8]) #Text 2
if len(lines) == 10 :
s.addstr(10,0, lines[9]) #Text 3
self.waitForCR()
def printKarte(self): def printKarte(self):
self.clearScreen() self.clearScreen()
s = self.stdscr s = self.stdscr
@@ -99,7 +120,9 @@ class World:
def fortschritt(self): def fortschritt(self):
anz_raeume, anz_entdeckt = self.zaehleRaeume() anz_raeume, anz_entdeckt = self.zaehleRaeume()
return round((anz_entdeckt/anz_raeume) *100,2) progress = round((anz_entdeckt/anz_raeume) *100,2)
logging.debug(f'anz_raeume={anz_raeume}, entdeckt={anz_entdeckt}, progress={progress}')
return progress
def printRaum(self): def printRaum(self):
raum = self.aktuellerRaum raum = self.aktuellerRaum
@@ -169,6 +192,7 @@ class World:
return raum return raum
return None return None
def sucheRaumName(self,name): def sucheRaumName(self,name):
if name == None: if name == None:
return self.aktuellerRaum return self.aktuellerRaum
@@ -214,6 +238,7 @@ class World:
logging.debug(f'item.raumid={item.raumid}') logging.debug(f'item.raumid={item.raumid}')
logging.debug(f'findItemInAktuellerRaum() {itemname} - {item.name}') logging.debug(f'findItemInAktuellerRaum() {itemname} - {item.name}')
if item.raumid == raum.id and item.name.lower() == itemname.lower(): if item.raumid == raum.id and item.name.lower() == itemname.lower():
logging.debug(f'return {item.name}')
return item return item
logging.debug(f'Item {itemname} nicht im aktuellen Raum gefunden') logging.debug(f'Item {itemname} nicht im aktuellen Raum gefunden')
@@ -240,6 +265,16 @@ class World:
return person return person
return None return None
def findPersonById(self,persid):
for id in self.personen:
person = self.personen[id]
if person.id == persid:
return person
return None
def findPersonImAktuellenRaumById(self, personid): def findPersonImAktuellenRaumById(self, personid):
raum = self.aktuellerRaum raum = self.aktuellerRaum
@@ -372,7 +407,9 @@ class World:
self.WEST = '3' self.WEST = '3'
self.RAUF = '4' self.RAUF = '4'
self.RUNTER = '5' self.RUNTER = '5'
self.VERSION = '0.5'
self.VERSION = '0.91'
self.ITEM_TISCH = '1' self.ITEM_TISCH = '1'
self.ITEM_LEITER = '2' self.ITEM_LEITER = '2'
self.ITEM_TRUHE = '3' self.ITEM_TRUHE = '3'
@@ -383,18 +420,17 @@ class World:
self.ITEM_NACHTSCHRANK = '8' self.ITEM_NACHTSCHRANK = '8'
self.ITEM_KLEINER_SCHLUESSEL = '9' self.ITEM_KLEINER_SCHLUESSEL = '9'
self.ITEM_JACKE = '10' self.ITEM_JACKE = '10'
self.ITEM_SCHWERT = '11'
self.ITEM_SEIL = '12' self.ITEM_SEIL = '12'
self.ITEM_HAUSTUERSCHLUESSEL = '13' self.ITEM_HAUSTUERSCHLUESSEL = '13'
self.ITEM_RANKGITTER = '14' self.ITEM_RANKGITTER = '14'
self.ITEM_PLANKE = '15' self.ITEM_PLANKE = '15'
self.ITEM_TEICH = '16' self.ITEM_TEICH = '16'
self.ITEM_FISCH = '17' self.ITEM_FISCH = '17'
self.ITEM_SCHWERT = '18'
self.ITEM_BOXSACK = '19' self.ITEM_BOXSACK = '19'
self.ITEM_MAUS = '20' self.ITEM_MAUS = '20'
self.ITEM_BOHNENRANKE = '21' self.ITEM_BOHNENRANKE = '21'
self.ITEM_ELEFANT = '22' self.ITEM_ELEFANT = '22'
self.ITEM_HAFEN = '23'
self.ITEM_GATTER = '25' self.ITEM_GATTER = '25'
self.ITEM_SCHACHTEL = '26' self.ITEM_SCHACHTEL = '26'
self.ITEM_KARTE = '27' self.ITEM_KARTE = '27'
@@ -403,10 +439,14 @@ class World:
self.ITEM_SCHWIMMWESTE = '30' self.ITEM_SCHWIMMWESTE = '30'
self.ITEM_KABINE = '31' self.ITEM_KABINE = '31'
self.ITEM_BEIBOOT = '32' self.ITEM_BEIBOOT = '32'
self.ITEM_DIAMANT = '33' self.ITEM_DIAMANT = '38'
self.ITEM_SOCKEL = '34'
self.ITEM_PALME = '40' self.ITEM_PALME = '40'
self.ITEM_LOCH = '41' self.ITEM_SOCKEL = '41'
self.ITEM_KOPF = '42'
self.ITEM_MAUER = '43'
self.ITEM_LOCH = '44'
self.ITEM_PLAKETTE = '45'
self.ITEM_KUEHLSCHRANK = '46'
# Räume # Räume

View File

@@ -2,6 +2,7 @@ import xml.etree.ElementTree as ET
from data.Raum import Raum, Befehl, Adjektiv,Gegenstand,Person,TextNode from data.Raum import Raum, Befehl, Adjektiv,Gegenstand,Person,TextNode
import io import io
import logging import logging
from ConfigError import ConfigError
class WorldParser(): class WorldParser():
@@ -17,6 +18,30 @@ class WorldParser():
self.world = world self.world = world
self.textCount = 0 self.textCount = 0
def check(self):
for itemid in self.world.gegenstaende:
item = self.world.gegenstaende[itemid]
textid = 'item-'+ itemid
if textid in self.world.texte:
pass
else:
logging.error(f'keine Beschreibung für Item {itemid} - {item.name}')
raise ValueError('Text ' +textid + ' fehlt')
for raumid in self.world.raumliste:
raum = self.world.raumliste[raumid]
textid = 'raum-' +raumid
if textid in self.world.raumliste:
pass
else:
logging.warn(f' keine Beschreibung für Raum {raumid} - {raum.name}')
def parseWorld(self,filename): def parseWorld(self,filename):
tree = ET.parse(filename) tree = ET.parse(filename)
@@ -69,6 +94,9 @@ class WorldParser():
key = befehl.attrib['key'] key = befehl.attrib['key']
command = Befehl(name,id,key) command = Befehl(name,id,key)
if id in self.world.befehle:
raise ValueError(f'doppelte Befehl-Id {id}')
self.world.befehle[id] = command self.world.befehle[id] = command
# Adjektive # Adjektive
for adj in root.findall('adjektive/adjektiv'): for adj in root.findall('adjektive/adjektiv'):
@@ -123,6 +151,9 @@ class WorldParser():
gegenstand.pickupmsg = msgid gegenstand.pickupmsg = msgid
# logging.debug('Item ' + gegenstand.name + ' - Pickup: ' + gegenstand.pickupmsg) # logging.debug('Item ' + gegenstand.name + ' - Pickup: ' + gegenstand.pickupmsg)
if id in self.world.gegenstaende:
raise ValueError(f'dopplete Item-Id {id}')
self.world.gegenstaende[id] = gegenstand self.world.gegenstaende[id] = gegenstand
# Personen # Personen
@@ -144,6 +175,8 @@ class WorldParser():
textnode = TextNode(id,item.text) textnode = TextNode(id,item.text)
self.world.texte[id] = textnode self.world.texte[id] = textnode
self.check()

11
ascii/hilfe/cmd-0.txt Normal file
View File

@@ -0,0 +1,11 @@
Hilfeseite
Befehl: ende, quit
Parameter: -keine
siehe auch:
Beendet das Programm.

14
ascii/hilfe/cmd-1.txt Normal file
View File

@@ -0,0 +1,14 @@
Hilfeseite
Befehl: geh, gehe
Parameter: Richtung, Objekt
siehe auch: süd, nord, west, ost
geht in die angegebene Richtung oder das Objekt. Ist der Ausgang in die Richtung frei, landest du
im nächsten Raum.
mögliche Richtungen sind: Nord, Ost, Süd, West, Rauf und Runter

9
ascii/hilfe/cmd-10.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: runter
Parameter: -keiner-
siehe auch: gehe,klettere
Geht runter, sofern dort ein Ausgang ist.

9
ascii/hilfe/cmd-12.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: inventar
Parameter: -keiner-
siehe auch:
Listet die Gegenstände im Inventar auf.

9
ascii/hilfe/cmd-13.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: about
Parameter: -keiner-
siehe auch:
Git Informationen zum Programm.

9
ascii/hilfe/cmd-14.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: verliere
Parameter: Objekt
siehe auch: nimm
entfernt einen Gegenstand aus dem Inventar und legt ihn im aktuellen Raum ab.

9
ascii/hilfe/cmd-15.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: warte
Parameter: -keiner
siehe auch:
Tut nix.

9
ascii/hilfe/cmd-16.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: drücke
Parameter: Gegenstand
siehe auch:
Drückt auf einen Gegenstand imInventar oder aktuellen Raum.

9
ascii/hilfe/cmd-17.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: ziehe
Parameter: Objekt
siehe auch: drücke
Zieht an einem Objekt im Inventar oder aktuellen Raum.

9
ascii/hilfe/cmd-19.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: stelle, stell
Parameter: Objekt
siehe auch:
Stellt ein Objekt im Inventar ab.

12
ascii/hilfe/cmd-2.txt Normal file
View File

@@ -0,0 +1,12 @@
Hilfeseite
Befehl: nimm
Parameter: Objekt
siehe auch:
Nimmt einen Gegenstand im aktuellen Raum auf und verstaut ihn in deinem Inventar.
Hinweis: Einge Gegenstände können nicht mitgenommen werden.

10
ascii/hilfe/cmd-20.txt Normal file
View File

@@ -0,0 +1,10 @@
Hilfeseite
Befehl: öffne
Parameter: Objekt
siehe auch: nimm
Öffnet einen Behälter oder eine Tür.
Der Gegenstand muss sich im Inventar oder aktuellen Raum befinden.

11
ascii/hilfe/cmd-21.txt Normal file
View File

@@ -0,0 +1,11 @@
Hilfeseite
Befehl: klettere
Parameter: Objekt
siehe auch: rauf, runter
Klettert an einem Gegenstand rauf oder runter.
Der Gegenstand muss sich im aktuellen Raum befinden.
Hinweis: Manchmal muss der Gegenstand erst kletterbar gemacht werden.

10
ascii/hilfe/cmd-22.txt Normal file
View File

@@ -0,0 +1,10 @@
Hilfeseite
Befehl: fange
Parameter: Person
siehe auch:
Fängt die angebene Person. Möglicherweise benötigst du einen weiteren
Gegenstand zum Fangen.

9
ascii/hilfe/cmd-23.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: hilfe
Parameter: Befehl
siehe auch:
Zeigt Hilfe zu einem Befehl an.

10
ascii/hilfe/cmd-24.txt Normal file
View File

@@ -0,0 +1,10 @@
Hilfeseite
Befehl: schlage, boxe
Parameter: Genstand
siehe auch:
Schlägt auf einen Gegenstand im aktuellen Raum.
Achte darauf, wen oder was du schlägst!

10
ascii/hilfe/cmd-25.txt Normal file
View File

@@ -0,0 +1,10 @@
Hilfeseite
Befehl: sprich
Parameter: Person
siehe auch:
Spricht eine Person im aktuellen Raum an. Dadurch könntest du an spielentscheidende
Informationen kommen.

9
ascii/hilfe/cmd-26.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: leere
Parameter: Gegenstand
siehe auch:
Leert einen Gegenstand im Inventar bzw. schüttet seinen Inhalt aus.

9
ascii/hilfe/cmd-27.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: fülle, fuelle
Parameter: Gegenstand
siehe auch:
Füllt einen Gegenstand im Inventar. Das einzufüllende Material muss im aktuellen Raum vorhanden sein.

9
ascii/hilfe/cmd-28.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: wirf
Parameter: Gegenstand
siehe auch:
Wirft einen Gegenstand im Inventar.

9
ascii/hilfe/cmd-29.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: gib
Parameter: Gegenstand
siehe auch:
Gibt einen Gegenstand aus dem Inventar an eine Person im aktuellen Raum.

13
ascii/hilfe/cmd-3.txt Normal file
View File

@@ -0,0 +1,13 @@
Hilfeseite
Befehl: untersuche,schaue
Parameter: Objekt
siehe auch:
Gibt dir eine genauere Beschreibung eines Gegenstands. Der Gegenstand muss sich in deinem Inventar
oder im aktuellen Raum befinden.
Hinweis: Lässt du das Objekt weg, gibt es eine Beschreibung des aktuellen Raums.

9
ascii/hilfe/cmd-30.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: entzünde
Parameter: Gegenstand
siehe auch:
Entzündet einenbrennbaren Gegestand aus dem Inventar. Feuer bedeutet Licht.

9
ascii/hilfe/cmd-31.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: lösche
Parameter: Gegenstand
siehe auch: entzünde
Löscht einen brennden Gegenstand im Inventar.

9
ascii/hilfe/cmd-32.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: spring
Parameter: -keiner-
siehe auch:
Springt in die Höhe oder über etwas rüber oder in etwas hinein.

9
ascii/hilfe/cmd-4.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: benutze
Parameter: Objekt
siehe auch:
Benutzt einen Gegenstand aus dem Inventar. Unter Umständen kann ein spezieller Gegenstand nur
in bestimmten Räumen benutzt werden.

9
ascii/hilfe/cmd-5.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: nord
Parameter: -keiner-
siehe auch: gehe
Geht nach Norden, sofern dort ein Ausgang ist.

9
ascii/hilfe/cmd-6.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: süd, süden
Parameter: -keiner-
siehe auch: gehe
Geht nach Süden, sofern dort ein Ausgang ist.

7
ascii/hilfe/cmd-7.txt Normal file
View File

@@ -0,0 +1,7 @@
Hilfeseite
Befehl: nord
Parameter: -keiner-
siehe auch: gehe
Geht nach Norden, sofern dort ein Ausgang ist.

9
ascii/hilfe/cmd-8.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: west, westen
Parameter: -keiner-
siehe auch: gehe
Geht nach Westen, sofern dort ein Ausgang ist.

9
ascii/hilfe/cmd-9.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: rauf
Parameter: -keiner-
siehe auch: gehe, klettere
Geht rauf, sofern dort ein Ausgang ist.

View File

@@ -83,6 +83,8 @@ class Gegenstand(SuperNode):
self.HAENGEND = 0 self.HAENGEND = 0
self.GELOESCHT = 0 self.GELOESCHT = 0
self.ENTZUENDED = 1 self.ENTZUENDED = 1
self.ANGEZOGEN = 1
self.zustand = self.GESCHLOSSEN self.zustand = self.GESCHLOSSEN
class Adjektiv(SuperNode): class Adjektiv(SuperNode):

Binary file not shown.

10
map.txt
View File

@@ -3,7 +3,7 @@
^ ^
| |
V V
Schlafzimmer<-->Flur Schlafzimmer<-->Flur<--> Küche
^ ^
| |
V V
@@ -11,10 +11,10 @@
^ ^
| |
V V
Bach<-->Teich Stall Bach<-->Teich
^ ^ ^
| | |
V V V
Wiese<------->Feld Wiese<------->Feld
^ ^ ^ ^
| | | |

19
tomb.py
View File

@@ -74,6 +74,8 @@ def verarbeiteBefehl(parsedCommand):
actionmodul.entzuende(parsedCommand) actionmodul.entzuende(parsedCommand)
elif id == '31': elif id == '31':
actionmodul.loesche(parsedCommand) actionmodul.loesche(parsedCommand)
elif id == '32':
actionmodul.spring(parsedCommand)
elif id == '-1': elif id == '-1':
world.fehler = 'Ich verstehe diesen Befehl nicht' world.fehler = 'Ich verstehe diesen Befehl nicht'
else: else:
@@ -126,6 +128,8 @@ def inputLoop(stdscr):
commandid = '0' commandid = '0'
elif debugcommand[1] == 'weg': elif debugcommand[1] == 'weg':
logging.debug(f'gelaufener Weg: {world.weg}') logging.debug(f'gelaufener Weg: {world.weg}')
elif debugcommand[1] == 'unvisited':
debug_NonVisited()
elif command.startswith('auto:'): elif command.startswith('auto:'):
command = command.rstrip() command = command.rstrip()
@@ -152,6 +156,12 @@ def inputLoop(stdscr):
testmodul.testHafen() testmodul.testHafen()
elif debugcommand[1] == 'insel': elif debugcommand[1] == 'insel':
testmodul.testInsel() testmodul.testInsel()
elif debugcommand[1] == 'klippe':
testmodul.testKlippe()
elif debugcommand[1] == 'statue':
testmodul.testStatue()
elif debugcommand[1] == 'mauer':
testmodul.testMauer()
world.fehler = '' world.fehler = ''
@@ -164,6 +174,15 @@ def inputLoop(stdscr):
verarbeiteBefehl(parsedCommand) verarbeiteBefehl(parsedCommand)
actionmodul.raumaction() actionmodul.raumaction()
def debug_NonVisited():
logging.debug('nicht entdeckte Räume:')
for raumid in world.raumliste:
raum = world.raumliste[raumid]
if not raum.entdeckt:
logging.debug(f'{raum.id} - {raum.name}')
def debug_Personen(): def debug_Personen():
logging.debug('Personen im aktuellen Raum') logging.debug('Personen im aktuellen Raum')

176
world.xml
View File

@@ -16,6 +16,7 @@
<raum id='3' name='Flur'> <raum id='3' name='Flur'>
<ausgang dir='Nord' nachRaum='1' /> <ausgang dir='Nord' nachRaum='1' />
<ausgang dir='West' nachRaum='4' /> <ausgang dir='West' nachRaum='4' />
<ausgang dir='Ost' nachRaum='43' />
<beschreibung> <beschreibung>
Du stehst in Flur vor der Eingangstür, die nach Süden ins Freie führt. Du stehst in Flur vor der Eingangstür, die nach Süden ins Freie führt.
Rechts von der Tür hängt ein abstraktes Bild, links steht eine Pflanze in einer Nische. Rechts von der Tür hängt ein abstraktes Bild, links steht eine Pflanze in einer Nische.
@@ -84,6 +85,7 @@
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='13' name='Wiese'> <raum id='13' name='Wiese'>
<ausgang dir='Nord' nachRaum= '42' />
<ausgang dir='Ost' nachRaum= '11' /> <ausgang dir='Ost' nachRaum= '11' />
<beschreibung> <beschreibung>
@@ -191,6 +193,7 @@
<raum id='30' name='Insel'> <raum id='30' name='Insel'>
<ausgang dir='Ost' nachRaum= '28' /> <ausgang dir='Ost' nachRaum= '28' />
<ausgang dir='Runter' nachRaum= '31' /> <ausgang dir='Runter' nachRaum= '31' />
<ausgang dir='Rauf' nachRaum= '41' />
<beschreibung> <beschreibung>
Auf der Insel wächst eine einzelne Palme. In Sand hat jemand ein großes Loch gegraben. Auf der Insel wächst eine einzelne Palme. In Sand hat jemand ein großes Loch gegraben.
@@ -209,13 +212,13 @@
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='33' name='Klippe'> <raum id='33' name='Klippe'>
<ausgang dir='Süd' nachRaum= '32' /> <ausgang dir='Sued' nachRaum= '32' />
<beschreibung> <beschreibung>
Das Boot liegt vor einer Klippe. Neben dieser ist ein Kiesstrand zu erkennen. Das Boot liegt vor einer Klippe. Neben dieser ist ein Kiesstrand zu erkennen.
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='34' name='Im Wasser'> <raum id='34' name='Im Wasser'>
<ausgang dir='Süd' nachRaum= '26' /> <ausgang dir='Sued' nachRaum= '35' />
<beschreibung> <beschreibung>
Du treibst im Wasser. Glücklicherweise hast du deine Rettungsweste an. Du treibst im Wasser. Glücklicherweise hast du deine Rettungsweste an.
</beschreibung> </beschreibung>
@@ -227,40 +230,65 @@
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='36' name='Wald'> <raum id='36' name='Wald'>
<ausgang dir='West' nachRaum= '37' /> <ausgang dir='West' nachRaum= '35' />
<ausgang dir='Nord' nachRaum= '37' />
<beschreibung> <beschreibung>
Ein alter, dichter Laubwald. Ein alter, dichter Laubwald.
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='37' name='Statue'> <raum id='37' name='Statue'>
<ausgang dir='Rauf' nachRaum= '38' /> <ausgang dir='Rauf' nachRaum= '38' />
<ausgang dir='Ost' nachRaum= '40' /> <ausgang dir='Ost' nachRaum= '39' />
<ausgang dir='Sued' nachRaum= '36' />
<beschreibung> <beschreibung>
Du stehst vor einer etwa 10m hohen Statue Du stehst vor einer etwa 10m hohen Statue
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='38' name='Auf dem Kopf der Statue'> <raum id='38' name='Auf dem Kopf der Statue'>
<ausgang dir='Rauf' nachRaum= '37' /> <ausgang dir='Runter' nachRaum= '37' />
<beschreibung> <beschreibung>
Nach einer kleinen Kletterpartie stehst du stehst auf dem Kopf der Statue. Nach einer kleinen Kletterpartie stehst du auf dem Kopf der Statue.
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='39' name='Mauer'> <raum id='39' name='Mauer'>
<ausgang dir='Ost' nachRaum= '37' />
<beschreibung> <beschreibung>
Du stehst vor einer Mauer. Du stehst vor einer Mauer.
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='40' name='Grabkammer'> <raum id='40' name='Grabkammer'>
<ausgang dir='Nord' nachRaum= '38' /> <ausgang dir='Nord' nachRaum= '39' />
<beschreibung> <beschreibung>
Das Grab des Azteken. Du bist am Ziel. Das Grab des Azteken. Du bist am Ziel.
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='41' name='Palme'>
<ausgang dir='Runter' nachRaum= '30' />
<beschreibung>
Du stehst in der Krone der Palme. Du hast einen weiten, aber völlig uninformativen Ausblick.
Aber, du fühlst dich wie der König der Welt.
</beschreibung>
</raum>
<raum id='42' name='Stall'>
<ausgang dir='Sued' nachRaum= '13' />
<beschreibung>
Du stehst in einem leeren Pferdestall. Der Boden besteht aus festgestampfter Erde.
Am Tor ist eine Namenplakette angebracht.
</beschreibung>
</raum>
<raum id='43' name='Küche'>
<ausgang dir='West' nachRaum= '3' />
<beschreibung>
Du stehst in der Küche. In der Ecke steht ein Kühlschrank.
</beschreibung>
</raum>
</ebene> </ebene>
<commandset> <commandset>
<command name='quit' id='0' key='0' /> <command name='quit' id='0' key='0' />
<command name='ende' id='0' key='0' /> <command name='ende' id='43' key='0' />
<command name='geh' id='1' key='1' /> <command name='geh' id='1' key='1' />
<command name='gehe' id='27' key='1' /> <command name='gehe' id='27' key='1' />
<command name='nimm' id='2' key='2' /> <command name='nimm' id='2' key='2' />
@@ -278,10 +306,8 @@
<command name='verliere' id='15' key='14' /> <command name='verliere' id='15' key='14' />
<command name='warte' id='16' key='15' /> <command name='warte' id='16' key='15' />
<command name='drücke' id='17' key='16' /> <command name='drücke' id='17' key='16' />
<command name='ende' id='18' key='0' />
<command name='schaue' id='18' key='3' /> <command name='schaue' id='18' key='3' />
<command name='ziehe' id='19' key='17' /> <command name='ziehe' id='19' key='17' />
<command name='benutze' id='20' key='18' />
<command name='stelle' id='21' key='19' /> <command name='stelle' id='21' key='19' />
<command name='stell' id='22' key='19' /> <command name='stell' id='22' key='19' />
<command name='öffne' id='23' key='20' /> <command name='öffne' id='23' key='20' />
@@ -291,7 +317,7 @@
<command name='schlage' id='29' key='24' /> <command name='schlage' id='29' key='24' />
<command name='boxe' id='30' key='24' /> <command name='boxe' id='30' key='24' />
<command name='norden' id='31' key='5' /> <command name='norden' id='31' key='5' />
<command name='süd' id='32' key='7' /> <command name='süden' id='32' key='7' />
<command name='westen' id='33' key='8' /> <command name='westen' id='33' key='8' />
<command name='sprich' id='34' key='25' /> <command name='sprich' id='34' key='25' />
<command name='leere' id='35' key='26' /> <command name='leere' id='35' key='26' />
@@ -301,6 +327,7 @@
<command name='gib' id='39' key='29' /> <command name='gib' id='39' key='29' />
<command name='entzünde' id='40' key='30' /> <command name='entzünde' id='40' key='30' />
<command name='lösche' id='41' key='31' /> <command name='lösche' id='41' key='31' />
<command name='spring' id='42' key='32' />
</commandset> </commandset>
@@ -343,12 +370,10 @@
<item name='Planke' display='' id='15' raum='7' imobil='false' adjektiv = '0' msgid='3' visible='true' /> <item name='Planke' display='' id='15' raum='7' imobil='false' adjektiv = '0' msgid='3' visible='true' />
<item name='Teich' display='' id='16' raum='10' imobil='true' adjektiv = '0' msgid='2' visible='true' /> <item name='Teich' display='' id='16' raum='10' imobil='true' adjektiv = '0' msgid='2' visible='true' />
<item name='Fisch' display='' id='17' raum='10' imobil='false' adjektiv = '0' msgid='0' visible='false' /> <item name='Fisch' display='' id='17' raum='10' imobil='false' adjektiv = '0' msgid='0' visible='false' />
<item name='Schwert' display='' id='18' raum='-1' imobil='false' adjektiv = '0' msgid='1' visible='false' />
<item name='Boxsack' display='' id='19' raum='1' imobil='true' adjektiv = '0' msgid='1' visible='true' /> <item name='Boxsack' display='' id='19' raum='1' imobil='true' adjektiv = '0' msgid='1' visible='true' />
<item name='Maus' display='tote Maus' id='20' raum='12' imobil='false' adjektiv = '0' msgid='1' visible='true' /> <item name='Maus' display='tote Maus' id='20' raum='12' imobil='false' adjektiv = '0' msgid='1' visible='true' />
<item name='Bohnenranke' id='21' display='' raum='14' imobil='true' adjektiv = '0' msgid='8' visible='true' /> <item name='Bohnenranke' id='21' display='' raum='14' imobil='true' adjektiv = '0' msgid='8' visible='true' />
<item name='Elefant' id='22' display='' raum='15' imobil='true' adjektiv = '0' msgid='9' visible='true' /> <item name='Elefant' id='22' display='' raum='15' imobil='true' adjektiv = '0' msgid='9' visible='true' />
<item name='Hafen' id='23' display='' raum='21' imobil='true' adjektiv = '0' msgid='10' visible='true' />
<item name='Gatter' id='25' display='' raum='13' imobil='true' adjektiv = '0' msgid='11' visible='true' /> <item name='Gatter' id='25' display='' raum='13' imobil='true' adjektiv = '0' msgid='11' visible='true' />
<item name='Schachtel' id='26' display='' raum='24' imobil='false' adjektiv = '0' msgid='11' visible='false' /> <item name='Schachtel' id='26' display='' raum='24' imobil='false' adjektiv = '0' msgid='11' visible='false' />
<item name='Karte' id='27' display='' raum='24' imobil='false' adjektiv = '0' msgid='11' visible='false' /> <item name='Karte' id='27' display='' raum='24' imobil='false' adjektiv = '0' msgid='11' visible='false' />
@@ -359,9 +384,15 @@
<item name='Beiboot' id='32' display='' raum='25' imobil='false' adjektiv = '0' msgid='12' visible='true' /> <item name='Beiboot' id='32' display='' raum='25' imobil='false' adjektiv = '0' msgid='12' visible='true' />
<item name='Plakat' id='33' display='' raum='24' imobil='false' adjektiv='0' msgid='3' visible='true' /> <item name='Plakat' id='33' display='' raum='24' imobil='false' adjektiv='0' msgid='3' visible='true' />
<item name='Diamant' id='38' display='' raum='38' imobil='false' adjektiv='0' msgid='3' visible='false' /> <item name='Diamant' id='38' display='' raum='38' imobil='false' adjektiv='0' msgid='3' visible='false' />
<item name='Sockel' id='39' display='' raum='39' imobil='false' adjektiv='0' msgid='3' visible='false' />
<item name='Palme' id='40' display='' raum='30' imobil='true' adjektiv='0' msgid='8' visible='true' /> <item name='Palme' id='40' display='' raum='30' imobil='true' adjektiv='0' msgid='8' visible='true' />
<item name='Loch' id='41' display='' raum='30' imobil='true' adjektiv='0' msgid='8' visible='true' /> <item name='Sockel' id='41' display='' raum='39' imobil='true' adjektiv='0' msgid='8' visible='false' />
<item name='Mauer' id='43' display='' raum='39' imobil='true' adjektiv='0' msgid='8' visible='true' />
<item name='Kopf' id='42' display='' raum='38' imobil='true' adjektiv='0' msgid='12' visible='true' />
<item name='Loch' id='44' display='' raum='30' imobil='true' adjektiv='0' msgid='8' visible='true' />
<item name='Plakette' id='45' display='' raum='42' imobil='true' adjektiv='0' msgid='2' visible='true' />
<item name='Kühlschrank' id='46' display='' raum='43' imobil='true' adjektiv='0' msgid='2' visible='true' />
<item name='Uhr' id='47' display='' raum='43' imobil='true' adjektiv='0' msgid='2' visible='true' />
<item name='Schriftzug' id='48' display='' raum='39' imobil='true' adjektiv='0' msgid='2' visible='false' />
</items> </items>
<personen> <personen>
@@ -392,6 +423,42 @@
<text id='2'> <text id='2'>
In einer Schreibtischschublade findest du einen Schlüssel. In einer Schreibtischschublade findest du einen Schlüssel.
</text> </text>
<text id='item-1'>
Der Wohnzimmertisch ist leer.
</text>
<text id='item-2'>
Sie führt nach oben.
</text>
<text id='item-3'>
Eine massive Truhe aus Holz. Sie ist mit Eisenbändern verstärkt und besitzt ein kleines Schloss.
</text>
<text id='item-4'>
Audrey II
</text>
<text id='item-5'>
Eine einfache Tür.
</text>
<text id='item-6'>
Der Krug ist aus gebrannten und glasiertem Ton mit einem Henkel an der Seite.
</text>
<text id='item-7'>
Das Bett ist frisch bezogen.
</text>
<text id='item-8'>
Ein Schränkchen mit einer Schublade.
</text>
<text id='item-9'>
Ein ganz normaler Schlüssel. Er schimmert etwas bläulich.
</text>
<text id='item-10'>
Die Jacke ist aus rotem Leinenstoff genäht.
</text>
<text id='item-11'>
Für ein Schwert ist es relativ klein (könnte auch ein Brieföffner sein). Auf der Klinge ist das Wort "Stich" eingraviert.
</text>
<text id='item-12'>
Das Seil ist etwa 5m lang und könnte aus Garnfasern geflochten sein. Es ist stark genug, dein Gewicht zu tragen.
</text>
<text id='item-13'> <text id='item-13'>
Der Schlüssel schimmert etwas bläulich. Der Schlüssel schimmert etwas bläulich.
</text> </text>
@@ -413,6 +480,10 @@
<text id='item-20'> <text id='item-20'>
Die ist mausetot. Die ist mausetot.
</text> </text>
<text id='item-21'>
Ein Bohnengewächs der märchenhaften Gattung vigna hans in beatitudinem.
Sie ist etwas mickrig und braucht Pflege.
</text>
<text id='item-21-0'> <text id='item-21-0'>
Ein Bohnengewächs der märchenhaften Gattung vigna hans in beatitudinem. Ein Bohnengewächs der märchenhaften Gattung vigna hans in beatitudinem.
Sie ist etwas mickrig und braucht Pflege. Sie ist etwas mickrig und braucht Pflege.
@@ -428,13 +499,32 @@
<text id='item-22'> <text id='item-22'>
Der Elefantbulle ist mindestens fünf Meter größer als du und hat zwei beeindruckende Stoßzähne. Er versperrt den Ausgang. Der Elefantbulle ist mindestens fünf Meter größer als du und hat zwei beeindruckende Stoßzähne. Er versperrt den Ausgang.
</text> </text>
<text id='item-25'>
Das Gatter ist im südlichen Teil der Wiesenumzäunung angebracht.
</text>
<text id='item-26'> <text id='item-26'>
Eine einfache Schachtel aus Pappe. Jemand hat "Eigentum von Henry" auf die Oberseite geschrieben. Eine einfache Schachtel aus Pappe. Jemand hat "Eigentum von Henry" auf die Oberseite geschrieben.
</text> </text>
<text id='item-27'>
Dies ist die Karte von der Henry die erzählt hat.
</text>
<text id='item-28'> <text id='item-28'>
Das Segelboot besitzt einen weißen Rumpf und ein schwarzes Dreieckssegel. Am Heck steht keine Name geschrieben, dafür ist eine schwarze Perle Das Segelboot besitzt einen weißen Rumpf und ein schwarzes Dreieckssegel. Am Heck steht keine Name geschrieben, dafür ist eine schwarze Perle
aufgemalt. aufgemalt.
</text> </text>
<text id='item-29'>
Die Fackel hättest du schon eher brauchen können.
</text>
<text id='item-30'>
Eine orangefarbene Rettungsweste, die dir im Wasser genügend Auftrieb verleiht. Solltest du auf einen Eisberg treffen, bist
du in Sicherheit.
</text>
<text id='item-31'>
Die Luft ist abgestanden und durch das ungeputzte Bullauge dringt kaum Licht.
</text>
<text id='item-32'>
Mit dem Beiboot kann man durch flacheres Wasser fahren. Und, falls ein Eisberg...
</text>
<text id='item-33'> <text id='item-33'>
--------- ---------
| No | | No |
@@ -442,6 +532,38 @@
| Club | | Club |
---------- ----------
</text> </text>
<text id='item-38'>
Der Diamant ist oktaederförmig geschliffen und funkelt im Sonnenlicht.
</text>
<text id='item-41'>
Der Sockel dient seiner Form nach zur Aufnahme eines achtseitigen Gegenstands.
</text>
<text id='item-40'>
Eine einzelne Palme. Irgendwer hat die Kokosnuss geklaut.
</text>
<text id='item-42'>
Der Kopf repräsentiert einen dir unbekannten Mann, der würdevoll über seine linke Schulter schaut.
</text>
<text id='item-43'>
Die Mauer wurde scheinbar vor ewigen Zeiten aus getrockneten Lehmziegel errichtet und die Fugen
anschlißend mit Lehm verputzt.
</text>
<text id='item-44'>
Ein in den Sand gegrabenes Loch.
</text>
<text id='item-45'>
Horst.
Der Pferd heisst Horst.
</text>
<text id='item-46'>
Wie überraschend, er ist weiß.
</text>
<text id='item-47'>
Die Uhr ist bei 22:04 Uhr stehen geblieben.
</text>
<text id='item-48'>
Über die ganze Wand hat jemand "Romanum ite domum" gepinselt.
</text>
<text id='raum-21'> <text id='raum-21'>
Im Tunnel ist es zu dunkel, um etwas zu sehen. Aber du spürst einen leichten Wind, der von Osten durch den Tunnel weht. Im Tunnel ist es zu dunkel, um etwas zu sehen. Aber du spürst einen leichten Wind, der von Osten durch den Tunnel weht.
</text> </text>
@@ -451,6 +573,12 @@
<text id='raum-31-1'> <text id='raum-31-1'>
Im Licht der Fackel erkennst du, dass das Loch sorgfältig gegraben und mit Schiffsplanken abgestützt wurde. Im Licht der Fackel erkennst du, dass das Loch sorgfältig gegraben und mit Schiffsplanken abgestützt wurde.
</text> </text>
<text id='raum-43'>
Eine praktisch eingerichtete Küche. An der Wand hängt eine Uhr, ein Kühlschrank steht gegenüber der Tür.
</text>
<text id='npc-5'>
Muuuh.
</text>
<text id='npc-6'> <text id='npc-6'>
Der Zwerg klappert vor Kälte mit den Zähnen und kann nicht sprechen. Der Zwerg klappert vor Kälte mit den Zähnen und kann nicht sprechen.
</text> </text>
@@ -459,6 +587,12 @@
der Oberkörper ist frei. der Oberkörper ist frei.
Er scheint offensichtlich zu frieren. Er scheint offensichtlich zu frieren.
</text> </text>
<text id='zuul'>
*** * * * * *
* * * * * *
* * * * * *
**** ***** ***** *****
</text>
<text id='hilfe'> <text id='hilfe'>
Das Grab des Azteken ist ein klassisches Textadventure. Das Grab des Azteken ist ein klassisches Textadventure.
Es ist eine Adaption des gleichnamigen Adventures auf dem C64. Es ist eine Adaption des gleichnamigen Adventures auf dem C64.
@@ -467,7 +601,7 @@
Die Liste der möglichen Befehle erhälst du mit "hilfe befehle". Die Liste der möglichen Befehle erhälst du mit "hilfe befehle".
Die Aufgabe gibt dir jemand im Spiel. Die Aufgabe gibt dir jemand im Spiel.
</text> </text>
<text id='geist'> <text id='npc-4'>
Ich bin der Geist deines Großonkels Henry. Mein ganzes Leben habe ich damit verbracht, das Himmelsgrab der Azteken zu finden, wie zuvor Ich bin der Geist deines Großonkels Henry. Mein ganzes Leben habe ich damit verbracht, das Himmelsgrab der Azteken zu finden, wie zuvor
mein Vater. mein Vater.
Leider erfolglos. Die Karte, die ich mir mühsam aus Hinweisen erstellt hatte, wurde mir von einem hinterlistigen Zwerg entwendet. Leider erfolglos. Die Karte, die ich mir mühsam aus Hinweisen erstellt hatte, wurde mir von einem hinterlistigen Zwerg entwendet.
@@ -483,5 +617,15 @@
<text id='jackewurf'> <text id='jackewurf'>
Der Stier ist völlig fasziniert, als du die Jacke hin und herschwenkst. Als du sie nach Osten wirfst, schaubt er einmal auf und rennt hinter her. Der Stier ist völlig fasziniert, als du die Jacke hin und herschwenkst. Als du sie nach Osten wirfst, schaubt er einmal auf und rennt hinter her.
</text> </text>
<text id='graböffnung'>
Also du den Diamant in den Sockel setzt, schiebt sich ein Teil der Mauer knirschend nach hinten und gibt einen Durchgang frei. Staubige Luft
quillt dir entgegen.
</text>
<text id='victory'>
Henry erscheint und sagt:
"Es war sehr beeindruckend, deine Suche zu verfolgen. Du hast meine Aufgabe erfolgreich zu Ende geführt."
"Endlich kann ich meine Frieden finden."
</text>
</texte> </texte>
</welt> </welt>